# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Maintainer: Naveen M K <naveen521kk@gmail.com>
# Contributor: Saul Ibarra Corretge <saghul@gmail.com>
# Contributor: Frode Solheim <frode@fs-uae.net>

_primary_python="yes"
_pybasever=3.13
_realname=python

if [[ "${_primary_python}" == "yes" ]]; then
  pkgbase="mingw-w64-${_realname}"
  pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
  provides=("${MINGW_PACKAGE_PREFIX}-python3"
            "${MINGW_PACKAGE_PREFIX}-python${_pybasever}")
  conflicts=("${MINGW_PACKAGE_PREFIX}-python3"
             "${MINGW_PACKAGE_PREFIX}-python${_pybasever}"
            "${MINGW_PACKAGE_PREFIX}-python2<2.7.16-7")
  replaces=("${MINGW_PACKAGE_PREFIX}-python3"
            "${MINGW_PACKAGE_PREFIX}-python${_pybasever}")
else
  pkgbase="mingw-w64-${_realname}${_pybasever}"
  pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}${_pybasever}")
fi
pkgver=${_pybasever}.11
pkgrel=4
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
license=('spdx:PSF-2.0')
url="https://www.python.org/"
msys2_repository_url="https://github.com/python/cpython"
msys2_references=(
  "cpe: cpe:/a:python:python"
  "cpe: cpe:/a:python_software_foundation:python"
)
depends=("${MINGW_PACKAGE_PREFIX}-cc-libs"
         "${MINGW_PACKAGE_PREFIX}-expat"
         "${MINGW_PACKAGE_PREFIX}-bzip2"
         "${MINGW_PACKAGE_PREFIX}-libffi"
         "${MINGW_PACKAGE_PREFIX}-mpdecimal"
         "${MINGW_PACKAGE_PREFIX}-ncurses"
         "${MINGW_PACKAGE_PREFIX}-openssl"
         "${MINGW_PACKAGE_PREFIX}-sqlite3"
         "${MINGW_PACKAGE_PREFIX}-tcl"
         "${MINGW_PACKAGE_PREFIX}-tk"
         "${MINGW_PACKAGE_PREFIX}-zlib"
         "${MINGW_PACKAGE_PREFIX}-libb2"
         "${MINGW_PACKAGE_PREFIX}-xz"
         "${MINGW_PACKAGE_PREFIX}-tzdata")
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-autotools"
  "autoconf-archive"
)
#options=('debug' '!strip')
source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"
        "EXTERNALLY-MANAGED"
        0001-build-add-with-nt-threads-and-make-it-default-on-min.patch
        0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch
        0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch
        0004-configure-add-MACHDEP-and-platform-on-MINGW.patch
        0005-build-Add-default-cross-configuration-for-MINGW.patch
        0006-configure-enable-largefile-support-by-default-for-Mi.patch
        0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch
        0008-build-add-MINGW-support-for-posixmodule.patch
        0009-exports.h-Add-support-for-MINGW.patch
        0010-configure-add-options-so-that-shared-build-is-possib.patch
        0011-build-Add-PYD_PLATFORM_TAG.patch
        0012-build-Add-dynload_win-support-for-MinGW.patch
        0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch
        0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch
        0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch
        0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch
        0017-socketmodule-add-MINGW-support.patch
        0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch
        0019-sysconfig-make-_sysconfigdata.py-relocatable.patch
        0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch
        0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch
        0022-build-semi-native-build-sysconfig.patch
        0023-ctypes-Add-support-for-stdcall-without-underscore.patch
        0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch
        0025-ctypes-find_library-c-should-return-None-with-ucrt.patch
        0026-site-Customize-for-MINGW.patch
        0027-site-Change-user-site-packages-path-to-include-the-e.patch
        0028-python-config-output-Windows-paths-for-the-shell-var.patch
        0029-python-config-use-the-Python-variant-of-python-confi.patch
        0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch
        0031-build-Remove-MAXPATHLEN-default.patch
        0032-build-dont-link-with-gettext.patch
        0033-use-gnu_printf-in-format.patch
        0034-build-remove-usage-of-MS_COREDLL.patch
        0035-getcompiler-expose-MINGW-toolchain-related-informati.patch
        0036-build-fix-signal-module-build.patch
        0037-build-build-winconsoleio-and-_testconsole.patch
        0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch
        0039-Use-cygpty-while-using-isatty.patch
        0040-build-link-win-resource-files-and-build-pythonw.patch
        0041-pycore_fileutils-add-MINGW-support.patch
        0042-configure-fix-inet_pton-check.patch
        0043-importlib-bootstrap-path-sep.patch
        0044-configure-set-MINGW-stack-reserve.patch
        0045-tests-fix-test_bytes.patch
        0046-timemodule-add-MINGW-support.patch
        0047-configure-Disable-checks-for-dlopen-dlfcn.patch
        0048-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch
        0049-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch
        0050-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch
        0051-configure-don-t-check-for-clock_-functions.patch
        0052-CI-test-the-build-and-add-some-mingw-specific-tests.patch
        0053-configure-Default-to-without-c-locale-coercion-on-Wi.patch
        0054-tests-Fix-some-failing-tests.patch
        0055-build-def-VPATH-when-compiling-Python-sysmodule.c.patch
        0056-configure-correctly-find-native-python.patch
        0057-build-Add-extra-flags-for-_bootstrap_python.patch
        0058-getpath-add-support-for-mingw.patch
        0059-build-Don-t-build-_posixsubprocess-on-Windows.patch
        0060-ssl-module-add-MINGW-support.patch
        0061-configure-Include-winsock.h-when-checking-for-netdb-.patch
        0062-configure-always-build-_multiprocessing-on-Windows.patch
        0063-configure-build-mmap-module-on-win32.patch
        0064-configure-set-BUILDEXEEXT-and-EXEEXT.patch
        0065-configure-fix-building-some-test-modules.patch
        0066-Always-convert-to-before-passing-though-pathcch-func.patch
        0067-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch
        0068-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch
        0069-dynload_win-Port-GetPythonImport-to-MINGW.patch
        0070-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch
        0071-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch
        0072-build-Build-and-install-libpython3.dll-stable-ABI.patch
        0073-configure-define-_DEBUG-for-a-debug-build.patch
        0074-configure-fix-multiprocessing-module.patch
        0075-build-add-MINGW-support-for-selectmodule.patch
        0076-configure-disable-various-modules-on-MINGW.patch
        0077-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch
        0078-configure-Enable-_uuid-on-MINGW.patch
        0079-configure-make-incompatible-pointer-types-a-warning.patch
        0080-tests-test_makefile-normalize-path.patch
        0081-Fix-include-naming-for-cross-build.patch
        0082-Fix-format-warning.patch
        0083-Fix-pragma-warnings.patch
        0084-math-pyhash-MINGW-support.patch
        0085-tests-Fix-test-for-library-name.patch
        0086-dictobject-MINGW-support.patch
        0087-build-Fix-export-Py_GetBuildInfo-symbol.patch
        0088-build-Allow-profile-tests-failure.patch
        0089-build-add-support-for-building-C-modules.patch
        0090-build-build-fix-the-wmi-module.patch
        0091-Fix-exports-for-_suggestions-module.patch
        0092-compileall-Normalize-paths.patch
        0093-configure-enable-64-bit-time-support-for-32-bit-buil.patch
        0094-configure-Work-around-broken-pc-file.patch
        0095-makesetup-make-sure-a-library-path-is-passed-when-bu.patch
        0096-venv-also-install-the-versioned-launchers.patch
        0097-configure-set-_WIN32_WINNT-version.patch
        0098-tests-fix-sysconfig.test_get_platform.patch
        0099-pycore_time-fix-missing-timeval.patch
        0100-mmapmodule-define-DONT_USE_SEH.patch
        0101-build-Add-ABIFLAGS-to-targets-when-needed.patch
        0102-getcompiler-include-GCC-in-sys.version-even-for-clan.patch
        0103-sysconfig-patch-nt-schemes-again.patch)

# Helper macros to help make tasks easier #
apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -Nbp1 -i "${srcdir}/${_patch}"
  done
}

prepare() {
  cd "${srcdir}/Python-${pkgver}"

 apply_patch_with_msg 0001-build-add-with-nt-threads-and-make-it-default-on-min.patch \
  0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch \
  0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch \
  0004-configure-add-MACHDEP-and-platform-on-MINGW.patch \
  0005-build-Add-default-cross-configuration-for-MINGW.patch \
  0006-configure-enable-largefile-support-by-default-for-Mi.patch \
  0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch \
  0008-build-add-MINGW-support-for-posixmodule.patch \
  0009-exports.h-Add-support-for-MINGW.patch \
  0010-configure-add-options-so-that-shared-build-is-possib.patch \
  0011-build-Add-PYD_PLATFORM_TAG.patch \
  0012-build-Add-dynload_win-support-for-MinGW.patch \
  0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch \
  0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch \
  0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch \
  0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch \
  0017-socketmodule-add-MINGW-support.patch \
  0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch \
  0019-sysconfig-make-_sysconfigdata.py-relocatable.patch \
  0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch \
  0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch \
  0022-build-semi-native-build-sysconfig.patch \
  0023-ctypes-Add-support-for-stdcall-without-underscore.patch \
  0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch \
  0025-ctypes-find_library-c-should-return-None-with-ucrt.patch \
  0026-site-Customize-for-MINGW.patch \
  0027-site-Change-user-site-packages-path-to-include-the-e.patch \
  0028-python-config-output-Windows-paths-for-the-shell-var.patch \
  0029-python-config-use-the-Python-variant-of-python-confi.patch \
  0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch \
  0031-build-Remove-MAXPATHLEN-default.patch \
  0032-build-dont-link-with-gettext.patch \
  0033-use-gnu_printf-in-format.patch \
  0034-build-remove-usage-of-MS_COREDLL.patch \
  0035-getcompiler-expose-MINGW-toolchain-related-informati.patch \
  0036-build-fix-signal-module-build.patch \
  0037-build-build-winconsoleio-and-_testconsole.patch \
  0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch \
  0039-Use-cygpty-while-using-isatty.patch \
  0040-build-link-win-resource-files-and-build-pythonw.patch \
  0041-pycore_fileutils-add-MINGW-support.patch \
  0042-configure-fix-inet_pton-check.patch \
  0043-importlib-bootstrap-path-sep.patch \
  0044-configure-set-MINGW-stack-reserve.patch \
  0045-tests-fix-test_bytes.patch \
  0046-timemodule-add-MINGW-support.patch \
  0047-configure-Disable-checks-for-dlopen-dlfcn.patch \
  0048-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch \
  0049-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch \
  0050-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch \
  0051-configure-don-t-check-for-clock_-functions.patch \
  0052-CI-test-the-build-and-add-some-mingw-specific-tests.patch \
  0053-configure-Default-to-without-c-locale-coercion-on-Wi.patch \
  0054-tests-Fix-some-failing-tests.patch \
  0055-build-def-VPATH-when-compiling-Python-sysmodule.c.patch \
  0056-configure-correctly-find-native-python.patch \
  0057-build-Add-extra-flags-for-_bootstrap_python.patch \
  0058-getpath-add-support-for-mingw.patch \
  0059-build-Don-t-build-_posixsubprocess-on-Windows.patch \
  0060-ssl-module-add-MINGW-support.patch \
  0061-configure-Include-winsock.h-when-checking-for-netdb-.patch \
  0062-configure-always-build-_multiprocessing-on-Windows.patch \
  0063-configure-build-mmap-module-on-win32.patch \
  0064-configure-set-BUILDEXEEXT-and-EXEEXT.patch \
  0065-configure-fix-building-some-test-modules.patch \
  0066-Always-convert-to-before-passing-though-pathcch-func.patch \
  0067-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch \
  0068-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch \
  0069-dynload_win-Port-GetPythonImport-to-MINGW.patch \
  0070-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch \
  0071-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch \
  0072-build-Build-and-install-libpython3.dll-stable-ABI.patch \
  0073-configure-define-_DEBUG-for-a-debug-build.patch \
  0074-configure-fix-multiprocessing-module.patch \
  0075-build-add-MINGW-support-for-selectmodule.patch \
  0076-configure-disable-various-modules-on-MINGW.patch \
  0077-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch \
  0078-configure-Enable-_uuid-on-MINGW.patch \
  0079-configure-make-incompatible-pointer-types-a-warning.patch \
  0080-tests-test_makefile-normalize-path.patch \
  0081-Fix-include-naming-for-cross-build.patch \
  0082-Fix-format-warning.patch \
  0083-Fix-pragma-warnings.patch \
  0084-math-pyhash-MINGW-support.patch \
  0085-tests-Fix-test-for-library-name.patch \
  0086-dictobject-MINGW-support.patch \
  0087-build-Fix-export-Py_GetBuildInfo-symbol.patch \
  0088-build-Allow-profile-tests-failure.patch \
  0089-build-add-support-for-building-C-modules.patch \
  0090-build-build-fix-the-wmi-module.patch \
  0091-Fix-exports-for-_suggestions-module.patch \
  0092-compileall-Normalize-paths.patch \
  0093-configure-enable-64-bit-time-support-for-32-bit-buil.patch \
  0094-configure-Work-around-broken-pc-file.patch \
  0095-makesetup-make-sure-a-library-path-is-passed-when-bu.patch \
  0096-venv-also-install-the-versioned-launchers.patch \
  0097-configure-set-_WIN32_WINNT-version.patch \
  0098-tests-fix-sysconfig.test_get_platform.patch \
  0099-pycore_time-fix-missing-timeval.patch \
  0100-mmapmodule-define-DONT_USE_SEH.patch \
  0101-build-Add-ABIFLAGS-to-targets-when-needed.patch \
  0102-getcompiler-include-GCC-in-sys.version-even-for-clan.patch \
  0103-sysconfig-patch-nt-schemes-again.patch
 
  autoreconf -vfi
}

build() {
  declare -a _extra_config
  if check_option "debug" "n"; then
    _extra_config+=("--enable-optimizations")
    # Upstream defaults to -O3, so we can do too
    CFLAGS+=" -O3"
    # FIXME: https://github.com/msys2-contrib/cpython-mingw/issues/10
    if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then
      _extra_config+=("--with-lto=full")
    fi
  else
    CFLAGS+=" -O0 -ggdb"
    CXXFLAGS+=" -O0 -ggdb"
    _extra_config+=("--with-pydebug")
  fi

  mkdir -p "${srcdir}/build-${MSYSTEM}" && cd "${srcdir}/build-${MSYSTEM}"

  ../Python-${pkgver}/configure \
    --prefix=${MINGW_PREFIX} \
    --host=${MINGW_CHOST} \
    --build=${MINGW_CHOST} \
    --enable-shared \
    --with-system-expat \
    --with-system-ffi \
    --with-system-libmpdec \
    --without-ensurepip \
    --enable-loadable-sqlite-extensions \
    --with-tzpath=${MINGW_PREFIX}/share/zoneinfo \
    "${_extra_config[@]}"

  make
}

check() {
  cd "${srcdir}/build-${MSYSTEM}"

  # Some basic tests to ensure nothing major or MSYS2 specific features are broken
  ./python.exe "../Python-${pkgver}/mingw_smoketests.py"
  MSYSTEM= ./python.exe "../Python-${pkgver}/mingw_smoketests.py"
}

package() {
  cd "${srcdir}/build-${MSYSTEM}"

  make -j1 install DESTDIR="${pkgdir}"

  # gdb pretty printers for debugging Python itself; to use:
  # python
  # sys.path.append('C:/msys64/mingw64/share/gdb/python3')
  # import python_gdb
  # reload(python_gdb)
  # end
  if [[ "${_primary_python}" == "yes" ]]; then
    [[ -d "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/ ]] || mkdir -p "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/
    cp -f python.exe-gdb.py "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/python_gdb.py
  fi

  # some useful "stuff"
  install -dm755 "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/{i18n,scripts}
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/i18n/
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/scripts/{README,*py} "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/scripts/

  # License
  install -Dm644 "${srcdir}/Python-${pkgver}/LICENSE" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}${_pybasever}/LICENSE"

  # PEP668
  install -Dm644 "${srcdir}/EXTERNALLY-MANAGED" -t "${pkgdir}${MINGW_PREFIX}/lib/python${_pybasever}/"

  # fixup shebangs
  for fscripts in idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do
    sed -e '1 { s|^#!.*$|#!/usr/bin/env python'"${_pybasever}"'.exe| }' -i "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts}
  done

  # default aliases for all scripts/binaries
  if [[ "${_primary_python}" == "yes" ]]; then
    # Default names are aliases for Python now
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe "${pkgdir}${MINGW_PREFIX}"/bin/python.exe
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe "${pkgdir}${MINGW_PREFIX}"/bin/pythonw.exe
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3-config "${pkgdir}${MINGW_PREFIX}"/bin/python-config
    cp "${pkgdir}${MINGW_PREFIX}"/bin/idle3 "${pkgdir}${MINGW_PREFIX}"/bin/idle
    cp "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 "${pkgdir}${MINGW_PREFIX}"/bin/pydoc
  fi

  # delete anything that could conflict with the primary Python
  if [[ "${_primary_python}" != "yes" ]]; then
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3-config
    rm "${pkgdir}${MINGW_PREFIX}"/bin/idle3
    rm "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3
    rm "${pkgdir}${MINGW_PREFIX}"/bin/libpython3.dll
    rm "${pkgdir}${MINGW_PREFIX}"/lib/libpython3.dll.a
    rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3-embed.pc
    rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3.pc
    rm "${pkgdir}${MINGW_PREFIX}"/share/man/man1/python3.1
  fi
}

sha256sums=('16ede7bb7cdbfa895d11b0642fa0e523f291e6487194d53cf6d3b338c3a17ea2'
            '3981fed74ee7d43ad69bd67e634e03d7bf6890558a87062380112e195688728a'
            'f22c1a80bdcb52c454f47faecad56a40b3605a0381d12f0d473a4620710dabcb'
            'f8bc3bdf1384ced7ad97ad91fc65851fff355324719e97fc454a95fc6246ecc4'
            '6a99c07bd9c80180ea9a49c1ed615a18183ac43b718efdfb067739b989ef8adc'
            'd04a96732cb6c0a464fbf41fc2ccc9fb3ce9154b5aaba5dae654934f265bf1d8'
            'c27cf31cd77f1d213ee856ceb18f25726876d1f445fd03d89a4781ceb79cea4b'
            'b7d942048a0177d7fd2faefc07e8f10b777c4e1398567e0b7479e7eedb1039e6'
            'b808c09ef797e2a563b96fedcb8287daee6ad9fe2846310ecd249db90ba95c33'
            'd9a77f5a395ad0cdb3801a288cb89fa7916cda14c13eca8d86a9cf08b1c44495'
            '710f17418bf87c4baf50847501f3ea4cec18b2c1b44b974b22128dbf0158cabc'
            '9bd9af1d6e50ec5bf53246aa569791794ab3a4427add8e3bc40b7350e69ccb95'
            '0425e6903048c38331f51a1fc3290d702b5afd2994ed7b15185de593cfddb480'
            'af41b629886fb1b9480a49e388560ec523a764b64ea5b6edba1127dbd6877def'
            '6d04640831bf33ec9ef281f0ea1dd376dfa1aec3a3d90c6501f4d5624edfa7f2'
            '7a2ec8bbd03d4711f510b69603131cbfb5939114b35b45ed6f1c30c8bf22adea'
            '9b66a2bdb0b1db363c56597733a4ada2e7618dea5b1956ba7c4e628a8f54210d'
            'c7d33ccfe9eceadce1f97300c75b050ef5e9b2428f86c38bef7bd584ec8c8bd9'
            '47ece87a4b839960fdc1e7bdae4dbe872a0605612cb3bea2d15ca16d4e2fdc04'
            'eed52fabd845a1e779482389d53364b2cbbf3640b24b10167d47a6bf941e234e'
            'e8a9d52cf6313b8413f6ce73a8ed239b5e5ee5b40ba79ff7cab236d4a9b539d6'
            '4725e877e92765402ef7ff7abba786f548f5f5ab188aa72a0ae3b8a11a414e6a'
            '3b3597157c8641d304621261808e122480fd556afbcd2745133fbf28a55a81e1'
            'c8627efa4b3f1540ac32dd721372938f5e9aee386c168b5febba7c9cfa6b5d37'
            '86f7be412f4fcb0c8d3c5047dab0ebe80d45996428312b977b8f7f28eb576009'
            '5737efd7ed4b53113b3476fae2b3740c46e77944ac80552bc755fc8164830525'
            'ae6d5451ed4fabe2c6a08126bd14116d48e6a541872a83fafbda2a4838fe0b13'
            '1eb92279b3fc281ec83763e9787fd1724f2ddf181f5dd7c4848cc7b767e1f5c2'
            '040a86936cf639dc7cf6f71f54e8fa8c1efb4863d5988e548b91a6cd75f66517'
            'd798cd592a1c97847204f0b386c8f341fb6129262a7a2a9c6aab8df4145604a7'
            '25d18ed0cb6054f812ba0ad81d733479c34dfc08476ce6e7bb2f3d5897f8765d'
            'da1699f28878299ab9e06f1230a569d7c6805b026fe0383de92e92cabec32e02'
            'd69dfe1442f62be1b434f00bf7c7ea4b49cebfbaf706de75d944235089be6b06'
            'fa403feeb0d504c324ab4f4b70c4a33504e1920c96f3e2b7a34ea84f20c401ae'
            '650613db80683206e1330354358c25ffadc51218ef192becbea25424c4ff807c'
            'f8d42709a3baf5cf0a3da509f8b085914004879d237b70183a2ba6ddc2882d9a'
            'da878d062d69c3679a4f1e3cb5575574802bab6a8b1299022ee2e6550921d906'
            '3cb801db1ecb7a18fddcaf5004797b7ac9976642cf46f33e4cb15a48cf60df9b'
            '0f898566e0742efb71225a647e0872c28b0c17c7d5b25f7f5b837b8995dc4126'
            '78a786dbaa0f19d19e84d75105af5931092664d0fa63eff0d17cf524bd7274fe'
            'b70796bc242b671b6e2d14e160b3ba4f1f4668834a1717a77f8cbe40cee0e660'
            'e7b7524cbc2fc1e40f0e3eae627353dda7fbeb0419a7f11f4c70d21d65179c58'
            'eeee04e07cb72e066c3d89e0e4cd05b808406869e9be098474cdd0a3f6bd51ac'
            'a0ce2f8e29b6f749e3d9cacb183e654ea0fe99d19912ee20f8742b374c826e5d'
            'acfe1b7fe3c195d8612070dae536113b43fbf21099f79d2fb00b5f2fd041b96f'
            '4cabcab7d1e25d54b3d8a9d5f6eb0947ed507d43672587319dccf3bc4bcaae9b'
            'e97ca21326b0424c63807c35146435db4a52eb1f66412daff458169a66ec48fd'
            'f99cc6206b7b0b0f6e8c668463cf5e3064579538b9ad813c36e5f58270e06b2f'
            'fd4a64f3929146430da3cd208f4e3da95b82ba771651d663c4158a707b6fd6f7'
            'ae8341c50aa1f2465a14c6304802a4686a3e4ea9a61d306b8075a6107dffd253'
            'e8f5eed7a5c6396e43420ce87f107af6df400989ccde413e08f7733f9a564f0e'
            '0e7562b0028b876430775fd5824380c10a75a92320d4e639a13e588d2c6ab3a3'
            '7ea8f9a92f2d687289334ed5f90f2c3e167607f64c97e90aa3251a1a48a6552c'
            '890a8fb42cd1db3227b35e4d05dc8d60a4d974b48897e67f2bbb2183fdbe25dd'
            '37f86090a32bd394d604557e754318bcffa3bafb1b53f972d12c7196c92bb83a'
            '5cf8dacd25c88e446f2cebefef481f33d1d107db1bf99de6e32b65c2c73a2e2f'
            '1ed8f081ae5daac427bdd797f7f309a8585015b25db3b93cac6ff8e2f7551107'
            '54add6cc94fea89563754095a7263345ef6ab0e0bc72bfe18b293f1f4a94033a'
            '83cfd8300ecac2be49faf198a4415a5d1acd2c58cfe1d5adfeea90c6aad47d93'
            'e37c1bbbffde37b5106ff40b908f559458e04c531fc5fd496e6da98e1372a0e0'
            '747e249412f270282a9f34bb29a7a8585556e0358acc398b5e2f819329b3343f'
            'd51698aaaef0abb8b4be10e8acc55cd2f5c587f07279c62005e0a89459b64dbb'
            '7d788d42cdfe2b69ddd7bcff036ba39172ea8ee29ad5603c1c3b1357ed0111a9'
            'f918c0bd56a4bf2abfa5c3120e8127af268693eb77b5d742db6e309dd29aead0'
            'cfbb97643670e4462627567731e34ea4f6c7e260b220c33ad73b50b899fbfda6'
            '88191395b71f62f5b9a8ed769fa16a623d96209e68857f3d3fc5290b85e1f8be'
            '17098ea7d5f2df22c974c39754aff4abddcdab36782e55579e18b337766eb352'
            '1f599e9fcc0652cba8e474129de0bed17da15f7f4aa5c70aedb2a24653cba87a'
            'd8c8ed10eaee1b1d983c29030089f1cdb0b3a64f1aeacf18efff464e591fe84a'
            '96530a3a87834b01f89f27ba2838711d963acf789b6682bc60b45ff65caa89ee'
            'a14ccb49fd266c854c700642bcc90a4145447475b831395c9ba8a2283381cf59'
            'de212dd7b765783615b4b3771a0e2f1f0a6ab8c63e5c92ae93f068c7f7cba5ea'
            '352fb2f2a63f668b23f7ba94e46ce76243065cb73011e46df20d87c1ac2476c3'
            '2362f6c7c2f2992eb07b4fe4871cca80a85bdfa9319f948e048f1f4e7712c813'
            '61326fa22af9f705b4ab5e2986d6d68aac5f443deed37a066fa0f8fd6b61823b'
            'e293a82ec41e3d24cf4a08aa825dcfa415af739acb33fb2dfc6fe91f55ba1b58'
            '00033298f9d80cb145aaed0a76097dbbf2ab0c8461d45f6b202411722418dcb0'
            'bf10547c9116006c89683fe9220b49895b5fa4523cd759f216e4c2a148f9aea4'
            '9e6be70ad2f3cbfb9a154d1aaff615f143cf82dfdfe431530c900158afb11558'
            '601412aa6399e051d8a4ceb4bdac4da70c52d71143325c144f6fd65a4a809f2d'
            '4fac23ab8d90aa9648cc211a2f4679d1e777e6667a597ba274e0d4f843ed7c9c'
            '52337edf05c18943ef8935fa3c17e8b81a49674e1240801420100f48efe121dd'
            '0534c6413b4f494332bd4900c9ef98b38c24384df24cac620687cb179ba1d550'
            'ce45f8aafd941d31904bedd239aa5714edba11e03615492c492bc4b8c6cee4ee'
            '7592a55df260db484240e8f233d7fa96ea150dd33f4e761382457c20586aab74'
            '7f3f1e75b769b504ca3b75341954172c7c6e3528e7c675347af08f80592eb49d'
            '4f9c8a0f15fd2cbd9494f885b6aa816d4594a2b879a260cecd6c41f83e73b3ad'
            '911defc021d76bef036931d7c6dc76a8043e1468d647d676fad026dbdb5121e7'
            '86c9f4a2856c39cf0c82423a7980738927479c2202bf290f1ddfe7afe03d001d'
            'b341d752f221806bad34d163056d7bf5d92d1cee8e94b947f142cfb7a49443f7'
            'c3f01c6b4d7a61cace77a29a8a5017726a54b24c786dee550f9e54ee2de34a98'
            'd2367d8bdbd104e396ba69ac9462111143d521c91cc2f9458418ab09ad1737e8'
            'c1a545364e105bc9b02247493e33d19c34ed64bcd7bd13a01513a9d270927029'
            '4640f683b9a469d1e1e1150e962d4b2122be6769967ffffa78730cd60c3d33c8'
            'e7c2c24e428357028b554987a488e950023b2389daa44b6d318ea4a4b1d707a8'
            '18c330571760cb30a525614bf27a18d6ba24d604ce5d3451c68b04a22d9ddbb6'
            'ee90a953107c846a0490a5f223102e003e7ef757af3bf6e07746aa47fbfc0ce3'
            '5ed0f33a7baad723c6eff2a496bd2091688d8c5193257d06cca9bcae81667d7b'
            '59336186852c77961c82a2a5cb226a4e69824fd2a7db9461c21c4d60c3aae6c5'
            'a030d70aedac7f63e75bac334b1752d2be85f93149dc3582cf5968cc712dd0ef'
            '00345500847abe3587df2e8bcca0be89553c47c58551798441913cf42d507935'
            'a2ec1610a1a9169510ef4c69905e9754f646d2d81981617738ca8a1bd8f4c417'
            '75f7ae3fb9aa689319c23230dc29b368394d3d92c8241fb9845efcf4cf167ceb'
            'a31b9a6643703f653b22e216a1e218377512d8e689f86538b039d3bf5cdb2c65'
            '3eab4c42429fb7f82cf059cc16da06f2ba54fd2ee8a6543fec8379655c59a508')
