# 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.14
_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}.5
pkgrel=1
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-build-link-win-resource-files-and-build-pythonw.patch
        0040-pycore_fileutils-add-MINGW-support.patch
        0041-configure-fix-inet_pton-check.patch
        0042-importlib-bootstrap-path-sep.patch
        0043-configure-set-MINGW-stack-reserve.patch
        0044-tests-fix-test_bytes.patch
        0045-timemodule-add-MINGW-support.patch
        0046-configure-Disable-checks-for-dlopen-dlfcn.patch
        0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch
        0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch
        0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch
        0050-configure-don-t-check-for-clock_-functions.patch
        0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch
        0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch
        0053-tests-Fix-some-failing-tests.patch
        0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch
        0055-configure-correctly-find-native-python.patch
        0056-build-Add-extra-flags-for-_bootstrap_python.patch
        0057-getpath-add-support-for-mingw.patch
        0058-build-Don-t-build-_posixsubprocess-on-Windows.patch
        0059-ssl-module-add-MINGW-support.patch
        0060-configure-Include-winsock.h-when-checking-for-netdb-.patch
        0061-configure-always-build-_multiprocessing-on-Windows.patch
        0062-configure-build-mmap-module-on-win32.patch
        0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch
        0064-configure-fix-building-some-test-modules.patch
        0065-Always-convert-to-before-passing-though-pathcch-func.patch
        0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch
        0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch
        0068-dynload_win-Port-GetPythonImport-to-MINGW.patch
        0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch
        0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch
        0071-build-Build-and-install-libpython3.dll-stable-ABI.patch
        0072-configure-define-_DEBUG-for-a-debug-build.patch
        0073-configure-fix-multiprocessing-module.patch
        0074-build-add-MINGW-support-for-selectmodule.patch
        0075-configure-disable-various-modules-on-MINGW.patch
        0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch
        0077-configure-Enable-_uuid-on-MINGW.patch
        0078-configure-make-incompatible-pointer-types-a-warning.patch
        0079-tests-test_makefile-normalize-path.patch
        0080-Fix-include-naming-for-cross-build.patch
        0081-Fix-format-warning.patch
        0082-Fix-pragma-warnings.patch
        0083-math-pyhash-MINGW-support.patch
        0084-tests-Fix-test-for-library-name.patch
        0085-dictobject-MINGW-support.patch
        0086-build-Fix-export-Py_GetBuildInfo-symbol.patch
        0087-build-Allow-profile-tests-failure.patch
        0088-build-add-support-for-building-C-modules.patch
        0089-build-build-fix-the-wmi-module.patch
        0090-Fix-exports-for-_suggestions-module.patch
        0091-compileall-Normalize-paths.patch
        0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch
        0093-configure-Work-around-broken-pc-file.patch
        0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch
        0095-venv-also-install-the-versioned-launchers.patch
        0096-configure-set-_WIN32_WINNT-version.patch
        0097-tests-fix-sysconfig.test_get_platform.patch
        0098-pycore_time-fix-missing-timeval.patch
        0099-mmapmodule-define-DONT_USE_SEH.patch
        0100-build-Add-ABIFLAGS-to-targets-when-needed.patch
        0101-sysconfig-patch-nt-schemes-again.patch
        0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch
        0103-configure-allow-older-autoconf.patch
        0104-tests-allow-sys.abiflags-to-exist.patch
        0105-configure-fix-AC_PATH_TOOL-usage.patch
        0106-makesetup-make-sure-to-link-the-built-libpython.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-build-link-win-resource-files-and-build-pythonw.patch \
  0040-pycore_fileutils-add-MINGW-support.patch \
  0041-configure-fix-inet_pton-check.patch \
  0042-importlib-bootstrap-path-sep.patch \
  0043-configure-set-MINGW-stack-reserve.patch \
  0044-tests-fix-test_bytes.patch \
  0045-timemodule-add-MINGW-support.patch \
  0046-configure-Disable-checks-for-dlopen-dlfcn.patch \
  0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch \
  0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch \
  0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch \
  0050-configure-don-t-check-for-clock_-functions.patch \
  0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch \
  0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch \
  0053-tests-Fix-some-failing-tests.patch \
  0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch \
  0055-configure-correctly-find-native-python.patch \
  0056-build-Add-extra-flags-for-_bootstrap_python.patch \
  0057-getpath-add-support-for-mingw.patch \
  0058-build-Don-t-build-_posixsubprocess-on-Windows.patch \
  0059-ssl-module-add-MINGW-support.patch \
  0060-configure-Include-winsock.h-when-checking-for-netdb-.patch \
  0061-configure-always-build-_multiprocessing-on-Windows.patch \
  0062-configure-build-mmap-module-on-win32.patch \
  0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch \
  0064-configure-fix-building-some-test-modules.patch \
  0065-Always-convert-to-before-passing-though-pathcch-func.patch \
  0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch \
  0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch \
  0068-dynload_win-Port-GetPythonImport-to-MINGW.patch \
  0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch \
  0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch \
  0071-build-Build-and-install-libpython3.dll-stable-ABI.patch \
  0072-configure-define-_DEBUG-for-a-debug-build.patch \
  0073-configure-fix-multiprocessing-module.patch \
  0074-build-add-MINGW-support-for-selectmodule.patch \
  0075-configure-disable-various-modules-on-MINGW.patch \
  0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch \
  0077-configure-Enable-_uuid-on-MINGW.patch \
  0078-configure-make-incompatible-pointer-types-a-warning.patch \
  0079-tests-test_makefile-normalize-path.patch \
  0080-Fix-include-naming-for-cross-build.patch \
  0081-Fix-format-warning.patch \
  0082-Fix-pragma-warnings.patch \
  0083-math-pyhash-MINGW-support.patch \
  0084-tests-Fix-test-for-library-name.patch \
  0085-dictobject-MINGW-support.patch \
  0086-build-Fix-export-Py_GetBuildInfo-symbol.patch \
  0087-build-Allow-profile-tests-failure.patch \
  0088-build-add-support-for-building-C-modules.patch \
  0089-build-build-fix-the-wmi-module.patch \
  0090-Fix-exports-for-_suggestions-module.patch \
  0091-compileall-Normalize-paths.patch \
  0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch \
  0093-configure-Work-around-broken-pc-file.patch \
  0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch \
  0095-venv-also-install-the-versioned-launchers.patch \
  0096-configure-set-_WIN32_WINNT-version.patch \
  0097-tests-fix-sysconfig.test_get_platform.patch \
  0098-pycore_time-fix-missing-timeval.patch \
  0099-mmapmodule-define-DONT_USE_SEH.patch \
  0100-build-Add-ABIFLAGS-to-targets-when-needed.patch \
  0101-sysconfig-patch-nt-schemes-again.patch \
  0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch \
  0103-configure-allow-older-autoconf.patch \
  0104-tests-allow-sys.abiflags-to-exist.patch \
  0105-configure-fix-AC_PATH_TOOL-usage.patch \
  0106-makesetup-make-sure-to-link-the-built-libpython.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=('7e32597b99e5d9a39abed35de4693fa169df3e5850d4c334337ffd6a19a36db6'
            '3981fed74ee7d43ad69bd67e634e03d7bf6890558a87062380112e195688728a'
            '9807d045f3221638080391d9bfdd156bea5687b0821079ff96e11b743e6f7552'
            '989b3d98413a448d7ca36040e1d78c4cf751b4829e606caa28d4703ac88a8a88'
            '8b51d3bbc90e606e5e81fa84993dec2dfc744cc3e8ae793ae887d24dc451b8c4'
            'e27584cfea4df0c560255853e5983f1c70b4ff60e1bda1c92ed0d7aac69351a6'
            'd62c4d1967f3f4461494d4a7a9b5b38c30151e5667bcd06efcd61ddaf9455229'
            '5a3f87cee2bbe1d2b7a964a365a791c27bd8bf10dd819c0e66aa9a59fe5701ab'
            '59c871705b2db84bc172872d43eef20cea4bcbac54a45ea51d8bf64fbc33973c'
            '0fecc137e3260472f2c3744f04f676fc74026eb2d439ceeb792c8d40bf57842c'
            '970b18d637be01d84782da499c2c506d7b625b681435c599cd9a56ba06eb8f04'
            '2995f88c96edac259adb507239d621c45386374471e84c6890446040fb8fb8d6'
            '9ebf59f7e1e96095cc2c1d0269e5442eefaa48fe82db7151d594cbaaba6fe815'
            '30eaf617a3947da3fc6a35cd4406f10de27cb7fc1643b2a46ece091970c64f85'
            'a74f848a4c1e35f2ef698f95df96f071d56fb061aa6e0cfe2494ac3b256b9a82'
            'fdf51789094632da851f19934fc142da487e8c1b7b8d327d36036f53329086e3'
            'b98a549d74f26a3bcdb6cc21b50d79cfb45fb7f61e330324a8e64ecfbad52b89'
            'a552b9a2612c97199d086acdf41b4f3ccdf3b19603da0e621d588955c4b416ba'
            '0fa45c431281eea55f760acdd71007c6b9e42f34f30843c4a8861cd4fc56d916'
            'bd0e360ea215277ca0ab61ca4d6a3ec2dd5edb58f2844fca7c1ce73526a487a4'
            '6b72826f2ec32b2cb5cf446bcff5852abdefbfae16666330c5f622d419d3ce7d'
            '8750e5d3e8eb15f477a8166e34dda0da5deaae3cb82a4128309a8288bbe14c12'
            '74a2647048ccf01b09ddbd159d22f033aa0f4d54e7102a5dd54c5b9e8ba81341'
            '3e386b926088e624f03a8430b63a9337bd60aaaccf8d0575ca941d611ef0f075'
            '05136b9e2840a68096517e771a8117c5dffe4213a1f44c15ecb9cd108a625b0d'
            '0270faae44b108ca557882ec42bcc1c65fa36d117467c90c3162843c6548489b'
            '0d987302331fb149d0228c515a2572ebb0ce620fb62b792dda596e531b92091e'
            '91f3a164cc5a025cf9dd0ce0a8b4833aaf5a4076a37fec80818c1916a5e83948'
            'ecb3d357a9e9db4432413c19b973e265c9084d54ed1645139985a482741ec3e4'
            '355b90ab70e7162ffddd590bba62fe0458dd583cc5d36c4f6b5fd3a15867553a'
            '90fda81a2107abc213fcb94256721ab1a60f33e591784efbf6d9c25d1ce8fea9'
            '011060415195782779e4630d32eeaff18b7a5c0b9e3f90cf1bbf92f3de97976a'
            '53c08525e44e0987fb8911243f42f82132f7bfed229a8373758b59493176d7c0'
            'bdcd4cec9acb335add6af5cf1847f39fd29a7ed13005267cec785305c501530c'
            '1041cdc26a6e267aa3f5d61283917c8f10499f8a91dd2c5b2e31abe8e00ede4a'
            '659a1f14af5d17317ce2afd3b71d3f0ddece08edaea1c1e3f22570466f3f80bd'
            '90a5dbf7af0c02418947082b60468470af311d6e9f39cce60344936b36f34d4b'
            '65dbd7e1757ee598c6ede876240fcca6235cb11f33f5631ccadef5beb12519c5'
            'f6eb0505cc3b6d3ddafcd5d8fd9509a7d528ca675fe288bbddc3f637a47309de'
            '23a75787599e19b6ff7bc50ed055dd2404add50347a6a5c6aae8829c997145a9'
            'd607bc61352ba1d95b94337d95afcdb7c7e4c286ae24cca9a3e1c794e3b7f907'
            '5460419193ed6b740ca67c05257d1caefe0efbdf6c11f7a520797aa99e240edf'
            '390b34149c073e935febe4ab2b02992aa85f90d0a4f7cb6cb17ec23e8fd9917b'
            '74960b4ee866cb05749af58cf664631a36442ed6be841dd5ad021c3c8eb87293'
            '70bbb1a995ef04c71b15727629a9adc1515b1f35b468a29f5804682537642104'
            '2f61a6fafc0e0186e9d0d712f8b71b9f324ffc4ff0142e44c734c846e5a53a78'
            '03bf0e6f09dace49785b48a0bb3098306ed7fe701ff14a91eae4626e0da27b16'
            '33728c075ecb8d2374fbc80069ceb360a1bf60b8427935e95ce21f0e0c701c36'
            '31a01c20224f689a8c5e32ab47b25f648c465d7e0f13e9ced7272a9527034aba'
            '4d99b3006e477d6dd22b1e792115ffadf9b8fbe6bcfdf80fbe8914bcd815fb69'
            '41ab1dfae5959a46ac0b5ba505e30cc87c0a251c578009f6a47b776171bf551a'
            '866e765ace7b740874e8dbbb6017aa614ffa3a8886457cd8511e7b8bd697b610'
            'a2ace117d2dcdf9f7ba7590a3be29cf49d9315feec4687748c17b8fbaa4c9a90'
            '88a41de6de1855f0a1417527186c235e2c5d8c70e8ea1db21f483ceb5212059c'
            '8ea56f7ce1bbb35314f92d32b176ad5c32265a7bf0c63018754eb75ccdd3e8b6'
            'be8da9ddd899bca2ff2b95d6c6df099f0f1a5ecefb74a4945b04c4222f1ee231'
            '6bf53f72c417ec848c278e6991ac14508d74e151a1389f8a01f40a690d9ccc3b'
            '446cf03fbe1d8ad24f14ceb1dcb6df2b2f762548708295a4355d229b6fde5677'
            '72c34acd42fc26d8ec04ca5c1a8d384ec459e64a1bb71b53c2b6d720cd63e384'
            'cbd38942f5b04debe2d1760ed62e9f99f2f85b76396e717e735952affe8128e8'
            'e5009cdcbc7d83478510a4ad3245fd403e7a584c54c9be289c0eda64b90e17f4'
            '1cfa11d8a0450320c0b47b0a85d3bbabf73e72fd2e67135e5d61ebed6e0ed858'
            '08f660792d273f2b88ba63f8ccfac82fdda334d2bee59dbdc2a0510ddf3577f0'
            'c1196b443048b4065523de003ddb5e16ba9276298bfda4a29ec70c7d6514ac57'
            '14be05801c1a35a267175120e2526e715e39dccaca5cc9bc3332b3d6ee3d1483'
            '27e4a415aa0c9390f0cd4b2dd3d0565b7154107a91321b7aef1e932f54ab99b5'
            'fbb0d5ea7903acb359a763971070e958f1062c212f7cda1ec34b4dea3daadb6c'
            '05828fcee1e2eee8745dcb6980c462f46d49e0c3a4fb5475826140b3af052f98'
            '1be46971d36bcb847e3364ff24f3421f22197fb56bd808a958ba384161529ffd'
            '501cf9b7a8fca7e5768024873f743d683eea6d39e059bc81ba0066b0bbe57a06'
            '4a57bac1f8b944f865a52bd4b69c0805ee6896fd5d51b61994ba11d849e6a88d'
            '2a9c9b31b67dc0878dbbe6e6f37267e885bd9bfa82193949bc33672fb52aae4f'
            '802528ded27fa1f0de659d0e7155f51cfaf7a7da9891b04f9fe4076cc0f19693'
            'f37537caed730784d0c85cbd59e01cdc56f2491895593e19cc5063e51087b72b'
            '1dbc545059541025b16843e4fb9fcbc6736ca5700556da04b7aa3e808c5f1771'
            '3bb51f778c5f891984acfb76696e0ec5454ee662faf7190ef159715c39ef3ed1'
            '1340d4ce5c441386aeb3dad087e8ad3d2191223bee00b47820dde31f98593c86'
            '109f601110b408d2063f8c441d53fc221a93961e4b6d070b8aa82a18d0f015a9'
            '94ff9c6ef79fc09e604b3ffae52480e12521971a139b256428e202f938243964'
            '7d19dae7b41c56e95b321cfacb313de0793497f8b523de0261ec1ef4e707eed7'
            'b2bee38a7c7bb83982f9ca892309830f5060d9a347e4d3e171bbe2906b833f08'
            '1d2eee364b73203dba4f01a032b4322f947b0e4f40ad247dc9950d0205ba4343'
            'e85a4cf81c71439d4ee6077b3f70d1a5efaf2f734e4b8d0d7c635ec1b2f4821d'
            '312b9b7f39d7ebacdb15550b1f1d2a9fa48357c65f4015cf48a7db93a21ecb18'
            '8c312a9b0fa6aaba3398dd12935528786a4117966600d1083e38270820ef0e68'
            '384718377933f0a520107b5ee42f8e9b7eb82e49d306c874adccbaa06b328533'
            '8ba8bc1efc289dd403ccbd8258e10a42ac9308ba06da9f537a3b5d139761a2f5'
            '8538a4fa2869752eeaf5f6b3cbc6b118e9782dfbf41915cdea16e2baa764aeef'
            '80541b40e7b0de8686324944132f771a69fbb3e45b72ad44839d96ce0ab6694f'
            '6f22bc7853e86b3a68a9d94f1ccb42954078cfe688899b71b6820801474671ea'
            '97b03bd7fcae1ee63cc306efde5930c00046559130ed98efc39f5b95c63cd91e'
            '4f874a1578eda6ae8d52daecfa0d21ef3bce16bf8ca9ca05d04b84354b7f524c'
            'e845ddabff1ebacad18055c4acf3a4616373f13a3fd4638da1a4a186b55a845a'
            '280824bf1ff2ee845bb4b3f13ba3f43b14f81e71b5cc63b2f151135b05e198e7'
            'b10fab8aaae0445ed6ba47c8fd5f0ad09db75fde2e5897307a609cbefce972d0'
            '582a67a3e39d56846a7fe2b6d6268c46f23b2a05afbb66858e4665f495d849f3'
            '1360be5942bab1b24cab677d92a300527f811317d1f4b9bc501551c90480cc12'
            '96b383e0ce1f84796266ed7ed8b5e6c9308c5e34f06313d3360b29511b0eccfb'
            'd14e31df094cbcf23e4e7d549e6dd8d2e0773c34489eef1547859031a5a66c50'
            'd60942d90685f319bd9b62e5fe15aba801c681276b1e7ff446f3a2c9ab85d1ed'
            '8491833920fce1e5249b964704850ddd2d169ad6fd5c4e44b910afdcf0742471'
            'b44fadc9aa8d3f449640816a3fcab5e474ba650084858aac8c228c8982d9b7a9'
            '925c7804be89b6c87c68132782fee82c72632b23198f160293b8bef92437be33'
            'b81c1083f90aaabdd6e7ef7332554a7e4c4dd541846e1efe1798391e2cd5aad6'
            '8eda9894f1c057c4ecd79e7733e34e2fd4cf401b1231bcb463c613ee494079ec'
            'fc371726ff9dca4620fdf9b3cbdfe059d8d357d0bc5b85fb77b4743149eca5d6'
            'c952a0ab2cab016d64f75325b348df1a2b57a41ac7fe2956ce4a9dad5534c16b'
            'eff35a5e059f58a8f730db31db043d5614eca691bd4498a36fbb5d5929cc476b')
