From 1345c76da0fbea25fb3d4083d049edaf365c7c3d Mon Sep 17 00:00:00 2001 From: liwentao_uiw Date: Sun, 10 Jul 2022 16:37:17 +0800 Subject: [PATCH] [LLVM] Add patch to support cpython_mingw v3.10.2 features for python v3.10.2 which is used for llvm toolchain build Signed-off-by: liwentao --- patchs/cpython_mingw_v3.10.2.patch | 11561 +++++++++++++++++++++++++++ 1 file changed, 11561 insertions(+) create mode 100644 patchs/cpython_mingw_v3.10.2.patch diff --git a/patchs/cpython_mingw_v3.10.2.patch b/patchs/cpython_mingw_v3.10.2.patch new file mode 100644 index 0000000..575d744 --- /dev/null +++ b/patchs/cpython_mingw_v3.10.2.patch @@ -0,0 +1,11561 @@ +diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml +new file mode 100644 +index 0000000000..40b1d5ef8e +--- /dev/null ++++ b/.github/workflows/mingw.yml +@@ -0,0 +1,291 @@ ++name: Build ++on: [push, pull_request, workflow_dispatch] ++ ++jobs: ++ build: ++ runs-on: windows-2022 ++ strategy: ++ fail-fast: false ++ matrix: ++ msystem: ['MINGW64','MINGW32','UCRT64','CLANG64'] ++ include: ++ - msystem: MINGW64 ++ prefix: mingw-w64-x86_64 ++ - msystem: MINGW32 ++ prefix: mingw-w64-i686 ++ - msystem: UCRT64 ++ prefix: mingw-w64-ucrt-x86_64 ++ - msystem: CLANG64 ++ prefix: mingw-w64-clang-x86_64 ++ #- msystem: CLANG32 ++ # prefix: mingw-w64-clang-i686 ++ steps: ++ - name: Setup git ++ run: | ++ git config --global core.autocrlf false ++ git config --global core.eol lf ++ - uses: actions/checkout@v2 ++ - uses: msys2/setup-msys2@v2 ++ with: ++ msystem: ${{ matrix.msystem }} ++ release: false ++ update: true ++ install: >- ++ make ++ binutils ++ autoconf ++ autoconf-archive ++ automake-wrapper ++ tar ++ gzip ++ ${{ matrix.prefix }}-toolchain ++ ${{ matrix.prefix }}-expat ++ ${{ matrix.prefix }}-bzip2 ++ ${{ matrix.prefix }}-libffi ++ ${{ matrix.prefix }}-mpdecimal ++ ${{ matrix.prefix }}-ncurses ++ ${{ matrix.prefix }}-openssl ++ ${{ matrix.prefix }}-sqlite3 ++ ${{ matrix.prefix }}-tcl ++ ${{ matrix.prefix }}-tk ++ ${{ matrix.prefix }}-zlib ++ ${{ matrix.prefix }}-xz ++ ${{ matrix.prefix }}-tzdata ++ ++ - name: Build Python ++ shell: msys2 {0} ++ run: | ++ set -ex ++ ++ if [ ${{ matrix.msystem }} == "CLANG64" ] ++ then ++ export CC=clang ++ export CXX=clang++ ++ fi ++ autoreconf -vfi ++ ++ rm -Rf _build && mkdir _build && cd _build ++ ++ ../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 \ ++ --enable-optimizations ++ ++ make -j8 ++ ++ - name: Run Smoke Test (build) ++ shell: msys2 {0} ++ run: | ++ SMOKETESTS="$(pwd)/mingw_smoketests.py" ++ cd _build ++ ./python.exe "$SMOKETESTS" ++ MSYSTEM= ./python.exe "$SMOKETESTS" ++ ++ - name: Run tests ++ shell: msys2 {0} ++ run: | ++ IGNOREFILE="$(pwd)/mingw_ignorefile.txt" ++ cd _build ++ MSYSTEM= ./python.exe -m test -j8 --ignorefile "$IGNOREFILE" -W ++ ++ - name: Run broken tests ++ continue-on-error: true ++ shell: msys2 {0} ++ run: | ++ IGNOREFILE="$(pwd)/mingw_ignorefile.txt" ++ cd _build ++ MSYSTEM= ./python.exe -m test -j8 --matchfile "$IGNOREFILE" -W ++ ++ - name: Install ++ shell: msys2 {0} ++ run: | ++ set -ex ++ cd _build ++ ++ pkgdir=python_pkgdir ++ ++ make -j1 install DESTDIR="${pkgdir}" ++ ++ # Fix shebangs ++ _pybasever=$(./python.exe -c "import sys; print(f'{sys.version_info[0]}.{sys.version_info[1]}');") ++ for fscripts in 2to3 2to3-${_pybasever} idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do ++ sed -i "s|$(cygpath -w ${MINGW_PREFIX} | sed 's|\\|\\\\|g')/bin/python${_pybasever}.exe|/usr/bin/env python${_pybasever}.exe|g" "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts} ++ done ++ sed -i "s|#!${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${_pybasever}/python-config.py ++ ++ # Create version-less aliases ++ 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 ++ ++ - name: Run Smoke Test (installed) ++ shell: msys2 {0} ++ run: | ++ export PYTHONTZPATH="${MINGW_PREFIX}/share/zoneinfo" ++ SMOKETESTS="$(pwd)/mingw_smoketests.py" ++ cd _build ++ cd python_pkgdir/${MINGW_PREFIX}/bin ++ ./python.exe "$SMOKETESTS" ++ MSYSTEM= ./python.exe "$SMOKETESTS" ++ ++ - name: Compress ++ if: always() ++ shell: msys2 {0} ++ run: | ++ cd _build ++ tar -zcf python.tar.gz python_pkgdir/ ++ ++ - name: Upload ++ uses: actions/upload-artifact@v2 ++ if: always() ++ with: ++ name: build-${{ matrix.msystem }} ++ path: _build/python.tar.gz ++ ++ cross-gcc-x86_64: ++ runs-on: ubuntu-latest ++ container: ++ image: archlinux:base-devel ++ steps: ++ - uses: actions/checkout@v2 ++ - name: Install deps ++ run: | ++ pacman --noconfirm -Suuy ++ pacman --needed --noconfirm -S mingw-w64-gcc autoconf-archive autoconf automake zip ++ ++ - uses: actions/setup-python@v2 ++ with: ++ python-version: '3.10' ++ ++ - name: Check Python Version ++ run: | ++ which python ++ python --version ++ ++ - name: Build ++ run: | ++ autoreconf -vfi ++ ++ mkdir _build && cd _build ++ ++ ../configure \ ++ --host=x86_64-w64-mingw32 \ ++ --build=x86_64-pc-linux-gnu \ ++ --enable-shared \ ++ --with-system-expat \ ++ --with-system-ffi \ ++ --with-system-libmpdec \ ++ --without-ensurepip \ ++ --enable-loadable-sqlite-extensions ++ ++ make -j8 ++ ++ make install DESTDIR="$(pwd)/install" ++ ++ - name: 'Zip files' ++ run: | ++ zip -r install.zip _build/install ++ ++ - name: Upload ++ uses: actions/upload-artifact@v2 ++ with: ++ name: build-cross-gcc-x86_64 ++ path: install.zip ++ ++ cross-gcc-x86_64-test: ++ needs: [cross-gcc-x86_64] ++ runs-on: windows-latest ++ steps: ++ - uses: actions/download-artifact@v2 ++ with: ++ name: build-cross-gcc-x86_64 ++ ++ - name: 'Run tests' ++ run: | ++ 7z x install.zip ++ ./_build/install/usr/local/bin/python3.exe -c "import sysconfig, pprint; pprint.pprint(sysconfig.get_config_vars())" ++ ++ ++ cross-llvm-mingw: ++ runs-on: ubuntu-18.04 ++ container: ++ image: mstorsjo/llvm-mingw:latest ++ strategy: ++ matrix: ++ arch: ['x86_64', 'i686', 'aarch64', 'armv7'] ++ steps: ++ - uses: actions/checkout@v2 ++ - name: Install deps ++ run: | ++ apt-get update -qq ++ apt-get install -qqy autoconf-archive ++ ++ - uses: actions/setup-python@v2 ++ with: ++ python-version: '3.10' ++ ++ - name: Check Python Version ++ run: | ++ which python ++ python --version ++ ++ - name: Build ++ run: | ++ autoreconf -vfi ++ ++ mkdir _build && cd _build ++ ++ export CC=${{ matrix.arch }}-w64-mingw32-clang ++ export CXX=${CC}++ ++ ../configure \ ++ --host=${{ matrix.arch }}-w64-mingw32 \ ++ --build=x86_64-pc-linux-gnu \ ++ --enable-shared \ ++ --with-system-expat \ ++ --with-system-ffi \ ++ --with-system-libmpdec \ ++ --without-ensurepip \ ++ --without-c-locale-coercion \ ++ --enable-loadable-sqlite-extensions ++ ++ make -j8 ++ ++ make install DESTDIR="$(pwd)/install" ++ ++ - name: 'Zip files' ++ run: | ++ zip -r install.zip _build/install ++ ++ - name: Upload ++ uses: actions/upload-artifact@v2 ++ with: ++ name: build-cross-llvm-mingw-${{ matrix.arch }} ++ path: install.zip ++ ++ cross-llvm-mingw-test: ++ needs: [cross-llvm-mingw] ++ runs-on: windows-latest ++ strategy: ++ matrix: ++ arch: ['x86_64', 'i686'] ++ steps: ++ - uses: actions/download-artifact@v2 ++ with: ++ name: build-cross-llvm-mingw-${{ matrix.arch }} ++ ++ - name: 'Run tests' ++ run: | ++ 7z x install.zip ++ ./_build/install/usr/local/bin/python3.exe -c "import sysconfig, pprint; pprint.pprint(sysconfig.get_config_vars())" ++ ++ +diff --git a/Include/bytesobject.h b/Include/bytesobject.h +index 39c241a2dc..902d4a1558 100644 +--- a/Include/bytesobject.h ++++ b/Include/bytesobject.h +@@ -35,9 +35,9 @@ PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t); + PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *); + PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *); + PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list) +- Py_GCC_ATTRIBUTE((format(printf, 1, 0))); ++ Py_PRINTF(1, 0); + PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...) +- Py_GCC_ATTRIBUTE((format(printf, 1, 2))); ++ Py_PRINTF(1, 2); + PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *); + PyAPI_FUNC(char *) PyBytes_AsString(PyObject *); + PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int); +diff --git a/Include/cpython/fileutils.h b/Include/cpython/fileutils.h +index ccf37e9468..c287ab3dba 100644 +--- a/Include/cpython/fileutils.h ++++ b/Include/cpython/fileutils.h +@@ -135,9 +135,8 @@ PyAPI_FUNC(wchar_t*) _Py_wrealpath( + size_t resolved_path_len); + #endif + +-#ifndef MS_WINDOWS + PyAPI_FUNC(int) _Py_isabs(const wchar_t *path); +-#endif ++PyAPI_FUNC(int) _Py_issep(const wchar_t ch); + + PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p); + +diff --git a/Include/fileobject.h b/Include/fileobject.h +index 6ec2994aa8..a80f195d89 100644 +--- a/Include/fileobject.h ++++ b/Include/fileobject.h +@@ -30,7 +30,7 @@ PyAPI_DATA(int) Py_UTF8Mode; + #endif + + /* A routine to check if a file descriptor can be select()-ed. */ +-#ifdef _MSC_VER ++#ifdef MS_WINDOWS + /* On Windows, any socket fd can be select()-ed, no matter how high */ + #define _PyIsSelectable_fd(FD) (1) + #else +diff --git a/Include/internal/pycore_condvar.h b/Include/internal/pycore_condvar.h +index 8b89d70951..dd98245596 100644 +--- a/Include/internal/pycore_condvar.h ++++ b/Include/internal/pycore_condvar.h +@@ -5,6 +5,12 @@ + # error "this header requires Py_BUILD_CORE define" + #endif + ++#ifdef __MINGW32__ ++# if !defined(HAVE_PTHREAD_H) || defined(NT_THREADS) ++# undef _POSIX_THREADS ++# endif ++#endif ++ + #ifndef _POSIX_THREADS + /* This means pthreads are not implemented in libc headers, hence the macro + not present in unistd.h. But they still can be implemented as an external +@@ -37,6 +43,10 @@ + /* include windows if it hasn't been done before */ + #define WIN32_LEAN_AND_MEAN + #include ++/* winpthreads are involved via windows header, so need undef _POSIX_THREADS after header include */ ++#if defined(_POSIX_THREADS) ++#undef _POSIX_THREADS ++#endif + + /* options */ + /* non-emulated condition variables are provided for those that want +diff --git a/Include/iscygpty.h b/Include/iscygpty.h +new file mode 100644 +index 0000000000..82fd0affbd +--- /dev/null ++++ b/Include/iscygpty.h +@@ -0,0 +1,41 @@ ++/* ++ * iscygpty.h -- part of ptycheck ++ * https://github.com/k-takata/ptycheck ++ * ++ * Copyright (c) 2015-2017 K.Takata ++ * ++ * You can redistribute it and/or modify it under the terms of either ++ * the MIT license (as described below) or the Vim license. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifndef _ISCYGPTY_H ++#define _ISCYGPTY_H ++ ++#ifdef _WIN32 ++int is_cygpty(int fd); ++int is_cygpty_used(void); ++#else ++#define is_cygpty(fd) 0 ++#define is_cygpty_used() 0 ++#endif ++ ++#endif /* _ISCYGPTY_H */ +diff --git a/Include/osdefs.h b/Include/osdefs.h +index 3243944a14..99d49777a6 100644 +--- a/Include/osdefs.h ++++ b/Include/osdefs.h +@@ -10,7 +10,6 @@ extern "C" { + #ifdef MS_WINDOWS + #define SEP L'\\' + #define ALTSEP L'/' +-#define MAXPATHLEN 256 + #define DELIM L';' + #endif + +diff --git a/Include/py_curses.h b/Include/py_curses.h +index b70252d9d7..0d5cee2601 100644 +--- a/Include/py_curses.h ++++ b/Include/py_curses.h +@@ -36,6 +36,13 @@ + #include + #endif + ++#if defined(__MINGW32__) ++#include ++#if !defined(_ISPAD) ++#define _ISPAD 0x10 ++#endif ++#endif ++ + #ifdef HAVE_NCURSES_H + /* configure was checking , but we will + use , which has some or all these features. */ +diff --git a/Include/pyerrors.h b/Include/pyerrors.h +index f5d1c71157..a532821f37 100644 +--- a/Include/pyerrors.h ++++ b/Include/pyerrors.h +@@ -308,9 +308,9 @@ PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( + ); + + PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) +- Py_GCC_ATTRIBUTE((format(printf, 3, 4))); ++ Py_PRINTF(3, 4); + PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) +- Py_GCC_ATTRIBUTE((format(printf, 3, 0))); ++ Py_PRINTF(3, 0); + + #ifndef Py_LIMITED_API + # define Py_CPYTHON_ERRORS_H +diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h +index 2df7fe6e3c..ce3f4116fc 100644 +--- a/Include/pylifecycle.h ++++ b/Include/pylifecycle.h +@@ -21,6 +21,12 @@ PyAPI_FUNC(int) Py_IsInitialized(void); + PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void); + PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *); + ++PyAPI_FUNC(wchar_t) Py_GetSepW(const wchar_t *); ++PyAPI_FUNC(char) Py_GetSepA(const char *); ++ ++PyAPI_FUNC(void) Py_NormalizeSepsW(wchar_t *); ++PyAPI_FUNC(void) Py_NormalizeSepsA(char *); ++ + + /* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level + * exit functions. +@@ -46,7 +52,7 @@ PyAPI_FUNC(wchar_t *) Py_GetPrefix(void); + PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void); + PyAPI_FUNC(wchar_t *) Py_GetPath(void); + PyAPI_FUNC(void) Py_SetPath(const wchar_t *); +-#ifdef MS_WINDOWS ++#ifdef _MSC_VER + int _Py_CheckPython3(void); + #endif + +diff --git a/Include/pyport.h b/Include/pyport.h +index 6ab0ae4007..78f7d53ea0 100644 +--- a/Include/pyport.h ++++ b/Include/pyport.h +@@ -26,6 +26,21 @@ + #endif + + ++#ifdef __MINGW32__ ++/* Translate GCC[mingw*] platform specific defines to those ++ * used in python code. ++ */ ++#if !defined(MS_WIN64) && defined(_WIN64) ++# define MS_WIN64 ++#endif ++#if !defined(MS_WIN32) && defined(_WIN32) ++# define MS_WIN32 ++#endif ++#if !defined(MS_WINDOWS) && defined(MS_WIN32) ++# define MS_WINDOWS ++#endif ++#endif /* __MINGW32__*/ ++ + /************************************************************************** + Symbols and macros to supply platform-independent interfaces to basic + C language & library operations whose spellings vary across platforms. +@@ -654,12 +669,12 @@ extern char * _getpty(int *, int, mode_t, int); + */ + + /* +- All windows ports, except cygwin, are handled in PC/pyconfig.h. ++ Only MSVC windows ports is handled in PC/pyconfig.h. + +- Cygwin is the only other autoconf platform requiring special ++ Cygwin and Mingw is the only other autoconf platform requiring special + linkage handling and it uses __declspec(). + */ +-#if defined(__CYGWIN__) ++#if defined(__CYGWIN__) || defined(__MINGW32__) + # define HAVE_DECLSPEC_DLL + #endif + +@@ -672,21 +687,23 @@ extern char * _getpty(int *, int, mode_t, int); + # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE + # define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE + /* module init functions inside the core need no external linkage */ +- /* except for Cygwin to handle embedding */ +-# if defined(__CYGWIN__) ++ /* except for Cygwin/Mingw to handle embedding */ ++# if defined(__CYGWIN__) || defined(__MINGW32__) + # define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* +-# else /* __CYGWIN__ */ ++# else /* __CYGWIN__ || __MINGW32__*/ + # define PyMODINIT_FUNC PyObject* +-# endif /* __CYGWIN__ */ ++# endif /* __CYGWIN__ || __MINGW32__*/ + # else /* Py_BUILD_CORE */ + /* Building an extension module, or an embedded situation */ + /* public Python functions and data are imported */ + /* Under Cygwin, auto-import functions to prevent compilation */ + /* failures similar to those described at the bottom of 4.1: */ + /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ +-# if !defined(__CYGWIN__) ++# if defined(__CYGWIN__) || defined(__MINGW32__) ++# define PyAPI_FUNC(RTYPE) RTYPE ++# else + # define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE +-# endif /* !__CYGWIN__ */ ++# endif /* __CYGWIN__ || __MINGW32__*/ + # define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE + /* module init functions outside the core must be exported */ + # if defined(__cplusplus) +@@ -786,6 +803,12 @@ extern char * _getpty(int *, int, mode_t, int); + + #define Py_VA_COPY va_copy + ++#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__>= 4) || __GNUC__ > 4) ++# define Py_PRINTF(X,Y) Py_GCC_ATTRIBUTE((format(gnu_printf,X,Y))) ++#else ++# define Py_PRINTF(X,Y) Py_GCC_ATTRIBUTE((format(printf,X,Y))) ++#endif ++ + /* + * Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is + * detected by configure and defined in pyconfig.h. The code in pyconfig.h +diff --git a/Include/pythread.h b/Include/pythread.h +index bb9d864122..f1e52c6095 100644 +--- a/Include/pythread.h ++++ b/Include/pythread.h +@@ -8,6 +8,12 @@ typedef void *PyThread_type_lock; + extern "C" { + #endif + ++#ifdef __MINGW32__ ++# if !defined(HAVE_PTHREAD_H) || defined(NT_THREADS) ++# undef _POSIX_THREADS ++# endif ++#endif ++ + /* Return status codes for Python lock acquisition. Chosen for maximum + * backwards compatibility, ie failure -> 0, success -> 1. */ + typedef enum PyLockStatus { +diff --git a/Include/sysmodule.h b/Include/sysmodule.h +index 670e5d283f..d582963017 100644 +--- a/Include/sysmodule.h ++++ b/Include/sysmodule.h +@@ -15,9 +15,9 @@ PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int); + PyAPI_FUNC(void) PySys_SetPath(const wchar_t *); + + PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) +- Py_GCC_ATTRIBUTE((format(printf, 1, 2))); ++ Py_PRINTF(1, 2); + PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) +- Py_GCC_ATTRIBUTE((format(printf, 1, 2))); ++ Py_PRINTF(1, 2); + PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...); + PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...); + +diff --git a/Lib/compileall.py b/Lib/compileall.py +index 3755e76ba8..046efbf12c 100644 +--- a/Lib/compileall.py ++++ b/Lib/compileall.py +@@ -38,6 +38,8 @@ def _walk_dir(dir, maxlevels, quiet=0): + if name == '__pycache__': + continue + fullname = os.path.join(dir, name) ++ if sys.platform == "win32" and sys.version.find("GCC") >= 0: ++ fullname = fullname.replace('\\','/') + if not os.path.isdir(fullname): + yield fullname + elif (maxlevels > 0 and name != os.curdir and name != os.pardir and +diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py +index 4afa4ebd42..2fe2eec8ca 100644 +--- a/Lib/ctypes/__init__.py ++++ b/Lib/ctypes/__init__.py +@@ -456,7 +456,9 @@ def LoadLibrary(self, name): + cdll = LibraryLoader(CDLL) + pydll = LibraryLoader(PyDLL) + +-if _os.name == "nt": ++if _os.name == "nt" and _sys.version.find('GCC') >= 0: ++ pythonapi = PyDLL("libpython%d.%d%s.dll" % (_sys.version_info[:2] + (_sys.abiflags,)), None) ++elif _os.name == "nt": + pythonapi = PyDLL("python dll", None, _sys.dllhandle) + elif _sys.platform == "cygwin": + pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2]) +diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py +index 0c2510e161..48ddb3beb1 100644 +--- a/Lib/ctypes/util.py ++++ b/Lib/ctypes/util.py +@@ -31,6 +31,12 @@ def _get_build_version(): + # else we don't know what version of the compiler this is + return None + ++ def find_msvcrt_mingw(): ++ is_ucrt = 'clang' in sys.version.lower() or 'ucrt' in sys.version.lower() ++ if is_ucrt: ++ return None ++ return 'msvcrt.dll' ++ + def find_msvcrt(): + """Return the name of the VC runtime dll""" + version = _get_build_version() +@@ -54,6 +60,9 @@ def find_msvcrt(): + + def find_library(name): + if name in ('c', 'm'): ++ import sysconfig ++ if sysconfig.get_platform().startswith('mingw'): ++ return find_msvcrt_mingw() + return find_msvcrt() + # See MSDN for the REAL search order. + for directory in os.environ['PATH'].split(os.pathsep): +diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py +index 4c47f2ed24..ab61a86729 100644 +--- a/Lib/distutils/ccompiler.py ++++ b/Lib/distutils/ccompiler.py +@@ -9,7 +9,7 @@ + from distutils.file_util import move_file + from distutils.dir_util import mkpath + from distutils.dep_util import newer_group +-from distutils.util import split_quoted, execute ++from distutils.util import split_quoted, execute, get_platform + from distutils import log + + class CCompiler: +@@ -948,6 +948,8 @@ def get_default_compiler(osname=None, platform=None): + osname = os.name + if platform is None: + platform = sys.platform ++ if get_platform().startswith('mingw'): ++ return 'mingw32' + for pattern, compiler in _default_compilers: + if re.match(pattern, platform) is not None or \ + re.match(pattern, osname) is not None: +diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py +index 1a9bd1200f..82a21d2c4c 100644 +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -186,7 +186,7 @@ def finalize_options(self): + # for extensions under windows use different directories + # for Release and Debug builds. + # also Python's library directory must be appended to library_dirs +- if os.name == 'nt': ++ if os.name == 'nt' and not self.plat_name.startswith(('mingw')): + # the 'libs' directory is for binary installs - we assume that + # must be the *native* platform. But we don't really support + # cross-compiling via a binary install anyway, so we let it go. +@@ -218,12 +218,13 @@ def finalize_options(self): + + # For extensions under Cygwin, Python's library directory must be + # appended to library_dirs +- if sys.platform[:6] == 'cygwin': +- if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): ++ if sys.platform[:6] == 'cygwin' or self.plat_name.startswith(('mingw')): ++ if not sysconfig.python_build: + # building third party extensions ++ config_dir_name = os.path.basename(sysconfig.get_config_var('LIBPL')) + self.library_dirs.append(os.path.join(sys.prefix, "lib", + "python" + get_python_version(), +- "config")) ++ config_dir_name)) + else: + # building python standard extensions + self.library_dirs.append('.') +@@ -712,6 +713,20 @@ def get_libraries(self, ext): + # pyconfig.h that MSVC groks. The other Windows compilers all seem + # to need it mentioned explicitly, though, so that's what we do. + # Append '_d' to the python import library on debug builds. ++ ++ # Use self.plat_name as it works even in case of ++ # cross-compilation (at least for mingw build). ++ if self.plat_name.startswith('mingw'): ++ from distutils import sysconfig ++ extra = [] ++ for lib in ( ++ sysconfig.get_config_var('BLDLIBRARY').split() ++ + sysconfig.get_config_var('SHLIBS').split() ++ ): ++ if lib.startswith('-l'): ++ extra.append(lib[2:]) ++ return ext.libraries + extra ++ + if sys.platform == "win32": + from distutils._msvccompiler import MSVCCompiler + if not isinstance(self.compiler, MSVCCompiler): +diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py +index 01d5331a63..25eb3d8d10 100644 +--- a/Lib/distutils/command/install.py ++++ b/Lib/distutils/command/install.py +@@ -72,8 +72,8 @@ + INSTALL_SCHEMES['nt_user'] = { + 'purelib': '$usersite', + 'platlib': '$usersite', +- 'headers': '$userbase/Python$py_version_nodot/Include/$dist_name', +- 'scripts': '$userbase/Python$py_version_nodot/Scripts', ++ 'headers': '$userbase/include/python$py_version_short_plat$abiflags/$dist_name', ++ 'scripts': '$userbase/bin', + 'data' : '$userbase', + } + +@@ -81,7 +81,7 @@ + 'purelib': '$usersite', + 'platlib': '$usersite', + 'headers': +- '$userbase/include/python$py_version_short$abiflags/$dist_name', ++ '$userbase/include/python$py_version_short_plat$abiflags/$dist_name', + 'scripts': '$userbase/bin', + 'data' : '$userbase', + } +@@ -311,6 +311,7 @@ def finalize_options(self): + 'py_version': py_version, + 'py_version_short': '%d.%d' % sys.version_info[:2], + 'py_version_nodot': '%d%d' % sys.version_info[:2], ++ 'py_version_short_plat': f'{sys.version_info[0]}.{sys.version_info[1]}-{get_platform()}' if os.name == 'nt' and 'gcc' in sys.version.lower() else f'{sys.version_info[0]}.{sys.version_info[1]}', + 'sys_prefix': prefix, + 'prefix': prefix, + 'sys_exec_prefix': exec_prefix, +@@ -363,7 +364,8 @@ def finalize_options(self): + + # Convert directories from Unix /-separated syntax to the local + # convention. +- self.convert_paths('lib', 'purelib', 'platlib', ++ self.convert_paths('base', 'platbase', ++ 'lib', 'purelib', 'platlib', + 'scripts', 'data', 'headers') + if HAS_USER_SITE: + self.convert_paths('userbase', 'usersite') +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index 66c12dd358..d8c8428ac0 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -44,12 +44,13 @@ + # (ld supports -shared) + # * mingw gcc 3.2/ld 2.13 works + # (ld supports -shared) ++# * llvm-mingw with Clang 11 works ++# (lld supports -shared) + + import os + import sys + import copy +-from subprocess import Popen, PIPE, check_output +-import re ++import shlex + + from distutils.unixccompiler import UnixCCompiler + from distutils.file_util import write_file +@@ -57,6 +58,7 @@ + CompileError, UnknownFileError) + from distutils.version import LooseVersion + from distutils.spawn import find_executable ++from subprocess import Popen, check_output + + def get_msvcr(): + """Include the appropriate MSVC runtime library if Python was built +@@ -91,6 +93,7 @@ class CygwinCCompiler(UnixCCompiler): + obj_extension = ".o" + static_lib_extension = ".a" + shared_lib_extension = ".dll" ++ dylib_lib_extension = ".dll.a" + static_lib_format = "lib%s%s" + shared_lib_format = "%s%s" + exe_extension = ".exe" +@@ -109,50 +112,28 @@ def __init__(self, verbose=0, dry_run=0, force=0): + "Compiling may fail because of undefined preprocessor macros." + % details) + +- self.gcc_version, self.ld_version, self.dllwrap_version = \ +- get_versions() +- self.debug_print(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % +- (self.gcc_version, +- self.ld_version, +- self.dllwrap_version) ) +- +- # ld_version >= "2.10.90" and < "2.13" should also be able to use +- # gcc -mdll instead of dllwrap +- # Older dllwraps had own version numbers, newer ones use the +- # same as the rest of binutils ( also ld ) +- # dllwrap 2.10.90 is buggy +- if self.ld_version >= "2.10.90": +- self.linker_dll = "gcc" +- else: +- self.linker_dll = "dllwrap" ++ self.cc = os.environ.get('CC', 'gcc') ++ self.cxx = os.environ.get('CXX', 'g++') + +- # ld_version >= "2.13" support -shared so use it instead of +- # -mdll -static +- if self.ld_version >= "2.13": +- shared_option = "-shared" +- else: +- shared_option = "-mdll -static" +- +- # Hard-code GCC because that's what this is all about. +- # XXX optimization, warnings etc. should be customizable. +- self.set_executables(compiler='gcc -mcygwin -O -Wall', +- compiler_so='gcc -mcygwin -mdll -O -Wall', +- compiler_cxx='g++ -mcygwin -O -Wall', +- linker_exe='gcc -mcygwin', ++ # Older numpy dependend on this existing to check for ancient ++ # gcc versions. This doesn't make much sense with clang etc so ++ # just hardcode to something recent. ++ # https://github.com/numpy/numpy/pull/20333 ++ self.gcc_version = LooseVersion("11.2.0") ++ ++ self.linker_dll = self.cc ++ shared_option = "-shared" ++ ++ self.set_executables(compiler='%s -mcygwin -O -Wall' % self.cc, ++ compiler_so='%s -mcygwin -mdll -O -Wall' % self.cc, ++ compiler_cxx='%s -mcygwin -O -Wall' % self.cxx, ++ linker_exe='%s -mcygwin' % self.cc, + linker_so=('%s -mcygwin %s' % + (self.linker_dll, shared_option))) + +- # cygwin and mingw32 need different sets of libraries +- if self.gcc_version == "2.91.57": +- # cygwin shouldn't need msvcrt, but without the dlls will crash +- # (gcc version 2.91.57) -- perhaps something about initialization +- self.dll_libraries=["msvcrt"] +- self.warn( +- "Consider upgrading to a newer version of gcc") +- else: +- # Include the appropriate MSVC runtime library if Python was built +- # with MSVC 7.0 or later. +- self.dll_libraries = get_msvcr() ++ # Include the appropriate MSVC runtime library if Python was built ++ # with MSVC 7.0 or later. ++ self.dll_libraries = get_msvcr() + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + """Compiles the source by spawning GCC and windres if needed.""" +@@ -162,6 +143,28 @@ def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + self.spawn(["windres", "-i", src, "-o", obj]) + except DistutilsExecError as msg: + raise CompileError(msg) ++ elif ext == '.mc': ++ # Adapted from msvc9compiler: ++ # ++ # Compile .MC to .RC file to .RES file. ++ # * '-h dir' specifies the directory for the generated include file ++ # * '-r dir' specifies the target directory of the generated RC file and the binary message resource it includes ++ # ++ # For now (since there are no options to change this), ++ # we use the source-directory for the include file and ++ # the build directory for the RC file and message ++ # resources. This works at least for win32all. ++ h_dir = os.path.dirname(src) ++ rc_dir = os.path.dirname(obj) ++ try: ++ # first compile .MC to .RC and .H file ++ self.spawn(['windmc'] + ['-h', h_dir, '-r', rc_dir] + [src]) ++ base, _ = os.path.splitext(os.path.basename(src)) ++ rc_file = os.path.join(rc_dir, base + '.rc') ++ # then compile .RC to .RES file ++ self.spawn(['windres', '-i', rc_file, '-o', obj]) ++ except DistutilsExecError as msg: ++ raise CompileError(msg) + else: # for other files use the C-compiler + try: + self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + +@@ -214,28 +217,21 @@ def link(self, target_desc, objects, output_filename, output_dir=None, + + # next add options for def-file and to creating import libraries + +- # dllwrap uses different options than gcc/ld +- if self.linker_dll == "dllwrap": +- extra_preargs.extend(["--output-lib", lib_file]) +- # for dllwrap we have to use a special option +- extra_preargs.extend(["--def", def_file]) +- # we use gcc/ld here and can be sure ld is >= 2.9.10 +- else: +- # doesn't work: bfd_close build\...\libfoo.a: Invalid operation +- #extra_preargs.extend(["-Wl,--out-implib,%s" % lib_file]) +- # for gcc/ld the def-file is specified as any object files +- objects.append(def_file) ++ # doesn't work: bfd_close build\...\libfoo.a: Invalid operation ++ #extra_preargs.extend(["-Wl,--out-implib,%s" % lib_file]) ++ # for gcc/ld the def-file is specified as any object files ++ objects.append(def_file) + + #end: if ((export_symbols is not None) and + # (target_desc != self.EXECUTABLE or self.linker_dll == "gcc")): + + # who wants symbols and a many times larger output file + # should explicitly switch the debug mode on +- # otherwise we let dllwrap/ld strip the output file ++ # otherwise we let ld strip the output file + # (On my machine: 10KiB < stripped_file < ??100KiB + # unstripped_file = stripped_file + XXX KiB + # ( XXX=254 for a typical python extension)) +- if not debug: ++ if not debug and not hasattr(sys, 'gettotalrefcount'): + extra_preargs.append("-s") + + UnixCCompiler.link(self, target_desc, objects, output_filename, +@@ -253,11 +249,16 @@ def object_filenames(self, source_filenames, strip_dir=0, output_dir=''): + output_dir = '' + obj_names = [] + for src_name in source_filenames: +- # use normcase to make sure '.rc' is really '.rc' and not '.RC' +- base, ext = os.path.splitext(os.path.normcase(src_name)) +- if ext not in (self.src_extensions + ['.rc','.res']): ++ base, ext = os.path.splitext(src_name) ++ # use 'normcase' only for resource suffixes ++ ext_normcase = os.path.normcase(ext) ++ if ext_normcase in ['.rc', '.res', '.mc']: ++ ext = ext_normcase ++ if ext not in (self.src_extensions + ['.rc', '.res', '.mc']): + raise UnknownFileError("unknown file type '%s' (from '%s')" % \ + (ext, src_name)) ++ base = os.path.splitdrive(base)[1] # Chop off the drive ++ base = base[os.path.isabs(base):] # If abs, chop off leading / + if strip_dir: + base = os.path.basename (base) + if ext in ('.res', '.rc'): +@@ -279,31 +280,18 @@ def __init__(self, verbose=0, dry_run=0, force=0): + + CygwinCCompiler.__init__ (self, verbose, dry_run, force) + +- # ld_version >= "2.13" support -shared so use it instead of +- # -mdll -static +- if self.ld_version >= "2.13": +- shared_option = "-shared" +- else: +- shared_option = "-mdll -static" +- +- # A real mingw32 doesn't need to specify a different entry point, +- # but cygwin 2.91.57 in no-cygwin-mode needs it. +- if self.gcc_version <= "2.91.57": +- entry_point = '--entry _DllMain@12' +- else: +- entry_point = '' ++ shared_option = "-shared" + +- if is_cygwingcc(): ++ if is_cygwincc(self.cc): + raise CCompilerError( + 'Cygwin gcc cannot be used with --compiler=mingw32') + +- self.set_executables(compiler='gcc -O -Wall', +- compiler_so='gcc -mdll -O -Wall', +- compiler_cxx='g++ -O -Wall', +- linker_exe='gcc', +- linker_so='%s %s %s' +- % (self.linker_dll, shared_option, +- entry_point)) ++ self.set_executables(compiler='%s -O2 -Wall' % self.cc, ++ compiler_so='%s -mdll -O2 -Wall' % self.cc, ++ compiler_cxx='%s -O2 -Wall' % self.cxx, ++ linker_exe='%s' % self.cc, ++ linker_so='%s %s' ++ % (self.linker_dll, shared_option)) + # Maybe we should also append -mthreads, but then the finished + # dlls need another dll (mingwm10.dll see Mingw32 docs) + # (-mthreads: Support thread-safe exception handling on `Mingw32') +@@ -313,7 +301,7 @@ def __init__(self, verbose=0, dry_run=0, force=0): + + # Include the appropriate MSVC runtime library if Python was built + # with MSVC 7.0 or later. +- self.dll_libraries = get_msvcr() ++ self.dll_libraries = get_msvcr() or [] + + # Because these compilers aren't configured in Python's pyconfig.h file by + # default, we should at least warn the user if he is using an unmodified +@@ -351,6 +339,10 @@ def check_config_h(): + if "GCC" in sys.version: + return CONFIG_H_OK, "sys.version mentions 'GCC'" + ++ # Clang would also work ++ if "Clang" in sys.version: ++ return CONFIG_H_OK, "sys.version mentions 'Clang'" ++ + # let's see if __GNUC__ is mentioned in python.h + fn = sysconfig.get_config_h_filename() + try: +@@ -366,38 +358,8 @@ def check_config_h(): + return (CONFIG_H_UNCERTAIN, + "couldn't read '%s': %s" % (fn, exc.strerror)) + +-RE_VERSION = re.compile(br'(\d+\.\d+(\.\d+)*)') +- +-def _find_exe_version(cmd): +- """Find the version of an executable by running `cmd` in the shell. +- +- If the command is not found, or the output does not match +- `RE_VERSION`, returns None. +- """ +- executable = cmd.split()[0] +- if find_executable(executable) is None: +- return None +- out = Popen(cmd, shell=True, stdout=PIPE).stdout +- try: +- out_string = out.read() +- finally: +- out.close() +- result = RE_VERSION.search(out_string) +- if result is None: +- return None +- # LooseVersion works with strings +- # so we need to decode our bytes +- return LooseVersion(result.group(1).decode()) +- +-def get_versions(): +- """ Try to find out the versions of gcc, ld and dllwrap. +- +- If not possible it returns None for it. +- """ +- commands = ['gcc -dumpversion', 'ld -v', 'dllwrap --version'] +- return tuple([_find_exe_version(cmd) for cmd in commands]) + +-def is_cygwingcc(): +- '''Try to determine if the gcc that would be used is from cygwin.''' +- out_string = check_output(['gcc', '-dumpmachine']) ++def is_cygwincc(cc): ++ '''Try to determine if the compiler that would be used is from cygwin.''' ++ out_string = check_output(shlex.split(cc) + ['-dumpmachine']) + return out_string.strip().endswith(b'cygwin') +diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py +index a7976fbe3e..c3416797d5 100644 +--- a/Lib/distutils/msvc9compiler.py ++++ b/Lib/distutils/msvc9compiler.py +@@ -291,8 +291,6 @@ def query_vcvarsall(version, arch="x86"): + + # More globals + VERSION = get_build_version() +-if VERSION < 8.0: +- raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION) + # MACROS = MacroExpander(VERSION) + + class MSVCCompiler(CCompiler) : +@@ -327,6 +325,8 @@ class MSVCCompiler(CCompiler) : + + def __init__(self, verbose=0, dry_run=0, force=0): + CCompiler.__init__ (self, verbose, dry_run, force) ++ if VERSION < 8.0: ++ raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION) + self.__version = VERSION + self.__root = r"Software\Microsoft\VisualStudio" + # self.__macros = MACROS +diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py +index 3414a761e7..3c7b766b60 100644 +--- a/Lib/distutils/sysconfig.py ++++ b/Lib/distutils/sysconfig.py +@@ -69,8 +69,23 @@ def parse_config_h(fp, g=None): + + _python_build = partial(is_python_build, check_home=True) + _init_posix = partial(sysconfig_init_posix, _config_vars) +-_init_nt = partial(_init_non_posix, _config_vars) + ++def _posix_build(): ++ # GCC[mingw*] use posix build system ++ # Check for cross builds explicitly ++ host_platform = os.environ.get("_PYTHON_HOST_PLATFORM") ++ if host_platform: ++ if host_platform.startswith('mingw'): ++ return True ++ return os.name == 'posix' or \ ++ (os.name == "nt" and 'GCC' in sys.version) ++posix_build = _posix_build() ++ ++ ++def _init_nt(): ++ if posix_build: ++ return _init_posix(_config_vars) ++ return _init_non_posix(_config_vars) + + # Similar function is also implemented in sysconfig as _parse_makefile + # but without the parsing capabilities of distutils.text_file.TextFile. +@@ -201,7 +216,23 @@ def customize_compiler(compiler): + Mainly needed on Unix, so we can plug in the information that + varies across Unices and is stored in Python's Makefile. + """ +- if compiler.compiler_type == "unix": ++ global _config_vars ++ if compiler.compiler_type in ["cygwin", "mingw32"]: ++ # Note that cygwin use posix build and 'unix' compiler. ++ # If build is not based on posix then we must predefine ++ # some environment variables corresponding to posix ++ # build rules and defaults. ++ if not 'GCC' in sys.version: ++ _config_vars['CC'] = "gcc" ++ _config_vars['CXX'] = "g++" ++ _config_vars['OPT'] = "-fwrapv -O3 -Wall -Wstrict-prototypes" ++ _config_vars['CFLAGS'] = "" ++ _config_vars['CCSHARED'] = "" ++ _config_vars['LDSHARED'] = "gcc -shared -Wl,--enable-auto-image-base" ++ _config_vars['AR'] = "ar" ++ _config_vars['ARFLAGS'] = "rc" ++ ++ if compiler.compiler_type in ["unix", "cygwin", "mingw32"]: + if sys.platform == "darwin": + # Perform first-time customization of compiler-related + # config vars on OS X now that we know we need a compiler. +@@ -279,7 +310,7 @@ def get_python_inc(plat_specific=0, prefix=None): + """ + if prefix is None: + prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX +- if os.name == "posix": ++ if posix_build: + if python_build: + # Assume the executable is in the build directory. The + # pyconfig.h file should be in the same directory. Since +@@ -326,7 +357,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + else: + prefix = plat_specific and EXEC_PREFIX or PREFIX + +- if os.name == "posix": ++ if posix_build: + if plat_specific or standard_lib: + # Platform-specific modules (any module from a non-pure-Python + # module distribution) or standard Python library modules. +diff --git a/Lib/distutils/tests/test_cygwinccompiler.py b/Lib/distutils/tests/test_cygwinccompiler.py +index 9dc869de4c..f525ab49de 100644 +--- a/Lib/distutils/tests/test_cygwinccompiler.py ++++ b/Lib/distutils/tests/test_cygwinccompiler.py +@@ -8,7 +8,7 @@ + from distutils import cygwinccompiler + from distutils.cygwinccompiler import (check_config_h, + CONFIG_H_OK, CONFIG_H_NOTOK, +- CONFIG_H_UNCERTAIN, get_versions, ++ CONFIG_H_UNCERTAIN, + get_msvcr) + from distutils.tests import support + +@@ -81,40 +81,6 @@ def test_check_config_h(self): + self.write_file(self.python_h, 'xxx __GNUC__ xxx') + self.assertEqual(check_config_h()[0], CONFIG_H_OK) + +- def test_get_versions(self): +- +- # get_versions calls distutils.spawn.find_executable on +- # 'gcc', 'ld' and 'dllwrap' +- self.assertEqual(get_versions(), (None, None, None)) +- +- # Let's fake we have 'gcc' and it returns '3.4.5' +- self._exes['gcc'] = b'gcc (GCC) 3.4.5 (mingw special)\nFSF' +- res = get_versions() +- self.assertEqual(str(res[0]), '3.4.5') +- +- # and let's see what happens when the version +- # doesn't match the regular expression +- # (\d+\.\d+(\.\d+)*) +- self._exes['gcc'] = b'very strange output' +- res = get_versions() +- self.assertEqual(res[0], None) +- +- # same thing for ld +- self._exes['ld'] = b'GNU ld version 2.17.50 20060824' +- res = get_versions() +- self.assertEqual(str(res[1]), '2.17.50') +- self._exes['ld'] = b'@(#)PROGRAM:ld PROJECT:ld64-77' +- res = get_versions() +- self.assertEqual(res[1], None) +- +- # and dllwrap +- self._exes['dllwrap'] = b'GNU dllwrap 2.17.50 20060824\nFSF' +- res = get_versions() +- self.assertEqual(str(res[2]), '2.17.50') +- self._exes['dllwrap'] = b'Cheese Wrap' +- res = get_versions() +- self.assertEqual(res[2], None) +- + def test_get_msvcr(self): + + # none +diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py +index d00c48981e..76a7d82476 100644 +--- a/Lib/distutils/unixccompiler.py ++++ b/Lib/distutils/unixccompiler.py +@@ -249,9 +249,13 @@ def runtime_library_dir_option(self, dir): + # -Wl whenever gcc was used in the past it is probably + # safest to keep doing so. + if sysconfig.get_config_var("GNULD") == "yes": +- # GNU ld needs an extra option to get a RUNPATH ++ # GNU ELF ld needs an extra option to get a RUNPATH + # instead of just an RPATH. +- return "-Wl,--enable-new-dtags,-R" + dir ++ if sys.platform in ["win32", "cygwin"] or \ ++ "mingw" in compiler: ++ return [] ++ else: ++ return "-Wl,--enable-new-dtags,-R" + dir + else: + return "-Wl,-R" + dir + else: +diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py +index 2ce5c5b64d..81626b3946 100644 +--- a/Lib/distutils/util.py ++++ b/Lib/distutils/util.py +@@ -37,6 +37,22 @@ def get_host_platform(): + + """ + if os.name == 'nt': ++ if 'gcc' in sys.version.lower(): ++ if 'ucrt' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_ucrt' ++ return 'mingw_i686_ucrt' ++ if 'clang' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_clang' ++ if 'arm64' in sys.version.lower(): ++ return 'mingw_aarch64' ++ if 'arm' in sys.version.lower(): ++ return 'mingw_armv7' ++ return 'mingw_i686_clang' ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64' ++ return 'mingw_i686' + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): +@@ -130,6 +146,13 @@ def convert_path (pathname): + paths.remove('.') + if not paths: + return os.curdir ++ # On Windows, if paths is ['C:','folder','subfolder'] then ++ # os.path.join(*paths) will return 'C:folder\subfolder' which ++ # is thus relative to the CWD on that drive. So we work around ++ # this by adding a \ to path[0] ++ if (len(paths) > 0 and paths[0].endswith(':') and ++ sys.platform == "win32" and sys.version.find("GCC") >= 0): ++ paths[0] += '\\' + return os.path.join(*paths) + + # convert_path () +@@ -140,6 +163,10 @@ def change_root (new_root, pathname): + relative, this is equivalent to "os.path.join(new_root,pathname)". + Otherwise, it requires making 'pathname' relative and then joining the + two, which is tricky on DOS/Windows and Mac OS. ++ ++ If on Windows or OS/2 and both new_root and pathname are on different ++ drives, raises DistutilsChangeRootError as this is nonsensical, ++ otherwise use drive which can be in either of new_root or pathname. + """ + if os.name == 'posix': + if not os.path.isabs(pathname): +@@ -149,9 +176,20 @@ def change_root (new_root, pathname): + + elif os.name == 'nt': + (drive, path) = os.path.splitdrive(pathname) +- if path[0] == '\\': ++ if path[0] == os.sep: + path = path[1:] +- return os.path.join(new_root, path) ++ (drive_r, path_r) = os.path.splitdrive(new_root) ++ if path_r and path_r[0] == os.sep: ++ path_r = path_r[1:] ++ drive_used = '' ++ if len(drive) == 2 and len(drive_r) == 2 and drive != drive_r: ++ raise DistutilsChangeRootError("root and pathname not on same drive (%s, %s)" ++ % (drive_r,drive)) ++ elif len(drive_r) == 2: ++ drive_used = drive_r+os.sep ++ elif len(drive) == 2: ++ drive_used = drive+os.sep ++ return os.path.join(drive_used+path_r, path) + + else: + raise DistutilsPlatformError("nothing known about platform '%s'" % os.name) +diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py +index 9a73c7b43a..fc304990f6 100644 +--- a/Lib/importlib/_bootstrap_external.py ++++ b/Lib/importlib/_bootstrap_external.py +@@ -42,6 +42,10 @@ + path_separators = ['\\', '/'] + else: + path_separators = ['/'] ++ ++if 'MSYSTEM' in _os.environ: ++ path_separators = path_separators[::-1] ++ + # Assumption made in _path_join() + assert all(len(sep) == 1 for sep in path_separators) + path_sep = path_separators[0] +diff --git a/Lib/ntpath.py b/Lib/ntpath.py +index 527c7ae193..0ecde0caac 100644 +--- a/Lib/ntpath.py ++++ b/Lib/ntpath.py +@@ -11,9 +11,7 @@ + curdir = '.' + pardir = '..' + extsep = '.' +-sep = '\\' + pathsep = ';' +-altsep = '/' + defpath = '.;C:\\bin' + devnull = 'nul' + +@@ -23,6 +21,15 @@ + import genericpath + from genericpath import * + ++if sys.platform == "win32" and "MSYSTEM" in os.environ: ++ sep = '/' ++ altsep = '\\' ++else: ++ sep = '\\' ++ altsep = '/' ++bsep = str.encode(sep) ++baltsep = str.encode(altsep) ++ + __all__ = ["normcase","isabs","join","splitdrive","split","splitext", + "basename","dirname","commonprefix","getsize","getmtime", + "getatime","getctime", "islink","exists","lexists","isdir","isfile", +@@ -33,9 +40,27 @@ + + def _get_bothseps(path): + if isinstance(path, bytes): +- return b'\\/' ++ return bsep+baltsep ++ else: ++ return sep+altsep ++ ++def _get_sep(path): ++ if isinstance(path, bytes): ++ return bsep + else: +- return '\\/' ++ return sep ++ ++def _get_altsep(path): ++ if isinstance(path, bytes): ++ return baltsep ++ else: ++ return altsep ++ ++def _get_colon(path): ++ if isinstance(path, bytes): ++ return b':' ++ else: ++ return ':' + + # Normalize the case of a pathname and map slashes to backslashes. + # Other normalizations (such as optimizing '../' away) are not done +@@ -47,9 +72,9 @@ def normcase(s): + Makes all characters lowercase and all slashes into backslashes.""" + s = os.fspath(s) + if isinstance(s, bytes): +- return s.replace(b'/', b'\\').lower() ++ return s.replace(baltsep, bsep).lower() + else: +- return s.replace('/', '\\').lower() ++ return s.replace(altsep, sep).lower() + + + # Return whether a path is absolute. +@@ -76,14 +101,9 @@ def isabs(s): + # Join two (or more) paths. + def join(path, *paths): + path = os.fspath(path) +- if isinstance(path, bytes): +- sep = b'\\' +- seps = b'\\/' +- colon = b':' +- else: +- sep = '\\' +- seps = '\\/' +- colon = ':' ++ sep = _get_sep(path) ++ seps = _get_bothseps(path) ++ colon = _get_colon(path) + try: + if not paths: + path[:0] + sep #23780: Ensure compatible data type even if p is null. +@@ -142,14 +162,9 @@ def splitdrive(p): + """ + p = os.fspath(p) + if len(p) >= 2: +- if isinstance(p, bytes): +- sep = b'\\' +- altsep = b'/' +- colon = b':' +- else: +- sep = '\\' +- altsep = '/' +- colon = ':' ++ sep = _get_sep(p) ++ altsep = _get_altsep(p) ++ colon = _get_colon(p) + normp = p.replace(altsep, sep) + if (normp[0:2] == sep*2) and (normp[2:3] != sep): + # is a UNC path: +@@ -203,9 +218,9 @@ def split(p): + def splitext(p): + p = os.fspath(p) + if isinstance(p, bytes): +- return genericpath._splitext(p, b'\\', b'/', b'.') ++ return genericpath._splitext(p, bsep, baltsep, b'.') + else: +- return genericpath._splitext(p, '\\', '/', '.') ++ return genericpath._splitext(p, sep, altsep, '.') + splitext.__doc__ = genericpath._splitext.__doc__ + + +@@ -304,7 +319,7 @@ def expanduser(path): + if 'USERPROFILE' in os.environ: + userhome = os.environ['USERPROFILE'] + elif not 'HOMEPATH' in os.environ: +- return path ++ return os.path.normpath(path) + else: + try: + drive = os.environ['HOMEDRIVE'] +@@ -331,7 +346,7 @@ def expanduser(path): + if isinstance(path, bytes): + userhome = os.fsencode(userhome) + +- return userhome + path[i:] ++ return os.path.normpath(userhome) + path[i:] + + + # Expand paths containing shell variable substitutions. +@@ -463,15 +478,13 @@ def expandvars(path): + def normpath(path): + """Normalize path, eliminating double slashes, etc.""" + path = os.fspath(path) ++ sep = _get_sep(path) ++ altsep = _get_altsep(path) + if isinstance(path, bytes): +- sep = b'\\' +- altsep = b'/' + curdir = b'.' + pardir = b'..' + special_prefixes = (b'\\\\.\\', b'\\\\?\\') + else: +- sep = '\\' +- altsep = '/' + curdir = '.' + pardir = '..' + special_prefixes = ('\\\\.\\', '\\\\?\\') +@@ -683,6 +696,7 @@ def realpath(path, *, strict=False): + # strip the prefix anyway. + if ex.winerror == initial_winerror: + path = spath ++ path = normpath(path) + return path + + +@@ -693,12 +707,11 @@ def realpath(path, *, strict=False): + def relpath(path, start=None): + """Return a relative version of a path""" + path = os.fspath(path) ++ sep = _get_sep(path) + if isinstance(path, bytes): +- sep = b'\\' + curdir = b'.' + pardir = b'..' + else: +- sep = '\\' + curdir = '.' + pardir = '..' + +@@ -753,13 +766,11 @@ def commonpath(paths): + raise ValueError('commonpath() arg is an empty sequence') + + paths = tuple(map(os.fspath, paths)) ++ sep = _get_sep(paths[0]) ++ altsep = _get_altsep(paths[0]) + if isinstance(paths[0], bytes): +- sep = b'\\' +- altsep = b'/' + curdir = b'.' + else: +- sep = '\\' +- altsep = '/' + curdir = '.' + + try: +diff --git a/Lib/pathlib.py b/Lib/pathlib.py +index 621fba0e75..c930e1d9c0 100644 +--- a/Lib/pathlib.py ++++ b/Lib/pathlib.py +@@ -115,6 +115,8 @@ class _WindowsFlavour(_Flavour): + + sep = '\\' + altsep = '/' ++ if 'MSYSTEM' in os.environ: ++ sep, altsep = altsep, sep + has_drv = True + pathmod = ntpath + +diff --git a/Lib/site.py b/Lib/site.py +index 939893eb5e..877167b7a0 100644 +--- a/Lib/site.py ++++ b/Lib/site.py +@@ -88,6 +88,12 @@ + USER_BASE = None + + ++# Same as defined in Lib/sysconfig.py ++# redeclared since sysconfig is large for site. ++# GCC[mingw*] use posix build system ++_POSIX_BUILD = os.name == 'posix' or \ ++ (os.name == "nt" and 'GCC' in sys.version) ++ + def _trace(message): + if sys.flags.verbose: + print(message, file=sys.stderr) +@@ -273,7 +279,7 @@ def _getuserbase(): + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + +- if os.name == "nt": ++ if os.name == "nt" and not _POSIX_BUILD: + base = os.environ.get("APPDATA") or "~" + return joinuser(base, "Python") + +@@ -283,14 +289,36 @@ def joinuser(*args): + + return joinuser("~", ".local") + ++# Copy of sysconfig.get_platform() but only for MinGW ++def _get_platform(): ++ if os.name == 'nt': ++ if 'gcc' in sys.version.lower(): ++ if 'ucrt' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_ucrt' ++ return 'mingw_i686_ucrt' ++ if 'clang' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_clang' ++ if 'arm64' in sys.version.lower(): ++ return 'mingw_aarch64' ++ if 'arm' in sys.version.lower(): ++ return 'mingw_armv7' ++ return 'mingw_i686_clang' ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64' ++ return 'mingw_i686' ++ return sys.platform + + # Same to sysconfig.get_path('purelib', os.name+'_user') + def _get_path(userbase): + version = sys.version_info + + if os.name == 'nt': +- ver_nodot = sys.winver.replace('.', '') +- return f'{userbase}\\Python{ver_nodot}\\site-packages' ++ if not _POSIX_BUILD: ++ ver_nodot = sys.winver.replace('.', '') ++ return f'{userbase}\\Python{ver_nodot}\\site-packages' ++ return f'{userbase}/lib/python{version[0]}.{version[1]}-{_get_platform()}/site-packages' + + if sys.platform == 'darwin' and sys._framework: + return f'{userbase}/lib/python/site-packages' +@@ -365,7 +393,7 @@ def getsitepackages(prefixes=None): + if sys.platlibdir != "lib": + libdirs.append("lib") + +- if os.sep == '/': ++ if _POSIX_BUILD: + for libdir in libdirs: + path = os.path.join(prefix, libdir, + "python%d.%d" % sys.version_info[:2], +@@ -395,7 +423,7 @@ def setquit(): + The repr of each object contains a hint at how it works. + + """ +- if os.sep == '\\': ++ if sys.platform == 'win32': + eof = 'Ctrl-Z plus Return' + else: + eof = 'Ctrl-D (i.e. EOF)' +diff --git a/Lib/ssl.py b/Lib/ssl.py +index 181065d2e5..752d1e409c 100644 +--- a/Lib/ssl.py ++++ b/Lib/ssl.py +@@ -249,7 +249,7 @@ class _TLSMessageType(_IntEnum): + CHANGE_CIPHER_SPEC = 0x0101 + + +-if sys.platform == "win32": ++if sys.platform == "win32" and sys.version.find("GCC") == -1: + from _ssl import enum_certificates, enum_crls + + from socket import socket, SOCK_STREAM, create_connection +@@ -586,7 +586,7 @@ def _load_windows_store_certs(self, storename, purpose): + def load_default_certs(self, purpose=Purpose.SERVER_AUTH): + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) +- if sys.platform == "win32": ++ if sys.platform == "win32" and sys.version.find("GCC") == -1: + for storename in self._windows_cert_stores: + self._load_windows_store_certs(storename, purpose) + self.set_default_verify_paths() +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py +index daf9f00006..9e1df5d999 100644 +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py +@@ -2,6 +2,7 @@ + + import os + import sys ++import textwrap + from os.path import pardir, realpath + + __all__ = [ +@@ -47,17 +48,22 @@ + 'data': '{base}', + }, + 'nt': { +- 'stdlib': '{installed_base}/Lib', +- 'platstdlib': '{base}/Lib', +- 'purelib': '{base}/Lib/site-packages', +- 'platlib': '{base}/Lib/site-packages', +- 'include': '{installed_base}/Include', +- 'platinclude': '{installed_base}/Include', +- 'scripts': '{base}/Scripts', ++ 'stdlib': '{installed_base}/lib/python{py_version_short}', ++ 'platstdlib': '{base}/lib/python{py_version_short}', ++ 'purelib': '{base}/lib/python{py_version_short}/site-packages', ++ 'platlib': '{base}/lib/python{py_version_short}/site-packages', ++ 'include': '{installed_base}/include/python{py_version_short}', ++ 'platinclude': '{installed_base}/include/python{py_version_short}', ++ 'scripts': '{base}/bin', + 'data': '{base}', + }, + } + ++# GCC[mingw*] use posix build system ++_POSIX_BUILD = os.name == 'posix' or \ ++ (os.name == "nt" and 'GCC' in sys.version) ++ ++ + + # NOTE: site.py has copy of this function. + # Sync it when modify this function. +@@ -73,7 +79,7 @@ def _getuserbase(): + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + +- if os.name == "nt": ++ if os.name == "nt" and not _POSIX_BUILD: + base = os.environ.get("APPDATA") or "~" + return joinuser(base, "Python") + +@@ -89,20 +95,20 @@ def joinuser(*args): + _INSTALL_SCHEMES |= { + # NOTE: When modifying "purelib" scheme, update site._get_path() too. + 'nt_user': { +- 'stdlib': '{userbase}/Python{py_version_nodot_plat}', +- 'platstdlib': '{userbase}/Python{py_version_nodot_plat}', +- 'purelib': '{userbase}/Python{py_version_nodot_plat}/site-packages', +- 'platlib': '{userbase}/Python{py_version_nodot_plat}/site-packages', +- 'include': '{userbase}/Python{py_version_nodot_plat}/Include', +- 'scripts': '{userbase}/Python{py_version_nodot_plat}/Scripts', ++ 'stdlib': '{userbase}/lib/python{py_version_short_plat}', ++ 'platstdlib': '{userbase}/lib/python{py_version_short_plat}', ++ 'purelib': '{userbase}/lib/python{py_version_short_plat}/site-packages', ++ 'platlib': '{userbase}/lib/python{py_version_short_plat}/site-packages', ++ 'include': '{userbase}/include/python{py_version_short_plat}', ++ 'scripts': '{userbase}/bin', + 'data': '{userbase}', + }, + 'posix_user': { +- 'stdlib': '{userbase}/{platlibdir}/python{py_version_short}', +- 'platstdlib': '{userbase}/{platlibdir}/python{py_version_short}', +- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', +- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages', +- 'include': '{userbase}/include/python{py_version_short}', ++ 'stdlib': '{userbase}/{platlibdir}/python{py_version_short_plat}', ++ 'platstdlib': '{userbase}/{platlibdir}/python{py_version_short_plat}', ++ 'purelib': '{userbase}/lib/python{py_version_short_plat}/site-packages', ++ 'platlib': '{userbase}/lib/python{py_version_short_plat}/site-packages', ++ 'include': '{userbase}/include/python{py_version_short_plat}', + 'scripts': '{userbase}/bin', + 'data': '{userbase}', + }, +@@ -136,7 +142,6 @@ def joinuser(*args): + _findvar1_rx = r"\$\(([A-Za-z][A-Za-z0-9_]*)\)" + _findvar2_rx = r"\${([A-Za-z][A-Za-z0-9_]*)}" + +- + def _safe_realpath(path): + try: + return realpath(path) +@@ -225,7 +230,7 @@ def _expand_vars(scheme, vars): + + + def _get_preferred_schemes(): +- if os.name == 'nt': ++ if os.name == 'nt' and not _POSIX_BUILD: + return { + 'prefix': 'nt', + 'home': 'posix_home', +@@ -381,6 +386,14 @@ def _parse_makefile(filename, vars=None, keep_unresolved=True): + if isinstance(v, str): + done[k] = v.strip() + ++ # any keys that have one with the same name suffixed with _b2h ++ # need to be replaced with the value of the _b2h key. ++ # This converts from MSYS*/Cygwin paths to Windows paths. ++ for k, v in dict(done).items(): ++ if isinstance(k, str): ++ if k.endswith("_b2h"): ++ done[k[:-4]]=v ++ + # save the results in the global dictionary + vars.update(done) + return vars +@@ -460,11 +473,30 @@ def _generate_posix_vars(): + os.makedirs(pybuilddir, exist_ok=True) + destfile = os.path.join(pybuilddir, name + '.py') + ++ replacement = """ ++ keys_to_replace = [ ++ 'BINDIR', 'BINLIBDEST', 'CONFINCLUDEDIR', ++ 'CONFINCLUDEPY', 'DESTDIRS', 'DESTLIB', 'DESTSHARED', ++ 'INCLDIRSTOMAKE', 'INCLUDEDIR', 'INCLUDEPY', ++ 'LIBDEST', 'LIBDIR', 'LIBPC', 'LIBPL', 'MACHDESTLIB', ++ 'MANDIR', 'SCRIPTDIR', 'datarootdir', 'exec_prefix', ++ 'TZPATH', ++ ] ++ ++ prefix = build_time_vars['BINDIR'][:-4] ++ ++ for key in keys_to_replace: ++ value = build_time_vars[key] ++ build_time_vars[key] = value.replace(prefix, sys.prefix) ++ """ ++ + with open(destfile, 'w', encoding='utf8') as f: ++ f.write('import sys\n') + f.write('# system configuration generated and used by' + ' the sysconfig module\n') + f.write('build_time_vars = ') + pprint.pprint(vars, stream=f) ++ f.write('\n%s' % textwrap.dedent(replacement)) + + # Create file used for sys.path fixup -- see Modules/getpath.c + with open('pybuilddir.txt', 'w', encoding='utf8') as f: +@@ -487,7 +519,7 @@ def _init_non_posix(vars): + vars['INCLUDEPY'] = get_path('include') + vars['EXT_SUFFIX'] = _imp.extension_suffixes()[0] + vars['EXE'] = '.exe' +- vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT ++ vars['VERSION'] = _PY_VERSION_SHORT + vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) + vars['TZPATH'] = '' + +@@ -533,7 +565,7 @@ def parse_config_h(fp, vars=None): + def get_config_h_filename(): + """Return the path of pyconfig.h.""" + if _PYTHON_BUILD: +- if os.name == "nt": ++ if os.name == "nt" and not _POSIX_BUILD: + inc_dir = os.path.join(_sys_home or _PROJECT_BASE, "PC") + else: + inc_dir = _sys_home or _PROJECT_BASE +@@ -608,10 +640,14 @@ def get_config_vars(*args): + _CONFIG_VARS['py_version_nodot_plat'] = sys.winver.replace('.', '') + except AttributeError: + _CONFIG_VARS['py_version_nodot_plat'] = '' ++ if os.name == 'nt' and _POSIX_BUILD: ++ _CONFIG_VARS['py_version_short_plat'] = f'{_PY_VERSION_SHORT}-{get_platform()}' ++ else: ++ _CONFIG_VARS['py_version_short_plat'] = _PY_VERSION_SHORT + +- if os.name == 'nt': ++ if os.name == 'nt' and not _POSIX_BUILD: + _init_non_posix(_CONFIG_VARS) +- if os.name == 'posix': ++ if _POSIX_BUILD: + _init_posix(_CONFIG_VARS) + # For backward compatibility, see issue19555 + SO = _CONFIG_VARS.get('EXT_SUFFIX') +@@ -625,7 +661,7 @@ def get_config_vars(*args): + + # Always convert srcdir to an absolute path + srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE) +- if os.name == 'posix': ++ if _POSIX_BUILD: + if _PYTHON_BUILD: + # If srcdir is a relative path (typically '.' or '..') + # then it should be interpreted relative to the directory +@@ -666,7 +702,7 @@ def get_config_var(name): + warnings.warn('SO is deprecated, use EXT_SUFFIX', DeprecationWarning, 2) + return get_config_vars().get(name) + +- ++# make sure to change site._get_platform() while changing this function + def get_platform(): + """Return a string that identifies the current platform. + +@@ -689,6 +725,22 @@ def get_platform(): + + """ + if os.name == 'nt': ++ if 'gcc' in sys.version.lower(): ++ if 'ucrt' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_ucrt' ++ return 'mingw_i686_ucrt' ++ if 'clang' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_clang' ++ if 'arm64' in sys.version.lower(): ++ return 'mingw_aarch64' ++ if 'arm' in sys.version.lower(): ++ return 'mingw_armv7' ++ return 'mingw_i686_clang' ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64' ++ return 'mingw_i686' + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): +diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py +index 13ad238242..65181e0c80 100644 +--- a/Lib/test/test_bytes.py ++++ b/Lib/test/test_bytes.py +@@ -1075,7 +1075,7 @@ def test_from_format(self): + + if os.name == 'nt': + # Windows (MSCRT) +- ptr_format = '0x%0{}X'.format(2 * sizeof_ptr) ++ ptr_format = '0x%0{}x'.format(2 * sizeof_ptr) + def ptr_formatter(ptr): + return (ptr_format % ptr) + else: +diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py +index 1663b1f114..97620258d8 100644 +--- a/Lib/test/test_minidom.py ++++ b/Lib/test/test_minidom.py +@@ -6,10 +6,12 @@ + from test import support + import unittest + ++import pyexpat + import xml.dom.minidom + + from xml.dom.minidom import parse, Node, Document, parseString + from xml.dom.minidom import getDOMImplementation ++from xml.parsers.expat import ExpatError + + + tstfile = support.findfile("test.xml", subdir="xmltestdata") +@@ -1147,7 +1149,13 @@ def testEncodings(self): + + # Verify that character decoding errors raise exceptions instead + # of crashing +- self.assertRaises(UnicodeDecodeError, parseString, ++ if pyexpat.version_info >= (2, 4, 5): ++ self.assertRaises(ExpatError, parseString, ++ b'') ++ self.assertRaises(ExpatError, parseString, ++ b'Comment \xe7a va ? Tr\xe8s bien ?') ++ else: ++ self.assertRaises(UnicodeDecodeError, parseString, + b'Comment \xe7a va ? Tr\xe8s bien ?') + + doc.unlink() +@@ -1609,7 +1617,12 @@ def testEmptyXMLNSValue(self): + self.confirm(doc2.namespaceURI == xml.dom.EMPTY_NAMESPACE) + + def testExceptionOnSpacesInXMLNSValue(self): +- with self.assertRaisesRegex(ValueError, 'Unsupported syntax'): ++ if pyexpat.version_info >= (2, 4, 5): ++ context = self.assertRaisesRegex(ExpatError, 'syntax error') ++ else: ++ context = self.assertRaisesRegex(ValueError, 'Unsupported syntax') ++ ++ with context: + parseString('') + + def testDocRemoveChild(self): +diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py +index 285559a872..4bd4291f49 100644 +--- a/Lib/test/test_xml_etree.py ++++ b/Lib/test/test_xml_etree.py +@@ -2183,12 +2183,6 @@ def test_issue6233(self): + b"\n" + b'tãg') + +- def test_issue3151(self): +- e = ET.XML('') +- self.assertEqual(e.tag, '{${stuff}}localname') +- t = ET.ElementTree(e) +- self.assertEqual(ET.tostring(e), b'') +- + def test_issue6565(self): + elem = ET.XML("") + self.assertEqual(summarize_list(elem), ['tag']) +diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py +index 6f1af294ae..83ba0bc7ea 100644 +--- a/Lib/venv/__init__.py ++++ b/Lib/venv/__init__.py +@@ -11,6 +11,7 @@ + import sys + import sysconfig + import types ++from sysconfig import _POSIX_BUILD + + + CORE_VENV_DEPS = ('pip', 'setuptools') +@@ -119,7 +120,7 @@ def create_if_needed(d): + context.executable = executable + context.python_dir = dirname + context.python_exe = exename +- if sys.platform == 'win32': ++ if sys.platform == 'win32' and not _POSIX_BUILD: + binname = 'Scripts' + incpath = 'Include' + libpath = os.path.join(env_dir, 'Lib', 'site-packages') +@@ -266,7 +267,7 @@ def setup_python(self, context): + if not os.path.islink(path): + os.chmod(path, 0o755) + else: +- if self.symlinks: ++ if self.symlinks and not _POSIX_BUILD: + # For symlinking, we need a complete copy of the root directory + # If symlinks fail, you'll get unnecessary copies of files, but + # we assume that if you've opted into symlinks on Windows then +@@ -290,7 +291,13 @@ def setup_python(self, context): + if os.path.lexists(src): + copier(src, os.path.join(binpath, suffix)) + +- if sysconfig.is_python_build(True): ++ if _POSIX_BUILD: ++ # copy from python/pythonw so the venvlauncher magic in symlink_or_copy triggers ++ copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python3.exe')) ++ copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python%d.%d.exe' % sys.version_info[:2])) ++ copier(os.path.join(dirname, 'pythonw.exe'), os.path.join(binpath, 'python3w.exe')) ++ ++ if sysconfig.is_python_build(True) and not _POSIX_BUILD: + # copy init.tcl + for root, dirs, files in os.walk(context.python_dir): + if 'init.tcl' in files: +@@ -308,9 +315,11 @@ def _setup_pip(self, context): + # We run ensurepip in isolated mode to avoid side effects from + # environment vars, the current directory and anything else + # intended for the global Python environment ++ env = os.environ.copy() ++ env.pop("MSYSTEM", None) + cmd = [context.env_exec_cmd, '-Im', 'ensurepip', '--upgrade', + '--default-pip'] +- subprocess.check_output(cmd, stderr=subprocess.STDOUT) ++ subprocess.check_call(cmd, stderr=subprocess.STDOUT, env=env) + + def setup_scripts(self, context): + """ +diff --git a/Lib/venv/scripts/common/activate b/Lib/venv/scripts/common/activate +index 6fbc2b8801..9c3d58dfd6 100644 +--- a/Lib/venv/scripts/common/activate ++++ b/Lib/venv/scripts/common/activate +@@ -38,7 +38,7 @@ deactivate () { + # unset irrelevant variables + deactivate nondestructive + +-VIRTUAL_ENV="__VENV_DIR__" ++VIRTUAL_ENV=$(cygpath "__VENV_DIR__") + export VIRTUAL_ENV + + _OLD_VIRTUAL_PATH="$PATH" +diff --git a/Makefile.pre.in b/Makefile.pre.in +index ee85f35b10..6b1cfcea05 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -38,6 +38,7 @@ CXX= @CXX@ + MAINCC= @MAINCC@ + LINKCC= @LINKCC@ + AR= @AR@ ++WINDRES= @WINDRES@ + READELF= @READELF@ + SOABI= @SOABI@ + LDVERSION= @LDVERSION@ +@@ -118,6 +119,7 @@ PY_CORE_CFLAGS= $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE + PY_CORE_LDFLAGS=$(PY_LDFLAGS) $(PY_LDFLAGS_NODIST) + # Strict or non-strict aliasing flags used to compile dtoa.c, see above + CFLAGS_ALIASING=@CFLAGS_ALIASING@ ++RCFLAGS=@RCFLAGS@ + + + # Machine-dependent subdirectories +@@ -136,6 +138,13 @@ exec_prefix= @exec_prefix@ + # Install prefix for data files + datarootdir= @datarootdir@ + ++# Locations needed for semi-native fixup of sysconfig. ++srcdir_b2h= @srcdir_b2h@ ++VPATH_b2h= @VPATH_b2h@ ++abs_srcdir_b2h= @abs_srcdir_b2h@ ++abs_builddir_b2h= @abs_builddir_b2h@ ++prefix_b2h= @prefix_b2h@ ++ + # Expanded directories + BINDIR= @bindir@ + LIBDIR= @libdir@ +@@ -153,10 +162,12 @@ BINLIBDEST= @BINLIBDEST@ + LIBDEST= $(SCRIPTDIR)/python$(VERSION) + INCLUDEPY= $(INCLUDEDIR)/python$(LDVERSION) + CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(LDVERSION) ++VENVLAUNCHERDIR= $(BINLIBDEST)/venv/scripts/nt + + # Symbols used for using shared libraries + SHLIB_SUFFIX= @SHLIB_SUFFIX@ + EXT_SUFFIX= @EXT_SUFFIX@ ++PYD_PLATFORM_TAG = @PYD_PLATFORM_TAG@ + LDSHARED= @LDSHARED@ $(PY_LDFLAGS) + BLDSHARED= @BLDSHARED@ $(PY_CORE_LDFLAGS) + LDCXXSHARED= @LDCXXSHARED@ +@@ -258,6 +269,9 @@ LIBOBJS= @LIBOBJS@ + + PYTHON= python$(EXE) + BUILDPYTHON= python$(BUILDEXE) ++BUILDPYTHONW= pythonw$(BUILDEXE) ++BUILDVENVLAUNCHER= venvlauncher$(BUILDEXE) ++BUILDVENVWLAUNCHER= venvwlauncher$(BUILDEXE) + + PYTHON_FOR_REGEN?=@PYTHON_FOR_REGEN@ + UPDATE_FILE=$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/update_file.py +@@ -307,6 +321,7 @@ IO_OBJS= \ + ########################################################################## + + LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@ ++NCURSESW_INCLUDEDIR= @NCURSESW_INCLUDEDIR@ + + ########################################################################## + # Parser +@@ -349,7 +364,7 @@ PYTHON_OBJS= \ + Python/context.o \ + Python/dynamic_annotations.o \ + Python/errors.o \ +- Python/frozenmain.o \ ++ @PYTHON_OBJS_FROZENMAIN@ \ + Python/future.o \ + Python/getargs.o \ + Python/getcompiler.o \ +@@ -361,6 +376,7 @@ PYTHON_OBJS= \ + Python/import.o \ + Python/importdl.o \ + Python/initconfig.o \ ++ Python/iscygpty.o \ + Python/marshal.o \ + Python/modsupport.o \ + Python/mysnprintf.o \ +@@ -471,7 +487,7 @@ DTRACE_DEPS = \ + + # Default target + all: @DEF_MAKE_ALL_RULE@ +-build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \ ++build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) $(BUILDVENVLAUNCHER) $(BUILDVENVWLAUNCHER) oldsharedmods sharedmods gdbhooks \ + Programs/_testembed python-config + + # Check that the source is clean when building out of source. +@@ -584,9 +600,29 @@ coverage-report: regen-token regen-importlib + clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + $(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir) + ++python_exe.o: $(srcdir)/PC/python_exe.rc ++ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_exe.rc $@ ++ ++pythonw_exe.o: $(srcdir)/PC/pythonw_exe.rc ++ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/pythonw_exe.rc $@ ++ ++python_nt.o: $(srcdir)/PC/python_nt.rc ++ $(WINDRES) $(RCFLAGS) -DORIGINAL_FILENAME=\\\"$(DLLLIBRARY)\\\" -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_nt.rc $@ ++ ++$(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw_exe.o ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -mwindows -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) pythonw_exe.o ++ + # Build the interpreter +-$(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++$(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) python_exe.o ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) python_exe.o ++ ++# FIXME: build these from PC/launcher.c instead ++$(BUILDVENVLAUNCHER): $(BUILDPYTHON) ++ cp $(BUILDPYTHON) $(BUILDVENVLAUNCHER) ++ ++# FIXME: build these from PC/launcher.c instead ++$(BUILDVENVWLAUNCHER): $(BUILDPYTHONW) ++ cp $(BUILDPYTHONW) $(BUILDVENVWLAUNCHER) + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform +@@ -696,10 +732,10 @@ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \ + + # This rule builds the Cygwin Python DLL and import library if configured + # for a shared core library; otherwise, this rule is a noop. +-$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) ++$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) python_nt.o + if test -n "$(DLLLIBRARY)"; then \ + $(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \ +- $(LIBS) $(MODLIBS) $(SYSLIBS); \ ++ $(LIBS) $(LDFLAGS_NODIST) $(MODLIBS) $(SYSLIBS) python_nt.o; \ + else true; \ + fi + +@@ -710,10 +746,12 @@ oldsharedmods: $(SHAREDMODS) + Makefile Modules/config.c: Makefile.pre \ + $(srcdir)/Modules/config.c.in \ + $(MAKESETUP) \ ++ Modules/Setup.config \ + $(srcdir)/Modules/Setup \ + Modules/Setup.local + $(SHELL) $(MAKESETUP) -c $(srcdir)/Modules/config.c.in \ + -s Modules \ ++ Modules/Setup.config \ + Modules/Setup.local \ + $(srcdir)/Modules/Setup + @mv config.c Modules +@@ -728,20 +766,20 @@ Programs/_testembed: Programs/_testembed.o $(LIBRARY_DEPS) + + Programs/_freeze_importlib.o: Programs/_freeze_importlib.c Makefile + +-Programs/_freeze_importlib: Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) ++Programs/_freeze_importlib$(EXE): Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) + $(LINKCC) $(PY_CORE_LDFLAGS) -o $@ Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) + + .PHONY: regen-importlib +-regen-importlib: Programs/_freeze_importlib ++regen-importlib: Programs/_freeze_importlib$(EXE) + # Regenerate Python/importlib_external.h + # from Lib/importlib/_bootstrap_external.py using _freeze_importlib +- ./Programs/_freeze_importlib importlib._bootstrap_external \ ++ ./Programs/_freeze_importlib$(EXE) importlib._bootstrap_external \ + $(srcdir)/Lib/importlib/_bootstrap_external.py \ + $(srcdir)/Python/importlib_external.h.new + $(UPDATE_FILE) $(srcdir)/Python/importlib_external.h $(srcdir)/Python/importlib_external.h.new + # Regenerate Python/importlib.h from Lib/importlib/_bootstrap.py + # using _freeze_importlib +- ./Programs/_freeze_importlib importlib._bootstrap \ ++ ./Programs/_freeze_importlib$(EXE) importlib._bootstrap \ + $(srcdir)/Lib/importlib/_bootstrap.py \ + $(srcdir)/Python/importlib.h.new + $(UPDATE_FILE) $(srcdir)/Python/importlib.h $(srcdir)/Python/importlib.h.new +@@ -823,6 +861,11 @@ Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile + -DSHLIB_EXT='"$(EXT_SUFFIX)"' \ + -o $@ $(srcdir)/Python/dynload_hpux.c + ++Python/dynload_win.o: $(srcdir)/Python/dynload_win.c Makefile ++ $(CC) -c $(PY_CORE_CFLAGS) \ ++ -DPYD_PLATFORM_TAG='"$(PYD_PLATFORM_TAG)"' \ ++ -o $@ $(srcdir)/Python/dynload_win.c ++ + Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h + $(CC) -c $(PY_CORE_CFLAGS) \ + -DABIFLAGS='"$(ABIFLAGS)"' \ +@@ -1057,6 +1100,7 @@ PYTHON_HEADERS= \ + $(srcdir)/Include/import.h \ + $(srcdir)/Include/interpreteridobject.h \ + $(srcdir)/Include/intrcheck.h \ ++ $(srcdir)/Include/iscygpty.h \ + $(srcdir)/Include/iterobject.h \ + $(srcdir)/Include/listobject.h \ + $(srcdir)/Include/longintrepr.h \ +@@ -1313,7 +1357,7 @@ $(DESTSHARED): + # Install the interpreter with $(VERSION) affixed + # This goes into $(exec_prefix) + altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ +- @for i in $(BINDIR) $(LIBDIR); \ ++ @for i in $(BINDIR) $(LIBDIR) $(VENVLAUNCHERDIR); \ + do \ + if test ! -d $(DESTDIR)$$i; then \ + echo "Creating directory $$i"; \ +@@ -1323,6 +1367,9 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ + done + if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \ + $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \ ++ $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(BINDIR)/python3w$(EXE); \ ++ $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(VENVLAUNCHERDIR)/python$(EXE); \ ++ $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(VENVLAUNCHERDIR)/pythonw$(EXE); \ + else \ + $(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \ + fi +@@ -1444,6 +1491,7 @@ LIBSUBDIRS= asyncio \ + sqlite3 \ + tkinter \ + turtledemo \ ++ msilib \ + unittest \ + urllib \ + venv venv/scripts venv/scripts/common venv/scripts/posix \ +@@ -1705,8 +1753,8 @@ libainstall: @DEF_MAKE_RULE@ python-config + @if test "$(STATIC_LIBPYTHON)" = 1; then \ + if test -d $(LIBRARY); then :; else \ + if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ +- if test "$(SHLIB_SUFFIX)" = .dll; then \ +- $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \ ++ if test "$(SHLIB_SUFFIX)" = .dll -o "$(SHLIB_SUFFIX)" = .pyd; then \ ++ $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBDIR) ; \ + else \ + $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ + fi; \ +@@ -1721,6 +1769,7 @@ libainstall: @DEF_MAKE_RULE@ python-config + $(INSTALL_DATA) Makefile $(DESTDIR)$(LIBPL)/Makefile + $(INSTALL_DATA) $(srcdir)/Modules/Setup $(DESTDIR)$(LIBPL)/Setup + $(INSTALL_DATA) Modules/Setup.local $(DESTDIR)$(LIBPL)/Setup.local ++ $(INSTALL_DATA) Modules/Setup.config $(DESTDIR)$(LIBPL)/Setup.config + $(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc + $(INSTALL_DATA) Misc/python-embed.pc $(DESTDIR)$(LIBPC)/python-$(VERSION)-embed.pc + $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup +@@ -1743,16 +1792,23 @@ libainstall: @DEF_MAKE_RULE@ python-config + else true; \ + fi + ++ifeq ($(shell uname -o),Msys) ++DESTDIRFINAL=$(DESTDIR) ++else ++DESTDIRFINAL=$(DESTDIR)/ ++endif ++ + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: sharedmods ++ MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \ + $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --install-platlib=$(DESTSHARED) \ +- --root=$(DESTDIR)/ +- -rm $(DESTDIR)$(DESTSHARED)/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py +- -rm -r $(DESTDIR)$(DESTSHARED)/__pycache__ ++ --root=$(DESTDIRFINAL) ++ -rm $(DESTDIRFINAL)$(DESTSHARED)/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py ++ -rm -r $(DESTDIRFINAL)$(DESTSHARED)/__pycache__ + + # Here are a couple of targets for MacOSX again, to install a full + # framework-based Python. frameworkinstall installs everything, the +@@ -1912,7 +1968,7 @@ clean-retain-profile: pycremoval + find build -name '*.py[co]' -exec rm -f {} ';' || true + -rm -f pybuilddir.txt + -rm -f Lib/lib2to3/*Grammar*.pickle +- -rm -f Programs/_testembed Programs/_freeze_importlib ++ -rm -f Programs/_testembed Programs/_freeze_importlib$(EXE) + -find build -type f -a ! -name '*.gc??' -exec rm -f {} ';' + -rm -f Include/pydtrace_probes.h + -rm -f profile-gen-stamp +@@ -1947,6 +2003,7 @@ distclean: clobber + if test "$$file" != "$(srcdir)/Lib/test/data/README"; then rm "$$file"; fi; \ + done + -rm -f core Makefile Makefile.pre config.status Modules/Setup.local \ ++ Modules/Setup.config \ + Modules/ld_so_aix Modules/python.exp Misc/python.pc \ + Misc/python-embed.pc Misc/python-config.sh + -rm -f python*-gdb.py +diff --git a/Misc/NEWS.d/next/Library/2022-02-20-21-03-31.bpo-46811.8BxgdQ.rst b/Misc/NEWS.d/next/Library/2022-02-20-21-03-31.bpo-46811.8BxgdQ.rst +new file mode 100644 +index 0000000000..6969bd1898 +--- /dev/null ++++ b/Misc/NEWS.d/next/Library/2022-02-20-21-03-31.bpo-46811.8BxgdQ.rst +@@ -0,0 +1 @@ ++Make test suite support Expat >=2.4.5 +diff --git a/Misc/config_mingw b/Misc/config_mingw +new file mode 100644 +index 0000000000..9be43fd3a1 +--- /dev/null ++++ b/Misc/config_mingw +@@ -0,0 +1,15 @@ ++# configure defaults for mingw* hosts ++ ++# mingw functions to ignore ++ac_cv_func_ftruncate=ignore # implement it as _chsize ++ ++# mingw-w64 functions to ignore ++ac_cv_func_truncate=ignore ++ac_cv_func_alarm=ignore ++ ++# files to ignore ++ac_cv_file__dev_ptmx=ignore #NOTE: under MSYS environment device exist ++ac_cv_file__dev_ptc=no ++ ++# force detection of winsock2 functionality - require wxp or newer ++ac_cv_func_getpeername=yes +diff --git a/Misc/cross_mingw32 b/Misc/cross_mingw32 +new file mode 100644 +index 0000000000..03fde9e6af +--- /dev/null ++++ b/Misc/cross_mingw32 +@@ -0,0 +1,11 @@ ++# configure defaults for mingw32 host if cross-build ++ ++ac_cv_little_endian_double=yes ++ac_cv_big_endian_double=no ++ac_cv_mixed_endian_double=no ++ ++ac_cv_tanh_preserves_zero_sign=yes ++ ++ac_cv_wchar_t_signed=no ++ ++ac_cv_have_size_t_format=no +diff --git a/Misc/python-config.sh.in b/Misc/python-config.sh.in +index 2602fe24c0..e0e048a0fa 100644 +--- a/Misc/python-config.sh.in ++++ b/Misc/python-config.sh.in +@@ -1,32 +1,44 @@ + #!/bin/sh + +-# Keep this script in sync with python-config.in +- + exit_with_usage () + { + echo "Usage: $0 --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir|--embed" +- exit $1 ++ exit 1 + } + ++# Really, python-config.py (and thus .sh) should be called directly, but ++# sometimes software (e.g. GDB) calls python-config.sh as if it were the ++# Python executable, passing python-config.py as the first argument. ++# Work around that oddness by ignoring any .py passed as first arg. ++case "$1" in ++ *.py) ++ shift ++ ;; ++esac ++ + if [ "$1" = "" ] ; then +- exit_with_usage 1 ++ exit_with_usage + fi + + # Returns the actual prefix where this script was installed to. + installed_prefix () + { +- RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) +- if which readlink >/dev/null 2>&1 ; then +- if readlink -f "$RESULT" >/dev/null 2>&1; then +- RESULT=$(readlink -f "$RESULT") +- fi ++ local RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) ++ if [ $(which readlink) ] ; then ++ RESULT=$(readlink -f "$RESULT") ++ fi ++ # Since we don't know where the output from this script will end up ++ # we keep all paths in Windows-land since MSYS2 can handle that ++ # while native tools can't handle paths in MSYS2-land. ++ if [ "$OSTYPE" = "msys" ]; then ++ RESULT=$(cd "$RESULT" && pwd -W) + fi + echo $RESULT + } + + prefix_real=$(installed_prefix "$0") + +-# Use sed to fix paths from their built-to locations to their installed-to ++# Use sed to fix paths from their built-to locations to their installed to + # locations. Keep prefix & exec_prefix using their original values in case + # they are referenced in other configure variables, to prevent double + # substitution, issue #22140. +@@ -41,13 +53,17 @@ LIBM="@LIBM@" + LIBC="@LIBC@" + SYSLIBS="$LIBM $LIBC" + ABIFLAGS="@ABIFLAGS@" ++# Protect against lack of substitution. ++if [ "$ABIFLAGS" = "@""ABIFLAGS""@" ] ; then ++ ABIFLAGS= ++fi + LIBS="@LIBPYTHON@ @LIBS@ $SYSLIBS" + LIBS_EMBED="-lpython${VERSION}${ABIFLAGS} @LIBS@ $SYSLIBS" + BASECFLAGS="@BASECFLAGS@" +-LDLIBRARY="@LDLIBRARY@" + OPT="@OPT@" + PY_ENABLE_SHARED="@PY_ENABLE_SHARED@" + LDVERSION="@LDVERSION@" ++LDLIBRARY="@LDLIBRARY@" + LIBDEST=${prefix_real}/lib/python${VERSION} + LIBPL=$(echo "@LIBPL@" | sed "s#$prefix#$prefix_real#") + SO="@EXT_SUFFIX@" +@@ -61,7 +77,7 @@ for ARG in $* + do + case $ARG in + --help) +- exit_with_usage 0 ++ exit_with_usage + ;; + --embed) + PY_EMBED=1 +@@ -69,7 +85,7 @@ do + --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--abiflags|--configdir) + ;; + *) +- exit_with_usage 1 ++ exit_with_usage + ;; + esac + done +@@ -80,37 +96,37 @@ fi + + for ARG in "$@" + do +- case "$ARG" in ++ case $ARG in + --prefix) +- echo "$prefix_real" ++ echo -ne "$prefix_real" + ;; + --exec-prefix) +- echo "$exec_prefix_real" ++ echo -ne "$exec_prefix_real " + ;; + --includes) +- echo "$INCDIR $PLATINCDIR" ++ echo -ne "$INCDIR $PLATINCDIR" + ;; + --cflags) +- echo "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT" ++ echo -ne "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT" + ;; + --libs) +- echo "$LIBS" ++ echo -ne "$LIBS" + ;; + --ldflags) + LIBPLUSED= + if [ "$PY_ENABLE_SHARED" = "0" ] ; then + LIBPLUSED="-L$LIBPL" + fi +- echo "$LIBPLUSED -L$libdir $LIBS" ++ echo -ne "$LIBPLUSED -L$libdir $LIBS " + ;; + --extension-suffix) +- echo "$SO" ++ echo -ne "$SO " + ;; + --abiflags) +- echo "$ABIFLAGS" ++ echo -ne "$ABIFLAGS " + ;; + --configdir) +- echo "$LIBPL" ++ echo -ne "$LIBPL " + ;; + esac + done +diff --git a/Misc/python.pc.in b/Misc/python.pc.in +index 87e04decc2..3900190255 100644 +--- a/Misc/python.pc.in ++++ b/Misc/python.pc.in +@@ -9,5 +9,5 @@ Description: Build a C extension for Python + Requires: + Version: @VERSION@ + Libs.private: @LIBS@ +-Libs: ++Libs: -L${libdir} -lpython@VERSION@@ABIFLAGS@ + Cflags: -I${includedir}/python@VERSION@@ABIFLAGS@ +diff --git a/Modules/Setup b/Modules/Setup +index 87c6a152f8..3097db66c9 100644 +--- a/Modules/Setup ++++ b/Modules/Setup +@@ -101,10 +101,7 @@ PYTHONPATH=$(COREPYTHONPATH) + # This only contains the minimal set of modules required to run the + # setup.py script in the root of the Python source tree. + +-posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c # posix (UNIX) system calls + errno errnomodule.c # posix (UNIX) errno values +-pwd pwdmodule.c # this is needed to find out the user's home dir +- # if $HOME is not set + _sre -DPy_BUILD_CORE_BUILTIN _sre.c # Fredrik Lundh's new regular expressions + _codecs _codecsmodule.c # access to the builtin codecs and codec registry + _weakref _weakref.c # weak references +@@ -114,7 +111,7 @@ _collections _collectionsmodule.c # Container types + _abc -DPy_BUILD_CORE_BUILTIN _abc.c # Abstract base classes + itertools itertoolsmodule.c # Functions creating iterators for efficient looping + atexit atexitmodule.c # Register functions to be run at interpreter-shutdown +-_signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c ++_signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c -lws2_32 + _stat _stat.c # stat.h interface + time -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal timemodule.c # -lm # time operations and variables + _thread -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _threadmodule.c # low-level threading interface +@@ -123,7 +120,7 @@ _thread -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _threadmodule.c # l + _locale -DPy_BUILD_CORE_BUILTIN _localemodule.c # -lintl + + # Standard I/O baseline +-_io -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c ++_io -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c _io/winconsoleio.c + + # faulthandler module + faulthandler faulthandler.c +diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in +new file mode 100644 +index 0000000000..b4e7ff71a5 +--- /dev/null ++++ b/Modules/Setup.config.in +@@ -0,0 +1,16 @@ ++# This file is transmogrified into Setup.config by config.status. ++ ++# The purpose of this file is to conditionally enable certain modules ++# based on configure-time options. ++ ++# init system calls(posix/nt/...) for INITFUNC (used by makesetup) ++@INITSYS@ -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c ++ ++# This is needed to find out the user's home dir if $HOME is not set ++@USE_PWD_MODULE@pwd pwdmodule.c ++ ++# build-in modules for windows platform: ++@USE_WIN32_MODULE@winreg ../PC/winreg.c ++@USE_WIN32_MODULE@msvcrt -DPy_BUILD_CORE ../PC/msvcrtmodule.c ++@USE_WIN32_MODULE@_winapi _winapi.c ++ +diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c +index 5f8a723f63..e24bd44549 100644 +--- a/Modules/_ctypes/_ctypes.c ++++ b/Modules/_ctypes/_ctypes.c +@@ -3403,6 +3403,18 @@ static PPROC FindAddress(void *handle, const char *name, PyObject *type) + mangled_name = alloca(strlen(name) + 1 + 1 + 1 + 3); /* \0 _ @ %d */ + if (!mangled_name) + return NULL; ++ /* Issue: for stdcall decorated export functions MSVC compiler adds ++ * underscore, but GCC compiler create them without. This is ++ * visible by example for _ctypes_test.pyd module. ++ * As well functions from system libraries are without underscore. ++ * Solutions: ++ * - If a python module is build with gcc option --add-stdcall-alias ++ * the module will contain XXX as alias for function XXX@ as result ++ * first search in this method will succeed. ++ * - Distutil may use compiler to create def-file, to modify it as ++ * add underscore alias and with new def file to create module. ++ * - Or may be just to search for function without underscore. ++ */ + for (i = 0; i < 32; ++i) { + sprintf(mangled_name, "_%s@%d", name, i*4); + Py_BEGIN_ALLOW_THREADS +@@ -3410,6 +3422,13 @@ static PPROC FindAddress(void *handle, const char *name, PyObject *type) + Py_END_ALLOW_THREADS + if (address) + return address; ++ /* search for function without underscore as weel */ ++ sprintf(mangled_name, "%s@%d", name, i*4); ++ Py_BEGIN_ALLOW_THREADS ++ address = (PPROC)GetProcAddress(handle, mangled_name); ++ Py_END_ALLOW_THREADS ++ if (address) ++ return address; + } + return NULL; + #endif +diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c +index a7fb6a33c8..98f2c09b10 100644 +--- a/Modules/_gdbmmodule.c ++++ b/Modules/_gdbmmodule.c +@@ -11,7 +11,7 @@ + #include + #include "gdbm.h" + +-#if defined(WIN32) && !defined(__CYGWIN__) ++#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) + #include "gdbmerrno.h" + extern const char * gdbm_strerror(gdbm_error); + #endif +diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c +index b9856b3b63..66932d7053 100644 +--- a/Modules/_io/fileio.c ++++ b/Modules/_io/fileio.c +@@ -19,6 +19,7 @@ + #endif + #include /* For offsetof */ + #include "_iomodule.h" ++#include "iscygpty.h" + + /* + * Known likely problems: +@@ -1127,7 +1128,7 @@ _io_FileIO_isatty_impl(fileio *self) + return err_closed(); + Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH +- res = isatty(self->fd); ++ res = isatty(self->fd) || is_cygpty(self->fd); + _Py_END_SUPPRESS_IPH + Py_END_ALLOW_THREADS + return PyBool_FromLong(res); +diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c +index 564f5598ed..71c84124af 100644 +--- a/Modules/_localemodule.c ++++ b/Modules/_localemodule.c +@@ -12,6 +12,13 @@ This software comes with no warranty. Use at your own risk. + #define PY_SSIZE_T_CLEAN + #include "Python.h" + #include "pycore_fileutils.h" ++#ifdef __MINGW32__ ++/* The header libintl.h and library libintl may exist on mingw host. ++ * To be compatible with MSVC build we has to undef some defines. ++ */ ++#undef HAVE_LIBINTL_H ++#undef HAVE_BIND_TEXTDOMAIN_CODESET ++#endif + + #include + #include +diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c +index bec23517fc..72a34d0a69 100644 +--- a/Modules/_multiprocessing/multiprocessing.c ++++ b/Modules/_multiprocessing/multiprocessing.c +@@ -172,7 +172,7 @@ static PyMethodDef module_methods[] = { + _MULTIPROCESSING_RECV_METHODDEF + _MULTIPROCESSING_SEND_METHODDEF + #endif +-#if !defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__) ++#if defined(MS_WINDOWS) || (!defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__)) + _MULTIPROCESSING_SEM_UNLINK_METHODDEF + #endif + {NULL} +diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h +index 277963bc15..07bb047316 100644 +--- a/Modules/_multiprocessing/multiprocessing.h ++++ b/Modules/_multiprocessing/multiprocessing.h +@@ -21,6 +21,9 @@ + # endif + # define SEM_HANDLE HANDLE + # define SEM_VALUE_MAX LONG_MAX ++# if defined(HAVE_SEM_OPEN) && defined(_POSIX_THREADS) ++# include ++# endif + #else + # include /* O_CREAT and O_EXCL */ + # if defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED) +diff --git a/Modules/_winapi.c b/Modules/_winapi.c +index 3e24d512ca..b09fce72b5 100644 +--- a/Modules/_winapi.c ++++ b/Modules/_winapi.c +@@ -41,7 +41,9 @@ + + #define WINDOWS_LEAN_AND_MEAN + #include "windows.h" ++#if defined(Py_DEBUG) + #include ++#endif + #include "winreparse.h" + + #if defined(MS_WIN32) && !defined(MS_WIN64) +@@ -957,7 +959,7 @@ getattributelist(PyObject *obj, const char *name, AttributeList *attribute_list) + DWORD err; + BOOL result; + PyObject *value; +- Py_ssize_t handle_list_size; ++ Py_ssize_t handle_list_size = 0; + DWORD attribute_count = 0; + SIZE_T attribute_list_size = 0; + +diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c +index 9290255c66..9d2952bc95 100644 +--- a/Modules/_xxsubinterpretersmodule.c ++++ b/Modules/_xxsubinterpretersmodule.c +@@ -1761,7 +1761,7 @@ PyDoc_STRVAR(channelid_doc, + "A channel ID identifies a channel and may be used as an int."); + + static PyTypeObject ChannelIDtype = { +- PyVarObject_HEAD_INIT(&PyType_Type, 0) ++ PyVarObject_HEAD_INIT(NULL, 0) + "_xxsubinterpreters.ChannelID", /* tp_name */ + sizeof(channelid), /* tp_basicsize */ + 0, /* tp_itemsize */ +diff --git a/Modules/getpath.c b/Modules/getpath.c +index ef6dd59a08..2b4ae2823d 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -13,6 +13,11 @@ + # include + #endif + ++#ifdef MS_WINDOWS ++#include ++#include ++#endif ++ + /* Search in some common locations for the associated Python libraries. + * + * Two directories must be found, the platform independent directory +@@ -129,6 +134,7 @@ typedef struct { + wchar_t *prefix_macro; /* PREFIX macro */ + wchar_t *exec_prefix_macro; /* EXEC_PREFIX macro */ + wchar_t *vpath_macro; /* VPATH macro */ ++ wchar_t *dll_path; /* DLL Path */ + + wchar_t *lib_python; /* / "pythonX.Y" */ + +@@ -146,7 +152,7 @@ typedef struct { + } PyCalculatePath; + + static const wchar_t delimiter[2] = {DELIM, '\0'}; +-static const wchar_t separator[2] = {SEP, '\0'}; ++static wchar_t separator[2] = {SEP, '\0'}; + + + /* Get file status. Encode the path to the locale encoding. */ +@@ -170,7 +176,7 @@ static void + reduce(wchar_t *dir) + { + size_t i = wcslen(dir); +- while (i > 0 && dir[i] != SEP) { ++ while (i > 0 && !_Py_issep(dir[i])) { + --i; + } + dir[i] = '\0'; +@@ -224,6 +230,9 @@ isdir(const wchar_t *filename) + return 1; + } + ++/* ++x86_64-w64-mingw32-gcc -c -Wno-unused-result -Wsign-compare -DNDEBUG -march=x86-64 -mtune=generic -O2 -pipe -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -D_WIN32_WINNT=0x0601 -DNDEBUG -DMS_DLL_ID="\"3.9\"" -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-generate -I../Python-3.9.4/Include/internal -IObjects -IInclude -IPython -I. -I../Python-3.9.4/Include -I../Python-3.9.4/PC -D__USE_MINGW_ANSI_STDIO=1 -IC:/msys64/mingw64/include/ncurses -I. -DPy_BUILD_CORE -DPYTHONPATH='""' -DPREFIX='"/mingw64"' -DEXEC_PREFIX='"/mingw64"' -DVERSION='"3.9"' -DVPATH='"../Python-3.9.4"' -o Modules/getpath.o ../Python-3.9.4/Modules/getpath.c ++*/ + + /* Add a path component, by appending stuff to buffer. + buflen: 'buffer' length in characters including trailing NUL. +@@ -242,8 +251,8 @@ joinpath(wchar_t *path, const wchar_t *path2, size_t path_len) + return PATHLEN_ERR(); + } + +- if (n > 0 && path[n-1] != SEP) { +- path[n++] = SEP; ++ if (n > 0 && !_Py_issep(path[n-1])) { ++ path[n++] = Py_GetSepW(path); + } + } + else { +@@ -285,7 +294,7 @@ joinpath2(const wchar_t *path, const wchar_t *path2) + } + + size_t len = wcslen(path); +- int add_sep = (len > 0 && path[len - 1] != SEP); ++ int add_sep = (len > 0 && !_Py_issep(path[len - 1])); + len += add_sep; + len += wcslen(path2); + +@@ -334,7 +343,7 @@ copy_absolute(wchar_t *abs_path, const wchar_t *path, size_t abs_path_len) + } + return _PyStatus_OK(); + } +- if (path[0] == '.' && path[1] == SEP) { ++ if (path[0] == '.' && _Py_issep(path[1])) { + path += 2; + } + PyStatus status = joinpath(abs_path, path, abs_path_len); +@@ -418,7 +427,7 @@ add_exe_suffix(wchar_t **progpath_p) + /* Check for already have an executable suffix */ + size_t n = wcslen(progpath); + size_t s = wcslen(EXE_SUFFIX); +- if (wcsncasecmp(EXE_SUFFIX, progpath + n - s, s) == 0) { ++ if (_wcsnicmp(EXE_SUFFIX, progpath + n - s, s) == 0) { + return _PyStatus_OK(); + } + +@@ -478,6 +487,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + return _PyStatus_NO_MEMORY(); + } + ++ Py_NormalizeSepsW(path); + int is_build_dir = isfile(path); + PyMem_RawFree(path); + +@@ -502,6 +512,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + } + + int module; ++ Py_NormalizeSepsW(prefix); + status = ismodule(prefix, &module); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -528,6 +539,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + } + + int module; ++ Py_NormalizeSepsW(prefix); + status = ismodule(prefix, &module); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -551,6 +563,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + } + + int module; ++ Py_NormalizeSepsW(prefix); + status = ismodule(prefix, &module); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -610,6 +623,11 @@ calculate_set_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + * return the compiled-in defaults instead. + */ + if (calculate->prefix_found > 0) { ++#ifdef MS_WINDOWS ++ wchar_t drive_root[3]; ++ memset(drive_root, 0, sizeof(drive_root)); ++ wcsncpy(drive_root, calculate->prefix, 3); ++#endif + wchar_t *prefix = _PyMem_RawWcsdup(calculate->prefix); + if (prefix == NULL) { + return _PyStatus_NO_MEMORY(); +@@ -625,7 +643,11 @@ calculate_set_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + + /* The prefix is the root directory, but reduce() chopped + off the "/". */ ++#ifdef MS_WINDOWS ++ pathconfig->prefix = _PyMem_RawWcsdup(drive_root); ++#else + pathconfig->prefix = _PyMem_RawWcsdup(separator); ++#endif + if (pathconfig->prefix == NULL) { + return _PyStatus_NO_MEMORY(); + } +@@ -682,6 +704,7 @@ calculate_pybuilddir(const wchar_t *argv0_path, + return PATHLEN_ERR(); + } + status = joinpath(exec_prefix, pybuilddir, exec_prefix_len); ++ Py_NormalizeSepsW(exec_prefix); + PyMem_RawFree(pybuilddir); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -730,6 +753,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + + /* Check for pybuilddir.txt */ + assert(*found == 0); ++ Py_NormalizeSepsW(exec_prefix); + status = calculate_pybuilddir(calculate->argv0_path, + exec_prefix, exec_prefix_len, found); + if (_PyStatus_EXCEPTION(status)) { +@@ -804,6 +828,7 @@ calculate_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + return status; + } + ++ Py_NormalizeSepsW(exec_prefix); + if (!calculate->exec_prefix_found) { + if (calculate->warnings) { + fprintf(stderr, +@@ -836,6 +861,47 @@ calculate_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + } + + ++#ifdef MS_WINDOWS ++wchar_t * ++GetWindowsModulePaths(void) ++{ ++ int result = 0; ++ wchar_t program_full_path[MAXPATHLEN+1]; ++ memset(program_full_path, 0, sizeof(program_full_path)); ++ ++ if (GetModuleFileNameW(NULL, program_full_path, MAXPATHLEN)) { ++ result = 1; ++ Py_NormalizeSepsW(program_full_path); ++ } ++ ++ return _PyMem_RawWcsdup(program_full_path); ++} ++ ++ ++wchar_t* ++_Py_GetDLLPath(void) ++{ ++ wchar_t dll_path[MAXPATHLEN+1]; ++ memset(dll_path, 0, sizeof(dll_path)); ++ ++#ifdef Py_ENABLE_SHARED ++ extern HANDLE PyWin_DLLhModule; ++ if (PyWin_DLLhModule) { ++ if (GetModuleFileNameW(PyWin_DLLhModule, dll_path, MAXPATHLEN)) { ++ Py_NormalizeSepsW(dll_path); ++ } else { ++ dll_path[0] = 0; ++ } ++ } ++#else ++ dll_path[0] = 0; ++#endif ++ ++ return _PyMem_RawWcsdup(dll_path); ++} ++#endif /* MS_WINDOWS */ ++ ++ + static PyStatus + calculate_set_exec_prefix(PyCalculatePath *calculate, + _PyPathConfig *pathconfig) +@@ -846,6 +912,12 @@ calculate_set_exec_prefix(PyCalculatePath *calculate, + return _PyStatus_NO_MEMORY(); + } + ++#ifdef MS_WINDOWS ++ wchar_t drive_root[3]; ++ memset(drive_root, 0, sizeof(drive_root)); ++ wcsncpy(drive_root, calculate->exec_prefix, 3); ++#endif ++ + reduce(exec_prefix); + reduce(exec_prefix); + reduce(exec_prefix); +@@ -859,7 +931,11 @@ calculate_set_exec_prefix(PyCalculatePath *calculate, + + /* The exec_prefix is the root directory, but reduce() chopped + off the "/". */ ++#ifdef MS_WINDOWS ++ pathconfig->exec_prefix = _PyMem_RawWcsdup(drive_root); ++#else + pathconfig->exec_prefix = _PyMem_RawWcsdup(separator); ++#endif + if (pathconfig->exec_prefix == NULL) { + return _PyStatus_NO_MEMORY(); + } +@@ -964,13 +1040,22 @@ calculate_program_impl(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + * other way to find a directory to start the search from. If + * $PATH isn't exported, you lose. + */ +- if (wcschr(pathconfig->program_name, SEP)) { ++ if (wcschr(pathconfig->program_name, Py_GetSepW(pathconfig->program_name))) { + pathconfig->program_full_path = _PyMem_RawWcsdup(pathconfig->program_name); + if (pathconfig->program_full_path == NULL) { + return _PyStatus_NO_MEMORY(); + } + return _PyStatus_OK(); + } ++#ifdef MS_WINDOWS ++ else if(pathconfig->program_full_path == NULL) { ++ pathconfig->program_full_path = GetWindowsModulePaths(); ++ if (pathconfig->program_full_path == NULL) { ++ return _PyStatus_NO_MEMORY(); ++ } ++ return _PyStatus_OK(); ++ } ++#endif /* MS_WINDOWS */ + + #ifdef __APPLE__ + wchar_t *abs_path = NULL; +@@ -1007,7 +1092,7 @@ calculate_program_impl(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + + + /* Calculate pathconfig->program_full_path */ +-static PyStatus ++PyStatus + calculate_program(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + { + PyStatus status; +@@ -1173,7 +1258,7 @@ calculate_argv0_path_framework(PyCalculatePath *calculate, _PyPathConfig *pathco + #endif + + +-static PyStatus ++PyStatus + calculate_argv0_path(PyCalculatePath *calculate, + _PyPathConfig *pathconfig) + { +@@ -1191,10 +1276,12 @@ calculate_argv0_path(PyCalculatePath *calculate, + } + #endif + ++#if defined(HAVE_READLINK) + status = resolve_symlinks(&calculate->argv0_path); + if (_PyStatus_EXCEPTION(status)) { + return status; + } ++#endif + + reduce(calculate->argv0_path); + +@@ -1324,6 +1411,7 @@ calculate_zip_path(PyCalculatePath *calculate) + goto done; + } + ++ Py_NormalizeSepsW(calculate->zip_path); + res = _PyStatus_OK(); + + done: +@@ -1363,7 +1451,14 @@ calculate_module_search_path(PyCalculatePath *calculate, + } + + bufsz += wcslen(calculate->zip_path) + 1; ++/* TODO :: The MS_WINDOWS bit may be unnecessary. */ ++#ifdef MS_WINDOWS ++ if (_Py_isabs(calculate->exec_prefix)) { ++ bufsz += wcslen(calculate->exec_prefix) + 1; ++ } ++#else + bufsz += wcslen(calculate->exec_prefix) + 1; ++#endif + + /* Allocate the buffer */ + wchar_t *buf = PyMem_RawMalloc(bufsz * sizeof(wchar_t)); +@@ -1391,7 +1486,7 @@ calculate_module_search_path(PyCalculatePath *calculate, + + if (!_Py_isabs(defpath)) { + wcscat(buf, calculate->prefix); +- if (prefixsz >= 2 && calculate->prefix[prefixsz - 2] != SEP && ++ if (prefixsz >= 2 && !_Py_issep(calculate->prefix[prefixsz - 2]) && + defpath[0] != (delim ? DELIM : L'\0')) + { + /* not empty */ +@@ -1413,8 +1508,15 @@ calculate_module_search_path(PyCalculatePath *calculate, + } + wcscat(buf, delimiter); + ++#ifdef MS_WINDOWS ++ if (_Py_isabs(calculate->exec_prefix)) { ++ wcscat(buf, calculate->exec_prefix); ++ wcscat(buf, delimiter); ++ } ++#else + /* Finally, on goes the directory for dynamic-load modules */ + wcscat(buf, calculate->exec_prefix); ++#endif + + pathconfig->module_search_path = buf; + return _PyStatus_OK(); +@@ -1443,14 +1545,17 @@ calculate_init(PyCalculatePath *calculate, const PyConfig *config) + if (!calculate->pythonpath_macro) { + return DECODE_LOCALE_ERR("PYTHONPATH macro", len); + } ++ Py_NormalizeSepsW(calculate->pythonpath_macro); + calculate->prefix_macro = Py_DecodeLocale(PREFIX, &len); + if (!calculate->prefix_macro) { + return DECODE_LOCALE_ERR("PREFIX macro", len); + } ++ Py_NormalizeSepsW(calculate->prefix_macro); + calculate->exec_prefix_macro = Py_DecodeLocale(EXEC_PREFIX, &len); + if (!calculate->exec_prefix_macro) { + return DECODE_LOCALE_ERR("EXEC_PREFIX macro", len); + } ++ Py_NormalizeSepsW(calculate->exec_prefix_macro); + calculate->vpath_macro = Py_DecodeLocale(VPATH, &len); + if (!calculate->vpath_macro) { + return DECODE_LOCALE_ERR("VPATH macro", len); +@@ -1461,6 +1566,7 @@ calculate_init(PyCalculatePath *calculate, const PyConfig *config) + if (!pyversion) { + return DECODE_LOCALE_ERR("VERSION macro", len); + } ++ + calculate->lib_python = joinpath2(config->platlibdir, pyversion); + PyMem_RawFree(pyversion); + if (calculate->lib_python == NULL) { +@@ -1477,6 +1583,7 @@ calculate_free(PyCalculatePath *calculate) + PyMem_RawFree(calculate->pythonpath_macro); + PyMem_RawFree(calculate->prefix_macro); + PyMem_RawFree(calculate->exec_prefix_macro); ++ PyMem_RawFree(calculate->dll_path); + PyMem_RawFree(calculate->vpath_macro); + PyMem_RawFree(calculate->lib_python); + PyMem_RawFree(calculate->path_env); +@@ -1492,6 +1599,8 @@ calculate_path(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + { + PyStatus status; + ++ calculate->dll_path = _Py_GetDLLPath(); ++ + if (pathconfig->program_full_path == NULL) { + status = calculate_program(calculate, pathconfig); + if (_PyStatus_EXCEPTION(status)) { +@@ -1526,6 +1635,36 @@ calculate_path(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + return status; + } + ++#ifdef MS_WINDOWS ++ if (calculate->path_env) { ++ wchar_t *module_path, *norm_path; ++ // Add path of executable/dll to system path. This ++ // is so that the correct tcl??.dll and tk??.dll get used. ++ module_path = calculate->dll_path[0] ? calculate->dll_path : pathconfig->program_full_path; ++ norm_path = (wchar_t *)alloca(sizeof(wchar_t) * (wcslen(module_path) + 1)); ++ if (norm_path) { ++ wchar_t *slashes, *end, *new_path; ++ wcscpy(norm_path, module_path); ++ slashes = wcschr(norm_path, L'/'); ++ while (slashes) { ++ *slashes = L'\\'; ++ slashes = wcschr(slashes + 1, L'/'); ++ } ++ end = wcsrchr(norm_path, L'\\') ? wcsrchr(norm_path, L'\\') : norm_path + wcslen(norm_path); ++ end[1] = L'\0'; ++ ++ new_path = (wchar_t *)alloca(sizeof(wchar_t) * (wcslen(L"PATH=") + wcslen(calculate->path_env) + 1 + wcslen(norm_path) + 1)); ++ if (new_path) { ++ wcscpy(new_path, L"PATH="); ++ wcscat(new_path, calculate->path_env); ++ wcscat(new_path, L";"); ++ wcscat(new_path, norm_path); ++ _wputenv(new_path); ++ } ++ } ++ } ++#endif ++ + if ((!calculate->prefix_found || !calculate->exec_prefix_found) + && calculate->warnings) + { +@@ -1592,6 +1731,7 @@ _PyPathConfig_Calculate(_PyPathConfig *pathconfig, const PyConfig *config) + { + PyStatus status; + PyCalculatePath calculate; ++ separator[0] = Py_GetSepW(NULL); + memset(&calculate, 0, sizeof(calculate)); + + status = calculate_init(&calculate, config); +diff --git a/Modules/main.c b/Modules/main.c +index 2684d23067..9ee34a3c63 100644 +--- a/Modules/main.c ++++ b/Modules/main.c +@@ -6,6 +6,7 @@ + #include "pycore_pathconfig.h" // _PyPathConfig_ComputeSysPath0() + #include "pycore_pylifecycle.h" // _Py_PreInitializeFromPyArgv() + #include "pycore_pystate.h" // _PyInterpreterState_GET() ++#include "iscygpty.h" + + /* Includes for exit_sigint() */ + #include // perror() +@@ -91,7 +92,7 @@ static inline int config_run_code(const PyConfig *config) + static int + stdin_is_interactive(const PyConfig *config) + { +- return (isatty(fileno(stdin)) || config->interactive); ++ return (isatty(fileno(stdin)) || config->interactive || is_cygpty(fileno(stdin))); + } + + +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 03de470323..0c9fca692b 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -20,7 +20,7 @@ + + FSCTL_GET_REPARSE_POINT is not exported with WIN32_LEAN_AND_MEAN. */ + # include +-# include ++# include + #endif + + #ifdef __VXWORKS__ +@@ -42,6 +42,7 @@ + #ifdef __ANDROID__ + # undef HAVE_FACCESSAT + #endif ++#include "iscygpty.h" + + #include /* needed for ctermid() */ + +@@ -316,6 +317,27 @@ corresponding Unix manual entries for more information on calls."); + # define HAVE_CWAIT 1 + # define HAVE_FSYNC 1 + # define fsync _commit ++# elif defined(__MINGW32__) /* GCC for windows hosts */ ++/* getlogin is detected by configure on mingw-w64 */ ++# undef HAVE_GETLOGIN ++/*# define HAVE_GETCWD 1 - detected by configure*/ ++# define HAVE_GETPPID 1 ++# define HAVE_GETLOGIN 1 ++# define HAVE_SPAWNV 1 ++# define HAVE_WSPAWNV 1 ++# define HAVE_WEXECV 1 ++/*# define HAVE_EXECV 1 - detected by configure*/ ++# define HAVE_PIPE 1 ++# define HAVE_POPEN 1 ++# define HAVE_SYSTEM 1 ++# define HAVE_CWAIT 1 ++# define HAVE_FSYNC 1 ++# define fsync _commit ++# include ++# include ++# ifndef _MAX_ENV ++# define _MAX_ENV 32767 ++# endif + # else + /* Unix functions that the configure script doesn't check for */ + # ifndef __VXWORKS__ +@@ -416,7 +438,7 @@ extern char *ctermid_r(char *); + # endif + #endif + +-#ifdef _MSC_VER ++#ifdef MS_WINDOWS + # ifdef HAVE_DIRECT_H + # include + # endif +@@ -438,7 +460,7 @@ extern char *ctermid_r(char *); + # include // ShellExecute() + # include // UNLEN + # define HAVE_SYMLINK +-#endif /* _MSC_VER */ ++#endif /* MS_WINDOWS */ + + #ifndef MAXPATHLEN + # if defined(PATH_MAX) && PATH_MAX > 1024 +@@ -1587,9 +1609,9 @@ win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag) + ** man environ(7). + */ + #include +-#elif !defined(_MSC_VER) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__)) ++#elif !defined(MS_WINDOWS) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__)) + extern char **environ; +-#endif /* !_MSC_VER */ ++#endif /* !MS_WINDOWS */ + + static PyObject * + convertenviron(void) +@@ -3786,6 +3808,7 @@ posix_getcwd(int use_bytes) + return PyErr_SetFromWindowsErr(0); + } + ++ Py_NormalizeSepsW(wbuf2); + PyObject *resobj = PyUnicode_FromWideChar(wbuf2, len); + if (wbuf2 != wbuf) { + PyMem_RawFree(wbuf2); +@@ -4075,7 +4098,7 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) + Py_END_ALLOW_THREADS + /* FindNextFile sets error to ERROR_NO_MORE_FILES if + it got to the end of the directory. */ +- if (!result && GetLastError() != ERROR_NO_MORE_FILES) { ++ if (!result && GetLastError() != 0 && GetLastError() != ERROR_NO_MORE_FILES) { + Py_DECREF(list); + list = path_error(path); + goto exit; +@@ -4349,6 +4372,7 @@ os__getfinalpathname_impl(PyObject *module, path_t *path) + target_path = tmp; + } + ++ Py_NormalizeSepsW(target_path); + result = PyUnicode_FromWideChar(target_path, result_length); + if (result && path->narrow) { + Py_SETREF(result, PyUnicode_EncodeFSDefault(result)); +@@ -4426,7 +4450,6 @@ os__path_splitroot_impl(PyObject *module, path_t *path) + wchar_t *buffer; + wchar_t *end; + PyObject *result = NULL; +- HRESULT ret; + + buffer = (wchar_t*)PyMem_Malloc(sizeof(wchar_t) * (wcslen(path->wide) + 1)); + if (!buffer) { +@@ -4438,18 +4461,26 @@ os__path_splitroot_impl(PyObject *module, path_t *path) + } + + Py_BEGIN_ALLOW_THREADS +- ret = PathCchSkipRoot(buffer, &end); ++ if (buffer[0] && buffer[1] == L':') { ++ if (buffer[2] == L'\\') { ++ end = &buffer[3]; ++ } else { ++ end = &buffer[2]; ++ } ++ } else { ++ end = PathSkipRootW(buffer); ++ } + Py_END_ALLOW_THREADS +- if (FAILED(ret)) { ++ if (!end || end == buffer) { + result = Py_BuildValue("sO", "", path->object); +- } else if (end != buffer) { ++ } else if (!*end) { ++ result = Py_BuildValue("Os", path->object, ""); ++ } else { + size_t rootLen = (size_t)(end - buffer); + result = Py_BuildValue("NN", + PyUnicode_FromWideChar(path->wide, rootLen), + PyUnicode_FromWideChar(path->wide + rootLen, -1) + ); +- } else { +- result = Py_BuildValue("Os", path->object, ""); + } + PyMem_Free(buffer); + +@@ -4457,6 +4488,7 @@ os__path_splitroot_impl(PyObject *module, path_t *path) + } + + ++ + #endif /* MS_WINDOWS */ + + +@@ -5367,7 +5399,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + /*[clinic end generated code: output=cfcac69d027b82cf input=2fbd62a2f228f8f4]*/ + { + #ifdef MS_WINDOWS +- HANDLE hFile; ++ HANDLE hFile = 0; + FILETIME atime, mtime; + #else + int result; +@@ -10072,7 +10104,7 @@ os_isatty_impl(PyObject *module, int fd) + int return_value; + Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH +- return_value = isatty(fd); ++ return_value = isatty(fd) || is_cygpty(fd); + _Py_END_SUPPRESS_IPH + Py_END_ALLOW_THREADS + return return_value; +@@ -14517,7 +14549,7 @@ os__add_dll_directory_impl(PyObject *module, path_t *path) + loaded. */ + Py_BEGIN_ALLOW_THREADS + if (!(hKernel32 = GetModuleHandleW(L"kernel32")) || +- !(AddDllDirectory = (PAddDllDirectory)GetProcAddress( ++ !(AddDllDirectory = (PAddDllDirectory)(void *)GetProcAddress( + hKernel32, "AddDllDirectory")) || + !(cookie = (*AddDllDirectory)(path->wide))) { + err = GetLastError(); +@@ -14567,7 +14599,7 @@ os__remove_dll_directory_impl(PyObject *module, PyObject *cookie) + loaded. */ + Py_BEGIN_ALLOW_THREADS + if (!(hKernel32 = GetModuleHandleW(L"kernel32")) || +- !(RemoveDllDirectory = (PRemoveDllDirectory)GetProcAddress( ++ !(RemoveDllDirectory = (PRemoveDllDirectory)(void *)GetProcAddress( + hKernel32, "RemoveDllDirectory")) || + !(*RemoveDllDirectory)(cookieValue)) { + err = GetLastError(); +diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c +index 3ecd0c32b3..1bf55ccb58 100644 +--- a/Modules/selectmodule.c ++++ b/Modules/selectmodule.c +@@ -136,9 +136,9 @@ seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1]) + v = PyObject_AsFileDescriptor( o ); + if (v == -1) goto finally; + +-#if defined(_MSC_VER) ++#if defined(MS_WIN32) + max = 0; /* not used for Win32 */ +-#else /* !_MSC_VER */ ++#else /* !MS_WIN32 */ + if (!_PyIsSelectable_fd(v)) { + PyErr_SetString(PyExc_ValueError, + "filedescriptor out of range in select()"); +@@ -146,7 +146,7 @@ seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1]) + } + if (v > max) + max = v; +-#endif /* _MSC_VER */ ++#endif /* MS_WIN32 */ + FD_SET(v, set); + + /* add object and its file descriptor to the list */ +diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c +index ab8618b341..91b3c8c337 100644 +--- a/Modules/socketmodule.c ++++ b/Modules/socketmodule.c +@@ -265,7 +265,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\ + # endif + + /* Macros based on the IPPROTO enum, see: https://bugs.python.org/issue29515 */ +-#ifdef MS_WINDOWS ++#ifdef _MSC_VER + #define IPPROTO_ICMP IPPROTO_ICMP + #define IPPROTO_IGMP IPPROTO_IGMP + #define IPPROTO_GGP IPPROTO_GGP +@@ -296,7 +296,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\ + #define IPPROTO_PGM IPPROTO_PGM // WinSock2 only + #define IPPROTO_L2TP IPPROTO_L2TP // WinSock2 only + #define IPPROTO_SCTP IPPROTO_SCTP // WinSock2 only +-#endif /* MS_WINDOWS */ ++#endif /* _MSC_VER */ + + /* Provides the IsWindows7SP1OrGreater() function */ + #include +@@ -389,6 +389,10 @@ remove_unusable_flags(PyObject *m) + /* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and + * EAI_* constants are defined in (the already included) ws2tcpip.h. + */ ++#elif defined(__MINGW32__) ++ /* Do not include addrinfo.h as minimum supported version is ++ * _WIN32_WINNT >= WindowsXP(0x0501) ++ */ + #else + # include "addrinfo.h" + #endif +diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h +index e4f375d5e8..bbdd8c0c47 100644 +--- a/Modules/socketmodule.h ++++ b/Modules/socketmodule.h +@@ -70,8 +70,10 @@ struct SOCKADDR_BTH_REDEF { + */ + # ifdef SIO_GET_MULTICAST_FILTER + # include /* for SIO_RCVALL */ ++#ifndef __MINGW32__ /* resolve by configure */ + # define HAVE_ADDRINFO + # define HAVE_SOCKADDR_STORAGE ++#endif + # define HAVE_GETADDRINFO + # define HAVE_GETNAMEINFO + # define ENABLE_IPV6 +diff --git a/Modules/timemodule.c b/Modules/timemodule.c +index 4caacc3b64..4787fa3c07 100644 +--- a/Modules/timemodule.c ++++ b/Modules/timemodule.c +@@ -759,7 +759,7 @@ time_strftime(PyObject *self, PyObject *args) + return NULL; + } + +-#if defined(_MSC_VER) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) || defined(__VXWORKS__) ++#if defined(MS_WINDOWS) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) || defined(__VXWORKS__) + if (buf.tm_year + 1900 < 1 || 9999 < buf.tm_year + 1900) { + PyErr_SetString(PyExc_ValueError, + "strftime() requires year in [1; 9999]"); +diff --git a/Objects/fileobject.c b/Objects/fileobject.c +index 5a2816f552..4fdb3c62d8 100644 +--- a/Objects/fileobject.c ++++ b/Objects/fileobject.c +@@ -2,6 +2,7 @@ + + #define PY_SSIZE_T_CLEAN + #include "Python.h" ++#include "iscygpty.h" + #include "pycore_runtime.h" // _PyRuntime + + #if defined(HAVE_GETC_UNLOCKED) && !defined(_Py_MEMORY_SANITIZER) +@@ -423,7 +424,7 @@ stdprinter_isatty(PyStdPrinter_Object *self, PyObject *Py_UNUSED(ignored)) + } + + Py_BEGIN_ALLOW_THREADS +- res = isatty(self->fd); ++ res = isatty(self->fd) || is_cygpty(self->fd); + Py_END_ALLOW_THREADS + + return PyBool_FromLong(res); +diff --git a/PC/_testconsole.c b/PC/_testconsole.c +index db84f73c77..eecf2f952f 100644 +--- a/PC/_testconsole.c ++++ b/PC/_testconsole.c +@@ -6,7 +6,7 @@ + + #ifdef MS_WINDOWS + +-#include "..\modules\_io\_iomodule.h" ++#include "../Modules/_io/_iomodule.h" + + #define WIN32_LEAN_AND_MEAN + #include +@@ -104,7 +104,7 @@ _testconsole_read_output_impl(PyObject *module, PyObject *file) + Py_RETURN_NONE; + } + +-#include "clinic\_testconsole.c.h" ++#include "clinic/_testconsole.c.h" + + PyMethodDef testconsole_methods[] = { + _TESTCONSOLE_WRITE_INPUT_METHODDEF +diff --git a/PC/getpathp.c b/PC/getpathp.c +index 7c0eeab5db..2d03b74e89 100644 +--- a/PC/getpathp.c ++++ b/PC/getpathp.c +@@ -90,7 +90,7 @@ + #endif + + #include +-#include ++#include + + #ifdef HAVE_SYS_TYPES_H + #include +@@ -249,14 +249,43 @@ ismodule(wchar_t *filename, int update_filename) + stuff as fits will be appended. + */ + ++static int _PathCchCombineEx_Initialized = 0; ++typedef HRESULT(__stdcall *PPathCchCombineEx) (PWSTR pszPathOut, size_t cchPathOut, ++ PCWSTR pszPathIn, PCWSTR pszMore, ++ unsigned long dwFlags); ++static PPathCchCombineEx _PathCchCombineEx; ++ + static void + join(wchar_t *buffer, const wchar_t *stuff) + { +- if (FAILED(PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) { +- Py_FatalError("buffer overflow in getpathp.c's join()"); ++ if (_PathCchCombineEx_Initialized == 0) { ++ HMODULE pathapi = LoadLibraryExW(L"api-ms-win-core-path-l1-1-0.dll", NULL, ++ LOAD_LIBRARY_SEARCH_SYSTEM32); ++ if (pathapi) { ++ _PathCchCombineEx = (PPathCchCombineEx)GetProcAddress(pathapi, "PathCchCombineEx"); ++ } ++ else { ++ _PathCchCombineEx = NULL; ++ } ++ _PathCchCombineEx_Initialized = 1; ++ } ++ ++ if (_PathCchCombineEx) { ++ if (FAILED(_PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) { ++ Py_FatalError("buffer overflow in getpathp.c's join()"); ++ } ++ } else { ++ if (!PathCombineW(buffer, buffer, stuff)) { ++ Py_FatalError("buffer overflow in getpathp.c's join()"); ++ } + } + } + ++static int _PathCchCanonicalizeEx_Initialized = 0; ++typedef HRESULT(__stdcall *PPathCchCanonicalizeEx) (PWSTR pszPathOut, size_t cchPathOut, ++ PCWSTR pszPathIn, unsigned long dwFlags); ++static PPathCchCanonicalizeEx _PathCchCanonicalizeEx; ++ + /* Call PathCchCanonicalizeEx(path): remove navigation elements such as "." + and ".." to produce a direct, well-formed path. */ + static PyStatus +@@ -266,8 +295,27 @@ canonicalize(wchar_t *buffer, const wchar_t *path) + return _PyStatus_NO_MEMORY(); + } + +- if (FAILED(PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) { +- return INIT_ERR_BUFFER_OVERFLOW(); ++ if (_PathCchCanonicalizeEx_Initialized == 0) { ++ HMODULE pathapi = LoadLibraryExW(L"api-ms-win-core-path-l1-1-0.dll", NULL, ++ LOAD_LIBRARY_SEARCH_SYSTEM32); ++ if (pathapi) { ++ _PathCchCanonicalizeEx = (PPathCchCanonicalizeEx)GetProcAddress(pathapi, "PathCchCanonicalizeEx"); ++ } ++ else { ++ _PathCchCanonicalizeEx = NULL; ++ } ++ _PathCchCanonicalizeEx_Initialized = 1; ++ } ++ ++ if (_PathCchCanonicalizeEx) { ++ if (FAILED(_PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) { ++ return INIT_ERR_BUFFER_OVERFLOW(); ++ } ++ } ++ else { ++ if (!PathCanonicalizeW(buffer, path)) { ++ return INIT_ERR_BUFFER_OVERFLOW(); ++ } + } + return _PyStatus_OK(); + } +diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c +index 0591497871..74a4131073 100644 +--- a/PC/msvcrtmodule.c ++++ b/PC/msvcrtmodule.c +@@ -21,7 +21,9 @@ + #include + #include + #include ++#ifdef _DEBUG + #include ++#endif + #include + + #ifdef _MSC_VER +diff --git a/PC/python_exe.rc b/PC/python_exe.rc +index c3d3bff019..dde0e53842 100644 +--- a/PC/python_exe.rc ++++ b/PC/python_exe.rc +@@ -12,7 +12,7 @@ + // current versions of Windows. + 1 RT_MANIFEST "python.manifest" + +-1 ICON DISCARDABLE "icons\python.ico" ++1 ICON DISCARDABLE "icons/python.ico" + + + ///////////////////////////////////////////////////////////////////////////// +diff --git a/PC/pythonw_exe.rc b/PC/pythonw_exe.rc +index 38570b74fa..7ce1043298 100644 +--- a/PC/pythonw_exe.rc ++++ b/PC/pythonw_exe.rc +@@ -12,7 +12,7 @@ + // current versions of Windows. + 1 RT_MANIFEST "python.manifest" + +-1 ICON DISCARDABLE "icons\pythonw.ico" ++1 ICON DISCARDABLE "icons/pythonw.ico" + + + ///////////////////////////////////////////////////////////////////////////// +diff --git a/PC/winreg.c b/PC/winreg.c +index 004a89a535..b1cb07ecd0 100644 +--- a/PC/winreg.c ++++ b/PC/winreg.c +@@ -18,6 +18,25 @@ + #include "structmember.h" // PyMemberDef + #include + ++#ifndef SIZEOF_HKEY ++/* used only here */ ++#if defined(MS_WIN64) ++# define SIZEOF_HKEY 8 ++#elif defined(MS_WIN32) ++# define SIZEOF_HKEY 4 ++#else ++# error "SIZEOF_HKEY is not defined" ++#endif ++#endif ++ ++#ifndef REG_LEGAL_CHANGE_FILTER ++#define REG_LEGAL_CHANGE_FILTER (\ ++ REG_NOTIFY_CHANGE_NAME |\ ++ REG_NOTIFY_CHANGE_ATTRIBUTES |\ ++ REG_NOTIFY_CHANGE_LAST_SET |\ ++ REG_NOTIFY_CHANGE_SECURITY ) ++#endif ++ + static BOOL PyHKEY_AsHKEY(PyObject *ob, HKEY *pRes, BOOL bNoneOK); + static BOOL clinic_HKEY_converter(PyObject *ob, void *p); + static PyObject *PyHKEY_FromHKEY(HKEY h); +@@ -794,6 +813,7 @@ Reg2Py(BYTE *retDataBuf, DWORD retDataSize, DWORD typ) + case REG_BINARY: + /* ALSO handle ALL unknown data types here. Even if we can't + support it natively, we should handle the bits. */ ++ /* fallthrough */ + default: + if (retDataSize == 0) { + Py_INCREF(Py_None); +diff --git a/Programs/_freeze_importlib.c b/Programs/_freeze_importlib.c +index 2e4ccbb154..a8d5c313da 100644 +--- a/Programs/_freeze_importlib.c ++++ b/Programs/_freeze_importlib.c +@@ -20,7 +20,7 @@ static const struct _frozen _PyImport_FrozenModules[] = { + {0, 0, 0} /* sentinel */ + }; + +-#ifndef MS_WINDOWS ++#ifndef _MSC_VER + /* On Windows, this links with the regular pythonXY.dll, so this variable comes + from frozen.obj. In the Makefile, frozen.o is not linked into this executable, + so we define the variable here. */ +diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c +index b0162e5e87..af694f3abc 100644 +--- a/Python/bltinmodule.c ++++ b/Python/bltinmodule.c +@@ -1,6 +1,7 @@ + /* Built-in functions */ + + #include "Python.h" ++#include "iscygpty.h" + #include + #include "pycore_ast.h" // _PyAST_Validate() + #include "pycore_compile.h" // _PyAST_Compile() +@@ -2098,7 +2099,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) + Py_DECREF(tmp); + if (fd < 0 && PyErr_Occurred()) + return NULL; +- tty = fd == fileno(stdin) && isatty(fd); ++ tty = fd == fileno(stdin) && (isatty(fd) || is_cygpty(fd)); + } + if (tty) { + tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno); +@@ -2111,7 +2112,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) + Py_DECREF(tmp); + if (fd < 0 && PyErr_Occurred()) + return NULL; +- tty = fd == fileno(stdout) && isatty(fd); ++ tty = fd == fileno(stdout) && (isatty(fd) || is_cygpty(fd)); + } + } + +diff --git a/Python/dynamic_annotations.c b/Python/dynamic_annotations.c +index 7febaa09df..70d5b3dc72 100644 +--- a/Python/dynamic_annotations.c ++++ b/Python/dynamic_annotations.c +@@ -27,7 +27,7 @@ + * Author: Kostya Serebryany + */ + +-#ifdef _MSC_VER ++#ifdef MS_WINDOWS + # include + #endif + +diff --git a/Python/dynload_win.c b/Python/dynload_win.c +index 5702ab2cd7..c46061c54d 100644 +--- a/Python/dynload_win.c ++++ b/Python/dynload_win.c +@@ -167,7 +167,9 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix, + dl_funcptr p; + char funcname[258], *import_python; + ++#if defined(_MSC_VER) + _Py_CheckPython3(); ++#endif + + #if USE_UNICODE_WCHAR_CACHE + const wchar_t *wpathname = _PyUnicode_AsUnicode(pathname); +@@ -192,8 +194,7 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix, + ensure DLLs adjacent to the PYD are preferred. */ + Py_BEGIN_ALLOW_THREADS + hDLL = LoadLibraryExW(wpathname, NULL, +- LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | +- LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); ++ LOAD_WITH_ALTERED_SEARCH_PATH); + Py_END_ALLOW_THREADS + #if !USE_UNICODE_WCHAR_CACHE + PyMem_Free(wpathname); +diff --git a/Python/fileutils.c b/Python/fileutils.c +index c3144ee407..437e6edd1d 100644 +--- a/Python/fileutils.c ++++ b/Python/fileutils.c +@@ -1,4 +1,5 @@ + #include "Python.h" ++#include "iscygpty.h" + #include "pycore_fileutils.h" // fileutils definitions + #include "pycore_runtime.h" // _PyRuntime + #include "osdefs.h" // SEP +@@ -69,7 +70,7 @@ _Py_device_encoding(int fd) + int valid; + Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH +- valid = isatty(fd); ++ valid = isatty(fd) || is_cygpty(fd); + _Py_END_SUPPRESS_IPH + Py_END_ALLOW_THREADS + if (!valid) +@@ -1976,13 +1977,31 @@ _Py_wrealpath(const wchar_t *path, + #endif + + +-#ifndef MS_WINDOWS + int + _Py_isabs(const wchar_t *path) + { +- return (path[0] == SEP); ++#ifdef MS_WINDOWS ++ size_t i = wcslen(path); ++ if (i >= 3) { ++ if (iswalpha(path[0]) && path[1] == L':' && _Py_issep(path[2])) { ++ return 1; ++ } ++ } ++ return 0; ++#else ++ return _Py_issep(path[0]); ++#endif + } ++ ++int ++_Py_issep(const wchar_t ch) ++{ ++#ifdef MS_WINDOWS ++ return ch == SEP || ch == ALTSEP; ++#else ++ return ch == SEP; + #endif ++} + + + /* Get an absolute path. +diff --git a/Python/frozenmain.c b/Python/frozenmain.c +index dd04d609d2..660776281c 100644 +--- a/Python/frozenmain.c ++++ b/Python/frozenmain.c +@@ -4,6 +4,7 @@ + #include "Python.h" + #include "pycore_runtime.h" // _PyRuntime_Initialize() + #include ++#include "iscygpty.h" + + #ifdef MS_WINDOWS + extern void PyWinFreeze_ExeInit(void); +@@ -107,7 +108,7 @@ Py_FrozenMain(int argc, char **argv) + else + sts = 0; + +- if (inspect && isatty((int)fileno(stdin))) ++ if (inspect && (isatty((int)fileno(stdin)) || is_cygpty((int)fileno(stdin)))) + sts = PyRun_AnyFile(stdin, "") != 0; + + #ifdef MS_WINDOWS +diff --git a/Python/getcompiler.c b/Python/getcompiler.c +index a5d26239e8..4b0b9b328b 100644 +--- a/Python/getcompiler.c ++++ b/Python/getcompiler.c +@@ -7,10 +7,40 @@ + + // Note the __clang__ conditional has to come before the __GNUC__ one because + // clang pretends to be GCC. +-#if defined(__clang__) ++#if defined(__clang__) && !defined(_WIN32) + #define COMPILER "[Clang " __clang_version__ "]" + #elif defined(__GNUC__) +-#define COMPILER "[GCC " __VERSION__ "]" ++/* To not break compatibility with things that determine ++ CPU arch by calling get_build_version in msvccompiler.py ++ (such as NumPy) add "32 bit" or "64 bit (AMD64)" on Windows ++ and also use a space as a separator rather than a newline. */ ++#if defined(_WIN32) ++#define COMP_SEP " " ++#if defined(__x86_64__) ++#define ARCH_SUFFIX " 64 bit (AMD64)" ++#elif defined(__aarch64__) ++#define ARCH_SUFFIX " 64 bit (ARM64)" ++#elif defined(__arm__) ++#define ARCH_SUFFIX " 32 bit (ARM)" ++#else ++#define ARCH_SUFFIX " 32 bit" ++#endif ++#else ++#define COMP_SEP "\n" ++#define ARCH_SUFFIX "" ++#endif ++#if defined(__clang__) ++#define str(x) #x ++#define xstr(x) str(x) ++#define COMPILER COMP_SEP "[GCC Clang " xstr(__clang_major__) "." \ ++ xstr(__clang_minor__) "." xstr(__clang_patchlevel__) ARCH_SUFFIX "]" ++#else ++#if defined(_UCRT) ++#define COMPILER COMP_SEP "[GCC UCRT " __VERSION__ ARCH_SUFFIX "]" ++#else ++#define COMPILER COMP_SEP "[GCC " __VERSION__ ARCH_SUFFIX "]" ++#endif ++#endif + // Generic fallbacks. + #elif defined(__cplusplus) + #define COMPILER "[C++]" +diff --git a/Python/importlib_external.h b/Python/importlib_external.h +index bd4d95a61e..73ace0031c 100644 +--- a/Python/importlib_external.h ++++ b/Python/importlib_external.h +@@ -1,816 +1,751 @@ + /* Auto-generated by Programs/_freeze_importlib.c */ + const unsigned char _Py_M__importlib_bootstrap_external[] = { + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,5,0,0,0,64,0,0,0,115,250,2,0,0,100,0, ++ 0,5,0,0,0,64,0,0,0,115,18,3,0,0,100,0, + 90,0,100,1,97,1,100,2,100,1,108,2,90,2,100,2, + 100,1,108,3,90,3,100,2,100,1,108,4,90,4,100,2, + 100,1,108,5,90,5,100,2,100,1,108,6,90,6,101,4, + 106,7,100,3,107,2,90,8,101,8,114,40,100,2,100,1, + 108,9,90,10,100,2,100,1,108,11,90,11,110,4,100,2, + 100,1,108,12,90,10,101,8,114,51,100,4,100,5,103,2, +- 90,13,110,3,100,5,103,1,90,13,101,14,100,6,100,7, +- 132,0,101,13,68,0,131,1,131,1,115,65,74,0,130,1, +- 101,13,100,2,25,0,90,15,101,16,101,13,131,1,90,17, +- 100,8,160,18,101,13,161,1,90,13,100,9,100,10,132,0, +- 101,13,68,0,131,1,90,19,100,11,90,20,100,12,90,21, +- 101,21,101,20,23,0,90,22,100,13,100,14,132,0,90,23, +- 101,23,131,0,90,24,100,15,100,16,132,0,90,25,100,17, +- 100,18,132,0,90,26,100,19,100,20,132,0,90,27,101,8, +- 114,119,100,21,100,22,132,0,90,28,110,4,100,23,100,22, +- 132,0,90,28,100,24,100,25,132,0,90,29,100,26,100,27, ++ 90,13,110,3,100,5,103,1,90,13,100,6,101,10,106,14, ++ 118,0,114,66,101,13,100,1,100,1,100,7,133,3,25,0, ++ 90,13,101,15,100,8,100,9,132,0,101,13,68,0,131,1, ++ 131,1,115,77,74,0,130,1,101,13,100,2,25,0,90,16, ++ 101,17,101,13,131,1,90,18,100,10,160,19,101,13,161,1, ++ 90,13,100,11,100,12,132,0,101,13,68,0,131,1,90,20, ++ 100,13,90,21,100,14,90,22,101,22,101,21,23,0,90,23, ++ 100,15,100,16,132,0,90,24,101,24,131,0,90,25,100,17, ++ 100,18,132,0,90,26,100,19,100,20,132,0,90,27,100,21, ++ 100,22,132,0,90,28,101,8,114,131,100,23,100,24,132,0, ++ 90,29,110,4,100,25,100,24,132,0,90,29,100,26,100,27, + 132,0,90,30,100,28,100,29,132,0,90,31,100,30,100,31, +- 132,0,90,32,100,32,100,33,132,0,90,33,101,8,114,150, +- 100,34,100,35,132,0,90,34,110,4,100,36,100,35,132,0, +- 90,34,100,112,100,38,100,39,132,1,90,35,101,36,101,35, +- 106,37,131,1,90,38,100,40,160,39,100,41,100,42,161,2, +- 100,43,23,0,90,40,101,41,160,42,101,40,100,42,161,2, +- 90,43,100,44,90,44,100,45,90,45,100,46,103,1,90,46, +- 101,8,114,192,101,46,160,47,100,47,161,1,1,0,101,2, +- 160,48,161,0,90,49,100,48,103,1,90,50,101,50,4,0, +- 90,51,90,52,100,113,100,1,100,49,156,1,100,50,100,51, +- 132,3,90,53,100,52,100,53,132,0,90,54,100,54,100,55, ++ 132,0,90,32,100,32,100,33,132,0,90,33,100,34,100,35, ++ 132,0,90,34,101,8,114,162,100,36,100,37,132,0,90,35, ++ 110,4,100,38,100,37,132,0,90,35,100,114,100,40,100,41, ++ 132,1,90,36,101,37,101,36,106,38,131,1,90,39,100,42, ++ 160,40,100,43,100,44,161,2,100,45,23,0,90,41,101,42, ++ 160,43,101,41,100,44,161,2,90,44,100,46,90,45,100,47, ++ 90,46,100,48,103,1,90,47,101,8,114,204,101,47,160,48, ++ 100,49,161,1,1,0,101,2,160,49,161,0,90,50,100,50, ++ 103,1,90,51,101,51,4,0,90,52,90,53,100,115,100,1, ++ 100,51,156,1,100,52,100,53,132,3,90,54,100,54,100,55, + 132,0,90,55,100,56,100,57,132,0,90,56,100,58,100,59, + 132,0,90,57,100,60,100,61,132,0,90,58,100,62,100,63, + 132,0,90,59,100,64,100,65,132,0,90,60,100,66,100,67, +- 132,0,90,61,100,68,100,69,132,0,90,62,100,114,100,70, +- 100,71,132,1,90,63,100,115,100,72,100,73,132,1,90,64, +- 100,116,100,75,100,76,132,1,90,65,100,77,100,78,132,0, +- 90,66,101,67,131,0,90,68,100,113,100,1,101,68,100,79, +- 156,2,100,80,100,81,132,3,90,69,71,0,100,82,100,83, +- 132,0,100,83,131,2,90,70,71,0,100,84,100,85,132,0, +- 100,85,131,2,90,71,71,0,100,86,100,87,132,0,100,87, +- 101,71,131,3,90,72,71,0,100,88,100,89,132,0,100,89, +- 131,2,90,73,71,0,100,90,100,91,132,0,100,91,101,73, +- 101,72,131,4,90,74,71,0,100,92,100,93,132,0,100,93, +- 101,73,101,71,131,4,90,75,71,0,100,94,100,95,132,0, +- 100,95,101,73,101,71,131,4,90,76,71,0,100,96,100,97, +- 132,0,100,97,131,2,90,77,71,0,100,98,100,99,132,0, +- 100,99,131,2,90,78,71,0,100,100,100,101,132,0,100,101, +- 131,2,90,79,71,0,100,102,100,103,132,0,100,103,131,2, +- 90,80,100,113,100,104,100,105,132,1,90,81,100,106,100,107, +- 132,0,90,82,100,108,100,109,132,0,90,83,100,110,100,111, +- 132,0,90,84,100,1,83,0,41,117,97,94,1,0,0,67, +- 111,114,101,32,105,109,112,108,101,109,101,110,116,97,116,105, +- 111,110,32,111,102,32,112,97,116,104,45,98,97,115,101,100, +- 32,105,109,112,111,114,116,46,10,10,84,104,105,115,32,109, +- 111,100,117,108,101,32,105,115,32,78,79,84,32,109,101,97, +- 110,116,32,116,111,32,98,101,32,100,105,114,101,99,116,108, +- 121,32,105,109,112,111,114,116,101,100,33,32,73,116,32,104, +- 97,115,32,98,101,101,110,32,100,101,115,105,103,110,101,100, +- 32,115,117,99,104,10,116,104,97,116,32,105,116,32,99,97, +- 110,32,98,101,32,98,111,111,116,115,116,114,97,112,112,101, +- 100,32,105,110,116,111,32,80,121,116,104,111,110,32,97,115, +- 32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116, +- 105,111,110,32,111,102,32,105,109,112,111,114,116,46,32,65, +- 115,10,115,117,99,104,32,105,116,32,114,101,113,117,105,114, +- 101,115,32,116,104,101,32,105,110,106,101,99,116,105,111,110, +- 32,111,102,32,115,112,101,99,105,102,105,99,32,109,111,100, +- 117,108,101,115,32,97,110,100,32,97,116,116,114,105,98,117, +- 116,101,115,32,105,110,32,111,114,100,101,114,32,116,111,10, +- 119,111,114,107,46,32,79,110,101,32,115,104,111,117,108,100, +- 32,117,115,101,32,105,109,112,111,114,116,108,105,98,32,97, +- 115,32,116,104,101,32,112,117,98,108,105,99,45,102,97,99, +- 105,110,103,32,118,101,114,115,105,111,110,32,111,102,32,116, +- 104,105,115,32,109,111,100,117,108,101,46,10,10,78,233,0, +- 0,0,0,90,5,119,105,110,51,50,250,1,92,250,1,47, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,3,0,0,0,99,0,0,0,115,28,0,0,0,129,0, +- 124,0,93,9,125,1,116,0,124,1,131,1,100,0,107,2, +- 86,0,1,0,113,2,100,1,83,0,41,2,233,1,0,0, +- 0,78,41,1,218,3,108,101,110,41,2,218,2,46,48,218, +- 3,115,101,112,169,0,114,7,0,0,0,250,38,60,102,114, +- 111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95, +- 98,111,111,116,115,116,114,97,112,95,101,120,116,101,114,110, +- 97,108,62,218,9,60,103,101,110,101,120,112,114,62,46,0, +- 0,0,115,4,0,0,0,2,128,26,0,114,9,0,0,0, +- 218,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, +- 0,0,0,4,0,0,0,67,0,0,0,115,22,0,0,0, +- 104,0,124,0,93,7,125,1,100,0,124,1,155,0,157,2, +- 146,2,113,2,83,0,41,1,250,1,58,114,7,0,0,0, +- 41,2,114,5,0,0,0,218,1,115,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,9,60,115,101,116,99, +- 111,109,112,62,50,0,0,0,115,2,0,0,0,22,0,114, +- 13,0,0,0,41,1,218,3,119,105,110,41,2,90,6,99, +- 121,103,119,105,110,90,6,100,97,114,119,105,110,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, +- 0,0,3,0,0,0,115,62,0,0,0,116,0,106,1,160, +- 2,116,3,161,1,114,25,116,0,106,1,160,2,116,4,161, +- 1,114,15,100,1,137,0,110,2,100,2,137,0,135,0,102, +- 1,100,3,100,4,132,8,125,0,124,0,83,0,100,5,100, +- 4,132,0,125,0,124,0,83,0,41,6,78,90,12,80,89, +- 84,72,79,78,67,65,83,69,79,75,115,12,0,0,0,80, +- 89,84,72,79,78,67,65,83,69,79,75,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 19,0,0,0,115,20,0,0,0,116,0,106,1,106,2,12, +- 0,111,9,136,0,116,3,106,4,118,0,83,0,41,1,122, +- 94,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, +- 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, +- 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, +- 105,118,101,108,121,32,97,110,100,32,105,103,110,111,114,101, +- 32,101,110,118,105,114,111,110,109,101,110,116,32,102,108,97, +- 103,115,32,97,114,101,32,110,111,116,32,115,101,116,46,41, +- 5,218,3,115,121,115,218,5,102,108,97,103,115,218,18,105, +- 103,110,111,114,101,95,101,110,118,105,114,111,110,109,101,110, +- 116,218,3,95,111,115,90,7,101,110,118,105,114,111,110,114, +- 7,0,0,0,169,1,218,3,107,101,121,114,7,0,0,0, +- 114,8,0,0,0,218,11,95,114,101,108,97,120,95,99,97, +- 115,101,67,0,0,0,243,2,0,0,0,20,2,122,37,95, +- 109,97,107,101,95,114,101,108,97,120,95,99,97,115,101,46, +- 60,108,111,99,97,108,115,62,46,95,114,101,108,97,120,95, +- 99,97,115,101,99,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,1,0,0,0,83,0,0,0,243,4,0, +- 0,0,100,1,83,0,41,2,122,53,84,114,117,101,32,105, +- 102,32,102,105,108,101,110,97,109,101,115,32,109,117,115,116, +- 32,98,101,32,99,104,101,99,107,101,100,32,99,97,115,101, +- 45,105,110,115,101,110,115,105,116,105,118,101,108,121,46,70, +- 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,21,0,0,0,71,0, +- 0,0,243,2,0,0,0,4,2,41,5,114,15,0,0,0, +- 218,8,112,108,97,116,102,111,114,109,218,10,115,116,97,114, +- 116,115,119,105,116,104,218,27,95,67,65,83,69,95,73,78, +- 83,69,78,83,73,84,73,86,69,95,80,76,65,84,70,79, +- 82,77,83,218,35,95,67,65,83,69,95,73,78,83,69,78, +- 83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,83, +- 95,83,84,82,95,75,69,89,41,1,114,21,0,0,0,114, +- 7,0,0,0,114,19,0,0,0,114,8,0,0,0,218,16, +- 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, +- 60,0,0,0,115,16,0,0,0,12,1,12,1,6,1,4, +- 2,12,2,4,7,8,253,4,3,114,29,0,0,0,99,1, +- 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, +- 0,0,0,67,0,0,0,115,20,0,0,0,116,0,124,0, +- 131,1,100,1,64,0,160,1,100,2,100,3,161,2,83,0, +- 41,4,122,42,67,111,110,118,101,114,116,32,97,32,51,50, +- 45,98,105,116,32,105,110,116,101,103,101,114,32,116,111,32, +- 108,105,116,116,108,101,45,101,110,100,105,97,110,46,236,3, +- 0,0,0,255,127,255,127,3,0,233,4,0,0,0,218,6, +- 108,105,116,116,108,101,41,2,218,3,105,110,116,218,8,116, +- 111,95,98,121,116,101,115,41,1,218,1,120,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,12,95,112,97, +- 99,107,95,117,105,110,116,51,50,79,0,0,0,114,22,0, +- 0,0,114,36,0,0,0,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0, +- 243,28,0,0,0,116,0,124,0,131,1,100,1,107,2,115, +- 8,74,0,130,1,116,1,160,2,124,0,100,2,161,2,83, +- 0,41,3,122,47,67,111,110,118,101,114,116,32,52,32,98, +- 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, +- 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, +- 103,101,114,46,114,31,0,0,0,114,32,0,0,0,169,3, +- 114,4,0,0,0,114,33,0,0,0,218,10,102,114,111,109, +- 95,98,121,116,101,115,169,1,218,4,100,97,116,97,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,218,14,95, +- 117,110,112,97,99,107,95,117,105,110,116,51,50,84,0,0, +- 0,243,4,0,0,0,16,2,12,1,114,42,0,0,0,99, +- 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +- 4,0,0,0,67,0,0,0,114,37,0,0,0,41,3,122, +- 47,67,111,110,118,101,114,116,32,50,32,98,121,116,101,115, +- 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97, +- 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46, +- 233,2,0,0,0,114,32,0,0,0,114,38,0,0,0,114, +- 40,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, ++ 132,0,90,61,100,68,100,69,132,0,90,62,100,70,100,71, ++ 132,0,90,63,100,116,100,72,100,73,132,1,90,64,100,117, ++ 100,74,100,75,132,1,90,65,100,118,100,77,100,78,132,1, ++ 90,66,100,79,100,80,132,0,90,67,101,68,131,0,90,69, ++ 100,115,100,1,101,69,100,81,156,2,100,82,100,83,132,3, ++ 90,70,71,0,100,84,100,85,132,0,100,85,131,2,90,71, ++ 71,0,100,86,100,87,132,0,100,87,131,2,90,72,71,0, ++ 100,88,100,89,132,0,100,89,101,72,131,3,90,73,71,0, ++ 100,90,100,91,132,0,100,91,131,2,90,74,71,0,100,92, ++ 100,93,132,0,100,93,101,74,101,73,131,4,90,75,71,0, ++ 100,94,100,95,132,0,100,95,101,74,101,72,131,4,90,76, ++ 71,0,100,96,100,97,132,0,100,97,101,74,101,72,131,4, ++ 90,77,71,0,100,98,100,99,132,0,100,99,131,2,90,78, ++ 71,0,100,100,100,101,132,0,100,101,131,2,90,79,71,0, ++ 100,102,100,103,132,0,100,103,131,2,90,80,71,0,100,104, ++ 100,105,132,0,100,105,131,2,90,81,100,115,100,106,100,107, ++ 132,1,90,82,100,108,100,109,132,0,90,83,100,110,100,111, ++ 132,0,90,84,100,112,100,113,132,0,90,85,100,1,83,0, ++ 41,119,97,94,1,0,0,67,111,114,101,32,105,109,112,108, ++ 101,109,101,110,116,97,116,105,111,110,32,111,102,32,112,97, ++ 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,46, ++ 10,10,84,104,105,115,32,109,111,100,117,108,101,32,105,115, ++ 32,78,79,84,32,109,101,97,110,116,32,116,111,32,98,101, ++ 32,100,105,114,101,99,116,108,121,32,105,109,112,111,114,116, ++ 101,100,33,32,73,116,32,104,97,115,32,98,101,101,110,32, ++ 100,101,115,105,103,110,101,100,32,115,117,99,104,10,116,104, ++ 97,116,32,105,116,32,99,97,110,32,98,101,32,98,111,111, ++ 116,115,116,114,97,112,112,101,100,32,105,110,116,111,32,80, ++ 121,116,104,111,110,32,97,115,32,116,104,101,32,105,109,112, ++ 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,105, ++ 109,112,111,114,116,46,32,65,115,10,115,117,99,104,32,105, ++ 116,32,114,101,113,117,105,114,101,115,32,116,104,101,32,105, ++ 110,106,101,99,116,105,111,110,32,111,102,32,115,112,101,99, ++ 105,102,105,99,32,109,111,100,117,108,101,115,32,97,110,100, ++ 32,97,116,116,114,105,98,117,116,101,115,32,105,110,32,111, ++ 114,100,101,114,32,116,111,10,119,111,114,107,46,32,79,110, ++ 101,32,115,104,111,117,108,100,32,117,115,101,32,105,109,112, ++ 111,114,116,108,105,98,32,97,115,32,116,104,101,32,112,117, ++ 98,108,105,99,45,102,97,99,105,110,103,32,118,101,114,115, ++ 105,111,110,32,111,102,32,116,104,105,115,32,109,111,100,117, ++ 108,101,46,10,10,78,233,0,0,0,0,90,5,119,105,110, ++ 51,50,250,1,92,250,1,47,90,7,77,83,89,83,84,69, ++ 77,233,255,255,255,255,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,2,0,0,0,3,0,0,0,99,0,0,0,115, ++ 28,0,0,0,129,0,124,0,93,9,125,1,116,0,124,1, ++ 131,1,100,0,107,2,86,0,1,0,113,2,100,1,83,0, ++ 41,2,233,1,0,0,0,78,41,1,218,3,108,101,110,41, ++ 2,218,2,46,48,218,3,115,101,112,169,0,114,8,0,0, ++ 0,250,38,60,102,114,111,122,101,110,32,105,109,112,111,114, ++ 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,95, ++ 101,120,116,101,114,110,97,108,62,218,9,60,103,101,110,101, ++ 120,112,114,62,50,0,0,0,115,4,0,0,0,2,128,26, ++ 0,114,10,0,0,0,218,0,99,1,0,0,0,0,0,0, ++ 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, ++ 0,115,22,0,0,0,104,0,124,0,93,7,125,1,100,0, ++ 124,1,155,0,157,2,146,2,113,2,83,0,41,1,250,1, ++ 58,114,8,0,0,0,41,2,114,6,0,0,0,218,1,115, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 9,60,115,101,116,99,111,109,112,62,54,0,0,0,115,2, ++ 0,0,0,22,0,114,14,0,0,0,41,1,218,3,119,105, ++ 110,41,2,90,6,99,121,103,119,105,110,90,6,100,97,114, ++ 119,105,110,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 1,0,0,0,3,0,0,0,3,0,0,0,115,62,0,0, ++ 0,116,0,106,1,160,2,116,3,161,1,114,25,116,0,106, ++ 1,160,2,116,4,161,1,114,15,100,1,137,0,110,2,100, ++ 2,137,0,135,0,102,1,100,3,100,4,132,8,125,0,124, ++ 0,83,0,100,5,100,4,132,0,125,0,124,0,83,0,41, ++ 6,78,90,12,80,89,84,72,79,78,67,65,83,69,79,75, ++ 115,12,0,0,0,80,89,84,72,79,78,67,65,83,69,79, ++ 75,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,19,0,0,0,115,20,0,0,0,116, ++ 0,106,1,106,2,12,0,111,9,136,0,116,3,106,4,118, ++ 0,83,0,41,1,122,94,84,114,117,101,32,105,102,32,102, ++ 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, ++ 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, ++ 115,101,110,115,105,116,105,118,101,108,121,32,97,110,100,32, ++ 105,103,110,111,114,101,32,101,110,118,105,114,111,110,109,101, ++ 110,116,32,102,108,97,103,115,32,97,114,101,32,110,111,116, ++ 32,115,101,116,46,41,5,218,3,115,121,115,218,5,102,108, ++ 97,103,115,218,18,105,103,110,111,114,101,95,101,110,118,105, ++ 114,111,110,109,101,110,116,218,3,95,111,115,218,7,101,110, ++ 118,105,114,111,110,114,8,0,0,0,169,1,218,3,107,101, ++ 121,114,8,0,0,0,114,9,0,0,0,218,11,95,114,101, ++ 108,97,120,95,99,97,115,101,71,0,0,0,243,2,0,0, ++ 0,20,2,122,37,95,109,97,107,101,95,114,101,108,97,120, ++ 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, ++ 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,83, ++ 0,0,0,243,4,0,0,0,100,1,83,0,41,2,122,53, ++ 84,114,117,101,32,105,102,32,102,105,108,101,110,97,109,101, ++ 115,32,109,117,115,116,32,98,101,32,99,104,101,99,107,101, ++ 100,32,99,97,115,101,45,105,110,115,101,110,115,105,116,105, ++ 118,101,108,121,46,70,114,8,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 23,0,0,0,75,0,0,0,243,2,0,0,0,4,2,41, ++ 5,114,16,0,0,0,218,8,112,108,97,116,102,111,114,109, ++ 218,10,115,116,97,114,116,115,119,105,116,104,218,27,95,67, ++ 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, ++ 80,76,65,84,70,79,82,77,83,218,35,95,67,65,83,69, ++ 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, ++ 84,70,79,82,77,83,95,83,84,82,95,75,69,89,41,1, ++ 114,23,0,0,0,114,8,0,0,0,114,21,0,0,0,114, ++ 9,0,0,0,218,16,95,109,97,107,101,95,114,101,108,97, ++ 120,95,99,97,115,101,64,0,0,0,115,16,0,0,0,12, ++ 1,12,1,6,1,4,2,12,2,4,7,8,253,4,3,114, ++ 31,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, ++ 0,1,0,0,0,4,0,0,0,67,0,0,0,115,20,0, ++ 0,0,116,0,124,0,131,1,100,1,64,0,160,1,100,2, ++ 100,3,161,2,83,0,41,4,122,42,67,111,110,118,101,114, ++ 116,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103, ++ 101,114,32,116,111,32,108,105,116,116,108,101,45,101,110,100, ++ 105,97,110,46,236,3,0,0,0,255,127,255,127,3,0,233, ++ 4,0,0,0,218,6,108,105,116,116,108,101,41,2,218,3, ++ 105,110,116,218,8,116,111,95,98,121,116,101,115,41,1,218, ++ 1,120,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,12,95,112,97,99,107,95,117,105,110,116,51,50,83, ++ 0,0,0,114,24,0,0,0,114,38,0,0,0,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0, ++ 0,0,67,0,0,0,243,28,0,0,0,116,0,124,0,131, ++ 1,100,1,107,2,115,8,74,0,130,1,116,1,160,2,124, ++ 0,100,2,161,2,83,0,41,3,122,47,67,111,110,118,101, ++ 114,116,32,52,32,98,121,116,101,115,32,105,110,32,108,105, ++ 116,116,108,101,45,101,110,100,105,97,110,32,116,111,32,97, ++ 110,32,105,110,116,101,103,101,114,46,114,33,0,0,0,114, ++ 34,0,0,0,169,3,114,5,0,0,0,114,35,0,0,0, ++ 218,10,102,114,111,109,95,98,121,116,101,115,169,1,218,4, ++ 100,97,116,97,114,8,0,0,0,114,8,0,0,0,114,9, + 0,0,0,218,14,95,117,110,112,97,99,107,95,117,105,110, +- 116,49,54,89,0,0,0,114,43,0,0,0,114,45,0,0, +- 0,99,0,0,0,0,0,0,0,0,0,0,0,0,5,0, +- 0,0,4,0,0,0,71,0,0,0,115,228,0,0,0,124, +- 0,115,4,100,1,83,0,116,0,124,0,131,1,100,2,107, +- 2,114,14,124,0,100,3,25,0,83,0,100,1,125,1,103, +- 0,125,2,116,1,116,2,106,3,124,0,131,2,68,0,93, +- 61,92,2,125,3,125,4,124,3,160,4,116,5,161,1,115, +- 38,124,3,160,6,116,5,161,1,114,51,124,3,160,7,116, +- 8,161,1,112,44,124,1,125,1,116,9,124,4,23,0,103, +- 1,125,2,113,24,124,3,160,6,100,4,161,1,114,76,124, +- 1,160,10,161,0,124,3,160,10,161,0,107,3,114,70,124, +- 3,125,1,124,4,103,1,125,2,113,24,124,2,160,11,124, +- 4,161,1,1,0,113,24,124,3,112,79,124,1,125,1,124, +- 2,160,11,124,4,161,1,1,0,113,24,100,5,100,6,132, +- 0,124,2,68,0,131,1,125,2,116,0,124,2,131,1,100, +- 2,107,2,114,107,124,2,100,3,25,0,115,107,124,1,116, +- 9,23,0,83,0,124,1,116,9,160,12,124,2,161,1,23, +- 0,83,0,41,7,250,31,82,101,112,108,97,99,101,109,101, +- 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,106, +- 111,105,110,40,41,46,114,10,0,0,0,114,3,0,0,0, +- 114,0,0,0,0,114,11,0,0,0,99,1,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,5,0,0,0,83, +- 0,0,0,243,26,0,0,0,103,0,124,0,93,9,125,1, +- 124,1,114,2,124,1,160,0,116,1,161,1,145,2,113,2, +- 83,0,114,7,0,0,0,169,2,218,6,114,115,116,114,105, +- 112,218,15,112,97,116,104,95,115,101,112,97,114,97,116,111, +- 114,115,169,2,114,5,0,0,0,218,1,112,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,10,60,108,105, +- 115,116,99,111,109,112,62,119,0,0,0,115,2,0,0,0, +- 26,0,250,30,95,112,97,116,104,95,106,111,105,110,46,60, +- 108,111,99,97,108,115,62,46,60,108,105,115,116,99,111,109, +- 112,62,41,13,114,4,0,0,0,218,3,109,97,112,114,18, +- 0,0,0,218,15,95,112,97,116,104,95,115,112,108,105,116, +- 114,111,111,116,114,26,0,0,0,218,14,112,97,116,104,95, +- 115,101,112,95,116,117,112,108,101,218,8,101,110,100,115,119, +- 105,116,104,114,49,0,0,0,114,50,0,0,0,218,8,112, +- 97,116,104,95,115,101,112,218,8,99,97,115,101,102,111,108, +- 100,218,6,97,112,112,101,110,100,218,4,106,111,105,110,41, +- 5,218,10,112,97,116,104,95,112,97,114,116,115,218,4,114, +- 111,111,116,218,4,112,97,116,104,90,8,110,101,119,95,114, +- 111,111,116,218,4,116,97,105,108,114,7,0,0,0,114,7, +- 0,0,0,114,8,0,0,0,218,10,95,112,97,116,104,95, +- 106,111,105,110,96,0,0,0,115,42,0,0,0,4,2,4, +- 1,12,1,8,1,4,1,4,1,20,1,20,1,14,1,12, +- 1,10,1,16,1,4,3,8,1,12,2,8,2,12,1,14, +- 1,20,1,8,2,14,1,114,67,0,0,0,99,0,0,0, +- 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, +- 0,71,0,0,0,115,20,0,0,0,116,0,160,1,100,1, +- 100,2,132,0,124,0,68,0,131,1,161,1,83,0,41,3, +- 114,46,0,0,0,99,1,0,0,0,0,0,0,0,0,0, +- 0,0,2,0,0,0,5,0,0,0,83,0,0,0,114,47, +- 0,0,0,114,7,0,0,0,114,48,0,0,0,41,2,114, +- 5,0,0,0,218,4,112,97,114,116,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,53,0,0,0,128,0, +- 0,0,115,6,0,0,0,6,0,4,1,16,255,114,54,0, +- 0,0,41,2,114,59,0,0,0,114,62,0,0,0,41,1, +- 114,63,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,114,67,0,0,0,126,0,0,0,115,6,0, +- 0,0,10,2,2,1,8,255,99,1,0,0,0,0,0,0, +- 0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0, +- 0,115,66,0,0,0,116,0,135,0,102,1,100,1,100,2, +- 132,8,116,1,68,0,131,1,131,1,125,1,124,1,100,3, +- 107,0,114,19,100,4,136,0,102,2,83,0,136,0,100,5, +- 124,1,133,2,25,0,136,0,124,1,100,6,23,0,100,5, +- 133,2,25,0,102,2,83,0,41,7,122,32,82,101,112,108, +- 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, +- 97,116,104,46,115,112,108,105,116,40,41,46,99,1,0,0, +- 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, +- 0,51,0,0,0,115,26,0,0,0,129,0,124,0,93,8, +- 125,1,136,0,160,0,124,1,161,1,86,0,1,0,113,2, +- 100,0,83,0,169,1,78,41,1,218,5,114,102,105,110,100, +- 114,51,0,0,0,169,1,114,65,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,9,0,0,0,134,0,0,0,115, +- 4,0,0,0,2,128,24,0,122,30,95,112,97,116,104,95, +- 115,112,108,105,116,46,60,108,111,99,97,108,115,62,46,60, +- 103,101,110,101,120,112,114,62,114,0,0,0,0,114,10,0, +- 0,0,78,114,3,0,0,0,41,2,218,3,109,97,120,114, +- 50,0,0,0,41,2,114,65,0,0,0,218,1,105,114,7, +- 0,0,0,114,71,0,0,0,114,8,0,0,0,218,11,95, +- 112,97,116,104,95,115,112,108,105,116,132,0,0,0,115,8, +- 0,0,0,22,2,8,1,8,1,28,1,114,74,0,0,0, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +- 0,3,0,0,0,67,0,0,0,115,10,0,0,0,116,0, +- 160,1,124,0,161,1,83,0,41,1,122,126,83,116,97,116, +- 32,116,104,101,32,112,97,116,104,46,10,10,32,32,32,32, +- 77,97,100,101,32,97,32,115,101,112,97,114,97,116,101,32, +- 102,117,110,99,116,105,111,110,32,116,111,32,109,97,107,101, +- 32,105,116,32,101,97,115,105,101,114,32,116,111,32,111,118, +- 101,114,114,105,100,101,32,105,110,32,101,120,112,101,114,105, +- 109,101,110,116,115,10,32,32,32,32,40,101,46,103,46,32, +- 99,97,99,104,101,32,115,116,97,116,32,114,101,115,117,108, +- 116,115,41,46,10,10,32,32,32,32,41,2,114,18,0,0, +- 0,90,4,115,116,97,116,114,71,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,10,95,112,97, +- 116,104,95,115,116,97,116,140,0,0,0,115,2,0,0,0, +- 10,7,114,75,0,0,0,99,2,0,0,0,0,0,0,0, +- 0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,0, +- 115,48,0,0,0,122,6,116,0,124,0,131,1,125,2,87, +- 0,110,10,4,0,116,1,121,16,1,0,1,0,1,0,89, +- 0,100,1,83,0,119,0,124,2,106,2,100,2,64,0,124, +- 1,107,2,83,0,41,3,122,49,84,101,115,116,32,119,104, +- 101,116,104,101,114,32,116,104,101,32,112,97,116,104,32,105, +- 115,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, +- 109,111,100,101,32,116,121,112,101,46,70,105,0,240,0,0, +- 41,3,114,75,0,0,0,218,7,79,83,69,114,114,111,114, +- 218,7,115,116,95,109,111,100,101,41,3,114,65,0,0,0, +- 218,4,109,111,100,101,90,9,115,116,97,116,95,105,110,102, +- 111,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,18,95,112,97,116,104,95,105,115,95,109,111,100,101,95, +- 116,121,112,101,150,0,0,0,115,12,0,0,0,2,2,12, +- 1,12,1,6,1,2,255,14,2,114,79,0,0,0,99,1, +- 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, +- 0,0,0,67,0,0,0,115,10,0,0,0,116,0,124,0, +- 100,1,131,2,83,0,41,2,122,31,82,101,112,108,97,99, +- 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, +- 104,46,105,115,102,105,108,101,46,105,0,128,0,0,41,1, +- 114,79,0,0,0,114,71,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,12,95,112,97,116,104, +- 95,105,115,102,105,108,101,159,0,0,0,243,2,0,0,0, +- 10,2,114,80,0,0,0,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, +- 115,22,0,0,0,124,0,115,6,116,0,160,1,161,0,125, +- 0,116,2,124,0,100,1,131,2,83,0,41,2,122,30,82, +- 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, +- 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, +- 0,0,41,3,114,18,0,0,0,218,6,103,101,116,99,119, +- 100,114,79,0,0,0,114,71,0,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,218,11,95,112,97,116, +- 104,95,105,115,100,105,114,164,0,0,0,115,6,0,0,0, +- 4,2,8,1,10,1,114,83,0,0,0,99,1,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, +- 67,0,0,0,115,62,0,0,0,124,0,115,4,100,1,83, +- 0,116,0,160,1,124,0,161,1,100,2,25,0,160,2,100, +- 3,100,4,161,2,125,1,116,3,124,1,131,1,100,5,107, +- 4,111,30,124,1,160,4,100,6,161,1,112,30,124,1,160, +- 5,100,4,161,1,83,0,41,7,250,30,82,101,112,108,97, +- 99,101,109,101,110,116,32,102,111,114,32,111,115,46,112,97, +- 116,104,46,105,115,97,98,115,46,70,114,0,0,0,0,114, +- 2,0,0,0,114,1,0,0,0,114,3,0,0,0,122,2, +- 92,92,41,6,114,18,0,0,0,114,56,0,0,0,218,7, +- 114,101,112,108,97,99,101,114,4,0,0,0,114,26,0,0, +- 0,114,58,0,0,0,41,2,114,65,0,0,0,114,64,0, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,218,11,95,112,97,116,104,95,105,115,97,98,115,172,0, +- 0,0,115,8,0,0,0,4,2,4,1,22,1,32,1,114, +- 86,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, ++ 116,51,50,88,0,0,0,243,4,0,0,0,16,2,12,1, ++ 114,44,0,0,0,99,1,0,0,0,0,0,0,0,0,0, ++ 0,0,1,0,0,0,4,0,0,0,67,0,0,0,114,39, ++ 0,0,0,41,3,122,47,67,111,110,118,101,114,116,32,50, ++ 32,98,121,116,101,115,32,105,110,32,108,105,116,116,108,101, ++ 45,101,110,100,105,97,110,32,116,111,32,97,110,32,105,110, ++ 116,101,103,101,114,46,233,2,0,0,0,114,34,0,0,0, ++ 114,40,0,0,0,114,42,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,14,95,117,110,112,97, ++ 99,107,95,117,105,110,116,49,54,93,0,0,0,114,45,0, ++ 0,0,114,47,0,0,0,99,0,0,0,0,0,0,0,0, ++ 0,0,0,0,5,0,0,0,4,0,0,0,71,0,0,0, ++ 115,228,0,0,0,124,0,115,4,100,1,83,0,116,0,124, ++ 0,131,1,100,2,107,2,114,14,124,0,100,3,25,0,83, ++ 0,100,1,125,1,103,0,125,2,116,1,116,2,106,3,124, ++ 0,131,2,68,0,93,61,92,2,125,3,125,4,124,3,160, ++ 4,116,5,161,1,115,38,124,3,160,6,116,5,161,1,114, ++ 51,124,3,160,7,116,8,161,1,112,44,124,1,125,1,116, ++ 9,124,4,23,0,103,1,125,2,113,24,124,3,160,6,100, ++ 4,161,1,114,76,124,1,160,10,161,0,124,3,160,10,161, ++ 0,107,3,114,70,124,3,125,1,124,4,103,1,125,2,113, ++ 24,124,2,160,11,124,4,161,1,1,0,113,24,124,3,112, ++ 79,124,1,125,1,124,2,160,11,124,4,161,1,1,0,113, ++ 24,100,5,100,6,132,0,124,2,68,0,131,1,125,2,116, ++ 0,124,2,131,1,100,2,107,2,114,107,124,2,100,3,25, ++ 0,115,107,124,1,116,9,23,0,83,0,124,1,116,9,160, ++ 12,124,2,161,1,23,0,83,0,41,7,250,31,82,101,112, ++ 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, ++ 112,97,116,104,46,106,111,105,110,40,41,46,114,11,0,0, ++ 0,114,4,0,0,0,114,0,0,0,0,114,12,0,0,0, ++ 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, ++ 0,5,0,0,0,83,0,0,0,243,26,0,0,0,103,0, ++ 124,0,93,9,125,1,124,1,114,2,124,1,160,0,116,1, ++ 161,1,145,2,113,2,83,0,114,8,0,0,0,169,2,218, ++ 6,114,115,116,114,105,112,218,15,112,97,116,104,95,115,101, ++ 112,97,114,97,116,111,114,115,169,2,114,6,0,0,0,218, ++ 1,112,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,10,60,108,105,115,116,99,111,109,112,62,123,0,0, ++ 0,115,2,0,0,0,26,0,250,30,95,112,97,116,104,95, ++ 106,111,105,110,46,60,108,111,99,97,108,115,62,46,60,108, ++ 105,115,116,99,111,109,112,62,41,13,114,5,0,0,0,218, ++ 3,109,97,112,114,19,0,0,0,218,15,95,112,97,116,104, ++ 95,115,112,108,105,116,114,111,111,116,114,28,0,0,0,218, ++ 14,112,97,116,104,95,115,101,112,95,116,117,112,108,101,218, ++ 8,101,110,100,115,119,105,116,104,114,51,0,0,0,114,52, ++ 0,0,0,218,8,112,97,116,104,95,115,101,112,218,8,99, ++ 97,115,101,102,111,108,100,218,6,97,112,112,101,110,100,218, ++ 4,106,111,105,110,41,5,218,10,112,97,116,104,95,112,97, ++ 114,116,115,218,4,114,111,111,116,218,4,112,97,116,104,90, ++ 8,110,101,119,95,114,111,111,116,218,4,116,97,105,108,114, ++ 8,0,0,0,114,8,0,0,0,114,9,0,0,0,218,10, ++ 95,112,97,116,104,95,106,111,105,110,100,0,0,0,115,42, ++ 0,0,0,4,2,4,1,12,1,8,1,4,1,4,1,20, ++ 1,20,1,14,1,12,1,10,1,16,1,4,3,8,1,12, ++ 2,8,2,12,1,14,1,20,1,8,2,14,1,114,69,0, ++ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,1, ++ 0,0,0,4,0,0,0,71,0,0,0,115,20,0,0,0, ++ 116,0,160,1,100,1,100,2,132,0,124,0,68,0,131,1, ++ 161,1,83,0,41,3,114,48,0,0,0,99,1,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, ++ 83,0,0,0,114,49,0,0,0,114,8,0,0,0,114,50, ++ 0,0,0,41,2,114,6,0,0,0,218,4,112,97,114,116, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 55,0,0,0,132,0,0,0,115,6,0,0,0,6,0,4, ++ 1,16,255,114,56,0,0,0,41,2,114,61,0,0,0,114, ++ 64,0,0,0,41,1,114,65,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,114,69,0,0,0,130, ++ 0,0,0,115,6,0,0,0,10,2,2,1,8,255,99,1, ++ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, ++ 0,0,0,3,0,0,0,115,66,0,0,0,116,0,135,0, ++ 102,1,100,1,100,2,132,8,116,1,68,0,131,1,131,1, ++ 125,1,124,1,100,3,107,0,114,19,100,4,136,0,102,2, ++ 83,0,136,0,100,5,124,1,133,2,25,0,136,0,124,1, ++ 100,6,23,0,100,5,133,2,25,0,102,2,83,0,41,7, ++ 122,32,82,101,112,108,97,99,101,109,101,110,116,32,102,111, ++ 114,32,111,115,46,112,97,116,104,46,115,112,108,105,116,40, ++ 41,46,99,1,0,0,0,0,0,0,0,0,0,0,0,2, ++ 0,0,0,4,0,0,0,51,0,0,0,115,26,0,0,0, ++ 129,0,124,0,93,8,125,1,136,0,160,0,124,1,161,1, ++ 86,0,1,0,113,2,100,0,83,0,169,1,78,41,1,218, ++ 5,114,102,105,110,100,114,53,0,0,0,169,1,114,67,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,10,0,0, ++ 0,138,0,0,0,115,4,0,0,0,2,128,24,0,122,30, ++ 95,112,97,116,104,95,115,112,108,105,116,46,60,108,111,99, ++ 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,0, ++ 0,0,0,114,11,0,0,0,78,114,4,0,0,0,41,2, ++ 218,3,109,97,120,114,52,0,0,0,41,2,114,67,0,0, ++ 0,218,1,105,114,8,0,0,0,114,73,0,0,0,114,9, ++ 0,0,0,218,11,95,112,97,116,104,95,115,112,108,105,116, ++ 136,0,0,0,115,8,0,0,0,22,2,8,1,8,1,28, ++ 1,114,76,0,0,0,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, ++ 10,0,0,0,116,0,160,1,124,0,161,1,83,0,41,1, ++ 122,126,83,116,97,116,32,116,104,101,32,112,97,116,104,46, ++ 10,10,32,32,32,32,77,97,100,101,32,97,32,115,101,112, ++ 97,114,97,116,101,32,102,117,110,99,116,105,111,110,32,116, ++ 111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114, ++ 32,116,111,32,111,118,101,114,114,105,100,101,32,105,110,32, ++ 101,120,112,101,114,105,109,101,110,116,115,10,32,32,32,32, ++ 40,101,46,103,46,32,99,97,99,104,101,32,115,116,97,116, ++ 32,114,101,115,117,108,116,115,41,46,10,10,32,32,32,32, ++ 41,2,114,19,0,0,0,90,4,115,116,97,116,114,73,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,10,95,112,97,116,104,95,115,116,97,116,144,0,0, ++ 0,115,2,0,0,0,10,7,114,77,0,0,0,99,2,0, ++ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,0, ++ 0,0,67,0,0,0,115,48,0,0,0,122,6,116,0,124, ++ 0,131,1,125,2,87,0,110,10,4,0,116,1,121,16,1, ++ 0,1,0,1,0,89,0,100,1,83,0,119,0,124,2,106, ++ 2,100,2,64,0,124,1,107,2,83,0,41,3,122,49,84, ++ 101,115,116,32,119,104,101,116,104,101,114,32,116,104,101,32, ++ 112,97,116,104,32,105,115,32,116,104,101,32,115,112,101,99, ++ 105,102,105,101,100,32,109,111,100,101,32,116,121,112,101,46, ++ 70,105,0,240,0,0,41,3,114,77,0,0,0,218,7,79, ++ 83,69,114,114,111,114,218,7,115,116,95,109,111,100,101,41, ++ 3,114,67,0,0,0,218,4,109,111,100,101,90,9,115,116, ++ 97,116,95,105,110,102,111,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,18,95,112,97,116,104,95,105,115, ++ 95,109,111,100,101,95,116,121,112,101,154,0,0,0,115,12, ++ 0,0,0,2,2,12,1,12,1,6,1,2,255,14,2,114, ++ 81,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,3,0,0,0,67,0,0,0,115,10,0, +- 0,0,124,0,160,0,116,1,161,1,83,0,41,1,114,84, +- 0,0,0,41,2,114,26,0,0,0,114,50,0,0,0,114, +- 71,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,86,0,0,0,180,0,0,0,114,81,0,0, +- 0,233,182,1,0,0,99,3,0,0,0,0,0,0,0,0, +- 0,0,0,6,0,0,0,11,0,0,0,67,0,0,0,115, +- 170,0,0,0,100,1,160,0,124,0,116,1,124,0,131,1, +- 161,2,125,3,116,2,160,3,124,3,116,2,106,4,116,2, +- 106,5,66,0,116,2,106,6,66,0,124,2,100,2,64,0, +- 161,3,125,4,122,36,116,7,160,8,124,4,100,3,161,2, +- 143,13,125,5,124,5,160,9,124,1,161,1,1,0,87,0, +- 100,4,4,0,4,0,131,3,1,0,110,8,49,0,115,47, +- 119,1,1,0,1,0,1,0,89,0,1,0,116,2,160,10, +- 124,3,124,0,161,2,1,0,87,0,100,4,83,0,4,0, +- 116,11,121,84,1,0,1,0,1,0,122,7,116,2,160,12, +- 124,3,161,1,1,0,87,0,130,0,4,0,116,11,121,83, +- 1,0,1,0,1,0,89,0,130,0,119,0,119,0,41,5, +- 122,162,66,101,115,116,45,101,102,102,111,114,116,32,102,117, +- 110,99,116,105,111,110,32,116,111,32,119,114,105,116,101,32, +- 100,97,116,97,32,116,111,32,97,32,112,97,116,104,32,97, +- 116,111,109,105,99,97,108,108,121,46,10,32,32,32,32,66, +- 101,32,112,114,101,112,97,114,101,100,32,116,111,32,104,97, +- 110,100,108,101,32,97,32,70,105,108,101,69,120,105,115,116, +- 115,69,114,114,111,114,32,105,102,32,99,111,110,99,117,114, +- 114,101,110,116,32,119,114,105,116,105,110,103,32,111,102,32, +- 116,104,101,10,32,32,32,32,116,101,109,112,111,114,97,114, +- 121,32,102,105,108,101,32,105,115,32,97,116,116,101,109,112, +- 116,101,100,46,250,5,123,125,46,123,125,114,87,0,0,0, +- 90,2,119,98,78,41,13,218,6,102,111,114,109,97,116,218, +- 2,105,100,114,18,0,0,0,90,4,111,112,101,110,90,6, +- 79,95,69,88,67,76,90,7,79,95,67,82,69,65,84,90, +- 8,79,95,87,82,79,78,76,89,218,3,95,105,111,218,6, +- 70,105,108,101,73,79,218,5,119,114,105,116,101,114,85,0, +- 0,0,114,76,0,0,0,90,6,117,110,108,105,110,107,41, +- 6,114,65,0,0,0,114,41,0,0,0,114,78,0,0,0, +- 90,8,112,97,116,104,95,116,109,112,90,2,102,100,218,4, +- 102,105,108,101,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,13,95,119,114,105,116,101,95,97,116,111,109, +- 105,99,185,0,0,0,115,36,0,0,0,16,5,6,1,22, +- 1,4,255,2,2,14,3,12,1,28,255,18,2,12,1,2, +- 1,12,1,2,3,12,254,2,1,2,1,2,254,2,253,114, +- 95,0,0,0,105,111,13,0,0,114,44,0,0,0,114,32, +- 0,0,0,115,2,0,0,0,13,10,90,11,95,95,112,121, +- 99,97,99,104,101,95,95,122,4,111,112,116,45,122,3,46, +- 112,121,122,4,46,112,121,119,122,4,46,112,121,99,41,1, +- 218,12,111,112,116,105,109,105,122,97,116,105,111,110,99,2, +- 0,0,0,0,0,0,0,1,0,0,0,12,0,0,0,5, +- 0,0,0,67,0,0,0,115,80,1,0,0,124,1,100,1, +- 117,1,114,26,116,0,160,1,100,2,116,2,161,2,1,0, +- 124,2,100,1,117,1,114,20,100,3,125,3,116,3,124,3, +- 131,1,130,1,124,1,114,24,100,4,110,1,100,5,125,2, +- 116,4,160,5,124,0,161,1,125,0,116,6,124,0,131,1, +- 92,2,125,4,125,5,124,5,160,7,100,6,161,1,92,3, +- 125,6,125,7,125,8,116,8,106,9,106,10,125,9,124,9, +- 100,1,117,0,114,57,116,11,100,7,131,1,130,1,100,4, +- 160,12,124,6,114,63,124,6,110,1,124,8,124,7,124,9, +- 103,3,161,1,125,10,124,2,100,1,117,0,114,86,116,8, +- 106,13,106,14,100,8,107,2,114,82,100,4,125,2,110,4, +- 116,8,106,13,106,14,125,2,116,15,124,2,131,1,125,2, +- 124,2,100,4,107,3,114,112,124,2,160,16,161,0,115,105, +- 116,17,100,9,160,18,124,2,161,1,131,1,130,1,100,10, +- 160,18,124,10,116,19,124,2,161,3,125,10,124,10,116,20, +- 100,8,25,0,23,0,125,11,116,8,106,21,100,1,117,1, +- 114,162,116,22,124,4,131,1,115,134,116,23,116,4,160,24, +- 161,0,124,4,131,2,125,4,124,4,100,5,25,0,100,11, +- 107,2,114,152,124,4,100,8,25,0,116,25,118,1,114,152, +- 124,4,100,12,100,1,133,2,25,0,125,4,116,23,116,8, +- 106,21,124,4,160,26,116,25,161,1,124,11,131,3,83,0, +- 116,23,124,4,116,27,124,11,131,3,83,0,41,13,97,254, +- 2,0,0,71,105,118,101,110,32,116,104,101,32,112,97,116, +- 104,32,116,111,32,97,32,46,112,121,32,102,105,108,101,44, +- 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, +- 32,116,111,32,105,116,115,32,46,112,121,99,32,102,105,108, +- 101,46,10,10,32,32,32,32,84,104,101,32,46,112,121,32, +- 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, +- 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, +- 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, +- 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, +- 10,32,32,32,32,46,112,121,99,32,102,105,108,101,32,99, +- 97,108,99,117,108,97,116,101,100,32,97,115,32,105,102,32, +- 116,104,101,32,46,112,121,32,102,105,108,101,32,119,101,114, +- 101,32,105,109,112,111,114,116,101,100,46,10,10,32,32,32, +- 32,84,104,101,32,39,111,112,116,105,109,105,122,97,116,105, +- 111,110,39,32,112,97,114,97,109,101,116,101,114,32,99,111, +- 110,116,114,111,108,115,32,116,104,101,32,112,114,101,115,117, +- 109,101,100,32,111,112,116,105,109,105,122,97,116,105,111,110, +- 32,108,101,118,101,108,32,111,102,10,32,32,32,32,116,104, +- 101,32,98,121,116,101,99,111,100,101,32,102,105,108,101,46, +- 32,73,102,32,39,111,112,116,105,109,105,122,97,116,105,111, +- 110,39,32,105,115,32,110,111,116,32,78,111,110,101,44,32, +- 116,104,101,32,115,116,114,105,110,103,32,114,101,112,114,101, +- 115,101,110,116,97,116,105,111,110,10,32,32,32,32,111,102, +- 32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,115, +- 32,116,97,107,101,110,32,97,110,100,32,118,101,114,105,102, +- 105,101,100,32,116,111,32,98,101,32,97,108,112,104,97,110, +- 117,109,101,114,105,99,32,40,101,108,115,101,32,86,97,108, +- 117,101,69,114,114,111,114,10,32,32,32,32,105,115,32,114, +- 97,105,115,101,100,41,46,10,10,32,32,32,32,84,104,101, +- 32,100,101,98,117,103,95,111,118,101,114,114,105,100,101,32, +- 112,97,114,97,109,101,116,101,114,32,105,115,32,100,101,112, +- 114,101,99,97,116,101,100,46,32,73,102,32,100,101,98,117, +- 103,95,111,118,101,114,114,105,100,101,32,105,115,32,110,111, +- 116,32,78,111,110,101,44,10,32,32,32,32,97,32,84,114, +- 117,101,32,118,97,108,117,101,32,105,115,32,116,104,101,32, +- 115,97,109,101,32,97,115,32,115,101,116,116,105,110,103,32, +- 39,111,112,116,105,109,105,122,97,116,105,111,110,39,32,116, +- 111,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105, +- 110,103,10,32,32,32,32,119,104,105,108,101,32,97,32,70, +- 97,108,115,101,32,118,97,108,117,101,32,105,115,32,101,113, +- 117,105,118,97,108,101,110,116,32,116,111,32,115,101,116,116, +- 105,110,103,32,39,111,112,116,105,109,105,122,97,116,105,111, +- 110,39,32,116,111,32,39,49,39,46,10,10,32,32,32,32, +- 73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,116, ++ 0,0,116,0,124,0,100,1,131,2,83,0,41,2,122,31, ++ 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, ++ 111,115,46,112,97,116,104,46,105,115,102,105,108,101,46,105, ++ 0,128,0,0,41,1,114,81,0,0,0,114,73,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 12,95,112,97,116,104,95,105,115,102,105,108,101,163,0,0, ++ 0,243,2,0,0,0,10,2,114,82,0,0,0,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, ++ 0,0,67,0,0,0,115,22,0,0,0,124,0,115,6,116, ++ 0,160,1,161,0,125,0,116,2,124,0,100,1,131,2,83, ++ 0,41,2,122,30,82,101,112,108,97,99,101,109,101,110,116, ++ 32,102,111,114,32,111,115,46,112,97,116,104,46,105,115,100, ++ 105,114,46,105,0,64,0,0,41,3,114,19,0,0,0,218, ++ 6,103,101,116,99,119,100,114,81,0,0,0,114,73,0,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 218,11,95,112,97,116,104,95,105,115,100,105,114,168,0,0, ++ 0,115,6,0,0,0,4,2,8,1,10,1,114,85,0,0, ++ 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, ++ 0,0,4,0,0,0,67,0,0,0,115,62,0,0,0,124, ++ 0,115,4,100,1,83,0,116,0,160,1,124,0,161,1,100, ++ 2,25,0,160,2,100,3,100,4,161,2,125,1,116,3,124, ++ 1,131,1,100,5,107,4,111,30,124,1,160,4,100,6,161, ++ 1,112,30,124,1,160,5,100,4,161,1,83,0,41,7,250, ++ 30,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114, ++ 32,111,115,46,112,97,116,104,46,105,115,97,98,115,46,70, ++ 114,0,0,0,0,114,2,0,0,0,114,1,0,0,0,114, ++ 4,0,0,0,122,2,92,92,41,6,114,19,0,0,0,114, ++ 58,0,0,0,218,7,114,101,112,108,97,99,101,114,5,0, ++ 0,0,114,28,0,0,0,114,60,0,0,0,41,2,114,67, ++ 0,0,0,114,66,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,218,11,95,112,97,116,104,95,105, ++ 115,97,98,115,176,0,0,0,115,8,0,0,0,4,2,4, ++ 1,22,1,32,1,114,88,0,0,0,99,1,0,0,0,0, ++ 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, ++ 0,0,0,115,10,0,0,0,124,0,160,0,116,1,161,1, ++ 83,0,41,1,114,86,0,0,0,41,2,114,28,0,0,0, ++ 114,52,0,0,0,114,73,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,88,0,0,0,184,0, ++ 0,0,114,83,0,0,0,233,182,1,0,0,99,3,0,0, ++ 0,0,0,0,0,0,0,0,0,6,0,0,0,11,0,0, ++ 0,67,0,0,0,115,170,0,0,0,100,1,160,0,124,0, ++ 116,1,124,0,131,1,161,2,125,3,116,2,160,3,124,3, ++ 116,2,106,4,116,2,106,5,66,0,116,2,106,6,66,0, ++ 124,2,100,2,64,0,161,3,125,4,122,36,116,7,160,8, ++ 124,4,100,3,161,2,143,13,125,5,124,5,160,9,124,1, ++ 161,1,1,0,87,0,100,4,4,0,4,0,131,3,1,0, ++ 110,8,49,0,115,47,119,1,1,0,1,0,1,0,89,0, ++ 1,0,116,2,160,10,124,3,124,0,161,2,1,0,87,0, ++ 100,4,83,0,4,0,116,11,121,84,1,0,1,0,1,0, ++ 122,7,116,2,160,12,124,3,161,1,1,0,87,0,130,0, ++ 4,0,116,11,121,83,1,0,1,0,1,0,89,0,130,0, ++ 119,0,119,0,41,5,122,162,66,101,115,116,45,101,102,102, ++ 111,114,116,32,102,117,110,99,116,105,111,110,32,116,111,32, ++ 119,114,105,116,101,32,100,97,116,97,32,116,111,32,97,32, ++ 112,97,116,104,32,97,116,111,109,105,99,97,108,108,121,46, ++ 10,32,32,32,32,66,101,32,112,114,101,112,97,114,101,100, ++ 32,116,111,32,104,97,110,100,108,101,32,97,32,70,105,108, ++ 101,69,120,105,115,116,115,69,114,114,111,114,32,105,102,32, ++ 99,111,110,99,117,114,114,101,110,116,32,119,114,105,116,105, ++ 110,103,32,111,102,32,116,104,101,10,32,32,32,32,116,101, ++ 109,112,111,114,97,114,121,32,102,105,108,101,32,105,115,32, ++ 97,116,116,101,109,112,116,101,100,46,250,5,123,125,46,123, ++ 125,114,89,0,0,0,90,2,119,98,78,41,13,218,6,102, ++ 111,114,109,97,116,218,2,105,100,114,19,0,0,0,90,4, ++ 111,112,101,110,90,6,79,95,69,88,67,76,90,7,79,95, ++ 67,82,69,65,84,90,8,79,95,87,82,79,78,76,89,218, ++ 3,95,105,111,218,6,70,105,108,101,73,79,218,5,119,114, ++ 105,116,101,114,87,0,0,0,114,78,0,0,0,90,6,117, ++ 110,108,105,110,107,41,6,114,67,0,0,0,114,43,0,0, ++ 0,114,80,0,0,0,90,8,112,97,116,104,95,116,109,112, ++ 90,2,102,100,218,4,102,105,108,101,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,13,95,119,114,105,116, ++ 101,95,97,116,111,109,105,99,189,0,0,0,115,36,0,0, ++ 0,16,5,6,1,22,1,4,255,2,2,14,3,12,1,28, ++ 255,18,2,12,1,2,1,12,1,2,3,12,254,2,1,2, ++ 1,2,254,2,253,114,97,0,0,0,105,111,13,0,0,114, ++ 46,0,0,0,114,34,0,0,0,115,2,0,0,0,13,10, ++ 90,11,95,95,112,121,99,97,99,104,101,95,95,122,4,111, ++ 112,116,45,122,3,46,112,121,122,4,46,112,121,119,122,4, ++ 46,112,121,99,41,1,218,12,111,112,116,105,109,105,122,97, ++ 116,105,111,110,99,2,0,0,0,0,0,0,0,1,0,0, ++ 0,12,0,0,0,5,0,0,0,67,0,0,0,115,80,1, ++ 0,0,124,1,100,1,117,1,114,26,116,0,160,1,100,2, ++ 116,2,161,2,1,0,124,2,100,1,117,1,114,20,100,3, ++ 125,3,116,3,124,3,131,1,130,1,124,1,114,24,100,4, ++ 110,1,100,5,125,2,116,4,160,5,124,0,161,1,125,0, ++ 116,6,124,0,131,1,92,2,125,4,125,5,124,5,160,7, ++ 100,6,161,1,92,3,125,6,125,7,125,8,116,8,106,9, ++ 106,10,125,9,124,9,100,1,117,0,114,57,116,11,100,7, ++ 131,1,130,1,100,4,160,12,124,6,114,63,124,6,110,1, ++ 124,8,124,7,124,9,103,3,161,1,125,10,124,2,100,1, ++ 117,0,114,86,116,8,106,13,106,14,100,8,107,2,114,82, ++ 100,4,125,2,110,4,116,8,106,13,106,14,125,2,116,15, ++ 124,2,131,1,125,2,124,2,100,4,107,3,114,112,124,2, ++ 160,16,161,0,115,105,116,17,100,9,160,18,124,2,161,1, ++ 131,1,130,1,100,10,160,18,124,10,116,19,124,2,161,3, ++ 125,10,124,10,116,20,100,8,25,0,23,0,125,11,116,8, ++ 106,21,100,1,117,1,114,162,116,22,124,4,131,1,115,134, ++ 116,23,116,4,160,24,161,0,124,4,131,2,125,4,124,4, ++ 100,5,25,0,100,11,107,2,114,152,124,4,100,8,25,0, ++ 116,25,118,1,114,152,124,4,100,12,100,1,133,2,25,0, ++ 125,4,116,23,116,8,106,21,124,4,160,26,116,25,161,1, ++ 124,11,131,3,83,0,116,23,124,4,116,27,124,11,131,3, ++ 83,0,41,13,97,254,2,0,0,71,105,118,101,110,32,116, ++ 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, ++ 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, ++ 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, ++ 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104, ++ 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32, ++ 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115, ++ 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114, ++ 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32, ++ 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32, ++ 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, ++ 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105, ++ 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100, ++ 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, ++ 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, ++ 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, ++ 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, ++ 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, ++ 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, ++ 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, ++ 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, ++ 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, ++ 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, ++ 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, ++ 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, ++ 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, ++ 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, ++ 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, ++ 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, ++ 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, ++ 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, ++ 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73, ++ 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, ++ 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32, ++ 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, ++ 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, ++ 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, ++ 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, ++ 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, ++ 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, ++ 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, ++ 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, ++ 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46, ++ 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112, ++ 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, ++ 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, ++ 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, ++ 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, ++ 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101, ++ 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, ++ 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, ++ 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, ++ 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, ++ 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, ++ 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, ++ 78,111,110,101,114,11,0,0,0,114,4,0,0,0,218,1, ++ 46,250,36,115,121,115,46,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, +- 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, +- 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, +- 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, +- 32,78,122,70,116,104,101,32,100,101,98,117,103,95,111,118, +- 101,114,114,105,100,101,32,112,97,114,97,109,101,116,101,114, +- 32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32, +- 117,115,101,32,39,111,112,116,105,109,105,122,97,116,105,111, +- 110,39,32,105,110,115,116,101,97,100,122,50,100,101,98,117, +- 103,95,111,118,101,114,114,105,100,101,32,111,114,32,111,112, +- 116,105,109,105,122,97,116,105,111,110,32,109,117,115,116,32, +- 98,101,32,115,101,116,32,116,111,32,78,111,110,101,114,10, +- 0,0,0,114,3,0,0,0,218,1,46,250,36,115,121,115, +- 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46, +- 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110, +- 101,114,0,0,0,0,122,24,123,33,114,125,32,105,115,32, +- 110,111,116,32,97,108,112,104,97,110,117,109,101,114,105,99, +- 122,7,123,125,46,123,125,123,125,114,11,0,0,0,114,44, +- 0,0,0,41,28,218,9,95,119,97,114,110,105,110,103,115, +- 218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116, +- 105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101, +- 69,114,114,111,114,114,18,0,0,0,218,6,102,115,112,97, +- 116,104,114,74,0,0,0,218,10,114,112,97,114,116,105,116, +- 105,111,110,114,15,0,0,0,218,14,105,109,112,108,101,109, +- 101,110,116,97,116,105,111,110,218,9,99,97,99,104,101,95, +- 116,97,103,218,19,78,111,116,73,109,112,108,101,109,101,110, +- 116,101,100,69,114,114,111,114,114,62,0,0,0,114,16,0, +- 0,0,218,8,111,112,116,105,109,105,122,101,218,3,115,116, +- 114,218,7,105,115,97,108,110,117,109,218,10,86,97,108,117, +- 101,69,114,114,111,114,114,89,0,0,0,218,4,95,79,80, +- 84,218,17,66,89,84,69,67,79,68,69,95,83,85,70,70, +- 73,88,69,83,218,14,112,121,99,97,99,104,101,95,112,114, +- 101,102,105,120,114,86,0,0,0,114,67,0,0,0,114,82, +- 0,0,0,114,50,0,0,0,218,6,108,115,116,114,105,112, +- 218,8,95,80,89,67,65,67,72,69,41,12,114,65,0,0, +- 0,90,14,100,101,98,117,103,95,111,118,101,114,114,105,100, +- 101,114,96,0,0,0,218,7,109,101,115,115,97,103,101,218, +- 4,104,101,97,100,114,66,0,0,0,90,4,98,97,115,101, +- 114,6,0,0,0,218,4,114,101,115,116,90,3,116,97,103, +- 90,15,97,108,109,111,115,116,95,102,105,108,101,110,97,109, +- 101,218,8,102,105,108,101,110,97,109,101,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,218,17,99,97,99,104, +- 101,95,102,114,111,109,95,115,111,117,114,99,101,124,1,0, +- 0,115,72,0,0,0,8,18,6,1,2,1,4,255,8,2, +- 4,1,8,1,12,1,10,1,12,1,16,1,8,1,8,1, +- 8,1,24,1,8,1,12,1,6,1,8,2,8,1,8,1, +- 8,1,14,1,14,1,12,1,10,1,8,9,14,1,24,5, +- 12,1,2,4,4,1,8,1,2,1,4,253,12,5,114,121, +- 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, +- 10,0,0,0,5,0,0,0,67,0,0,0,115,40,1,0, +- 0,116,0,106,1,106,2,100,1,117,0,114,10,116,3,100, +- 2,131,1,130,1,116,4,160,5,124,0,161,1,125,0,116, +- 6,124,0,131,1,92,2,125,1,125,2,100,3,125,3,116, +- 0,106,7,100,1,117,1,114,51,116,0,106,7,160,8,116, +- 9,161,1,125,4,124,1,160,10,124,4,116,11,23,0,161, +- 1,114,51,124,1,116,12,124,4,131,1,100,1,133,2,25, +- 0,125,1,100,4,125,3,124,3,115,72,116,6,124,1,131, +- 1,92,2,125,1,125,5,124,5,116,13,107,3,114,72,116, +- 14,116,13,155,0,100,5,124,0,155,2,157,3,131,1,130, +- 1,124,2,160,15,100,6,161,1,125,6,124,6,100,7,118, +- 1,114,88,116,14,100,8,124,2,155,2,157,2,131,1,130, +- 1,124,6,100,9,107,2,114,132,124,2,160,16,100,6,100, +- 10,161,2,100,11,25,0,125,7,124,7,160,10,116,17,161, +- 1,115,112,116,14,100,12,116,17,155,2,157,2,131,1,130, +- 1,124,7,116,12,116,17,131,1,100,1,133,2,25,0,125, +- 8,124,8,160,18,161,0,115,132,116,14,100,13,124,7,155, +- 2,100,14,157,3,131,1,130,1,124,2,160,19,100,6,161, +- 1,100,15,25,0,125,9,116,20,124,1,124,9,116,21,100, +- 15,25,0,23,0,131,2,83,0,41,16,97,110,1,0,0, +- 71,105,118,101,110,32,116,104,101,32,112,97,116,104,32,116, +- 111,32,97,32,46,112,121,99,46,32,102,105,108,101,44,32, +- 114,101,116,117,114,110,32,116,104,101,32,112,97,116,104,32, +- 116,111,32,105,116,115,32,46,112,121,32,102,105,108,101,46, +- 10,10,32,32,32,32,84,104,101,32,46,112,121,99,32,102, +- 105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,101, +- 100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,115, +- 32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,32, +- 116,104,101,32,112,97,116,104,32,116,111,10,32,32,32,32, +- 116,104,101,32,46,112,121,32,102,105,108,101,32,99,97,108, +- 99,117,108,97,116,101,100,32,116,111,32,99,111,114,114,101, +- 115,112,111,110,100,32,116,111,32,116,104,101,32,46,112,121, +- 99,32,102,105,108,101,46,32,32,73,102,32,112,97,116,104, +- 32,100,111,101,115,10,32,32,32,32,110,111,116,32,99,111, +- 110,102,111,114,109,32,116,111,32,80,69,80,32,51,49,52, +- 55,47,52,56,56,32,102,111,114,109,97,116,44,32,86,97, +- 108,117,101,69,114,114,111,114,32,119,105,108,108,32,98,101, +- 32,114,97,105,115,101,100,46,32,73,102,10,32,32,32,32, +- 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, +- 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, +- 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, +- 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, +- 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,114, +- 98,0,0,0,70,84,122,31,32,110,111,116,32,98,111,116, +- 116,111,109,45,108,101,118,101,108,32,100,105,114,101,99,116, +- 111,114,121,32,105,110,32,114,97,0,0,0,62,2,0,0, +- 0,114,44,0,0,0,233,3,0,0,0,122,29,101,120,112, +- 101,99,116,101,100,32,111,110,108,121,32,50,32,111,114,32, +- 51,32,100,111,116,115,32,105,110,32,114,122,0,0,0,114, +- 44,0,0,0,233,254,255,255,255,122,53,111,112,116,105,109, +- 105,122,97,116,105,111,110,32,112,111,114,116,105,111,110,32, +- 111,102,32,102,105,108,101,110,97,109,101,32,100,111,101,115, +- 32,110,111,116,32,115,116,97,114,116,32,119,105,116,104,32, +- 122,19,111,112,116,105,109,105,122,97,116,105,111,110,32,108, +- 101,118,101,108,32,122,29,32,105,115,32,110,111,116,32,97, +- 110,32,97,108,112,104,97,110,117,109,101,114,105,99,32,118, +- 97,108,117,101,114,0,0,0,0,41,22,114,15,0,0,0, +- 114,105,0,0,0,114,106,0,0,0,114,107,0,0,0,114, +- 18,0,0,0,114,103,0,0,0,114,74,0,0,0,114,114, +- 0,0,0,114,49,0,0,0,114,50,0,0,0,114,26,0, +- 0,0,114,59,0,0,0,114,4,0,0,0,114,116,0,0, +- 0,114,111,0,0,0,218,5,99,111,117,110,116,218,6,114, +- 115,112,108,105,116,114,112,0,0,0,114,110,0,0,0,218, +- 9,112,97,114,116,105,116,105,111,110,114,67,0,0,0,218, +- 15,83,79,85,82,67,69,95,83,85,70,70,73,88,69,83, +- 41,10,114,65,0,0,0,114,118,0,0,0,90,16,112,121, +- 99,97,99,104,101,95,102,105,108,101,110,97,109,101,90,23, +- 102,111,117,110,100,95,105,110,95,112,121,99,97,99,104,101, +- 95,112,114,101,102,105,120,90,13,115,116,114,105,112,112,101, +- 100,95,112,97,116,104,90,7,112,121,99,97,99,104,101,90, +- 9,100,111,116,95,99,111,117,110,116,114,96,0,0,0,90, +- 9,111,112,116,95,108,101,118,101,108,90,13,98,97,115,101, +- 95,102,105,108,101,110,97,109,101,114,7,0,0,0,114,7, +- 0,0,0,114,8,0,0,0,218,17,115,111,117,114,99,101, +- 95,102,114,111,109,95,99,97,99,104,101,195,1,0,0,115, +- 60,0,0,0,12,9,8,1,10,1,12,1,4,1,10,1, +- 12,1,14,1,16,1,4,1,4,1,12,1,8,1,8,1, +- 2,1,8,255,10,2,8,1,14,1,8,1,16,1,10,1, +- 4,1,2,1,8,255,16,2,8,1,16,1,14,2,18,1, +- 114,128,0,0,0,99,1,0,0,0,0,0,0,0,0,0, +- 0,0,5,0,0,0,9,0,0,0,67,0,0,0,115,124, +- 0,0,0,116,0,124,0,131,1,100,1,107,2,114,8,100, +- 2,83,0,124,0,160,1,100,3,161,1,92,3,125,1,125, +- 2,125,3,124,1,114,28,124,3,160,2,161,0,100,4,100, +- 5,133,2,25,0,100,6,107,3,114,30,124,0,83,0,122, +- 6,116,3,124,0,131,1,125,4,87,0,110,17,4,0,116, +- 4,116,5,102,2,121,53,1,0,1,0,1,0,124,0,100, +- 2,100,5,133,2,25,0,125,4,89,0,110,1,119,0,116, +- 6,124,4,131,1,114,60,124,4,83,0,124,0,83,0,41, +- 7,122,188,67,111,110,118,101,114,116,32,97,32,98,121,116, +- 101,99,111,100,101,32,102,105,108,101,32,112,97,116,104,32, +- 116,111,32,97,32,115,111,117,114,99,101,32,112,97,116,104, +- 32,40,105,102,32,112,111,115,115,105,98,108,101,41,46,10, +- 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, +- 111,110,32,101,120,105,115,116,115,32,112,117,114,101,108,121, +- 32,102,111,114,32,98,97,99,107,119,97,114,100,115,45,99, +- 111,109,112,97,116,105,98,105,108,105,116,121,32,102,111,114, +- 10,32,32,32,32,80,121,73,109,112,111,114,116,95,69,120, +- 101,99,67,111,100,101,77,111,100,117,108,101,87,105,116,104, +- 70,105,108,101,110,97,109,101,115,40,41,32,105,110,32,116, +- 104,101,32,67,32,65,80,73,46,10,10,32,32,32,32,114, +- 0,0,0,0,78,114,97,0,0,0,233,253,255,255,255,233, +- 255,255,255,255,90,2,112,121,41,7,114,4,0,0,0,114, +- 104,0,0,0,218,5,108,111,119,101,114,114,128,0,0,0, +- 114,107,0,0,0,114,111,0,0,0,114,80,0,0,0,41, +- 5,218,13,98,121,116,101,99,111,100,101,95,112,97,116,104, +- 114,119,0,0,0,218,1,95,90,9,101,120,116,101,110,115, +- 105,111,110,218,11,115,111,117,114,99,101,95,112,97,116,104, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, +- 15,95,103,101,116,95,115,111,117,114,99,101,102,105,108,101, +- 235,1,0,0,115,22,0,0,0,12,7,4,1,16,1,24, +- 1,4,1,2,1,12,1,16,1,16,1,2,255,16,2,114, +- 135,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, +- 0,1,0,0,0,8,0,0,0,67,0,0,0,115,68,0, +- 0,0,124,0,160,0,116,1,116,2,131,1,161,1,114,23, +- 122,5,116,3,124,0,131,1,87,0,83,0,4,0,116,4, +- 121,22,1,0,1,0,1,0,89,0,100,0,83,0,119,0, +- 124,0,160,0,116,1,116,5,131,1,161,1,114,32,124,0, +- 83,0,100,0,83,0,114,69,0,0,0,41,6,114,58,0, +- 0,0,218,5,116,117,112,108,101,114,127,0,0,0,114,121, +- 0,0,0,114,107,0,0,0,114,113,0,0,0,41,1,114, +- 120,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,100, +- 254,1,0,0,115,18,0,0,0,14,1,2,1,10,1,12, +- 1,6,1,2,255,14,2,4,1,4,2,114,137,0,0,0, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,8,0,0,0,67,0,0,0,115,50,0,0,0,122,7, +- 116,0,124,0,131,1,106,1,125,1,87,0,110,11,4,0, +- 116,2,121,18,1,0,1,0,1,0,100,1,125,1,89,0, +- 110,1,119,0,124,1,100,2,79,0,125,1,124,1,83,0, +- 41,3,122,51,67,97,108,99,117,108,97,116,101,32,116,104, +- 101,32,109,111,100,101,32,112,101,114,109,105,115,115,105,111, +- 110,115,32,102,111,114,32,97,32,98,121,116,101,99,111,100, +- 101,32,102,105,108,101,46,114,87,0,0,0,233,128,0,0, +- 0,41,3,114,75,0,0,0,114,77,0,0,0,114,76,0, +- 0,0,41,2,114,65,0,0,0,114,78,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,218,10,95, +- 99,97,108,99,95,109,111,100,101,10,2,0,0,115,14,0, +- 0,0,2,2,14,1,12,1,8,1,2,255,8,4,4,1, +- 114,139,0,0,0,99,1,0,0,0,0,0,0,0,0,0, +- 0,0,3,0,0,0,4,0,0,0,3,0,0,0,115,52, +- 0,0,0,100,6,135,0,102,1,100,2,100,3,132,9,125, +- 1,116,0,100,1,117,1,114,15,116,0,106,1,125,2,110, +- 4,100,4,100,5,132,0,125,2,124,2,124,1,136,0,131, +- 2,1,0,124,1,83,0,41,7,122,252,68,101,99,111,114, +- 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, +- 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, +- 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, +- 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, +- 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, +- 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, +- 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, +- 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, +- 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, +- 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, +- 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, +- 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, +- 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, +- 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, +- 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, +- 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, +- 0,0,0,0,0,4,0,0,0,4,0,0,0,31,0,0, +- 0,115,72,0,0,0,124,1,100,0,117,0,114,8,124,0, +- 106,0,125,1,110,16,124,0,106,0,124,1,107,3,114,24, +- 116,1,100,1,124,0,106,0,124,1,102,2,22,0,124,1, +- 100,2,141,2,130,1,136,0,124,0,124,1,103,2,124,2, +- 162,1,82,0,105,0,124,3,164,1,142,1,83,0,41,3, +- 78,122,30,108,111,97,100,101,114,32,102,111,114,32,37,115, +- 32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,37, +- 115,169,1,218,4,110,97,109,101,41,2,114,141,0,0,0, +- 218,11,73,109,112,111,114,116,69,114,114,111,114,41,4,218, +- 4,115,101,108,102,114,141,0,0,0,218,4,97,114,103,115, +- 218,6,107,119,97,114,103,115,169,1,218,6,109,101,116,104, +- 111,100,114,7,0,0,0,114,8,0,0,0,218,19,95,99, +- 104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101, +- 114,30,2,0,0,115,18,0,0,0,8,1,8,1,10,1, +- 4,1,8,1,2,255,2,1,6,255,24,2,122,40,95,99, +- 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, +- 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, +- 114,97,112,112,101,114,99,2,0,0,0,0,0,0,0,0, +- 0,0,0,3,0,0,0,7,0,0,0,83,0,0,0,115, +- 56,0,0,0,100,1,68,0,93,16,125,2,116,0,124,1, +- 124,2,131,2,114,18,116,1,124,0,124,2,116,2,124,1, +- 124,2,131,2,131,3,1,0,113,2,124,0,106,3,160,4, +- 124,1,106,3,161,1,1,0,100,0,83,0,41,2,78,41, +- 4,218,10,95,95,109,111,100,117,108,101,95,95,218,8,95, +- 95,110,97,109,101,95,95,218,12,95,95,113,117,97,108,110, +- 97,109,101,95,95,218,7,95,95,100,111,99,95,95,41,5, +- 218,7,104,97,115,97,116,116,114,218,7,115,101,116,97,116, +- 116,114,218,7,103,101,116,97,116,116,114,218,8,95,95,100, +- 105,99,116,95,95,218,6,117,112,100,97,116,101,41,3,90, +- 3,110,101,119,90,3,111,108,100,114,85,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,218,5,95, +- 119,114,97,112,43,2,0,0,115,10,0,0,0,8,1,10, +- 1,18,1,2,128,18,1,122,26,95,99,104,101,99,107,95, +- 110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,119, +- 114,97,112,114,69,0,0,0,41,2,218,10,95,98,111,111, +- 116,115,116,114,97,112,114,158,0,0,0,41,3,114,147,0, +- 0,0,114,148,0,0,0,114,158,0,0,0,114,7,0,0, +- 0,114,146,0,0,0,114,8,0,0,0,218,11,95,99,104, +- 101,99,107,95,110,97,109,101,22,2,0,0,115,12,0,0, +- 0,14,8,8,10,8,1,8,2,10,6,4,1,114,160,0, +- 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,5, +- 0,0,0,6,0,0,0,67,0,0,0,115,72,0,0,0, +- 116,0,160,1,100,1,116,2,161,2,1,0,124,0,160,3, +- 124,1,161,1,92,2,125,2,125,3,124,2,100,2,117,0, +- 114,34,116,4,124,3,131,1,114,34,100,3,125,4,116,0, +- 160,1,124,4,160,5,124,3,100,4,25,0,161,1,116,6, +- 161,2,1,0,124,2,83,0,41,5,122,155,84,114,121,32, +- 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, +- 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, +- 101,100,32,109,111,100,117,108,101,32,98,121,32,100,101,108, +- 101,103,97,116,105,110,103,32,116,111,10,32,32,32,32,115, +- 101,108,102,46,102,105,110,100,95,108,111,97,100,101,114,40, +- 41,46,10,10,32,32,32,32,84,104,105,115,32,109,101,116, +- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, +- 100,32,105,110,32,102,97,118,111,114,32,111,102,32,102,105, +- 110,100,101,114,46,102,105,110,100,95,115,112,101,99,40,41, +- 46,10,10,32,32,32,32,122,90,102,105,110,100,95,109,111, +- 100,117,108,101,40,41,32,105,115,32,100,101,112,114,101,99, +- 97,116,101,100,32,97,110,100,32,115,108,97,116,101,100,32, +- 102,111,114,32,114,101,109,111,118,97,108,32,105,110,32,80, +- 121,116,104,111,110,32,51,46,49,50,59,32,117,115,101,32, +- 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, +- 101,97,100,78,122,44,78,111,116,32,105,109,112,111,114,116, +- 105,110,103,32,100,105,114,101,99,116,111,114,121,32,123,125, +- 58,32,109,105,115,115,105,110,103,32,95,95,105,110,105,116, +- 95,95,114,0,0,0,0,41,7,114,99,0,0,0,114,100, +- 0,0,0,114,101,0,0,0,218,11,102,105,110,100,95,108, +- 111,97,100,101,114,114,4,0,0,0,114,89,0,0,0,218, +- 13,73,109,112,111,114,116,87,97,114,110,105,110,103,41,5, +- 114,143,0,0,0,218,8,102,117,108,108,110,97,109,101,218, +- 6,108,111,97,100,101,114,218,8,112,111,114,116,105,111,110, +- 115,218,3,109,115,103,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,17,95,102,105,110,100,95,109,111,100, +- 117,108,101,95,115,104,105,109,53,2,0,0,115,16,0,0, +- 0,6,7,2,2,4,254,14,6,16,1,4,1,22,1,4, +- 1,114,167,0,0,0,99,3,0,0,0,0,0,0,0,0, +- 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, +- 166,0,0,0,124,0,100,1,100,2,133,2,25,0,125,3, +- 124,3,116,0,107,3,114,32,100,3,124,1,155,2,100,4, +- 124,3,155,2,157,4,125,4,116,1,160,2,100,5,124,4, +- 161,2,1,0,116,3,124,4,102,1,105,0,124,2,164,1, +- 142,1,130,1,116,4,124,0,131,1,100,6,107,0,114,53, +- 100,7,124,1,155,2,157,2,125,4,116,1,160,2,100,5, +- 124,4,161,2,1,0,116,5,124,4,131,1,130,1,116,6, +- 124,0,100,2,100,8,133,2,25,0,131,1,125,5,124,5, +- 100,9,64,0,114,81,100,10,124,5,155,2,100,11,124,1, +- 155,2,157,4,125,4,116,3,124,4,102,1,105,0,124,2, +- 164,1,142,1,130,1,124,5,83,0,41,12,97,84,2,0, +- 0,80,101,114,102,111,114,109,32,98,97,115,105,99,32,118, +- 97,108,105,100,105,116,121,32,99,104,101,99,107,105,110,103, +- 32,111,102,32,97,32,112,121,99,32,104,101,97,100,101,114, +- 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, +- 102,108,97,103,115,32,102,105,101,108,100,44,10,32,32,32, +- 32,119,104,105,99,104,32,100,101,116,101,114,109,105,110,101, +- 115,32,104,111,119,32,116,104,101,32,112,121,99,32,115,104, +- 111,117,108,100,32,98,101,32,102,117,114,116,104,101,114,32, +- 118,97,108,105,100,97,116,101,100,32,97,103,97,105,110,115, +- 116,32,116,104,101,32,115,111,117,114,99,101,46,10,10,32, +- 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, +- 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, +- 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, +- 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, +- 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, +- 105,114,101,100,44,32,116,104,111,117,103,104,46,41,10,10, +- 32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,104, +- 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111, +- 100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,114, +- 116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,32, +- 102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,32, +- 32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,32, +- 105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,32, +- 112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,116, +- 69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,115, +- 101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,111, +- 118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,10, +- 32,32,32,32,73,109,112,111,114,116,69,114,114,111,114,32, +- 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, +- 104,101,32,109,97,103,105,99,32,110,117,109,98,101,114,32, +- 105,115,32,105,110,99,111,114,114,101,99,116,32,111,114,32, +- 119,104,101,110,32,116,104,101,32,102,108,97,103,115,10,32, +- 32,32,32,102,105,101,108,100,32,105,115,32,105,110,118,97, +- 108,105,100,46,32,69,79,70,69,114,114,111,114,32,105,115, +- 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, +- 32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,116, +- 111,32,98,101,32,116,114,117,110,99,97,116,101,100,46,10, +- 10,32,32,32,32,78,114,31,0,0,0,122,20,98,97,100, +- 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110, +- 32,122,2,58,32,250,2,123,125,233,16,0,0,0,122,40, +- 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, +- 101,32,114,101,97,100,105,110,103,32,112,121,99,32,104,101, +- 97,100,101,114,32,111,102,32,233,8,0,0,0,233,252,255, +- 255,255,122,14,105,110,118,97,108,105,100,32,102,108,97,103, +- 115,32,122,4,32,105,110,32,41,7,218,12,77,65,71,73, +- 67,95,78,85,77,66,69,82,114,159,0,0,0,218,16,95, +- 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,114, +- 142,0,0,0,114,4,0,0,0,218,8,69,79,70,69,114, +- 114,111,114,114,42,0,0,0,41,6,114,41,0,0,0,114, +- 141,0,0,0,218,11,101,120,99,95,100,101,116,97,105,108, +- 115,90,5,109,97,103,105,99,114,117,0,0,0,114,16,0, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,218,13,95,99,108,97,115,115,105,102,121,95,112,121,99, +- 73,2,0,0,115,28,0,0,0,12,16,8,1,16,1,12, +- 1,16,1,12,1,10,1,12,1,8,1,16,1,8,2,16, +- 1,16,1,4,1,114,176,0,0,0,99,5,0,0,0,0, +- 0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,67, +- 0,0,0,115,124,0,0,0,116,0,124,0,100,1,100,2, +- 133,2,25,0,131,1,124,1,100,3,64,0,107,3,114,31, +- 100,4,124,3,155,2,157,2,125,5,116,1,160,2,100,5, +- 124,5,161,2,1,0,116,3,124,5,102,1,105,0,124,4, +- 164,1,142,1,130,1,124,2,100,6,117,1,114,58,116,0, +- 124,0,100,2,100,7,133,2,25,0,131,1,124,2,100,3, +- 64,0,107,3,114,60,116,3,100,4,124,3,155,2,157,2, +- 102,1,105,0,124,4,164,1,142,1,130,1,100,6,83,0, +- 100,6,83,0,41,8,97,7,2,0,0,86,97,108,105,100, +- 97,116,101,32,97,32,112,121,99,32,97,103,97,105,110,115, +- 116,32,116,104,101,32,115,111,117,114,99,101,32,108,97,115, +- 116,45,109,111,100,105,102,105,101,100,32,116,105,109,101,46, +- 10,10,32,32,32,32,42,100,97,116,97,42,32,105,115,32, +- 116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32, +- 116,104,101,32,112,121,99,32,102,105,108,101,46,32,40,79, +- 110,108,121,32,116,104,101,32,102,105,114,115,116,32,49,54, +- 32,98,121,116,101,115,32,97,114,101,10,32,32,32,32,114, +- 101,113,117,105,114,101,100,46,41,10,10,32,32,32,32,42, +- 115,111,117,114,99,101,95,109,116,105,109,101,42,32,105,115, +- 32,116,104,101,32,108,97,115,116,32,109,111,100,105,102,105, +- 101,100,32,116,105,109,101,115,116,97,109,112,32,111,102,32, +- 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,46, +- 10,10,32,32,32,32,42,115,111,117,114,99,101,95,115,105, +- 122,101,42,32,105,115,32,78,111,110,101,32,111,114,32,116, +- 104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,115, +- 111,117,114,99,101,32,102,105,108,101,32,105,110,32,98,121, +- 116,101,115,46,10,10,32,32,32,32,42,110,97,109,101,42, ++ 105,115,32,78,111,110,101,114,0,0,0,0,122,24,123,33, ++ 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, ++ 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,114, ++ 12,0,0,0,114,46,0,0,0,41,28,218,9,95,119,97, ++ 114,110,105,110,103,115,218,4,119,97,114,110,218,18,68,101, ++ 112,114,101,99,97,116,105,111,110,87,97,114,110,105,110,103, ++ 218,9,84,121,112,101,69,114,114,111,114,114,19,0,0,0, ++ 218,6,102,115,112,97,116,104,114,76,0,0,0,218,10,114, ++ 112,97,114,116,105,116,105,111,110,114,16,0,0,0,218,14, ++ 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, ++ 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, ++ 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,64, ++ 0,0,0,114,17,0,0,0,218,8,111,112,116,105,109,105, ++ 122,101,218,3,115,116,114,218,7,105,115,97,108,110,117,109, ++ 218,10,86,97,108,117,101,69,114,114,111,114,114,91,0,0, ++ 0,218,4,95,79,80,84,218,17,66,89,84,69,67,79,68, ++ 69,95,83,85,70,70,73,88,69,83,218,14,112,121,99,97, ++ 99,104,101,95,112,114,101,102,105,120,114,88,0,0,0,114, ++ 69,0,0,0,114,84,0,0,0,114,52,0,0,0,218,6, ++ 108,115,116,114,105,112,218,8,95,80,89,67,65,67,72,69, ++ 41,12,114,67,0,0,0,90,14,100,101,98,117,103,95,111, ++ 118,101,114,114,105,100,101,114,98,0,0,0,218,7,109,101, ++ 115,115,97,103,101,218,4,104,101,97,100,114,68,0,0,0, ++ 90,4,98,97,115,101,114,7,0,0,0,218,4,114,101,115, ++ 116,90,3,116,97,103,90,15,97,108,109,111,115,116,95,102, ++ 105,108,101,110,97,109,101,218,8,102,105,108,101,110,97,109, ++ 101,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 218,17,99,97,99,104,101,95,102,114,111,109,95,115,111,117, ++ 114,99,101,128,1,0,0,115,72,0,0,0,8,18,6,1, ++ 2,1,4,255,8,2,4,1,8,1,12,1,10,1,12,1, ++ 16,1,8,1,8,1,8,1,24,1,8,1,12,1,6,1, ++ 8,2,8,1,8,1,8,1,14,1,14,1,12,1,10,1, ++ 8,9,14,1,24,5,12,1,2,4,4,1,8,1,2,1, ++ 4,253,12,5,114,123,0,0,0,99,1,0,0,0,0,0, ++ 0,0,0,0,0,0,10,0,0,0,5,0,0,0,67,0, ++ 0,0,115,40,1,0,0,116,0,106,1,106,2,100,1,117, ++ 0,114,10,116,3,100,2,131,1,130,1,116,4,160,5,124, ++ 0,161,1,125,0,116,6,124,0,131,1,92,2,125,1,125, ++ 2,100,3,125,3,116,0,106,7,100,1,117,1,114,51,116, ++ 0,106,7,160,8,116,9,161,1,125,4,124,1,160,10,124, ++ 4,116,11,23,0,161,1,114,51,124,1,116,12,124,4,131, ++ 1,100,1,133,2,25,0,125,1,100,4,125,3,124,3,115, ++ 72,116,6,124,1,131,1,92,2,125,1,125,5,124,5,116, ++ 13,107,3,114,72,116,14,116,13,155,0,100,5,124,0,155, ++ 2,157,3,131,1,130,1,124,2,160,15,100,6,161,1,125, ++ 6,124,6,100,7,118,1,114,88,116,14,100,8,124,2,155, ++ 2,157,2,131,1,130,1,124,6,100,9,107,2,114,132,124, ++ 2,160,16,100,6,100,10,161,2,100,11,25,0,125,7,124, ++ 7,160,10,116,17,161,1,115,112,116,14,100,12,116,17,155, ++ 2,157,2,131,1,130,1,124,7,116,12,116,17,131,1,100, ++ 1,133,2,25,0,125,8,124,8,160,18,161,0,115,132,116, ++ 14,100,13,124,7,155,2,100,14,157,3,131,1,130,1,124, ++ 2,160,19,100,6,161,1,100,15,25,0,125,9,116,20,124, ++ 1,124,9,116,21,100,15,25,0,23,0,131,2,83,0,41, ++ 16,97,110,1,0,0,71,105,118,101,110,32,116,104,101,32, ++ 112,97,116,104,32,116,111,32,97,32,46,112,121,99,46,32, ++ 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, ++ 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, ++ 32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,32, ++ 46,112,121,99,32,102,105,108,101,32,100,111,101,115,32,110, ++ 111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,116, ++ 59,32,116,104,105,115,32,115,105,109,112,108,121,32,114,101, ++ 116,117,114,110,115,32,116,104,101,32,112,97,116,104,32,116, ++ 111,10,32,32,32,32,116,104,101,32,46,112,121,32,102,105, ++ 108,101,32,99,97,108,99,117,108,97,116,101,100,32,116,111, ++ 32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,116, ++ 104,101,32,46,112,121,99,32,102,105,108,101,46,32,32,73, ++ 102,32,112,97,116,104,32,100,111,101,115,10,32,32,32,32, ++ 110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,80, ++ 69,80,32,51,49,52,55,47,52,56,56,32,102,111,114,109, ++ 97,116,44,32,86,97,108,117,101,69,114,114,111,114,32,119, ++ 105,108,108,32,98,101,32,114,97,105,115,101,100,46,32,73, ++ 102,10,32,32,32,32,115,121,115,46,105,109,112,108,101,109, ++ 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, ++ 97,103,32,105,115,32,78,111,110,101,32,116,104,101,110,32, ++ 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, ++ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, ++ 32,32,32,32,78,114,100,0,0,0,70,84,122,31,32,110, ++ 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, ++ 100,105,114,101,99,116,111,114,121,32,105,110,32,114,99,0, ++ 0,0,62,2,0,0,0,114,46,0,0,0,233,3,0,0, ++ 0,122,29,101,120,112,101,99,116,101,100,32,111,110,108,121, ++ 32,50,32,111,114,32,51,32,100,111,116,115,32,105,110,32, ++ 114,124,0,0,0,114,46,0,0,0,233,254,255,255,255,122, ++ 53,111,112,116,105,109,105,122,97,116,105,111,110,32,112,111, ++ 114,116,105,111,110,32,111,102,32,102,105,108,101,110,97,109, ++ 101,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116, ++ 32,119,105,116,104,32,122,19,111,112,116,105,109,105,122,97, ++ 116,105,111,110,32,108,101,118,101,108,32,122,29,32,105,115, ++ 32,110,111,116,32,97,110,32,97,108,112,104,97,110,117,109, ++ 101,114,105,99,32,118,97,108,117,101,114,0,0,0,0,41, ++ 22,114,16,0,0,0,114,107,0,0,0,114,108,0,0,0, ++ 114,109,0,0,0,114,19,0,0,0,114,105,0,0,0,114, ++ 76,0,0,0,114,116,0,0,0,114,51,0,0,0,114,52, ++ 0,0,0,114,28,0,0,0,114,61,0,0,0,114,5,0, ++ 0,0,114,118,0,0,0,114,113,0,0,0,218,5,99,111, ++ 117,110,116,218,6,114,115,112,108,105,116,114,114,0,0,0, ++ 114,112,0,0,0,218,9,112,97,114,116,105,116,105,111,110, ++ 114,69,0,0,0,218,15,83,79,85,82,67,69,95,83,85, ++ 70,70,73,88,69,83,41,10,114,67,0,0,0,114,120,0, ++ 0,0,90,16,112,121,99,97,99,104,101,95,102,105,108,101, ++ 110,97,109,101,90,23,102,111,117,110,100,95,105,110,95,112, ++ 121,99,97,99,104,101,95,112,114,101,102,105,120,90,13,115, ++ 116,114,105,112,112,101,100,95,112,97,116,104,90,7,112,121, ++ 99,97,99,104,101,90,9,100,111,116,95,99,111,117,110,116, ++ 114,98,0,0,0,90,9,111,112,116,95,108,101,118,101,108, ++ 90,13,98,97,115,101,95,102,105,108,101,110,97,109,101,114, ++ 8,0,0,0,114,8,0,0,0,114,9,0,0,0,218,17, ++ 115,111,117,114,99,101,95,102,114,111,109,95,99,97,99,104, ++ 101,199,1,0,0,115,60,0,0,0,12,9,8,1,10,1, ++ 12,1,4,1,10,1,12,1,14,1,16,1,4,1,4,1, ++ 12,1,8,1,8,1,2,1,8,255,10,2,8,1,14,1, ++ 8,1,16,1,10,1,4,1,2,1,8,255,16,2,8,1, ++ 16,1,14,2,18,1,114,130,0,0,0,99,1,0,0,0, ++ 0,0,0,0,0,0,0,0,5,0,0,0,9,0,0,0, ++ 67,0,0,0,115,124,0,0,0,116,0,124,0,131,1,100, ++ 1,107,2,114,8,100,2,83,0,124,0,160,1,100,3,161, ++ 1,92,3,125,1,125,2,125,3,124,1,114,28,124,3,160, ++ 2,161,0,100,4,100,5,133,2,25,0,100,6,107,3,114, ++ 30,124,0,83,0,122,6,116,3,124,0,131,1,125,4,87, ++ 0,110,17,4,0,116,4,116,5,102,2,121,53,1,0,1, ++ 0,1,0,124,0,100,2,100,5,133,2,25,0,125,4,89, ++ 0,110,1,119,0,116,6,124,4,131,1,114,60,124,4,83, ++ 0,124,0,83,0,41,7,122,188,67,111,110,118,101,114,116, ++ 32,97,32,98,121,116,101,99,111,100,101,32,102,105,108,101, ++ 32,112,97,116,104,32,116,111,32,97,32,115,111,117,114,99, ++ 101,32,112,97,116,104,32,40,105,102,32,112,111,115,115,105, ++ 98,108,101,41,46,10,10,32,32,32,32,84,104,105,115,32, ++ 102,117,110,99,116,105,111,110,32,101,120,105,115,116,115,32, ++ 112,117,114,101,108,121,32,102,111,114,32,98,97,99,107,119, ++ 97,114,100,115,45,99,111,109,112,97,116,105,98,105,108,105, ++ 116,121,32,102,111,114,10,32,32,32,32,80,121,73,109,112, ++ 111,114,116,95,69,120,101,99,67,111,100,101,77,111,100,117, ++ 108,101,87,105,116,104,70,105,108,101,110,97,109,101,115,40, ++ 41,32,105,110,32,116,104,101,32,67,32,65,80,73,46,10, ++ 10,32,32,32,32,114,0,0,0,0,78,114,99,0,0,0, ++ 233,253,255,255,255,114,3,0,0,0,90,2,112,121,41,7, ++ 114,5,0,0,0,114,106,0,0,0,218,5,108,111,119,101, ++ 114,114,130,0,0,0,114,109,0,0,0,114,113,0,0,0, ++ 114,82,0,0,0,41,5,218,13,98,121,116,101,99,111,100, ++ 101,95,112,97,116,104,114,121,0,0,0,218,1,95,90,9, ++ 101,120,116,101,110,115,105,111,110,218,11,115,111,117,114,99, ++ 101,95,112,97,116,104,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,218,15,95,103,101,116,95,115,111,117,114, ++ 99,101,102,105,108,101,239,1,0,0,115,22,0,0,0,12, ++ 7,4,1,16,1,24,1,4,1,2,1,12,1,16,1,16, ++ 1,2,255,16,2,114,136,0,0,0,99,1,0,0,0,0, ++ 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,67, ++ 0,0,0,115,68,0,0,0,124,0,160,0,116,1,116,2, ++ 131,1,161,1,114,23,122,5,116,3,124,0,131,1,87,0, ++ 83,0,4,0,116,4,121,22,1,0,1,0,1,0,89,0, ++ 100,0,83,0,119,0,124,0,160,0,116,1,116,5,131,1, ++ 161,1,114,32,124,0,83,0,100,0,83,0,114,71,0,0, ++ 0,41,6,114,60,0,0,0,218,5,116,117,112,108,101,114, ++ 129,0,0,0,114,123,0,0,0,114,109,0,0,0,114,115, ++ 0,0,0,41,1,114,122,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,11,95,103,101,116,95, ++ 99,97,99,104,101,100,2,2,0,0,115,18,0,0,0,14, ++ 1,2,1,10,1,12,1,6,1,2,255,14,2,4,1,4, ++ 2,114,138,0,0,0,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115, ++ 50,0,0,0,122,7,116,0,124,0,131,1,106,1,125,1, ++ 87,0,110,11,4,0,116,2,121,18,1,0,1,0,1,0, ++ 100,1,125,1,89,0,110,1,119,0,124,1,100,2,79,0, ++ 125,1,124,1,83,0,41,3,122,51,67,97,108,99,117,108, ++ 97,116,101,32,116,104,101,32,109,111,100,101,32,112,101,114, ++ 109,105,115,115,105,111,110,115,32,102,111,114,32,97,32,98, ++ 121,116,101,99,111,100,101,32,102,105,108,101,46,114,89,0, ++ 0,0,233,128,0,0,0,41,3,114,77,0,0,0,114,79, ++ 0,0,0,114,78,0,0,0,41,2,114,67,0,0,0,114, ++ 80,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,14, ++ 2,0,0,115,14,0,0,0,2,2,14,1,12,1,8,1, ++ 2,255,8,4,4,1,114,140,0,0,0,99,1,0,0,0, ++ 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, ++ 3,0,0,0,115,52,0,0,0,100,6,135,0,102,1,100, ++ 2,100,3,132,9,125,1,116,0,100,1,117,1,114,15,116, ++ 0,106,1,125,2,110,4,100,4,100,5,132,0,125,2,124, ++ 2,124,1,136,0,131,2,1,0,124,1,83,0,41,7,122, ++ 252,68,101,99,111,114,97,116,111,114,32,116,111,32,118,101, ++ 114,105,102,121,32,116,104,97,116,32,116,104,101,32,109,111, ++ 100,117,108,101,32,98,101,105,110,103,32,114,101,113,117,101, ++ 115,116,101,100,32,109,97,116,99,104,101,115,32,116,104,101, ++ 32,111,110,101,32,116,104,101,10,32,32,32,32,108,111,97, ++ 100,101,114,32,99,97,110,32,104,97,110,100,108,101,46,10, ++ 10,32,32,32,32,84,104,101,32,102,105,114,115,116,32,97, ++ 114,103,117,109,101,110,116,32,40,115,101,108,102,41,32,109, ++ 117,115,116,32,100,101,102,105,110,101,32,95,110,97,109,101, ++ 32,119,104,105,99,104,32,116,104,101,32,115,101,99,111,110, ++ 100,32,97,114,103,117,109,101,110,116,32,105,115,10,32,32, ++ 32,32,99,111,109,112,97,114,101,100,32,97,103,97,105,110, ++ 115,116,46,32,73,102,32,116,104,101,32,99,111,109,112,97, ++ 114,105,115,111,110,32,102,97,105,108,115,32,116,104,101,110, ++ 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32, ++ 114,97,105,115,101,100,46,10,10,32,32,32,32,78,99,2, ++ 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4, ++ 0,0,0,31,0,0,0,115,72,0,0,0,124,1,100,0, ++ 117,0,114,8,124,0,106,0,125,1,110,16,124,0,106,0, ++ 124,1,107,3,114,24,116,1,100,1,124,0,106,0,124,1, ++ 102,2,22,0,124,1,100,2,141,2,130,1,136,0,124,0, ++ 124,1,103,2,124,2,162,1,82,0,105,0,124,3,164,1, ++ 142,1,83,0,41,3,78,122,30,108,111,97,100,101,114,32, ++ 102,111,114,32,37,115,32,99,97,110,110,111,116,32,104,97, ++ 110,100,108,101,32,37,115,169,1,218,4,110,97,109,101,41, ++ 2,114,142,0,0,0,218,11,73,109,112,111,114,116,69,114, ++ 114,111,114,41,4,218,4,115,101,108,102,114,142,0,0,0, ++ 218,4,97,114,103,115,218,6,107,119,97,114,103,115,169,1, ++ 218,6,109,101,116,104,111,100,114,8,0,0,0,114,9,0, ++ 0,0,218,19,95,99,104,101,99,107,95,110,97,109,101,95, ++ 119,114,97,112,112,101,114,34,2,0,0,115,18,0,0,0, ++ 8,1,8,1,10,1,4,1,8,1,2,255,2,1,6,255, ++ 24,2,122,40,95,99,104,101,99,107,95,110,97,109,101,46, ++ 60,108,111,99,97,108,115,62,46,95,99,104,101,99,107,95, ++ 110,97,109,101,95,119,114,97,112,112,101,114,99,2,0,0, ++ 0,0,0,0,0,0,0,0,0,3,0,0,0,7,0,0, ++ 0,83,0,0,0,115,56,0,0,0,100,1,68,0,93,16, ++ 125,2,116,0,124,1,124,2,131,2,114,18,116,1,124,0, ++ 124,2,116,2,124,1,124,2,131,2,131,3,1,0,113,2, ++ 124,0,106,3,160,4,124,1,106,3,161,1,1,0,100,0, ++ 83,0,41,2,78,41,4,218,10,95,95,109,111,100,117,108, ++ 101,95,95,218,8,95,95,110,97,109,101,95,95,218,12,95, ++ 95,113,117,97,108,110,97,109,101,95,95,218,7,95,95,100, ++ 111,99,95,95,41,5,218,7,104,97,115,97,116,116,114,218, ++ 7,115,101,116,97,116,116,114,218,7,103,101,116,97,116,116, ++ 114,218,8,95,95,100,105,99,116,95,95,218,6,117,112,100, ++ 97,116,101,41,3,90,3,110,101,119,90,3,111,108,100,114, ++ 87,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,218,5,95,119,114,97,112,47,2,0,0,115,10, ++ 0,0,0,8,1,10,1,18,1,2,128,18,1,122,26,95, ++ 99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,97, ++ 108,115,62,46,95,119,114,97,112,114,71,0,0,0,41,2, ++ 218,10,95,98,111,111,116,115,116,114,97,112,114,159,0,0, ++ 0,41,3,114,148,0,0,0,114,149,0,0,0,114,159,0, ++ 0,0,114,8,0,0,0,114,147,0,0,0,114,9,0,0, ++ 0,218,11,95,99,104,101,99,107,95,110,97,109,101,26,2, ++ 0,0,115,12,0,0,0,14,8,8,10,8,1,8,2,10, ++ 6,4,1,114,161,0,0,0,99,2,0,0,0,0,0,0, ++ 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, ++ 0,115,72,0,0,0,116,0,160,1,100,1,116,2,161,2, ++ 1,0,124,0,160,3,124,1,161,1,92,2,125,2,125,3, ++ 124,2,100,2,117,0,114,34,116,4,124,3,131,1,114,34, ++ 100,3,125,4,116,0,160,1,124,4,160,5,124,3,100,4, ++ 25,0,161,1,116,6,161,2,1,0,124,2,83,0,41,5, ++ 122,155,84,114,121,32,116,111,32,102,105,110,100,32,97,32, ++ 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, ++ 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32, ++ 98,121,32,100,101,108,101,103,97,116,105,110,103,32,116,111, ++ 10,32,32,32,32,115,101,108,102,46,102,105,110,100,95,108, ++ 111,97,100,101,114,40,41,46,10,10,32,32,32,32,84,104, ++ 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, ++ 114,101,99,97,116,101,100,32,105,110,32,102,97,118,111,114, ++ 32,111,102,32,102,105,110,100,101,114,46,102,105,110,100,95, ++ 115,112,101,99,40,41,46,10,10,32,32,32,32,122,90,102, ++ 105,110,100,95,109,111,100,117,108,101,40,41,32,105,115,32, ++ 100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,115, ++ 108,97,116,101,100,32,102,111,114,32,114,101,109,111,118,97, ++ 108,32,105,110,32,80,121,116,104,111,110,32,51,46,49,50, ++ 59,32,117,115,101,32,102,105,110,100,95,115,112,101,99,40, ++ 41,32,105,110,115,116,101,97,100,78,122,44,78,111,116,32, ++ 105,109,112,111,114,116,105,110,103,32,100,105,114,101,99,116, ++ 111,114,121,32,123,125,58,32,109,105,115,115,105,110,103,32, ++ 95,95,105,110,105,116,95,95,114,0,0,0,0,41,7,114, ++ 101,0,0,0,114,102,0,0,0,114,103,0,0,0,218,11, ++ 102,105,110,100,95,108,111,97,100,101,114,114,5,0,0,0, ++ 114,91,0,0,0,218,13,73,109,112,111,114,116,87,97,114, ++ 110,105,110,103,41,5,114,144,0,0,0,218,8,102,117,108, ++ 108,110,97,109,101,218,6,108,111,97,100,101,114,218,8,112, ++ 111,114,116,105,111,110,115,218,3,109,115,103,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,17,95,102,105, ++ 110,100,95,109,111,100,117,108,101,95,115,104,105,109,57,2, ++ 0,0,115,16,0,0,0,6,7,2,2,4,254,14,6,16, ++ 1,4,1,22,1,4,1,114,168,0,0,0,99,3,0,0, ++ 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, ++ 0,67,0,0,0,115,166,0,0,0,124,0,100,1,100,2, ++ 133,2,25,0,125,3,124,3,116,0,107,3,114,32,100,3, ++ 124,1,155,2,100,4,124,3,155,2,157,4,125,4,116,1, ++ 160,2,100,5,124,4,161,2,1,0,116,3,124,4,102,1, ++ 105,0,124,2,164,1,142,1,130,1,116,4,124,0,131,1, ++ 100,6,107,0,114,53,100,7,124,1,155,2,157,2,125,4, ++ 116,1,160,2,100,5,124,4,161,2,1,0,116,5,124,4, ++ 131,1,130,1,116,6,124,0,100,2,100,8,133,2,25,0, ++ 131,1,125,5,124,5,100,9,64,0,114,81,100,10,124,5, ++ 155,2,100,11,124,1,155,2,157,4,125,4,116,3,124,4, ++ 102,1,105,0,124,2,164,1,142,1,130,1,124,5,83,0, ++ 41,12,97,84,2,0,0,80,101,114,102,111,114,109,32,98, ++ 97,115,105,99,32,118,97,108,105,100,105,116,121,32,99,104, ++ 101,99,107,105,110,103,32,111,102,32,97,32,112,121,99,32, ++ 104,101,97,100,101,114,32,97,110,100,32,114,101,116,117,114, ++ 110,32,116,104,101,32,102,108,97,103,115,32,102,105,101,108, ++ 100,44,10,32,32,32,32,119,104,105,99,104,32,100,101,116, ++ 101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,32, ++ 112,121,99,32,115,104,111,117,108,100,32,98,101,32,102,117, ++ 114,116,104,101,114,32,118,97,108,105,100,97,116,101,100,32, ++ 97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,114, ++ 99,101,46,10,10,32,32,32,32,42,100,97,116,97,42,32, ++ 105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32, ++ 111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,46, ++ 32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,116, ++ 32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,32, ++ 32,32,114,101,113,117,105,114,101,100,44,32,116,104,111,117, ++ 103,104,46,41,10,10,32,32,32,32,42,110,97,109,101,42, + 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32, + 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, + 32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,115, +@@ -821,1945 +756,2013 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { + 73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,105, + 116,32,114,97,105,115,101,100,32,102,111,114,10,32,32,32, + 32,105,109,112,114,111,118,101,100,32,100,101,98,117,103,103, +- 105,110,103,46,10,10,32,32,32,32,65,110,32,73,109,112, +- 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, +- 101,100,32,105,102,32,116,104,101,32,98,121,116,101,99,111, +- 100,101,32,105,115,32,115,116,97,108,101,46,10,10,32,32, +- 32,32,114,170,0,0,0,233,12,0,0,0,114,30,0,0, +- 0,122,22,98,121,116,101,99,111,100,101,32,105,115,32,115, +- 116,97,108,101,32,102,111,114,32,114,168,0,0,0,78,114, +- 169,0,0,0,41,4,114,42,0,0,0,114,159,0,0,0, +- 114,173,0,0,0,114,142,0,0,0,41,6,114,41,0,0, +- 0,218,12,115,111,117,114,99,101,95,109,116,105,109,101,218, +- 11,115,111,117,114,99,101,95,115,105,122,101,114,141,0,0, +- 0,114,175,0,0,0,114,117,0,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,218,23,95,118,97,108, +- 105,100,97,116,101,95,116,105,109,101,115,116,97,109,112,95, +- 112,121,99,106,2,0,0,115,18,0,0,0,24,19,10,1, +- 12,1,16,1,8,1,22,1,2,255,22,2,8,254,114,180, +- 0,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, +- 4,0,0,0,4,0,0,0,67,0,0,0,115,42,0,0, +- 0,124,0,100,1,100,2,133,2,25,0,124,1,107,3,114, +- 19,116,0,100,3,124,2,155,2,157,2,102,1,105,0,124, +- 3,164,1,142,1,130,1,100,4,83,0,41,5,97,243,1, +- 0,0,86,97,108,105,100,97,116,101,32,97,32,104,97,115, +- 104,45,98,97,115,101,100,32,112,121,99,32,98,121,32,99, +- 104,101,99,107,105,110,103,32,116,104,101,32,114,101,97,108, +- 32,115,111,117,114,99,101,32,104,97,115,104,32,97,103,97, +- 105,110,115,116,32,116,104,101,32,111,110,101,32,105,110,10, +- 32,32,32,32,116,104,101,32,112,121,99,32,104,101,97,100, +- 101,114,46,10,10,32,32,32,32,42,100,97,116,97,42,32, +- 105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32, +- 111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,46, +- 32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,116, +- 32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,32, +- 32,32,114,101,113,117,105,114,101,100,46,41,10,10,32,32, +- 32,32,42,115,111,117,114,99,101,95,104,97,115,104,42,32, +- 105,115,32,116,104,101,32,105,109,112,111,114,116,108,105,98, +- 46,117,116,105,108,46,115,111,117,114,99,101,95,104,97,115, +- 104,40,41,32,111,102,32,116,104,101,32,115,111,117,114,99, +- 101,32,102,105,108,101,46,10,10,32,32,32,32,42,110,97, +- 109,101,42,32,105,115,32,116,104,101,32,110,97,109,101,32, +- 111,102,32,116,104,101,32,109,111,100,117,108,101,32,98,101, +- 105,110,103,32,105,109,112,111,114,116,101,100,46,32,73,116, +- 32,105,115,32,117,115,101,100,32,102,111,114,32,108,111,103, +- 103,105,110,103,46,10,10,32,32,32,32,42,101,120,99,95, +- 100,101,116,97,105,108,115,42,32,105,115,32,97,32,100,105, +- 99,116,105,111,110,97,114,121,32,112,97,115,115,101,100,32, +- 116,111,32,73,109,112,111,114,116,69,114,114,111,114,32,105, +- 102,32,105,116,32,114,97,105,115,101,100,32,102,111,114,10, +- 32,32,32,32,105,109,112,114,111,118,101,100,32,100,101,98, +- 117,103,103,105,110,103,46,10,10,32,32,32,32,65,110,32, +- 73,109,112,111,114,116,69,114,114,111,114,32,105,115,32,114, +- 97,105,115,101,100,32,105,102,32,116,104,101,32,98,121,116, +- 101,99,111,100,101,32,105,115,32,115,116,97,108,101,46,10, +- 10,32,32,32,32,114,170,0,0,0,114,169,0,0,0,122, +- 46,104,97,115,104,32,105,110,32,98,121,116,101,99,111,100, +- 101,32,100,111,101,115,110,39,116,32,109,97,116,99,104,32, +- 104,97,115,104,32,111,102,32,115,111,117,114,99,101,32,78, +- 41,1,114,142,0,0,0,41,4,114,41,0,0,0,218,11, +- 115,111,117,114,99,101,95,104,97,115,104,114,141,0,0,0, +- 114,175,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,218,18,95,118,97,108,105,100,97,116,101,95, +- 104,97,115,104,95,112,121,99,134,2,0,0,115,14,0,0, +- 0,16,17,2,1,8,1,4,255,2,2,6,254,4,255,114, +- 182,0,0,0,99,4,0,0,0,0,0,0,0,0,0,0, +- 0,5,0,0,0,5,0,0,0,67,0,0,0,115,76,0, +- 0,0,116,0,160,1,124,0,161,1,125,4,116,2,124,4, +- 116,3,131,2,114,28,116,4,160,5,100,1,124,2,161,2, +- 1,0,124,3,100,2,117,1,114,26,116,6,160,7,124,4, +- 124,3,161,2,1,0,124,4,83,0,116,8,100,3,160,9, +- 124,2,161,1,124,1,124,2,100,4,141,3,130,1,41,5, +- 122,35,67,111,109,112,105,108,101,32,98,121,116,101,99,111, +- 100,101,32,97,115,32,102,111,117,110,100,32,105,110,32,97, +- 32,112,121,99,46,122,21,99,111,100,101,32,111,98,106,101, +- 99,116,32,102,114,111,109,32,123,33,114,125,78,122,23,78, +- 111,110,45,99,111,100,101,32,111,98,106,101,99,116,32,105, +- 110,32,123,33,114,125,169,2,114,141,0,0,0,114,65,0, +- 0,0,41,10,218,7,109,97,114,115,104,97,108,90,5,108, +- 111,97,100,115,218,10,105,115,105,110,115,116,97,110,99,101, +- 218,10,95,99,111,100,101,95,116,121,112,101,114,159,0,0, +- 0,114,173,0,0,0,218,4,95,105,109,112,90,16,95,102, +- 105,120,95,99,111,95,102,105,108,101,110,97,109,101,114,142, +- 0,0,0,114,89,0,0,0,41,5,114,41,0,0,0,114, +- 141,0,0,0,114,132,0,0,0,114,134,0,0,0,218,4, +- 99,111,100,101,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,17,95,99,111,109,112,105,108,101,95,98,121, +- 116,101,99,111,100,101,158,2,0,0,115,18,0,0,0,10, +- 2,10,1,12,1,8,1,12,1,4,1,10,2,4,1,6, +- 255,114,189,0,0,0,99,3,0,0,0,0,0,0,0,0, +- 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, +- 70,0,0,0,116,0,116,1,131,1,125,3,124,3,160,2, +- 116,3,100,1,131,1,161,1,1,0,124,3,160,2,116,3, +- 124,1,131,1,161,1,1,0,124,3,160,2,116,3,124,2, +- 131,1,161,1,1,0,124,3,160,2,116,4,160,5,124,0, +- 161,1,161,1,1,0,124,3,83,0,41,2,122,43,80,114, +- 111,100,117,99,101,32,116,104,101,32,100,97,116,97,32,102, +- 111,114,32,97,32,116,105,109,101,115,116,97,109,112,45,98, +- 97,115,101,100,32,112,121,99,46,114,0,0,0,0,41,6, +- 218,9,98,121,116,101,97,114,114,97,121,114,172,0,0,0, +- 218,6,101,120,116,101,110,100,114,36,0,0,0,114,184,0, +- 0,0,218,5,100,117,109,112,115,41,4,114,188,0,0,0, +- 218,5,109,116,105,109,101,114,179,0,0,0,114,41,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,22,95,99,111,100,101,95,116,111,95,116,105,109,101,115, +- 116,97,109,112,95,112,121,99,171,2,0,0,115,12,0,0, +- 0,8,2,14,1,14,1,14,1,16,1,4,1,114,194,0, +- 0,0,84,99,3,0,0,0,0,0,0,0,0,0,0,0, +- 5,0,0,0,5,0,0,0,67,0,0,0,115,80,0,0, +- 0,116,0,116,1,131,1,125,3,100,1,124,2,100,1,62, +- 0,66,0,125,4,124,3,160,2,116,3,124,4,131,1,161, +- 1,1,0,116,4,124,1,131,1,100,2,107,2,115,25,74, +- 0,130,1,124,3,160,2,124,1,161,1,1,0,124,3,160, +- 2,116,5,160,6,124,0,161,1,161,1,1,0,124,3,83, +- 0,41,3,122,38,80,114,111,100,117,99,101,32,116,104,101, +- 32,100,97,116,97,32,102,111,114,32,97,32,104,97,115,104, +- 45,98,97,115,101,100,32,112,121,99,46,114,3,0,0,0, +- 114,170,0,0,0,41,7,114,190,0,0,0,114,172,0,0, +- 0,114,191,0,0,0,114,36,0,0,0,114,4,0,0,0, +- 114,184,0,0,0,114,192,0,0,0,41,5,114,188,0,0, +- 0,114,181,0,0,0,90,7,99,104,101,99,107,101,100,114, +- 41,0,0,0,114,16,0,0,0,114,7,0,0,0,114,7, +- 0,0,0,114,8,0,0,0,218,17,95,99,111,100,101,95, +- 116,111,95,104,97,115,104,95,112,121,99,181,2,0,0,115, +- 14,0,0,0,8,2,12,1,14,1,16,1,10,1,16,1, +- 4,1,114,195,0,0,0,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0, +- 115,62,0,0,0,100,1,100,2,108,0,125,1,116,1,160, +- 2,124,0,161,1,106,3,125,2,124,1,160,4,124,2,161, +- 1,125,3,116,1,160,5,100,2,100,3,161,2,125,4,124, +- 4,160,6,124,0,160,6,124,3,100,1,25,0,161,1,161, +- 1,83,0,41,4,122,121,68,101,99,111,100,101,32,98,121, +- 116,101,115,32,114,101,112,114,101,115,101,110,116,105,110,103, +- 32,115,111,117,114,99,101,32,99,111,100,101,32,97,110,100, +- 32,114,101,116,117,114,110,32,116,104,101,32,115,116,114,105, +- 110,103,46,10,10,32,32,32,32,85,110,105,118,101,114,115, +- 97,108,32,110,101,119,108,105,110,101,32,115,117,112,112,111, +- 114,116,32,105,115,32,117,115,101,100,32,105,110,32,116,104, +- 101,32,100,101,99,111,100,105,110,103,46,10,32,32,32,32, +- 114,0,0,0,0,78,84,41,7,218,8,116,111,107,101,110, +- 105,122,101,114,91,0,0,0,90,7,66,121,116,101,115,73, +- 79,90,8,114,101,97,100,108,105,110,101,90,15,100,101,116, +- 101,99,116,95,101,110,99,111,100,105,110,103,90,25,73,110, +- 99,114,101,109,101,110,116,97,108,78,101,119,108,105,110,101, +- 68,101,99,111,100,101,114,218,6,100,101,99,111,100,101,41, +- 5,218,12,115,111,117,114,99,101,95,98,121,116,101,115,114, +- 196,0,0,0,90,21,115,111,117,114,99,101,95,98,121,116, +- 101,115,95,114,101,97,100,108,105,110,101,218,8,101,110,99, +- 111,100,105,110,103,90,15,110,101,119,108,105,110,101,95,100, +- 101,99,111,100,101,114,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,13,100,101,99,111,100,101,95,115,111, +- 117,114,99,101,192,2,0,0,115,10,0,0,0,8,5,12, +- 1,10,1,12,1,20,1,114,200,0,0,0,169,2,114,164, +- 0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,115, +- 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,99, +- 2,0,0,0,0,0,0,0,2,0,0,0,9,0,0,0, +- 8,0,0,0,67,0,0,0,115,54,1,0,0,124,1,100, +- 1,117,0,114,29,100,2,125,1,116,0,124,2,100,3,131, +- 2,114,28,122,7,124,2,160,1,124,0,161,1,125,1,87, +- 0,113,57,4,0,116,2,121,27,1,0,1,0,1,0,89, +- 0,113,57,119,0,110,28,116,3,160,4,124,1,161,1,125, +- 1,116,5,124,1,131,1,115,57,122,9,116,6,116,3,160, +- 7,161,0,124,1,131,2,125,1,87,0,110,9,4,0,116, +- 8,121,56,1,0,1,0,1,0,89,0,110,1,119,0,116, +- 9,106,10,124,0,124,2,124,1,100,4,141,3,125,4,100, +- 5,124,4,95,11,124,2,100,1,117,0,114,99,116,12,131, +- 0,68,0,93,21,92,2,125,5,125,6,124,1,160,13,116, +- 14,124,6,131,1,161,1,114,96,124,5,124,0,124,1,131, +- 2,125,2,124,2,124,4,95,15,1,0,113,99,113,75,100, +- 1,83,0,124,3,116,16,117,0,114,131,116,0,124,2,100, +- 6,131,2,114,130,122,7,124,2,160,17,124,0,161,1,125, +- 7,87,0,110,9,4,0,116,2,121,124,1,0,1,0,1, +- 0,89,0,113,134,119,0,124,7,114,130,103,0,124,4,95, +- 18,110,3,124,3,124,4,95,18,124,4,106,18,103,0,107, +- 2,114,153,124,1,114,153,116,19,124,1,131,1,100,7,25, +- 0,125,8,124,4,106,18,160,20,124,8,161,1,1,0,124, +- 4,83,0,41,8,97,61,1,0,0,82,101,116,117,114,110, +- 32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98, +- 97,115,101,100,32,111,110,32,97,32,102,105,108,101,32,108, +- 111,99,97,116,105,111,110,46,10,10,32,32,32,32,84,111, +- 32,105,110,100,105,99,97,116,101,32,116,104,97,116,32,116, +- 104,101,32,109,111,100,117,108,101,32,105,115,32,97,32,112, +- 97,99,107,97,103,101,44,32,115,101,116,10,32,32,32,32, +- 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, +- 95,108,111,99,97,116,105,111,110,115,32,116,111,32,97,32, +- 108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114, +- 121,32,112,97,116,104,115,46,32,32,65,110,10,32,32,32, +- 32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,115, +- 117,102,102,105,99,105,101,110,116,44,32,116,104,111,117,103, +- 104,32,105,116,115,32,110,111,116,32,111,116,104,101,114,119, +- 105,115,101,32,117,115,101,102,117,108,32,116,111,32,116,104, +- 101,10,32,32,32,32,105,109,112,111,114,116,32,115,121,115, +- 116,101,109,46,10,10,32,32,32,32,84,104,101,32,108,111, +- 97,100,101,114,32,109,117,115,116,32,116,97,107,101,32,97, +- 32,115,112,101,99,32,97,115,32,105,116,115,32,111,110,108, +- 121,32,95,95,105,110,105,116,95,95,40,41,32,97,114,103, +- 46,10,10,32,32,32,32,78,122,9,60,117,110,107,110,111, +- 119,110,62,218,12,103,101,116,95,102,105,108,101,110,97,109, +- 101,169,1,218,6,111,114,105,103,105,110,84,218,10,105,115, +- 95,112,97,99,107,97,103,101,114,0,0,0,0,41,21,114, +- 153,0,0,0,114,203,0,0,0,114,142,0,0,0,114,18, +- 0,0,0,114,103,0,0,0,114,86,0,0,0,114,67,0, +- 0,0,114,82,0,0,0,114,76,0,0,0,114,159,0,0, +- 0,218,10,77,111,100,117,108,101,83,112,101,99,90,13,95, +- 115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,103, +- 101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,108, +- 101,95,108,111,97,100,101,114,115,114,58,0,0,0,114,136, +- 0,0,0,114,164,0,0,0,218,9,95,80,79,80,85,76, +- 65,84,69,114,206,0,0,0,114,202,0,0,0,114,74,0, +- 0,0,114,61,0,0,0,41,9,114,141,0,0,0,90,8, +- 108,111,99,97,116,105,111,110,114,164,0,0,0,114,202,0, +- 0,0,218,4,115,112,101,99,218,12,108,111,97,100,101,114, +- 95,99,108,97,115,115,218,8,115,117,102,102,105,120,101,115, +- 114,206,0,0,0,90,7,100,105,114,110,97,109,101,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,218,23,115, +- 112,101,99,95,102,114,111,109,95,102,105,108,101,95,108,111, +- 99,97,116,105,111,110,209,2,0,0,115,84,0,0,0,8, +- 12,4,4,10,1,2,2,14,1,12,1,4,1,2,255,2, +- 252,10,7,8,1,2,1,18,1,12,1,4,1,2,255,16, +- 9,6,1,8,3,14,1,14,1,10,1,6,1,4,1,2, +- 253,4,5,8,3,10,2,2,1,14,1,12,1,4,1,2, +- 255,4,3,6,1,2,128,6,2,10,1,4,1,12,1,12, +- 1,4,2,114,213,0,0,0,99,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, +- 0,115,88,0,0,0,101,0,90,1,100,0,90,2,100,1, +- 90,3,100,2,90,4,100,3,90,5,101,6,111,15,100,4, +- 101,7,118,0,90,8,101,9,100,5,100,6,132,0,131,1, +- 90,10,101,11,100,7,100,8,132,0,131,1,90,12,101,11, +- 100,14,100,10,100,11,132,1,131,1,90,13,101,11,100,15, +- 100,12,100,13,132,1,131,1,90,14,100,9,83,0,41,16, +- 218,21,87,105,110,100,111,119,115,82,101,103,105,115,116,114, +- 121,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, +- 116,104,32,102,105,110,100,101,114,32,102,111,114,32,109,111, +- 100,117,108,101,115,32,100,101,99,108,97,114,101,100,32,105, +- 110,32,116,104,101,32,87,105,110,100,111,119,115,32,114,101, +- 103,105,115,116,114,121,46,122,59,83,111,102,116,119,97,114, +- 101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,67, +- 111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,110, +- 125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,110, +- 97,109,101,125,122,65,83,111,102,116,119,97,114,101,92,80, +- 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, +- 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, +- 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, +- 125,92,68,101,98,117,103,122,6,95,100,46,112,121,100,99, +- 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +- 8,0,0,0,67,0,0,0,115,50,0,0,0,122,8,116, +- 0,160,1,116,0,106,2,124,0,161,2,87,0,83,0,4, +- 0,116,3,121,24,1,0,1,0,1,0,116,0,160,1,116, +- 0,106,4,124,0,161,2,6,0,89,0,83,0,119,0,114, +- 69,0,0,0,41,5,218,6,119,105,110,114,101,103,90,7, +- 79,112,101,110,75,101,121,90,17,72,75,69,89,95,67,85, +- 82,82,69,78,84,95,85,83,69,82,114,76,0,0,0,90, +- 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, +- 73,78,69,114,19,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,218,14,95,111,112,101,110,95,114, +- 101,103,105,115,116,114,121,38,3,0,0,115,10,0,0,0, +- 2,2,16,1,12,1,18,1,2,255,122,36,87,105,110,100, +- 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, +- 114,46,95,111,112,101,110,95,114,101,103,105,115,116,114,121, +- 99,2,0,0,0,0,0,0,0,0,0,0,0,6,0,0, +- 0,8,0,0,0,67,0,0,0,115,134,0,0,0,124,0, +- 106,0,114,7,124,0,106,1,125,2,110,3,124,0,106,2, +- 125,2,124,2,106,3,124,1,100,1,116,4,106,5,100,0, +- 100,2,133,2,25,0,22,0,100,3,141,2,125,3,122,32, +- 124,0,160,6,124,3,161,1,143,16,125,4,116,7,160,8, +- 124,4,100,4,161,2,125,5,87,0,100,0,4,0,4,0, +- 131,3,1,0,87,0,124,5,83,0,49,0,115,49,119,1, +- 1,0,1,0,1,0,89,0,1,0,87,0,124,5,83,0, +- 4,0,116,9,121,66,1,0,1,0,1,0,89,0,100,0, +- 83,0,119,0,41,5,78,122,5,37,100,46,37,100,114,44, +- 0,0,0,41,2,114,163,0,0,0,90,11,115,121,115,95, +- 118,101,114,115,105,111,110,114,10,0,0,0,41,10,218,11, +- 68,69,66,85,71,95,66,85,73,76,68,218,18,82,69,71, +- 73,83,84,82,89,95,75,69,89,95,68,69,66,85,71,218, +- 12,82,69,71,73,83,84,82,89,95,75,69,89,114,89,0, +- 0,0,114,15,0,0,0,218,12,118,101,114,115,105,111,110, +- 95,105,110,102,111,114,216,0,0,0,114,215,0,0,0,90, +- 10,81,117,101,114,121,86,97,108,117,101,114,76,0,0,0, +- 41,6,218,3,99,108,115,114,163,0,0,0,90,12,114,101, +- 103,105,115,116,114,121,95,107,101,121,114,20,0,0,0,90, +- 4,104,107,101,121,218,8,102,105,108,101,112,97,116,104,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,16, +- 95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121, +- 45,3,0,0,115,32,0,0,0,6,2,8,1,6,2,6, +- 1,16,1,6,255,2,2,12,1,14,1,12,255,4,4,18, +- 252,4,4,12,254,6,1,2,255,122,38,87,105,110,100,111, +- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, +- 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, +- 121,78,99,4,0,0,0,0,0,0,0,0,0,0,0,8, +- 0,0,0,8,0,0,0,67,0,0,0,115,120,0,0,0, +- 124,0,160,0,124,1,161,1,125,4,124,4,100,0,117,0, +- 114,11,100,0,83,0,122,6,116,1,124,4,131,1,1,0, +- 87,0,110,10,4,0,116,2,121,27,1,0,1,0,1,0, +- 89,0,100,0,83,0,119,0,116,3,131,0,68,0,93,26, +- 92,2,125,5,125,6,124,4,160,4,116,5,124,6,131,1, +- 161,1,114,57,116,6,106,7,124,1,124,5,124,1,124,4, +- 131,2,124,4,100,1,141,3,125,7,124,7,2,0,1,0, +- 83,0,113,31,100,0,83,0,41,2,78,114,204,0,0,0, +- 41,8,114,223,0,0,0,114,75,0,0,0,114,76,0,0, +- 0,114,208,0,0,0,114,58,0,0,0,114,136,0,0,0, +- 114,159,0,0,0,218,16,115,112,101,99,95,102,114,111,109, +- 95,108,111,97,100,101,114,41,8,114,221,0,0,0,114,163, +- 0,0,0,114,65,0,0,0,218,6,116,97,114,103,101,116, +- 114,222,0,0,0,114,164,0,0,0,114,212,0,0,0,114, +- 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,9,102,105,110,100,95,115,112,101,99,60,3, +- 0,0,115,34,0,0,0,10,2,8,1,4,1,2,1,12, +- 1,12,1,6,1,2,255,14,2,14,1,6,1,8,1,2, +- 1,6,254,8,3,2,252,4,255,122,31,87,105,110,100,111, +- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, +- 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, +- 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, +- 0,0,0,115,42,0,0,0,116,0,160,1,100,1,116,2, +- 161,2,1,0,124,0,160,3,124,1,124,2,161,2,125,3, +- 124,3,100,2,117,1,114,19,124,3,106,4,83,0,100,2, +- 83,0,41,3,122,106,70,105,110,100,32,109,111,100,117,108, +- 101,32,110,97,109,101,100,32,105,110,32,116,104,101,32,114, +- 101,103,105,115,116,114,121,46,10,10,32,32,32,32,32,32, +- 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, +- 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, +- 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, +- 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, +- 122,112,87,105,110,100,111,119,115,82,101,103,105,115,116,114, +- 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, +- 117,108,101,40,41,32,105,115,32,100,101,112,114,101,99,97, +- 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, +- 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, +- 116,104,111,110,32,51,46,49,50,59,32,117,115,101,32,102, +- 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, +- 97,100,78,169,5,114,99,0,0,0,114,100,0,0,0,114, +- 101,0,0,0,114,226,0,0,0,114,164,0,0,0,169,4, +- 114,221,0,0,0,114,163,0,0,0,114,65,0,0,0,114, +- 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, +- 76,3,0,0,115,14,0,0,0,6,7,2,2,4,254,12, +- 3,8,1,6,1,4,2,122,33,87,105,110,100,111,119,115, +- 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, +- 105,110,100,95,109,111,100,117,108,101,169,2,78,78,114,69, +- 0,0,0,41,15,114,150,0,0,0,114,149,0,0,0,114, +- 151,0,0,0,114,152,0,0,0,114,219,0,0,0,114,218, +- 0,0,0,218,11,95,77,83,95,87,73,78,68,79,87,83, +- 218,18,69,88,84,69,78,83,73,79,78,95,83,85,70,70, +- 73,88,69,83,114,217,0,0,0,218,12,115,116,97,116,105, +- 99,109,101,116,104,111,100,114,216,0,0,0,218,11,99,108, +- 97,115,115,109,101,116,104,111,100,114,223,0,0,0,114,226, +- 0,0,0,114,229,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,214,0,0, +- 0,26,3,0,0,115,30,0,0,0,8,0,4,2,2,3, +- 2,255,2,4,2,255,12,3,2,2,10,1,2,6,10,1, +- 2,14,12,1,2,15,16,1,114,214,0,0,0,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +- 0,0,64,0,0,0,115,48,0,0,0,101,0,90,1,100, +- 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, +- 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,100, +- 8,100,9,132,0,90,7,100,10,83,0,41,11,218,13,95, +- 76,111,97,100,101,114,66,97,115,105,99,115,122,83,66,97, +- 115,101,32,99,108,97,115,115,32,111,102,32,99,111,109,109, +- 111,110,32,99,111,100,101,32,110,101,101,100,101,100,32,98, +- 121,32,98,111,116,104,32,83,111,117,114,99,101,76,111,97, +- 100,101,114,32,97,110,100,10,32,32,32,32,83,111,117,114, +- 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, +- 46,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, +- 0,0,4,0,0,0,67,0,0,0,115,64,0,0,0,116, +- 0,124,0,160,1,124,1,161,1,131,1,100,1,25,0,125, +- 2,124,2,160,2,100,2,100,1,161,2,100,3,25,0,125, +- 3,124,1,160,3,100,2,161,1,100,4,25,0,125,4,124, +- 3,100,5,107,2,111,31,124,4,100,5,107,3,83,0,41, +- 6,122,141,67,111,110,99,114,101,116,101,32,105,109,112,108, +- 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, +- 115,112,101,99,116,76,111,97,100,101,114,46,105,115,95,112, +- 97,99,107,97,103,101,32,98,121,32,99,104,101,99,107,105, +- 110,103,32,105,102,10,32,32,32,32,32,32,32,32,116,104, +- 101,32,112,97,116,104,32,114,101,116,117,114,110,101,100,32, +- 98,121,32,103,101,116,95,102,105,108,101,110,97,109,101,32, +- 104,97,115,32,97,32,102,105,108,101,110,97,109,101,32,111, +- 102,32,39,95,95,105,110,105,116,95,95,46,112,121,39,46, +- 114,3,0,0,0,114,97,0,0,0,114,0,0,0,0,114, +- 44,0,0,0,218,8,95,95,105,110,105,116,95,95,41,4, +- 114,74,0,0,0,114,203,0,0,0,114,125,0,0,0,114, +- 104,0,0,0,41,5,114,143,0,0,0,114,163,0,0,0, +- 114,120,0,0,0,90,13,102,105,108,101,110,97,109,101,95, +- 98,97,115,101,90,9,116,97,105,108,95,110,97,109,101,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,206, +- 0,0,0,98,3,0,0,115,8,0,0,0,18,3,16,1, +- 14,1,16,1,122,24,95,76,111,97,100,101,114,66,97,115, +- 105,99,115,46,105,115,95,112,97,99,107,97,103,101,99,2, +- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, +- 0,0,0,67,0,0,0,114,23,0,0,0,169,2,122,42, +- 85,115,101,32,100,101,102,97,117,108,116,32,115,101,109,97, +- 110,116,105,99,115,32,102,111,114,32,109,111,100,117,108,101, +- 32,99,114,101,97,116,105,111,110,46,78,114,7,0,0,0, +- 169,2,114,143,0,0,0,114,210,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,13,99,114,101, +- 97,116,101,95,109,111,100,117,108,101,106,3,0,0,243,2, +- 0,0,0,4,0,122,27,95,76,111,97,100,101,114,66,97, +- 115,105,99,115,46,99,114,101,97,116,101,95,109,111,100,117, +- 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3, +- 0,0,0,5,0,0,0,67,0,0,0,115,56,0,0,0, +- 124,0,160,0,124,1,106,1,161,1,125,2,124,2,100,1, +- 117,0,114,18,116,2,100,2,160,3,124,1,106,1,161,1, +- 131,1,130,1,116,4,160,5,116,6,124,2,124,1,106,7, +- 161,3,1,0,100,1,83,0,41,3,122,19,69,120,101,99, +- 117,116,101,32,116,104,101,32,109,111,100,117,108,101,46,78, +- 122,52,99,97,110,110,111,116,32,108,111,97,100,32,109,111, +- 100,117,108,101,32,123,33,114,125,32,119,104,101,110,32,103, +- 101,116,95,99,111,100,101,40,41,32,114,101,116,117,114,110, +- 115,32,78,111,110,101,41,8,218,8,103,101,116,95,99,111, +- 100,101,114,150,0,0,0,114,142,0,0,0,114,89,0,0, +- 0,114,159,0,0,0,218,25,95,99,97,108,108,95,119,105, +- 116,104,95,102,114,97,109,101,115,95,114,101,109,111,118,101, +- 100,218,4,101,120,101,99,114,156,0,0,0,41,3,114,143, +- 0,0,0,218,6,109,111,100,117,108,101,114,188,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, +- 11,101,120,101,99,95,109,111,100,117,108,101,109,3,0,0, +- 115,12,0,0,0,12,2,8,1,4,1,8,1,4,255,20, +- 2,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115, +- 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, +- 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, +- 0,67,0,0,0,115,12,0,0,0,116,0,160,1,124,0, +- 124,1,161,2,83,0,41,1,122,26,84,104,105,115,32,109, +- 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, +- 116,101,100,46,41,2,114,159,0,0,0,218,17,95,108,111, +- 97,100,95,109,111,100,117,108,101,95,115,104,105,109,169,2, +- 114,143,0,0,0,114,163,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,11,108,111,97,100,95, +- 109,111,100,117,108,101,117,3,0,0,115,2,0,0,0,12, +- 3,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115, +- 46,108,111,97,100,95,109,111,100,117,108,101,78,41,8,114, +- 150,0,0,0,114,149,0,0,0,114,151,0,0,0,114,152, +- 0,0,0,114,206,0,0,0,114,239,0,0,0,114,245,0, +- 0,0,114,248,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,235,0,0,0, +- 93,3,0,0,115,12,0,0,0,8,0,4,2,8,3,8, +- 8,8,3,12,8,114,235,0,0,0,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, +- 0,0,0,115,74,0,0,0,101,0,90,1,100,0,90,2, +- 100,1,100,2,132,0,90,3,100,3,100,4,132,0,90,4, +- 100,5,100,6,132,0,90,5,100,7,100,8,132,0,90,6, +- 100,9,100,10,132,0,90,7,100,11,100,12,156,1,100,13, +- 100,14,132,2,90,8,100,15,100,16,132,0,90,9,100,17, +- 83,0,41,18,218,12,83,111,117,114,99,101,76,111,97,100, +- 101,114,99,2,0,0,0,0,0,0,0,0,0,0,0,2, +- 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, +- 116,0,130,1,41,1,122,165,79,112,116,105,111,110,97,108, +- 32,109,101,116,104,111,100,32,116,104,97,116,32,114,101,116, +- 117,114,110,115,32,116,104,101,32,109,111,100,105,102,105,99, +- 97,116,105,111,110,32,116,105,109,101,32,40,97,110,32,105, +- 110,116,41,32,102,111,114,32,116,104,101,10,32,32,32,32, +- 32,32,32,32,115,112,101,99,105,102,105,101,100,32,112,97, +- 116,104,32,40,97,32,115,116,114,41,46,10,10,32,32,32, +- 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114, +- 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, +- 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, +- 108,101,100,46,10,32,32,32,32,32,32,32,32,41,1,114, +- 76,0,0,0,169,2,114,143,0,0,0,114,65,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, +- 10,112,97,116,104,95,109,116,105,109,101,125,3,0,0,115, +- 2,0,0,0,4,6,122,23,83,111,117,114,99,101,76,111, +- 97,100,101,114,46,112,97,116,104,95,109,116,105,109,101,99, +- 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 4,0,0,0,67,0,0,0,115,14,0,0,0,100,1,124, +- 0,160,0,124,1,161,1,105,1,83,0,41,2,97,158,1, +- 0,0,79,112,116,105,111,110,97,108,32,109,101,116,104,111, +- 100,32,114,101,116,117,114,110,105,110,103,32,97,32,109,101, +- 116,97,100,97,116,97,32,100,105,99,116,32,102,111,114,32, +- 116,104,101,32,115,112,101,99,105,102,105,101,100,10,32,32, +- 32,32,32,32,32,32,112,97,116,104,32,40,97,32,115,116, +- 114,41,46,10,10,32,32,32,32,32,32,32,32,80,111,115, +- 115,105,98,108,101,32,107,101,121,115,58,10,32,32,32,32, +- 32,32,32,32,45,32,39,109,116,105,109,101,39,32,40,109, +- 97,110,100,97,116,111,114,121,41,32,105,115,32,116,104,101, +- 32,110,117,109,101,114,105,99,32,116,105,109,101,115,116,97, +- 109,112,32,111,102,32,108,97,115,116,32,115,111,117,114,99, +- 101,10,32,32,32,32,32,32,32,32,32,32,99,111,100,101, +- 32,109,111,100,105,102,105,99,97,116,105,111,110,59,10,32, +- 32,32,32,32,32,32,32,45,32,39,115,105,122,101,39,32, +- 40,111,112,116,105,111,110,97,108,41,32,105,115,32,116,104, +- 101,32,115,105,122,101,32,105,110,32,98,121,116,101,115,32, +- 111,102,32,116,104,101,32,115,111,117,114,99,101,32,99,111, +- 100,101,46,10,10,32,32,32,32,32,32,32,32,73,109,112, +- 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, +- 101,116,104,111,100,32,97,108,108,111,119,115,32,116,104,101, +- 32,108,111,97,100,101,114,32,116,111,32,114,101,97,100,32, +- 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, +- 32,32,32,32,32,32,32,32,82,97,105,115,101,115,32,79, +- 83,69,114,114,111,114,32,119,104,101,110,32,116,104,101,32, +- 112,97,116,104,32,99,97,110,110,111,116,32,98,101,32,104, +- 97,110,100,108,101,100,46,10,32,32,32,32,32,32,32,32, +- 114,193,0,0,0,41,1,114,251,0,0,0,114,250,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,10,112,97,116,104,95,115,116,97,116,115,133,3,0,0, +- 115,2,0,0,0,14,12,122,23,83,111,117,114,99,101,76, +- 111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,115, +- 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, +- 0,4,0,0,0,67,0,0,0,115,12,0,0,0,124,0, +- 160,0,124,2,124,3,161,2,83,0,41,1,122,228,79,112, +- 116,105,111,110,97,108,32,109,101,116,104,111,100,32,119,104, +- 105,99,104,32,119,114,105,116,101,115,32,100,97,116,97,32, +- 40,98,121,116,101,115,41,32,116,111,32,97,32,102,105,108, +- 101,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, +- 10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,101, +- 110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,111, +- 100,32,97,108,108,111,119,115,32,102,111,114,32,116,104,101, +- 32,119,114,105,116,105,110,103,32,111,102,32,98,121,116,101, +- 99,111,100,101,32,102,105,108,101,115,46,10,10,32,32,32, +- 32,32,32,32,32,84,104,101,32,115,111,117,114,99,101,32, +- 112,97,116,104,32,105,115,32,110,101,101,100,101,100,32,105, +- 110,32,111,114,100,101,114,32,116,111,32,99,111,114,114,101, +- 99,116,108,121,32,116,114,97,110,115,102,101,114,32,112,101, +- 114,109,105,115,115,105,111,110,115,10,32,32,32,32,32,32, +- 32,32,41,1,218,8,115,101,116,95,100,97,116,97,41,4, +- 114,143,0,0,0,114,134,0,0,0,90,10,99,97,99,104, +- 101,95,112,97,116,104,114,41,0,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,218,15,95,99,97,99, +- 104,101,95,98,121,116,101,99,111,100,101,147,3,0,0,115, +- 2,0,0,0,12,8,122,28,83,111,117,114,99,101,76,111, +- 97,100,101,114,46,95,99,97,99,104,101,95,98,121,116,101, +- 99,111,100,101,99,3,0,0,0,0,0,0,0,0,0,0, +- 0,3,0,0,0,1,0,0,0,67,0,0,0,114,23,0, +- 0,0,41,2,122,150,79,112,116,105,111,110,97,108,32,109, +- 101,116,104,111,100,32,119,104,105,99,104,32,119,114,105,116, +- 101,115,32,100,97,116,97,32,40,98,121,116,101,115,41,32, +- 116,111,32,97,32,102,105,108,101,32,112,97,116,104,32,40, +- 97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,32, +- 32,73,109,112,108,101,109,101,110,116,105,110,103,32,116,104, +- 105,115,32,109,101,116,104,111,100,32,97,108,108,111,119,115, +- 32,102,111,114,32,116,104,101,32,119,114,105,116,105,110,103, +- 32,111,102,32,98,121,116,101,99,111,100,101,32,102,105,108, +- 101,115,46,10,32,32,32,32,32,32,32,32,78,114,7,0, +- 0,0,41,3,114,143,0,0,0,114,65,0,0,0,114,41, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,253,0,0,0,157,3,0,0,114,240,0,0,0, +- 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,115, +- 101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0, +- 0,0,0,0,5,0,0,0,10,0,0,0,67,0,0,0, +- 115,70,0,0,0,124,0,160,0,124,1,161,1,125,2,122, +- 10,124,0,160,1,124,2,161,1,125,3,87,0,116,4,124, +- 3,131,1,83,0,4,0,116,2,121,34,1,0,125,4,1, +- 0,122,7,116,3,100,1,124,1,100,2,141,2,124,4,130, +- 2,100,3,125,4,126,4,119,1,119,0,41,4,122,52,67, +- 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, +- 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, +- 116,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, +- 99,101,46,122,39,115,111,117,114,99,101,32,110,111,116,32, +- 97,118,97,105,108,97,98,108,101,32,116,104,114,111,117,103, +- 104,32,103,101,116,95,100,97,116,97,40,41,114,140,0,0, +- 0,78,41,5,114,203,0,0,0,218,8,103,101,116,95,100, +- 97,116,97,114,76,0,0,0,114,142,0,0,0,114,200,0, +- 0,0,41,5,114,143,0,0,0,114,163,0,0,0,114,65, +- 0,0,0,114,198,0,0,0,218,3,101,120,99,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,218,10,103,101, +- 116,95,115,111,117,114,99,101,164,3,0,0,115,24,0,0, +- 0,10,2,2,1,12,1,8,4,14,253,4,1,2,1,4, +- 255,2,1,2,255,8,128,2,255,122,23,83,111,117,114,99, +- 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, +- 99,101,114,130,0,0,0,41,1,218,9,95,111,112,116,105, +- 109,105,122,101,99,3,0,0,0,0,0,0,0,1,0,0, +- 0,4,0,0,0,8,0,0,0,67,0,0,0,115,22,0, +- 0,0,116,0,106,1,116,2,124,1,124,2,100,1,100,2, +- 124,3,100,3,141,6,83,0,41,4,122,130,82,101,116,117, +- 114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,101, +- 99,116,32,99,111,109,112,105,108,101,100,32,102,114,111,109, +- 32,115,111,117,114,99,101,46,10,10,32,32,32,32,32,32, +- 32,32,84,104,101,32,39,100,97,116,97,39,32,97,114,103, +- 117,109,101,110,116,32,99,97,110,32,98,101,32,97,110,121, +- 32,111,98,106,101,99,116,32,116,121,112,101,32,116,104,97, +- 116,32,99,111,109,112,105,108,101,40,41,32,115,117,112,112, +- 111,114,116,115,46,10,32,32,32,32,32,32,32,32,114,243, +- 0,0,0,84,41,2,218,12,100,111,110,116,95,105,110,104, +- 101,114,105,116,114,108,0,0,0,41,3,114,159,0,0,0, +- 114,242,0,0,0,218,7,99,111,109,112,105,108,101,41,4, +- 114,143,0,0,0,114,41,0,0,0,114,65,0,0,0,114, +- 2,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,14,115,111,117,114,99,101,95,116,111,95,99, +- 111,100,101,174,3,0,0,115,6,0,0,0,12,5,4,1, +- 6,255,122,27,83,111,117,114,99,101,76,111,97,100,101,114, +- 46,115,111,117,114,99,101,95,116,111,95,99,111,100,101,99, +- 2,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0, +- 9,0,0,0,67,0,0,0,115,2,2,0,0,124,0,160, +- 0,124,1,161,1,125,2,100,1,125,3,100,1,125,4,100, +- 1,125,5,100,2,125,6,100,3,125,7,122,6,116,1,124, +- 2,131,1,125,8,87,0,110,11,4,0,116,2,121,32,1, +- 0,1,0,1,0,100,1,125,8,89,0,110,144,119,0,122, +- 7,124,0,160,3,124,2,161,1,125,9,87,0,110,9,4, +- 0,116,4,121,49,1,0,1,0,1,0,89,0,110,127,119, +- 0,116,5,124,9,100,4,25,0,131,1,125,3,122,7,124, +- 0,160,6,124,8,161,1,125,10,87,0,110,9,4,0,116, +- 4,121,72,1,0,1,0,1,0,89,0,110,104,119,0,124, +- 1,124,8,100,5,156,2,125,11,122,71,116,7,124,10,124, +- 1,124,11,131,3,125,12,116,8,124,10,131,1,100,6,100, +- 1,133,2,25,0,125,13,124,12,100,7,64,0,100,8,107, +- 3,125,6,124,6,114,138,124,12,100,9,64,0,100,8,107, +- 3,125,7,116,9,106,10,100,10,107,3,114,137,124,7,115, +- 119,116,9,106,10,100,11,107,2,114,137,124,0,160,6,124, +- 2,161,1,125,4,116,9,160,11,116,12,124,4,161,2,125, +- 5,116,13,124,10,124,5,124,1,124,11,131,4,1,0,110, +- 10,116,14,124,10,124,3,124,9,100,12,25,0,124,1,124, +- 11,131,5,1,0,87,0,110,11,4,0,116,15,116,16,102, +- 2,121,160,1,0,1,0,1,0,89,0,110,16,119,0,116, +- 17,160,18,100,13,124,8,124,2,161,3,1,0,116,19,124, +- 13,124,1,124,8,124,2,100,14,141,4,83,0,124,4,100, +- 1,117,0,114,185,124,0,160,6,124,2,161,1,125,4,124, +- 0,160,20,124,4,124,2,161,2,125,14,116,17,160,18,100, +- 15,124,2,161,2,1,0,116,21,106,22,115,255,124,8,100, +- 1,117,1,114,255,124,3,100,1,117,1,114,255,124,6,114, +- 226,124,5,100,1,117,0,114,219,116,9,160,11,124,4,161, +- 1,125,5,116,23,124,14,124,5,124,7,131,3,125,10,110, +- 8,116,24,124,14,124,3,116,25,124,4,131,1,131,3,125, +- 10,122,10,124,0,160,26,124,2,124,8,124,10,161,3,1, +- 0,87,0,124,14,83,0,4,0,116,2,121,254,1,0,1, +- 0,1,0,89,0,124,14,83,0,119,0,124,14,83,0,41, +- 16,122,190,67,111,110,99,114,101,116,101,32,105,109,112,108, +- 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, +- 115,112,101,99,116,76,111,97,100,101,114,46,103,101,116,95, +- 99,111,100,101,46,10,10,32,32,32,32,32,32,32,32,82, +- 101,97,100,105,110,103,32,111,102,32,98,121,116,101,99,111, +- 100,101,32,114,101,113,117,105,114,101,115,32,112,97,116,104, +- 95,115,116,97,116,115,32,116,111,32,98,101,32,105,109,112, +- 108,101,109,101,110,116,101,100,46,32,84,111,32,119,114,105, +- 116,101,10,32,32,32,32,32,32,32,32,98,121,116,101,99, +- 111,100,101,44,32,115,101,116,95,100,97,116,97,32,109,117, +- 115,116,32,97,108,115,111,32,98,101,32,105,109,112,108,101, +- 109,101,110,116,101,100,46,10,10,32,32,32,32,32,32,32, +- 32,78,70,84,114,193,0,0,0,114,183,0,0,0,114,169, +- 0,0,0,114,3,0,0,0,114,0,0,0,0,114,44,0, +- 0,0,90,5,110,101,118,101,114,90,6,97,108,119,97,121, +- 115,218,4,115,105,122,101,122,13,123,125,32,109,97,116,99, +- 104,101,115,32,123,125,41,3,114,141,0,0,0,114,132,0, +- 0,0,114,134,0,0,0,122,19,99,111,100,101,32,111,98, +- 106,101,99,116,32,102,114,111,109,32,123,125,41,27,114,203, +- 0,0,0,114,121,0,0,0,114,107,0,0,0,114,252,0, +- 0,0,114,76,0,0,0,114,33,0,0,0,114,255,0,0, +- 0,114,176,0,0,0,218,10,109,101,109,111,114,121,118,105, +- 101,119,114,187,0,0,0,90,21,99,104,101,99,107,95,104, +- 97,115,104,95,98,97,115,101,100,95,112,121,99,115,114,181, +- 0,0,0,218,17,95,82,65,87,95,77,65,71,73,67,95, +- 78,85,77,66,69,82,114,182,0,0,0,114,180,0,0,0, +- 114,142,0,0,0,114,174,0,0,0,114,159,0,0,0,114, +- 173,0,0,0,114,189,0,0,0,114,5,1,0,0,114,15, +- 0,0,0,218,19,100,111,110,116,95,119,114,105,116,101,95, +- 98,121,116,101,99,111,100,101,114,195,0,0,0,114,194,0, +- 0,0,114,4,0,0,0,114,254,0,0,0,41,15,114,143, +- 0,0,0,114,163,0,0,0,114,134,0,0,0,114,178,0, +- 0,0,114,198,0,0,0,114,181,0,0,0,90,10,104,97, +- 115,104,95,98,97,115,101,100,90,12,99,104,101,99,107,95, +- 115,111,117,114,99,101,114,132,0,0,0,218,2,115,116,114, +- 41,0,0,0,114,175,0,0,0,114,16,0,0,0,90,10, +- 98,121,116,101,115,95,100,97,116,97,90,11,99,111,100,101, +- 95,111,98,106,101,99,116,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,241,0,0,0,182,3,0,0,115, +- 170,0,0,0,10,7,4,1,4,1,4,1,4,1,4,1, +- 2,1,12,1,12,1,8,1,2,255,2,3,14,1,12,1, +- 4,1,2,255,12,3,2,1,14,1,12,1,4,1,2,255, +- 2,4,2,1,6,254,2,4,12,1,16,1,12,1,4,1, +- 12,1,10,1,2,1,2,255,8,2,2,254,10,3,4,1, +- 2,1,2,1,4,254,8,4,2,1,4,255,2,128,2,3, +- 2,1,2,1,6,1,2,1,2,1,4,251,4,128,16,7, +- 4,1,2,255,8,3,2,1,4,255,6,2,2,1,2,1, +- 6,254,8,3,10,1,12,1,12,1,14,1,6,1,2,255, +- 4,2,8,1,10,1,14,1,6,2,6,1,4,255,2,2, +- 16,1,4,3,12,254,2,1,4,1,2,254,4,2,122,21, +- 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, +- 95,99,111,100,101,78,41,10,114,150,0,0,0,114,149,0, +- 0,0,114,151,0,0,0,114,251,0,0,0,114,252,0,0, +- 0,114,254,0,0,0,114,253,0,0,0,114,1,1,0,0, +- 114,5,1,0,0,114,241,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,249, +- 0,0,0,123,3,0,0,115,16,0,0,0,8,0,8,2, +- 8,8,8,14,8,10,8,7,14,10,12,8,114,249,0,0, +- 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,4,0,0,0,0,0,0,0,115,92,0,0,0,101, +- 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, +- 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, +- 0,90,6,101,7,135,0,102,1,100,8,100,9,132,8,131, +- 1,90,8,101,7,100,10,100,11,132,0,131,1,90,9,100, +- 12,100,13,132,0,90,10,101,7,100,14,100,15,132,0,131, +- 1,90,11,135,0,4,0,90,12,83,0,41,16,218,10,70, +- 105,108,101,76,111,97,100,101,114,122,103,66,97,115,101,32, +- 102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115, +- 115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110, +- 116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114, +- 111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116, +- 104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32, +- 102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103, +- 101,46,99,3,0,0,0,0,0,0,0,0,0,0,0,3, +- 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, +- 124,1,124,0,95,0,124,2,124,0,95,1,100,1,83,0, +- 41,2,122,75,67,97,99,104,101,32,116,104,101,32,109,111, +- 100,117,108,101,32,110,97,109,101,32,97,110,100,32,116,104, +- 101,32,112,97,116,104,32,116,111,32,116,104,101,32,102,105, +- 108,101,32,102,111,117,110,100,32,98,121,32,116,104,101,10, +- 32,32,32,32,32,32,32,32,102,105,110,100,101,114,46,78, +- 114,183,0,0,0,41,3,114,143,0,0,0,114,163,0,0, +- 0,114,65,0,0,0,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,114,236,0,0,0,16,4,0,0,115,4, +- 0,0,0,6,3,10,1,122,19,70,105,108,101,76,111,97, +- 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, +- 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, +- 0,67,0,0,0,243,24,0,0,0,124,0,106,0,124,1, +- 106,0,107,2,111,11,124,0,106,1,124,1,106,1,107,2, +- 83,0,114,69,0,0,0,169,2,218,9,95,95,99,108,97, +- 115,115,95,95,114,156,0,0,0,169,2,114,143,0,0,0, +- 90,5,111,116,104,101,114,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,218,6,95,95,101,113,95,95,22,4, +- 0,0,243,6,0,0,0,12,1,10,1,2,255,122,17,70, +- 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +- 0,3,0,0,0,67,0,0,0,243,20,0,0,0,116,0, +- 124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0, +- 83,0,114,69,0,0,0,169,3,218,4,104,97,115,104,114, +- 141,0,0,0,114,65,0,0,0,169,1,114,143,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, +- 8,95,95,104,97,115,104,95,95,26,4,0,0,243,2,0, +- 0,0,20,1,122,19,70,105,108,101,76,111,97,100,101,114, +- 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, +- 0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0, +- 0,0,115,16,0,0,0,116,0,116,1,124,0,131,2,160, +- 2,124,1,161,1,83,0,41,1,122,100,76,111,97,100,32, +- 97,32,109,111,100,117,108,101,32,102,114,111,109,32,97,32, +- 102,105,108,101,46,10,10,32,32,32,32,32,32,32,32,84, +- 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, +- 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101, +- 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, +- 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,41, +- 3,218,5,115,117,112,101,114,114,11,1,0,0,114,248,0, +- 0,0,114,247,0,0,0,169,1,114,14,1,0,0,114,7, +- 0,0,0,114,8,0,0,0,114,248,0,0,0,29,4,0, +- 0,115,2,0,0,0,16,10,122,22,70,105,108,101,76,111, +- 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, +- 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,1,0,0,0,67,0,0,0,243,6,0,0,0,124,0, +- 106,0,83,0,169,1,122,58,82,101,116,117,114,110,32,116, +- 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, +- 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, +- 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, +- 114,46,114,71,0,0,0,114,247,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,203,0,0,0, +- 41,4,0,0,243,2,0,0,0,6,3,122,23,70,105,108, +- 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, +- 110,97,109,101,99,2,0,0,0,0,0,0,0,0,0,0, +- 0,3,0,0,0,8,0,0,0,67,0,0,0,115,128,0, +- 0,0,116,0,124,0,116,1,116,2,102,2,131,2,114,36, +- 116,3,160,4,116,5,124,1,131,1,161,1,143,12,125,2, +- 124,2,160,6,161,0,87,0,2,0,100,1,4,0,4,0, +- 131,3,1,0,83,0,49,0,115,29,119,1,1,0,1,0, +- 1,0,89,0,1,0,100,1,83,0,116,3,160,7,124,1, +- 100,2,161,2,143,12,125,2,124,2,160,6,161,0,87,0, +- 2,0,100,1,4,0,4,0,131,3,1,0,83,0,49,0, +- 115,57,119,1,1,0,1,0,1,0,89,0,1,0,100,1, +- 83,0,41,3,122,39,82,101,116,117,114,110,32,116,104,101, +- 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, +- 97,115,32,114,97,119,32,98,121,116,101,115,46,78,218,1, +- 114,41,8,114,185,0,0,0,114,249,0,0,0,218,19,69, +- 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, +- 101,114,114,91,0,0,0,90,9,111,112,101,110,95,99,111, +- 100,101,114,109,0,0,0,90,4,114,101,97,100,114,92,0, +- 0,0,41,3,114,143,0,0,0,114,65,0,0,0,114,94, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,255,0,0,0,46,4,0,0,115,14,0,0,0, +- 14,2,16,1,6,1,36,255,14,3,6,1,36,255,122,19, +- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100, +- 97,116,97,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 3,0,0,0,2,0,0,0,67,0,0,0,115,20,0,0, +- 0,100,1,100,2,108,0,109,1,125,2,1,0,124,2,124, +- 0,131,1,83,0,41,3,78,114,0,0,0,0,41,1,218, +- 10,70,105,108,101,82,101,97,100,101,114,41,2,218,17,105, +- 109,112,111,114,116,108,105,98,46,114,101,97,100,101,114,115, +- 114,31,1,0,0,41,3,114,143,0,0,0,114,244,0,0, +- 0,114,31,1,0,0,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,19,103,101,116,95,114,101,115,111,117, +- 114,99,101,95,114,101,97,100,101,114,55,4,0,0,115,4, +- 0,0,0,12,2,8,1,122,30,70,105,108,101,76,111,97, +- 100,101,114,46,103,101,116,95,114,101,115,111,117,114,99,101, +- 95,114,101,97,100,101,114,41,13,114,150,0,0,0,114,149, +- 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, +- 0,0,114,16,1,0,0,114,22,1,0,0,114,160,0,0, +- 0,114,248,0,0,0,114,203,0,0,0,114,255,0,0,0, +- 114,33,1,0,0,90,13,95,95,99,108,97,115,115,99,101, +- 108,108,95,95,114,7,0,0,0,114,7,0,0,0,114,25, +- 1,0,0,114,8,0,0,0,114,11,1,0,0,11,4,0, +- 0,115,24,0,0,0,8,0,4,2,8,3,8,6,8,4, +- 2,3,14,1,2,11,10,1,8,4,2,9,18,1,114,11, +- 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,3,0,0,0,64,0,0,0,115,46,0,0, ++ 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, ++ 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, ++ 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, ++ 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, ++ 99,116,32,111,114,32,119,104,101,110,32,116,104,101,32,102, ++ 108,97,103,115,10,32,32,32,32,102,105,101,108,100,32,105, ++ 115,32,105,110,118,97,108,105,100,46,32,69,79,70,69,114, ++ 114,111,114,32,105,115,32,114,97,105,115,101,100,32,119,104, ++ 101,110,32,116,104,101,32,100,97,116,97,32,105,115,32,102, ++ 111,117,110,100,32,116,111,32,98,101,32,116,114,117,110,99, ++ 97,116,101,100,46,10,10,32,32,32,32,78,114,33,0,0, ++ 0,122,20,98,97,100,32,109,97,103,105,99,32,110,117,109, ++ 98,101,114,32,105,110,32,122,2,58,32,250,2,123,125,233, ++ 16,0,0,0,122,40,114,101,97,99,104,101,100,32,69,79, ++ 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, ++ 112,121,99,32,104,101,97,100,101,114,32,111,102,32,233,8, ++ 0,0,0,233,252,255,255,255,122,14,105,110,118,97,108,105, ++ 100,32,102,108,97,103,115,32,122,4,32,105,110,32,41,7, ++ 218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,160, ++ 0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,101, ++ 115,115,97,103,101,114,143,0,0,0,114,5,0,0,0,218, ++ 8,69,79,70,69,114,114,111,114,114,44,0,0,0,41,6, ++ 114,43,0,0,0,114,142,0,0,0,218,11,101,120,99,95, ++ 100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,119, ++ 0,0,0,114,17,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,218,13,95,99,108,97,115,115,105, ++ 102,121,95,112,121,99,77,2,0,0,115,28,0,0,0,12, ++ 16,8,1,16,1,12,1,16,1,12,1,10,1,12,1,8, ++ 1,16,1,8,2,16,1,16,1,4,1,114,177,0,0,0, ++ 99,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0, ++ 0,4,0,0,0,67,0,0,0,115,124,0,0,0,116,0, ++ 124,0,100,1,100,2,133,2,25,0,131,1,124,1,100,3, ++ 64,0,107,3,114,31,100,4,124,3,155,2,157,2,125,5, ++ 116,1,160,2,100,5,124,5,161,2,1,0,116,3,124,5, ++ 102,1,105,0,124,4,164,1,142,1,130,1,124,2,100,6, ++ 117,1,114,58,116,0,124,0,100,2,100,7,133,2,25,0, ++ 131,1,124,2,100,3,64,0,107,3,114,60,116,3,100,4, ++ 124,3,155,2,157,2,102,1,105,0,124,4,164,1,142,1, ++ 130,1,100,6,83,0,100,6,83,0,41,8,97,7,2,0, ++ 0,86,97,108,105,100,97,116,101,32,97,32,112,121,99,32, ++ 97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,114, ++ 99,101,32,108,97,115,116,45,109,111,100,105,102,105,101,100, ++ 32,116,105,109,101,46,10,10,32,32,32,32,42,100,97,116, ++ 97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,110, ++ 116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,105, ++ 108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,105, ++ 114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,101, ++ 10,32,32,32,32,114,101,113,117,105,114,101,100,46,41,10, ++ 10,32,32,32,32,42,115,111,117,114,99,101,95,109,116,105, ++ 109,101,42,32,105,115,32,116,104,101,32,108,97,115,116,32, ++ 109,111,100,105,102,105,101,100,32,116,105,109,101,115,116,97, ++ 109,112,32,111,102,32,116,104,101,32,115,111,117,114,99,101, ++ 32,102,105,108,101,46,10,10,32,32,32,32,42,115,111,117, ++ 114,99,101,95,115,105,122,101,42,32,105,115,32,78,111,110, ++ 101,32,111,114,32,116,104,101,32,115,105,122,101,32,111,102, ++ 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, ++ 32,105,110,32,98,121,116,101,115,46,10,10,32,32,32,32, ++ 42,110,97,109,101,42,32,105,115,32,116,104,101,32,110,97, ++ 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, ++ 32,98,101,105,110,103,32,105,109,112,111,114,116,101,100,46, ++ 32,73,116,32,105,115,32,117,115,101,100,32,102,111,114,32, ++ 108,111,103,103,105,110,103,46,10,10,32,32,32,32,42,101, ++ 120,99,95,100,101,116,97,105,108,115,42,32,105,115,32,97, ++ 32,100,105,99,116,105,111,110,97,114,121,32,112,97,115,115, ++ 101,100,32,116,111,32,73,109,112,111,114,116,69,114,114,111, ++ 114,32,105,102,32,105,116,32,114,97,105,115,101,100,32,102, ++ 111,114,10,32,32,32,32,105,109,112,114,111,118,101,100,32, ++ 100,101,98,117,103,103,105,110,103,46,10,10,32,32,32,32, ++ 65,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, ++ 115,32,114,97,105,115,101,100,32,105,102,32,116,104,101,32, ++ 98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,108, ++ 101,46,10,10,32,32,32,32,114,171,0,0,0,233,12,0, ++ 0,0,114,32,0,0,0,122,22,98,121,116,101,99,111,100, ++ 101,32,105,115,32,115,116,97,108,101,32,102,111,114,32,114, ++ 169,0,0,0,78,114,170,0,0,0,41,4,114,44,0,0, ++ 0,114,160,0,0,0,114,174,0,0,0,114,143,0,0,0, ++ 41,6,114,43,0,0,0,218,12,115,111,117,114,99,101,95, ++ 109,116,105,109,101,218,11,115,111,117,114,99,101,95,115,105, ++ 122,101,114,142,0,0,0,114,176,0,0,0,114,119,0,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 218,23,95,118,97,108,105,100,97,116,101,95,116,105,109,101, ++ 115,116,97,109,112,95,112,121,99,110,2,0,0,115,18,0, ++ 0,0,24,19,10,1,12,1,16,1,8,1,22,1,2,255, ++ 22,2,8,254,114,181,0,0,0,99,4,0,0,0,0,0, ++ 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, ++ 0,0,115,42,0,0,0,124,0,100,1,100,2,133,2,25, ++ 0,124,1,107,3,114,19,116,0,100,3,124,2,155,2,157, ++ 2,102,1,105,0,124,3,164,1,142,1,130,1,100,4,83, ++ 0,41,5,97,243,1,0,0,86,97,108,105,100,97,116,101, ++ 32,97,32,104,97,115,104,45,98,97,115,101,100,32,112,121, ++ 99,32,98,121,32,99,104,101,99,107,105,110,103,32,116,104, ++ 101,32,114,101,97,108,32,115,111,117,114,99,101,32,104,97, ++ 115,104,32,97,103,97,105,110,115,116,32,116,104,101,32,111, ++ 110,101,32,105,110,10,32,32,32,32,116,104,101,32,112,121, ++ 99,32,104,101,97,100,101,114,46,10,10,32,32,32,32,42, ++ 100,97,116,97,42,32,105,115,32,116,104,101,32,99,111,110, ++ 116,101,110,116,115,32,111,102,32,116,104,101,32,112,121,99, ++ 32,102,105,108,101,46,32,40,79,110,108,121,32,116,104,101, ++ 32,102,105,114,115,116,32,49,54,32,98,121,116,101,115,32, ++ 97,114,101,10,32,32,32,32,114,101,113,117,105,114,101,100, ++ 46,41,10,10,32,32,32,32,42,115,111,117,114,99,101,95, ++ 104,97,115,104,42,32,105,115,32,116,104,101,32,105,109,112, ++ 111,114,116,108,105,98,46,117,116,105,108,46,115,111,117,114, ++ 99,101,95,104,97,115,104,40,41,32,111,102,32,116,104,101, ++ 32,115,111,117,114,99,101,32,102,105,108,101,46,10,10,32, ++ 32,32,32,42,110,97,109,101,42,32,105,115,32,116,104,101, ++ 32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,100, ++ 117,108,101,32,98,101,105,110,103,32,105,109,112,111,114,116, ++ 101,100,46,32,73,116,32,105,115,32,117,115,101,100,32,102, ++ 111,114,32,108,111,103,103,105,110,103,46,10,10,32,32,32, ++ 32,42,101,120,99,95,100,101,116,97,105,108,115,42,32,105, ++ 115,32,97,32,100,105,99,116,105,111,110,97,114,121,32,112, ++ 97,115,115,101,100,32,116,111,32,73,109,112,111,114,116,69, ++ 114,114,111,114,32,105,102,32,105,116,32,114,97,105,115,101, ++ 100,32,102,111,114,10,32,32,32,32,105,109,112,114,111,118, ++ 101,100,32,100,101,98,117,103,103,105,110,103,46,10,10,32, ++ 32,32,32,65,110,32,73,109,112,111,114,116,69,114,114,111, ++ 114,32,105,115,32,114,97,105,115,101,100,32,105,102,32,116, ++ 104,101,32,98,121,116,101,99,111,100,101,32,105,115,32,115, ++ 116,97,108,101,46,10,10,32,32,32,32,114,171,0,0,0, ++ 114,170,0,0,0,122,46,104,97,115,104,32,105,110,32,98, ++ 121,116,101,99,111,100,101,32,100,111,101,115,110,39,116,32, ++ 109,97,116,99,104,32,104,97,115,104,32,111,102,32,115,111, ++ 117,114,99,101,32,78,41,1,114,143,0,0,0,41,4,114, ++ 43,0,0,0,218,11,115,111,117,114,99,101,95,104,97,115, ++ 104,114,142,0,0,0,114,176,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,218,18,95,118,97,108, ++ 105,100,97,116,101,95,104,97,115,104,95,112,121,99,138,2, ++ 0,0,115,14,0,0,0,16,17,2,1,8,1,4,255,2, ++ 2,6,254,4,255,114,183,0,0,0,99,4,0,0,0,0, ++ 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, ++ 0,0,0,115,76,0,0,0,116,0,160,1,124,0,161,1, ++ 125,4,116,2,124,4,116,3,131,2,114,28,116,4,160,5, ++ 100,1,124,2,161,2,1,0,124,3,100,2,117,1,114,26, ++ 116,6,160,7,124,4,124,3,161,2,1,0,124,4,83,0, ++ 116,8,100,3,160,9,124,2,161,1,124,1,124,2,100,4, ++ 141,3,130,1,41,5,122,35,67,111,109,112,105,108,101,32, ++ 98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,110, ++ 100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,100, ++ 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,33, ++ 114,125,78,122,23,78,111,110,45,99,111,100,101,32,111,98, ++ 106,101,99,116,32,105,110,32,123,33,114,125,169,2,114,142, ++ 0,0,0,114,67,0,0,0,41,10,218,7,109,97,114,115, ++ 104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,110, ++ 115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,121, ++ 112,101,114,160,0,0,0,114,174,0,0,0,218,4,95,105, ++ 109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,101, ++ 110,97,109,101,114,143,0,0,0,114,91,0,0,0,41,5, ++ 114,43,0,0,0,114,142,0,0,0,114,133,0,0,0,114, ++ 135,0,0,0,218,4,99,111,100,101,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,17,95,99,111,109,112, ++ 105,108,101,95,98,121,116,101,99,111,100,101,162,2,0,0, ++ 115,18,0,0,0,10,2,10,1,12,1,8,1,12,1,4, ++ 1,10,2,4,1,6,255,114,190,0,0,0,99,3,0,0, ++ 0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0, ++ 0,67,0,0,0,115,70,0,0,0,116,0,116,1,131,1, ++ 125,3,124,3,160,2,116,3,100,1,131,1,161,1,1,0, ++ 124,3,160,2,116,3,124,1,131,1,161,1,1,0,124,3, ++ 160,2,116,3,124,2,131,1,161,1,1,0,124,3,160,2, ++ 116,4,160,5,124,0,161,1,161,1,1,0,124,3,83,0, ++ 41,2,122,43,80,114,111,100,117,99,101,32,116,104,101,32, ++ 100,97,116,97,32,102,111,114,32,97,32,116,105,109,101,115, ++ 116,97,109,112,45,98,97,115,101,100,32,112,121,99,46,114, ++ 0,0,0,0,41,6,218,9,98,121,116,101,97,114,114,97, ++ 121,114,173,0,0,0,218,6,101,120,116,101,110,100,114,38, ++ 0,0,0,114,185,0,0,0,218,5,100,117,109,112,115,41, ++ 4,114,189,0,0,0,218,5,109,116,105,109,101,114,180,0, ++ 0,0,114,43,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,22,95,99,111,100,101,95,116,111, ++ 95,116,105,109,101,115,116,97,109,112,95,112,121,99,175,2, ++ 0,0,115,12,0,0,0,8,2,14,1,14,1,14,1,16, ++ 1,4,1,114,195,0,0,0,84,99,3,0,0,0,0,0, ++ 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, ++ 0,0,115,80,0,0,0,116,0,116,1,131,1,125,3,100, ++ 1,124,2,100,1,62,0,66,0,125,4,124,3,160,2,116, ++ 3,124,4,131,1,161,1,1,0,116,4,124,1,131,1,100, ++ 2,107,2,115,25,74,0,130,1,124,3,160,2,124,1,161, ++ 1,1,0,124,3,160,2,116,5,160,6,124,0,161,1,161, ++ 1,1,0,124,3,83,0,41,3,122,38,80,114,111,100,117, ++ 99,101,32,116,104,101,32,100,97,116,97,32,102,111,114,32, ++ 97,32,104,97,115,104,45,98,97,115,101,100,32,112,121,99, ++ 46,114,4,0,0,0,114,171,0,0,0,41,7,114,191,0, ++ 0,0,114,173,0,0,0,114,192,0,0,0,114,38,0,0, ++ 0,114,5,0,0,0,114,185,0,0,0,114,193,0,0,0, ++ 41,5,114,189,0,0,0,114,182,0,0,0,90,7,99,104, ++ 101,99,107,101,100,114,43,0,0,0,114,17,0,0,0,114, ++ 8,0,0,0,114,8,0,0,0,114,9,0,0,0,218,17, ++ 95,99,111,100,101,95,116,111,95,104,97,115,104,95,112,121, ++ 99,185,2,0,0,115,14,0,0,0,8,2,12,1,14,1, ++ 16,1,10,1,16,1,4,1,114,196,0,0,0,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, ++ 0,0,67,0,0,0,115,62,0,0,0,100,1,100,2,108, ++ 0,125,1,116,1,160,2,124,0,161,1,106,3,125,2,124, ++ 1,160,4,124,2,161,1,125,3,116,1,160,5,100,2,100, ++ 3,161,2,125,4,124,4,160,6,124,0,160,6,124,3,100, ++ 1,25,0,161,1,161,1,83,0,41,4,122,121,68,101,99, ++ 111,100,101,32,98,121,116,101,115,32,114,101,112,114,101,115, ++ 101,110,116,105,110,103,32,115,111,117,114,99,101,32,99,111, ++ 100,101,32,97,110,100,32,114,101,116,117,114,110,32,116,104, ++ 101,32,115,116,114,105,110,103,46,10,10,32,32,32,32,85, ++ 110,105,118,101,114,115,97,108,32,110,101,119,108,105,110,101, ++ 32,115,117,112,112,111,114,116,32,105,115,32,117,115,101,100, ++ 32,105,110,32,116,104,101,32,100,101,99,111,100,105,110,103, ++ 46,10,32,32,32,32,114,0,0,0,0,78,84,41,7,218, ++ 8,116,111,107,101,110,105,122,101,114,93,0,0,0,90,7, ++ 66,121,116,101,115,73,79,90,8,114,101,97,100,108,105,110, ++ 101,90,15,100,101,116,101,99,116,95,101,110,99,111,100,105, ++ 110,103,90,25,73,110,99,114,101,109,101,110,116,97,108,78, ++ 101,119,108,105,110,101,68,101,99,111,100,101,114,218,6,100, ++ 101,99,111,100,101,41,5,218,12,115,111,117,114,99,101,95, ++ 98,121,116,101,115,114,197,0,0,0,90,21,115,111,117,114, ++ 99,101,95,98,121,116,101,115,95,114,101,97,100,108,105,110, ++ 101,218,8,101,110,99,111,100,105,110,103,90,15,110,101,119, ++ 108,105,110,101,95,100,101,99,111,100,101,114,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,13,100,101,99, ++ 111,100,101,95,115,111,117,114,99,101,196,2,0,0,115,10, ++ 0,0,0,8,5,12,1,10,1,12,1,20,1,114,201,0, ++ 0,0,169,2,114,165,0,0,0,218,26,115,117,98,109,111, ++ 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, ++ 116,105,111,110,115,99,2,0,0,0,0,0,0,0,2,0, ++ 0,0,9,0,0,0,8,0,0,0,67,0,0,0,115,54, ++ 1,0,0,124,1,100,1,117,0,114,29,100,2,125,1,116, ++ 0,124,2,100,3,131,2,114,28,122,7,124,2,160,1,124, ++ 0,161,1,125,1,87,0,113,57,4,0,116,2,121,27,1, ++ 0,1,0,1,0,89,0,113,57,119,0,110,28,116,3,160, ++ 4,124,1,161,1,125,1,116,5,124,1,131,1,115,57,122, ++ 9,116,6,116,3,160,7,161,0,124,1,131,2,125,1,87, ++ 0,110,9,4,0,116,8,121,56,1,0,1,0,1,0,89, ++ 0,110,1,119,0,116,9,106,10,124,0,124,2,124,1,100, ++ 4,141,3,125,4,100,5,124,4,95,11,124,2,100,1,117, ++ 0,114,99,116,12,131,0,68,0,93,21,92,2,125,5,125, ++ 6,124,1,160,13,116,14,124,6,131,1,161,1,114,96,124, ++ 5,124,0,124,1,131,2,125,2,124,2,124,4,95,15,1, ++ 0,113,99,113,75,100,1,83,0,124,3,116,16,117,0,114, ++ 131,116,0,124,2,100,6,131,2,114,130,122,7,124,2,160, ++ 17,124,0,161,1,125,7,87,0,110,9,4,0,116,2,121, ++ 124,1,0,1,0,1,0,89,0,113,134,119,0,124,7,114, ++ 130,103,0,124,4,95,18,110,3,124,3,124,4,95,18,124, ++ 4,106,18,103,0,107,2,114,153,124,1,114,153,116,19,124, ++ 1,131,1,100,7,25,0,125,8,124,4,106,18,160,20,124, ++ 8,161,1,1,0,124,4,83,0,41,8,97,61,1,0,0, ++ 82,101,116,117,114,110,32,97,32,109,111,100,117,108,101,32, ++ 115,112,101,99,32,98,97,115,101,100,32,111,110,32,97,32, ++ 102,105,108,101,32,108,111,99,97,116,105,111,110,46,10,10, ++ 32,32,32,32,84,111,32,105,110,100,105,99,97,116,101,32, ++ 116,104,97,116,32,116,104,101,32,109,111,100,117,108,101,32, ++ 105,115,32,97,32,112,97,99,107,97,103,101,44,32,115,101, ++ 116,10,32,32,32,32,115,117,98,109,111,100,117,108,101,95, ++ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, ++ 32,116,111,32,97,32,108,105,115,116,32,111,102,32,100,105, ++ 114,101,99,116,111,114,121,32,112,97,116,104,115,46,32,32, ++ 65,110,10,32,32,32,32,101,109,112,116,121,32,108,105,115, ++ 116,32,105,115,32,115,117,102,102,105,99,105,101,110,116,44, ++ 32,116,104,111,117,103,104,32,105,116,115,32,110,111,116,32, ++ 111,116,104,101,114,119,105,115,101,32,117,115,101,102,117,108, ++ 32,116,111,32,116,104,101,10,32,32,32,32,105,109,112,111, ++ 114,116,32,115,121,115,116,101,109,46,10,10,32,32,32,32, ++ 84,104,101,32,108,111,97,100,101,114,32,109,117,115,116,32, ++ 116,97,107,101,32,97,32,115,112,101,99,32,97,115,32,105, ++ 116,115,32,111,110,108,121,32,95,95,105,110,105,116,95,95, ++ 40,41,32,97,114,103,46,10,10,32,32,32,32,78,122,9, ++ 60,117,110,107,110,111,119,110,62,218,12,103,101,116,95,102, ++ 105,108,101,110,97,109,101,169,1,218,6,111,114,105,103,105, ++ 110,84,218,10,105,115,95,112,97,99,107,97,103,101,114,0, ++ 0,0,0,41,21,114,154,0,0,0,114,204,0,0,0,114, ++ 143,0,0,0,114,19,0,0,0,114,105,0,0,0,114,88, ++ 0,0,0,114,69,0,0,0,114,84,0,0,0,114,78,0, ++ 0,0,114,160,0,0,0,218,10,77,111,100,117,108,101,83, ++ 112,101,99,90,13,95,115,101,116,95,102,105,108,101,97,116, ++ 116,114,218,27,95,103,101,116,95,115,117,112,112,111,114,116, ++ 101,100,95,102,105,108,101,95,108,111,97,100,101,114,115,114, ++ 60,0,0,0,114,137,0,0,0,114,165,0,0,0,218,9, ++ 95,80,79,80,85,76,65,84,69,114,207,0,0,0,114,203, ++ 0,0,0,114,76,0,0,0,114,63,0,0,0,41,9,114, ++ 142,0,0,0,90,8,108,111,99,97,116,105,111,110,114,165, ++ 0,0,0,114,203,0,0,0,218,4,115,112,101,99,218,12, ++ 108,111,97,100,101,114,95,99,108,97,115,115,218,8,115,117, ++ 102,102,105,120,101,115,114,207,0,0,0,90,7,100,105,114, ++ 110,97,109,101,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,218,23,115,112,101,99,95,102,114,111,109,95,102, ++ 105,108,101,95,108,111,99,97,116,105,111,110,213,2,0,0, ++ 115,84,0,0,0,8,12,4,4,10,1,2,2,14,1,12, ++ 1,4,1,2,255,2,252,10,7,8,1,2,1,18,1,12, ++ 1,4,1,2,255,16,9,6,1,8,3,14,1,14,1,10, ++ 1,6,1,4,1,2,253,4,5,8,3,10,2,2,1,14, ++ 1,12,1,4,1,2,255,4,3,6,1,2,128,6,2,10, ++ 1,4,1,12,1,12,1,4,2,114,214,0,0,0,99,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, ++ 0,0,0,64,0,0,0,115,88,0,0,0,101,0,90,1, ++ 100,0,90,2,100,1,90,3,100,2,90,4,100,3,90,5, ++ 101,6,111,15,100,4,101,7,118,0,90,8,101,9,100,5, ++ 100,6,132,0,131,1,90,10,101,11,100,7,100,8,132,0, ++ 131,1,90,12,101,11,100,14,100,10,100,11,132,1,131,1, ++ 90,13,101,11,100,15,100,12,100,13,132,1,131,1,90,14, ++ 100,9,83,0,41,16,218,21,87,105,110,100,111,119,115,82, ++ 101,103,105,115,116,114,121,70,105,110,100,101,114,122,62,77, ++ 101,116,97,32,112,97,116,104,32,102,105,110,100,101,114,32, ++ 102,111,114,32,109,111,100,117,108,101,115,32,100,101,99,108, ++ 97,114,101,100,32,105,110,32,116,104,101,32,87,105,110,100, ++ 111,119,115,32,114,101,103,105,115,116,114,121,46,122,59,83, ++ 111,102,116,119,97,114,101,92,80,121,116,104,111,110,92,80, ++ 121,116,104,111,110,67,111,114,101,92,123,115,121,115,95,118, ++ 101,114,115,105,111,110,125,92,77,111,100,117,108,101,115,92, ++ 123,102,117,108,108,110,97,109,101,125,122,65,83,111,102,116, ++ 119,97,114,101,92,80,121,116,104,111,110,92,80,121,116,104, ++ 111,110,67,111,114,101,92,123,115,121,115,95,118,101,114,115, ++ 105,111,110,125,92,77,111,100,117,108,101,115,92,123,102,117, ++ 108,108,110,97,109,101,125,92,68,101,98,117,103,122,6,95, ++ 100,46,112,121,100,99,1,0,0,0,0,0,0,0,0,0, ++ 0,0,1,0,0,0,8,0,0,0,67,0,0,0,115,50, ++ 0,0,0,122,8,116,0,160,1,116,0,106,2,124,0,161, ++ 2,87,0,83,0,4,0,116,3,121,24,1,0,1,0,1, ++ 0,116,0,160,1,116,0,106,4,124,0,161,2,6,0,89, ++ 0,83,0,119,0,114,71,0,0,0,41,5,218,6,119,105, ++ 110,114,101,103,90,7,79,112,101,110,75,101,121,90,17,72, ++ 75,69,89,95,67,85,82,82,69,78,84,95,85,83,69,82, ++ 114,78,0,0,0,90,18,72,75,69,89,95,76,79,67,65, ++ 76,95,77,65,67,72,73,78,69,114,21,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,218,14,95, ++ 111,112,101,110,95,114,101,103,105,115,116,114,121,42,3,0, ++ 0,115,10,0,0,0,2,2,16,1,12,1,18,1,2,255, ++ 122,36,87,105,110,100,111,119,115,82,101,103,105,115,116,114, ++ 121,70,105,110,100,101,114,46,95,111,112,101,110,95,114,101, ++ 103,105,115,116,114,121,99,2,0,0,0,0,0,0,0,0, ++ 0,0,0,6,0,0,0,8,0,0,0,67,0,0,0,115, ++ 134,0,0,0,124,0,106,0,114,7,124,0,106,1,125,2, ++ 110,3,124,0,106,2,125,2,124,2,106,3,124,1,100,1, ++ 116,4,106,5,100,0,100,2,133,2,25,0,22,0,100,3, ++ 141,2,125,3,122,32,124,0,160,6,124,3,161,1,143,16, ++ 125,4,116,7,160,8,124,4,100,4,161,2,125,5,87,0, ++ 100,0,4,0,4,0,131,3,1,0,87,0,124,5,83,0, ++ 49,0,115,49,119,1,1,0,1,0,1,0,89,0,1,0, ++ 87,0,124,5,83,0,4,0,116,9,121,66,1,0,1,0, ++ 1,0,89,0,100,0,83,0,119,0,41,5,78,122,5,37, ++ 100,46,37,100,114,46,0,0,0,41,2,114,164,0,0,0, ++ 90,11,115,121,115,95,118,101,114,115,105,111,110,114,11,0, ++ 0,0,41,10,218,11,68,69,66,85,71,95,66,85,73,76, ++ 68,218,18,82,69,71,73,83,84,82,89,95,75,69,89,95, ++ 68,69,66,85,71,218,12,82,69,71,73,83,84,82,89,95, ++ 75,69,89,114,91,0,0,0,114,16,0,0,0,218,12,118, ++ 101,114,115,105,111,110,95,105,110,102,111,114,217,0,0,0, ++ 114,216,0,0,0,90,10,81,117,101,114,121,86,97,108,117, ++ 101,114,78,0,0,0,41,6,218,3,99,108,115,114,164,0, ++ 0,0,90,12,114,101,103,105,115,116,114,121,95,107,101,121, ++ 114,22,0,0,0,90,4,104,107,101,121,218,8,102,105,108, ++ 101,112,97,116,104,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,218,16,95,115,101,97,114,99,104,95,114,101, ++ 103,105,115,116,114,121,49,3,0,0,115,32,0,0,0,6, ++ 2,8,1,6,2,6,1,16,1,6,255,2,2,12,1,14, ++ 1,12,255,4,4,18,252,4,4,12,254,6,1,2,255,122, ++ 38,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, ++ 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,114, ++ 101,103,105,115,116,114,121,78,99,4,0,0,0,0,0,0, ++ 0,0,0,0,0,8,0,0,0,8,0,0,0,67,0,0, ++ 0,115,120,0,0,0,124,0,160,0,124,1,161,1,125,4, ++ 124,4,100,0,117,0,114,11,100,0,83,0,122,6,116,1, ++ 124,4,131,1,1,0,87,0,110,10,4,0,116,2,121,27, ++ 1,0,1,0,1,0,89,0,100,0,83,0,119,0,116,3, ++ 131,0,68,0,93,26,92,2,125,5,125,6,124,4,160,4, ++ 116,5,124,6,131,1,161,1,114,57,116,6,106,7,124,1, ++ 124,5,124,1,124,4,131,2,124,4,100,1,141,3,125,7, ++ 124,7,2,0,1,0,83,0,113,31,100,0,83,0,41,2, ++ 78,114,205,0,0,0,41,8,114,224,0,0,0,114,77,0, ++ 0,0,114,78,0,0,0,114,209,0,0,0,114,60,0,0, ++ 0,114,137,0,0,0,114,160,0,0,0,218,16,115,112,101, ++ 99,95,102,114,111,109,95,108,111,97,100,101,114,41,8,114, ++ 222,0,0,0,114,164,0,0,0,114,67,0,0,0,218,6, ++ 116,97,114,103,101,116,114,223,0,0,0,114,165,0,0,0, ++ 114,213,0,0,0,114,211,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,9,102,105,110,100,95, ++ 115,112,101,99,64,3,0,0,115,34,0,0,0,10,2,8, ++ 1,4,1,2,1,12,1,12,1,6,1,2,255,14,2,14, ++ 1,6,1,8,1,2,1,6,254,8,3,2,252,4,255,122, ++ 31,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, ++ 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, ++ 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0, ++ 0,4,0,0,0,67,0,0,0,115,42,0,0,0,116,0, ++ 160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,1, ++ 124,2,161,2,125,3,124,3,100,2,117,1,114,19,124,3, ++ 106,4,83,0,100,2,83,0,41,3,122,106,70,105,110,100, ++ 32,109,111,100,117,108,101,32,110,97,109,101,100,32,105,110, ++ 32,116,104,101,32,114,101,103,105,115,116,114,121,46,10,10, ++ 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, ++ 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, ++ 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, ++ 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, ++ 32,32,32,32,32,32,122,112,87,105,110,100,111,119,115,82, ++ 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, ++ 110,100,95,109,111,100,117,108,101,40,41,32,105,115,32,100, ++ 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, ++ 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, ++ 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,59, ++ 32,117,115,101,32,102,105,110,100,95,115,112,101,99,40,41, ++ 32,105,110,115,116,101,97,100,78,169,5,114,101,0,0,0, ++ 114,102,0,0,0,114,103,0,0,0,114,227,0,0,0,114, ++ 165,0,0,0,169,4,114,222,0,0,0,114,164,0,0,0, ++ 114,67,0,0,0,114,211,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,11,102,105,110,100,95, ++ 109,111,100,117,108,101,80,3,0,0,115,14,0,0,0,6, ++ 7,2,2,4,254,12,3,8,1,6,1,4,2,122,33,87, ++ 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, ++ 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, ++ 169,2,78,78,114,71,0,0,0,41,15,114,151,0,0,0, ++ 114,150,0,0,0,114,152,0,0,0,114,153,0,0,0,114, ++ 220,0,0,0,114,219,0,0,0,218,11,95,77,83,95,87, ++ 73,78,68,79,87,83,218,18,69,88,84,69,78,83,73,79, ++ 78,95,83,85,70,70,73,88,69,83,114,218,0,0,0,218, ++ 12,115,116,97,116,105,99,109,101,116,104,111,100,114,217,0, ++ 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, ++ 224,0,0,0,114,227,0,0,0,114,230,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,215,0,0,0,30,3,0,0,115,30,0,0,0, ++ 8,0,4,2,2,3,2,255,2,4,2,255,12,3,2,2, ++ 10,1,2,6,10,1,2,14,12,1,2,15,16,1,114,215, ++ 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,0,2,0,0,0,64,0,0,0,115,48,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, +- 7,156,1,100,8,100,9,132,2,90,6,100,10,83,0,41, +- 11,218,16,83,111,117,114,99,101,70,105,108,101,76,111,97, +- 100,101,114,122,62,67,111,110,99,114,101,116,101,32,105,109, ++ 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,83, ++ 0,41,11,218,13,95,76,111,97,100,101,114,66,97,115,105, ++ 99,115,122,83,66,97,115,101,32,99,108,97,115,115,32,111, ++ 102,32,99,111,109,109,111,110,32,99,111,100,101,32,110,101, ++ 101,100,101,100,32,98,121,32,98,111,116,104,32,83,111,117, ++ 114,99,101,76,111,97,100,101,114,32,97,110,100,10,32,32, ++ 32,32,83,111,117,114,99,101,108,101,115,115,70,105,108,101, ++ 76,111,97,100,101,114,46,99,2,0,0,0,0,0,0,0, ++ 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, ++ 115,64,0,0,0,116,0,124,0,160,1,124,1,161,1,131, ++ 1,100,1,25,0,125,2,124,2,160,2,100,2,100,1,161, ++ 2,100,3,25,0,125,3,124,1,160,3,100,2,161,1,100, ++ 4,25,0,125,4,124,3,100,5,107,2,111,31,124,4,100, ++ 5,107,3,83,0,41,6,122,141,67,111,110,99,114,101,116, ++ 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, ++ 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, ++ 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, ++ 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, ++ 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, ++ 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, ++ 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, ++ 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, ++ 95,46,112,121,39,46,114,4,0,0,0,114,99,0,0,0, ++ 114,0,0,0,0,114,46,0,0,0,218,8,95,95,105,110, ++ 105,116,95,95,41,4,114,76,0,0,0,114,204,0,0,0, ++ 114,127,0,0,0,114,106,0,0,0,41,5,114,144,0,0, ++ 0,114,164,0,0,0,114,122,0,0,0,90,13,102,105,108, ++ 101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,108, ++ 95,110,97,109,101,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,207,0,0,0,102,3,0,0,115,8,0, ++ 0,0,18,3,16,1,14,1,16,1,122,24,95,76,111,97, ++ 100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,99, ++ 107,97,103,101,99,2,0,0,0,0,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,114,25,0, ++ 0,0,169,2,122,42,85,115,101,32,100,101,102,97,117,108, ++ 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, ++ 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, ++ 78,114,8,0,0,0,169,2,114,144,0,0,0,114,211,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,101, ++ 110,3,0,0,243,2,0,0,0,4,0,122,27,95,76,111, ++ 97,100,101,114,66,97,115,105,99,115,46,99,114,101,97,116, ++ 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, ++ 0,0,0,0,0,3,0,0,0,5,0,0,0,67,0,0, ++ 0,115,56,0,0,0,124,0,160,0,124,1,106,1,161,1, ++ 125,2,124,2,100,1,117,0,114,18,116,2,100,2,160,3, ++ 124,1,106,1,161,1,131,1,130,1,116,4,160,5,116,6, ++ 124,2,124,1,106,7,161,3,1,0,100,1,83,0,41,3, ++ 122,19,69,120,101,99,117,116,101,32,116,104,101,32,109,111, ++ 100,117,108,101,46,78,122,52,99,97,110,110,111,116,32,108, ++ 111,97,100,32,109,111,100,117,108,101,32,123,33,114,125,32, ++ 119,104,101,110,32,103,101,116,95,99,111,100,101,40,41,32, ++ 114,101,116,117,114,110,115,32,78,111,110,101,41,8,218,8, ++ 103,101,116,95,99,111,100,101,114,151,0,0,0,114,143,0, ++ 0,0,114,91,0,0,0,114,160,0,0,0,218,25,95,99, ++ 97,108,108,95,119,105,116,104,95,102,114,97,109,101,115,95, ++ 114,101,109,111,118,101,100,218,4,101,120,101,99,114,157,0, ++ 0,0,41,3,114,144,0,0,0,218,6,109,111,100,117,108, ++ 101,114,189,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,218,11,101,120,101,99,95,109,111,100,117, ++ 108,101,113,3,0,0,115,12,0,0,0,12,2,8,1,4, ++ 1,8,1,4,255,20,2,122,25,95,76,111,97,100,101,114, ++ 66,97,115,105,99,115,46,101,120,101,99,95,109,111,100,117, ++ 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, ++ 0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,0, ++ 116,0,160,1,124,0,124,1,161,2,83,0,41,1,122,26, ++ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, ++ 101,112,114,101,99,97,116,101,100,46,41,2,114,160,0,0, ++ 0,218,17,95,108,111,97,100,95,109,111,100,117,108,101,95, ++ 115,104,105,109,169,2,114,144,0,0,0,114,164,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 11,108,111,97,100,95,109,111,100,117,108,101,121,3,0,0, ++ 115,2,0,0,0,12,3,122,25,95,76,111,97,100,101,114, ++ 66,97,115,105,99,115,46,108,111,97,100,95,109,111,100,117, ++ 108,101,78,41,8,114,151,0,0,0,114,150,0,0,0,114, ++ 152,0,0,0,114,153,0,0,0,114,207,0,0,0,114,240, ++ 0,0,0,114,246,0,0,0,114,249,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,236,0,0,0,97,3,0,0,115,12,0,0,0,8, ++ 0,4,2,8,3,8,8,8,3,12,8,114,236,0,0,0, ++ 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,3,0,0,0,64,0,0,0,115,74,0,0,0,101,0, ++ 90,1,100,0,90,2,100,1,100,2,132,0,90,3,100,3, ++ 100,4,132,0,90,4,100,5,100,6,132,0,90,5,100,7, ++ 100,8,132,0,90,6,100,9,100,10,132,0,90,7,100,11, ++ 100,12,156,1,100,13,100,14,132,2,90,8,100,15,100,16, ++ 132,0,90,9,100,17,83,0,41,18,218,12,83,111,117,114, ++ 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, ++ 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, ++ 0,115,4,0,0,0,116,0,130,1,41,1,122,165,79,112, ++ 116,105,111,110,97,108,32,109,101,116,104,111,100,32,116,104, ++ 97,116,32,114,101,116,117,114,110,115,32,116,104,101,32,109, ++ 111,100,105,102,105,99,97,116,105,111,110,32,116,105,109,101, ++ 32,40,97,110,32,105,110,116,41,32,102,111,114,32,116,104, ++ 101,10,32,32,32,32,32,32,32,32,115,112,101,99,105,102, ++ 105,101,100,32,112,97,116,104,32,40,97,32,115,116,114,41, ++ 46,10,10,32,32,32,32,32,32,32,32,82,97,105,115,101, ++ 115,32,79,83,69,114,114,111,114,32,119,104,101,110,32,116, ++ 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, ++ 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, ++ 32,32,32,41,1,114,78,0,0,0,169,2,114,144,0,0, ++ 0,114,67,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,218,10,112,97,116,104,95,109,116,105,109, ++ 101,129,3,0,0,115,2,0,0,0,4,6,122,23,83,111, ++ 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, ++ 109,116,105,109,101,99,2,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,14, ++ 0,0,0,100,1,124,0,160,0,124,1,161,1,105,1,83, ++ 0,41,2,97,158,1,0,0,79,112,116,105,111,110,97,108, ++ 32,109,101,116,104,111,100,32,114,101,116,117,114,110,105,110, ++ 103,32,97,32,109,101,116,97,100,97,116,97,32,100,105,99, ++ 116,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, ++ 105,101,100,10,32,32,32,32,32,32,32,32,112,97,116,104, ++ 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, ++ 32,32,32,80,111,115,115,105,98,108,101,32,107,101,121,115, ++ 58,10,32,32,32,32,32,32,32,32,45,32,39,109,116,105, ++ 109,101,39,32,40,109,97,110,100,97,116,111,114,121,41,32, ++ 105,115,32,116,104,101,32,110,117,109,101,114,105,99,32,116, ++ 105,109,101,115,116,97,109,112,32,111,102,32,108,97,115,116, ++ 32,115,111,117,114,99,101,10,32,32,32,32,32,32,32,32, ++ 32,32,99,111,100,101,32,109,111,100,105,102,105,99,97,116, ++ 105,111,110,59,10,32,32,32,32,32,32,32,32,45,32,39, ++ 115,105,122,101,39,32,40,111,112,116,105,111,110,97,108,41, ++ 32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32, ++ 98,121,116,101,115,32,111,102,32,116,104,101,32,115,111,117, ++ 114,99,101,32,99,111,100,101,46,10,10,32,32,32,32,32, ++ 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, ++ 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, ++ 119,115,32,116,104,101,32,108,111,97,100,101,114,32,116,111, ++ 32,114,101,97,100,32,98,121,116,101,99,111,100,101,32,102, ++ 105,108,101,115,46,10,32,32,32,32,32,32,32,32,82,97, ++ 105,115,101,115,32,79,83,69,114,114,111,114,32,119,104,101, ++ 110,32,116,104,101,32,112,97,116,104,32,99,97,110,110,111, ++ 116,32,98,101,32,104,97,110,100,108,101,100,46,10,32,32, ++ 32,32,32,32,32,32,114,194,0,0,0,41,1,114,252,0, ++ 0,0,114,251,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,10,112,97,116,104,95,115,116,97, ++ 116,115,137,3,0,0,115,2,0,0,0,14,12,122,23,83, ++ 111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,104, ++ 95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,0, ++ 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, ++ 12,0,0,0,124,0,160,0,124,2,124,3,161,2,83,0, ++ 41,1,122,228,79,112,116,105,111,110,97,108,32,109,101,116, ++ 104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115, ++ 32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111, ++ 32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32, ++ 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73, ++ 109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115, ++ 32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102, ++ 111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111, ++ 102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115, ++ 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,115, ++ 111,117,114,99,101,32,112,97,116,104,32,105,115,32,110,101, ++ 101,100,101,100,32,105,110,32,111,114,100,101,114,32,116,111, ++ 32,99,111,114,114,101,99,116,108,121,32,116,114,97,110,115, ++ 102,101,114,32,112,101,114,109,105,115,115,105,111,110,115,10, ++ 32,32,32,32,32,32,32,32,41,1,218,8,115,101,116,95, ++ 100,97,116,97,41,4,114,144,0,0,0,114,135,0,0,0, ++ 90,10,99,97,99,104,101,95,112,97,116,104,114,43,0,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 218,15,95,99,97,99,104,101,95,98,121,116,101,99,111,100, ++ 101,151,3,0,0,115,2,0,0,0,12,8,122,28,83,111, ++ 117,114,99,101,76,111,97,100,101,114,46,95,99,97,99,104, ++ 101,95,98,121,116,101,99,111,100,101,99,3,0,0,0,0, ++ 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, ++ 0,0,0,114,25,0,0,0,41,2,122,150,79,112,116,105, ++ 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, ++ 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, ++ 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, ++ 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, ++ 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, ++ 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, ++ 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, ++ 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, ++ 100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,32, ++ 32,32,78,114,8,0,0,0,41,3,114,144,0,0,0,114, ++ 67,0,0,0,114,43,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,254,0,0,0,161,3,0, ++ 0,114,241,0,0,0,122,21,83,111,117,114,99,101,76,111, ++ 97,100,101,114,46,115,101,116,95,100,97,116,97,99,2,0, ++ 0,0,0,0,0,0,0,0,0,0,5,0,0,0,10,0, ++ 0,0,67,0,0,0,115,70,0,0,0,124,0,160,0,124, ++ 1,161,1,125,2,122,10,124,0,160,1,124,2,161,1,125, ++ 3,87,0,116,4,124,3,131,1,83,0,4,0,116,2,121, ++ 34,1,0,125,4,1,0,122,7,116,3,100,1,124,1,100, ++ 2,141,2,124,4,130,2,100,3,125,4,126,4,119,1,119, ++ 0,41,4,122,52,67,111,110,99,114,101,116,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, +- 83,111,117,114,99,101,76,111,97,100,101,114,32,117,115,105, +- 110,103,32,116,104,101,32,102,105,108,101,32,115,121,115,116, +- 101,109,46,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 3,0,0,0,3,0,0,0,67,0,0,0,115,22,0,0, +- 0,116,0,124,1,131,1,125,2,124,2,106,1,124,2,106, +- 2,100,1,156,2,83,0,41,2,122,33,82,101,116,117,114, +- 110,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, +- 111,114,32,116,104,101,32,112,97,116,104,46,41,2,114,193, +- 0,0,0,114,6,1,0,0,41,3,114,75,0,0,0,218, +- 8,115,116,95,109,116,105,109,101,90,7,115,116,95,115,105, +- 122,101,41,3,114,143,0,0,0,114,65,0,0,0,114,10, +- 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,252,0,0,0,65,4,0,0,115,4,0,0,0, +- 8,2,14,1,122,27,83,111,117,114,99,101,70,105,108,101, +- 76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116, +- 115,99,4,0,0,0,0,0,0,0,0,0,0,0,5,0, +- 0,0,5,0,0,0,67,0,0,0,115,24,0,0,0,116, +- 0,124,1,131,1,125,4,124,0,106,1,124,2,124,3,124, +- 4,100,1,141,3,83,0,41,2,78,169,1,218,5,95,109, +- 111,100,101,41,2,114,139,0,0,0,114,253,0,0,0,41, +- 5,114,143,0,0,0,114,134,0,0,0,114,132,0,0,0, +- 114,41,0,0,0,114,78,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,254,0,0,0,70,4, +- 0,0,115,4,0,0,0,8,2,16,1,122,32,83,111,117, +- 114,99,101,70,105,108,101,76,111,97,100,101,114,46,95,99, +- 97,99,104,101,95,98,121,116,101,99,111,100,101,114,87,0, +- 0,0,114,36,1,0,0,99,3,0,0,0,0,0,0,0, +- 1,0,0,0,9,0,0,0,11,0,0,0,67,0,0,0, +- 115,254,0,0,0,116,0,124,1,131,1,92,2,125,4,125, +- 5,103,0,125,6,124,4,114,31,116,1,124,4,131,1,115, +- 31,116,0,124,4,131,1,92,2,125,4,125,7,124,6,160, +- 2,124,7,161,1,1,0,124,4,114,31,116,1,124,4,131, +- 1,114,14,116,3,124,6,131,1,68,0,93,49,125,7,116, +- 4,124,4,124,7,131,2,125,4,122,7,116,5,160,6,124, +- 4,161,1,1,0,87,0,113,35,4,0,116,7,121,58,1, +- 0,1,0,1,0,89,0,113,35,4,0,116,8,121,84,1, +- 0,125,8,1,0,122,15,116,9,160,10,100,1,124,4,124, +- 8,161,3,1,0,87,0,89,0,100,2,125,8,126,8,1, +- 0,100,2,83,0,100,2,125,8,126,8,119,1,119,0,122, +- 15,116,11,124,1,124,2,124,3,131,3,1,0,116,9,160, +- 10,100,3,124,1,161,2,1,0,87,0,100,2,83,0,4, +- 0,116,8,121,126,1,0,125,8,1,0,122,14,116,9,160, +- 10,100,1,124,1,124,8,161,3,1,0,87,0,89,0,100, +- 2,125,8,126,8,100,2,83,0,100,2,125,8,126,8,119, +- 1,119,0,41,4,122,27,87,114,105,116,101,32,98,121,116, +- 101,115,32,100,97,116,97,32,116,111,32,97,32,102,105,108, +- 101,46,122,27,99,111,117,108,100,32,110,111,116,32,99,114, +- 101,97,116,101,32,123,33,114,125,58,32,123,33,114,125,78, +- 122,12,99,114,101,97,116,101,100,32,123,33,114,125,41,12, +- 114,74,0,0,0,114,83,0,0,0,114,61,0,0,0,218, +- 8,114,101,118,101,114,115,101,100,114,67,0,0,0,114,18, +- 0,0,0,90,5,109,107,100,105,114,218,15,70,105,108,101, +- 69,120,105,115,116,115,69,114,114,111,114,114,76,0,0,0, +- 114,159,0,0,0,114,173,0,0,0,114,95,0,0,0,41, +- 9,114,143,0,0,0,114,65,0,0,0,114,41,0,0,0, +- 114,37,1,0,0,218,6,112,97,114,101,110,116,114,120,0, +- 0,0,114,63,0,0,0,114,68,0,0,0,114,0,1,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,253,0,0,0,75,4,0,0,115,56,0,0,0,12,2, +- 4,1,12,2,12,1,10,1,12,254,12,4,10,1,2,1, +- 14,1,12,1,4,2,14,1,6,3,4,1,4,255,16,2, +- 8,128,2,251,2,6,12,1,18,1,14,1,8,2,2,1, +- 18,255,8,128,2,254,122,25,83,111,117,114,99,101,70,105, +- 108,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, +- 97,78,41,7,114,150,0,0,0,114,149,0,0,0,114,151, +- 0,0,0,114,152,0,0,0,114,252,0,0,0,114,254,0, +- 0,0,114,253,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,34,1,0,0, +- 61,4,0,0,115,10,0,0,0,8,0,4,2,8,2,8, +- 5,18,5,114,34,1,0,0,99,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, +- 0,115,32,0,0,0,101,0,90,1,100,0,90,2,100,1, ++ 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, ++ 116,95,115,111,117,114,99,101,46,122,39,115,111,117,114,99, ++ 101,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32, ++ 116,104,114,111,117,103,104,32,103,101,116,95,100,97,116,97, ++ 40,41,114,141,0,0,0,78,41,5,114,204,0,0,0,218, ++ 8,103,101,116,95,100,97,116,97,114,78,0,0,0,114,143, ++ 0,0,0,114,201,0,0,0,41,5,114,144,0,0,0,114, ++ 164,0,0,0,114,67,0,0,0,114,199,0,0,0,218,3, ++ 101,120,99,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,218,10,103,101,116,95,115,111,117,114,99,101,168,3, ++ 0,0,115,24,0,0,0,10,2,2,1,12,1,8,4,14, ++ 253,4,1,2,1,4,255,2,1,2,255,8,128,2,255,122, ++ 23,83,111,117,114,99,101,76,111,97,100,101,114,46,103,101, ++ 116,95,115,111,117,114,99,101,114,3,0,0,0,41,1,218, ++ 9,95,111,112,116,105,109,105,122,101,99,3,0,0,0,0, ++ 0,0,0,1,0,0,0,4,0,0,0,8,0,0,0,67, ++ 0,0,0,115,22,0,0,0,116,0,106,1,116,2,124,1, ++ 124,2,100,1,100,2,124,3,100,3,141,6,83,0,41,4, ++ 122,130,82,101,116,117,114,110,32,116,104,101,32,99,111,100, ++ 101,32,111,98,106,101,99,116,32,99,111,109,112,105,108,101, ++ 100,32,102,114,111,109,32,115,111,117,114,99,101,46,10,10, ++ 32,32,32,32,32,32,32,32,84,104,101,32,39,100,97,116, ++ 97,39,32,97,114,103,117,109,101,110,116,32,99,97,110,32, ++ 98,101,32,97,110,121,32,111,98,106,101,99,116,32,116,121, ++ 112,101,32,116,104,97,116,32,99,111,109,112,105,108,101,40, ++ 41,32,115,117,112,112,111,114,116,115,46,10,32,32,32,32, ++ 32,32,32,32,114,244,0,0,0,84,41,2,218,12,100,111, ++ 110,116,95,105,110,104,101,114,105,116,114,110,0,0,0,41, ++ 3,114,160,0,0,0,114,243,0,0,0,218,7,99,111,109, ++ 112,105,108,101,41,4,114,144,0,0,0,114,43,0,0,0, ++ 114,67,0,0,0,114,3,1,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,14,115,111,117,114,99, ++ 101,95,116,111,95,99,111,100,101,178,3,0,0,115,6,0, ++ 0,0,12,5,4,1,6,255,122,27,83,111,117,114,99,101, ++ 76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,111, ++ 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, ++ 0,0,15,0,0,0,9,0,0,0,67,0,0,0,115,2, ++ 2,0,0,124,0,160,0,124,1,161,1,125,2,100,1,125, ++ 3,100,1,125,4,100,1,125,5,100,2,125,6,100,3,125, ++ 7,122,6,116,1,124,2,131,1,125,8,87,0,110,11,4, ++ 0,116,2,121,32,1,0,1,0,1,0,100,1,125,8,89, ++ 0,110,144,119,0,122,7,124,0,160,3,124,2,161,1,125, ++ 9,87,0,110,9,4,0,116,4,121,49,1,0,1,0,1, ++ 0,89,0,110,127,119,0,116,5,124,9,100,4,25,0,131, ++ 1,125,3,122,7,124,0,160,6,124,8,161,1,125,10,87, ++ 0,110,9,4,0,116,4,121,72,1,0,1,0,1,0,89, ++ 0,110,104,119,0,124,1,124,8,100,5,156,2,125,11,122, ++ 71,116,7,124,10,124,1,124,11,131,3,125,12,116,8,124, ++ 10,131,1,100,6,100,1,133,2,25,0,125,13,124,12,100, ++ 7,64,0,100,8,107,3,125,6,124,6,114,138,124,12,100, ++ 9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,107, ++ 3,114,137,124,7,115,119,116,9,106,10,100,11,107,2,114, ++ 137,124,0,160,6,124,2,161,1,125,4,116,9,160,11,116, ++ 12,124,4,161,2,125,5,116,13,124,10,124,5,124,1,124, ++ 11,131,4,1,0,110,10,116,14,124,10,124,3,124,9,100, ++ 12,25,0,124,1,124,11,131,5,1,0,87,0,110,11,4, ++ 0,116,15,116,16,102,2,121,160,1,0,1,0,1,0,89, ++ 0,110,16,119,0,116,17,160,18,100,13,124,8,124,2,161, ++ 3,1,0,116,19,124,13,124,1,124,8,124,2,100,14,141, ++ 4,83,0,124,4,100,1,117,0,114,185,124,0,160,6,124, ++ 2,161,1,125,4,124,0,160,20,124,4,124,2,161,2,125, ++ 14,116,17,160,18,100,15,124,2,161,2,1,0,116,21,106, ++ 22,115,255,124,8,100,1,117,1,114,255,124,3,100,1,117, ++ 1,114,255,124,6,114,226,124,5,100,1,117,0,114,219,116, ++ 9,160,11,124,4,161,1,125,5,116,23,124,14,124,5,124, ++ 7,131,3,125,10,110,8,116,24,124,14,124,3,116,25,124, ++ 4,131,1,131,3,125,10,122,10,124,0,160,26,124,2,124, ++ 8,124,10,161,3,1,0,87,0,124,14,83,0,4,0,116, ++ 2,121,254,1,0,1,0,1,0,89,0,124,14,83,0,119, ++ 0,124,14,83,0,41,16,122,190,67,111,110,99,114,101,116, ++ 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, ++ 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, ++ 114,46,103,101,116,95,99,111,100,101,46,10,10,32,32,32, ++ 32,32,32,32,32,82,101,97,100,105,110,103,32,111,102,32, ++ 98,121,116,101,99,111,100,101,32,114,101,113,117,105,114,101, ++ 115,32,112,97,116,104,95,115,116,97,116,115,32,116,111,32, ++ 98,101,32,105,109,112,108,101,109,101,110,116,101,100,46,32, ++ 84,111,32,119,114,105,116,101,10,32,32,32,32,32,32,32, ++ 32,98,121,116,101,99,111,100,101,44,32,115,101,116,95,100, ++ 97,116,97,32,109,117,115,116,32,97,108,115,111,32,98,101, ++ 32,105,109,112,108,101,109,101,110,116,101,100,46,10,10,32, ++ 32,32,32,32,32,32,32,78,70,84,114,194,0,0,0,114, ++ 184,0,0,0,114,170,0,0,0,114,4,0,0,0,114,0, ++ 0,0,0,114,46,0,0,0,90,5,110,101,118,101,114,90, ++ 6,97,108,119,97,121,115,218,4,115,105,122,101,122,13,123, ++ 125,32,109,97,116,99,104,101,115,32,123,125,41,3,114,142, ++ 0,0,0,114,133,0,0,0,114,135,0,0,0,122,19,99, ++ 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, ++ 123,125,41,27,114,204,0,0,0,114,123,0,0,0,114,109, ++ 0,0,0,114,253,0,0,0,114,78,0,0,0,114,35,0, ++ 0,0,114,0,1,0,0,114,177,0,0,0,218,10,109,101, ++ 109,111,114,121,118,105,101,119,114,188,0,0,0,90,21,99, ++ 104,101,99,107,95,104,97,115,104,95,98,97,115,101,100,95, ++ 112,121,99,115,114,182,0,0,0,218,17,95,82,65,87,95, ++ 77,65,71,73,67,95,78,85,77,66,69,82,114,183,0,0, ++ 0,114,181,0,0,0,114,143,0,0,0,114,175,0,0,0, ++ 114,160,0,0,0,114,174,0,0,0,114,190,0,0,0,114, ++ 6,1,0,0,114,16,0,0,0,218,19,100,111,110,116,95, ++ 119,114,105,116,101,95,98,121,116,101,99,111,100,101,114,196, ++ 0,0,0,114,195,0,0,0,114,5,0,0,0,114,255,0, ++ 0,0,41,15,114,144,0,0,0,114,164,0,0,0,114,135, ++ 0,0,0,114,179,0,0,0,114,199,0,0,0,114,182,0, ++ 0,0,90,10,104,97,115,104,95,98,97,115,101,100,90,12, ++ 99,104,101,99,107,95,115,111,117,114,99,101,114,133,0,0, ++ 0,218,2,115,116,114,43,0,0,0,114,176,0,0,0,114, ++ 17,0,0,0,90,10,98,121,116,101,115,95,100,97,116,97, ++ 90,11,99,111,100,101,95,111,98,106,101,99,116,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,242,0,0, ++ 0,186,3,0,0,115,170,0,0,0,10,7,4,1,4,1, ++ 4,1,4,1,4,1,2,1,12,1,12,1,8,1,2,255, ++ 2,3,14,1,12,1,4,1,2,255,12,3,2,1,14,1, ++ 12,1,4,1,2,255,2,4,2,1,6,254,2,4,12,1, ++ 16,1,12,1,4,1,12,1,10,1,2,1,2,255,8,2, ++ 2,254,10,3,4,1,2,1,2,1,4,254,8,4,2,1, ++ 4,255,2,128,2,3,2,1,2,1,6,1,2,1,2,1, ++ 4,251,4,128,16,7,4,1,2,255,8,3,2,1,4,255, ++ 6,2,2,1,2,1,6,254,8,3,10,1,12,1,12,1, ++ 14,1,6,1,2,255,4,2,8,1,10,1,14,1,6,2, ++ 6,1,4,255,2,2,16,1,4,3,12,254,2,1,4,1, ++ 2,254,4,2,122,21,83,111,117,114,99,101,76,111,97,100, ++ 101,114,46,103,101,116,95,99,111,100,101,78,41,10,114,151, ++ 0,0,0,114,150,0,0,0,114,152,0,0,0,114,252,0, ++ 0,0,114,253,0,0,0,114,255,0,0,0,114,254,0,0, ++ 0,114,2,1,0,0,114,6,1,0,0,114,242,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,250,0,0,0,127,3,0,0,115,16,0, ++ 0,0,8,0,8,2,8,8,8,14,8,10,8,7,14,10, ++ 12,8,114,250,0,0,0,99,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, ++ 115,92,0,0,0,101,0,90,1,100,0,90,2,100,1,90, ++ 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, ++ 5,100,6,100,7,132,0,90,6,101,7,135,0,102,1,100, ++ 8,100,9,132,8,131,1,90,8,101,7,100,10,100,11,132, ++ 0,131,1,90,9,100,12,100,13,132,0,90,10,101,7,100, ++ 14,100,15,132,0,131,1,90,11,135,0,4,0,90,12,83, ++ 0,41,16,218,10,70,105,108,101,76,111,97,100,101,114,122, ++ 103,66,97,115,101,32,102,105,108,101,32,108,111,97,100,101, ++ 114,32,99,108,97,115,115,32,119,104,105,99,104,32,105,109, ++ 112,108,101,109,101,110,116,115,32,116,104,101,32,108,111,97, ++ 100,101,114,32,112,114,111,116,111,99,111,108,32,109,101,116, ++ 104,111,100,115,32,116,104,97,116,10,32,32,32,32,114,101, ++ 113,117,105,114,101,32,102,105,108,101,32,115,121,115,116,101, ++ 109,32,117,115,97,103,101,46,99,3,0,0,0,0,0,0, ++ 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, ++ 0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0, ++ 95,1,100,1,83,0,41,2,122,75,67,97,99,104,101,32, ++ 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,32, ++ 97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,32, ++ 116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,98, ++ 121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,105, ++ 110,100,101,114,46,78,114,184,0,0,0,41,3,114,144,0, ++ 0,0,114,164,0,0,0,114,67,0,0,0,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,114,237,0,0,0, ++ 20,4,0,0,115,4,0,0,0,6,3,10,1,122,19,70, ++ 105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116, ++ 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, ++ 0,0,0,2,0,0,0,67,0,0,0,243,24,0,0,0, ++ 124,0,106,0,124,1,106,0,107,2,111,11,124,0,106,1, ++ 124,1,106,1,107,2,83,0,114,71,0,0,0,169,2,218, ++ 9,95,95,99,108,97,115,115,95,95,114,157,0,0,0,169, ++ 2,114,144,0,0,0,90,5,111,116,104,101,114,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,218,6,95,95, ++ 101,113,95,95,26,4,0,0,243,6,0,0,0,12,1,10, ++ 1,2,255,122,17,70,105,108,101,76,111,97,100,101,114,46, ++ 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, ++ 20,0,0,0,116,0,124,0,106,1,131,1,116,0,124,0, ++ 106,2,131,1,65,0,83,0,114,71,0,0,0,169,3,218, ++ 4,104,97,115,104,114,142,0,0,0,114,67,0,0,0,169, ++ 1,114,144,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,218,8,95,95,104,97,115,104,95,95,30, ++ 4,0,0,243,2,0,0,0,20,1,122,19,70,105,108,101, ++ 76,111,97,100,101,114,46,95,95,104,97,115,104,95,95,99, ++ 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, ++ 3,0,0,0,3,0,0,0,115,16,0,0,0,116,0,116, ++ 1,124,0,131,2,160,2,124,1,161,1,83,0,41,1,122, ++ 100,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102, ++ 114,111,109,32,97,32,102,105,108,101,46,10,10,32,32,32, ++ 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, ++ 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, ++ 32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101, ++ 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, ++ 32,32,32,32,32,41,3,218,5,115,117,112,101,114,114,12, ++ 1,0,0,114,249,0,0,0,114,248,0,0,0,169,1,114, ++ 15,1,0,0,114,8,0,0,0,114,9,0,0,0,114,249, ++ 0,0,0,33,4,0,0,115,2,0,0,0,16,10,122,22, ++ 70,105,108,101,76,111,97,100,101,114,46,108,111,97,100,95, ++ 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, ++ 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,243, ++ 6,0,0,0,124,0,106,0,83,0,169,1,122,58,82,101, ++ 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, ++ 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, ++ 32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101, ++ 32,102,105,110,100,101,114,46,114,73,0,0,0,114,248,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,204,0,0,0,45,4,0,0,243,2,0,0,0,6, ++ 3,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, ++ 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, ++ 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,67, ++ 0,0,0,115,128,0,0,0,116,0,124,0,116,1,116,2, ++ 102,2,131,2,114,36,116,3,160,4,116,5,124,1,131,1, ++ 161,1,143,12,125,2,124,2,160,6,161,0,87,0,2,0, ++ 100,1,4,0,4,0,131,3,1,0,83,0,49,0,115,29, ++ 119,1,1,0,1,0,1,0,89,0,1,0,100,1,83,0, ++ 116,3,160,7,124,1,100,2,161,2,143,12,125,2,124,2, ++ 160,6,161,0,87,0,2,0,100,1,4,0,4,0,131,3, ++ 1,0,83,0,49,0,115,57,119,1,1,0,1,0,1,0, ++ 89,0,1,0,100,1,83,0,41,3,122,39,82,101,116,117, ++ 114,110,32,116,104,101,32,100,97,116,97,32,102,114,111,109, ++ 32,112,97,116,104,32,97,115,32,114,97,119,32,98,121,116, ++ 101,115,46,78,218,1,114,41,8,114,186,0,0,0,114,250, ++ 0,0,0,218,19,69,120,116,101,110,115,105,111,110,70,105, ++ 108,101,76,111,97,100,101,114,114,93,0,0,0,90,9,111, ++ 112,101,110,95,99,111,100,101,114,111,0,0,0,90,4,114, ++ 101,97,100,114,94,0,0,0,41,3,114,144,0,0,0,114, ++ 67,0,0,0,114,96,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,0,1,0,0,50,4,0, ++ 0,115,14,0,0,0,14,2,16,1,6,1,36,255,14,3, ++ 6,1,36,255,122,19,70,105,108,101,76,111,97,100,101,114, ++ 46,103,101,116,95,100,97,116,97,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, ++ 0,0,115,20,0,0,0,100,1,100,2,108,0,109,1,125, ++ 2,1,0,124,2,124,0,131,1,83,0,41,3,78,114,0, ++ 0,0,0,41,1,218,10,70,105,108,101,82,101,97,100,101, ++ 114,41,2,218,17,105,109,112,111,114,116,108,105,98,46,114, ++ 101,97,100,101,114,115,114,32,1,0,0,41,3,114,144,0, ++ 0,0,114,245,0,0,0,114,32,1,0,0,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,19,103,101,116, ++ 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, ++ 59,4,0,0,115,4,0,0,0,12,2,8,1,122,30,70, ++ 105,108,101,76,111,97,100,101,114,46,103,101,116,95,114,101, ++ 115,111,117,114,99,101,95,114,101,97,100,101,114,41,13,114, ++ 151,0,0,0,114,150,0,0,0,114,152,0,0,0,114,153, ++ 0,0,0,114,237,0,0,0,114,17,1,0,0,114,23,1, ++ 0,0,114,161,0,0,0,114,249,0,0,0,114,204,0,0, ++ 0,114,0,1,0,0,114,34,1,0,0,90,13,95,95,99, ++ 108,97,115,115,99,101,108,108,95,95,114,8,0,0,0,114, ++ 8,0,0,0,114,26,1,0,0,114,9,0,0,0,114,12, ++ 1,0,0,15,4,0,0,115,24,0,0,0,8,0,4,2, ++ 8,3,8,6,8,4,2,3,14,1,2,11,10,1,8,4, ++ 2,9,18,1,114,12,1,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, ++ 0,0,115,46,0,0,0,101,0,90,1,100,0,90,2,100, ++ 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, ++ 0,90,5,100,6,100,7,156,1,100,8,100,9,132,2,90, ++ 6,100,10,83,0,41,11,218,16,83,111,117,114,99,101,70, ++ 105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114, ++ 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, ++ 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, ++ 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, ++ 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, ++ 0,0,115,22,0,0,0,116,0,124,1,131,1,125,2,124, ++ 2,106,1,124,2,106,2,100,1,156,2,83,0,41,2,122, ++ 33,82,101,116,117,114,110,32,116,104,101,32,109,101,116,97, ++ 100,97,116,97,32,102,111,114,32,116,104,101,32,112,97,116, ++ 104,46,41,2,114,194,0,0,0,114,7,1,0,0,41,3, ++ 114,77,0,0,0,218,8,115,116,95,109,116,105,109,101,90, ++ 7,115,116,95,115,105,122,101,41,3,114,144,0,0,0,114, ++ 67,0,0,0,114,11,1,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,253,0,0,0,69,4,0, ++ 0,115,4,0,0,0,8,2,14,1,122,27,83,111,117,114, ++ 99,101,70,105,108,101,76,111,97,100,101,114,46,112,97,116, ++ 104,95,115,116,97,116,115,99,4,0,0,0,0,0,0,0, ++ 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, ++ 115,24,0,0,0,116,0,124,1,131,1,125,4,124,0,106, ++ 1,124,2,124,3,124,4,100,1,141,3,83,0,41,2,78, ++ 169,1,218,5,95,109,111,100,101,41,2,114,140,0,0,0, ++ 114,254,0,0,0,41,5,114,144,0,0,0,114,135,0,0, ++ 0,114,133,0,0,0,114,43,0,0,0,114,80,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 255,0,0,0,74,4,0,0,115,4,0,0,0,8,2,16, ++ 1,122,32,83,111,117,114,99,101,70,105,108,101,76,111,97, ++ 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, ++ 111,100,101,114,89,0,0,0,114,37,1,0,0,99,3,0, ++ 0,0,0,0,0,0,1,0,0,0,9,0,0,0,11,0, ++ 0,0,67,0,0,0,115,254,0,0,0,116,0,124,1,131, ++ 1,92,2,125,4,125,5,103,0,125,6,124,4,114,31,116, ++ 1,124,4,131,1,115,31,116,0,124,4,131,1,92,2,125, ++ 4,125,7,124,6,160,2,124,7,161,1,1,0,124,4,114, ++ 31,116,1,124,4,131,1,114,14,116,3,124,6,131,1,68, ++ 0,93,49,125,7,116,4,124,4,124,7,131,2,125,4,122, ++ 7,116,5,160,6,124,4,161,1,1,0,87,0,113,35,4, ++ 0,116,7,121,58,1,0,1,0,1,0,89,0,113,35,4, ++ 0,116,8,121,84,1,0,125,8,1,0,122,15,116,9,160, ++ 10,100,1,124,4,124,8,161,3,1,0,87,0,89,0,100, ++ 2,125,8,126,8,1,0,100,2,83,0,100,2,125,8,126, ++ 8,119,1,119,0,122,15,116,11,124,1,124,2,124,3,131, ++ 3,1,0,116,9,160,10,100,3,124,1,161,2,1,0,87, ++ 0,100,2,83,0,4,0,116,8,121,126,1,0,125,8,1, ++ 0,122,14,116,9,160,10,100,1,124,1,124,8,161,3,1, ++ 0,87,0,89,0,100,2,125,8,126,8,100,2,83,0,100, ++ 2,125,8,126,8,119,1,119,0,41,4,122,27,87,114,105, ++ 116,101,32,98,121,116,101,115,32,100,97,116,97,32,116,111, ++ 32,97,32,102,105,108,101,46,122,27,99,111,117,108,100,32, ++ 110,111,116,32,99,114,101,97,116,101,32,123,33,114,125,58, ++ 32,123,33,114,125,78,122,12,99,114,101,97,116,101,100,32, ++ 123,33,114,125,41,12,114,76,0,0,0,114,85,0,0,0, ++ 114,63,0,0,0,218,8,114,101,118,101,114,115,101,100,114, ++ 69,0,0,0,114,19,0,0,0,90,5,109,107,100,105,114, ++ 218,15,70,105,108,101,69,120,105,115,116,115,69,114,114,111, ++ 114,114,78,0,0,0,114,160,0,0,0,114,174,0,0,0, ++ 114,97,0,0,0,41,9,114,144,0,0,0,114,67,0,0, ++ 0,114,43,0,0,0,114,38,1,0,0,218,6,112,97,114, ++ 101,110,116,114,122,0,0,0,114,65,0,0,0,114,70,0, ++ 0,0,114,1,1,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,254,0,0,0,79,4,0,0,115, ++ 56,0,0,0,12,2,4,1,12,2,12,1,10,1,12,254, ++ 12,4,10,1,2,1,14,1,12,1,4,2,14,1,6,3, ++ 4,1,4,255,16,2,8,128,2,251,2,6,12,1,18,1, ++ 14,1,8,2,2,1,18,255,8,128,2,254,122,25,83,111, ++ 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, ++ 101,116,95,100,97,116,97,78,41,7,114,151,0,0,0,114, ++ 150,0,0,0,114,152,0,0,0,114,153,0,0,0,114,253, ++ 0,0,0,114,255,0,0,0,114,254,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,35,1,0,0,65,4,0,0,115,10,0,0,0,8, ++ 0,4,2,8,2,8,5,18,5,114,35,1,0,0,99,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, ++ 0,0,0,64,0,0,0,115,32,0,0,0,101,0,90,1, ++ 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, ++ 100,4,100,5,132,0,90,5,100,6,83,0,41,7,218,20, ++ 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, ++ 97,100,101,114,122,45,76,111,97,100,101,114,32,119,104,105, ++ 99,104,32,104,97,110,100,108,101,115,32,115,111,117,114,99, ++ 101,108,101,115,115,32,102,105,108,101,32,105,109,112,111,114, ++ 116,115,46,99,2,0,0,0,0,0,0,0,0,0,0,0, ++ 5,0,0,0,5,0,0,0,67,0,0,0,115,68,0,0, ++ 0,124,0,160,0,124,1,161,1,125,2,124,0,160,1,124, ++ 2,161,1,125,3,124,1,124,2,100,1,156,2,125,4,116, ++ 2,124,3,124,1,124,4,131,3,1,0,116,3,116,4,124, ++ 3,131,1,100,2,100,0,133,2,25,0,124,1,124,2,100, ++ 3,141,3,83,0,41,4,78,114,184,0,0,0,114,170,0, ++ 0,0,41,2,114,142,0,0,0,114,133,0,0,0,41,5, ++ 114,204,0,0,0,114,0,1,0,0,114,177,0,0,0,114, ++ 190,0,0,0,114,8,1,0,0,41,5,114,144,0,0,0, ++ 114,164,0,0,0,114,67,0,0,0,114,43,0,0,0,114, ++ 176,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,242,0,0,0,114,4,0,0,115,22,0,0, ++ 0,10,1,10,1,2,4,2,1,6,254,12,4,2,1,14, ++ 1,2,1,2,1,6,253,122,29,83,111,117,114,99,101,108, ++ 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, ++ 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, ++ 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, ++ 25,0,0,0,41,2,122,39,82,101,116,117,114,110,32,78, ++ 111,110,101,32,97,115,32,116,104,101,114,101,32,105,115,32, ++ 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, ++ 114,8,0,0,0,114,248,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,2,1,0,0,130,4, ++ 0,0,114,26,0,0,0,122,31,83,111,117,114,99,101,108, ++ 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, ++ 116,95,115,111,117,114,99,101,78,41,6,114,151,0,0,0, ++ 114,150,0,0,0,114,152,0,0,0,114,153,0,0,0,114, ++ 242,0,0,0,114,2,1,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,114,42,1, ++ 0,0,110,4,0,0,115,8,0,0,0,8,0,4,2,8, ++ 2,12,16,114,42,1,0,0,99,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, ++ 0,115,92,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, +- 90,5,100,6,83,0,41,7,218,20,83,111,117,114,99,101, +- 108,101,115,115,70,105,108,101,76,111,97,100,101,114,122,45, +- 76,111,97,100,101,114,32,119,104,105,99,104,32,104,97,110, +- 100,108,101,115,32,115,111,117,114,99,101,108,101,115,115,32, +- 102,105,108,101,32,105,109,112,111,114,116,115,46,99,2,0, +- 0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0, +- 0,0,67,0,0,0,115,68,0,0,0,124,0,160,0,124, +- 1,161,1,125,2,124,0,160,1,124,2,161,1,125,3,124, +- 1,124,2,100,1,156,2,125,4,116,2,124,3,124,1,124, +- 4,131,3,1,0,116,3,116,4,124,3,131,1,100,2,100, +- 0,133,2,25,0,124,1,124,2,100,3,141,3,83,0,41, +- 4,78,114,183,0,0,0,114,169,0,0,0,41,2,114,141, +- 0,0,0,114,132,0,0,0,41,5,114,203,0,0,0,114, +- 255,0,0,0,114,176,0,0,0,114,189,0,0,0,114,7, +- 1,0,0,41,5,114,143,0,0,0,114,163,0,0,0,114, +- 65,0,0,0,114,41,0,0,0,114,175,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,241,0, +- 0,0,110,4,0,0,115,22,0,0,0,10,1,10,1,2, +- 4,2,1,6,254,12,4,2,1,14,1,2,1,2,1,6, +- 253,122,29,83,111,117,114,99,101,108,101,115,115,70,105,108, +- 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, ++ 90,5,100,6,100,7,132,0,90,6,100,8,100,9,132,0, ++ 90,7,100,10,100,11,132,0,90,8,100,12,100,13,132,0, ++ 90,9,100,14,100,15,132,0,90,10,100,16,100,17,132,0, ++ 90,11,101,12,100,18,100,19,132,0,131,1,90,13,100,20, ++ 83,0,41,21,114,31,1,0,0,122,93,76,111,97,100,101, ++ 114,32,102,111,114,32,101,120,116,101,110,115,105,111,110,32, ++ 109,111,100,117,108,101,115,46,10,10,32,32,32,32,84,104, ++ 101,32,99,111,110,115,116,114,117,99,116,111,114,32,105,115, ++ 32,100,101,115,105,103,110,101,100,32,116,111,32,119,111,114, ++ 107,32,119,105,116,104,32,70,105,108,101,70,105,110,100,101, ++ 114,46,10,10,32,32,32,32,99,3,0,0,0,0,0,0, ++ 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, ++ 0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0, ++ 95,1,100,0,83,0,114,71,0,0,0,114,184,0,0,0, ++ 41,3,114,144,0,0,0,114,142,0,0,0,114,67,0,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 114,237,0,0,0,143,4,0,0,115,4,0,0,0,6,1, ++ 10,1,122,28,69,120,116,101,110,115,105,111,110,70,105,108, ++ 101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,95, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,1,0,0,0,67,0,0,0,114,23,0,0,0,41,2, +- 122,39,82,101,116,117,114,110,32,78,111,110,101,32,97,115, +- 32,116,104,101,114,101,32,105,115,32,110,111,32,115,111,117, +- 114,99,101,32,99,111,100,101,46,78,114,7,0,0,0,114, +- 247,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,1,1,0,0,126,4,0,0,114,24,0,0, +- 0,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108, +- 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, +- 99,101,78,41,6,114,150,0,0,0,114,149,0,0,0,114, +- 151,0,0,0,114,152,0,0,0,114,241,0,0,0,114,1, +- 1,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,114,41,1,0,0,106,4,0,0, +- 115,8,0,0,0,8,0,4,2,8,2,12,16,114,41,1, +- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,3,0,0,0,64,0,0,0,115,92,0,0,0, +- 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, +- 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, +- 132,0,90,6,100,8,100,9,132,0,90,7,100,10,100,11, +- 132,0,90,8,100,12,100,13,132,0,90,9,100,14,100,15, +- 132,0,90,10,100,16,100,17,132,0,90,11,101,12,100,18, +- 100,19,132,0,131,1,90,13,100,20,83,0,41,21,114,30, +- 1,0,0,122,93,76,111,97,100,101,114,32,102,111,114,32, +- 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, +- 115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,115, +- 116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,103, +- 110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104, +- 32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,32, +- 32,32,99,3,0,0,0,0,0,0,0,0,0,0,0,3, +- 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, +- 124,1,124,0,95,0,124,2,124,0,95,1,100,0,83,0, +- 114,69,0,0,0,114,183,0,0,0,41,3,114,143,0,0, +- 0,114,141,0,0,0,114,65,0,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,114,236,0,0,0,139, +- 4,0,0,115,4,0,0,0,6,1,10,1,122,28,69,120, +- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, +- 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, +- 0,0,0,114,12,1,0,0,114,69,0,0,0,114,13,1, +- 0,0,114,15,1,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,16,1,0,0,143,4,0,0,114, +- 17,1,0,0,122,26,69,120,116,101,110,115,105,111,110,70, +- 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +- 0,3,0,0,0,67,0,0,0,114,18,1,0,0,114,69, +- 0,0,0,114,19,1,0,0,114,21,1,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,22,1,0, +- 0,147,4,0,0,114,23,1,0,0,122,28,69,120,116,101, ++ 0,2,0,0,0,67,0,0,0,114,13,1,0,0,114,71, ++ 0,0,0,114,14,1,0,0,114,16,1,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,17,1,0, ++ 0,147,4,0,0,114,18,1,0,0,122,26,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, +- 95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,0, +- 0,0,0,0,0,3,0,0,0,5,0,0,0,67,0,0, +- 0,115,36,0,0,0,116,0,160,1,116,2,106,3,124,1, +- 161,2,125,2,116,0,160,4,100,1,124,1,106,5,124,0, +- 106,6,161,3,1,0,124,2,83,0,41,2,122,38,67,114, +- 101,97,116,101,32,97,110,32,117,110,105,116,105,97,108,105, +- 122,101,100,32,101,120,116,101,110,115,105,111,110,32,109,111, +- 100,117,108,101,122,38,101,120,116,101,110,115,105,111,110,32, +- 109,111,100,117,108,101,32,123,33,114,125,32,108,111,97,100, +- 101,100,32,102,114,111,109,32,123,33,114,125,41,7,114,159, +- 0,0,0,114,242,0,0,0,114,187,0,0,0,90,14,99, +- 114,101,97,116,101,95,100,121,110,97,109,105,99,114,173,0, +- 0,0,114,141,0,0,0,114,65,0,0,0,41,3,114,143, +- 0,0,0,114,210,0,0,0,114,244,0,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,239,0,0, +- 0,150,4,0,0,115,14,0,0,0,4,2,6,1,4,255, +- 6,2,8,1,4,255,4,2,122,33,69,120,116,101,110,115, +- 105,111,110,70,105,108,101,76,111,97,100,101,114,46,99,114, +- 101,97,116,101,95,109,111,100,117,108,101,99,2,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, +- 67,0,0,0,115,36,0,0,0,116,0,160,1,116,2,106, +- 3,124,1,161,2,1,0,116,0,160,4,100,1,124,0,106, +- 5,124,0,106,6,161,3,1,0,100,2,83,0,41,3,122, +- 30,73,110,105,116,105,97,108,105,122,101,32,97,110,32,101, +- 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,122, +- 40,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, +- 101,32,123,33,114,125,32,101,120,101,99,117,116,101,100,32, +- 102,114,111,109,32,123,33,114,125,78,41,7,114,159,0,0, +- 0,114,242,0,0,0,114,187,0,0,0,90,12,101,120,101, +- 99,95,100,121,110,97,109,105,99,114,173,0,0,0,114,141, +- 0,0,0,114,65,0,0,0,169,2,114,143,0,0,0,114, +- 244,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,245,0,0,0,158,4,0,0,115,8,0,0, +- 0,14,2,6,1,8,1,8,255,122,31,69,120,116,101,110, +- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,101, +- 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,3, +- 0,0,0,115,36,0,0,0,116,0,124,0,106,1,131,1, +- 100,1,25,0,137,0,116,2,135,0,102,1,100,2,100,3, +- 132,8,116,3,68,0,131,1,131,1,83,0,41,4,122,49, +- 82,101,116,117,114,110,32,84,114,117,101,32,105,102,32,116, +- 104,101,32,101,120,116,101,110,115,105,111,110,32,109,111,100, +- 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101, +- 46,114,3,0,0,0,99,1,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,4,0,0,0,51,0,0,0,115, +- 28,0,0,0,129,0,124,0,93,9,125,1,136,0,100,0, +- 124,1,23,0,107,2,86,0,1,0,113,2,100,1,83,0, +- 41,2,114,236,0,0,0,78,114,7,0,0,0,169,2,114, +- 5,0,0,0,218,6,115,117,102,102,105,120,169,1,90,9, +- 102,105,108,101,95,110,97,109,101,114,7,0,0,0,114,8, +- 0,0,0,114,9,0,0,0,167,4,0,0,115,8,0,0, +- 0,2,128,4,0,2,1,20,255,122,49,69,120,116,101,110, +- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, +- 115,95,112,97,99,107,97,103,101,46,60,108,111,99,97,108, +- 115,62,46,60,103,101,110,101,120,112,114,62,41,4,114,74, +- 0,0,0,114,65,0,0,0,218,3,97,110,121,114,232,0, +- 0,0,114,247,0,0,0,114,7,0,0,0,114,45,1,0, +- 0,114,8,0,0,0,114,206,0,0,0,164,4,0,0,115, +- 8,0,0,0,14,2,12,1,2,1,8,255,122,30,69,120, +- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, +- 114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, +- 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, +- 0,67,0,0,0,114,23,0,0,0,41,2,122,63,82,101, +- 116,117,114,110,32,78,111,110,101,32,97,115,32,97,110,32, +- 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, +- 32,99,97,110,110,111,116,32,99,114,101,97,116,101,32,97, +- 32,99,111,100,101,32,111,98,106,101,99,116,46,78,114,7, +- 0,0,0,114,247,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,114,241,0,0,0,170,4,0,0, +- 114,24,0,0,0,122,28,69,120,116,101,110,115,105,111,110, +- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, +- 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, +- 0,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, +- 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, +- 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, +- 117,114,99,101,32,99,111,100,101,46,78,114,7,0,0,0, +- 114,247,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,114,1,1,0,0,174,4,0,0,114,24,0, +- 0,0,122,30,69,120,116,101,110,115,105,111,110,70,105,108, +- 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, +- 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, +- 0,0,0,1,0,0,0,67,0,0,0,114,26,1,0,0, +- 114,27,1,0,0,114,71,0,0,0,114,247,0,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,203, +- 0,0,0,178,4,0,0,114,28,1,0,0,122,32,69,120, +- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, +- 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, +- 14,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, +- 114,152,0,0,0,114,236,0,0,0,114,16,1,0,0,114, +- 22,1,0,0,114,239,0,0,0,114,245,0,0,0,114,206, +- 0,0,0,114,241,0,0,0,114,1,1,0,0,114,160,0, +- 0,0,114,203,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,30,1,0,0, +- 131,4,0,0,115,24,0,0,0,8,0,4,2,8,6,8, +- 4,8,4,8,3,8,8,8,6,8,6,8,4,2,4,14, +- 1,114,30,1,0,0,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, +- 104,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, +- 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, +- 100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,7, +- 100,10,100,11,132,0,90,8,100,12,100,13,132,0,90,9, +- 100,14,100,15,132,0,90,10,100,16,100,17,132,0,90,11, +- 100,18,100,19,132,0,90,12,100,20,100,21,132,0,90,13, +- 100,22,100,23,132,0,90,14,100,24,83,0,41,25,218,14, +- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38, +- 1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32, +- 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103, +- 101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115, +- 101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97, +- 109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105, +- 116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101, +- 44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101, +- 32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101, +- 32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95, +- 112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104, +- 105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32, +- 109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116, +- 104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44, +- 10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95, +- 102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112, +- 45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32, +- 116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108, +- 101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32, +- 115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0, +- 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, +- 0,0,115,36,0,0,0,124,1,124,0,95,0,124,2,124, +- 0,95,1,116,2,124,0,160,3,161,0,131,1,124,0,95, +- 4,124,3,124,0,95,5,100,0,83,0,114,69,0,0,0, +- 41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,104, +- 114,136,0,0,0,218,16,95,103,101,116,95,112,97,114,101, +- 110,116,95,112,97,116,104,218,17,95,108,97,115,116,95,112, +- 97,114,101,110,116,95,112,97,116,104,218,12,95,112,97,116, +- 104,95,102,105,110,100,101,114,169,4,114,143,0,0,0,114, +- 141,0,0,0,114,65,0,0,0,90,11,112,97,116,104,95, +- 102,105,110,100,101,114,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,114,236,0,0,0,191,4,0,0,115,8, +- 0,0,0,6,1,6,1,14,1,10,1,122,23,95,78,97, +- 109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,110, +- 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0, +- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,38,0, +- 0,0,124,0,106,0,160,1,100,1,161,1,92,3,125,1, +- 125,2,125,3,124,2,100,2,107,2,114,15,100,3,83,0, +- 124,1,100,4,102,2,83,0,41,5,122,62,82,101,116,117, +- 114,110,115,32,97,32,116,117,112,108,101,32,111,102,32,40, +- 112,97,114,101,110,116,45,109,111,100,117,108,101,45,110,97, +- 109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,45, +- 97,116,116,114,45,110,97,109,101,41,114,97,0,0,0,114, +- 10,0,0,0,41,2,114,15,0,0,0,114,65,0,0,0, +- 90,8,95,95,112,97,116,104,95,95,41,2,114,48,1,0, +- 0,114,104,0,0,0,41,4,114,143,0,0,0,114,40,1, +- 0,0,218,3,100,111,116,90,2,109,101,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,218,23,95,102,105,110, +- 100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,97, +- 109,101,115,197,4,0,0,115,8,0,0,0,18,2,8,1, +- 4,2,8,3,122,38,95,78,97,109,101,115,112,97,99,101, +- 80,97,116,104,46,95,102,105,110,100,95,112,97,114,101,110, +- 116,95,112,97,116,104,95,110,97,109,101,115,99,1,0,0, +- 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, +- 0,67,0,0,0,115,28,0,0,0,124,0,160,0,161,0, +- 92,2,125,1,125,2,116,1,116,2,106,3,124,1,25,0, +- 124,2,131,2,83,0,114,69,0,0,0,41,4,114,55,1, +- 0,0,114,155,0,0,0,114,15,0,0,0,218,7,109,111, +- 100,117,108,101,115,41,3,114,143,0,0,0,90,18,112,97, +- 114,101,110,116,95,109,111,100,117,108,101,95,110,97,109,101, +- 90,14,112,97,116,104,95,97,116,116,114,95,110,97,109,101, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, +- 50,1,0,0,207,4,0,0,115,4,0,0,0,12,1,16, +- 1,122,31,95,78,97,109,101,115,112,97,99,101,80,97,116, +- 104,46,95,103,101,116,95,112,97,114,101,110,116,95,112,97, +- 116,104,99,1,0,0,0,0,0,0,0,0,0,0,0,3, +- 0,0,0,4,0,0,0,67,0,0,0,115,80,0,0,0, +- 116,0,124,0,160,1,161,0,131,1,125,1,124,1,124,0, +- 106,2,107,3,114,37,124,0,160,3,124,0,106,4,124,1, +- 161,2,125,2,124,2,100,0,117,1,114,34,124,2,106,5, +- 100,0,117,0,114,34,124,2,106,6,114,34,124,2,106,6, +- 124,0,95,7,124,1,124,0,95,2,124,0,106,7,83,0, +- 114,69,0,0,0,41,8,114,136,0,0,0,114,50,1,0, +- 0,114,51,1,0,0,114,52,1,0,0,114,48,1,0,0, +- 114,164,0,0,0,114,202,0,0,0,114,49,1,0,0,41, +- 3,114,143,0,0,0,90,11,112,97,114,101,110,116,95,112, +- 97,116,104,114,210,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,218,12,95,114,101,99,97,108,99, +- 117,108,97,116,101,211,4,0,0,115,16,0,0,0,12,2, +- 10,1,14,1,18,3,6,1,8,1,6,1,6,1,122,27, +- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, +- 114,101,99,97,108,99,117,108,97,116,101,99,1,0,0,0, +- 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, +- 67,0,0,0,243,12,0,0,0,116,0,124,0,160,1,161, +- 0,131,1,83,0,114,69,0,0,0,41,2,218,4,105,116, +- 101,114,114,57,1,0,0,114,21,1,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,8,95,95,105, +- 116,101,114,95,95,224,4,0,0,243,2,0,0,0,12,1, +- 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, +- 46,95,95,105,116,101,114,95,95,99,2,0,0,0,0,0, +- 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, +- 0,0,115,12,0,0,0,124,0,160,0,161,0,124,1,25, +- 0,83,0,114,69,0,0,0,169,1,114,57,1,0,0,41, +- 2,114,143,0,0,0,218,5,105,110,100,101,120,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,218,11,95,95, +- 103,101,116,105,116,101,109,95,95,227,4,0,0,114,61,1, +- 0,0,122,26,95,78,97,109,101,115,112,97,99,101,80,97, +- 116,104,46,95,95,103,101,116,105,116,101,109,95,95,99,3, +- 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, +- 0,0,0,67,0,0,0,115,14,0,0,0,124,2,124,0, +- 106,0,124,1,60,0,100,0,83,0,114,69,0,0,0,41, +- 1,114,49,1,0,0,41,3,114,143,0,0,0,114,63,1, +- 0,0,114,65,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,218,11,95,95,115,101,116,105,116,101, +- 109,95,95,230,4,0,0,115,2,0,0,0,14,1,122,26, +- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, +- 95,115,101,116,105,116,101,109,95,95,99,1,0,0,0,0, +- 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, +- 0,0,0,114,58,1,0,0,114,69,0,0,0,41,2,114, +- 4,0,0,0,114,57,1,0,0,114,21,1,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,218,7,95, +- 95,108,101,110,95,95,233,4,0,0,114,61,1,0,0,122, +- 22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, +- 95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, +- 243,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83, +- 0,41,2,78,122,20,95,78,97,109,101,115,112,97,99,101, +- 80,97,116,104,40,123,33,114,125,41,41,2,114,89,0,0, +- 0,114,49,1,0,0,114,21,1,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,218,8,95,95,114,101, +- 112,114,95,95,236,4,0,0,114,61,1,0,0,122,23,95, +- 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, +- 114,101,112,114,95,95,99,2,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, +- 12,0,0,0,124,1,124,0,160,0,161,0,118,0,83,0, +- 114,69,0,0,0,114,62,1,0,0,169,2,114,143,0,0, +- 0,218,4,105,116,101,109,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,218,12,95,95,99,111,110,116,97,105, +- 110,115,95,95,239,4,0,0,114,61,1,0,0,122,27,95, +- 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, +- 99,111,110,116,97,105,110,115,95,95,99,2,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, +- 0,0,0,115,16,0,0,0,124,0,106,0,160,1,124,1, +- 161,1,1,0,100,0,83,0,114,69,0,0,0,41,2,114, +- 49,1,0,0,114,61,0,0,0,114,69,1,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,61,0, +- 0,0,242,4,0,0,243,2,0,0,0,16,1,122,21,95, +- 78,97,109,101,115,112,97,99,101,80,97,116,104,46,97,112, +- 112,101,110,100,78,41,15,114,150,0,0,0,114,149,0,0, +- 0,114,151,0,0,0,114,152,0,0,0,114,236,0,0,0, +- 114,55,1,0,0,114,50,1,0,0,114,57,1,0,0,114, +- 60,1,0,0,114,64,1,0,0,114,65,1,0,0,114,66, +- 1,0,0,114,68,1,0,0,114,71,1,0,0,114,61,0, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,47,1,0,0,184,4,0,0,115, +- 26,0,0,0,8,0,4,1,8,6,8,6,8,10,8,4, +- 8,13,8,3,8,3,8,3,8,3,8,3,12,3,114,47, +- 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,3,0,0,0,64,0,0,0,115,88,0,0, +- 0,101,0,90,1,100,0,90,2,100,1,100,2,132,0,90, +- 3,101,4,100,3,100,4,132,0,131,1,90,5,100,5,100, +- 6,132,0,90,6,100,7,100,8,132,0,90,7,100,9,100, +- 10,132,0,90,8,100,11,100,12,132,0,90,9,100,13,100, +- 14,132,0,90,10,100,15,100,16,132,0,90,11,100,17,100, +- 18,132,0,90,12,100,19,83,0,41,20,218,16,95,78,97, +- 109,101,115,112,97,99,101,76,111,97,100,101,114,99,4,0, +- 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, +- 0,0,67,0,0,0,115,18,0,0,0,116,0,124,1,124, +- 2,124,3,131,3,124,0,95,1,100,0,83,0,114,69,0, +- 0,0,41,2,114,47,1,0,0,114,49,1,0,0,114,53, +- 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,236,0,0,0,248,4,0,0,115,2,0,0,0, +- 18,1,122,25,95,78,97,109,101,115,112,97,99,101,76,111, +- 97,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, +- 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0, +- 0,0,67,0,0,0,115,24,0,0,0,116,0,160,1,100, +- 1,116,2,161,2,1,0,100,2,160,3,124,0,106,4,161, +- 1,83,0,41,3,122,115,82,101,116,117,114,110,32,114,101, +- 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108, +- 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, +- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, +- 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114, +- 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115, +- 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46, +- 10,10,32,32,32,32,32,32,32,32,122,82,95,78,97,109, +- 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, +- 117,108,101,95,114,101,112,114,40,41,32,105,115,32,100,101, +- 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, +- 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, +- 105,110,32,80,121,116,104,111,110,32,51,46,49,50,122,25, +- 60,109,111,100,117,108,101,32,123,33,114,125,32,40,110,97, +- 109,101,115,112,97,99,101,41,62,41,5,114,99,0,0,0, +- 114,100,0,0,0,114,101,0,0,0,114,89,0,0,0,114, +- 150,0,0,0,41,1,114,244,0,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,218,11,109,111,100,117, +- 108,101,95,114,101,112,114,251,4,0,0,115,8,0,0,0, +- 6,7,2,1,4,255,12,2,122,28,95,78,97,109,101,115, +- 112,97,99,101,76,111,97,100,101,114,46,109,111,100,117,108, +- 101,95,114,101,112,114,99,2,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, +- 23,0,0,0,41,2,78,84,114,7,0,0,0,114,247,0, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,114,206,0,0,0,6,5,0,0,243,2,0,0,0,4, +- 1,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, +- 100,101,114,46,105,115,95,112,97,99,107,97,103,101,99,2, +- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, +- 0,0,0,67,0,0,0,114,23,0,0,0,41,2,78,114, +- 10,0,0,0,114,7,0,0,0,114,247,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,1,1, +- 0,0,9,5,0,0,114,75,1,0,0,122,27,95,78,97, +- 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, +- 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, +- 0,0,0,0,0,2,0,0,0,6,0,0,0,67,0,0, +- 0,115,16,0,0,0,116,0,100,1,100,2,100,3,100,4, +- 100,5,141,4,83,0,41,6,78,114,10,0,0,0,122,8, +- 60,115,116,114,105,110,103,62,114,243,0,0,0,84,41,1, +- 114,3,1,0,0,41,1,114,4,1,0,0,114,247,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,241,0,0,0,12,5,0,0,114,72,1,0,0,122,25, +- 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, ++ 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,114, ++ 19,1,0,0,114,71,0,0,0,114,20,1,0,0,114,22, ++ 1,0,0,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,23,1,0,0,151,4,0,0,114,24,1,0,0, ++ 122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76, ++ 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, ++ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,5, ++ 0,0,0,67,0,0,0,115,36,0,0,0,116,0,160,1, ++ 116,2,106,3,124,1,161,2,125,2,116,0,160,4,100,1, ++ 124,1,106,5,124,0,106,6,161,3,1,0,124,2,83,0, ++ 41,2,122,38,67,114,101,97,116,101,32,97,110,32,117,110, ++ 105,116,105,97,108,105,122,101,100,32,101,120,116,101,110,115, ++ 105,111,110,32,109,111,100,117,108,101,122,38,101,120,116,101, ++ 110,115,105,111,110,32,109,111,100,117,108,101,32,123,33,114, ++ 125,32,108,111,97,100,101,100,32,102,114,111,109,32,123,33, ++ 114,125,41,7,114,160,0,0,0,114,243,0,0,0,114,188, ++ 0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97, ++ 109,105,99,114,174,0,0,0,114,142,0,0,0,114,67,0, ++ 0,0,41,3,114,144,0,0,0,114,211,0,0,0,114,245, ++ 0,0,0,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,240,0,0,0,154,4,0,0,115,14,0,0,0, ++ 4,2,6,1,4,255,6,2,8,1,4,255,4,2,122,33, ++ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, ++ 100,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108, ++ 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, ++ 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, ++ 0,160,1,116,2,106,3,124,1,161,2,1,0,116,0,160, ++ 4,100,1,124,0,106,5,124,0,106,6,161,3,1,0,100, ++ 2,83,0,41,3,122,30,73,110,105,116,105,97,108,105,122, ++ 101,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109, ++ 111,100,117,108,101,122,40,101,120,116,101,110,115,105,111,110, ++ 32,109,111,100,117,108,101,32,123,33,114,125,32,101,120,101, ++ 99,117,116,101,100,32,102,114,111,109,32,123,33,114,125,78, ++ 41,7,114,160,0,0,0,114,243,0,0,0,114,188,0,0, ++ 0,90,12,101,120,101,99,95,100,121,110,97,109,105,99,114, ++ 174,0,0,0,114,142,0,0,0,114,67,0,0,0,169,2, ++ 114,144,0,0,0,114,245,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,246,0,0,0,162,4, ++ 0,0,115,8,0,0,0,14,2,6,1,8,1,8,255,122, ++ 31,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, ++ 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, ++ 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, ++ 0,4,0,0,0,3,0,0,0,115,36,0,0,0,116,0, ++ 124,0,106,1,131,1,100,1,25,0,137,0,116,2,135,0, ++ 102,1,100,2,100,3,132,8,116,3,68,0,131,1,131,1, ++ 83,0,41,4,122,49,82,101,116,117,114,110,32,84,114,117, ++ 101,32,105,102,32,116,104,101,32,101,120,116,101,110,115,105, ++ 111,110,32,109,111,100,117,108,101,32,105,115,32,97,32,112, ++ 97,99,107,97,103,101,46,114,4,0,0,0,99,1,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, ++ 0,51,0,0,0,115,28,0,0,0,129,0,124,0,93,9, ++ 125,1,136,0,100,0,124,1,23,0,107,2,86,0,1,0, ++ 113,2,100,1,83,0,41,2,114,237,0,0,0,78,114,8, ++ 0,0,0,169,2,114,6,0,0,0,218,6,115,117,102,102, ++ 105,120,169,1,90,9,102,105,108,101,95,110,97,109,101,114, ++ 8,0,0,0,114,9,0,0,0,114,10,0,0,0,171,4, ++ 0,0,115,8,0,0,0,2,128,4,0,2,1,20,255,122, ++ 49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, ++ 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46, ++ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, ++ 114,62,41,4,114,76,0,0,0,114,67,0,0,0,218,3, ++ 97,110,121,114,233,0,0,0,114,248,0,0,0,114,8,0, ++ 0,0,114,46,1,0,0,114,9,0,0,0,114,207,0,0, ++ 0,168,4,0,0,115,8,0,0,0,14,2,12,1,2,1, ++ 8,255,122,30,69,120,116,101,110,115,105,111,110,70,105,108, ++ 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, ++ 103,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, ++ 0,0,0,1,0,0,0,67,0,0,0,114,25,0,0,0, ++ 41,2,122,63,82,101,116,117,114,110,32,78,111,110,101,32, ++ 97,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32, ++ 109,111,100,117,108,101,32,99,97,110,110,111,116,32,99,114, ++ 101,97,116,101,32,97,32,99,111,100,101,32,111,98,106,101, ++ 99,116,46,78,114,8,0,0,0,114,248,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,114,242,0, ++ 0,0,174,4,0,0,114,26,0,0,0,122,28,69,120,116, ++ 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, +- 0,0,114,23,0,0,0,114,237,0,0,0,114,7,0,0, +- 0,114,238,0,0,0,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,114,239,0,0,0,15,5,0,0,114,240, +- 0,0,0,122,30,95,78,97,109,101,115,112,97,99,101,76, +- 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, +- 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, +- 0,100,0,83,0,114,69,0,0,0,114,7,0,0,0,114, +- 42,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,245,0,0,0,18,5,0,0,114,75,1,0, +- 0,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, +- 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,99, ++ 0,0,114,25,0,0,0,41,2,122,53,82,101,116,117,114, ++ 110,32,78,111,110,101,32,97,115,32,101,120,116,101,110,115, ++ 105,111,110,32,109,111,100,117,108,101,115,32,104,97,118,101, ++ 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, ++ 78,114,8,0,0,0,114,248,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,114,2,1,0,0,178, ++ 4,0,0,114,26,0,0,0,122,30,69,120,116,101,110,115, ++ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, ++ 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, ++ 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, ++ 0,114,27,1,0,0,114,28,1,0,0,114,73,0,0,0, ++ 114,248,0,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,204,0,0,0,182,4,0,0,114,29,1, ++ 0,0,122,32,69,120,116,101,110,115,105,111,110,70,105,108, ++ 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, ++ 110,97,109,101,78,41,14,114,151,0,0,0,114,150,0,0, ++ 0,114,152,0,0,0,114,153,0,0,0,114,237,0,0,0, ++ 114,17,1,0,0,114,23,1,0,0,114,240,0,0,0,114, ++ 246,0,0,0,114,207,0,0,0,114,242,0,0,0,114,2, ++ 1,0,0,114,161,0,0,0,114,204,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,31,1,0,0,135,4,0,0,115,24,0,0,0,8, ++ 0,4,2,8,6,8,4,8,4,8,3,8,8,8,6,8, ++ 6,8,4,2,4,14,1,114,31,1,0,0,99,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, ++ 0,64,0,0,0,115,104,0,0,0,101,0,90,1,100,0, ++ 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, ++ 100,5,132,0,90,5,100,6,100,7,132,0,90,6,100,8, ++ 100,9,132,0,90,7,100,10,100,11,132,0,90,8,100,12, ++ 100,13,132,0,90,9,100,14,100,15,132,0,90,10,100,16, ++ 100,17,132,0,90,11,100,18,100,19,132,0,90,12,100,20, ++ 100,21,132,0,90,13,100,22,100,23,132,0,90,14,100,24, ++ 83,0,41,25,218,14,95,78,97,109,101,115,112,97,99,101, ++ 80,97,116,104,97,38,1,0,0,82,101,112,114,101,115,101, ++ 110,116,115,32,97,32,110,97,109,101,115,112,97,99,101,32, ++ 112,97,99,107,97,103,101,39,115,32,112,97,116,104,46,32, ++ 32,73,116,32,117,115,101,115,32,116,104,101,32,109,111,100, ++ 117,108,101,32,110,97,109,101,10,32,32,32,32,116,111,32, ++ 102,105,110,100,32,105,116,115,32,112,97,114,101,110,116,32, ++ 109,111,100,117,108,101,44,32,97,110,100,32,102,114,111,109, ++ 32,116,104,101,114,101,32,105,116,32,108,111,111,107,115,32, ++ 117,112,32,116,104,101,32,112,97,114,101,110,116,39,115,10, ++ 32,32,32,32,95,95,112,97,116,104,95,95,46,32,32,87, ++ 104,101,110,32,116,104,105,115,32,99,104,97,110,103,101,115, ++ 44,32,116,104,101,32,109,111,100,117,108,101,39,115,32,111, ++ 119,110,32,112,97,116,104,32,105,115,32,114,101,99,111,109, ++ 112,117,116,101,100,44,10,32,32,32,32,117,115,105,110,103, ++ 32,112,97,116,104,95,102,105,110,100,101,114,46,32,32,70, ++ 111,114,32,116,111,112,45,108,101,118,101,108,32,109,111,100, ++ 117,108,101,115,44,32,116,104,101,32,112,97,114,101,110,116, ++ 32,109,111,100,117,108,101,39,115,32,112,97,116,104,10,32, ++ 32,32,32,105,115,32,115,121,115,46,112,97,116,104,46,99, ++ 4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, ++ 3,0,0,0,67,0,0,0,115,36,0,0,0,124,1,124, ++ 0,95,0,124,2,124,0,95,1,116,2,124,0,160,3,161, ++ 0,131,1,124,0,95,4,124,3,124,0,95,5,100,0,83, ++ 0,114,71,0,0,0,41,6,218,5,95,110,97,109,101,218, ++ 5,95,112,97,116,104,114,137,0,0,0,218,16,95,103,101, ++ 116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95, ++ 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, ++ 218,12,95,112,97,116,104,95,102,105,110,100,101,114,169,4, ++ 114,144,0,0,0,114,142,0,0,0,114,67,0,0,0,90, ++ 11,112,97,116,104,95,102,105,110,100,101,114,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,114,237,0,0,0, ++ 195,4,0,0,115,8,0,0,0,6,1,6,1,14,1,10, ++ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, ++ 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, ++ 0,0,0,115,38,0,0,0,124,0,106,0,160,1,100,1, ++ 161,1,92,3,125,1,125,2,125,3,124,2,100,2,107,2, ++ 114,15,100,3,83,0,124,1,100,4,102,2,83,0,41,5, ++ 122,62,82,101,116,117,114,110,115,32,97,32,116,117,112,108, ++ 101,32,111,102,32,40,112,97,114,101,110,116,45,109,111,100, ++ 117,108,101,45,110,97,109,101,44,32,112,97,114,101,110,116, ++ 45,112,97,116,104,45,97,116,116,114,45,110,97,109,101,41, ++ 114,99,0,0,0,114,11,0,0,0,41,2,114,16,0,0, ++ 0,114,67,0,0,0,90,8,95,95,112,97,116,104,95,95, ++ 41,2,114,49,1,0,0,114,106,0,0,0,41,4,114,144, ++ 0,0,0,114,41,1,0,0,218,3,100,111,116,90,2,109, ++ 101,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 218,23,95,102,105,110,100,95,112,97,114,101,110,116,95,112, ++ 97,116,104,95,110,97,109,101,115,201,4,0,0,115,8,0, ++ 0,0,18,2,8,1,4,2,8,3,122,38,95,78,97,109, ++ 101,115,112,97,99,101,80,97,116,104,46,95,102,105,110,100, ++ 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, ++ 101,115,99,1,0,0,0,0,0,0,0,0,0,0,0,3, ++ 0,0,0,3,0,0,0,67,0,0,0,115,28,0,0,0, ++ 124,0,160,0,161,0,92,2,125,1,125,2,116,1,116,2, ++ 106,3,124,1,25,0,124,2,131,2,83,0,114,71,0,0, ++ 0,41,4,114,56,1,0,0,114,156,0,0,0,114,16,0, ++ 0,0,218,7,109,111,100,117,108,101,115,41,3,114,144,0, ++ 0,0,90,18,112,97,114,101,110,116,95,109,111,100,117,108, ++ 101,95,110,97,109,101,90,14,112,97,116,104,95,97,116,116, ++ 114,95,110,97,109,101,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,114,51,1,0,0,211,4,0,0,115,4, ++ 0,0,0,12,1,16,1,122,31,95,78,97,109,101,115,112, ++ 97,99,101,80,97,116,104,46,95,103,101,116,95,112,97,114, ++ 101,110,116,95,112,97,116,104,99,1,0,0,0,0,0,0, ++ 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, ++ 0,115,80,0,0,0,116,0,124,0,160,1,161,0,131,1, ++ 125,1,124,1,124,0,106,2,107,3,114,37,124,0,160,3, ++ 124,0,106,4,124,1,161,2,125,2,124,2,100,0,117,1, ++ 114,34,124,2,106,5,100,0,117,0,114,34,124,2,106,6, ++ 114,34,124,2,106,6,124,0,95,7,124,1,124,0,95,2, ++ 124,0,106,7,83,0,114,71,0,0,0,41,8,114,137,0, ++ 0,0,114,51,1,0,0,114,52,1,0,0,114,53,1,0, ++ 0,114,49,1,0,0,114,165,0,0,0,114,203,0,0,0, ++ 114,50,1,0,0,41,3,114,144,0,0,0,90,11,112,97, ++ 114,101,110,116,95,112,97,116,104,114,211,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,218,12,95, ++ 114,101,99,97,108,99,117,108,97,116,101,215,4,0,0,115, ++ 16,0,0,0,12,2,10,1,14,1,18,3,6,1,8,1, ++ 6,1,6,1,122,27,95,78,97,109,101,115,112,97,99,101, ++ 80,97,116,104,46,95,114,101,99,97,108,99,117,108,97,116, ++ 101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, ++ 0,0,3,0,0,0,67,0,0,0,243,12,0,0,0,116, ++ 0,124,0,160,1,161,0,131,1,83,0,114,71,0,0,0, ++ 41,2,218,4,105,116,101,114,114,58,1,0,0,114,22,1, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,8,95,95,105,116,101,114,95,95,228,4,0,0,243, ++ 2,0,0,0,12,1,122,23,95,78,97,109,101,115,112,97, ++ 99,101,80,97,116,104,46,95,95,105,116,101,114,95,95,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 4,0,0,0,67,0,0,0,115,26,0,0,0,116,0,160, +- 1,100,1,124,0,106,2,161,2,1,0,116,0,160,3,124, +- 0,124,1,161,2,83,0,41,2,122,98,76,111,97,100,32, +- 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, +- 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, +- 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, +- 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, +- 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, +- 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, +- 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, +- 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, +- 32,123,33,114,125,41,4,114,159,0,0,0,114,173,0,0, +- 0,114,49,1,0,0,114,246,0,0,0,114,247,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, +- 248,0,0,0,21,5,0,0,115,8,0,0,0,6,7,4, +- 1,4,255,12,3,122,28,95,78,97,109,101,115,112,97,99, +- 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, +- 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, +- 0,100,1,100,2,108,0,109,1,125,2,1,0,124,2,124, +- 0,106,2,131,1,83,0,41,3,78,114,0,0,0,0,41, +- 1,218,15,78,97,109,101,115,112,97,99,101,82,101,97,100, +- 101,114,41,3,114,32,1,0,0,114,76,1,0,0,114,49, +- 1,0,0,41,3,114,143,0,0,0,114,244,0,0,0,114, +- 76,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,33,1,0,0,33,5,0,0,115,4,0,0, +- 0,12,1,10,1,122,36,95,78,97,109,101,115,112,97,99, +- 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, +- 117,114,99,101,95,114,101,97,100,101,114,78,41,13,114,150, +- 0,0,0,114,149,0,0,0,114,151,0,0,0,114,236,0, +- 0,0,114,233,0,0,0,114,74,1,0,0,114,206,0,0, +- 0,114,1,1,0,0,114,241,0,0,0,114,239,0,0,0, +- 114,245,0,0,0,114,248,0,0,0,114,33,1,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,73,1,0,0,247,4,0,0,115,22,0,0, +- 0,8,0,8,1,2,3,10,1,8,10,8,3,8,3,8, +- 3,8,3,8,3,12,12,114,73,1,0,0,99,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, +- 0,64,0,0,0,115,118,0,0,0,101,0,90,1,100,0, +- 90,2,100,1,90,3,101,4,100,2,100,3,132,0,131,1, +- 90,5,101,4,100,4,100,5,132,0,131,1,90,6,101,7, +- 100,6,100,7,132,0,131,1,90,8,101,7,100,8,100,9, +- 132,0,131,1,90,9,101,7,100,19,100,11,100,12,132,1, +- 131,1,90,10,101,7,100,20,100,13,100,14,132,1,131,1, +- 90,11,101,7,100,19,100,15,100,16,132,1,131,1,90,12, +- 101,4,100,17,100,18,132,0,131,1,90,13,100,10,83,0, +- 41,21,218,10,80,97,116,104,70,105,110,100,101,114,122,62, +- 77,101,116,97,32,112,97,116,104,32,102,105,110,100,101,114, +- 32,102,111,114,32,115,121,115,46,112,97,116,104,32,97,110, +- 100,32,112,97,99,107,97,103,101,32,95,95,112,97,116,104, +- 95,95,32,97,116,116,114,105,98,117,116,101,115,46,99,0, +- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, +- 0,0,0,67,0,0,0,115,64,0,0,0,116,0,116,1, +- 106,2,160,3,161,0,131,1,68,0,93,22,92,2,125,0, +- 125,1,124,1,100,1,117,0,114,20,116,1,106,2,124,0, +- 61,0,113,7,116,4,124,1,100,2,131,2,114,29,124,1, +- 160,5,161,0,1,0,113,7,100,1,83,0,41,3,122,125, +- 67,97,108,108,32,116,104,101,32,105,110,118,97,108,105,100, +- 97,116,101,95,99,97,99,104,101,115,40,41,32,109,101,116, +- 104,111,100,32,111,110,32,97,108,108,32,112,97,116,104,32, +- 101,110,116,114,121,32,102,105,110,100,101,114,115,10,32,32, +- 32,32,32,32,32,32,115,116,111,114,101,100,32,105,110,32, +- 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, +- 114,95,99,97,99,104,101,115,32,40,119,104,101,114,101,32, +- 105,109,112,108,101,109,101,110,116,101,100,41,46,78,218,17, +- 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, +- 115,41,6,218,4,108,105,115,116,114,15,0,0,0,218,19, +- 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, +- 99,104,101,218,5,105,116,101,109,115,114,153,0,0,0,114, +- 78,1,0,0,41,2,114,141,0,0,0,218,6,102,105,110, +- 100,101,114,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,78,1,0,0,44,5,0,0,115,14,0,0,0, +- 22,4,8,1,10,1,10,1,8,1,2,128,4,252,122,28, +- 80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108, +- 105,100,97,116,101,95,99,97,99,104,101,115,99,1,0,0, +- 0,0,0,0,0,0,0,0,0,2,0,0,0,9,0,0, +- 0,67,0,0,0,115,76,0,0,0,116,0,106,1,100,1, +- 117,1,114,14,116,0,106,1,115,14,116,2,160,3,100,2, +- 116,4,161,2,1,0,116,0,106,1,68,0,93,18,125,1, +- 122,7,124,1,124,0,131,1,87,0,2,0,1,0,83,0, +- 4,0,116,5,121,35,1,0,1,0,1,0,89,0,113,17, +- 119,0,100,1,83,0,41,3,122,46,83,101,97,114,99,104, +- 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, +- 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, +- 32,39,112,97,116,104,39,46,78,122,23,115,121,115,46,112, +- 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, +- 116,121,41,6,114,15,0,0,0,218,10,112,97,116,104,95, +- 104,111,111,107,115,114,99,0,0,0,114,100,0,0,0,114, +- 162,0,0,0,114,142,0,0,0,41,2,114,65,0,0,0, +- 90,4,104,111,111,107,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,11,95,112,97,116,104,95,104,111,111, +- 107,115,54,5,0,0,115,18,0,0,0,16,3,12,1,10, +- 1,2,1,14,1,12,1,4,1,2,255,4,3,122,22,80, +- 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, +- 104,111,111,107,115,99,2,0,0,0,0,0,0,0,0,0, +- 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,100, +- 0,0,0,124,1,100,1,107,2,114,21,122,6,116,0,160, +- 1,161,0,125,1,87,0,110,10,4,0,116,2,121,20,1, +- 0,1,0,1,0,89,0,100,2,83,0,119,0,122,8,116, +- 3,106,4,124,1,25,0,125,2,87,0,124,2,83,0,4, +- 0,116,5,121,49,1,0,1,0,1,0,124,0,160,6,124, +- 1,161,1,125,2,124,2,116,3,106,4,124,1,60,0,89, +- 0,124,2,83,0,119,0,41,3,122,210,71,101,116,32,116, +- 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, +- 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, +- 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, +- 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, +- 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, +- 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, +- 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, +- 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, +- 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, +- 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, +- 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, +- 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, +- 110,101,46,10,10,32,32,32,32,32,32,32,32,114,10,0, +- 0,0,78,41,7,114,18,0,0,0,114,82,0,0,0,218, +- 17,70,105,108,101,78,111,116,70,111,117,110,100,69,114,114, +- 111,114,114,15,0,0,0,114,80,1,0,0,218,8,75,101, +- 121,69,114,114,111,114,114,84,1,0,0,41,3,114,221,0, +- 0,0,114,65,0,0,0,114,82,1,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,20,95,112,97, +- 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, +- 101,67,5,0,0,115,28,0,0,0,8,8,2,1,12,1, +- 12,1,6,3,2,253,2,4,12,1,4,4,12,253,10,1, +- 12,1,4,1,2,253,122,31,80,97,116,104,70,105,110,100, +- 101,114,46,95,112,97,116,104,95,105,109,112,111,114,116,101, +- 114,95,99,97,99,104,101,99,3,0,0,0,0,0,0,0, +- 0,0,0,0,7,0,0,0,4,0,0,0,67,0,0,0, +- 115,138,0,0,0,116,0,124,2,100,1,131,2,114,27,116, +- 1,160,2,124,2,161,1,155,0,100,2,157,2,125,3,116, +- 3,160,4,124,3,116,5,161,2,1,0,124,2,160,6,124, +- 1,161,1,92,2,125,4,125,5,110,21,116,1,160,2,124, +- 2,161,1,155,0,100,3,157,2,125,3,116,3,160,4,124, +- 3,116,5,161,2,1,0,124,2,160,7,124,1,161,1,125, +- 4,103,0,125,5,124,4,100,0,117,1,114,58,116,1,160, +- 8,124,1,124,4,161,2,83,0,116,1,160,9,124,1,100, +- 0,161,2,125,6,124,5,124,6,95,10,124,6,83,0,41, +- 4,78,114,161,0,0,0,122,53,46,102,105,110,100,95,115, +- 112,101,99,40,41,32,110,111,116,32,102,111,117,110,100,59, +- 32,102,97,108,108,105,110,103,32,98,97,99,107,32,116,111, +- 32,102,105,110,100,95,108,111,97,100,101,114,40,41,122,53, +- 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, +- 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, +- 98,97,99,107,32,116,111,32,102,105,110,100,95,109,111,100, +- 117,108,101,40,41,41,11,114,153,0,0,0,114,159,0,0, +- 0,90,12,95,111,98,106,101,99,116,95,110,97,109,101,114, +- 99,0,0,0,114,100,0,0,0,114,162,0,0,0,114,161, +- 0,0,0,114,229,0,0,0,114,224,0,0,0,114,207,0, +- 0,0,114,202,0,0,0,41,7,114,221,0,0,0,114,163, +- 0,0,0,114,82,1,0,0,114,166,0,0,0,114,164,0, +- 0,0,114,165,0,0,0,114,210,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,16,95,108,101, +- 103,97,99,121,95,103,101,116,95,115,112,101,99,89,5,0, +- 0,115,26,0,0,0,10,4,16,1,12,2,16,1,16,2, +- 12,2,10,1,4,1,8,1,12,1,12,1,6,1,4,1, +- 122,27,80,97,116,104,70,105,110,100,101,114,46,95,108,101, +- 103,97,99,121,95,103,101,116,95,115,112,101,99,78,99,4, +- 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,5, +- 0,0,0,67,0,0,0,115,166,0,0,0,103,0,125,4, +- 124,2,68,0,93,67,125,5,116,0,124,5,116,1,116,2, +- 102,2,131,2,115,14,113,4,124,0,160,3,124,5,161,1, +- 125,6,124,6,100,1,117,1,114,71,116,4,124,6,100,2, +- 131,2,114,35,124,6,160,5,124,1,124,3,161,2,125,7, +- 110,6,124,0,160,6,124,1,124,6,161,2,125,7,124,7, +- 100,1,117,0,114,46,113,4,124,7,106,7,100,1,117,1, +- 114,55,124,7,2,0,1,0,83,0,124,7,106,8,125,8, +- 124,8,100,1,117,0,114,66,116,9,100,3,131,1,130,1, +- 124,4,160,10,124,8,161,1,1,0,113,4,116,11,160,12, +- 124,1,100,1,161,2,125,7,124,4,124,7,95,8,124,7, +- 83,0,41,4,122,63,70,105,110,100,32,116,104,101,32,108, +- 111,97,100,101,114,32,111,114,32,110,97,109,101,115,112,97, +- 99,101,95,112,97,116,104,32,102,111,114,32,116,104,105,115, +- 32,109,111,100,117,108,101,47,112,97,99,107,97,103,101,32, +- 110,97,109,101,46,78,114,226,0,0,0,122,19,115,112,101, +- 99,32,109,105,115,115,105,110,103,32,108,111,97,100,101,114, +- 41,13,114,185,0,0,0,114,109,0,0,0,218,5,98,121, +- 116,101,115,114,87,1,0,0,114,153,0,0,0,114,226,0, +- 0,0,114,88,1,0,0,114,164,0,0,0,114,202,0,0, +- 0,114,142,0,0,0,114,191,0,0,0,114,159,0,0,0, +- 114,207,0,0,0,41,9,114,221,0,0,0,114,163,0,0, +- 0,114,65,0,0,0,114,225,0,0,0,218,14,110,97,109, +- 101,115,112,97,99,101,95,112,97,116,104,90,5,101,110,116, +- 114,121,114,82,1,0,0,114,210,0,0,0,114,165,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,9,95,103,101,116,95,115,112,101,99,110,5,0,0,115, +- 42,0,0,0,4,5,8,1,14,1,2,1,10,1,8,1, +- 10,1,14,1,12,2,8,1,2,1,10,1,8,1,6,1, +- 8,1,8,1,10,5,2,128,12,2,6,1,4,1,122,20, +- 80,97,116,104,70,105,110,100,101,114,46,95,103,101,116,95, +- 115,112,101,99,99,4,0,0,0,0,0,0,0,0,0,0, +- 0,6,0,0,0,5,0,0,0,67,0,0,0,115,94,0, +- 0,0,124,2,100,1,117,0,114,7,116,0,106,1,125,2, +- 124,0,160,2,124,1,124,2,124,3,161,3,125,4,124,4, +- 100,1,117,0,114,20,100,1,83,0,124,4,106,3,100,1, +- 117,0,114,45,124,4,106,4,125,5,124,5,114,43,100,1, +- 124,4,95,5,116,6,124,1,124,5,124,0,106,2,131,3, +- 124,4,95,4,124,4,83,0,100,1,83,0,124,4,83,0, +- 41,2,122,141,84,114,121,32,116,111,32,102,105,110,100,32, +- 97,32,115,112,101,99,32,102,111,114,32,39,102,117,108,108, +- 110,97,109,101,39,32,111,110,32,115,121,115,46,112,97,116, +- 104,32,111,114,32,39,112,97,116,104,39,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,101,32,115,101,97,114,99,104, +- 32,105,115,32,98,97,115,101,100,32,111,110,32,115,121,115, +- 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,32, +- 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, +- 114,95,99,97,99,104,101,46,10,32,32,32,32,32,32,32, +- 32,78,41,7,114,15,0,0,0,114,65,0,0,0,114,91, +- 1,0,0,114,164,0,0,0,114,202,0,0,0,114,205,0, +- 0,0,114,47,1,0,0,41,6,114,221,0,0,0,114,163, +- 0,0,0,114,65,0,0,0,114,225,0,0,0,114,210,0, +- 0,0,114,90,1,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,226,0,0,0,142,5,0,0,115, +- 26,0,0,0,8,6,6,1,14,1,8,1,4,1,10,1, +- 6,1,4,1,6,3,16,1,4,1,4,2,4,2,122,20, +- 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, +- 115,112,101,99,99,3,0,0,0,0,0,0,0,0,0,0, +- 0,4,0,0,0,4,0,0,0,67,0,0,0,115,42,0, +- 0,0,116,0,160,1,100,1,116,2,161,2,1,0,124,0, +- 160,3,124,1,124,2,161,2,125,3,124,3,100,2,117,0, +- 114,18,100,2,83,0,124,3,106,4,83,0,41,3,122,170, +- 102,105,110,100,32,116,104,101,32,109,111,100,117,108,101,32, +- 111,110,32,115,121,115,46,112,97,116,104,32,111,114,32,39, +- 112,97,116,104,39,32,98,97,115,101,100,32,111,110,32,115, +- 121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,110, +- 100,10,32,32,32,32,32,32,32,32,115,121,115,46,112,97, +- 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, +- 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, +- 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, +- 99,97,116,101,100,46,32,32,85,115,101,32,102,105,110,100, +- 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,46, +- 10,10,32,32,32,32,32,32,32,32,122,101,80,97,116,104, +- 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, +- 108,101,40,41,32,105,115,32,100,101,112,114,101,99,97,116, +- 101,100,32,97,110,100,32,115,108,97,116,101,100,32,102,111, +- 114,32,114,101,109,111,118,97,108,32,105,110,32,80,121,116, +- 104,111,110,32,51,46,49,50,59,32,117,115,101,32,102,105, +- 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, +- 100,78,114,227,0,0,0,114,228,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,229,0,0,0, +- 166,5,0,0,115,14,0,0,0,6,8,2,2,4,254,12, +- 3,8,1,4,1,6,1,122,22,80,97,116,104,70,105,110, +- 100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, +- 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, +- 4,0,0,0,79,0,0,0,115,28,0,0,0,100,1,100, +- 2,108,0,109,1,125,2,1,0,124,2,106,2,124,0,105, +- 0,124,1,164,1,142,1,83,0,41,3,97,32,1,0,0, +- 10,32,32,32,32,32,32,32,32,70,105,110,100,32,100,105, +- 115,116,114,105,98,117,116,105,111,110,115,46,10,10,32,32, +- 32,32,32,32,32,32,82,101,116,117,114,110,32,97,110,32, +- 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32, +- 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115, +- 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111, +- 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110, +- 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, +- 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99, +- 104,105,110,103,32,96,96,99,111,110,116,101,120,116,46,110, +- 97,109,101,96,96,10,32,32,32,32,32,32,32,32,40,111, +- 114,32,97,108,108,32,110,97,109,101,115,32,105,102,32,96, +- 96,78,111,110,101,96,96,32,105,110,100,105,99,97,116,101, +- 100,41,32,97,108,111,110,103,32,116,104,101,32,112,97,116, +- 104,115,32,105,110,32,116,104,101,32,108,105,115,116,10,32, +- 32,32,32,32,32,32,32,111,102,32,100,105,114,101,99,116, +- 111,114,105,101,115,32,96,96,99,111,110,116,101,120,116,46, +- 112,97,116,104,96,96,46,10,32,32,32,32,32,32,32,32, +- 114,0,0,0,0,41,1,218,18,77,101,116,97,100,97,116, +- 97,80,97,116,104,70,105,110,100,101,114,41,3,90,18,105, +- 109,112,111,114,116,108,105,98,46,109,101,116,97,100,97,116, +- 97,114,92,1,0,0,218,18,102,105,110,100,95,100,105,115, +- 116,114,105,98,117,116,105,111,110,115,41,3,114,144,0,0, +- 0,114,145,0,0,0,114,92,1,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,114,93,1,0,0,182, +- 5,0,0,115,4,0,0,0,12,10,16,1,122,29,80,97, +- 116,104,70,105,110,100,101,114,46,102,105,110,100,95,100,105, +- 115,116,114,105,98,117,116,105,111,110,115,114,69,0,0,0, +- 114,230,0,0,0,41,14,114,150,0,0,0,114,149,0,0, +- 0,114,151,0,0,0,114,152,0,0,0,114,233,0,0,0, +- 114,78,1,0,0,114,84,1,0,0,114,234,0,0,0,114, +- 87,1,0,0,114,88,1,0,0,114,91,1,0,0,114,226, +- 0,0,0,114,229,0,0,0,114,93,1,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,114,77,1,0,0,40,5,0,0,115,36,0,0,0,8, +- 0,4,2,2,2,10,1,2,9,10,1,2,12,10,1,2, +- 21,10,1,2,20,12,1,2,31,12,1,2,23,12,1,2, +- 15,14,1,114,77,1,0,0,99,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, +- 0,115,90,0,0,0,101,0,90,1,100,0,90,2,100,1, +- 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, +- 90,5,101,6,90,7,100,6,100,7,132,0,90,8,100,8, +- 100,9,132,0,90,9,100,19,100,11,100,12,132,1,90,10, +- 100,13,100,14,132,0,90,11,101,12,100,15,100,16,132,0, +- 131,1,90,13,100,17,100,18,132,0,90,14,100,10,83,0, +- 41,20,218,10,70,105,108,101,70,105,110,100,101,114,122,172, +- 70,105,108,101,45,98,97,115,101,100,32,102,105,110,100,101, +- 114,46,10,10,32,32,32,32,73,110,116,101,114,97,99,116, +- 105,111,110,115,32,119,105,116,104,32,116,104,101,32,102,105, +- 108,101,32,115,121,115,116,101,109,32,97,114,101,32,99,97, +- 99,104,101,100,32,102,111,114,32,112,101,114,102,111,114,109, +- 97,110,99,101,44,32,98,101,105,110,103,10,32,32,32,32, +- 114,101,102,114,101,115,104,101,100,32,119,104,101,110,32,116, +- 104,101,32,100,105,114,101,99,116,111,114,121,32,116,104,101, +- 32,102,105,110,100,101,114,32,105,115,32,104,97,110,100,108, +- 105,110,103,32,104,97,115,32,98,101,101,110,32,109,111,100, +- 105,102,105,101,100,46,10,10,32,32,32,32,99,2,0,0, +- 0,0,0,0,0,0,0,0,0,5,0,0,0,6,0,0, +- 0,7,0,0,0,115,112,0,0,0,103,0,125,3,124,2, +- 68,0,93,16,92,2,137,0,125,4,124,3,160,0,135,0, +- 102,1,100,1,100,2,132,8,124,4,68,0,131,1,161,1, +- 1,0,113,4,124,3,124,0,95,1,124,1,112,27,100,3, +- 124,0,95,2,116,3,124,0,106,2,131,1,115,43,116,4, +- 116,5,160,6,161,0,124,0,106,2,131,2,124,0,95,2, +- 100,4,124,0,95,7,116,8,131,0,124,0,95,9,116,8, +- 131,0,124,0,95,10,100,5,83,0,41,6,122,154,73,110, +- 105,116,105,97,108,105,122,101,32,119,105,116,104,32,116,104, +- 101,32,112,97,116,104,32,116,111,32,115,101,97,114,99,104, +- 32,111,110,32,97,110,100,32,97,32,118,97,114,105,97,98, +- 108,101,32,110,117,109,98,101,114,32,111,102,10,32,32,32, +- 32,32,32,32,32,50,45,116,117,112,108,101,115,32,99,111, +- 110,116,97,105,110,105,110,103,32,116,104,101,32,108,111,97, +- 100,101,114,32,97,110,100,32,116,104,101,32,102,105,108,101, +- 32,115,117,102,102,105,120,101,115,32,116,104,101,32,108,111, +- 97,100,101,114,10,32,32,32,32,32,32,32,32,114,101,99, +- 111,103,110,105,122,101,115,46,99,1,0,0,0,0,0,0, +- 0,0,0,0,0,2,0,0,0,3,0,0,0,51,0,0, +- 0,115,24,0,0,0,129,0,124,0,93,7,125,1,124,1, +- 136,0,102,2,86,0,1,0,113,2,100,0,83,0,114,69, +- 0,0,0,114,7,0,0,0,114,43,1,0,0,169,1,114, +- 164,0,0,0,114,7,0,0,0,114,8,0,0,0,114,9, +- 0,0,0,211,5,0,0,115,4,0,0,0,2,128,22,0, +- 122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,105, +- 110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, +- 103,101,110,101,120,112,114,62,114,97,0,0,0,114,130,0, +- 0,0,78,41,11,114,191,0,0,0,218,8,95,108,111,97, +- 100,101,114,115,114,65,0,0,0,114,86,0,0,0,114,67, +- 0,0,0,114,18,0,0,0,114,82,0,0,0,218,11,95, +- 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, +- 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, +- 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, +- 101,41,5,114,143,0,0,0,114,65,0,0,0,218,14,108, +- 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, +- 111,97,100,101,114,115,114,212,0,0,0,114,7,0,0,0, +- 114,95,1,0,0,114,8,0,0,0,114,236,0,0,0,205, +- 5,0,0,115,20,0,0,0,4,4,12,1,26,1,6,1, +- 10,2,10,1,18,1,6,1,8,1,12,1,122,19,70,105, +- 108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,95, +- 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, +- 0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,100, +- 1,124,0,95,0,100,2,83,0,41,3,122,31,73,110,118, +- 97,108,105,100,97,116,101,32,116,104,101,32,100,105,114,101, +- 99,116,111,114,121,32,109,116,105,109,101,46,114,130,0,0, +- 0,78,41,1,114,97,1,0,0,114,21,1,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,78,1, +- 0,0,221,5,0,0,114,81,0,0,0,122,28,70,105,108, +- 101,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, +- 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, +- 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, +- 0,0,115,54,0,0,0,116,0,160,1,100,1,116,2,161, +- 2,1,0,124,0,160,3,124,1,161,1,125,2,124,2,100, +- 2,117,0,114,19,100,2,103,0,102,2,83,0,124,2,106, +- 4,124,2,106,5,112,25,103,0,102,2,83,0,41,3,122, +- 197,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, +- 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, +- 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, +- 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, +- 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, +- 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, +- 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, +- 45,111,102,45,112,111,114,116,105,111,110,115,41,46,10,10, +- 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, +- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, +- 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, +- 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, +- 32,32,32,32,32,32,122,101,70,105,108,101,70,105,110,100, +- 101,114,46,102,105,110,100,95,108,111,97,100,101,114,40,41, ++ 2,0,0,0,67,0,0,0,115,12,0,0,0,124,0,160, ++ 0,161,0,124,1,25,0,83,0,114,71,0,0,0,169,1, ++ 114,58,1,0,0,41,2,114,144,0,0,0,218,5,105,110, ++ 100,101,120,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,218,11,95,95,103,101,116,105,116,101,109,95,95,231, ++ 4,0,0,114,62,1,0,0,122,26,95,78,97,109,101,115, ++ 112,97,99,101,80,97,116,104,46,95,95,103,101,116,105,116, ++ 101,109,95,95,99,3,0,0,0,0,0,0,0,0,0,0, ++ 0,3,0,0,0,3,0,0,0,67,0,0,0,115,14,0, ++ 0,0,124,2,124,0,106,0,124,1,60,0,100,0,83,0, ++ 114,71,0,0,0,41,1,114,50,1,0,0,41,3,114,144, ++ 0,0,0,114,64,1,0,0,114,67,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,218,11,95,95, ++ 115,101,116,105,116,101,109,95,95,234,4,0,0,115,2,0, ++ 0,0,14,1,122,26,95,78,97,109,101,115,112,97,99,101, ++ 80,97,116,104,46,95,95,115,101,116,105,116,101,109,95,95, ++ 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, ++ 0,3,0,0,0,67,0,0,0,114,59,1,0,0,114,71, ++ 0,0,0,41,2,114,5,0,0,0,114,58,1,0,0,114, ++ 22,1,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,218,7,95,95,108,101,110,95,95,237,4,0,0, ++ 114,62,1,0,0,122,22,95,78,97,109,101,115,112,97,99, ++ 101,80,97,116,104,46,95,95,108,101,110,95,95,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, ++ 0,0,67,0,0,0,243,12,0,0,0,100,1,160,0,124, ++ 0,106,1,161,1,83,0,41,2,78,122,20,95,78,97,109, ++ 101,115,112,97,99,101,80,97,116,104,40,123,33,114,125,41, ++ 41,2,114,91,0,0,0,114,50,1,0,0,114,22,1,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 218,8,95,95,114,101,112,114,95,95,240,4,0,0,114,62, ++ 1,0,0,122,23,95,78,97,109,101,115,112,97,99,101,80, ++ 97,116,104,46,95,95,114,101,112,114,95,95,99,2,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, ++ 0,67,0,0,0,115,12,0,0,0,124,1,124,0,160,0, ++ 161,0,118,0,83,0,114,71,0,0,0,114,63,1,0,0, ++ 169,2,114,144,0,0,0,218,4,105,116,101,109,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,218,12,95,95, ++ 99,111,110,116,97,105,110,115,95,95,243,4,0,0,114,62, ++ 1,0,0,122,27,95,78,97,109,101,115,112,97,99,101,80, ++ 97,116,104,46,95,95,99,111,110,116,97,105,110,115,95,95, ++ 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, ++ 0,3,0,0,0,67,0,0,0,115,16,0,0,0,124,0, ++ 106,0,160,1,124,1,161,1,1,0,100,0,83,0,114,71, ++ 0,0,0,41,2,114,50,1,0,0,114,63,0,0,0,114, ++ 70,1,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,63,0,0,0,246,4,0,0,243,2,0,0, ++ 0,16,1,122,21,95,78,97,109,101,115,112,97,99,101,80, ++ 97,116,104,46,97,112,112,101,110,100,78,41,15,114,151,0, ++ 0,0,114,150,0,0,0,114,152,0,0,0,114,153,0,0, ++ 0,114,237,0,0,0,114,56,1,0,0,114,51,1,0,0, ++ 114,58,1,0,0,114,61,1,0,0,114,65,1,0,0,114, ++ 66,1,0,0,114,67,1,0,0,114,69,1,0,0,114,72, ++ 1,0,0,114,63,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,48,1,0, ++ 0,188,4,0,0,115,26,0,0,0,8,0,4,1,8,6, ++ 8,6,8,10,8,4,8,13,8,3,8,3,8,3,8,3, ++ 8,3,12,3,114,48,1,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, ++ 0,0,115,88,0,0,0,101,0,90,1,100,0,90,2,100, ++ 1,100,2,132,0,90,3,101,4,100,3,100,4,132,0,131, ++ 1,90,5,100,5,100,6,132,0,90,6,100,7,100,8,132, ++ 0,90,7,100,9,100,10,132,0,90,8,100,11,100,12,132, ++ 0,90,9,100,13,100,14,132,0,90,10,100,15,100,16,132, ++ 0,90,11,100,17,100,18,132,0,90,12,100,19,83,0,41, ++ 20,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, ++ 100,101,114,99,4,0,0,0,0,0,0,0,0,0,0,0, ++ 4,0,0,0,4,0,0,0,67,0,0,0,115,18,0,0, ++ 0,116,0,124,1,124,2,124,3,131,3,124,0,95,1,100, ++ 0,83,0,114,71,0,0,0,41,2,114,48,1,0,0,114, ++ 50,1,0,0,114,54,1,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,237,0,0,0,252,4,0, ++ 0,115,2,0,0,0,18,1,122,25,95,78,97,109,101,115, ++ 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, ++ 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, ++ 1,0,0,0,4,0,0,0,67,0,0,0,115,24,0,0, ++ 0,116,0,160,1,100,1,116,2,161,2,1,0,100,2,160, ++ 3,124,0,106,4,161,1,83,0,41,3,122,115,82,101,116, ++ 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, ++ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, ++ 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, ++ 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, ++ 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, ++ 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, ++ 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, ++ 122,82,95,78,97,109,101,115,112,97,99,101,76,111,97,100, ++ 101,114,46,109,111,100,117,108,101,95,114,101,112,114,40,41, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, + 110,100,32,115,108,97,116,101,100,32,102,111,114,32,114,101, + 109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,32, +- 51,46,49,50,59,32,117,115,101,32,102,105,110,100,95,115, +- 112,101,99,40,41,32,105,110,115,116,101,97,100,78,41,6, +- 114,99,0,0,0,114,100,0,0,0,114,101,0,0,0,114, +- 226,0,0,0,114,164,0,0,0,114,202,0,0,0,41,3, +- 114,143,0,0,0,114,163,0,0,0,114,210,0,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,161, +- 0,0,0,227,5,0,0,115,14,0,0,0,6,7,2,2, +- 4,254,10,3,8,1,8,1,16,1,122,22,70,105,108,101, +- 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, +- 101,114,99,6,0,0,0,0,0,0,0,0,0,0,0,7, +- 0,0,0,6,0,0,0,67,0,0,0,115,26,0,0,0, +- 124,1,124,2,124,3,131,2,125,6,116,0,124,2,124,3, +- 124,6,124,4,100,1,141,4,83,0,41,2,78,114,201,0, +- 0,0,41,1,114,213,0,0,0,41,7,114,143,0,0,0, +- 114,211,0,0,0,114,163,0,0,0,114,65,0,0,0,90, +- 4,115,109,115,108,114,225,0,0,0,114,164,0,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,91, +- 1,0,0,242,5,0,0,115,8,0,0,0,10,1,8,1, +- 2,1,6,255,122,20,70,105,108,101,70,105,110,100,101,114, +- 46,95,103,101,116,95,115,112,101,99,78,99,3,0,0,0, +- 0,0,0,0,0,0,0,0,14,0,0,0,9,0,0,0, +- 67,0,0,0,115,122,1,0,0,100,1,125,3,124,1,160, +- 0,100,2,161,1,100,3,25,0,125,4,122,12,116,1,124, +- 0,106,2,112,17,116,3,160,4,161,0,131,1,106,5,125, +- 5,87,0,110,11,4,0,116,6,121,32,1,0,1,0,1, +- 0,100,4,125,5,89,0,110,1,119,0,124,5,124,0,106, +- 7,107,3,114,45,124,0,160,8,161,0,1,0,124,5,124, +- 0,95,7,116,9,131,0,114,56,124,0,106,10,125,6,124, +- 4,160,11,161,0,125,7,110,5,124,0,106,12,125,6,124, +- 4,125,7,124,7,124,6,118,0,114,108,116,13,124,0,106, +- 2,124,4,131,2,125,8,124,0,106,14,68,0,93,29,92, +- 2,125,9,125,10,100,5,124,9,23,0,125,11,116,13,124, +- 8,124,11,131,2,125,12,116,15,124,12,131,1,114,103,124, +- 0,160,16,124,10,124,1,124,12,124,8,103,1,124,2,161, +- 5,2,0,1,0,83,0,113,74,116,17,124,8,131,1,125, +- 3,124,0,106,14,68,0,93,55,92,2,125,9,125,10,122, +- 10,116,13,124,0,106,2,124,4,124,9,23,0,131,2,125, +- 12,87,0,110,11,4,0,116,18,121,136,1,0,1,0,1, +- 0,89,0,1,0,100,6,83,0,119,0,116,19,106,20,100, +- 7,124,12,100,3,100,8,141,3,1,0,124,7,124,9,23, +- 0,124,6,118,0,114,166,116,15,124,12,131,1,114,166,124, +- 0,160,16,124,10,124,1,124,12,100,6,124,2,161,5,2, +- 0,1,0,83,0,113,111,124,3,114,187,116,19,160,20,100, +- 9,124,8,161,2,1,0,116,19,160,21,124,1,100,6,161, +- 2,125,13,124,8,103,1,124,13,95,22,124,13,83,0,100, +- 6,83,0,41,10,122,111,84,114,121,32,116,111,32,102,105, +- 110,100,32,97,32,115,112,101,99,32,102,111,114,32,116,104, +- 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, +- 108,101,46,10,10,32,32,32,32,32,32,32,32,82,101,116, +- 117,114,110,115,32,116,104,101,32,109,97,116,99,104,105,110, +- 103,32,115,112,101,99,44,32,111,114,32,78,111,110,101,32, +- 105,102,32,110,111,116,32,102,111,117,110,100,46,10,32,32, +- 32,32,32,32,32,32,70,114,97,0,0,0,114,44,0,0, +- 0,114,130,0,0,0,114,236,0,0,0,78,122,9,116,114, +- 121,105,110,103,32,123,125,41,1,90,9,118,101,114,98,111, +- 115,105,116,121,122,25,112,111,115,115,105,98,108,101,32,110, +- 97,109,101,115,112,97,99,101,32,102,111,114,32,123,125,41, +- 23,114,104,0,0,0,114,75,0,0,0,114,65,0,0,0, +- 114,18,0,0,0,114,82,0,0,0,114,35,1,0,0,114, +- 76,0,0,0,114,97,1,0,0,218,11,95,102,105,108,108, +- 95,99,97,99,104,101,114,21,0,0,0,114,100,1,0,0, +- 114,131,0,0,0,114,99,1,0,0,114,67,0,0,0,114, +- 96,1,0,0,114,80,0,0,0,114,91,1,0,0,114,83, +- 0,0,0,114,111,0,0,0,114,159,0,0,0,114,173,0, +- 0,0,114,207,0,0,0,114,202,0,0,0,41,14,114,143, +- 0,0,0,114,163,0,0,0,114,225,0,0,0,90,12,105, +- 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, +- 108,95,109,111,100,117,108,101,114,193,0,0,0,90,5,99, +- 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, +- 108,101,90,9,98,97,115,101,95,112,97,116,104,114,44,1, +- 0,0,114,211,0,0,0,90,13,105,110,105,116,95,102,105, +- 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, +- 104,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,114,226,0,0,0,247,5,0,0,115,86, +- 0,0,0,4,5,14,1,2,1,24,1,12,1,8,1,2, +- 255,10,2,8,1,6,1,6,2,6,1,10,1,6,2,4, +- 1,8,2,12,1,14,1,8,1,10,1,8,1,24,1,2, +- 255,8,5,14,2,2,1,20,1,12,1,8,1,2,255,16, +- 2,12,1,8,1,10,1,4,1,8,255,2,128,4,2,12, +- 1,12,1,8,1,4,1,4,1,122,20,70,105,108,101,70, +- 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, +- 1,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, +- 10,0,0,0,67,0,0,0,115,192,0,0,0,124,0,106, +- 0,125,1,122,11,116,1,160,2,124,1,112,11,116,1,160, +- 3,161,0,161,1,125,2,87,0,110,14,4,0,116,4,116, +- 5,116,6,102,3,121,28,1,0,1,0,1,0,103,0,125, +- 2,89,0,110,1,119,0,116,7,106,8,160,9,100,1,161, +- 1,115,41,116,10,124,2,131,1,124,0,95,11,110,37,116, +- 10,131,0,125,3,124,2,68,0,93,28,125,4,124,4,160, +- 12,100,2,161,1,92,3,125,5,125,6,125,7,124,6,114, +- 67,100,3,160,13,124,5,124,7,160,14,161,0,161,2,125, +- 8,110,2,124,5,125,8,124,3,160,15,124,8,161,1,1, +- 0,113,46,124,3,124,0,95,11,116,7,106,8,160,9,116, +- 16,161,1,114,94,100,4,100,5,132,0,124,2,68,0,131, +- 1,124,0,95,17,100,6,83,0,100,6,83,0,41,7,122, +- 68,70,105,108,108,32,116,104,101,32,99,97,99,104,101,32, +- 111,102,32,112,111,116,101,110,116,105,97,108,32,109,111,100, +- 117,108,101,115,32,97,110,100,32,112,97,99,107,97,103,101, +- 115,32,102,111,114,32,116,104,105,115,32,100,105,114,101,99, +- 116,111,114,121,46,114,14,0,0,0,114,97,0,0,0,114, +- 88,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, +- 0,2,0,0,0,4,0,0,0,83,0,0,0,115,20,0, +- 0,0,104,0,124,0,93,6,125,1,124,1,160,0,161,0, +- 146,2,113,2,83,0,114,7,0,0,0,41,1,114,131,0, +- 0,0,41,2,114,5,0,0,0,90,2,102,110,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,13,0,0, +- 0,71,6,0,0,115,2,0,0,0,20,0,122,41,70,105, +- 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, +- 97,99,104,101,46,60,108,111,99,97,108,115,62,46,60,115, +- 101,116,99,111,109,112,62,78,41,18,114,65,0,0,0,114, +- 18,0,0,0,90,7,108,105,115,116,100,105,114,114,82,0, +- 0,0,114,85,1,0,0,218,15,80,101,114,109,105,115,115, +- 105,111,110,69,114,114,111,114,218,18,78,111,116,65,68,105, +- 114,101,99,116,111,114,121,69,114,114,111,114,114,15,0,0, +- 0,114,25,0,0,0,114,26,0,0,0,114,98,1,0,0, +- 114,99,1,0,0,114,126,0,0,0,114,89,0,0,0,114, +- 131,0,0,0,218,3,97,100,100,114,27,0,0,0,114,100, +- 1,0,0,41,9,114,143,0,0,0,114,65,0,0,0,90, +- 8,99,111,110,116,101,110,116,115,90,21,108,111,119,101,114, +- 95,115,117,102,102,105,120,95,99,111,110,116,101,110,116,115, +- 114,70,1,0,0,114,141,0,0,0,114,54,1,0,0,114, +- 44,1,0,0,90,8,110,101,119,95,110,97,109,101,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,102,1, +- 0,0,42,6,0,0,115,38,0,0,0,6,2,2,1,22, +- 1,18,1,8,3,2,253,12,6,12,1,6,7,8,1,16, +- 1,4,1,18,1,4,2,12,1,6,1,12,1,20,1,4, +- 255,122,22,70,105,108,101,70,105,110,100,101,114,46,95,102, +- 105,108,108,95,99,97,99,104,101,99,1,0,0,0,0,0, +- 0,0,0,0,0,0,3,0,0,0,3,0,0,0,7,0, +- 0,0,115,18,0,0,0,135,0,135,1,102,2,100,1,100, +- 2,132,8,125,2,124,2,83,0,41,3,97,20,1,0,0, +- 65,32,99,108,97,115,115,32,109,101,116,104,111,100,32,119, +- 104,105,99,104,32,114,101,116,117,114,110,115,32,97,32,99, +- 108,111,115,117,114,101,32,116,111,32,117,115,101,32,111,110, +- 32,115,121,115,46,112,97,116,104,95,104,111,111,107,10,32, +- 32,32,32,32,32,32,32,119,104,105,99,104,32,119,105,108, +- 108,32,114,101,116,117,114,110,32,97,110,32,105,110,115,116, +- 97,110,99,101,32,117,115,105,110,103,32,116,104,101,32,115, +- 112,101,99,105,102,105,101,100,32,108,111,97,100,101,114,115, +- 32,97,110,100,32,116,104,101,32,112,97,116,104,10,32,32, +- 32,32,32,32,32,32,99,97,108,108,101,100,32,111,110,32, +- 116,104,101,32,99,108,111,115,117,114,101,46,10,10,32,32, +- 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, +- 104,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, +- 99,108,111,115,117,114,101,32,105,115,32,110,111,116,32,97, +- 32,100,105,114,101,99,116,111,114,121,44,32,73,109,112,111, +- 114,116,69,114,114,111,114,32,105,115,10,32,32,32,32,32, +- 32,32,32,114,97,105,115,101,100,46,10,10,32,32,32,32, +- 32,32,32,32,99,1,0,0,0,0,0,0,0,0,0,0, +- 0,1,0,0,0,4,0,0,0,19,0,0,0,115,36,0, +- 0,0,116,0,124,0,131,1,115,10,116,1,100,1,124,0, +- 100,2,141,2,130,1,136,0,124,0,103,1,136,1,162,1, +- 82,0,142,0,83,0,41,3,122,45,80,97,116,104,32,104, +- 111,111,107,32,102,111,114,32,105,109,112,111,114,116,108,105, +- 98,46,109,97,99,104,105,110,101,114,121,46,70,105,108,101, +- 70,105,110,100,101,114,46,122,30,111,110,108,121,32,100,105, +- 114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,117, +- 112,112,111,114,116,101,100,114,71,0,0,0,41,2,114,83, +- 0,0,0,114,142,0,0,0,114,71,0,0,0,169,2,114, +- 221,0,0,0,114,101,1,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, +- 111,114,95,70,105,108,101,70,105,110,100,101,114,83,6,0, +- 0,115,6,0,0,0,8,2,12,1,16,1,122,54,70,105, +- 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, +- 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, +- 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, +- 110,100,101,114,114,7,0,0,0,41,3,114,221,0,0,0, +- 114,101,1,0,0,114,107,1,0,0,114,7,0,0,0,114, +- 106,1,0,0,114,8,0,0,0,218,9,112,97,116,104,95, +- 104,111,111,107,73,6,0,0,115,4,0,0,0,14,10,4, +- 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, +- 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, +- 114,67,1,0,0,41,2,78,122,16,70,105,108,101,70,105, +- 110,100,101,114,40,123,33,114,125,41,41,2,114,89,0,0, +- 0,114,65,0,0,0,114,21,1,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,114,68,1,0,0,91, +- 6,0,0,114,61,1,0,0,122,19,70,105,108,101,70,105, +- 110,100,101,114,46,95,95,114,101,112,114,95,95,114,69,0, +- 0,0,41,15,114,150,0,0,0,114,149,0,0,0,114,151, +- 0,0,0,114,152,0,0,0,114,236,0,0,0,114,78,1, +- 0,0,114,167,0,0,0,114,229,0,0,0,114,161,0,0, +- 0,114,91,1,0,0,114,226,0,0,0,114,102,1,0,0, +- 114,234,0,0,0,114,108,1,0,0,114,68,1,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,94,1,0,0,196,5,0,0,115,24,0,0, +- 0,8,0,4,2,8,7,8,16,4,4,8,2,8,15,10, +- 5,8,51,2,31,10,1,12,17,114,94,1,0,0,99,4, +- 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,8, +- 0,0,0,67,0,0,0,115,144,0,0,0,124,0,160,0, +- 100,1,161,1,125,4,124,0,160,0,100,2,161,1,125,5, +- 124,4,115,33,124,5,114,18,124,5,106,1,125,4,110,15, +- 124,2,124,3,107,2,114,28,116,2,124,1,124,2,131,2, +- 125,4,110,5,116,3,124,1,124,2,131,2,125,4,124,5, +- 115,42,116,4,124,1,124,2,124,4,100,3,141,3,125,5, +- 122,19,124,5,124,0,100,2,60,0,124,4,124,0,100,1, +- 60,0,124,2,124,0,100,4,60,0,124,3,124,0,100,5, +- 60,0,87,0,100,0,83,0,4,0,116,5,121,71,1,0, +- 1,0,1,0,89,0,100,0,83,0,119,0,41,6,78,218, +- 10,95,95,108,111,97,100,101,114,95,95,218,8,95,95,115, +- 112,101,99,95,95,114,95,1,0,0,90,8,95,95,102,105, +- 108,101,95,95,90,10,95,95,99,97,99,104,101,100,95,95, +- 41,6,218,3,103,101,116,114,164,0,0,0,114,41,1,0, +- 0,114,34,1,0,0,114,213,0,0,0,218,9,69,120,99, +- 101,112,116,105,111,110,41,6,90,2,110,115,114,141,0,0, +- 0,90,8,112,97,116,104,110,97,109,101,90,9,99,112,97, +- 116,104,110,97,109,101,114,164,0,0,0,114,210,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, +- 14,95,102,105,120,95,117,112,95,109,111,100,117,108,101,97, +- 6,0,0,115,36,0,0,0,10,2,10,1,4,1,4,1, +- 8,1,8,1,12,1,10,2,4,1,14,1,2,1,8,1, +- 8,1,8,1,14,1,12,1,6,2,2,254,114,113,1,0, +- 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, +- 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,116, +- 0,116,1,160,2,161,0,102,2,125,0,116,3,116,4,102, +- 2,125,1,116,5,116,6,102,2,125,2,124,0,124,1,124, +- 2,103,3,83,0,41,1,122,95,82,101,116,117,114,110,115, +- 32,97,32,108,105,115,116,32,111,102,32,102,105,108,101,45, +- 98,97,115,101,100,32,109,111,100,117,108,101,32,108,111,97, +- 100,101,114,115,46,10,10,32,32,32,32,69,97,99,104,32, +- 105,116,101,109,32,105,115,32,97,32,116,117,112,108,101,32, +- 40,108,111,97,100,101,114,44,32,115,117,102,102,105,120,101, +- 115,41,46,10,32,32,32,32,41,7,114,30,1,0,0,114, +- 187,0,0,0,218,18,101,120,116,101,110,115,105,111,110,95, +- 115,117,102,102,105,120,101,115,114,34,1,0,0,114,127,0, +- 0,0,114,41,1,0,0,114,113,0,0,0,41,3,90,10, +- 101,120,116,101,110,115,105,111,110,115,90,6,115,111,117,114, +- 99,101,90,8,98,121,116,101,99,111,100,101,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,208,0,0,0, +- 120,6,0,0,115,8,0,0,0,12,5,8,1,8,1,10, +- 1,114,208,0,0,0,99,1,0,0,0,0,0,0,0,0, +- 0,0,0,1,0,0,0,1,0,0,0,67,0,0,0,115, +- 8,0,0,0,124,0,97,0,100,0,83,0,114,69,0,0, +- 0,41,1,114,159,0,0,0,41,1,218,17,95,98,111,111, +- 116,115,116,114,97,112,95,109,111,100,117,108,101,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,218,21,95,115, +- 101,116,95,98,111,111,116,115,116,114,97,112,95,109,111,100, +- 117,108,101,131,6,0,0,115,2,0,0,0,8,2,114,116, +- 1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, +- 2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0, +- 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116, +- 2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161, +- 1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100, +- 1,83,0,41,2,122,41,73,110,115,116,97,108,108,32,116, +- 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, +- 112,111,114,116,32,99,111,109,112,111,110,101,110,116,115,46, +- 78,41,10,114,116,1,0,0,114,208,0,0,0,114,15,0, +- 0,0,114,83,1,0,0,114,191,0,0,0,114,94,1,0, +- 0,114,108,1,0,0,218,9,109,101,116,97,95,112,97,116, +- 104,114,61,0,0,0,114,77,1,0,0,41,2,114,115,1, +- 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111, +- 97,100,101,114,115,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,218,8,95,105,110,115,116,97,108,108,136,6, +- 0,0,115,8,0,0,0,8,2,6,1,20,1,16,1,114, +- 118,1,0,0,41,1,114,87,0,0,0,114,69,0,0,0, +- 41,3,78,78,78,41,2,114,0,0,0,0,114,0,0,0, +- 0,41,1,84,41,85,114,152,0,0,0,114,159,0,0,0, +- 114,187,0,0,0,114,91,0,0,0,114,15,0,0,0,114, +- 99,0,0,0,114,184,0,0,0,114,25,0,0,0,114,231, +- 0,0,0,90,2,110,116,114,18,0,0,0,114,215,0,0, +- 0,90,5,112,111,115,105,120,114,50,0,0,0,218,3,97, +- 108,108,114,59,0,0,0,114,136,0,0,0,114,57,0,0, +- 0,114,62,0,0,0,90,20,95,112,97,116,104,115,101,112, +- 115,95,119,105,116,104,95,99,111,108,111,110,114,28,0,0, +- 0,90,37,95,67,65,83,69,95,73,78,83,69,78,83,73, +- 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,66, +- 89,84,69,83,95,75,69,89,114,27,0,0,0,114,29,0, +- 0,0,114,21,0,0,0,114,36,0,0,0,114,42,0,0, +- 0,114,45,0,0,0,114,67,0,0,0,114,74,0,0,0, +- 114,75,0,0,0,114,79,0,0,0,114,80,0,0,0,114, +- 83,0,0,0,114,86,0,0,0,114,95,0,0,0,218,4, +- 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,186, +- 0,0,0,114,34,0,0,0,114,172,0,0,0,114,33,0, +- 0,0,114,39,0,0,0,114,8,1,0,0,114,116,0,0, +- 0,114,112,0,0,0,114,127,0,0,0,114,61,0,0,0, +- 114,114,1,0,0,114,232,0,0,0,114,113,0,0,0,90, +- 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, +- 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, +- 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, +- 70,73,88,69,83,114,121,0,0,0,114,128,0,0,0,114, +- 135,0,0,0,114,137,0,0,0,114,139,0,0,0,114,160, +- 0,0,0,114,167,0,0,0,114,176,0,0,0,114,180,0, +- 0,0,114,182,0,0,0,114,189,0,0,0,114,194,0,0, +- 0,114,195,0,0,0,114,200,0,0,0,218,6,111,98,106, +- 101,99,116,114,209,0,0,0,114,213,0,0,0,114,214,0, +- 0,0,114,235,0,0,0,114,249,0,0,0,114,11,1,0, +- 0,114,34,1,0,0,114,41,1,0,0,114,30,1,0,0, +- 114,47,1,0,0,114,73,1,0,0,114,77,1,0,0,114, +- 94,1,0,0,114,113,1,0,0,114,208,0,0,0,114,116, +- 1,0,0,114,118,1,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,218,8,60,109, +- 111,100,117,108,101,62,1,0,0,0,115,180,0,0,0,4, +- 0,4,22,8,3,8,1,8,1,8,1,8,1,10,3,4, +- 1,8,1,10,1,8,2,4,3,10,1,6,2,22,2,8, +- 1,8,1,10,1,14,1,4,4,4,1,2,1,2,1,4, +- 255,8,4,6,16,8,3,8,5,8,5,4,6,10,1,8, +- 30,8,6,8,8,8,10,8,9,8,5,4,7,10,1,8, +- 8,10,5,10,22,0,127,16,30,12,1,4,2,4,1,6, +- 2,4,1,10,1,8,2,6,2,8,2,16,2,8,71,8, +- 40,8,19,8,12,8,12,8,31,8,20,8,33,8,28,10, +- 24,10,13,10,10,8,11,6,14,4,3,2,1,12,255,14, +- 73,14,67,16,30,0,127,14,17,18,50,18,45,18,25,14, +- 53,14,63,14,49,0,127,14,29,0,127,10,30,8,23,8, +- 11,12,5, ++ 51,46,49,50,122,25,60,109,111,100,117,108,101,32,123,33, ++ 114,125,32,40,110,97,109,101,115,112,97,99,101,41,62,41, ++ 5,114,101,0,0,0,114,102,0,0,0,114,103,0,0,0, ++ 114,91,0,0,0,114,151,0,0,0,41,1,114,245,0,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 218,11,109,111,100,117,108,101,95,114,101,112,114,255,4,0, ++ 0,115,8,0,0,0,6,7,2,1,4,255,12,2,122,28, ++ 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, ++ 46,109,111,100,117,108,101,95,114,101,112,114,99,2,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, ++ 0,67,0,0,0,114,25,0,0,0,41,2,78,84,114,8, ++ 0,0,0,114,248,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,114,207,0,0,0,10,5,0,0, ++ 243,2,0,0,0,4,1,122,27,95,78,97,109,101,115,112, ++ 97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99, ++ 107,97,103,101,99,2,0,0,0,0,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,114,25,0, ++ 0,0,41,2,78,114,11,0,0,0,114,8,0,0,0,114, ++ 248,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,2,1,0,0,13,5,0,0,114,76,1,0, ++ 0,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, ++ 100,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, ++ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,6, ++ 0,0,0,67,0,0,0,115,16,0,0,0,116,0,100,1, ++ 100,2,100,3,100,4,100,5,141,4,83,0,41,6,78,114, ++ 11,0,0,0,122,8,60,115,116,114,105,110,103,62,114,244, ++ 0,0,0,84,41,1,114,4,1,0,0,41,1,114,5,1, ++ 0,0,114,248,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,242,0,0,0,16,5,0,0,114, ++ 73,1,0,0,122,25,95,78,97,109,101,115,112,97,99,101, ++ 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, ++ 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, ++ 1,0,0,0,67,0,0,0,114,25,0,0,0,114,238,0, ++ 0,0,114,8,0,0,0,114,239,0,0,0,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,114,240,0,0,0, ++ 19,5,0,0,114,241,0,0,0,122,30,95,78,97,109,101, ++ 115,112,97,99,101,76,111,97,100,101,114,46,99,114,101,97, ++ 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, ++ 0,0,115,4,0,0,0,100,0,83,0,114,71,0,0,0, ++ 114,8,0,0,0,114,43,1,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,246,0,0,0,22,5, ++ 0,0,114,76,1,0,0,122,28,95,78,97,109,101,115,112, ++ 97,99,101,76,111,97,100,101,114,46,101,120,101,99,95,109, ++ 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,26, ++ 0,0,0,116,0,160,1,100,1,124,0,106,2,161,2,1, ++ 0,116,0,160,3,124,0,124,1,161,2,83,0,41,2,122, ++ 98,76,111,97,100,32,97,32,110,97,109,101,115,112,97,99, ++ 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, ++ 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, ++ 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, ++ 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, ++ 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, ++ 32,32,32,122,38,110,97,109,101,115,112,97,99,101,32,109, ++ 111,100,117,108,101,32,108,111,97,100,101,100,32,119,105,116, ++ 104,32,112,97,116,104,32,123,33,114,125,41,4,114,160,0, ++ 0,0,114,174,0,0,0,114,50,1,0,0,114,247,0,0, ++ 0,114,248,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,114,249,0,0,0,25,5,0,0,115,8, ++ 0,0,0,6,7,4,1,4,255,12,3,122,28,95,78,97, ++ 109,101,115,112,97,99,101,76,111,97,100,101,114,46,108,111, ++ 97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, ++ 0,0,115,22,0,0,0,100,1,100,2,108,0,109,1,125, ++ 2,1,0,124,2,124,0,106,2,131,1,83,0,41,3,78, ++ 114,0,0,0,0,41,1,218,15,78,97,109,101,115,112,97, ++ 99,101,82,101,97,100,101,114,41,3,114,33,1,0,0,114, ++ 77,1,0,0,114,50,1,0,0,41,3,114,144,0,0,0, ++ 114,245,0,0,0,114,77,1,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,34,1,0,0,37,5, ++ 0,0,115,4,0,0,0,12,1,10,1,122,36,95,78,97, ++ 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, ++ 116,95,114,101,115,111,117,114,99,101,95,114,101,97,100,101, ++ 114,78,41,13,114,151,0,0,0,114,150,0,0,0,114,152, ++ 0,0,0,114,237,0,0,0,114,234,0,0,0,114,75,1, ++ 0,0,114,207,0,0,0,114,2,1,0,0,114,242,0,0, ++ 0,114,240,0,0,0,114,246,0,0,0,114,249,0,0,0, ++ 114,34,1,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,74,1,0,0,251,4, ++ 0,0,115,22,0,0,0,8,0,8,1,2,3,10,1,8, ++ 10,8,3,8,3,8,3,8,3,8,3,12,12,114,74,1, ++ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,4,0,0,0,64,0,0,0,115,118,0,0,0, ++ 101,0,90,1,100,0,90,2,100,1,90,3,101,4,100,2, ++ 100,3,132,0,131,1,90,5,101,4,100,4,100,5,132,0, ++ 131,1,90,6,101,7,100,6,100,7,132,0,131,1,90,8, ++ 101,7,100,8,100,9,132,0,131,1,90,9,101,7,100,19, ++ 100,11,100,12,132,1,131,1,90,10,101,7,100,20,100,13, ++ 100,14,132,1,131,1,90,11,101,7,100,19,100,15,100,16, ++ 132,1,131,1,90,12,101,4,100,17,100,18,132,0,131,1, ++ 90,13,100,10,83,0,41,21,218,10,80,97,116,104,70,105, ++ 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, ++ 102,105,110,100,101,114,32,102,111,114,32,115,121,115,46,112, ++ 97,116,104,32,97,110,100,32,112,97,99,107,97,103,101,32, ++ 95,95,112,97,116,104,95,95,32,97,116,116,114,105,98,117, ++ 116,101,115,46,99,0,0,0,0,0,0,0,0,0,0,0, ++ 0,2,0,0,0,4,0,0,0,67,0,0,0,115,64,0, ++ 0,0,116,0,116,1,106,2,160,3,161,0,131,1,68,0, ++ 93,22,92,2,125,0,125,1,124,1,100,1,117,0,114,20, ++ 116,1,106,2,124,0,61,0,113,7,116,4,124,1,100,2, ++ 131,2,114,29,124,1,160,5,161,0,1,0,113,7,100,1, ++ 83,0,41,3,122,125,67,97,108,108,32,116,104,101,32,105, ++ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, ++ 40,41,32,109,101,116,104,111,100,32,111,110,32,97,108,108, ++ 32,112,97,116,104,32,101,110,116,114,121,32,102,105,110,100, ++ 101,114,115,10,32,32,32,32,32,32,32,32,115,116,111,114, ++ 101,100,32,105,110,32,115,121,115,46,112,97,116,104,95,105, ++ 109,112,111,114,116,101,114,95,99,97,99,104,101,115,32,40, ++ 119,104,101,114,101,32,105,109,112,108,101,109,101,110,116,101, ++ 100,41,46,78,218,17,105,110,118,97,108,105,100,97,116,101, ++ 95,99,97,99,104,101,115,41,6,218,4,108,105,115,116,114, ++ 16,0,0,0,218,19,112,97,116,104,95,105,109,112,111,114, ++ 116,101,114,95,99,97,99,104,101,218,5,105,116,101,109,115, ++ 114,154,0,0,0,114,79,1,0,0,41,2,114,142,0,0, ++ 0,218,6,102,105,110,100,101,114,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,79,1,0,0,48,5,0, ++ 0,115,14,0,0,0,22,4,8,1,10,1,10,1,8,1, ++ 2,128,4,252,122,28,80,97,116,104,70,105,110,100,101,114, ++ 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, ++ 101,115,99,1,0,0,0,0,0,0,0,0,0,0,0,2, ++ 0,0,0,9,0,0,0,67,0,0,0,115,76,0,0,0, ++ 116,0,106,1,100,1,117,1,114,14,116,0,106,1,115,14, ++ 116,2,160,3,100,2,116,4,161,2,1,0,116,0,106,1, ++ 68,0,93,18,125,1,122,7,124,1,124,0,131,1,87,0, ++ 2,0,1,0,83,0,4,0,116,5,121,35,1,0,1,0, ++ 1,0,89,0,113,17,119,0,100,1,83,0,41,3,122,46, ++ 83,101,97,114,99,104,32,115,121,115,46,112,97,116,104,95, ++ 104,111,111,107,115,32,102,111,114,32,97,32,102,105,110,100, ++ 101,114,32,102,111,114,32,39,112,97,116,104,39,46,78,122, ++ 23,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, ++ 105,115,32,101,109,112,116,121,41,6,114,16,0,0,0,218, ++ 10,112,97,116,104,95,104,111,111,107,115,114,101,0,0,0, ++ 114,102,0,0,0,114,163,0,0,0,114,143,0,0,0,41, ++ 2,114,67,0,0,0,90,4,104,111,111,107,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,11,95,112,97, ++ 116,104,95,104,111,111,107,115,58,5,0,0,115,18,0,0, ++ 0,16,3,12,1,10,1,2,1,14,1,12,1,4,1,2, ++ 255,4,3,122,22,80,97,116,104,70,105,110,100,101,114,46, ++ 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, ++ 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, ++ 67,0,0,0,115,100,0,0,0,124,1,100,1,107,2,114, ++ 21,122,6,116,0,160,1,161,0,125,1,87,0,110,10,4, ++ 0,116,2,121,20,1,0,1,0,1,0,89,0,100,2,83, ++ 0,119,0,122,8,116,3,106,4,124,1,25,0,125,2,87, ++ 0,124,2,83,0,4,0,116,5,121,49,1,0,1,0,1, ++ 0,124,0,160,6,124,1,161,1,125,2,124,2,116,3,106, ++ 4,124,1,60,0,89,0,124,2,83,0,119,0,41,3,122, ++ 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, ++ 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, ++ 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, ++ 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, ++ 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, ++ 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, ++ 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, ++ 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, ++ 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, ++ 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, ++ 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, ++ 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, ++ 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, ++ 32,32,32,114,11,0,0,0,78,41,7,114,19,0,0,0, ++ 114,84,0,0,0,218,17,70,105,108,101,78,111,116,70,111, ++ 117,110,100,69,114,114,111,114,114,16,0,0,0,114,81,1, ++ 0,0,218,8,75,101,121,69,114,114,111,114,114,85,1,0, ++ 0,41,3,114,222,0,0,0,114,67,0,0,0,114,83,1, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,20,95,112,97,116,104,95,105,109,112,111,114,116,101, ++ 114,95,99,97,99,104,101,71,5,0,0,115,28,0,0,0, ++ 8,8,2,1,12,1,12,1,6,3,2,253,2,4,12,1, ++ 4,4,12,253,10,1,12,1,4,1,2,253,122,31,80,97, ++ 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, ++ 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, ++ 0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0, ++ 0,0,67,0,0,0,115,138,0,0,0,116,0,124,2,100, ++ 1,131,2,114,27,116,1,160,2,124,2,161,1,155,0,100, ++ 2,157,2,125,3,116,3,160,4,124,3,116,5,161,2,1, ++ 0,124,2,160,6,124,1,161,1,92,2,125,4,125,5,110, ++ 21,116,1,160,2,124,2,161,1,155,0,100,3,157,2,125, ++ 3,116,3,160,4,124,3,116,5,161,2,1,0,124,2,160, ++ 7,124,1,161,1,125,4,103,0,125,5,124,4,100,0,117, ++ 1,114,58,116,1,160,8,124,1,124,4,161,2,83,0,116, ++ 1,160,9,124,1,100,0,161,2,125,6,124,5,124,6,95, ++ 10,124,6,83,0,41,4,78,114,162,0,0,0,122,53,46, ++ 102,105,110,100,95,115,112,101,99,40,41,32,110,111,116,32, ++ 102,111,117,110,100,59,32,102,97,108,108,105,110,103,32,98, ++ 97,99,107,32,116,111,32,102,105,110,100,95,108,111,97,100, ++ 101,114,40,41,122,53,46,102,105,110,100,95,115,112,101,99, ++ 40,41,32,110,111,116,32,102,111,117,110,100,59,32,102,97, ++ 108,108,105,110,103,32,98,97,99,107,32,116,111,32,102,105, ++ 110,100,95,109,111,100,117,108,101,40,41,41,11,114,154,0, ++ 0,0,114,160,0,0,0,90,12,95,111,98,106,101,99,116, ++ 95,110,97,109,101,114,101,0,0,0,114,102,0,0,0,114, ++ 163,0,0,0,114,162,0,0,0,114,230,0,0,0,114,225, ++ 0,0,0,114,208,0,0,0,114,203,0,0,0,41,7,114, ++ 222,0,0,0,114,164,0,0,0,114,83,1,0,0,114,167, ++ 0,0,0,114,165,0,0,0,114,166,0,0,0,114,211,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,16,95,108,101,103,97,99,121,95,103,101,116,95,115, ++ 112,101,99,93,5,0,0,115,26,0,0,0,10,4,16,1, ++ 12,2,16,1,16,2,12,2,10,1,4,1,8,1,12,1, ++ 12,1,6,1,4,1,122,27,80,97,116,104,70,105,110,100, ++ 101,114,46,95,108,101,103,97,99,121,95,103,101,116,95,115, ++ 112,101,99,78,99,4,0,0,0,0,0,0,0,0,0,0, ++ 0,9,0,0,0,5,0,0,0,67,0,0,0,115,166,0, ++ 0,0,103,0,125,4,124,2,68,0,93,67,125,5,116,0, ++ 124,5,116,1,116,2,102,2,131,2,115,14,113,4,124,0, ++ 160,3,124,5,161,1,125,6,124,6,100,1,117,1,114,71, ++ 116,4,124,6,100,2,131,2,114,35,124,6,160,5,124,1, ++ 124,3,161,2,125,7,110,6,124,0,160,6,124,1,124,6, ++ 161,2,125,7,124,7,100,1,117,0,114,46,113,4,124,7, ++ 106,7,100,1,117,1,114,55,124,7,2,0,1,0,83,0, ++ 124,7,106,8,125,8,124,8,100,1,117,0,114,66,116,9, ++ 100,3,131,1,130,1,124,4,160,10,124,8,161,1,1,0, ++ 113,4,116,11,160,12,124,1,100,1,161,2,125,7,124,4, ++ 124,7,95,8,124,7,83,0,41,4,122,63,70,105,110,100, ++ 32,116,104,101,32,108,111,97,100,101,114,32,111,114,32,110, ++ 97,109,101,115,112,97,99,101,95,112,97,116,104,32,102,111, ++ 114,32,116,104,105,115,32,109,111,100,117,108,101,47,112,97, ++ 99,107,97,103,101,32,110,97,109,101,46,78,114,227,0,0, ++ 0,122,19,115,112,101,99,32,109,105,115,115,105,110,103,32, ++ 108,111,97,100,101,114,41,13,114,186,0,0,0,114,111,0, ++ 0,0,218,5,98,121,116,101,115,114,88,1,0,0,114,154, ++ 0,0,0,114,227,0,0,0,114,89,1,0,0,114,165,0, ++ 0,0,114,203,0,0,0,114,143,0,0,0,114,192,0,0, ++ 0,114,160,0,0,0,114,208,0,0,0,41,9,114,222,0, ++ 0,0,114,164,0,0,0,114,67,0,0,0,114,226,0,0, ++ 0,218,14,110,97,109,101,115,112,97,99,101,95,112,97,116, ++ 104,90,5,101,110,116,114,121,114,83,1,0,0,114,211,0, ++ 0,0,114,166,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,9,95,103,101,116,95,115,112,101, ++ 99,114,5,0,0,115,42,0,0,0,4,5,8,1,14,1, ++ 2,1,10,1,8,1,10,1,14,1,12,2,8,1,2,1, ++ 10,1,8,1,6,1,8,1,8,1,10,5,2,128,12,2, ++ 6,1,4,1,122,20,80,97,116,104,70,105,110,100,101,114, ++ 46,95,103,101,116,95,115,112,101,99,99,4,0,0,0,0, ++ 0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,67, ++ 0,0,0,115,94,0,0,0,124,2,100,1,117,0,114,7, ++ 116,0,106,1,125,2,124,0,160,2,124,1,124,2,124,3, ++ 161,3,125,4,124,4,100,1,117,0,114,20,100,1,83,0, ++ 124,4,106,3,100,1,117,0,114,45,124,4,106,4,125,5, ++ 124,5,114,43,100,1,124,4,95,5,116,6,124,1,124,5, ++ 124,0,106,2,131,3,124,4,95,4,124,4,83,0,100,1, ++ 83,0,124,4,83,0,41,2,122,141,84,114,121,32,116,111, ++ 32,102,105,110,100,32,97,32,115,112,101,99,32,102,111,114, ++ 32,39,102,117,108,108,110,97,109,101,39,32,111,110,32,115, ++ 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, ++ 39,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, ++ 115,101,97,114,99,104,32,105,115,32,98,97,115,101,100,32, ++ 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, ++ 115,32,97,110,100,32,115,121,115,46,112,97,116,104,95,105, ++ 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,32, ++ 32,32,32,32,32,32,32,78,41,7,114,16,0,0,0,114, ++ 67,0,0,0,114,92,1,0,0,114,165,0,0,0,114,203, ++ 0,0,0,114,206,0,0,0,114,48,1,0,0,41,6,114, ++ 222,0,0,0,114,164,0,0,0,114,67,0,0,0,114,226, ++ 0,0,0,114,211,0,0,0,114,91,1,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,227,0,0, ++ 0,146,5,0,0,115,26,0,0,0,8,6,6,1,14,1, ++ 8,1,4,1,10,1,6,1,4,1,6,3,16,1,4,1, ++ 4,2,4,2,122,20,80,97,116,104,70,105,110,100,101,114, ++ 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, ++ 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, ++ 0,0,0,115,42,0,0,0,116,0,160,1,100,1,116,2, ++ 161,2,1,0,124,0,160,3,124,1,124,2,161,2,125,3, ++ 124,3,100,2,117,0,114,18,100,2,83,0,124,3,106,4, ++ 83,0,41,3,122,170,102,105,110,100,32,116,104,101,32,109, ++ 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116, ++ 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101, ++ 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, ++ 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32, ++ 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, ++ 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32, ++ 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, ++ 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, ++ 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, ++ 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, ++ 122,101,80,97,116,104,70,105,110,100,101,114,46,102,105,110, ++ 100,95,109,111,100,117,108,101,40,41,32,105,115,32,100,101, ++ 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, ++ 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, ++ 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, ++ 117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, ++ 105,110,115,116,101,97,100,78,114,228,0,0,0,114,229,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,230,0,0,0,170,5,0,0,115,14,0,0,0,6, ++ 8,2,2,4,254,12,3,8,1,4,1,6,1,122,22,80, ++ 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,109, ++ 111,100,117,108,101,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,3,0,0,0,4,0,0,0,79,0,0,0,115,28, ++ 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, ++ 2,106,2,124,0,105,0,124,1,164,1,142,1,83,0,41, ++ 3,97,32,1,0,0,10,32,32,32,32,32,32,32,32,70, ++ 105,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110, ++ 115,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, ++ 114,110,32,97,110,32,105,116,101,114,97,98,108,101,32,111, ++ 102,32,97,108,108,32,68,105,115,116,114,105,98,117,116,105, ++ 111,110,32,105,110,115,116,97,110,99,101,115,32,99,97,112, ++ 97,98,108,101,32,111,102,10,32,32,32,32,32,32,32,32, ++ 108,111,97,100,105,110,103,32,116,104,101,32,109,101,116,97, ++ 100,97,116,97,32,102,111,114,32,112,97,99,107,97,103,101, ++ 115,32,109,97,116,99,104,105,110,103,32,96,96,99,111,110, ++ 116,101,120,116,46,110,97,109,101,96,96,10,32,32,32,32, ++ 32,32,32,32,40,111,114,32,97,108,108,32,110,97,109,101, ++ 115,32,105,102,32,96,96,78,111,110,101,96,96,32,105,110, ++ 100,105,99,97,116,101,100,41,32,97,108,111,110,103,32,116, ++ 104,101,32,112,97,116,104,115,32,105,110,32,116,104,101,32, ++ 108,105,115,116,10,32,32,32,32,32,32,32,32,111,102,32, ++ 100,105,114,101,99,116,111,114,105,101,115,32,96,96,99,111, ++ 110,116,101,120,116,46,112,97,116,104,96,96,46,10,32,32, ++ 32,32,32,32,32,32,114,0,0,0,0,41,1,218,18,77, ++ 101,116,97,100,97,116,97,80,97,116,104,70,105,110,100,101, ++ 114,41,3,90,18,105,109,112,111,114,116,108,105,98,46,109, ++ 101,116,97,100,97,116,97,114,93,1,0,0,218,18,102,105, ++ 110,100,95,100,105,115,116,114,105,98,117,116,105,111,110,115, ++ 41,3,114,145,0,0,0,114,146,0,0,0,114,93,1,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 114,94,1,0,0,186,5,0,0,115,4,0,0,0,12,10, ++ 16,1,122,29,80,97,116,104,70,105,110,100,101,114,46,102, ++ 105,110,100,95,100,105,115,116,114,105,98,117,116,105,111,110, ++ 115,114,71,0,0,0,114,231,0,0,0,41,14,114,151,0, ++ 0,0,114,150,0,0,0,114,152,0,0,0,114,153,0,0, ++ 0,114,234,0,0,0,114,79,1,0,0,114,85,1,0,0, ++ 114,235,0,0,0,114,88,1,0,0,114,89,1,0,0,114, ++ 92,1,0,0,114,227,0,0,0,114,230,0,0,0,114,94, ++ 1,0,0,114,8,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,114,78,1,0,0,44,5,0,0, ++ 115,36,0,0,0,8,0,4,2,2,2,10,1,2,9,10, ++ 1,2,12,10,1,2,21,10,1,2,20,12,1,2,31,12, ++ 1,2,23,12,1,2,15,14,1,114,78,1,0,0,99,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, ++ 0,0,0,64,0,0,0,115,90,0,0,0,101,0,90,1, ++ 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, ++ 100,4,100,5,132,0,90,5,101,6,90,7,100,6,100,7, ++ 132,0,90,8,100,8,100,9,132,0,90,9,100,19,100,11, ++ 100,12,132,1,90,10,100,13,100,14,132,0,90,11,101,12, ++ 100,15,100,16,132,0,131,1,90,13,100,17,100,18,132,0, ++ 90,14,100,10,83,0,41,20,218,10,70,105,108,101,70,105, ++ 110,100,101,114,122,172,70,105,108,101,45,98,97,115,101,100, ++ 32,102,105,110,100,101,114,46,10,10,32,32,32,32,73,110, ++ 116,101,114,97,99,116,105,111,110,115,32,119,105,116,104,32, ++ 116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32, ++ 97,114,101,32,99,97,99,104,101,100,32,102,111,114,32,112, ++ 101,114,102,111,114,109,97,110,99,101,44,32,98,101,105,110, ++ 103,10,32,32,32,32,114,101,102,114,101,115,104,101,100,32, ++ 119,104,101,110,32,116,104,101,32,100,105,114,101,99,116,111, ++ 114,121,32,116,104,101,32,102,105,110,100,101,114,32,105,115, ++ 32,104,97,110,100,108,105,110,103,32,104,97,115,32,98,101, ++ 101,110,32,109,111,100,105,102,105,101,100,46,10,10,32,32, ++ 32,32,99,2,0,0,0,0,0,0,0,0,0,0,0,5, ++ 0,0,0,6,0,0,0,7,0,0,0,115,112,0,0,0, ++ 103,0,125,3,124,2,68,0,93,16,92,2,137,0,125,4, ++ 124,3,160,0,135,0,102,1,100,1,100,2,132,8,124,4, ++ 68,0,131,1,161,1,1,0,113,4,124,3,124,0,95,1, ++ 124,1,112,27,100,3,124,0,95,2,116,3,124,0,106,2, ++ 131,1,115,43,116,4,116,5,160,6,161,0,124,0,106,2, ++ 131,2,124,0,95,2,100,4,124,0,95,7,116,8,131,0, ++ 124,0,95,9,116,8,131,0,124,0,95,10,100,5,83,0, ++ 41,6,122,154,73,110,105,116,105,97,108,105,122,101,32,119, ++ 105,116,104,32,116,104,101,32,112,97,116,104,32,116,111,32, ++ 115,101,97,114,99,104,32,111,110,32,97,110,100,32,97,32, ++ 118,97,114,105,97,98,108,101,32,110,117,109,98,101,114,32, ++ 111,102,10,32,32,32,32,32,32,32,32,50,45,116,117,112, ++ 108,101,115,32,99,111,110,116,97,105,110,105,110,103,32,116, ++ 104,101,32,108,111,97,100,101,114,32,97,110,100,32,116,104, ++ 101,32,102,105,108,101,32,115,117,102,102,105,120,101,115,32, ++ 116,104,101,32,108,111,97,100,101,114,10,32,32,32,32,32, ++ 32,32,32,114,101,99,111,103,110,105,122,101,115,46,99,1, ++ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, ++ 0,0,0,51,0,0,0,115,24,0,0,0,129,0,124,0, ++ 93,7,125,1,124,1,136,0,102,2,86,0,1,0,113,2, ++ 100,0,83,0,114,71,0,0,0,114,8,0,0,0,114,44, ++ 1,0,0,169,1,114,165,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,10,0,0,0,215,5,0,0,115,4,0, ++ 0,0,2,128,22,0,122,38,70,105,108,101,70,105,110,100, ++ 101,114,46,95,95,105,110,105,116,95,95,46,60,108,111,99, ++ 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,99, ++ 0,0,0,114,3,0,0,0,78,41,11,114,192,0,0,0, ++ 218,8,95,108,111,97,100,101,114,115,114,67,0,0,0,114, ++ 88,0,0,0,114,69,0,0,0,114,19,0,0,0,114,84, ++ 0,0,0,218,11,95,112,97,116,104,95,109,116,105,109,101, ++ 218,3,115,101,116,218,11,95,112,97,116,104,95,99,97,99, ++ 104,101,218,19,95,114,101,108,97,120,101,100,95,112,97,116, ++ 104,95,99,97,99,104,101,41,5,114,144,0,0,0,114,67, ++ 0,0,0,218,14,108,111,97,100,101,114,95,100,101,116,97, ++ 105,108,115,90,7,108,111,97,100,101,114,115,114,213,0,0, ++ 0,114,8,0,0,0,114,96,1,0,0,114,9,0,0,0, ++ 114,237,0,0,0,209,5,0,0,115,20,0,0,0,4,4, ++ 12,1,26,1,6,1,10,2,10,1,18,1,6,1,8,1, ++ 12,1,122,19,70,105,108,101,70,105,110,100,101,114,46,95, ++ 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, ++ 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, ++ 115,10,0,0,0,100,1,124,0,95,0,100,2,83,0,41, ++ 3,122,31,73,110,118,97,108,105,100,97,116,101,32,116,104, ++ 101,32,100,105,114,101,99,116,111,114,121,32,109,116,105,109, ++ 101,46,114,3,0,0,0,78,41,1,114,98,1,0,0,114, ++ 22,1,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,79,1,0,0,225,5,0,0,114,83,0,0, ++ 0,122,28,70,105,108,101,70,105,110,100,101,114,46,105,110, ++ 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, ++ 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, ++ 4,0,0,0,67,0,0,0,115,54,0,0,0,116,0,160, ++ 1,100,1,116,2,161,2,1,0,124,0,160,3,124,1,161, ++ 1,125,2,124,2,100,2,117,0,114,19,100,2,103,0,102, ++ 2,83,0,124,2,106,4,124,2,106,5,112,25,103,0,102, ++ 2,83,0,41,3,122,197,84,114,121,32,116,111,32,102,105, ++ 110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,32, ++ 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, ++ 100,117,108,101,44,32,111,114,32,116,104,101,32,110,97,109, ++ 101,115,112,97,99,101,10,32,32,32,32,32,32,32,32,112, ++ 97,99,107,97,103,101,32,112,111,114,116,105,111,110,115,46, ++ 32,82,101,116,117,114,110,115,32,40,108,111,97,100,101,114, ++ 44,32,108,105,115,116,45,111,102,45,112,111,114,116,105,111, ++ 110,115,41,46,10,10,32,32,32,32,32,32,32,32,84,104, ++ 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, ++ 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, ++ 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, ++ 100,46,10,10,32,32,32,32,32,32,32,32,122,101,70,105, ++ 108,101,70,105,110,100,101,114,46,102,105,110,100,95,108,111, ++ 97,100,101,114,40,41,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,32,97,110,100,32,115,108,97,116,101,100,32, ++ 102,111,114,32,114,101,109,111,118,97,108,32,105,110,32,80, ++ 121,116,104,111,110,32,51,46,49,50,59,32,117,115,101,32, ++ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, ++ 101,97,100,78,41,6,114,101,0,0,0,114,102,0,0,0, ++ 114,103,0,0,0,114,227,0,0,0,114,165,0,0,0,114, ++ 203,0,0,0,41,3,114,144,0,0,0,114,164,0,0,0, ++ 114,211,0,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,162,0,0,0,231,5,0,0,115,14,0, ++ 0,0,6,7,2,2,4,254,10,3,8,1,8,1,16,1, ++ 122,22,70,105,108,101,70,105,110,100,101,114,46,102,105,110, ++ 100,95,108,111,97,100,101,114,99,6,0,0,0,0,0,0, ++ 0,0,0,0,0,7,0,0,0,6,0,0,0,67,0,0, ++ 0,115,26,0,0,0,124,1,124,2,124,3,131,2,125,6, ++ 116,0,124,2,124,3,124,6,124,4,100,1,141,4,83,0, ++ 41,2,78,114,202,0,0,0,41,1,114,214,0,0,0,41, ++ 7,114,144,0,0,0,114,212,0,0,0,114,164,0,0,0, ++ 114,67,0,0,0,90,4,115,109,115,108,114,226,0,0,0, ++ 114,165,0,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,92,1,0,0,246,5,0,0,115,8,0, ++ 0,0,10,1,8,1,2,1,6,255,122,20,70,105,108,101, ++ 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, ++ 78,99,3,0,0,0,0,0,0,0,0,0,0,0,14,0, ++ 0,0,9,0,0,0,67,0,0,0,115,122,1,0,0,100, ++ 1,125,3,124,1,160,0,100,2,161,1,100,3,25,0,125, ++ 4,122,12,116,1,124,0,106,2,112,17,116,3,160,4,161, ++ 0,131,1,106,5,125,5,87,0,110,11,4,0,116,6,121, ++ 32,1,0,1,0,1,0,100,4,125,5,89,0,110,1,119, ++ 0,124,5,124,0,106,7,107,3,114,45,124,0,160,8,161, ++ 0,1,0,124,5,124,0,95,7,116,9,131,0,114,56,124, ++ 0,106,10,125,6,124,4,160,11,161,0,125,7,110,5,124, ++ 0,106,12,125,6,124,4,125,7,124,7,124,6,118,0,114, ++ 108,116,13,124,0,106,2,124,4,131,2,125,8,124,0,106, ++ 14,68,0,93,29,92,2,125,9,125,10,100,5,124,9,23, ++ 0,125,11,116,13,124,8,124,11,131,2,125,12,116,15,124, ++ 12,131,1,114,103,124,0,160,16,124,10,124,1,124,12,124, ++ 8,103,1,124,2,161,5,2,0,1,0,83,0,113,74,116, ++ 17,124,8,131,1,125,3,124,0,106,14,68,0,93,55,92, ++ 2,125,9,125,10,122,10,116,13,124,0,106,2,124,4,124, ++ 9,23,0,131,2,125,12,87,0,110,11,4,0,116,18,121, ++ 136,1,0,1,0,1,0,89,0,1,0,100,6,83,0,119, ++ 0,116,19,106,20,100,7,124,12,100,3,100,8,141,3,1, ++ 0,124,7,124,9,23,0,124,6,118,0,114,166,116,15,124, ++ 12,131,1,114,166,124,0,160,16,124,10,124,1,124,12,100, ++ 6,124,2,161,5,2,0,1,0,83,0,113,111,124,3,114, ++ 187,116,19,160,20,100,9,124,8,161,2,1,0,116,19,160, ++ 21,124,1,100,6,161,2,125,13,124,8,103,1,124,13,95, ++ 22,124,13,83,0,100,6,83,0,41,10,122,111,84,114,121, ++ 32,116,111,32,102,105,110,100,32,97,32,115,112,101,99,32, ++ 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, ++ 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, ++ 32,32,32,82,101,116,117,114,110,115,32,116,104,101,32,109, ++ 97,116,99,104,105,110,103,32,115,112,101,99,44,32,111,114, ++ 32,78,111,110,101,32,105,102,32,110,111,116,32,102,111,117, ++ 110,100,46,10,32,32,32,32,32,32,32,32,70,114,99,0, ++ 0,0,114,46,0,0,0,114,3,0,0,0,114,237,0,0, ++ 0,78,122,9,116,114,121,105,110,103,32,123,125,41,1,90, ++ 9,118,101,114,98,111,115,105,116,121,122,25,112,111,115,115, ++ 105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,102, ++ 111,114,32,123,125,41,23,114,106,0,0,0,114,77,0,0, ++ 0,114,67,0,0,0,114,19,0,0,0,114,84,0,0,0, ++ 114,36,1,0,0,114,78,0,0,0,114,98,1,0,0,218, ++ 11,95,102,105,108,108,95,99,97,99,104,101,114,23,0,0, ++ 0,114,101,1,0,0,114,132,0,0,0,114,100,1,0,0, ++ 114,69,0,0,0,114,97,1,0,0,114,82,0,0,0,114, ++ 92,1,0,0,114,85,0,0,0,114,113,0,0,0,114,160, ++ 0,0,0,114,174,0,0,0,114,208,0,0,0,114,203,0, ++ 0,0,41,14,114,144,0,0,0,114,164,0,0,0,114,226, ++ 0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,99, ++ 101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,194, ++ 0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,104, ++ 101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,112, ++ 97,116,104,114,45,1,0,0,114,212,0,0,0,90,13,105, ++ 110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,117, ++ 108,108,95,112,97,116,104,114,211,0,0,0,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,114,227,0,0,0, ++ 251,5,0,0,115,86,0,0,0,4,5,14,1,2,1,24, ++ 1,12,1,8,1,2,255,10,2,8,1,6,1,6,2,6, ++ 1,10,1,6,2,4,1,8,2,12,1,14,1,8,1,10, ++ 1,8,1,24,1,2,255,8,5,14,2,2,1,20,1,12, ++ 1,8,1,2,255,16,2,12,1,8,1,10,1,4,1,8, ++ 255,2,128,4,2,12,1,12,1,8,1,4,1,4,1,122, ++ 20,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, ++ 95,115,112,101,99,99,1,0,0,0,0,0,0,0,0,0, ++ 0,0,9,0,0,0,10,0,0,0,67,0,0,0,115,192, ++ 0,0,0,124,0,106,0,125,1,122,11,116,1,160,2,124, ++ 1,112,11,116,1,160,3,161,0,161,1,125,2,87,0,110, ++ 14,4,0,116,4,116,5,116,6,102,3,121,28,1,0,1, ++ 0,1,0,103,0,125,2,89,0,110,1,119,0,116,7,106, ++ 8,160,9,100,1,161,1,115,41,116,10,124,2,131,1,124, ++ 0,95,11,110,37,116,10,131,0,125,3,124,2,68,0,93, ++ 28,125,4,124,4,160,12,100,2,161,1,92,3,125,5,125, ++ 6,125,7,124,6,114,67,100,3,160,13,124,5,124,7,160, ++ 14,161,0,161,2,125,8,110,2,124,5,125,8,124,3,160, ++ 15,124,8,161,1,1,0,113,46,124,3,124,0,95,11,116, ++ 7,106,8,160,9,116,16,161,1,114,94,100,4,100,5,132, ++ 0,124,2,68,0,131,1,124,0,95,17,100,6,83,0,100, ++ 6,83,0,41,7,122,68,70,105,108,108,32,116,104,101,32, ++ 99,97,99,104,101,32,111,102,32,112,111,116,101,110,116,105, ++ 97,108,32,109,111,100,117,108,101,115,32,97,110,100,32,112, ++ 97,99,107,97,103,101,115,32,102,111,114,32,116,104,105,115, ++ 32,100,105,114,101,99,116,111,114,121,46,114,15,0,0,0, ++ 114,99,0,0,0,114,90,0,0,0,99,1,0,0,0,0, ++ 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,83, ++ 0,0,0,115,20,0,0,0,104,0,124,0,93,6,125,1, ++ 124,1,160,0,161,0,146,2,113,2,83,0,114,8,0,0, ++ 0,41,1,114,132,0,0,0,41,2,114,6,0,0,0,90, ++ 2,102,110,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,14,0,0,0,75,6,0,0,115,2,0,0,0, ++ 20,0,122,41,70,105,108,101,70,105,110,100,101,114,46,95, ++ 102,105,108,108,95,99,97,99,104,101,46,60,108,111,99,97, ++ 108,115,62,46,60,115,101,116,99,111,109,112,62,78,41,18, ++ 114,67,0,0,0,114,19,0,0,0,90,7,108,105,115,116, ++ 100,105,114,114,84,0,0,0,114,86,1,0,0,218,15,80, ++ 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, ++ 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, ++ 111,114,114,16,0,0,0,114,27,0,0,0,114,28,0,0, ++ 0,114,99,1,0,0,114,100,1,0,0,114,128,0,0,0, ++ 114,91,0,0,0,114,132,0,0,0,218,3,97,100,100,114, ++ 29,0,0,0,114,101,1,0,0,41,9,114,144,0,0,0, ++ 114,67,0,0,0,90,8,99,111,110,116,101,110,116,115,90, ++ 21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111, ++ 110,116,101,110,116,115,114,71,1,0,0,114,142,0,0,0, ++ 114,55,1,0,0,114,45,1,0,0,90,8,110,101,119,95, ++ 110,97,109,101,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,103,1,0,0,46,6,0,0,115,38,0,0, ++ 0,6,2,2,1,22,1,18,1,8,3,2,253,12,6,12, ++ 1,6,7,8,1,16,1,4,1,18,1,4,2,12,1,6, ++ 1,12,1,20,1,4,255,122,22,70,105,108,101,70,105,110, ++ 100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,99, ++ 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, ++ 3,0,0,0,7,0,0,0,115,18,0,0,0,135,0,135, ++ 1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41, ++ 3,97,20,1,0,0,65,32,99,108,97,115,115,32,109,101, ++ 116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,114, ++ 110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,32, ++ 117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,95, ++ 104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,105, ++ 99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,97, ++ 110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,103, ++ 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,108, ++ 111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,112, ++ 97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,108, ++ 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, ++ 101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116, ++ 104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,111, ++ 110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,115, ++ 32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121, ++ 44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, ++ 10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,46, ++ 10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,0, ++ 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,19, ++ 0,0,0,115,36,0,0,0,116,0,124,0,131,1,115,10, ++ 116,1,100,1,124,0,100,2,141,2,130,1,136,0,124,0, ++ 103,1,136,1,162,1,82,0,142,0,83,0,41,3,122,45, ++ 80,97,116,104,32,104,111,111,107,32,102,111,114,32,105,109, ++ 112,111,114,116,108,105,98,46,109,97,99,104,105,110,101,114, ++ 121,46,70,105,108,101,70,105,110,100,101,114,46,122,30,111, ++ 110,108,121,32,100,105,114,101,99,116,111,114,105,101,115,32, ++ 97,114,101,32,115,117,112,112,111,114,116,101,100,114,73,0, ++ 0,0,41,2,114,85,0,0,0,114,143,0,0,0,114,73, ++ 0,0,0,169,2,114,222,0,0,0,114,102,1,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,24,112,97,116,104,95, ++ 104,111,111,107,95,102,111,114,95,70,105,108,101,70,105,110, ++ 100,101,114,87,6,0,0,115,6,0,0,0,8,2,12,1, ++ 16,1,122,54,70,105,108,101,70,105,110,100,101,114,46,112, ++ 97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,115, ++ 62,46,112,97,116,104,95,104,111,111,107,95,102,111,114,95, ++ 70,105,108,101,70,105,110,100,101,114,114,8,0,0,0,41, ++ 3,114,222,0,0,0,114,102,1,0,0,114,108,1,0,0, ++ 114,8,0,0,0,114,107,1,0,0,114,9,0,0,0,218, ++ 9,112,97,116,104,95,104,111,111,107,77,6,0,0,115,4, ++ 0,0,0,14,10,4,6,122,20,70,105,108,101,70,105,110, ++ 100,101,114,46,112,97,116,104,95,104,111,111,107,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, ++ 0,0,67,0,0,0,114,68,1,0,0,41,2,78,122,16, ++ 70,105,108,101,70,105,110,100,101,114,40,123,33,114,125,41, ++ 41,2,114,91,0,0,0,114,67,0,0,0,114,22,1,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 114,69,1,0,0,95,6,0,0,114,62,1,0,0,122,19, ++ 70,105,108,101,70,105,110,100,101,114,46,95,95,114,101,112, ++ 114,95,95,114,71,0,0,0,41,15,114,151,0,0,0,114, ++ 150,0,0,0,114,152,0,0,0,114,153,0,0,0,114,237, ++ 0,0,0,114,79,1,0,0,114,168,0,0,0,114,230,0, ++ 0,0,114,162,0,0,0,114,92,1,0,0,114,227,0,0, ++ 0,114,103,1,0,0,114,235,0,0,0,114,109,1,0,0, ++ 114,69,1,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,95,1,0,0,200,5, ++ 0,0,115,24,0,0,0,8,0,4,2,8,7,8,16,4, ++ 4,8,2,8,15,10,5,8,51,2,31,10,1,12,17,114, ++ 95,1,0,0,99,4,0,0,0,0,0,0,0,0,0,0, ++ 0,6,0,0,0,8,0,0,0,67,0,0,0,115,144,0, ++ 0,0,124,0,160,0,100,1,161,1,125,4,124,0,160,0, ++ 100,2,161,1,125,5,124,4,115,33,124,5,114,18,124,5, ++ 106,1,125,4,110,15,124,2,124,3,107,2,114,28,116,2, ++ 124,1,124,2,131,2,125,4,110,5,116,3,124,1,124,2, ++ 131,2,125,4,124,5,115,42,116,4,124,1,124,2,124,4, ++ 100,3,141,3,125,5,122,19,124,5,124,0,100,2,60,0, ++ 124,4,124,0,100,1,60,0,124,2,124,0,100,4,60,0, ++ 124,3,124,0,100,5,60,0,87,0,100,0,83,0,4,0, ++ 116,5,121,71,1,0,1,0,1,0,89,0,100,0,83,0, ++ 119,0,41,6,78,218,10,95,95,108,111,97,100,101,114,95, ++ 95,218,8,95,95,115,112,101,99,95,95,114,96,1,0,0, ++ 90,8,95,95,102,105,108,101,95,95,90,10,95,95,99,97, ++ 99,104,101,100,95,95,41,6,218,3,103,101,116,114,165,0, ++ 0,0,114,42,1,0,0,114,35,1,0,0,114,214,0,0, ++ 0,218,9,69,120,99,101,112,116,105,111,110,41,6,90,2, ++ 110,115,114,142,0,0,0,90,8,112,97,116,104,110,97,109, ++ 101,90,9,99,112,97,116,104,110,97,109,101,114,165,0,0, ++ 0,114,211,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,218,14,95,102,105,120,95,117,112,95,109, ++ 111,100,117,108,101,101,6,0,0,115,36,0,0,0,10,2, ++ 10,1,4,1,4,1,8,1,8,1,12,1,10,2,4,1, ++ 14,1,2,1,8,1,8,1,8,1,14,1,12,1,6,2, ++ 2,254,114,114,1,0,0,99,0,0,0,0,0,0,0,0, ++ 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, ++ 115,38,0,0,0,116,0,116,1,160,2,161,0,102,2,125, ++ 0,116,3,116,4,102,2,125,1,116,5,116,6,102,2,125, ++ 2,124,0,124,1,124,2,103,3,83,0,41,1,122,95,82, ++ 101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102, ++ 32,102,105,108,101,45,98,97,115,101,100,32,109,111,100,117, ++ 108,101,32,108,111,97,100,101,114,115,46,10,10,32,32,32, ++ 32,69,97,99,104,32,105,116,101,109,32,105,115,32,97,32, ++ 116,117,112,108,101,32,40,108,111,97,100,101,114,44,32,115, ++ 117,102,102,105,120,101,115,41,46,10,32,32,32,32,41,7, ++ 114,31,1,0,0,114,188,0,0,0,218,18,101,120,116,101, ++ 110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,35, ++ 1,0,0,114,129,0,0,0,114,42,1,0,0,114,115,0, ++ 0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,115, ++ 90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111, ++ 100,101,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,209,0,0,0,124,6,0,0,115,8,0,0,0,12, ++ 5,8,1,8,1,10,1,114,209,0,0,0,99,1,0,0, ++ 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, ++ 0,67,0,0,0,115,8,0,0,0,124,0,97,0,100,0, ++ 83,0,114,71,0,0,0,41,1,114,160,0,0,0,41,1, ++ 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, ++ 117,108,101,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114, ++ 97,112,95,109,111,100,117,108,101,135,6,0,0,115,2,0, ++ 0,0,8,2,114,117,1,0,0,99,1,0,0,0,0,0, ++ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, ++ 0,0,115,50,0,0,0,116,0,124,0,131,1,1,0,116, ++ 1,131,0,125,1,116,2,106,3,160,4,116,5,106,6,124, ++ 1,142,0,103,1,161,1,1,0,116,2,106,7,160,8,116, ++ 9,161,1,1,0,100,1,83,0,41,2,122,41,73,110,115, ++ 116,97,108,108,32,116,104,101,32,112,97,116,104,45,98,97, ++ 115,101,100,32,105,109,112,111,114,116,32,99,111,109,112,111, ++ 110,101,110,116,115,46,78,41,10,114,117,1,0,0,114,209, ++ 0,0,0,114,16,0,0,0,114,84,1,0,0,114,192,0, ++ 0,0,114,95,1,0,0,114,109,1,0,0,218,9,109,101, ++ 116,97,95,112,97,116,104,114,63,0,0,0,114,78,1,0, ++ 0,41,2,114,116,1,0,0,90,17,115,117,112,112,111,114, ++ 116,101,100,95,108,111,97,100,101,114,115,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,218,8,95,105,110,115, ++ 116,97,108,108,140,6,0,0,115,8,0,0,0,8,2,6, ++ 1,20,1,16,1,114,119,1,0,0,41,1,114,89,0,0, ++ 0,114,71,0,0,0,41,3,78,78,78,41,2,114,0,0, ++ 0,0,114,0,0,0,0,41,1,84,41,86,114,153,0,0, ++ 0,114,160,0,0,0,114,188,0,0,0,114,93,0,0,0, ++ 114,16,0,0,0,114,101,0,0,0,114,185,0,0,0,114, ++ 27,0,0,0,114,232,0,0,0,90,2,110,116,114,19,0, ++ 0,0,114,216,0,0,0,90,5,112,111,115,105,120,114,52, ++ 0,0,0,114,20,0,0,0,218,3,97,108,108,114,61,0, ++ 0,0,114,137,0,0,0,114,59,0,0,0,114,64,0,0, ++ 0,90,20,95,112,97,116,104,115,101,112,115,95,119,105,116, ++ 104,95,99,111,108,111,110,114,30,0,0,0,90,37,95,67, ++ 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, ++ 80,76,65,84,70,79,82,77,83,95,66,89,84,69,83,95, ++ 75,69,89,114,29,0,0,0,114,31,0,0,0,114,23,0, ++ 0,0,114,38,0,0,0,114,44,0,0,0,114,47,0,0, ++ 0,114,69,0,0,0,114,76,0,0,0,114,77,0,0,0, ++ 114,81,0,0,0,114,82,0,0,0,114,85,0,0,0,114, ++ 88,0,0,0,114,97,0,0,0,218,4,116,121,112,101,218, ++ 8,95,95,99,111,100,101,95,95,114,187,0,0,0,114,36, ++ 0,0,0,114,173,0,0,0,114,35,0,0,0,114,41,0, ++ 0,0,114,9,1,0,0,114,118,0,0,0,114,114,0,0, ++ 0,114,129,0,0,0,114,63,0,0,0,114,115,1,0,0, ++ 114,233,0,0,0,114,115,0,0,0,90,23,68,69,66,85, ++ 71,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, ++ 88,69,83,90,27,79,80,84,73,77,73,90,69,68,95,66, ++ 89,84,69,67,79,68,69,95,83,85,70,70,73,88,69,83, ++ 114,123,0,0,0,114,130,0,0,0,114,136,0,0,0,114, ++ 138,0,0,0,114,140,0,0,0,114,161,0,0,0,114,168, ++ 0,0,0,114,177,0,0,0,114,181,0,0,0,114,183,0, ++ 0,0,114,190,0,0,0,114,195,0,0,0,114,196,0,0, ++ 0,114,201,0,0,0,218,6,111,98,106,101,99,116,114,210, ++ 0,0,0,114,214,0,0,0,114,215,0,0,0,114,236,0, ++ 0,0,114,250,0,0,0,114,12,1,0,0,114,35,1,0, ++ 0,114,42,1,0,0,114,31,1,0,0,114,48,1,0,0, ++ 114,74,1,0,0,114,78,1,0,0,114,95,1,0,0,114, ++ 114,1,0,0,114,209,0,0,0,114,117,1,0,0,114,119, ++ 1,0,0,114,8,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,218,8,60,109,111,100,117,108,101, ++ 62,1,0,0,0,115,184,0,0,0,4,0,4,22,8,3, ++ 8,1,8,1,8,1,8,1,10,3,4,1,8,1,10,1, ++ 8,2,4,3,10,1,6,2,10,2,14,1,22,3,8,1, ++ 8,1,10,1,14,1,4,4,4,1,2,1,2,1,4,255, ++ 8,4,6,16,8,3,8,5,8,5,4,6,10,1,8,30, ++ 8,6,8,8,8,10,8,9,8,5,4,7,10,1,8,8, ++ 10,5,10,22,0,127,16,30,12,1,4,2,4,1,6,2, ++ 4,1,10,1,8,2,6,2,8,2,16,2,8,71,8,40, ++ 8,19,8,12,8,12,8,31,8,20,8,33,8,28,10,24, ++ 10,13,10,10,8,11,6,14,4,3,2,1,12,255,14,73, ++ 14,67,16,30,0,127,14,17,18,50,18,45,18,25,14,53, ++ 14,63,14,49,0,127,14,29,0,127,10,30,8,23,8,11, ++ 12,5, + }; +diff --git a/Python/initconfig.c b/Python/initconfig.c +index b2986116fd..85c80b0f33 100644 +--- a/Python/initconfig.c ++++ b/Python/initconfig.c +@@ -133,7 +133,7 @@ static const char usage_6[] = + "PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files.\n" + "PYTHONWARNDEFAULTENCODING: enable opt-in EncodingWarning for 'encoding=None'.\n"; + +-#if defined(MS_WINDOWS) ++#if defined(_MSC_VER) + # define PYTHONHOMEHELP "\\python{major}{minor}" + #else + # define PYTHONHOMEHELP "/lib/pythonX.X" +@@ -1536,7 +1536,7 @@ config_init_program_name(PyConfig *config) + } + + /* Last fall back: hardcoded name */ +-#ifdef MS_WINDOWS ++#ifdef _MSC_VER + const wchar_t *default_program_name = L"python"; + #else + const wchar_t *default_program_name = L"python3"; +diff --git a/Python/iscygpty.c b/Python/iscygpty.c +new file mode 100644 +index 0000000000..722f88f2f4 +--- /dev/null ++++ b/Python/iscygpty.c +@@ -0,0 +1,185 @@ ++/* ++ * iscygpty.c -- part of ptycheck ++ * https://github.com/k-takata/ptycheck ++ * ++ * Copyright (c) 2015-2017 K.Takata ++ * ++ * You can redistribute it and/or modify it under the terms of either ++ * the MIT license (as described below) or the Vim license. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifdef _WIN32 ++ ++#include ++#include ++#include ++#include ++ ++#ifdef USE_FILEEXTD ++/* VC 7.1 or earlier doesn't support SAL. */ ++# if !defined(_MSC_VER) || (_MSC_VER < 1400) ++# define __out ++# define __in ++# define __in_opt ++# endif ++/* Win32 FileID API Library: ++ * http://www.microsoft.com/en-us/download/details.aspx?id=22599 ++ * Needed for WinXP. */ ++# include ++#else /* USE_FILEEXTD */ ++/* VC 8 or earlier. */ ++# if defined(_MSC_VER) && (_MSC_VER < 1500) ++# ifdef ENABLE_STUB_IMPL ++# define STUB_IMPL ++# else ++# error "Win32 FileID API Library is required for VC2005 or earlier." ++# endif ++# endif ++#endif /* USE_FILEEXTD */ ++ ++ ++#include "iscygpty.h" ++ ++//#define USE_DYNFILEID ++#ifdef USE_DYNFILEID ++typedef BOOL (WINAPI *pfnGetFileInformationByHandleEx)( ++ HANDLE hFile, ++ FILE_INFO_BY_HANDLE_CLASS FileInformationClass, ++ LPVOID lpFileInformation, ++ DWORD dwBufferSize ++); ++static pfnGetFileInformationByHandleEx pGetFileInformationByHandleEx = NULL; ++ ++# ifndef USE_FILEEXTD ++static BOOL WINAPI stub_GetFileInformationByHandleEx( ++ HANDLE hFile, ++ FILE_INFO_BY_HANDLE_CLASS FileInformationClass, ++ LPVOID lpFileInformation, ++ DWORD dwBufferSize ++ ) ++{ ++ return FALSE; ++} ++# endif ++ ++static void setup_fileid_api(void) ++{ ++ if (pGetFileInformationByHandleEx != NULL) { ++ return; ++ } ++ pGetFileInformationByHandleEx = (pfnGetFileInformationByHandleEx) ++ GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), ++ "GetFileInformationByHandleEx"); ++ if (pGetFileInformationByHandleEx == NULL) { ++# ifdef USE_FILEEXTD ++ pGetFileInformationByHandleEx = GetFileInformationByHandleEx; ++# else ++ pGetFileInformationByHandleEx = stub_GetFileInformationByHandleEx; ++# endif ++ } ++} ++#else ++# define pGetFileInformationByHandleEx GetFileInformationByHandleEx ++# define setup_fileid_api() ++#endif ++ ++ ++#define is_wprefix(s, prefix) \ ++ (wcsncmp((s), (prefix), sizeof(prefix) / sizeof(WCHAR) - 1) == 0) ++ ++/* Check if the fd is a cygwin/msys's pty. */ ++int is_cygpty(int fd) ++{ ++#ifdef STUB_IMPL ++ return 0; ++#else ++ HANDLE h; ++ int size = sizeof(FILE_NAME_INFO) + sizeof(WCHAR) * (MAX_PATH - 1); ++ FILE_NAME_INFO *nameinfo; ++ WCHAR *p = NULL; ++ ++ setup_fileid_api(); ++ ++ h = (HANDLE) _get_osfhandle(fd); ++ if (h == INVALID_HANDLE_VALUE) { ++ return 0; ++ } ++ /* Cygwin/msys's pty is a pipe. */ ++ if (GetFileType(h) != FILE_TYPE_PIPE) { ++ return 0; ++ } ++ nameinfo = malloc(size + sizeof(WCHAR)); ++ if (nameinfo == NULL) { ++ return 0; ++ } ++ /* Check the name of the pipe: ++ * '\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master' */ ++ if (pGetFileInformationByHandleEx(h, FileNameInfo, nameinfo, size)) { ++ nameinfo->FileName[nameinfo->FileNameLength / sizeof(WCHAR)] = L'\0'; ++ p = nameinfo->FileName; ++ if (is_wprefix(p, L"\\cygwin-")) { /* Cygwin */ ++ p += 8; ++ } else if (is_wprefix(p, L"\\msys-")) { /* MSYS and MSYS2 */ ++ p += 6; ++ } else { ++ p = NULL; ++ } ++ if (p != NULL) { ++ while (*p && isxdigit(*p)) /* Skip 16-digit hexadecimal. */ ++ ++p; ++ if (is_wprefix(p, L"-pty")) { ++ p += 4; ++ } else { ++ p = NULL; ++ } ++ } ++ if (p != NULL) { ++ while (*p && isdigit(*p)) /* Skip pty number. */ ++ ++p; ++ if (is_wprefix(p, L"-from-master")) { ++ //p += 12; ++ } else if (is_wprefix(p, L"-to-master")) { ++ //p += 10; ++ } else { ++ p = NULL; ++ } ++ } ++ } ++ free(nameinfo); ++ return (p != NULL); ++#endif /* STUB_IMPL */ ++} ++ ++/* Check if at least one cygwin/msys pty is used. */ ++int is_cygpty_used(void) ++{ ++ int fd, ret = 0; ++ ++ for (fd = 0; fd < 3; fd++) { ++ ret |= is_cygpty(fd); ++ } ++ return ret; ++} ++ ++#endif /* _WIN32 */ ++ ++/* vim: set ts=4 sw=4: */ +diff --git a/Python/pathconfig.c b/Python/pathconfig.c +index 1017a571f2..e037791b59 100644 +--- a/Python/pathconfig.c ++++ b/Python/pathconfig.c +@@ -15,6 +15,140 @@ + extern "C" { + #endif + ++#ifdef __MINGW32__ ++#define wcstok wcstok_s ++#include ++#endif ++ ++static int ++Py_StartsWithA(const char * str, const char * prefix) ++{ ++ while(*prefix) ++ { ++ if(*prefix++ != *str++) ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static int ++Py_StartsWithW(const wchar_t * str, const wchar_t * prefix) ++{ ++ while(*prefix) ++ { ++ if(*prefix++ != *str++) ++ return 0; ++ } ++ ++ return 1; ++} ++ ++char ++Py_GetSepA(const char *name) ++{ ++ char* msystem = (char*)2; /* So that non Windows use / as sep */ ++ static char sep = '\0'; ++#ifdef _WIN32 ++ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx ++ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal ++ * modification, which means that you cannot use forward slashes to represent path separators ++ */ ++ if (name != NULL && Py_StartsWithA(name, "\\\\?\\") != 0) ++ { ++ return '\\'; ++ } ++#endif ++ if (sep != '\0') ++ return sep; ++#if defined(__MINGW32__) ++ msystem = Py_GETENV("MSYSTEM"); ++#endif ++ if (msystem != NULL) ++ sep = '/'; ++ else ++ sep = '\\'; ++ return sep; ++} ++ ++static char ++Py_GetAltSepA(const char *name) ++{ ++ char sep = Py_GetSepA(name); ++ if (sep == '/') ++ return '\\'; ++ return '/'; ++} ++ ++void ++Py_NormalizeSepsA(char *name) ++{ ++ assert(name != NULL); ++ char sep = Py_GetSepA(name); ++ char altsep = Py_GetAltSepA(name); ++ char* seps; ++ if (name[0] != '\0' && name[1] == ':') { ++ name[0] = toupper(name[0]); ++ } ++ seps = strchr(name, altsep); ++ while(seps) { ++ *seps = sep; ++ seps = strchr(seps, altsep); ++ } ++} ++ ++wchar_t ++Py_GetSepW(const wchar_t *name) ++{ ++ char* msystem = (char*)2; /* So that non Windows use / as sep */ ++ static wchar_t sep = L'\0'; ++#ifdef _WIN32 ++ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx ++ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal ++ * modification, which means that you cannot use forward slashes to represent path separators ++ */ ++ if (name != NULL && Py_StartsWithW(name, L"\\\\?\\") != 0) ++ { ++ return L'\\'; ++ } ++#endif ++ if (sep != L'\0') ++ return sep; ++#if defined(__MINGW32__) ++ msystem = Py_GETENV("MSYSTEM"); ++#endif ++ if (msystem != NULL) ++ sep = L'/'; ++ else ++ sep = L'\\'; ++ return sep; ++} ++ ++static wchar_t ++Py_GetAltSepW(const wchar_t *name) ++{ ++ char sep = Py_GetSepW(name); ++ if (sep == L'/') ++ return L'\\'; ++ return L'/'; ++} ++ ++void ++Py_NormalizeSepsW(wchar_t *name) ++{ ++ assert(name != NULL); ++ wchar_t sep = Py_GetSepW(name); ++ wchar_t altsep = Py_GetAltSepW(name); ++ wchar_t* seps; ++ if (name[0] != L'\0' && name[1] == L':') { ++ name[0] = towupper(name[0]); ++ } ++ seps = wcschr(name, altsep); ++ while(seps) { ++ *seps = sep; ++ seps = wcschr(seps, altsep); ++ } ++} + + _PyPathConfig _Py_path_config = _PyPathConfig_INIT; + +@@ -562,6 +696,7 @@ _Py_SetProgramFullPath(const wchar_t *program_full_path) + if (_Py_path_config.program_full_path == NULL) { + path_out_of_memory(__func__); + } ++ Py_NormalizeSepsW(_Py_path_config.program_name); + } + + +diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c +index eeaf20b461..916e6d7e8f 100644 +--- a/Python/pylifecycle.c ++++ b/Python/pylifecycle.c +@@ -15,6 +15,7 @@ + #include "pycore_sysmodule.h" // _PySys_ClearAuditHooks() + #include "pycore_traceback.h" // _Py_DumpTracebackThreads() + ++#include "iscygpty.h" + #include // setlocale() + + #if defined(__APPLE__) +@@ -2872,7 +2873,7 @@ Py_Exit(int sts) + int + Py_FdIsInteractive(FILE *fp, const char *filename) + { +- if (isatty((int)fileno(fp))) ++ if (isatty((int)fileno(fp)) || is_cygpty((int)fileno(fp))) + return 1; + if (!Py_InteractiveFlag) + return 0; +diff --git a/Python/sysmodule.c b/Python/sysmodule.c +index ac49f7867a..d91a606607 100644 +--- a/Python/sysmodule.c ++++ b/Python/sysmodule.c +@@ -38,7 +38,7 @@ Data members: + #include + #endif /* MS_WINDOWS */ + +-#ifdef MS_COREDLL ++#if defined(MS_WINDOWS) && defined(Py_ENABLE_SHARED) + extern void *PyWin_DLLhModule; + /* A string loaded from the DLL at startup: */ + extern const char *PyWin_DLLVersionString; +@@ -2801,7 +2801,7 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) + SET_SYS_FROM_STRING("byteorder", "little"); + #endif + +-#ifdef MS_COREDLL ++#if defined(MS_WINDOWS) && defined(Py_ENABLE_SHARED) + SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); + SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString); + #endif +diff --git a/Python/thread_nt.h b/Python/thread_nt.h +index 0ce5e94f89..6a6fe7e396 100644 +--- a/Python/thread_nt.h ++++ b/Python/thread_nt.h +@@ -349,8 +349,9 @@ PyThread_release_lock(PyThread_type_lock aLock) + { + dprintf(("%lu: PyThread_release_lock(%p) called\n", PyThread_get_thread_ident(),aLock)); + +- if (!(aLock && LeaveNonRecursiveMutex((PNRMUTEX) aLock))) ++ if (!(aLock && LeaveNonRecursiveMutex((PNRMUTEX) aLock))) { + dprintf(("%lu: Could not PyThread_release_lock(%p) error: %ld\n", PyThread_get_thread_ident(), aLock, GetLastError())); ++ } + } + + /* minimum/maximum thread stack sizes supported */ +diff --git a/Python/traceback.c b/Python/traceback.c +index 7d6f7f435a..f49a60654b 100644 +--- a/Python/traceback.c ++++ b/Python/traceback.c +@@ -315,7 +315,7 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject * + filepath = PyBytes_AS_STRING(filebytes); + + /* Search tail of filename in sys.path before giving up */ +- tail = strrchr(filepath, SEP); ++ tail = strrchr(filepath, Py_GetSepA(filepath)); + if (tail == NULL) + tail = filepath; + else +diff --git a/configure.ac b/configure.ac +index 5aa91cbad3..0b120d1b0b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -387,6 +387,7 @@ if test -z "$MACHDEP" + then + # avoid using uname for cross builds + if test "$cross_compiling" = yes; then ++ ac_sys_release= + # ac_sys_system and ac_sys_release are used for setting + # a lot of different things including 'define_xopen_source' + # in the case statement below. +@@ -400,6 +401,30 @@ then + *-*-cygwin*) + ac_sys_system=Cygwin + ;; ++ *-*-mingw*) ++ ac_sys_system=MINGW ++ ;; ++ *-*-darwin*) ++ ac_sys_system=Darwin ++ ac_sys_release=$(echo $host | sed -n 's/.*-[^0-9]\+\([0-9]\+\)/\1/p') ++ if test -z "$ac_sys_release"; then ++ # A reasonable default. ++ ac_sys_release=11 ++ fi ++ # Use the last released version number for old versions. ++ if test "$ac_sys_release" = "9" ; then ++ ac_sys_release=9.8 ++ elif test "$ac_sys_release" = "10" ; then ++ ac_sys_release=10.8 ++ elif test "$ac_sys_release" = "11" ; then ++ ac_sys_release=11.4.0 ++ elif test "$ac_sys_release" = "12" ; then ++ ac_sys_release=12.0.0 ++ else ++ # ..and .0.0 for unknown versions. ++ ac_sys_release=${ac_sys_release}.0.0 ++ fi ++ ;; + *-*-vxworks*) + ac_sys_system=VxWorks + ;; +@@ -408,7 +433,6 @@ then + MACHDEP="unknown" + AC_MSG_ERROR([cross build not supported for $host]) + esac +- ac_sys_release= + else + ac_sys_system=`uname -s` + if test "$ac_sys_system" = "AIX" \ +@@ -429,6 +453,7 @@ then + linux*) MACHDEP="linux";; + cygwin*) MACHDEP="cygwin";; + darwin*) MACHDEP="darwin";; ++ mingw*) MACHDEP="win32";; + '') MACHDEP="unknown";; + esac + fi +@@ -452,12 +477,26 @@ if test "$cross_compiling" = yes; then + *-*-vxworks*) + _host_cpu=$host_cpu + ;; ++ *-*-mingw*) ++ _host_cpu= ++ ;; ++ *-*-darwin*) ++ _host_cpu= ++ ;; + *) + # for now, limit cross builds to known configurations + MACHDEP="unknown" + AC_MSG_ERROR([cross build not supported for $host]) + esac + _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" ++ ++ case "$host_os" in ++ mingw*) ++ # As sys.platform() return 'win32' to build python and extantions ++ # we will use 'mingw' (in setup.py and etc.) ++ _PYTHON_HOST_PLATFORM=mingw ++ ;; ++ esac + fi + + # Some systems cannot stand _XOPEN_SOURCE being defined at all; they +@@ -569,6 +608,73 @@ then + AC_DEFINE(_INCLUDE__STDC_A1_SOURCE, 1, Define to include mbstate_t for mbrtowc) + fi + ++# On 'semi-native' build systems (MSYS*/Cygwin targeting MinGW-w64) ++# _sysconfigdata.py will contain paths that are correct only in the ++# build environment. This means external modules will fail to build ++# without setting up the same env and also that the build of Python ++# itself will fail as the paths are not correct for the host tools. ++# ++# Also, getpath.c uses GetModuleFileNameW (replacing \ with /) and ++# compares that with the define VPATH (passed in via command-line) ++# to determine whether it's the build- or the installed-Python. ++# ++# To work around these issues a set of _b2h variables are created: ++# VPATH_b2h, prefix_b2h, srcdir_b2h, abs_srcdir_b2h ++# and abs_builddir_b2h ++# .. where b2h stands for build to host. sysconfig.py replaces path ++# prefixes matching the non-b2h versions with the b2h equivalents. ++# ++# (note this assumes the host compilers are native and *not* cross ++# - in the 'semi-native' scenario only that is.) ++ ++AC_DEFUN([ABS_PATH_HOST], ++[$1=$(cd $$2 && pwd) ++ case $build_os in ++ mingw*) ++ case $host_os in ++ mingw*) $1=$(cd $$2 && pwd -W) ;; ++ *) ;; ++ esac ++ ;; ++ cygwin*) ++ case $host_os in ++ mingw*) $1=$(cygpath -w -m $$2) ;; ++ *) ;; ++ esac ++ ;; ++ esac ++AC_SUBST([$1]) ++]) ++ ++AC_MSG_CHECKING(absolute host location of VPATH) ++ABS_PATH_HOST([VPATH_b2h],[srcdir]) ++AC_MSG_RESULT([$VPATH_b2h]) ++ ++AC_MSG_CHECKING(absolute host location of prefix) ++ABS_PATH_HOST([prefix_b2h],[prefix]) ++AC_MSG_RESULT([$prefix_b2h]) ++ ++AC_MSG_CHECKING(absolute host location of srcdir) ++ABS_PATH_HOST([srcdir_b2h],[srcdir]) ++AC_MSG_RESULT([$srcdir_b2h]) ++ ++AC_MSG_CHECKING(absolute host location of abs_srcdir) ++ABS_PATH_HOST([abs_srcdir_b2h],[srcdir]) ++AC_MSG_RESULT([$abs_srcdir_b2h]) ++ ++my_builddir=. ++AC_MSG_CHECKING(Absolute host location of abs_builddir) ++ABS_PATH_HOST([abs_builddir_b2h],[my_builddir]) ++AC_MSG_RESULT([$abs_builddir_b2h]) ++ ++AC_MSG_CHECKING([for init system calls]) ++AC_SUBST(INITSYS) ++case $host in ++ *-*-mingw*) INITSYS=nt;; ++ *) INITSYS=posix;; ++esac ++AC_MSG_RESULT([$INITSYS]) ++ + # Record the configure-time value of MACOSX_DEPLOYMENT_TARGET, + # it may influence the way we can build extensions, so distutils + # needs to check it +@@ -895,6 +1001,28 @@ if test x$MULTIARCH != x; then + fi + AC_SUBST(MULTIARCH_CPPFLAGS) + ++# initialize default configuration ++py_config= ++case $host in ++ *-*-mingw*) py_config=mingw ;; ++esac ++if test -n "$py_config" ; then ++ AC_MSG_NOTICE([loading configure defaults from .../Misc/config_$py_config"]) ++ . "$srcdir/Misc/config_$py_config" ++fi ++ ++# initialize defaults for cross-builds ++if test "$cross_compiling" = yes; then ++ py_config=$host_os ++ case $py_config in ++ mingw32*) py_config=mingw32 ;; ++ esac ++ if test -f "$srcdir/Misc/cross_$py_config" ; then ++ AC_MSG_NOTICE([loading cross defaults from .../Misc/cross_$py_config"]) ++ . "$srcdir/Misc/cross_$py_config" ++ fi ++fi ++ + AC_MSG_CHECKING([for -Wl,--no-as-needed]) + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--no-as-needed" +@@ -1182,6 +1310,13 @@ if test $enable_shared = "yes"; then + ;; + + esac ++ case $host in ++ *-*-mingw*) ++ LDLIBRARY='libpython$(LDVERSION).dll.a' ++ DLLLIBRARY='libpython$(LDVERSION).dll' ++ BLDLIBRARY='-L. -lpython$(LDVERSION)' ++ ;; ++ esac + else # shared is disabled + PY_ENABLE_SHARED=0 + case $ac_sys_system in +@@ -1190,6 +1325,10 @@ else # shared is disabled + LDLIBRARY='libpython$(LDVERSION).dll.a' + ;; + esac ++ case $host in ++ *-*-mingw*) ++ LDLIBRARY='libpython$(LDVERSION).a';; ++ esac + fi + + if test "$cross_compiling" = yes; then +@@ -1198,6 +1337,9 @@ fi + + AC_MSG_RESULT($LDLIBRARY) + ++AC_SUBST(WINDRES) ++AC_CHECK_TOOL(WINDRES, windres) ++ + AC_SUBST(AR) + AC_CHECK_TOOLS(AR, ar aal, ar) + +@@ -1603,6 +1745,26 @@ AC_SUBST(BASECFLAGS) + AC_SUBST(CFLAGS_NODIST) + AC_SUBST(LDFLAGS_NODIST) + ++if test "x$cross_compiling" = xyes; then ++ function cross_arch ++ { ++ case $host in ++ x86_64*darwin*) ++ echo i386 ++ ;; ++ x86_64*) ++ echo x86_64 ++ ;; ++ *) ++ echo i386 ++ ;; ++ esac ++ } ++ ARCH_PROG=cross_arch ++else ++ ARCH_PROG=/usr/bin/arch ++fi ++ + # The -arch flags for universal builds on macOS + UNIVERSAL_ARCH_FLAGS= + AC_SUBST(UNIVERSAL_ARCH_FLAGS) +@@ -1981,7 +2143,7 @@ yes) + ;; + esac + else +- if test `/usr/bin/arch` = "i386" ++ if test "$($ARCH_PROG)" = "i386" + then + # 10.4 was the first release to support Intel archs + cur_target="10.4" +@@ -2044,6 +2206,53 @@ then + BASECFLAGS="$BASECFLAGS $ac_arch_flags" + fi + ++dnl NOTE: ++dnl - GCC 4.4+ for mingw* require and use posix threads(pthreads-w32) ++dnl - Host may contain installed pthreads-w32. ++dnl - On windows platform only NT-thread model is supported. ++dnl To avoid miss detection scipt first will check for NT-thread model ++dnl and if is not found will try to detect build options for pthread ++dnl model. Autodetection could be overiden if variable with_nt_threads ++dnl is set in "Site Configuration" (see autoconf manual). ++dnl If NT-thread model is enabled script skips some checks that ++dnl impact build process. When a new functionality is added, developers ++dnl are responsible to update configure script to avoid thread models ++dnl to be mixed. ++ ++AC_MSG_CHECKING([for --with-nt-threads]) ++AC_ARG_WITH(nt-threads, ++ AS_HELP_STRING([--with-nt-threads], [build with windows threads (default is system-dependent)]), ++[ ++ case $withval in ++ no) with_nt_threads=no;; ++ yes) with_nt_threads=yes;; ++ *) with_nt_threads=yes;; ++ esac ++], [ ++ case $host in ++ *-*-mingw*) with_nt_threads=yes;; ++ *) with_nt_threads=no;; ++ esac ++]) ++AC_MSG_RESULT([$with_nt_threads]) ++ ++if test $with_nt_threads = yes ; then ++AC_MSG_CHECKING([whether linking with nt-threads work]) ++AC_LINK_IFELSE([ ++ AC_LANG_PROGRAM([[#include ]],[[_beginthread(0, 0, 0);]]) ++ ], ++ [AC_MSG_RESULT([yes])], ++ [AC_MSG_ERROR([failed to link with nt-threads])]) ++fi ++ ++if test $with_nt_threads = yes ; then ++ dnl temporary default flag to avoid additional pthread checks ++ dnl and initilize other ac..thread flags to no ++ ac_cv_pthread_is_default=no ++ ac_cv_kthread=no ++ ac_cv_pthread=no ++ dnl ac_cv_kpthread is set to no if default is yes (see below) ++else + # On some compilers, pthreads are available without further options + # (e.g. MacOS X). On some of these systems, the compiler will not + # complain if unaccepted options are passed (e.g. gcc on Mac OS X). +@@ -2162,6 +2371,8 @@ CC="$ac_save_cc"]) + AC_MSG_RESULT($ac_cv_pthread) + fi + ++fi ++ + # If we have set a CC compiler flag for thread support then + # check if it works for CXX, too. + ac_cv_cxx_thread=no +@@ -2182,6 +2393,10 @@ elif test "$ac_cv_pthread" = "yes" + then + CXX="$CXX -pthread" + ac_cv_cxx_thread=yes ++elif test $with_nt_threads = yes ++then ++ dnl set to always to skip extra pthread check below ++ ac_cv_cxx_thread=always + fi + + if test $ac_cv_cxx_thread = yes +@@ -2212,10 +2427,10 @@ dnl AC_MSG_RESULT($cpp_type) + + # checks for header files + AC_HEADER_STDC +-AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \ ++AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h errno.h \ + fcntl.h grp.h \ +-ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \ +-sched.h shadow.h signal.h stropts.h termios.h \ ++ieeefp.h io.h langinfo.h libintl.h process.h \ ++shadow.h signal.h stropts.h termios.h \ + utime.h \ + poll.h sys/devpoll.h sys/epoll.h sys/poll.h \ + sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \ +@@ -2227,9 +2442,23 @@ libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ + linux/tipc.h linux/random.h spawn.h util.h alloca.h endian.h \ + sys/endian.h sys/sysmacros.h linux/memfd.h linux/wait.h sys/memfd.h \ + sys/mman.h sys/eventfd.h) ++ ++case $host in ++ *-*-mingw*) ;; ++ *) AC_CHECK_HEADERS([dlfcn.h]);; ++esac ++ + AC_HEADER_DIRENT + AC_HEADER_MAJOR + ++# If using nt threads, don't look for pthread.h or thread.h ++if test "x$with_nt_threads" = xno ; then ++AC_HEADER_STDC ++AC_CHECK_HEADERS(pthread.h sched.h thread.h) ++AC_HEADER_DIRENT ++AC_HEADER_MAJOR ++fi ++ + # bluetooth/bluetooth.h has been known to not compile with -std=c99. + # http://permalink.gmane.org/gmane.linux.bluez.kernel/22294 + SAVE_CFLAGS=$CFLAGS +@@ -2396,8 +2625,20 @@ AC_CHECK_SIZEOF(off_t, [], [ + ]) + + AC_MSG_CHECKING(whether to enable large file support) ++have_largefile_support=no + if test "$ac_cv_sizeof_off_t" -gt "$ac_cv_sizeof_long" -a \ + "$ac_cv_sizeof_long_long" -ge "$ac_cv_sizeof_off_t"; then ++ have_largefile_support=yes ++else ++ case $host in ++ *-*-mingw*) ++ dnl Activate on windows platforms (32&64-bit) where off_t(4) < fpos_t(8) ++ have_largefile_support=yes ++ ;; ++ esac ++fi ++ ++if test $have_largefile_support = yes ; then + AC_DEFINE(HAVE_LARGEFILE_SUPPORT, 1, + [Defined to enable large file support when an off_t is bigger than a long + and long long is at least as big as an off_t. You may need +@@ -2429,6 +2670,10 @@ fi + + AC_MSG_CHECKING(for pthread_t) + have_pthread_t=no ++if test $with_nt_threads = yes ; then ++ dnl skip check for pthread_t if NT-thread model is enabled ++ have_pthread_t=skip ++else + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[#include ]], [[pthread_t x; x = *(pthread_t*)0;]]) + ],[have_pthread_t=yes],[]) +@@ -2459,6 +2704,7 @@ if test "$ac_cv_sizeof_pthread_key_t" -eq "$ac_cv_sizeof_int" ; then + else + AC_MSG_RESULT(no) + fi ++fi + CC="$ac_save_cc" + + AC_SUBST(OTHER_LIBTOOL_OPT) +@@ -2479,7 +2725,7 @@ case $ac_sys_system/$ac_sys_release in + if test "${enable_universalsdk}"; then + : + else +- LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `/usr/bin/arch`" ++ LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only $($ARCH_PROG)" + fi + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; +@@ -2504,7 +2750,7 @@ case $ac_sys_system/$ac_sys_release in + ]])],[ac_osx_32bit=yes],[ac_osx_32bit=no],[ac_osx_32bit=yes]) + + if test "${ac_osx_32bit}" = "yes"; then +- case `/usr/bin/arch` in ++ case $($ARCH_PROG) in + i386) + MACOSX_DEFAULT_ARCH="i386" + ;; +@@ -2516,7 +2762,7 @@ case $ac_sys_system/$ac_sys_release in + ;; + esac + else +- case `/usr/bin/arch` in ++ case $($ARCH_PROG) in + i386) + MACOSX_DEFAULT_ARCH="x86_64" + ;; +@@ -2634,6 +2880,9 @@ if test -z "$SHLIB_SUFFIX"; then + CYGWIN*) SHLIB_SUFFIX=.dll;; + *) SHLIB_SUFFIX=.so;; + esac ++ case $host_os in ++ mingw*) SHLIB_SUFFIX=.pyd;; ++ esac + fi + AC_MSG_RESULT($SHLIB_SUFFIX) + +@@ -2758,6 +3007,12 @@ then + LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";; + *) LDSHARED="ld";; + esac ++ case $host in ++ *-*-mingw*) ++ LDSHARED='$(CC) -shared -Wl,--enable-auto-image-base' ++ LDCXXSHARED='$(CXX) -shared -Wl,--enable-auto-image-base' ++ ;; ++ esac + fi + AC_MSG_RESULT($LDSHARED) + LDCXXSHARED=${LDCXXSHARED-$LDSHARED} +@@ -2863,6 +3118,11 @@ then + VxWorks*) + LINKFORSHARED='-Wl,-export-dynamic';; + esac ++ case $host in ++ *-*-mingw*) ++ # for https://bugs.python.org/issue40458 on MINGW ++ LINKFORSHARED="-Wl,--stack,2000000";; ++ esac + fi + AC_MSG_RESULT($LINKFORSHARED) + +@@ -2901,7 +3161,12 @@ AC_MSG_RESULT($SHLIBS) + + # checks for libraries + AC_CHECK_LIB(sendfile, sendfile) +-AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV ++ ++case $host in ++ *-*-mingw*) ;; ++ *) AC_CHECK_LIB(dl, dlopen) ;; # Dynamic linking for SunOS/Solaris and SYSV ++esac ++ + AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX + + # checks for uuid.h location +@@ -2949,16 +3214,30 @@ void *x = uuid_enc_be + [AC_MSG_RESULT(no)] + ) + ++if test $with_nt_threads = yes ; then ++ dnl do not search for sem_init if NT-thread model is enabled ++ : ++else + # 'Real Time' functions on Solaris + # posix4 on Solaris 2.6 + # pthread (first!) on Linux + AC_SEARCH_LIBS(sem_init, pthread rt posix4) ++fi + + # check if we need libintl for locale functions ++case $host in ++ *-*-mingw*) ++ dnl Native windows build don't use libintl (see _localemodule.c). ++ dnl Also we don't like setup.py to add "intl" library to the list ++ dnl when build _locale module. ++ ;; ++ *) + AC_CHECK_LIB(intl, textdomain, + [AC_DEFINE(WITH_LIBINTL, 1, + [Define to 1 if libintl is needed for locale functions.]) + LIBS="-lintl $LIBS"]) ++ ;; ++esac + + # checks for system dependent C++ extensions support + case "$ac_sys_system" in +@@ -3127,7 +3406,7 @@ else + fi + + if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then +- LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`" ++ LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ .*$//'`" + else + LIBFFI_INCLUDEDIR="" + fi +@@ -3218,6 +3497,25 @@ else + fi]) + AC_MSG_RESULT($with_dbmliborder) + ++case $host in ++ *-*-mingw*) ++ CFLAGS_NODIST="$CFLAGS_NODIST -D_WIN32_WINNT=0x0601";; ++esac ++ ++# Determine if windows modules should be used. ++AC_SUBST(USE_WIN32_MODULE) ++USE_WIN32_MODULE='#' ++case $host in ++ *-*-mingw*) USE_WIN32_MODULE=;; ++esac ++ ++# Determine if pwdmodule should be used. ++AC_SUBST(USE_PWD_MODULE) ++USE_PWD_MODULE= ++case $host in ++ *-*-mingw*) USE_PWD_MODULE='#';; ++esac ++ + # Templates for things AC_DEFINEd more than once. + # For a single AC_DEFINE, no template is needed. + AH_TEMPLATE(_REENTRANT, +@@ -3252,6 +3550,11 @@ then + CXX="$CXX -pthread" + fi + posix_threads=yes ++elif test $with_nt_threads = yes ++then ++ posix_threads=no ++ AC_DEFINE(NT_THREADS, 1, ++ [Define to 1 if you want to use native NT threads]) + else + if test ! -z "$withval" -a -d "$withval" + then LDFLAGS="$LDFLAGS -L$withval" +@@ -3589,11 +3892,14 @@ AC_MSG_RESULT($with_pymalloc) + AC_MSG_CHECKING(for --with-c-locale-coercion) + AC_ARG_WITH(c-locale-coercion, + AS_HELP_STRING([--with-c-locale-coercion], +- [enable C locale coercion to a UTF-8 based locale (default is yes)])) ++ [enable C locale coercion to a UTF-8 based locale (default is yes on Unix, no on Windows)])) + + if test -z "$with_c_locale_coercion" + then +- with_c_locale_coercion="yes" ++ case $host in ++ *-*-mingw*) with_c_locale_coercion="no";; ++ *) with_c_locale_coercion="yes";; ++ esac + fi + if test "$with_c_locale_coercion" != "no" + then +@@ -3681,6 +3987,27 @@ then + fi + ;; + esac ++ case $host in ++ *-*-mingw*) ++ DYNLOADFILE="dynload_win.o" ++ extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o" ++ CFLAGS_NODIST="$CFLAGS_NODIST -DPY3_DLLNAME='L\"$DLLLIBRARY\"'" ++ case $host in ++ i686*) ++ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"${VERSION}-32\"'" ++ ;; ++ armv7*) ++ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"${VERSION}-arm32\"'" ++ ;; ++ aarch64*) ++ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"${VERSION}-arm64\"'" ++ ;; ++ *) ++ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"'" ++ ;; ++ esac ++ ;; ++ esac + fi + AC_MSG_RESULT($DYNLOADFILE) + if test "$DYNLOADFILE" != "dynload_stub.o" +@@ -3706,6 +4033,15 @@ else + fi + + # checks for library functions ++if test $with_nt_threads = yes ; then ++ dnl GCC(mingw) 4.4+ require and use posix threads(pthreads-w32) ++ dnl and host may contain installed pthreads-w32. ++ dnl Skip checks for some functions declared in pthreads-w32 if ++ dnl NT-thread model is enabled. ++ ac_cv_func_pthread_kill=skip ++ ac_cv_func_sem_open=skip ++ ac_cv_func_sched_setscheduler=skip ++fi + AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \ + clock confstr close_range copy_file_range ctermid dup3 execv explicit_bzero \ + explicit_memset faccessat fchmod fchmodat fchown fchownat \ +@@ -4001,10 +4337,14 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + + AC_MSG_CHECKING(for inet_pton) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#ifdef _WIN32 ++#include ++#else + #include + #include + #include + #include ++#endif + ]], [[void* p = inet_pton]])], + [AC_DEFINE(HAVE_INET_PTON, 1, Define if you have the 'inet_pton' function.) + AC_MSG_RESULT(yes)], +@@ -4071,6 +4411,9 @@ char *r = crypt_r("", "", &d); + []) + ) + ++case $host in ++ *-*-mingw*) ;; ++ *) + AC_CHECK_FUNCS(clock_gettime, [], [ + AC_CHECK_LIB(rt, clock_gettime, [ + LIBS="$LIBS -lrt" +@@ -4091,6 +4434,8 @@ AC_CHECK_FUNCS(clock_settime, [], [ + AC_DEFINE(HAVE_CLOCK_SETTIME, 1) + ]) + ]) ++ ;; ++esac + + AC_MSG_CHECKING(for major, minor, and makedev) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +@@ -4285,21 +4630,36 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + ],[]) + AC_MSG_RESULT($was_it_defined) + ++AC_CHECK_HEADERS([ws2tcpip.h]) + AC_MSG_CHECKING(for addrinfo) + AC_CACHE_VAL(ac_cv_struct_addrinfo, +-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct addrinfo a]])], ++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#ifdef HAVE_WS2TCPIP_H ++# include ++#else ++# include ++#endif]], ++ [[struct addrinfo a]])], + [ac_cv_struct_addrinfo=yes], + [ac_cv_struct_addrinfo=no])) + AC_MSG_RESULT($ac_cv_struct_addrinfo) + if test $ac_cv_struct_addrinfo = yes; then +- AC_DEFINE(HAVE_ADDRINFO, 1, [struct addrinfo (netdb.h)]) ++ AC_DEFINE(HAVE_ADDRINFO, 1, [struct addrinfo]) + fi + + AC_MSG_CHECKING(for sockaddr_storage) + AC_CACHE_VAL(ac_cv_struct_sockaddr_storage, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +-# include +-# include ]], [[struct sockaddr_storage s]])], ++#ifdef HAVE_WS2TCPIP_H ++#include ++#endif ++#ifdef HAVE_SYS_TYPES_H ++#include ++#endif ++#ifdef HAVE_SYS_SOCKET_H ++#include ++#endif]], ++ [[struct sockaddr_storage s]])], + [ac_cv_struct_sockaddr_storage=yes], + [ac_cv_struct_sockaddr_storage=no])) + AC_MSG_RESULT($ac_cv_struct_sockaddr_storage) +@@ -4638,6 +4998,10 @@ AC_CHECK_DECLS([isinf, isnan, isfinite], [], [], [[#include ]]) + # the kernel module that provides POSIX semaphores + # isn't loaded by default, so an attempt to call + # sem_open results in a 'Signal 12' error. ++if test $with_nt_threads = yes ; then ++ dnl skip posix semaphores test if NT-thread model is enabled ++ ac_cv_posix_semaphores_enabled=no ++fi + AC_MSG_CHECKING(whether POSIX semaphores are enabled) + AC_CACHE_VAL(ac_cv_posix_semaphores_enabled, + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +@@ -4671,6 +5035,14 @@ fi + + # Multiprocessing check for broken sem_getvalue + AC_MSG_CHECKING(for broken sem_getvalue) ++if test $with_nt_threads = yes ; then ++ dnl Skip test if NT-thread model is enabled. ++ dnl NOTE the test case below fail for pthreads-w32 as: ++ dnl - SEM_FAILED is not defined; ++ dnl - sem_open is a stub; ++ dnl - sem_getvalue work(!). ++ ac_cv_broken_sem_getvalue=skip ++fi + AC_CACHE_VAL(ac_cv_broken_sem_getvalue, + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include +@@ -4705,7 +5077,10 @@ then + [define to 1 if your sem_getvalue is broken.]) + fi + +-AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_MEMBER], [], [], [[#include ]]) ++case $host in ++ *-*-mingw*) ;; ++ *) AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_MEMBER], [], [], [[#include ]]);; ++esac + + # determine what size digit to use for Python's longs + AC_MSG_CHECKING([digit size for Python's longs]) +@@ -4806,6 +5181,71 @@ esac + # check for endianness + AC_C_BIGENDIAN + ++AC_SUBST(PYD_PLATFORM_TAG) ++# Special case of PYD_PLATFORM_TAG with python build with mingw. ++# Python can with compiled with clang or gcc and linked ++# to msvcrt or ucrt. To avoid conflicts between them ++# we are selecting the extension as based on the compiler ++# and the runtime they link to ++# gcc + x86_64 + msvcrt = cp{version number}-x86_64 ++# gcc + i686 + msvcrt = cp{version number}-i686 ++# gcc + x86_64 + ucrt = cp{version number}-x86_64-ucrt ++# clang + x86_64 + ucrt = cp{version number}-x86_64-clang ++# clang + i686 + ucrt = cp{version number}-i686-clang ++ ++PYD_PLATFORM_TAG="" ++case $host in ++ *-*-mingw*) ++ # check if we are linking to ucrt ++ AC_MSG_CHECKING(whether linking to ucrt) ++ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ ++ #include ++ #ifndef _UCRT ++ #error no ucrt ++ #endif ++ int main(){ return 0; } ++ ]])],[linking_to_ucrt=yes],[linking_to_ucrt=no]) ++ AC_MSG_RESULT($linking_to_ucrt) ++ ;; ++esac ++case $host_os in ++ mingw*) ++ AC_MSG_CHECKING(PYD_PLATFORM_TAG) ++ case $host in ++ i686-*-mingw*) ++ if test -n "${cc_is_clang}"; then ++ # it is CLANG32 ++ PYD_PLATFORM_TAG="mingw_i686_clang" ++ else ++ if test $linking_to_ucrt = no; then ++ PYD_PLATFORM_TAG="mingw_i686" ++ else ++ PYD_PLATFORM_TAG="mingw_i686_ucrt" ++ fi ++ fi ++ ;; ++ x86_64-*-mingw*) ++ if test -n "${cc_is_clang}"; then ++ # it is CLANG64 ++ PYD_PLATFORM_TAG="mingw_x86_64_clang" ++ else ++ if test $linking_to_ucrt = no; then ++ PYD_PLATFORM_TAG="mingw_x86_64" ++ else ++ PYD_PLATFORM_TAG="mingw_x86_64_ucrt" ++ fi ++ fi ++ ;; ++ aarch64-*-mingw*) ++ PYD_PLATFORM_TAG+="mingw_aarch64" ++ ;; ++ armv7-*-mingw*) ++ PYD_PLATFORM_TAG+="mingw_armv7" ++ ;; ++ esac ++ AC_MSG_RESULT($PYD_PLATFORM_TAG) ++esac ++ + # ABI version string for Python extension modules. This appears between the + # periods in shared library file names, e.g. foo..so. It is calculated + # from the following attributes which affect the ABI of this Python build (in +@@ -4838,7 +5278,12 @@ if test "$Py_DEBUG" = 'true' -a "$with_trace_refs" != "yes"; then + fi + + AC_SUBST(EXT_SUFFIX) +-EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX} ++VERSION_NO_DOTS=$(echo $LDVERSION | tr -d .) ++if test -n "${PYD_PLATFORM_TAG}"; then ++ EXT_SUFFIX=".cp${VERSION_NO_DOTS}-${PYD_PLATFORM_TAG}${SHLIB_SUFFIX}" ++else ++ EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX} ++fi + + AC_MSG_CHECKING(LDVERSION) + LDVERSION='$(VERSION)$(ABIFLAGS)' +@@ -4846,7 +5291,7 @@ AC_MSG_RESULT($LDVERSION) + + # On Android and Cygwin the shared libraries must be linked with libpython. + AC_SUBST(LIBPYTHON) +-if test -n "$ANDROID_API_LEVEL" -o "$MACHDEP" = "cygwin"; then ++if test -n "$ANDROID_API_LEVEL" -o "$MACHDEP" = "cygwin" -o "$MACHDEP" = "win32"; then + LIBPYTHON="-lpython${VERSION}${ABIFLAGS}" + else + LIBPYTHON='' +@@ -5229,11 +5674,16 @@ then + [Define if you have struct stat.st_mtimensec]) + fi + ++if test -n "$PKG_CONFIG"; then ++ NCURSESW_INCLUDEDIR="`"$PKG_CONFIG" ncursesw --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ .*$//'`" ++else ++ NCURSESW_INCLUDEDIR="" ++fi ++AC_SUBST(NCURSESW_INCLUDEDIR) ++ + # first curses header check + ac_save_cppflags="$CPPFLAGS" +-if test "$cross_compiling" = no; then +- CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw" +-fi ++CPPFLAGS="$CPPFLAGS -I$NCURSESW_INCLUDEDIR" + + AC_CHECK_HEADERS(curses.h ncurses.h) + +@@ -5476,7 +5926,10 @@ fi + + AC_CHECK_TYPE(socklen_t,, + AC_DEFINE(socklen_t,int, +- [Define to `int' if does not define.]),[ ++ [Define to `int' if or does not define.]),[ ++#ifdef HAVE_WS2TCPIP_H ++#include ++#endif + #ifdef HAVE_SYS_TYPES_H + #include + #endif +@@ -5569,8 +6022,32 @@ do + THREADHEADERS="$THREADHEADERS \$(srcdir)/$h" + done + ++case $host in ++ *-*-mingw*) ++ dnl Required for windows builds as Objects/exceptions.c require ++ dnl "errmap.h" from $srcdir/PC. ++ dnl Note we cannot use BASECPPFLAGS as autogenerated pyconfig.h ++ dnl has to be before customized located in ../PC. ++ dnl (-I. at end is workaround for setup.py logic) ++ CPPFLAGS="-I\$(srcdir)/PC $CPPFLAGS -I." ++ ;; ++esac ++ ++dnl Python interpreter main program for frozen scripts ++AC_SUBST(PYTHON_OBJS_FROZENMAIN) ++PYTHON_OBJS_FROZENMAIN="Python/frozenmain.o" ++case $host in ++ *-*-mingw*) ++ dnl 'PC/frozen_dllmain.c' - not yet ++ PYTHON_OBJS_FROZENMAIN= ++ ;; ++esac ++ + AC_SUBST(SRCDIRS) + SRCDIRS="Parser Objects Python Modules Modules/_io Programs" ++case $host in ++ *-*-mingw*) SRCDIRS="$SRCDIRS PC";; ++esac + AC_MSG_CHECKING(for build directories) + for dir in $SRCDIRS; do + if test ! -d $dir; then +@@ -5579,6 +6056,38 @@ for dir in $SRCDIRS; do + done + AC_MSG_RESULT(done) + ++# For mingw build need additional library for linking ++case $host in ++ *-*-mingw*) ++ LIBS="$LIBS -lversion -lshlwapi" ++ AC_PROG_AWK ++ if test "$AWK" = "gawk"; then ++ awk_extra_flag="--non-decimal-data" ++ fi ++ AC_MSG_CHECKING([FIELD3]) ++ FIELD3=$($AWK $awk_extra_flag '\ ++ /^#define PY_RELEASE_LEVEL_/ {levels[$2]=$3} \ ++ /^#define PY_MICRO_VERSION[[:space:]]+/ {micro=$3} \ ++ /^#define PY_RELEASE_LEVEL[[:space:]]+/ {level=levels[$3]} \ ++ /^#define PY_RELEASE_SERIAL[[:space:]]+/ {serial=$3} \ ++ END {print micro * 1000 + level * 10 + serial}' \ ++ $srcdir/Include/patchlevel.h ++ ) ++ ++ AC_MSG_RESULT([${FIELD3}]) ++ RCFLAGS="$RCFLAGS -DFIELD3=$FIELD3 -O COFF" ++ ++ case $host in ++ i686*) RCFLAGS="$RCFLAGS --target=pe-i386" ;; ++ x86_64*) RCFLAGS="$RCFLAGS --target=pe-x86-64" ;; ++ *) ;; ++ esac ++ ;; ++ *) ++ ;; ++esac ++AC_SUBST(RCFLAGS) ++ + # Availability of -O2: + AC_MSG_CHECKING(for -O2) + saved_cflags="$CFLAGS" +@@ -6007,7 +6516,7 @@ AC_SUBST(TEST_MODULES) + + + # generate output files +-AC_CONFIG_FILES(Makefile.pre Misc/python.pc Misc/python-embed.pc Misc/python-config.sh) ++AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc Misc/python-embed.pc Misc/python-config.sh) + AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix]) + AC_OUTPUT + +@@ -6019,7 +6528,7 @@ fi + + echo "creating Makefile" >&AS_MESSAGE_FD + $SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \ +- -s Modules \ ++ -s Modules Modules/Setup.config \ + Modules/Setup.local $srcdir/Modules/Setup + mv config.c Modules + +diff --git a/mingw_ignorefile.txt b/mingw_ignorefile.txt +new file mode 100644 +index 0000000000..dc3802e6c5 +--- /dev/null ++++ b/mingw_ignorefile.txt +@@ -0,0 +1,34 @@ ++ctypes.test.test_loading.LoaderTest.test_load_dll_with_flags ++distutils.tests.test_bdist_dumb.BuildDumbTestCase.test_simple_built ++distutils.tests.test_cygwinccompiler.CygwinCCompilerTestCase.test_get_versions ++distutils.tests.test_util.UtilTestCase.test_change_root ++test.datetimetester.TestLocalTimeDisambiguation_Fast.* ++test.datetimetester.TestLocalTimeDisambiguation_Pure.* ++test.test_cmath.CMathTests.test_specific_values ++test.test_cmd_line_script.CmdLineTest.test_consistent_sys_path_for_direct_execution ++test.test_compileall.CommandLineTestsNoSourceEpoch.* ++test.test_compileall.CommandLineTestsWithSourceEpoch.* ++test.test_compileall.CompileallTestsWithoutSourceEpoch.* ++test.test_compileall.CompileallTestsWithSourceEpoch.* ++test.test_import.ImportTests.test_dll_dependency_import ++test.test_math.MathTests.* ++test.test_ntpath.NtCommonTest.test_import ++test.test_os.StatAttributeTests.test_stat_block_device ++test.test_os.TestScandir.test_attributes ++test.test_os.UtimeTests.test_large_time ++test.test_platform.PlatformTest.test_architecture_via_symlink ++test.test_regrtest.ProgramsTestCase.test_pcbuild_rt ++test.test_regrtest.ProgramsTestCase.test_tools_buildbot_test ++test.test_site._pthFileTests.* ++test.test_site.HelperFunctionsTests.* ++test.test_site.StartupImportTests.* ++test.test_ssl.* ++test.test_strptime.CalculationTests.* ++test.test_strptime.StrptimeTests.test_weekday ++test.test_strptime.TimeRETests.test_compile ++test.test_tools.test_i18n.Test_pygettext.test_POT_Creation_Date ++test.test_venv.BasicTest.* ++test.test_venv.EnsurePipTest.* ++# flaky ++test.test__xxsubinterpreters.* ++test.test_asyncio.test_subprocess.SubprocessProactorTests.test_stdin_broken_pipe +\ No newline at end of file +diff --git a/mingw_smoketests.py b/mingw_smoketests.py +new file mode 100644 +index 0000000000..8e4bd50a4a +--- /dev/null ++++ b/mingw_smoketests.py +@@ -0,0 +1,327 @@ ++#!/usr/bin/env python3 ++# Copyright 2017 Christoph Reiter ++# ++# Permission is hereby granted, free of charge, to any person obtaining ++# a copy of this software and associated documentation files (the ++# "Software"), to deal in the Software without restriction, including ++# without limitation the rights to use, copy, modify, merge, publish, ++# distribute, sublicense, and/or sell copies of the Software, and to ++# permit persons to whom the Software is furnished to do so, subject to ++# the following conditions: ++# ++# The above copyright notice and this permission notice shall be included ++# in all copies or substantial portions of the Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++"""The goal of this test suite is collect tests for update regressions ++and to test msys2 related modifications like for path handling. ++Feel free to extend. ++""" ++ ++import os ++import unittest ++import sysconfig ++ ++if "MSYSTEM" in os.environ: ++ SEP = "/" ++else: ++ SEP = "\\" ++ ++_UCRT = sysconfig.get_platform() not in ('mingw_x86_64', 'mingw_i686') ++ ++ ++class Tests(unittest.TestCase): ++ ++ def test_zoneinfo(self): ++ # https://github.com/msys2-contrib/cpython-mingw/issues/32 ++ import zoneinfo ++ self.assertTrue(any(os.path.exists(p) for p in zoneinfo.TZPATH)) ++ zoneinfo.ZoneInfo("America/Sao_Paulo") ++ ++ def test_userdir_path_sep(self): ++ # Make sure os.path and pathlib use the same path separators ++ from unittest import mock ++ from os.path import expanduser ++ from pathlib import Path ++ ++ profiles = ["C:\\foo", "C:/foo"] ++ for profile in profiles: ++ with mock.patch.dict(os.environ, {"USERPROFILE": profile}): ++ self.assertEqual(expanduser("~"), os.path.normpath(expanduser("~"))) ++ self.assertEqual(str(Path("~").expanduser()), expanduser("~")) ++ self.assertEqual(str(Path.home()), expanduser("~")) ++ ++ def test_sysconfig_schemes(self): ++ # https://github.com/msys2/MINGW-packages/issues/9319 ++ import sysconfig ++ from distutils.dist import Distribution ++ from distutils.command.install import install ++ ++ names = ['scripts', 'purelib', 'platlib', 'data', 'include'] ++ for scheme in ["nt", "nt_user"]: ++ for name in names: ++ c = install(Distribution({"name": "foobar"})) ++ c.user = (scheme == "nt_user") ++ c.finalize_options() ++ if name == "include": ++ dist_path = os.path.dirname(getattr(c, "install_" + "headers")) ++ else: ++ dist_path = getattr(c, "install_" + name) ++ sys_path = sysconfig.get_path(name, scheme) ++ self.assertEqual(dist_path, sys_path, (scheme, name)) ++ ++ def test_ctypes_find_library(self): ++ from ctypes.util import find_library ++ from ctypes import cdll ++ self.assertTrue(cdll.msvcrt) ++ if _UCRT: ++ self.assertIsNone(find_library('c')) ++ else: ++ self.assertEqual(find_library('c'), 'msvcrt.dll') ++ ++ def test_ctypes_dlopen(self): ++ import ctypes ++ import sys ++ self.assertEqual(ctypes.RTLD_GLOBAL, 0) ++ self.assertEqual(ctypes.RTLD_GLOBAL, ctypes.RTLD_LOCAL) ++ self.assertFalse(hasattr(sys, 'setdlopenflags')) ++ self.assertFalse(hasattr(sys, 'getdlopenflags')) ++ self.assertFalse([n for n in dir(os) if n.startswith("RTLD_")]) ++ ++ def test_time_no_unix_stuff(self): ++ import time ++ self.assertFalse([n for n in dir(time) if n.startswith("clock_")]) ++ self.assertFalse([n for n in dir(time) if n.startswith("CLOCK_")]) ++ self.assertFalse([n for n in dir(time) if n.startswith("pthread_")]) ++ self.assertFalse(hasattr(time, 'tzset')) ++ ++ def test_strftime(self): ++ import time ++ with self.assertRaises(ValueError): ++ time.strftime('%Y', (12345,) + (0,) * 8) ++ ++ def test_sep(self): ++ self.assertEqual(os.sep, SEP) ++ ++ def test_module_file_path(self): ++ import asyncio ++ import zlib ++ self.assertEqual(zlib.__file__, os.path.normpath(zlib.__file__)) ++ self.assertEqual(asyncio.__file__, os.path.normpath(asyncio.__file__)) ++ ++ def test_importlib_frozen_path_sep(self): ++ import importlib._bootstrap_external ++ self.assertEqual(importlib._bootstrap_external.path_sep, SEP) ++ ++ def test_os_commonpath(self): ++ self.assertEqual( ++ os.path.commonpath( ++ [os.path.join("C:", os.sep, "foo", "bar"), ++ os.path.join("C:", os.sep, "foo")]), ++ os.path.join("C:", os.sep, "foo")) ++ ++ def test_pathlib(self): ++ import pathlib ++ ++ p = pathlib.Path("foo") / pathlib.Path("foo") ++ self.assertEqual(str(p), os.path.normpath(p)) ++ ++ def test_modules_import(self): ++ import sqlite3 ++ import ssl ++ import ctypes ++ import curses ++ ++ def test_c_modules_import(self): ++ import _decimal ++ ++ def test_socket_inet_ntop(self): ++ import socket ++ self.assertTrue(hasattr(socket, "inet_ntop")) ++ ++ def test_socket_inet_pton(self): ++ import socket ++ self.assertTrue(hasattr(socket, "inet_pton")) ++ ++ def test_multiprocessing_queue(self): ++ from multiprocessing import Queue ++ Queue(0) ++ ++ #def test_socket_timout_normal_error(self): ++ # import urllib.request ++ # from urllib.error import URLError ++ ++ # try: ++ # urllib.request.urlopen( ++ # 'http://localhost', timeout=0.0001).close() ++ # except URLError: ++ # pass ++ ++ def test_threads(self): ++ from concurrent.futures import ThreadPoolExecutor ++ ++ with ThreadPoolExecutor(1) as pool: ++ for res in pool.map(lambda *x: None, range(10000)): ++ pass ++ ++ def test_sysconfig(self): ++ import sysconfig ++ # This should be able to execute without exceptions ++ sysconfig.get_config_vars() ++ ++ def test_sqlite_enable_load_extension(self): ++ # Make sure --enable-loadable-sqlite-extensions is used ++ import sqlite3 ++ self.assertTrue(sqlite3.Connection.enable_load_extension) ++ ++ def test_venv_creation(self): ++ import tempfile ++ import venv ++ import subprocess ++ import shutil ++ with tempfile.TemporaryDirectory() as tmp: ++ builder = venv.EnvBuilder() ++ builder.create(tmp) ++ assert os.path.exists(os.path.join(tmp, "bin", "activate")) ++ assert os.path.exists(os.path.join(tmp, "bin", "python.exe")) ++ assert os.path.exists(os.path.join(tmp, "bin", "python3.exe")) ++ subprocess.check_call([shutil.which("bash.exe"), os.path.join(tmp, "bin", "activate")]) ++ ++ def test_has_mktime(self): ++ from time import mktime, gmtime ++ mktime(gmtime()) ++ ++ def test_platform_things(self): ++ import sys ++ import sysconfig ++ import platform ++ import importlib.machinery ++ self.assertEqual(sys.implementation.name, "cpython") ++ self.assertEqual(sys.platform, "win32") ++ self.assertTrue(sysconfig.get_platform().startswith("mingw")) ++ self.assertTrue(sysconfig.get_config_var('SOABI').startswith("cpython-")) ++ ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') ++ self.assertTrue(ext_suffix.endswith(".pyd")) ++ self.assertTrue("mingw" in ext_suffix) ++ self.assertEqual(sysconfig.get_config_var('SHLIB_SUFFIX'), ".pyd") ++ ext_suffixes = importlib.machinery.EXTENSION_SUFFIXES ++ self.assertTrue(ext_suffix in ext_suffixes) ++ self.assertTrue(".pyd" in ext_suffixes) ++ if sysconfig.get_platform().startswith('mingw_i686'): ++ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])) + '-32') ++ elif sysconfig.get_platform().startswith('mingw_aarch64'): ++ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])) + '-arm64') ++ elif sysconfig.get_platform().startswith('mingw_armv7'): ++ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])) + '-arm32') ++ else: ++ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2]))) ++ self.assertEqual(platform.python_implementation(), "CPython") ++ self.assertEqual(platform.system(), "Windows") ++ self.assertTrue(isinstance(sys.api_version, int) and sys.api_version > 0) ++ ++ def test_c_ext_build(self): ++ import tempfile ++ import sys ++ import subprocess ++ import textwrap ++ from pathlib import Path ++ ++ if sysconfig.is_python_build(): ++ # we are running this test without installing and is known ++ # to cause errors with building c-extensions ++ # so we are skipping this test ++ raise unittest.SkipTest("Skipping test as building c-extension isn't supported \ ++ without installing python") ++ ++ with tempfile.TemporaryDirectory() as tmppro: ++ subprocess.check_call([sys.executable, "-m", "ensurepip", "--user"]) ++ with Path(tmppro, "setup.py").open("w") as f: ++ f.write( ++ textwrap.dedent( ++ """\ ++ from setuptools import setup, Extension ++ ++ setup( ++ name='cwrapper', ++ version='1.0', ++ ext_modules=[ ++ Extension( ++ 'cwrapper', ++ sources=['cwrapper.c']), ++ ], ++ ) ++ """ ++ ) ++ ) ++ with Path(tmppro, "cwrapper.c").open("w") as f: ++ f.write( ++ textwrap.dedent( ++ """\ ++ #include ++ static PyObject * ++ helloworld(PyObject *self, PyObject *args) ++ { ++ printf("Hello World\\n"); ++ return Py_None; ++ } ++ static PyMethodDef ++ myMethods[] = { ++ { "helloworld", helloworld, METH_NOARGS, "Prints Hello World" }, ++ { NULL, NULL, 0, NULL } ++ }; ++ static struct PyModuleDef cwrapper = { ++ PyModuleDef_HEAD_INIT, ++ "cwrapper", ++ "Test Module", ++ -1, ++ myMethods ++ }; ++ ++ PyMODINIT_FUNC ++ PyInit_cwrapper(void) ++ { ++ return PyModule_Create(&cwrapper); ++ } ++ """ ++ ) ++ ) ++ subprocess.check_call( ++ [sys.executable, "-c", "import struct"], ++ ) ++ subprocess.check_call( ++ [ ++ sys.executable, ++ "-m", ++ "pip", ++ "install", ++ "wheel", ++ ], ++ ) ++ subprocess.check_call( ++ [ ++ sys.executable, ++ "-m", ++ "pip", ++ "install", ++ tmppro, ++ ], ++ ) ++ subprocess.check_call( ++ [sys.executable, "-c", "import cwrapper"], ++ ) ++ ++ ++ ++def suite(): ++ return unittest.TestLoader().loadTestsFromName(__name__) ++ ++ ++if __name__ == '__main__': ++ unittest.main(defaultTest='suite') +diff --git a/pyconfig.h.in b/pyconfig.h.in +index b97b8f8bf8..c331d4364e 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -63,7 +63,7 @@ + /* Define to 1 if you have the `acosh' function. */ + #undef HAVE_ACOSH + +-/* struct addrinfo (netdb.h) */ ++/* struct addrinfo */ + #undef HAVE_ADDRINFO + + /* Define to 1 if you have the `alarm' function. */ +@@ -1383,6 +1383,9 @@ + /* Define if mvwdelch in curses.h is an expression. */ + #undef MVWDELCH_IS_EXPRESSION + ++/* Define to 1 if you want to use native NT threads */ ++#undef NT_THREADS ++ + /* Define to the address where bug reports for this package should be sent. */ + #undef PACKAGE_BUGREPORT + +@@ -1685,7 +1688,7 @@ + /* Define to `unsigned int' if does not define. */ + #undef size_t + +-/* Define to `int' if does not define. */ ++/* Define to `int' if or does not define. */ + #undef socklen_t + + /* Define to `int' if doesn't define. */ +diff --git a/setup.py b/setup.py +index 43e807f20d..e67344f1e4 100644 +--- a/setup.py ++++ b/setup.py +@@ -79,9 +79,20 @@ def get_platform(): + return sys.platform + + ++# On MSYS, os.system needs to be wrapped with sh.exe ++# as otherwise all the io redirection will fail. ++# Arguably, this could happen inside the real os.system ++# rather than this monkey patch. ++if sys.platform == "win32" and "MSYSTEM" in os.environ: ++ os_system = os.system ++ def msys_system(command): ++ command_in_sh = 'sh.exe -c "%s"' % command.replace("\\", "\\\\") ++ return os_system(command_in_sh) ++ os.system = msys_system ++ + CROSS_COMPILING = ("_PYTHON_HOST_PLATFORM" in os.environ) + HOST_PLATFORM = get_platform() +-MS_WINDOWS = (HOST_PLATFORM == 'win32') ++MS_WINDOWS = (HOST_PLATFORM == 'win32' or HOST_PLATFORM == 'mingw') + CYGWIN = (HOST_PLATFORM == 'cygwin') + MACOS = (HOST_PLATFORM == 'darwin') + AIX = (HOST_PLATFORM.startswith('aix')) +@@ -474,6 +485,9 @@ def build_extensions(self): + self.configure_compiler() + self.init_inc_lib_dirs() + ++ if MS_WINDOWS: ++ self.compiler.define_macro("Py_BUILD_CORE_MODULE") ++ + # Detect which modules should be compiled + self.detect_modules() + +@@ -667,7 +681,7 @@ def check_extension_import(self, ext): + def add_multiarch_paths(self): + # Debian/Ubuntu multiarch support. + # https://wiki.ubuntu.com/MultiarchSpec +- tmpfile = os.path.join(self.build_temp, 'multiarch') ++ tmpfile = os.path.join(self.build_temp, 'multiarch').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + ret = run_command( +@@ -692,7 +706,7 @@ def add_multiarch_paths(self): + opt = '' + if CROSS_COMPILING: + opt = '-t' + sysconfig.get_config_var('HOST_GNU_TYPE') +- tmpfile = os.path.join(self.build_temp, 'multiarch') ++ tmpfile = os.path.join(self.build_temp, 'multiarch').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + ret = run_command( +@@ -754,7 +768,7 @@ def add_search_path(line): + pass + + def add_cross_compiling_paths(self): +- tmpfile = os.path.join(self.build_temp, 'ccpaths') ++ tmpfile = os.path.join(self.build_temp, 'ccpaths').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + ret = run_command('%s -E -v - %s 1>/dev/null' % (CC, tmpfile)) +@@ -774,14 +788,25 @@ def add_cross_compiling_paths(self): + elif line.startswith("End of search list"): + in_incdirs = False + elif (is_gcc or is_clang) and line.startswith("LIBRARY_PATH"): +- for d in line.strip().split("=")[1].split(":"): ++ for d in line.strip().split("=")[1].split(os.pathsep): + d = os.path.normpath(d) +- if '/gcc/' not in d: ++ if '/gcc/' not in d and '/clang/' not in d: + add_dir_to_list(self.compiler.library_dirs, + d) + elif (is_gcc or is_clang) and in_incdirs and '/gcc/' not in line and '/clang/' not in line: + add_dir_to_list(self.compiler.include_dirs, + line.strip()) ++ if is_clang: ++ ret = run_command('%s -print-search-dirs >%s' % (CC, tmpfile)) ++ if ret == 0: ++ with open(tmpfile) as fp: ++ for line in fp.readlines(): ++ if line.startswith("libraries:"): ++ for d in line.strip().split("=")[1].split(os.pathsep): ++ d = os.path.normpath(d) ++ if '/gcc/' not in d and '/clang/' not in d: ++ add_dir_to_list(self.compiler.library_dirs, ++ d) + finally: + os.unlink(tmpfile) + +@@ -827,10 +852,10 @@ def configure_compiler(self): + if not CROSS_COMPILING: + add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') + add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') ++ self.add_multiarch_paths() + # only change this for cross builds for 3.3, issues on Mageia + if CROSS_COMPILING: + self.add_cross_compiling_paths() +- self.add_multiarch_paths() + self.add_ldflags_cppflags() + + def init_inc_lib_dirs(self): +@@ -876,7 +901,7 @@ def init_inc_lib_dirs(self): + if HOST_PLATFORM == 'hp-ux11': + self.lib_dirs += ['/usr/lib/hpux64', '/usr/lib/hpux32'] + +- if MACOS: ++ if MACOS or MS_WINDOWS: + # This should work on any unixy platform ;-) + # If the user has bothered specifying additional -I and -L flags + # in OPT and LDFLAGS we might as well use them here. +@@ -886,6 +911,8 @@ def init_inc_lib_dirs(self): + # directories with whitespace in the name to store libraries. + cflags, ldflags = sysconfig.get_config_vars( + 'CFLAGS', 'LDFLAGS') ++ cflags = cflags + ' ' + ('',os.environ.get('CC'))[os.environ.get('CC') != None] ++ ldflags = ldflags + ' ' + ('',os.environ.get('LDSHARED'))[os.environ.get('LDSHARED') != None] + for item in cflags.split(): + if item.startswith('-I'): + self.inc_dirs.append(item[2:]) +@@ -984,13 +1011,21 @@ def detect_simple_extensions(self): + if (self.config_h_vars.get('FLOCK_NEEDS_LIBBSD', False)): + # May be necessary on AIX for flock function + libs = ['bsd'] +- self.add(Extension('fcntl', ['fcntlmodule.c'], +- libraries=libs)) ++ if not MS_WINDOWS: ++ self.add(Extension('fcntl', ['fcntlmodule.c'], ++ libraries=libs)) ++ else: ++ self.missing.append('fcntl') + # pwd(3) +- self.add(Extension('pwd', ['pwdmodule.c'])) ++ if not MS_WINDOWS: ++ self.add(Extension('pwd', ['pwdmodule.c'])) ++ else: ++ self.missing.append('pwd') + # grp(3) +- if not VXWORKS: ++ if not VXWORKS and not MS_WINDOWS: + self.add(Extension('grp', ['grpmodule.c'])) ++ else: ++ self.missing.append('grp') + # spwd, shadow passwords + if (self.config_h_vars.get('HAVE_GETSPNAM', False) or + self.config_h_vars.get('HAVE_GETSPENT', False)): +@@ -1001,14 +1036,21 @@ def detect_simple_extensions(self): + self.missing.append('spwd') + + # select(2); not on ancient System V +- self.add(Extension('select', ['selectmodule.c'])) ++ select_libs = [] ++ if MS_WINDOWS: ++ select_libs += ['ws2_32'] ++ self.add(Extension('select', ['selectmodule.c'], ++ libraries=select_libs)) + + # Memory-mapped files (also works on Win32). + self.add(Extension('mmap', ['mmapmodule.c'])) + + # Lance Ellinghaus's syslog module + # syslog daemon interface +- self.add(Extension('syslog', ['syslogmodule.c'])) ++ if not MS_WINDOWS: ++ self.add(Extension('syslog', ['syslogmodule.c'])) ++ else: ++ self.missing.append('syslog') + + # Python interface to subinterpreter C-API. + self.add(Extension('_xxsubinterpreters', ['_xxsubinterpretersmodule.c'])) +@@ -1034,8 +1076,11 @@ def detect_simple_extensions(self): + self.add(Extension('_csv', ['_csv.c'])) + + # POSIX subprocess module helper. +- self.add(Extension('_posixsubprocess', ['_posixsubprocess.c'], ++ if not MS_WINDOWS: ++ self.add(Extension('_posixsubprocess', ['_posixsubprocess.c'], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) ++ else: ++ self.missing.append('_posixsubprocess') + + def detect_test_extensions(self): + # Python C API test module +@@ -1043,7 +1088,11 @@ def detect_test_extensions(self): + depends=['testcapi_long.h'])) + + # Python Internal C API test module ++ macros = [] ++ if MS_WINDOWS: ++ macros.append(('PY3_DLLNAME', 'L"%s"' % sysconfig.get_config_var('DLLLIBRARY'))) + self.add(Extension('_testinternalcapi', ['_testinternalcapi.c'], ++ define_macros=macros, + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) + + # Python PEP-3118 (buffer protocol) test module +@@ -1060,12 +1109,15 @@ def detect_test_extensions(self): + ['_xxtestfuzz/_xxtestfuzz.c', + '_xxtestfuzz/fuzzer.c'])) + ++ if MS_WINDOWS: ++ self.add(Extension('_testconsole', ['../PC/_testconsole.c'])) ++ + def detect_readline_curses(self): + # readline + readline_termcap_library = "" + curses_library = "" + # Cannot use os.popen here in py3k. +- tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib') ++ tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + # Determine if readline is already linked against curses or tinfo. +@@ -1128,6 +1180,8 @@ def detect_readline_curses(self): + # readline package + if find_file('readline/rlconf.h', self.inc_dirs, []) is None: + do_readline = False ++ if MS_WINDOWS: ++ do_readline = False + if do_readline: + if MACOS and os_release < 9: + # In every directory on the search path search for a dynamic +@@ -1162,8 +1216,7 @@ def detect_readline_curses(self): + panel_library = 'panel' + if curses_library == 'ncursesw': + curses_defines.append(('HAVE_NCURSESW', '1')) +- if not CROSS_COMPILING: +- curses_includes.append('/usr/include/ncursesw') ++ curses_includes.append(sysconfig.get_config_var("NCURSESW_INCLUDEDIR")) + # Bug 1464056: If _curses.so links with ncursesw, + # _curses_panel.so must link with panelw. + panel_library = 'panelw' +@@ -1227,12 +1280,15 @@ def detect_crypt(self): + self.missing.append('_crypt') + return + +- if self.compiler.find_library_file(self.lib_dirs, 'crypt'): +- libs = ['crypt'] +- else: +- libs = [] ++ if not MS_WINDOWS: ++ if self.compiler.find_library_file(self.lib_dirs, 'crypt'): ++ libs = ['crypt'] ++ else: ++ libs = [] + +- self.add(Extension('_crypt', ['_cryptmodule.c'], libraries=libs)) ++ self.add(Extension('_crypt', ['_cryptmodule.c'], libraries=libs)) ++ else: ++ self.missing.append('_crypt') + + def detect_socket(self): + # socket(2) +@@ -1240,6 +1296,8 @@ def detect_socket(self): + if MACOS: + # Issue #35569: Expose RFC 3542 socket options. + kwargs['extra_compile_args'] = ['-D__APPLE_USE_RFC_3542'] ++ if MS_WINDOWS: ++ kwargs['libraries'] = ['ws2_32', 'iphlpapi'] + + self.add(Extension('_socket', ['socketmodule.c'], **kwargs)) + +@@ -1462,7 +1520,7 @@ class db_found(Exception): pass + if dbm_args: + dbm_order = [arg.split('=')[-1] for arg in dbm_args][-1].split(":") + else: +- dbm_order = "ndbm:gdbm:bdb".split(":") ++ dbm_order = [] + dbmext = None + for cand in dbm_order: + if cand == "ndbm": +@@ -1612,6 +1670,7 @@ def detect_sqlite(self): + '_sqlite/statement.c', + '_sqlite/util.c', ] + sqlite_defines = [] ++ sqlite_defines.append(('MODULE_NAME', '"sqlite3"')) + + # Enable support for loadable extensions in the sqlite3 module + # if --enable-loadable-sqlite-extensions configure option is used. +@@ -1671,6 +1730,29 @@ def detect_platform_specific_exts(self): + '-framework', 'SystemConfiguration', + '-framework', 'CoreFoundation'])) + ++ # Modules with some Windows dependencies: ++ if MS_WINDOWS: ++ srcdir = sysconfig.get_config_var('srcdir') ++ pc_srcdir = os.path.abspath(os.path.join(srcdir, 'PC')) ++ ++ self.add(Extension('msvcrt', [os.path.join(pc_srcdir, p) ++ for p in ['msvcrtmodule.c']])) ++ ++ # Added to Setup.config.in as now needed earlier since I ++ # use subprocess (which uses Popen) in cygwinccompiler.py ++ # self.add(Extension('_winapi', ['_winapi.c'])) ++ ++ self.add(Extension('_msi', [os.path.join(pc_srcdir, p) ++ for p in ['_msi.c']], ++ libraries=['msi','cabinet','rpcrt4'])) # To link with lib(msi|cabinet|rpcrt4).a ++ ++ self.add(Extension('winsound', [os.path.join(pc_srcdir, p) ++ for p in ['winsound.c']], ++ libraries=['winmm'])) ++ ++ self.add(Extension('_overlapped', ['overlapped.c'], ++ libraries=['ws2_32'])) ++ + def detect_compress_exts(self): + # Andrew Kuchling's zlib module. Note that some versions of zlib + # 1.1.3 have security problems. See CERT Advisory CA-2002-07: +@@ -1845,7 +1927,12 @@ def detect_multiprocessing(self): + if (sysconfig.get_config_var('HAVE_SEM_OPEN') and not + sysconfig.get_config_var('POSIX_SEMAPHORES_NOT_ENABLED')): + multiprocessing_srcs.append('_multiprocessing/semaphore.c') ++ multiprocessing_libs = [] ++ if MS_WINDOWS: ++ multiprocessing_libs += ['ws2_32'] + self.add(Extension('_multiprocessing', multiprocessing_srcs, ++ define_macros={}, ++ libraries=multiprocessing_libs, + include_dirs=["Modules/_multiprocessing"])) + + if (not MS_WINDOWS and +@@ -2052,12 +2139,12 @@ def detect_tkinter_darwin(self): + cflags = sysconfig.get_config_vars('CFLAGS')[0] + archs = re.findall(r'-arch\s+(\w+)', cflags) + +- tmpfile = os.path.join(self.build_temp, 'tk.arch') ++ tmpfile = os.path.join(self.build_temp, 'tk.arch').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + + run_command( +- "file {}/Tk.framework/Tk | grep 'for architecture' > {}".format(F, tmpfile) ++ "file {}/Tk.framework/Tk | grep 'for architecture' > {}".format(F, tmpfile).replace('\\','/') + ) + with open(tmpfile) as fp: + detected_archs = [] +@@ -2114,14 +2201,19 @@ def detect_tkinter(self): + # The versions with dots are used on Unix, and the versions without + # dots on Windows, for detection by cygwin. + tcllib = tklib = tcl_includes = tk_includes = None +- for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83', +- '8.2', '82', '8.1', '81', '8.0', '80']: +- tklib = self.compiler.find_library_file(self.lib_dirs, +- 'tk' + version) +- tcllib = self.compiler.find_library_file(self.lib_dirs, +- 'tcl' + version) +- if tklib and tcllib: +- # Exit the loop when we've found the Tcl/Tk libraries ++ tcltk_suffix = None ++ for suffix in ['', 's']: ++ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83', ++ '8.2', '82', '8.1', '81', '8.0', '80', '']: ++ tklib = self.compiler.find_library_file(self.lib_dirs, ++ 'tk' + version + suffix) ++ tcllib = self.compiler.find_library_file(self.lib_dirs, ++ 'tcl' + version + suffix) ++ if tklib and tcllib: ++ # Exit the loop when we've found the Tcl/Tk libraries ++ tcltk_suffix = suffix ++ break ++ if tcltk_suffix != None: + break + + # Now check for the header files +@@ -2192,10 +2284,18 @@ def detect_tkinter(self): + # Add the Tcl/Tk libraries + libs.append('tk'+ version) + libs.append('tcl'+ version) ++ libs.append('tk'+ version + tcltk_suffix) ++ libs.append('tcl'+ version + tcltk_suffix) ++ if MS_WINDOWS: ++ for winlib in ['ws2_32','gdi32','comctl32','comdlg32','imm32','uuid','oleaut32','ole32']: ++ libs.append( winlib ) + + # Finally, link with the X11 libraries (not appropriate on cygwin) +- if not CYGWIN: ++ # ...on those platforms, define STATIC_BUILD if linking to static tcl/tk. ++ if not CYGWIN and not MS_WINDOWS: + libs.append('X11') ++ elif tcllib.endswith('s.a'): ++ defs.append( ('STATIC_BUILD',1) ) + + # XXX handle these, but how to detect? + # *** Uncomment and edit for PIL (TkImaging) extension only: +@@ -2263,9 +2363,12 @@ def detect_ctypes(self): + self.add(ext) + if TEST_EXTENSIONS: + # function my_sqrt() needs libm for sqrt() ++ ffi_test_libs = ['m'] ++ if MS_WINDOWS: ++ ffi_test_libs += ['oleaut32'] + self.add(Extension('_ctypes_test', + sources=['_ctypes/_ctypes_test.c'], +- libraries=['m'])) ++ libraries=ffi_test_libs)) + + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None +@@ -2310,6 +2413,10 @@ def detect_ctypes(self): + + ext.include_dirs.append(ffi_inc) + ext.libraries.append(ffi_lib) ++ if MS_WINDOWS: ++ ext.libraries.extend(['ole32', 'oleaut32', 'uuid']) ++ ext.export_symbols.extend(['DllGetClassObject PRIVATE', ++ 'DllCanUnloadNow PRIVATE']) + self.use_system_libffi = True + + if sysconfig.get_config_var('HAVE_LIBDL'): +@@ -2451,6 +2558,8 @@ def split_var(name, sep): + openssl_libdirs = split_var('OPENSSL_LDFLAGS', '-L') + openssl_libs = split_var('OPENSSL_LIBS', '-l') + openssl_rpath = config_vars.get('OPENSSL_RPATH') ++ if MS_WINDOWS: ++ openssl_libs += tuple(['ws2_32']) + if not openssl_libs: + # libssl and libcrypto not found + self.missing.extend(['_ssl', '_hashlib']) +@@ -2693,7 +2802,7 @@ def copy_scripts(self): + else: + newfilename = filename + minoronly + log.info(f'renaming {filename} to {newfilename}') +- os.rename(filename, newfilename) ++ os.replace(filename, newfilename) + newoutfiles.append(newfilename) + if filename in updated_files: + newupdated_files.append(newfilename) -- Gitee