summaryrefslogtreecommitdiff
path: root/lang/python/python3
Commit message (Collapse)AuthorAgeFilesLines
* python3: Update to 3.9.18Jeffery To2023-09-081-1/+1
| | | | | | | Includes fix for CVE-2023-40217 (Bypass TLS handshake on closed sockets). Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Update to 3.9.17Jeffery To2023-06-123-21/+21
| | | | | | | This includes an updated patch for pip, as the bundled pip was also updated with this release. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: update to version 3.9.16Josef Schlehofer2022-12-211-1/+1
| | | | | | | | | | | | | | Release notes: https://www.python.org/downloads/release/python-3916/ Fixes: CVE-2022-43680 CVE-2022-37454 CVE-2022-45061 CVE-2022-42919 CVE-2015-20107 Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
* python3: update to version 3.9.15Josef Schlehofer2022-10-211-1/+1
| | | | | | | Release notes: - https://www.python.org/downloads/release/python-3915/ Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
* python3: update to 3.9.14Michal Vasilek2022-10-115-7/+7
| | | | | | | * fixes CVE-2021-28861 * refresh patches Signed-off-by: Michal Vasilek <michal.vasilek@nic.cz>
* python3: Update to 3.9.13Jeffery To2022-06-061-1/+1
| | | | Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Update to 3.9.12Jeffery To2022-03-271-1/+1
| | | | Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Update to 3.9.11, refresh patchesJeffery To2022-03-215-7/+7
| | | | | | | | | Includes fixes for: * Windows builds updated to bzip2 1.0.8 to mitigate CVE-2016-3189 and CVE-2019-12900 * CVE-2022-26488: Escalation of privilege via Windows Installer Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Update to 3.9.10, refresh patchesJeffery To2022-01-206-20/+9
| | | | Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python-packages: remove myself as maintainerAlexandru Ardelean2021-12-201-1/+1
| | | | | | | | | | | | There's been a bit of overlapping opinions on some of these packages. The best thing to do here is to reduce ownership and relinquish my control. This patch does that. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> (cherry picked from commit 48ce6e48b617ee72e40220e6ab6b7ceaa079a192) Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: update to version 3.9.9Josef Schlehofer2021-12-046-12/+12
| | | | | | | - Updated setuptools and pip - Refreshed patches Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
* python3: bump version to 3.9.7Alexandru Ardelean2021-09-103-3/+14
| | | | | | | | | | | | | | | | | Refreshed patches. And apply hack for line-endings in pep517 (from pip). Hack comment: # FIXME: [1] get rid of this asap; 'patch' doesn't like Windows endings, and this file is full of them... # I actually tried this in a number of ways and the only way to fix this is to implement # a poor-man's dos2unix using sed. # The issue is with the pip package; it seems that it throws in some Windows line-endings # and 'patch' won't handle them. So, we do a "dos2unix" and then patch. # We can get rid of this once this is solved upstream and in pip: # https://github.com/pypa/pep517/pull/130 Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> (cherry picked from commit 26988f905f1f78ee0fd67dc90c3c7b112ac1817d)
* python3-setuptools: add _distutils_hackJosef Schlehofer2021-08-191-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | I tried to install matplotlib by using pip and it failed with the following output: 2021-08-18T11:52:26,171 Collecting matplotlib 2021-08-18T11:52:26,173 Created temporary directory: /tmp/pip-unpack-wuth2u0e 2021-08-18T11:52:26,565 Using cached matplotlib-3.4.3.tar.gz (37.9 MB) 2021-08-18T11:52:38,659 Added matplotlib from https://files.pythonhosted.org/packages/21/37/ 197e68df384ff694f78d687a49ad39f96c67b8d75718bc61503e1676b617/matplotlib-3.4.3.tar. gz#sha256=fc4f526dfdb31c9bd6b8ca06bf9fab663ca12f3ec9cdf4496fb44bc680140318 to build tracker '/tmp/pip- req-tracker-u30x8pht' 2021-08-18T11:52:38,660 Running setup.py (path:/tmp/pip-install-afiyiers/ matplotlib_8e717e38862f4976a3d6cb1832ba3261/setup.py) egg_info for package matplotlib 2021-08-18T11:52:38,661 Created temporary directory: /tmp/pip-pip-egg-info-kbtiezxq 2021-08-18T11:52:38,662 Running command python setup.py egg_info 2021-08-18T11:52:38,831 Traceback (most recent call last): 2021-08-18T11:52:38,832 File "<string>", line 1, in <module> 2021-08-18T11:52:38,832 File "/usr/lib/python3.9/site-packages/setuptools/__init__.py", line 8, in <module> 2021-08-18T11:52:38,833 ModuleNotFoundError: No module named '_distutils_hack' More details about it: - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=968410 Once I applied the patch from the bug tracker, I got further to install it. Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com> (cherry picked from commit feaaacc10fff283505ff261ed6886a4936fbe7f5)
* python3: do a simple ls on pip & setuptools if not selected for buildAlexandru Ardelean2021-07-061-0/+8
| | | | | | | | | I seem to forget to check/select setuptools and pip (that come bundled with Python). This change will do a simple 'ls' on the 2 wheel files, so that the build fails even if just building Python. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* python3: update to version 3.9.6Alexandru Ardelean2021-07-063-6/+6
| | | | | | | | Refreshed patches. Bumped pip to 21.1.3. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> (cherry picked from commit 44e009364f5a115172f5825fbfd8c0b3730021a5)
* python3: add python3-readline subpackageAlexandru Ardelean2021-06-143-3/+18
| | | | | | | | | | | | | | | | | | | Python3 comes with a built-in readline module. It wasn't included up until now; mostly because it wasn't considered. This change introduces it as a sub-package of the main Python3 package. readline support is included in Python. libreadline pulls libncursesw as a package, so python3-ncurses was updated to pull libncursesw as well. It should be the same package; mostly done for consistency. Resolves the issue reported here: https://forum.openwrt.org/t/python3-repl-missing-readline/90039 Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> (cherry picked from commit 49faf5d7cacf91aeb0c72447f0f5a069c891c3a9) Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: bump version to 3.9.5Alexandru Ardelean2021-05-178-27/+20
| | | | | | | | | | | | | | | | Refreshed Python patches. Updated pip & setuptools version. For pip, patch '001-pep517-pyc-fix.patch' was reworked. Also, the current version of the bundled pip (21.1.1) no longer supports Python2, so the 'py2.py3' suffix gets replaced with just py3. For setuptools, there is no longer a script/module: https://github.com/pypa/setuptools/pull/2544 Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> (cherry picked from commit e312275dd9c25c4032b4d2d3623b042905c8bf16)
* python3: introduce libpython3 with ABI_VERSION flagAlexandru Ardelean2021-05-171-4/+20
| | | | | | | | | | | | | | | | | | Related to discussion: https://github.com/openwrt/packages/pull/14060 Every once in a while a version bump will occur that requires an ABI change. Example: Python 3.8 to 3.9. When this happens some Python packages would need to be rebuilt. In setups where everything gets rebuilt, this isn't a problem. It's usually a bigger problem when needing to upgrade something via opkg. To accommodate for this, we add a libpython with it's own ABI_VERSION flag. If this ABI_VERSION changes, then this should propagate forward. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> (cherry picked from commit 27aee1fbf09a6230836d191d1138c9ed805373eb)
* python3: bump to version 3.9.4Alexandru Ardelean2021-05-175-10/+10
| | | | | | | For some reason Python3 jumped from 3.9.2 to 3.9.4 in about a week. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> (cherry picked from commit 156e2e354e0a4eaa576daa70785aeddaabca7636)
* python3: Update to 3.9.2, refresh patchesJeffery To2021-03-022-5/+5
| | | | | | | | | | Includes fixes for: * CVE-2021-3177 - ctypes: Buffer overflow in PyCArg_repr * CVE-2021-23336 - urllib parse_qsl(): Web cache poisoning - semicolon as a query args separator Signed-off-by: Jeffery To <jeffery.to@gmail.com> (cherry picked from commit 6d9005d5ac63d5a3092577fdd4f085f00d1f5fdd)
* treewide: Run refresh on all packagesIlya Lipnitskiy2021-02-258-15/+15
| | | | | | | | | | | The crude loop I wrote to come up with this changeset: find -L package/feeds/packages/ -name patches | \ sed 's/patches$/refresh/' | sort | xargs make Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com> (cherry picked from commit 5d8d4fbbcb5c5de9370711c19bb3510210989a98) Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Fix target python-config when building on macOSJeffery To2021-02-222-4/+17
| | | | | | | | | | | | | | | | | | | | | The Python version of python-config is installed when building on macOS, rather than the shell script version when building on Linux. When run on macOS, the Python version of python-config will return values with Mac-specific customizations. This patches the python-config install recipe so that which version is installed can be controlled by the package makefile. When building on macOS, this installs the Python version for host Python and the shell script version for target Python. This also updates Host/Compile and Host/Install to use the default host build recipes, so that the various HOST_* variables are taken into account automatically. Fixes https://github.com/openwrt/packages/issues/14652 Signed-off-by: Jeffery To <jeffery.to@gmail.com> (cherry picked from commit 18330902a0ca1b162e1ae938d8024cfb7e7c524d)
* python3: bump to version 3.9.1Alexandru Ardelean2020-12-141-2/+2
| | | | Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* python3: fix compilationRosen Penev2020-11-291-2/+3
| | | | | | | Because of e52d0487e88c3c8c57e1310d1a02b18eae0d142e , these flags no longer get passed. Add them back to fix compilation. Signed-off-by: Rosen Penev <rosenp@gmail.com>
* python3: bump to version 3.9.0Alexandru Ardelean2020-10-1913-44/+27
| | | | | | | | | | | Refreshed patches. Dropped 'patches-setuptools/004-site-patch.patch' Does not apply anymore. Setuptools has removed site.py support: https://github.com/pypa/setuptools/issues/2165 If this is still needed, we may need to re-think it's implementation. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* python3: Add config PYTHON3_HOST_PIP_CACHE_WORLD_READABLEJeffery To2020-08-161-0/+4
| | | | | | | | | | This adds a config option PYTHON3_HOST_PIP_CACHE_WORLD_READABLE; if enabled, chmod will be run after pip install to make all files/directories in the host pip cache world-readable. Supersedes https://github.com/openwrt/packages/pull/13012. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: fix host compilation with clangRosen Penev2020-08-021-1/+1
| | | | | | Matched rpath parameter with Makefile. Signed-off-by: Rosen Penev <rosenp@gmail.com>
* python3: Update to 3.8.5Jeffery To2020-07-275-274/+2
| | | | | | | | | | | | | | | This version includes fixes for: * CVE-2020-15801 - Fixes python3x._pth being ignored on Windows * CVE-2019-20907 - Avoid infinite loop when reading specially crafted TAR files using the tarfile module This also: * Remove patches that are included in the update * Add a dependency in python3-distutils for python3-email[1] [1]: https://github.com/python/cpython/blob/v3.8.5/Lib/distutils/dist.py#L10 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Update to 3.8.4, refresh/rework patches, backport patchesJeffery To2020-07-2011-299/+299
| | | | | | | | | | | | | | | | | | | | | This version includes fixes for: * CVE-2020-14422: Hash collisions in IPv4Interface and IPv6Interface * CVE-2020-15523: Python uses invalid DLL path after calling Py_SetPath on Windows This version also includes support for OpenSSL 1.1.x builds that use 'no-deprecated' and '--api=1.1.0'[1], and so this removes the previous OpenSSL-related patches. This also backports fixes for security issues, including: * CVE-2019-20907: Infinite loop in the tarfile module This also updates the setuptools and pip packages to 47.1.0 and 20.1.1, respectively. [1]: https://github.com/python/cpython/pull/20566 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Use default _PYTHON_HOST_PLATFORMJeffery To2020-07-082-10/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This lets the Python build process set _PYTHON_HOST_PLATFORM instead of forcing an explicit value. Also: * Save the target _PYTHON_HOST_PLATFORM value during Build/InstallDev for use when building target Python packages (in python3-package.mk). * Use the (mostly) default PYTHON_FOR_BUILD value, instead patch configure to remove the platform triplet from the sysconfigdata file name. * Remove the "CROSS_COMPILE=yes" make variable (there is no indication that this variable is necessary). * Force host pip to build packages from source instead of downloading binary wheels. Previously, host pip can download universal (platform-independent) wheels but not platform-specific wheels, because of the custom _PYTHON_HOST_PLATFORM value. (Packages that do not have universal wheels would be compiled from source.) With a correct _PYTHON_HOST_PLATFORM, host pip can install platform-specific wheels as well. However, the pre-built shared object (.so) files in these wheels will have the host's platform triplet in their file names. When target Python packages are built (using the target's _PYTHON_HOST_PLATFORM), Python will not use these shared object files. By forcing host pip to build packages from source, the built shared object files will not have the platform triplet in their file names. (Host Python has been patched to remove the platform triplet from file names.) This allows these packages to be used when building target Python packages. (The net effect of this complete change is that platform-dependent packages will continue to be compiled from source, while platform-independent packages will now also be compiled from source.) Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python-packages: Add usr/bin symlinks without "3" suffixJeffery To2020-05-224-1/+4
| | | | | | | | | | | | | Previously, binaries installed by Python packages will have a non-suffixed Python 2 version and a suffixed Python 3 version, e.g. pip and pip3. With the removal of Python 2, the non-suffixed names are no longer taken. This adds symlinks for the non-suffixed names linking to the suffixed scripts (or in the case of pip, easy_install, and python-config, to the fully-versioned scripts). Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3-setuptools: Fix error when installing from sourceJeffery To2020-05-212-0/+17
| | | | | | | | | | | | | | | | | | | When a Python package is installed from source (i.e. using setup.py) into a custom location (with --home), setuptools may want to create a site.py file in the custom location. This file is created based on the source code of site-patch.py, a file bundled with setuptools. Because the normal OpenWrt setuptools package does not contain Python source code, this file is missing and the installation will end with an error. This copies site-patch.py to site-patch.py.txt so that it will be included in python3-setuptools, and patches setuptools to look for this file. See https://github.com/openwrt/packages/issues/12223 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Update to 3.8.3, refresh patchesJeffery To2020-05-206-23/+18
| | | | Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3-openssl: Add dependency on ca-certsJeffery To2020-05-202-2/+2
| | | | | | | | | The ssl module assumes OpenSSL can load the default trust anchors (root CA certificates). From https://github.com/openwrt/packages/issues/12209 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Enable compile-time optimizationsJeffery To2020-05-181-19/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | This adds the --enable-optimizations configure option (for profile-guided optimization) for both host and target Python, and the --with-lto configure option (for link-time optimization) for target Python (for non-MIPS platforms). Currently, compiling Python with LTO leads to link errors on mips and mipsel. (Compiling with LTO appears to succeed on mips64 but there is only one mips64 target available for convenient testing.) This also cleans up the host and target configure options: * Sort options/variables - Alphabetically - Flags/options before child-process environment variables - Group options by type (enable/disable/with/without) - Static options/variables before conditional ones * Remove the prefix/dir options, as they are the same as the defaults set by the build system * Remove --with-threads, as it is no longer a valid option (threads are always enabled) Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Fix host build tool names recorded in target filesJeffery To2020-04-272-1/+10
| | | | | | | | | | | | | | | | | | | | | | | Python will record the values of CC, CXX, AR, and READELF (and other configure options) used during compilation. pip will use these programs when asked to compile extension modules on the target device. * If ccache is used during build, CC and CXX will be ccache_cc and ccache_cxx, respectively, which are not available on-device (#11912). * If an external toolchain is used during build, the values of these variables will contain the external toolchain prefix, which may not be available on target. * If the normal toolchain is used during build, AR and READELF will contain the toolchain prefix, but the names of ar and readelf on-device do not contain the prefix; they are named "ar" and "readelf". This changes the values of these variables in Python's files to match the names available on-device, and without any toolchain prefix. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3-pip: Fix error when installing packages that require compilationJeffery To2020-04-241-0/+13
| | | | | | This addresses one of the issues raised in #11912. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Change PYTHON_VERSION references to PYTHON3_VERSIONJeffery To2020-04-192-53/+51
| | | | | | | | | | | | PYTHON_VERSION is a holdover from Python 2; all Python 3 variables are prefixed with PYTHON3 (or some variation with "3"). This updates all uses of PYTHON_VERSION to PYTHON3_VERSION. This also sets PYTHON3_PKG_BUILD:=0 before python3-package.mk is included in the python3 Makefile. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: symlink 'python' to '/usr/bin/python3'Alexandru Ardelean2020-04-081-1/+2
| | | | | | | | Time to make it more official. Running 'python' should get you an interpreter running, and that one is now Python3. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* python3-pip: Symlink pip3 to pip3.8Jeffery To2020-04-041-1/+2
| | | | | | | Currently, python3-pip installs the same script as pip3 and pip3.8 to usr/bin. This changes pip3 to be a symlink to pip3.8. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Update to 3.8.2, fix python3-xml dependencyJeffery To2020-03-202-3/+3
| | | | | | | | xml.sax.saxutils has a dependency on urllib[1]. [1]: https://github.com/python/cpython/blob/v3.8.2/Lib/xml/sax/saxutils.py#L6 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: Fix compilation without deprecated APIsRosen Penev2020-01-143-1/+287
| | | | | | | | | | | | | This is based on upstream work here: https://github.com/python/cpython/pull/3934 and https://github.com/python/cpython/pull/39430 First patch was kept as is (just rebased) while the second was combined into one. Signed-off-by: Rosen Penev <rosenp@gmail.com>
* python3: Updated to version 3.8.1Josef Schlehofer2019-12-212-13/+2
| | | | | | Removed upstream patch: 002-fix-blake2-detection.patch Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
* python3: bump PKG_RELEASEJosef Schlehofer2019-11-211-1/+1
| | | | | | | Fixes: 85eee2d7f85421fd9156fb988ac865679e4e7851 (python3: fix build when Blake2 not enabled in OpenSSL") Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
* python3: fix build when Blake2 not enabled in OpenSSLYorkie Liu2019-11-211-1/+1
| | | | | | | | | Refs: - https://github.com/python/cpython/commit/7c20888e71304ecbf4bd3d595f364b7c691d30a0 - https://bugs.python.org/issue38684 Signed-off-by: Yorkie Liu <yorkiefixer@gmail.com>
* python3: fix build on Ubuntu/Debian multi-archAlexandru Ardelean2019-11-042-1/+13
| | | | | | | | | | | | | | | | | This issue was introduced after upgrading to 3.8. Patch `006-remove-multi-arch-and-local-paths.patch` was dropped. It was tested on x86, but when using the x86_64 compiler in OpenWrt, the issue is present. The issue seems to be about Ubuntu/Debian's multi-arch support in Python/Python3 setup [which I forgot about]. The code runs it regardless of whether it cross-compiles or not, and for OpenWrt, this causes issues, as it introduces absolute include paths from the host system. Fixes https://github.com/openwrt/packages/issues/10452 Fixes: 48277ec915815 ("python3: bump to version 3.8") Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* python3: bump to version 3.8Alexandru Ardelean2019-10-2117-503/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This required a bit work to get working, compared to other versions. So, some things have changed a bit more significantly. Some highlights: * there is no longer a pgen executable, seems this is now part of libpython; let's see what this means for us in the future * blake2 hash (from OpenSSL) detection needs some fixing; will upstream added patch 002-fix-blake2-detection.patch * removed all bpo patches; those should be fixed in upstream * some needed to be manually re-applied as stuff changed: - 001-enable-zlib.patch - file changed - 004-do-not-write-bytes-codes.patch - file changed - 015-abort-on-failed-modules.patch - variable was renamed cross_compiling -> CROSS_COMPILING * 017_lib2to3_fix_pyc_search.patch - the code changed, it does not seem to have the original problem with respect to file-extension, as there does not seem to be any special extension logic anymore there * 006-remove-multi-arch-and-local-paths.patch - dropped patch; I can't remember the full-details of this issue; it was something with Debian/Ubuntu's multi-arch stuff; it was probably added maybe due to some overzealous (on my part) thingy caused by some weird reports, that I could never solve; let's have this patch dropped and see * make package/python3/refresh to reduce fuzz for the rest Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
* python,python3: Fix CVE-2019-16056, CVE-2019-16935Jeffery To2019-10-042-1/+130
| | | | | | | | | | | | | | | These patches address issues: CVE-2019-16056: email.utils.parseaddr mistakenly parse an email CVE-2019-16935: A reflected XSS in python/Lib/DocXMLRPCServer.py (for Python 2.7) CVE-2019-16935 was fixed for python3 in #10109 Links to Python issues: https://bugs.python.org/issue34155 https://bugs.python.org/issue38243 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
* python3: backport three security patchesJosef Schlehofer2019-09-294-1/+298
| | | | | | Fixes: CVE-2019-16935 Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
* python,python3: split python[3]-pkg-resources from setuptoolsAlexandru Ardelean2019-09-203-3/+41
| | | | | | | | | | This package is required by other packages to run some binaries via `load_entry_point`. So, this splits this package away from setuptools. setuptools is pretty big, akd pkg-resources is also big, but not as big. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>