blob: ffcd349780e9725ce9815e8ff14813c085eafb32 [file] [log] [blame] [edit]
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Contributor: Saul Ibarra Corretge <saghul@gmail.com>
_realname=python2
pkgbase="mingw-w64-${_realname}"
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=2.7.18
pkgrel=1
_pybasever=${pkgver%.*}
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64')
license=('PSF')
url="https://www.python.org/"
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
"${MINGW_PACKAGE_PREFIX}-expat"
"${MINGW_PACKAGE_PREFIX}-bzip2"
"${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-ncurses"
"${MINGW_PACKAGE_PREFIX}-openssl"
"${MINGW_PACKAGE_PREFIX}-sqlite3"
"${MINGW_PACKAGE_PREFIX}-tcl"
"${MINGW_PACKAGE_PREFIX}-tk"
"${MINGW_PACKAGE_PREFIX}-zlib"
)
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc" "${MINGW_PACKAGE_PREFIX}-pkg-config")
options=('!makeflags') # 'debug' '!strip')
source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"
0000-make-_sysconfigdata.py-relocatable.patch
0001-fix-_nt_quote_args-using-subprocess-list2cmdline.patch
0100-MINGW-BASE-use-NT-thread-model.patch
0110-MINGW-translate-gcc-internal-defines-to-python-platf.patch
0120-MINGW-use-header-in-lowercase.patch
0130-MINGW-configure-MACHDEP-and-platform-for-build.patch
0140-MINGW-preset-configure-defaults.patch
0150-MINGW-configure-largefile-support-for-windows-builds.patch
0160-MINGW-add-wincrypt.h-in-Python-random.c.patch
0180-MINGW-init-system-calls.patch
0190-MINGW-detect-REPARSE_DATA_BUFFER.patch
0200-MINGW-build-in-windows-modules-winreg.patch
0210-MINGW-determine-if-pwdmodule-should-be-used.patch
0220-MINGW-default-sys.path-calculations-for-windows-plat.patch
0230-MINGW-AC_LIBOBJ-replacement-of-fileblocks.patch
0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch
0270-CYGWIN-issue13756-Python-make-fail-on-cygwin.patch
0290-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch
0300-MINGW-configure-for-shared-build.patch
0310-MINGW-dynamic-loading-support.patch
0320-MINGW-implement-exec-prefix.patch
0330-MINGW-ignore-main-program-for-frozen-scripts.patch
0340-MINGW-setup-exclude-termios-module.patch
0350-MINGW-setup-_multiprocessing-module.patch
0360-MINGW-setup-select-module.patch
0370-MINGW-setup-_ctypes-module-with-system-libffi.patch
0380-MINGW-defect-winsock2-and-setup-_socket-module.patch
0390-MINGW-exclude-unix-only-modules.patch
0400-MINGW-setup-msvcrt-module.patch
0410-MINGW-build-extensions-with-GCC.patch
0420-MINGW-use-Mingw32CCompiler-as-default-compiler-for-m.patch
0430-MINGW-find-import-library.patch
0440-MINGW-setup-_ssl-module.patch
0460-MINGW-generalization-of-posix-build-in-sysconfig.py.patch
0462-MINGW-support-stdcall-without-underscore.patch
0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch
0490-MINGW-customize-site.patch
0500-add-python-config-sh.patch
0510-cross-darwin-feature.patch
0520-py3k-mingw-ntthreads-vs-pthreads.patch
0530-mingw-system-libffi.patch
0540-mingw-semicolon-DELIM.patch
0550-mingw-regen-use-stddef_h.patch
0560-mingw-use-posix-getpath.patch
0565-mingw-add-ModuleFileName-dir-to-PATH.patch
0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch
0580-mingw32-test-REPARSE_DATA_BUFFER.patch
0590-mingw-INSTALL_SHARED-LDLIBRARY-LIBPL.patch
0600-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
0610-msys-cygwin-semi-native-build-sysconfig.patch
0620-mingw-sysconfig-like-posix.patch
0630-mingw-_winapi_as_builtin_for_Popen_in_cygwinccompiler.patch
0640-mingw-x86_64-size_t-format-specifier-pid_t.patch
0650-cross-dont-add-multiarch-paths-if-cross-compiling.patch
0660-mingw-use-backslashes-in-compileall-py.patch
0670-msys-convert_path-fix-and-root-hack.patch
0690-allow-static-tcltk.patch
0710-CROSS-properly-detect-WINDOW-_flags-for-different-nc.patch
0720-mingw-pdcurses_ISPAD.patch
0740-grammar-fixes.patch
0750-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch
0760-msys-monkeypatch-os-system-via-sh-exe.patch
0770-msys-replace-slashes-used-in-io-redirection.patch
0790-mingw-add-_exec_prefix-for-tcltk-dlls.patch
0800-mingw-install-layout-as-posix.patch
0820-mingw-reorder-bininstall-ln-symlink-creation.patch
0821-make-python2-non-default-python.patch
0830-add-build-sysroot-config-option.patch
0840-add-builddir-to-library_dirs.patch
0845-Remove-compiler-lib-dirs-from-extension-lib-dirs.patch
0850-cross-PYTHON_FOR_BUILD-gteq-276-and-fullpath-it.patch
0855-mingw-fix-ssl-dont-use-enum_certificates.patch
0860-mingw-build-optimized-ext.patch
0870-mingw-add-LIBPL-to-library-dirs.patch
0910-fix-using-dllhandle-and-winver-mingw.patch
0970-Add-AMD64-to-sys-config-so-msvccompiler-get_build_version-works.patch
0980-mingw-readline-features-skip.patch
1000-dont-link-with-gettext.patch
1010-ctypes-python-dll.patch
1020-gdbm-module-includes.patch
1030-use-gnu_printf-in-format.patch
1040-install-msilib.patch
1050-skip-add-db-includes-for-win.patch
1060-dont-include-system-ncurses-path.patch
1850-disable-readline.patch
1900-ctypes-dont-depend-on-internal-libffi.patch
2000-distutils-add-windmc-to-cygwinccompiler.patch
2700-cygpty-isatty-disable-readline.patch
2701-disable-broken-gdbm-module.patch
2030-fix-msvc9-import.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
}
del_file_exists() {
for _fname in "$@"
do
if [ -f ${_fname} ]; then
rm -rf ${_fname}
fi
done
}
# =========================================== #
prepare() {
cd "${srcdir}/Python-${pkgver}"
# these are created by patches
rm -f Misc/config_mingw \
Misc/cross_mingw32 \
Misc/python-config.sh.in \
Misc/cross_mingw32 \
Misc/python-config-u.sh.in \
Python/fileblocks.c \
Lib/list2cmdline.py
plain "Apply Ray Donnelly's should-be-upstreamed patches"
apply_patch_with_msg \
0000-make-_sysconfigdata.py-relocatable.patch \
0001-fix-_nt_quote_args-using-subprocess-list2cmdline.patch
plain "Apply Roumen Petrov's core patches (13)"
apply_patch_with_msg \
0100-MINGW-BASE-use-NT-thread-model.patch \
0110-MINGW-translate-gcc-internal-defines-to-python-platf.patch \
0120-MINGW-use-header-in-lowercase.patch \
0130-MINGW-configure-MACHDEP-and-platform-for-build.patch \
0140-MINGW-preset-configure-defaults.patch \
0150-MINGW-configure-largefile-support-for-windows-builds.patch \
0160-MINGW-add-wincrypt.h-in-Python-random.c.patch \
0180-MINGW-init-system-calls.patch \
0190-MINGW-detect-REPARSE_DATA_BUFFER.patch \
0200-MINGW-build-in-windows-modules-winreg.patch \
0210-MINGW-determine-if-pwdmodule-should-be-used.patch \
0220-MINGW-default-sys.path-calculations-for-windows-plat.patch \
0230-MINGW-AC_LIBOBJ-replacement-of-fileblocks.patch
plain "Apply Roumen Petrov's compiler patch (1)"
apply_patch_with_msg \
0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch
plain "Apply Roumen Petrov's extensions patches (21)"
apply_patch_with_msg \
0270-CYGWIN-issue13756-Python-make-fail-on-cygwin.patch \
0290-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch \
0300-MINGW-configure-for-shared-build.patch \
0310-MINGW-dynamic-loading-support.patch \
0320-MINGW-implement-exec-prefix.patch \
0330-MINGW-ignore-main-program-for-frozen-scripts.patch \
0340-MINGW-setup-exclude-termios-module.patch \
0350-MINGW-setup-_multiprocessing-module.patch \
0360-MINGW-setup-select-module.patch \
0370-MINGW-setup-_ctypes-module-with-system-libffi.patch \
0380-MINGW-defect-winsock2-and-setup-_socket-module.patch \
0390-MINGW-exclude-unix-only-modules.patch \
0400-MINGW-setup-msvcrt-module.patch \
0410-MINGW-build-extensions-with-GCC.patch \
0420-MINGW-use-Mingw32CCompiler-as-default-compiler-for-m.patch \
0430-MINGW-find-import-library.patch \
0440-MINGW-setup-_ssl-module.patch \
0460-MINGW-generalization-of-posix-build-in-sysconfig.py.patch \
0462-MINGW-support-stdcall-without-underscore.patch \
0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch \
0490-MINGW-customize-site.patch
plain "Apply Ray Donnelly's general/cross patches (32)"
apply_patch_with_msg \
0500-add-python-config-sh.patch \
0510-cross-darwin-feature.patch \
0520-py3k-mingw-ntthreads-vs-pthreads.patch \
0530-mingw-system-libffi.patch \
0540-mingw-semicolon-DELIM.patch \
0550-mingw-regen-use-stddef_h.patch \
0560-mingw-use-posix-getpath.patch \
0565-mingw-add-ModuleFileName-dir-to-PATH.patch \
0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch \
0580-mingw32-test-REPARSE_DATA_BUFFER.patch \
0590-mingw-INSTALL_SHARED-LDLIBRARY-LIBPL.patch \
0600-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch \
0610-msys-cygwin-semi-native-build-sysconfig.patch \
0620-mingw-sysconfig-like-posix.patch \
0630-mingw-_winapi_as_builtin_for_Popen_in_cygwinccompiler.patch \
0640-mingw-x86_64-size_t-format-specifier-pid_t.patch \
0650-cross-dont-add-multiarch-paths-if-cross-compiling.patch \
0660-mingw-use-backslashes-in-compileall-py.patch \
0670-msys-convert_path-fix-and-root-hack.patch \
0690-allow-static-tcltk.patch \
0710-CROSS-properly-detect-WINDOW-_flags-for-different-nc.patch \
0720-mingw-pdcurses_ISPAD.patch \
0740-grammar-fixes.patch \
0750-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch \
0760-msys-monkeypatch-os-system-via-sh-exe.patch \
0770-msys-replace-slashes-used-in-io-redirection.patch \
0790-mingw-add-_exec_prefix-for-tcltk-dlls.patch \
0800-mingw-install-layout-as-posix.patch \
0820-mingw-reorder-bininstall-ln-symlink-creation.patch \
0821-make-python2-non-default-python.patch \
0830-add-build-sysroot-config-option.patch \
0840-add-builddir-to-library_dirs.patch \
0845-Remove-compiler-lib-dirs-from-extension-lib-dirs.patch \
0850-cross-PYTHON_FOR_BUILD-gteq-276-and-fullpath-it.patch \
0855-mingw-fix-ssl-dont-use-enum_certificates.patch \
0860-mingw-build-optimized-ext.patch \
0870-mingw-add-LIBPL-to-library-dirs.patch \
0910-fix-using-dllhandle-and-winver-mingw.patch \
0970-Add-AMD64-to-sys-config-so-msvccompiler-get_build_version-works.patch \
0980-mingw-readline-features-skip.patch
plain "Apply Alexey Pavlov's mingw-w64 patches (6)"
apply_patch_with_msg \
1000-dont-link-with-gettext.patch \
1010-ctypes-python-dll.patch \
1020-gdbm-module-includes.patch \
1030-use-gnu_printf-in-format.patch \
1040-install-msilib.patch \
1050-skip-add-db-includes-for-win.patch \
1060-dont-include-system-ncurses-path.patch \
1850-disable-readline.patch \
1900-ctypes-dont-depend-on-internal-libffi.patch
plain "Apply Renato Silva's patch to distutils"
apply_patch_with_msg \
2000-distutils-add-windmc-to-cygwinccompiler.patch
# Extend some isatty calls to check for mintty when checking for
# a terminal output. Disable the readline module under non-mintty as it
# breaks things with a real console (like conemu or winpty)
# https://github.com/Alexpux/MINGW-packages/issues/2645
# https://github.com/Alexpux/MINGW-packages/issues/2656
apply_patch_with_msg \
2700-cygpty-isatty-disable-readline.patch
# gdbm is broken and as a result breaks anydbm/shelve.
# Don't include it so the dumbdbm backend is used instead,
# like with the official CPython build.
apply_patch_with_msg \
2701-disable-broken-gdbm-module.patch
# https://github.com/msys2/MINGW-packages/issues/5155
apply_patch_with_msg 2030-fix-msvc9-import.patch
autoreconf -vfi
# Temporary workaround for FS#22322
# See https://bugs.python.org/issue10835 for upstream report
#sed -i "/progname =/s/python/python${_pybasever}/" Python/pythonrun.c
# Enable built-in SQLite module to load extensions (fix FS#22122)
sed -i "/SQLITE_OMIT_LOAD_EXTENSION/d" setup.py
# FS#23997
sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/env python2|" Lib/cgi.py
sed -i "s/python2.3/python2/g" Lib/distutils/tests/test_build_scripts.py \
Lib/distutils/tests/test_install_scripts.py Tools/scripts/gprof2html.py
touch Include/graminit.h
touch Python/graminit.c
touch Parser/Python.asdl
touch Parser/asdl.py
touch Parser/asdl_c.py
touch Include/Python-ast.h
touch Python/Python-ast.c
echo \"\" > Parser/pgen.stamp
# Ensure that we are using the system copy of various libraries (expat, zlib and libffi),
# rather than copies shipped in the tarball
rm -r Modules/expat
rm -r Modules/zlib
rm -r Modules/_ctypes/{darwin,libffi}*
}
build() {
declare -a extra_config
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
CFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 "
CXXFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 "
CPPFLAGS+=" -I${PREFIX_WIN}/include/ncurses "
if check_option "strip" "y"; then
LDFLAGS+=" -s "
fi
# Most of this is unnecessary, perhaps just
# the extra_config bit?
if check_option "debug" "n"; then
CFLAGS+=" -DNDEBUG "
CXXFLAGS+=" -DNDEBUG "
else
CFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG "
CXXFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG "
extra_config+=("--with-pydebug")
fi
local LIBFFI_INC=`${MINGW_PREFIX}/bin/pkg-config libffi --cflags-only-I | sed "s|\-I||g"`
export LIBFFI_INCLUDEDIR=$(cygpath -wm ${LIBFFI_INC})
# Workaround for conftest error on 64-bit builds
export ac_cv_working_tzset=no
[ -d "${srcdir}/build-${CARCH}" ] && rm -rf "${srcdir}/build-${CARCH}"
mkdir -p "${srcdir}/build-${CARCH}" && cd "${srcdir}/build-${CARCH}"
MSYSTEM=MINGW ../Python-${pkgver}/configure \
--prefix=${MINGW_PREFIX} \
--host=${MINGW_CHOST} \
--build=${MINGW_CHOST} \
--enable-shared \
--with-threads \
--with-system-expat \
--with-system-ffi \
"${extra_config[@]}" \
OPT=""
#--with-dbmliborder='gdbm:ndbm'
make
}
#check() {
# cd "${srcdir}/build-${CARCH}"
# make test
#}
package() {
cd "${srcdir}/build-${CARCH}"
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
MSYSTEM=MINGW \
MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
make install DESTDIR="${pkgdir}"
mv "${pkgdir}${MINGW_PREFIX}"/bin/smtpd.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/
# gdb support for debugging Python itself (needs options='debug',
# *may* work better on i686 due to frame pointer always being available) to use:
# python
# sys.path.append('C:/msys64/mingw64/share/gdb/python2')
# import python_gdb
# reload(python_gdb)
# end
[[ -d "${pkgdir}${MINGW_PREFIX}"/share/gdb/python2/ ]] || mkdir -p "${pkgdir}${MINGW_PREFIX}"/share/gdb/python2/
cp -f python.exe-gdb.py "${pkgdir}${MINGW_PREFIX}"/share/gdb/python2/python_gdb.py
# Copy python import library to $prefix/lib because some programs can't find it in other locations
cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/libpython${_pybasever}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${_pybasever}.dll.a
# 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/
# clean up #!s
find "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/ -name '*.py' | \
xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/env python2|"
# clean-up reference to build directory
sed -i "s#${srcdir}/Python-${pkgver}:##" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/Makefile
for fscripts in 2to3 idle pydoc; do
sed -e "s|${PREFIX_WIN}/bin/|/usr/bin/env |g" -i "${pkgdir}${MINGW_PREFIX}"/bin/$fscripts
done
# These are provided by Python 3 now
mv "${pkgdir}${MINGW_PREFIX}"/bin/idle "${pkgdir}${MINGW_PREFIX}"/bin/idle2
mv "${pkgdir}${MINGW_PREFIX}"/bin/pydoc "${pkgdir}${MINGW_PREFIX}"/bin/pydoc2
mv "${pkgdir}${MINGW_PREFIX}"/bin/2to3 "${pkgdir}${MINGW_PREFIX}"/bin/2to3-"${_pybasever}"
sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/bin/python${_pybasever}-config
sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/bin/python2-config
# fix permissons
find ${pkgdir}${MINGW_PREFIX} -type f \( -name "*.dll" -o -name "*.exe" \) | xargs chmod 0755
# Fix up two instances of MSYS2 paths in python-config.sh in-case the final consumer of the results are native executables.
sed -e "s|${MINGW_PREFIX}|${PREFIX_WIN}|" \
-i "${pkgdir}${MINGW_PREFIX}"/bin/python2-config.sh
# replace paths in sysconfig
sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" \
"${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/_sysconfigdata.py \
"${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/smtpd.py
# Create python executable with windows subsystem
cp -f "${pkgdir}${MINGW_PREFIX}"/bin/python2.exe "${pkgdir}${MINGW_PREFIX}"/bin/python2w.exe
${MINGW_PREFIX}/bin/objcopy --subsystem windows "${pkgdir}${MINGW_PREFIX}"/bin/python2w.exe
}
sha256sums=('b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43'
'31e9c1b8842077967708955e5f0023bda46d77a838285c7f80ef9775fa92aa14'
'ba7896f990ae941411eea25dc1afc5364bc6ba8faa940543d30a984b8ea0bb2a'
'2385c56258951e8bce7cbd074b9887a949d84db4fddded0224fd5eb4df479319'
'c26142f87f8326e72620e531e18f0b89aca0f6f8a6985023db91b27a5be0a3e6'
'91988723f9022def0c008a6245312a9f178439e03324f225a5c517755b788532'
'f43ddf417d92585a4c4f2034d9724b9873d898b3db398276fcacbdd2eb1545c9'
'9ff3768d358942694693dec16ee8dcfc78f588d02e89a6103bc22034c3c68fe1'
'9a3b0b9f66cbc3031eed0c9dee5f8d31942018df64d8e57d9325d56ee8303f0c'
'3c30e8e1b3252ca63795d61e7a21095618da44e9bb25d04865bfd29f9a15be53'
'3e69a90f672b0ff82ab31dbbba85721ace7ec30c6c0227a1ba76f2659e94faaf'
'06121278b65c72b9ec484f8c0526038bde7f501bd7297f8295020bd6a1911355'
'33176f71b2c7cfc768170ed4a7dec3f823d807248bb541387ae9e6101a126e00'
'b28c6f17b3f8684a7485974aacfe1edc2fd62bb9dcd3c5374efce5099084702f'
'0bb61de6b26db115adf7649122f9ec05a745767eb2a2e534e9e71694a1bf554a'
'140eabde98d658ba788fbb81cc01679026baf2203e93ad60336a8988d6967fc0'
'5fc0cca237e2fde11a498fd0f21eca5084948a920bdc6a272536d0edd4e3fab4'
'8a5aed9706740e5fa167cecfad1667116dc34b9c582ffd51aafdf7dfa1ace350'
'08a8a4e8818ff10b191667c3d3bedaa4f3ec4a9681b54c5396e47304df3b7fef'
'8684d2cff8eb336c88758feb5e2b47c3c117868235b8a5801e3166dc2e9ed7de'
'd625727972595d9017d1493be0eea13670ecee2c44b2e844a090411e7d932d81'
'91f659c187f2cfc37afa57466f7a9bc6f60795eae10036ce385571827d2cf526'
'ac0cdff9d1b9f43475fb510d87372f7178163489546d508b95b63dccfb23d9ae'
'e5a0e017060dbc89e412fb48d5e7596fa5b10578f1b223ead4231d09d94e921f'
'e1d32d7e175d7a0b6f0f079456af84405db4533225e9d405f7d8d3b7b4164abc'
'cc2e0d07ebdd8eda6849ace7dd798f6cbf9dc23fdaf60bb15188d478abe9a445'
'164623ee6df203f3931b1e8593f9ce9681771d8a9d31f2d7e9744eab752b002c'
'53fb7939bcf339374a2f0be6de670d5fe372d3325c2975279617f9cab6161b85'
'4369c4d59618c16d22e515af7e37c5b96bcf1ea0c2cf2d754dbb525ac720c4a4'
'0601521c75d903ea07ea190c4c37c77837d5e94131cae569a758cf0dc7f5d75f'
'7ae040ee97a8f9a6a34c8f630cced7a844488ede421eb281c1288f1a9b4a6fb8'
'c4bef29336dc0f2285965dba629f08e92afac6263b355b105c9a90c89f5a17f7'
'bd7ffce02effd1eff6c5707e474b487f2c226c180552cb3cc53d1c7061aa5c42'
'eb715c0f6f40ac1ed98794f8aab3ad7954bbe909bd84af212952b93e4d3e0091'
'2e8371ac6ca33babedb4485d6644e3ee8ddf65a7fc455f905518e9387961dd2f'
'd01b8072bd32f1ef321966aa4139ff0cf67fe7043978ff9eb81c83e078cd4585'
'32c77169b4efbd5ba720aaa09e4c9f4f900f7427049bb9bc5a07b3f72bfd7758'
'5fc794b7c84690bcd564fb456a49471c0c0091eb54cafe0a14cb4cac39cdd30c'
'0e8ec11e59d77b138a14870e655669e6da27c359a49685bdae6ace60fb0d3597'
'6300f5a7338aff519daff98b3879ac4649c831269a6b86e858728f253905607d'
'074a93a56e17016d73a6438ffb501068ac3da4d65d15fe1624edf5b7c1a189a7'
'801845f4d91330ccf82a01b9182fd4e52002daecd26ec143364dd8f3fd23d51b'
'd1235c7bc2310e488b04c0f698b57b80860506fb2547ba9d8879bafa3f573bcd'
'edd42a7736167c9528c609156769e196b5b2e6496e08653beea9791ff4a18a24'
'67b45746304f4b25a683841ef5d8296821996594796f839dfafd29edd806e789'
'b8494678aa54b37b99f7ea7782af23efa93496ee4b3f4af1a35cb510a3659ab8'
'6b0831b037738454f41526a55dea67bc49d31715681e22d1b70bef90605ca9be'
'cfafa635329b52e185484e56ee51dbfd19bf43fc3aa4761e8a2534aa4ff7233f'
'896e862f2e1a9d4c12db5bd99a90a3a0d87556e158724f3fbfbdd7fd09fb00f2'
'c2dc41c9c9cc1c312c22a91f4ae6a7f312cc427c92bfdc1e849ebba40ea1e301'
'8df2515bd4885d7e431445b1701954141081aa2ff90bd6576c61bf5a99a55f04'
'f2d17fffb21d96fd27c380f187681bfcd86f4b410c569375d7ce410345d5cb48'
'00efc7fd5ed41b192257d2c4bdce49a86de1eaa09697136c163ef96a1257ce30'
'22534df4cf5848b1baa2590c5e19a05365d0432d879530696887a44580256b65'
'5d087da4ccef415de90a42dac423b95e80f21bd7a18d7a4c39fa962c01852471'
'113c6408ca72b4f521589b4bc411c293d295ed16058f27a57a94761e9ab346be'
'b99893e3d68f1c3963796fc3972e16e96731d62429b715d283fca60885d32bf2'
'a96fc6f781680f7dce07fd04e06fd8dab6f64bb3c13fe3f6f982540ea6ea073d'
'0685aa8e20e5d76844c3e501695b004385a4265c5e2a3030a17dd867b0d969d0'
'b78480bce842c16b4da16cdf2b028c182c1d51c65cecb10d32fd39e96a787c3b'
'ed71703c984af03bfefa29f00c425fe94b7de987b5c94e8b662bc94e778862ee'
'4de2aaf2b4d5488e29782865c14a6fa4580e31ce541013c7eef3744bf34d7e85'
'54db03dadaecfe01a051d95e4e37608f0a4932c8b88c37e4d461f659794cca87'
'f203c8c4052f0538edcbb9bc48c91ae2f3cb150c6f7b6bc2080ad629c4b3d4be'
'1dabb52a527f006eafe0da24eb2952b39623216bc123a9afe1867f43c9e6e664'
'115e5bf1dc091b14a97f4f5c8ba53624a1445426030f9a5166a9602c309db53e'
'331af7adc53b87c8b377b3e0a1e65a9f3b2c241b72048c5629f452ce8aa531ee'
'56bb5044285fd87718a1c8593ee9c780cdec545f9c41e08b73b339e9c0adb433'
'f38f07fdc1fecf971ddce8e37e88c064144c842ddb3f2be3bab61fc8812c760e'
'2ebb52e6ba331ea759a7136e93355d83514453126d573e8c9289f0c35aeba106'
'a0d15f9fe1577ca7284c2aa538a922fe083d94a2fe954de67aad699ad84a8320'
'83474178a6d3fee7975fe2bab0b27f1c8037a1c288a36aa9c796bfec2f6f39fd'
'3e947b19185e8b4f85546707dc0228c63f61639f32f914e2faed9ca5396bcb3a'
'7e0f2d0945eb571c861081925b2da96e74cf3a818f000dc5bc364c81a117a12e'
'fbf4bd18f9bb7f88e052df0211f2890373528b47c05d76092a6b2b57cdc802e4'
'bd02485944fe566561d7fe898d6d8080da2d5823cfd280ddd9eb8da5f53feb12'
'110a255a39d50655a3a5b4c6c3f836beb5249b271a8b95c82020d827cfc69387'
'a1d58ccb29375a9cf00fc830f1afb357416953ffa3829d1c71fc25bfba219c03'
'3bb4f399795f75767cb5e4684d0e1cd0e70b82f09e2234730f5b3be23ea30d97'
'd17ee858f2182b0e189a8f894909a1214b24bb914fb0b6c98f15fcba33e41561'
'abda2d8486b2ef9ef9c85fcfa0d2fa17afe83c3a23dc6f1e3340042f75083330'
'073a2882d383d87d37e9fc1b3e57b8d94898784df8d9b144a07767b2f3497e23'
'f1cfeb815277166384632bd9730fe89f64dc5da7ee09c13a0b3515da08b08847'
'be5379525508e0bc0c374f20a669c38c93986e24a07696d2a83a9552cc085b8d'
'3f678e1c2d5280e7e712d35383557c31e069833b412242a18c8f395b4b68cc67'
'3262ce24714dc6cfea5b18d528d7f1a333128eadf5aa9c3a026131c34f082e1f'
'e3b0171303b3e28a7347a81b1110dfe42df92a87d160caf624510304d5390728'
'aa623bd762f33f2724b40a55bd2d2c4100b47b81586ae2f5d6b430ab4646f02c'
'2874642706ef2360960c254a318da6be72a83e3f4c9e0cd8d411a66c0864d911'
'da2353b0d62d3511e44f27696cea0d4b7540b77cedffa5840fe202ae57e09890'
'6c4b0c469f3c04e5586553b7e4e8e30e8e36163f30d4139605b7c0eddf994347')