Files
MINGW-packages/mingw-w64-python3/PKGBUILD
2018-12-25 08:58:30 +03:00

531 lines
25 KiB
Bash

# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Contributor: Saul Ibarra Corretge <saghul@gmail.com>
# Contributor: Frode Solheim <frode@fs-uae.net>
# TODO :: subprocess.Popen .. specifically list2cmdline in subprocess.py
# needs a fix so it can handle running MSYS2 executables better.
# Arguments should not be quoted in the Windows fashion as-per:
# http://www.daviddeley.com/autohotkey/parameters/parameters.htm
# but instead how Cygwin expects them to be quoted. Checking for
# {cygwin,msys-2.0}.dll in the executable is the only way that I
# can think to do this at present.
# Any double quoted string will cause problems, e.g.
# -DGNOMELOCALEDIR=\"/mingw64/share/locale\"
_realname=python3
pkgbase="mingw-w64-${_realname}"
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
_pybasever=3.7
pkgver=${_pybasever}.2
pkgrel=1
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
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}-mpdecimal"
"${MINGW_PACKAGE_PREFIX}-ncurses"
"${MINGW_PACKAGE_PREFIX}-openssl"
"${MINGW_PACKAGE_PREFIX}-tcl"
"${MINGW_PACKAGE_PREFIX}-tk"
"${MINGW_PACKAGE_PREFIX}-zlib"
"${MINGW_PACKAGE_PREFIX}-xz"
"${MINGW_PACKAGE_PREFIX}-sqlite3"
)
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
0002-restore-setup-config.patch
0100-MINGW-BASE-use-NT-thread-model.patch
0110-MINGW-translate-gcc-internal-defines-to-python-platf.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
0170-MINGW-add-srcdir-PC-to-CPPFLAGS.patch
0180-MINGW-init-system-calls.patch
0200-MINGW-build-in-windows-modules-winreg.patch
0210-MINGW-determine-if-pwdmodule-should-be-used.patch
0230-MINGW-AC_LIBOBJ-replacement-of-fileblocks.patch
0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch
0260-MINGW-compiler-enable-new-dtags.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
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-and-_winapi-modules.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
0464-use-replace-instead-rename-to-avoid-failure-on-windo.patch
0470-MINGW-avoid-circular-dependency-from-time-module-dur.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
0555-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
0560-mingw-use-posix-getpath.patch
0565-mingw-add-ModuleFileName-dir-to-PATH.patch
0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.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
0720-mingw-pdcurses_ISPAD.patch
0740-grammar-fixes.patch
0750-builddir-fixes.patch
0760-msys-monkeypatch-os-system-via-sh-exe.patch
0770-msys-replace-slashes-used-in-io-redirection.patch
0800-mingw-install-layout-as-posix.patch
0810-remove_path_max.default.patch
0820-dont-link-with-gettext.patch
0830-ctypes-python-dll.patch
0840-gdbm-module-includes.patch
0845-3.7-_abs-mingw.patch
0850-use-gnu_printf-in-format.patch
0870-mingw-fix-ssl-dont-use-enum_certificates.patch
0890-mingw-build-optimized-ext.patch
0900-cygwinccompiler-dont-strip-modules-if-pydebug.patch
0910-fix-using-dllhandle-and-winver-mingw.patch
0920-mingw-add-LIBPL-to-library-dirs.patch
0930-mingw-w64-build-overlapped-module.patch
0940-mingw-w64-Also-define-_Py_BEGIN_END_SUPPRESS_IPH-when-Py_BUILD_CORE_MODULE.patch
0970-Add-AMD64-to-sys-config-so-msvccompiler-get_build_version-works.patch
0990-MINGW-link-with-additional-library.patch
1010-install-msilib.patch
1620-fix-signal-module-build.patch
1630-build-winconsoleio.patch
1650-expose-sem_unlink.patch
1700-cygpty-isatty.patch
1701-disable-broken-gdbm-module.patch
1800-link-win-resource-files-and-build-pythonw.patch
1810-3.7-mpdec-mingw.patch
1830-mingw-implement-setenv-for-PY_COERCE_C_LOCALE.patch
1850-disable-readline.patch
1860-fix-isselectable.patch
2000-warnings-fixes.patch
1900-ctypes-dont-depend-on-internal-libffi.patch
smoketests.py)
# 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 \
Modules/Setup.config.in \
Python/fileblocks.c
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 \
0002-restore-setup-config.patch
plain "Apply Roumen Petrov's core patches (10)"
apply_patch_with_msg \
0100-MINGW-BASE-use-NT-thread-model.patch \
0110-MINGW-translate-gcc-internal-defines-to-python-platf.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 \
0170-MINGW-add-srcdir-PC-to-CPPFLAGS.patch \
0180-MINGW-init-system-calls.patch \
0200-MINGW-build-in-windows-modules-winreg.patch \
0210-MINGW-determine-if-pwdmodule-should-be-used.patch \
0230-MINGW-AC_LIBOBJ-replacement-of-fileblocks.patch
plain "Apply Roumen Petrov's compiler patch (2)"
apply_patch_with_msg \
0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch \
0260-MINGW-compiler-enable-new-dtags.patch
plain "Apply Roumen Petrov's extensions patches (21)"
apply_patch_with_msg \
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 \
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-and-_winapi-modules.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 \
0464-use-replace-instead-rename-to-avoid-failure-on-windo.patch \
0470-MINGW-avoid-circular-dependency-from-time-module-dur.patch \
0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch \
0490-MINGW-customize-site.patch
plain "Apply Ray Donnelly's general/cross patches (42)"
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 \
0555-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch \
0560-mingw-use-posix-getpath.patch \
0565-mingw-add-ModuleFileName-dir-to-PATH.patch \
0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch
# 0610- changed to not using -DVPATH='"$(VPATH_b2h)"' anymore since VPATH is
# relative, therefore getpath.c:355: joinpath(prefix, vpath) works naturally
apply_patch_with_msg \
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
apply_patch_with_msg \
0720-mingw-pdcurses_ISPAD.patch \
0740-grammar-fixes.patch \
0750-builddir-fixes.patch \
0760-msys-monkeypatch-os-system-via-sh-exe.patch \
0770-msys-replace-slashes-used-in-io-redirection.patch \
0800-mingw-install-layout-as-posix.patch \
0810-remove_path_max.default.patch \
0820-dont-link-with-gettext.patch \
0830-ctypes-python-dll.patch \
0840-gdbm-module-includes.patch \
0845-3.7-_abs-mingw.patch \
0850-use-gnu_printf-in-format.patch \
0870-mingw-fix-ssl-dont-use-enum_certificates.patch \
0890-mingw-build-optimized-ext.patch \
0900-cygwinccompiler-dont-strip-modules-if-pydebug.patch \
0910-fix-using-dllhandle-and-winver-mingw.patch \
0920-mingw-add-LIBPL-to-library-dirs.patch \
0930-mingw-w64-build-overlapped-module.patch \
0940-mingw-w64-Also-define-_Py_BEGIN_END_SUPPRESS_IPH-when-Py_BUILD_CORE_MODULE.patch \
0970-Add-AMD64-to-sys-config-so-msvccompiler-get_build_version-works.patch \
0990-MINGW-link-with-additional-library.patch \
1010-install-msilib.patch
plain "New patches added for the update from 3.5.3 to 3.6.1"
apply_patch_with_msg \
1620-fix-signal-module-build.patch \
1630-build-winconsoleio.patch \
1650-expose-sem_unlink.patch
# Extend some isatty calls to check for mintty when checking for
# a terminal output.
# https://github.com/Alexpux/MINGW-packages/issues/2645
# https://github.com/Alexpux/MINGW-packages/issues/2656
apply_patch_with_msg \
1700-cygpty-isatty.patch
# gdbm is broken and as a result breaks dbm/shelve.
# Don't include it so the dbm.dumb backend is used instead,
# like with the official CPython build.
apply_patch_with_msg \
1701-disable-broken-gdbm-module.patch
# https://github.com/Alexpux/MINGW-packages/issues/3139
apply_patch_with_msg \
1800-link-win-resource-files-and-build-pythonw.patch
apply_patch_with_msg \
1810-3.7-mpdec-mingw.patch \
1830-mingw-implement-setenv-for-PY_COERCE_C_LOCALE.patch \
1850-disable-readline.patch \
1860-fix-isselectable.patch
apply_patch_with_msg 2000-warnings-fixes.patch
# https://github.com/python/cpython/pull/9258
apply_patch_with_msg 1900-ctypes-dont-depend-on-internal-libffi.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
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}*
}
check() {
cd "${srcdir}/build-${CARCH}"
# Some basic tests to ensure nothing major or MSYS2 specific features are
# broken
./python.exe "${srcdir}/smoketests.py"
MSYSTEM= ./python.exe "${srcdir}/smoketests.py"
# make test EXTRATESTOPTS="-v"
}
build() {
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
CFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -D_WIN32_WINNT=0x0601"
CXXFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -D_WIN32_WINNT=0x0601"
CPPFLAGS+=" -I${PREFIX_WIN}/include/ncursesw "
declare -a _extra_config
if check_option "strip" "y"; then
LDFLAGS+=" -s "
fi
if check_option "debug" "n"; then
CFLAGS+=" -DNDEBUG "
CXXFLAGS+=" -DNDEBUG "
else
plain " -DDEBUG -DPy_DEBUG -D_DEBUG does not work unfortunately .."
# CFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG "
# CXXFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG "
CFLAGS+=" -O0 -ggdb"
CXXFLAGS+=" -O0 -ggdb"
_extra_config+=("--with-pydebug")
fi
# 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-nt-threads \
--with-system-expat \
--with-system-ffi \
--with-system-libmpdec \
--without-ensurepip \
"${_extra_config[@]}" \
OPT=""
make
}
package() {
cd "${srcdir}/build-${CARCH}"
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
MSYSTEM=MINGW \
MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
make -j1 install DESTDIR="${pkgdir}"
if check_option "debug" "n"; then
VERABI=${_pybasever}m
else
VERABI=${_pybasever}dm
fi
# 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
[[ -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
rm "${pkgdir}${MINGW_PREFIX}"/bin/2to3
cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/libpython${VERABI}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${VERABI}.dll.a
# Need for building boost python3 module
cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/libpython${VERABI}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${_pybasever}.dll.a
cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/libpython${VERABI}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/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 python3|"
# clean-up reference to build directory
sed -i "s#${srcdir}/Python-${pkgver}:##" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/Makefile
for fscripts in 2to3-${_pybasever} idle3 idle${_pybasever} pydoc3 pydoc${_pybasever} pyvenv pyvenv-${_pybasever}; do
sed -e "s|${PREFIX_WIN}/bin/python${_pybasever}.exe|/usr/bin/env python${_pybasever}.exe|g" -i "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts}
done
sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${VERABI}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/python-config.py
# 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/python${VERABI}-config \
-i "${pkgdir}${MINGW_PREFIX}"/bin/python${_pybasever}-config \
-i "${pkgdir}${MINGW_PREFIX}"/bin/python3-config
# replace paths in sysconfig
sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" \
"${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/lib-dynload/_sysconfigdata*.py \
"${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/smtpd.py
# Doing sysconfig relocatable as patch 0000 do it only partially
sed -e "s/sys.prefix + //g" \
-e "s/'\/bin'/sys.prefix + '\/bin'/g" \
-e "s/'\/include\//sys.prefix + '\/include\//g" \
-e "s/'\/include /sys.prefix + '\/include /g" \
-e "s/'\/include'/sys.prefix + '\/include'/g" \
-e "s/ \/include\// ' + sys.prefix + '\/include\//g" \
-e "s/ \/include / ' + sys.prefix + '\/include /g" \
-e "s/'\/lib\//sys.prefix + '\/lib\//g" \
-e "s/'\/lib /sys.prefix + '\/lib /g" \
-e "s/'\/lib'/sys.prefix + '\/lib'/g" \
-e "s/ \/lib\// ' + sys.prefix + '\/lib\//g" \
-e "s/ \/lib / ' + sys.prefix + '\/lib /g" \
-e "s/'\/share\//sys.prefix + '\/share\//g" \
-e "s/'\/share'/sys.prefix + '\/share'/g" \
-i "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/lib-dynload/_sysconfigdata*.py
}
sha256sums=('d83fe8ce51b1bb48bbcf0550fd265b9a75cdfdfa93f916f9e700aef8444bf1bb'
'fa58527f17b1c3defeb9345ef0606d937b2c6ea2746033bfe980879eefe2c50e'
'8b2c7d6b3d0efec48f44c1e46be25fcfb4ba6711ca49b93cf9fa40fb4f0966b6'
'b2111d31e812b33e5cec85f6505bd730975dd242f8eb138307f71ffe0d7fdf6b'
'7983bc803f4b845c09589b039d4dd099570e68716c339c940d785ef4785ee1a8'
'43be25da4f4d58ab4f40e3338907c057fd98999f7f32e83816ad20c7a41e6f2e'
'cac9b0ec37bd5fb6e21fa6b4708242b160b60de1e7cdfaa7a843b4f5e1a0e498'
'3028e28ce3c76e2cde223c39ef903b789015773834b69260b4116adb22b31e7b'
'e05770b5fc8126141ee21ccb252a126d366c4249253ab7a2aeafafbd2e1d4f54'
'2556db898b65b642455161839e9682d07a3910359a8367db6b73b8abd3a02047'
'8946c6ee9dab5ed24c083a82e71d74013a3690afc7e98f58d239d2afb1fbef70'
'b026d5fa0eddeda532d4a3352b4d6f5506593cef0aae4c361be791faedd45bd7'
'578e395e45ce69445639b0bb1ad9c09934acfa6090d4bca96d0955a4b325ace8'
'ce1e3f39cd6e4003f1dfbf43a81425a5cf34969a76f9ca7715edd8d8ae337725'
'a2934b7de03c247291a09ab5509a6b6a98f93cb132f87cd428167b5f7339d632'
'3b923d508432cc9df6f3593ed1bbe7e97b6956ae8d6eaaf047c7263186679e0a'
'1121c2bed2e4bd6415e3e246d48a3bd5ae66e01390cb5bae2ea55eb8ed4c64ae'
'a2c96cc1e0014121a09ba25dd08f722cb0d507488be52b217ee94a28238532cb'
'd334e3a50ce9464961739218c4832ade990e14d613416a66f6896c20b6a14873'
'ef0c54f898cf8511766f7d4ea5c043fbf50b0280618a81efc48f5448397c112e'
'364e3afbfe4b436b2c63d352a98d552b55baebbe4bee0b19dadaadd369f6fe97'
'b86c646b8eca162f73a107e453498d06ed7c79b14d5823a48f7108822230bdfd'
'22e002727f64cac5f5ba38d1da516fb10e04f41f3366e15796ed36a05f1f1685'
'c629be9a191948eff146f07dcb09c760ab55acfd08639dfc94dc1bc43160012f'
'92d106d0dbc273cb08cb52759ba8467e16e6d61019eeb3464397822b991ed861'
'8e2ae92f24ca52b16215612a57fe5076d5b0ea1cc0923d5ab9bd7395b6330816'
'b21b63eb077c4ed9380034957034d9fc726992e34abd9185d9f57080e088b4e8'
'4f28511452f8c56aadc79e6e1079531aad94392778f9a62090e9c423487baf4c'
'd555fac5000a86ade7a1c191d3eb09bdb8aa46d0beb73e54e6243731fae35e8f'
'4fb0f33a99784b2f397adc013591c64bdbdbb8e7a4f839880a8fc4678ee2b435'
'986bcf760501ca0f069588b124afd53ffdd37fa1edfd85a8b631d63709859f75'
'3fa1ceb829d311ee42c919b42c78917b2ca3b8ab1b30a5247232f4ac0cef1d2f'
'85546a45a460e42e43e97d158d0f78082c711c5a369e3bbac1bfa5065208d51c'
'ae5c4001975f10c15aae614b48671821a23ea7367fb2e6a911707dde48c28638'
'a14d40567e6bf6d08fab55e95a56495eb6fcdfc9d06d80b959b487df26481190'
'a8b2096f3b4a26d32a325e778ed47cd921d40a1ef481a0387a5ff3592d5d9c77'
'c0fa618b89fd43b27862f4c765926f19cf5679a46e8af3d8eb918a648e33429b'
'4802eceab9a147fc1cddaadf84917839edfca0b3dcd33d3be92e4c2edde3c726'
'f0d20525f42387153cf82e2d4a3139a7b7a39a7408833c8b02e9c072a9967674'
'8bd4dddfda38e8dae700eca868693cba3b2fb766088b46a52a4ac475e9e6b25e'
'a88ed0a61dcb0a860286ab1d6bf489b272a670625687924943713a58c6068a94'
'80dabe16710799fb070dfeed071161dfd439f156e2cf79e0c5ab7d51279d342f'
'3f743eb2e067dc0d315dee875c4525791388a2d7636f9a74cd9721002fc13b83'
'e7be78409c070ea2fa76a8f568d6121deaa3fc4545fc0565745c044a67376616'
'c64baa4c0457186269f02c74f5f58f4c56fd435384c45f778e86deac9b9f435f'
'65454f7d338af3a41f574f87b2d5a91ec3a96d474fb61d2d5fc9f9938a7a83fb'
'5a5e9bbe642e2c86b3feee87b14ca3c4716178266a08deaa02a79b71fd36f00f'
'acea1a2bdbb96fa2bcb368225d42df54c41ea308f91f849e2c3c2770845207c6'
'ec4d73e328cf5f0cc83b2d865aec9ca66dea1ecd9f4da4be98e1170a8d20b3b4'
'77cf11ea1d75d0a08dc03ff6978294e923a4123119b36822fd1bd724cabb75c7'
'b1ffcbd24d5ca05a6f4b10288ff0e720db3cc106a6d44cdb65b896ce44bec461'
'dc2badcbac568895c37fe5add0e59087c7864937f3c0ce01fb910de5bafab024'
'7aeee8c27434f4684a253b5c91ece99f01f78db04cab92739c19ff71adbe1bf0'
'59b7abb07b3ee572668fee1ad021837187d267a715fcd5a1a4fc93276a9646ed'
'ce32ddf6bb7876237fdfad713f1c8f1d97afa470d428d3129e1c01308f4c8302'
'f445523eff779faa76740eb32daf3ffb61834a6a49bd05939e61726e1174cd4b'
'8c906d78bc2a8542e5f52fa178d398fb2c298beef8cbb5efd2d74729bee2bb47'
'5094776bb60411f48ed57c35ccf1da76fe9aafabaf13f20ed8eb199ef5b51c66'
'c4adc7cfc4f182c953c1792472728eac848cec0bac9526f7fab0f03a172e4c4d'
'4f3eaf5a4fbaa5848a68bf1f686e3854ac6bee7e31a0a643dcaa22b52c1cd078'
'e176cd882818e857d6647a4fc08b00f353f11883f8cded1326239c3b2138b6ba'
'4eace191297b47ebab2bf7dd68f6edaa1cb46d3f44dc86c9ebc88f96d6a46dff'
'508ebdc995055ace5673d4734f015da4d989953f57a7ac076d04c97a79d5e1a7'
'c9510eea8d927f3ea1478b7e4f9f4dc652995a768fdfe85bc3f4083fa93fdc4f'
'd37f6c6683784a5554e2065a52dc05ad55cf28ea18333acf42af421b7d4d5803'
'e076f36172f8b4fa76d06d41fef66e73b4e64a88e91e6ecbd9fd6822a0d14b32'
'28684b03d3bab789983163449afa9da4d910fcfe944c9ff9853feb4c672e82fc'
'f6a9909714c553ef6c2ea1c2e96a7e3f61e5cd8c60fe833657f5d62c31e0266b'
'088117409d4f60cec42aff46695f4f80911519d5488466efcdbd9d3d9cbcd583'
'0ae09d2f23e346b2f33256782b9ac42bfaae47f6b1175b16a5e30ba2dfcbaa5e'
'30b60e3242d9dfe8314e099fac1aa9ee478032abe4c6a35644fbdb1dee774c41'
'587d8c789d152145608ad5ccc74a178b37335b9accc5d26798fb80040c1579ac'
'a032186578651a66e20157e73728487d8c2845fb01200178182f300ef1253f2c'
'cb562435b70aa4184751df111278e333402fdacad04248859dfc973878f81461'
'0593d93f5f9312bb4233b6809d2fdb30edbac37889fb0e4e96abe818d884194a'
'6a6e2de169adcf5d9f13b4ae31171f11f29d82fd1dd29b406fd248044b6d3776'
'56a68e711806062161a1ddf4a7f16f1141bada46ef5f64f526ecda460edf299d'
'bc8057f54cb377d9fe3cf4e2a7d00980d32249a57471af7f94234f6258486c61'
'204b1e14b4a9614182a68074bd66c33a4ae84134210458079d22d61d8526ff1c'
'0d76ffdca82b978e9fda07e12351cd61f23973af204e65db69ebafce71aa7880'
'9785322e90050ad9019ce7edd1f3c549ac4ae78d0ed240ca1bffffe9de588d2e'
'f8d3b68097cc0bc53d846cd55744dc9b311f3f32eaefb8d03c6b17cfb61485f0'
'cdbdbfe4b8c02d58fd36db15d94425ae0b48124e709645fb717167280ff1bf15'
'3262ce24714dc6cfea5b18d528d7f1a333128eadf5aa9c3a026131c34f082e1f'
'bd9b934e8c1f92573115efaef6b6b04966e3222ba769511e006366d1217d34d6'
'e91f897e43063e0c4e52d971f5de4b5e193d9eb6a35fc3acfca1dc057a2fcd65'
'e3b0171303b3e28a7347a81b1110dfe42df92a87d160caf624510304d5390728'
'ea41f389324bf56277ef27a02f3510d22e5c88becbdb465468bdad9c15e0d229')