head 1.23; access; symbols pkgsrc-2023Q4:1.22.0.14 pkgsrc-2023Q4-base:1.22 pkgsrc-2023Q3:1.22.0.12 pkgsrc-2023Q3-base:1.22 pkgsrc-2023Q2:1.22.0.10 pkgsrc-2023Q2-base:1.22 pkgsrc-2023Q1:1.22.0.8 pkgsrc-2023Q1-base:1.22 pkgsrc-2022Q4:1.22.0.6 pkgsrc-2022Q4-base:1.22 pkgsrc-2022Q3:1.22.0.4 pkgsrc-2022Q3-base:1.22 pkgsrc-2022Q2:1.22.0.2 pkgsrc-2022Q2-base:1.22 pkgsrc-2022Q1:1.21.0.2 pkgsrc-2022Q1-base:1.21 pkgsrc-2021Q4:1.20.0.6 pkgsrc-2021Q4-base:1.20 pkgsrc-2021Q3:1.20.0.4 pkgsrc-2021Q3-base:1.20 pkgsrc-2021Q2:1.20.0.2 pkgsrc-2021Q2-base:1.20 pkgsrc-2021Q1:1.19.0.8 pkgsrc-2021Q1-base:1.19 pkgsrc-2020Q4:1.19.0.6 pkgsrc-2020Q4-base:1.19 pkgsrc-2020Q3:1.19.0.4 pkgsrc-2020Q3-base:1.19 pkgsrc-2020Q2:1.19.0.2 pkgsrc-2020Q2-base:1.19 pkgsrc-2020Q1:1.18.0.6 pkgsrc-2020Q1-base:1.18 pkgsrc-2019Q4:1.18.0.8 pkgsrc-2019Q4-base:1.18 pkgsrc-2019Q3:1.18.0.4 pkgsrc-2019Q3-base:1.18 pkgsrc-2019Q2:1.18.0.2 pkgsrc-2019Q2-base:1.18 pkgsrc-2019Q1:1.17.0.16 pkgsrc-2019Q1-base:1.17 pkgsrc-2018Q4:1.17.0.14 pkgsrc-2018Q4-base:1.17 pkgsrc-2018Q3:1.17.0.12 pkgsrc-2018Q3-base:1.17 pkgsrc-2018Q2:1.17.0.10 pkgsrc-2018Q2-base:1.17 pkgsrc-2018Q1:1.17.0.8 pkgsrc-2018Q1-base:1.17 pkgsrc-2017Q4:1.17.0.6 pkgsrc-2017Q4-base:1.17 pkgsrc-2017Q3:1.17.0.4 pkgsrc-2017Q3-base:1.17 pkgsrc-2017Q2:1.14.0.2 pkgsrc-2017Q2-base:1.14 pkgsrc-2017Q1:1.13.0.8 pkgsrc-2017Q1-base:1.13 pkgsrc-2016Q4:1.13.0.6 pkgsrc-2016Q4-base:1.13 pkgsrc-2016Q3:1.13.0.4 pkgsrc-2016Q3-base:1.13 pkgsrc-2016Q2:1.13.0.2 pkgsrc-2016Q2-base:1.13 pkgsrc-2016Q1:1.12.0.14 pkgsrc-2016Q1-base:1.12 pkgsrc-2015Q4:1.12.0.12 pkgsrc-2015Q4-base:1.12 pkgsrc-2015Q3:1.12.0.10 pkgsrc-2015Q3-base:1.12 pkgsrc-2015Q2:1.12.0.8 pkgsrc-2015Q2-base:1.12 pkgsrc-2015Q1:1.12.0.6 pkgsrc-2015Q1-base:1.12 pkgsrc-2014Q4:1.12.0.4 pkgsrc-2014Q4-base:1.12 pkgsrc-2014Q3:1.12.0.2 pkgsrc-2014Q3-base:1.12 pkgsrc-2014Q2:1.11.0.2 pkgsrc-2014Q2-base:1.11 pkgsrc-2014Q1:1.10.0.2 pkgsrc-2014Q1-base:1.10 pkgsrc-2013Q4:1.4.0.4 pkgsrc-2013Q4-base:1.4 pkgsrc-2013Q3:1.4.0.2 pkgsrc-2013Q3-base:1.4; locks; strict; comment @# @; 1.23 date 2024.01.25.11.16.11; author adam; state Exp; branches; next 1.22; commitid symjlMcxpjG40PVE; 1.22 date 2022.05.01.09.17.48; author wiz; state Exp; branches; next 1.21; commitid Hhz1Uirttad0JkCD; 1.21 date 2022.01.04.20.54.35; author wiz; state Exp; branches; next 1.20; commitid CYyhdK9qtoffkmnD; 1.20 date 2021.05.06.10.36.08; author adam; state Exp; branches; next 1.19; commitid OoigsCgtetYgJ4SC; 1.19 date 2020.05.17.19.16.38; author adam; state Exp; branches; next 1.18; commitid gQ56XlTTwZ3iZC8C; 1.18 date 2019.04.05.13.03.11; author adam; state Exp; branches; next 1.17; commitid QpB4CTvBlIUe2aiB; 1.17 date 2017.09.16.19.27.06; author wiz; state Exp; branches; next 1.16; commitid A7fIQ99zTdcMls7A; 1.16 date 2017.07.30.22.32.20; author wiz; state Exp; branches; next 1.15; commitid gjZWVQWOLKneVi1A; 1.15 date 2017.07.17.08.03.50; author adam; state Exp; branches; next 1.14; commitid 1asHX0O5u5OZwyZz; 1.14 date 2017.04.09.16.43.03; author adam; state Exp; branches; next 1.13; commitid n9galrNjihgCASMz; 1.13 date 2016.06.08.17.43.38; author wiz; state Exp; branches; next 1.12; commitid z4yEulWexjFaJG9z; 1.12 date 2014.07.16.23.15.12; author rodent; state Exp; branches; next 1.11; commitid foctnlF9rAi4QEIx; 1.11 date 2014.04.19.17.54.28; author rodent; state Exp; branches; next 1.10; commitid y4Nzl13gh3o7Tjxx; 1.10 date 2014.02.20.00.47.28; author rodent; state Exp; branches; next 1.9; commitid lDEf3IZ6pc7z4Mpx; 1.9 date 2014.02.18.02.53.37; author rodent; state Exp; branches; next 1.8; commitid woxZq3U1hC8TOwpx; 1.8 date 2014.01.19.18.48.00; author wiz; state Exp; branches; next 1.7; commitid Ul1ltZwP2s895Llx; 1.7 date 2014.01.17.13.13.28; author wiz; state Exp; branches; next 1.6; commitid hMJy9o0ItQ6litlx; 1.6 date 2013.12.31.15.47.24; author rodent; state Exp; branches; next 1.5; commitid HXIkiTuMlxKTGijx; 1.5 date 2013.12.31.13.27.51; author rodent; state Exp; branches; next 1.4; commitid WEb9ZKxMfxGWUhjx; 1.4 date 2013.09.20.12.42.04; author wiz; state Exp; branches; next 1.3; commitid 60WQNa5l91sLWa6x; 1.3 date 2013.09.20.12.21.48; author rodent; state Exp; branches; next 1.2; commitid QKrVTuMYY8gLPa6x; 1.2 date 2013.07.28.20.41.41; author wiz; state Exp; branches; next 1.1; commitid ANjb83rwQz6WkhZw; 1.1 date 2013.07.02.11.08.27; author rodent; state Exp; branches; next ; commitid PhjZVqd0EgA70TVw; desc @@ 1.23 log @py-billiard: updated to 4.2.0 4.2.0 - 2023-11-06 -------------------- - Update process.py to close during join only if process has completed. - Adjust the __repr__ in ApplyResult. - Remove python 3.7 from CI. - Added Python 3.12 support. - Fixed (co_positions): resolve issue caused by absence co_positions - Fixed: Replaced mktemp usage for Python 3 from python 2. - Changed nose test to pytest - Changed nose dependency for unit test 4.1.0 - 2022-12-14 -------------------- - Fixed a python 2 to 3 compat issue which was missed earlier - Adde Python 3.11 primary support 4.0.2 - 2022-08-03 -------------------- - ExceptionWithTraceback should be an exception. 4.0.1 - 2022-08-01 -------------------- - Add support for Python 3.11 _posixsubprocess.fork_exec() arguments. - Keep exception traceback somehow 4.0.0 - 2022-04-24 -------------------- - Support Sphinx 4.x. - Remove dependency to case. - Drop support of Python < 3.7. - Update to psutil 5.9.0. - Add python_requires to enforce Python version. - Replace deprecated threading Event.isSet with Event.is_set. - Prevent segmentation fault in get_pdeathsig while using ctypes - Migrated CI to Github actions. - Python 3.10 support added. @ text @# $NetBSD: Makefile,v 1.22 2022/05/01 09:17:48 wiz Exp $ DISTNAME= billiard-4.2.0 PKGNAME= ${PYPKGPREFIX}-${DISTNAME} CATEGORIES= parallel python MASTER_SITES= ${MASTER_SITE_PYPI:=b/billiard/} MAINTAINER= pkgsrc-users@@NetBSD.org HOMEPAGE= https://github.com/celery/billiard COMMENT= Python multiprocessing fork with improvements and bugfixes LICENSE= modified-bsd TOOL_DEPENDS+= ${PYPKGPREFIX}-setuptools-[0-9]*:../../devel/py-setuptools TOOL_DEPENDS+= ${PYPKGPREFIX}-wheel-[0-9]*:../../devel/py-wheel USE_LANGUAGES= # none PYTHON_VERSIONS_INCOMPATIBLE= 27 .include "../../lang/python/wheel.mk" .include "../../mk/bsd.pkg.mk" @ 1.22 log @py-case, py-billiard: not for python 2.x @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.21 2022/01/04 20:54:35 wiz Exp $ d3 1 a3 1 DISTNAME= billiard-3.6.4.0 a4 1 PKGREVISION= 1 d13 2 a14 4 TEST_DEPENDS+= ${PYPKGPREFIX}-case>=1.3.1:../../devel/py-case TEST_DEPENDS+= ${PYPKGPREFIX}-test-runner-[0-9]*:../../devel/py-test-runner PYTHON_VERSIONS_INCOMPATIBLE= 27 d18 1 a18 1 PYSETUPTESTTARGET= pytest d20 1 a20 1 .include "../../lang/python/egg.mk" @ 1.21 log @*: bump PKGREVISION for egg.mk users They now have a tool dependency on py-setuptools instead of a DEPENDS @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.20 2021/05/06 10:36:08 adam Exp $ d17 2 a18 3 .include "../../lang/python/pyversion.mk" # builds _billiard.so .if ${_PYTHON_VERSION} != 27 a19 1 .endif @ 1.20 log @py-billiard: updated to 3.6.4.0 3.6.4.0 - Issue 309: Add Python 3.9 support to spawnv_passfds() - fix 314 @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.19 2020/05/17 19:16:38 adam Exp $ d5 1 @ 1.19 log @py-billiard: updated to 3.6.3.0 3.6.1: - Logging max memory reached at INFO rather than WARNING - Pass arguments when wrapping sys.exit - Remove win32/py2k special - Ensure READY messages sent out by exiting worker are consumed prior to it actually existing. - Pass max_memory_per_child to child worker process - Fix compatibility with Python 2.7 on Windows @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.18 2019/04/05 13:03:11 adam Exp $ d3 1 a3 1 DISTNAME= billiard-3.6.3.0 @ 1.18 log @py-billiard: updated to 3.6.0.0 3.6.0.0: - Add support of sending parent process death signal. - Previous fix for handling timeouts caused a problem in warm shutdowns due to use of deepcopy. We now use a shallow copy of the cache and do so only when it is needed. - Cleanup old checks and workarounds for Python versions we no longer support. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.17 2017/09/16 19:27:06 wiz Exp $ d3 1 a3 1 DISTNAME= billiard-3.6.0.0 d14 1 a14 1 TEST_DEPENDS+= ${PYPKGPREFIX}-test>=3.0:../../devel/py-test d18 1 a18 3 .if ${_PYTHON_VERSION} == 27 USE_LANGUAGES= c .else d22 2 @ 1.17 log @Reset maintainer @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.16 2017/07/30 22:32:20 wiz Exp $ d3 1 a3 1 DISTNAME= billiard-3.5.0.3 d5 1 a5 1 CATEGORIES= parallel d13 2 a14 2 BUILD_DEPENDS+= ${PYPKGPREFIX}-case>=1.3.1:../../devel/py-case BUILD_DEPENDS+= ${PYPKGPREFIX}-test>=3.0:../../devel/py-test d18 1 a18 1 .if "${PYPKGPREFIX}" == "py27" d21 1 a21 1 USE_LANGUAGES= # empty @ 1.16 log @Switch github HOMEPAGEs to https. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.15 2017/07/17 08:03:50 adam Exp $ d8 1 a8 1 MAINTAINER= rodent@@NetBSD.org @ 1.15 log @3.5.0.3: - Adds Process._authkey alias to .authkey for 2.7 compat. - Remove superfluous else clause from max_memory_per_child_check. - Document and test all supported Python versions. - Extend 'Process' to be compatible with < Py3.5. - Use a properly initialized logger in pool.py error logging. - _trywaitkill can now kill a whole process group if the worker process declares itself as a group leader. - Fix cpython issue 14881 (See http://bugs.python.org/issue14881). - Fix for a crash on windows. - Fix messaging in case of worker exceeds max memory. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.14 2017/04/09 16:43:03 adam Exp $ d9 1 a9 1 HOMEPAGE= http://github.com/celery/billiard @ 1.14 log @Changes 3.5.0.2: - max_memory_per_child was measured in kilobytes on Linux, but bytes on *BSD/MacOS, it's now always kilobytes. - Windows: Adds support for max_memory_per_child, but requires the ``psutil`` package to be installed. - Fixed bug in ForkingPickler.loadbuf, where it tried to pass a BytesIO instance directly to ``pickle.loads`` on Python 2.7. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.13 2016/06/08 17:43:38 wiz Exp $ d3 1 a3 1 DISTNAME= billiard-3.5.0.2 d13 3 a23 1 .include "../../lang/python/application.mk" @ 1.13 log @Switch to MASTER_SITES_PYPI. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.12 2014/07/16 23:15:12 rodent Exp $ d3 1 a3 1 DISTNAME= billiard-3.3.0.18 a12 3 USE_LANGUAGES+= c REPLACE_PYTHON+= funtests/setup.py funtests/tests/test_multiprocessing.py d14 6 a19 3 TWO_OR_THREE= ${PYPKGPREFIX:C/([0-9])[0-9]/\1/1} PLIST_SUBST+= PY_VER_MAJ=${TWO_OR_THREE} @ 1.12 log @3.3.0.18 - 2014-06-20 --------------------- - Now compiles on GNU/kFreeBSD - Pool: `AF_PIPE` address fixed so that it works on recent Windows versions in combination with Python 2.7.7. - Pool: Fix for `Supervisor object has no attribute _children` error. - Pool: Fixed bug with human_status(None). - Pool: shrink did not work properly if asked to remove more than 1 process. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.11 2014/04/19 17:54:28 rodent Exp $ d6 1 a6 1 MASTER_SITES= https://pypi.python.org/packages/source/b/billiard/ @ 1.11 log @Updated to latest release 3.3.17. Remove py26 incompatibility directive. This seems to have been fixed in a previous version. At least "import billiard" works from the interpreter. From CHANGES.txt: - Fixes SemLock on Python 3.4 (Issue #107) when using ``forking_enable(False)``. - Pool: Include more useful exitcode information when processes exit. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.10 2014/02/20 00:47:28 rodent Exp $ d3 1 a3 1 DISTNAME= billiard-3.3.0.17 @ 1.10 log @Use PLIST.py2x as provided by the infrastructure. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.9 2014/02/18 02:53:37 rodent Exp $ d3 1 a3 1 DISTNAME= billiard-3.3.0.16 a15 2 PYTHON_VERSIONS_INCOMPATIBLE= 26 @ 1.9 log @Updated to latest release, 3.3.0.16. Some important changes to note: 1) The shared library isn't installed with py33. The package uses a pure python implementation; 2) The connection and reduction functions are installed in different directory names depending on python major version. From CHANGES.txt: 3.3.0.16 - 2014-02-11 --------------------- - Previous release was missing the billiard.py3 package from MANIFEST so the installation would not work on Python 3. 3.3.0.15 - 2014-02-10 --------------------- - Pool: Fixed "cannot join process not started" error. - Now uses billiard.py2 and billiard.py3 specific packages that are installed depending on the python version used. This way the installation will not import version specific modules (and possibly crash). 3.3.0.14 - 2014-01-17 --------------------- - Fixed problem with our backwards compatible ``bytes`` wrapper (Issue #103). - No longer expects frozen applications to have a valid ``__file__`` attribute. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.8 2014/01/19 18:48:00 wiz Exp $ a22 7 .include "../../mk/bsd.fast.prefs.mk" PLIST_VARS+= py2 .if ${TWO_OR_THREE} != "py3" PLIST.py2= yes .endif @ 1.8 log @Fix PLIST for python-3.x. Remove FETCH_USING, not package-setable. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.7 2014/01/17 13:13:28 wiz Exp $ d3 1 a3 1 DISTNAME= billiard-3.3.0.13 d18 12 @ 1.7 log @Mark as PYTHON_VERSIONS_INCOMPATIBLE=26: SyntaxError: ('invalid syntax', ('/usr/pkg/lib/python2.6/site-packages/billiard/_connection3.py', 851, 47, ' _ready_errors = {_winapi.ERROR_BROKEN_PIPE, _winapi.ERROR_NETNAME_DELETED}\n')) @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.6 2013/12/31 15:47:24 rodent Exp $ a6 1 FETCH_USING= curl @ 1.6 log @Needs USE_LANGUAGES+=c to compile C extensions and shared library. Fixes build on NetBSD-6.0/i386, likely. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.5 2013/12/31 13:27:51 rodent Exp $ d17 2 @ 1.5 log @Updated to latest release, 3.3.0.13. Note changes to some files in the PLIST. From ChangeLog: 3.3.0.13 - 2013-12-13 --------------------- - Fixes compatability with Python < 2.7.6 - No longer attempts to handle ``SIGBUS`` - Non-thread based pool now only handles signals: ``SIGHUP``, ``SIGQUIT``, ``SIGTERM``, ``SIGUSR1``, ``SIGUSR2``. - setup.py: Only show compilation warning for build related commands. 3.3.0.12 - 2013-12-09 --------------------- - Fixed installation for Python 3. - Pool: Fixed bug with maxtasksperchild. - Pool: Fixed bug in maintain_pool. 3.3.0.11 - 2013-12-03 --------------------- - Fixed Unicode error when installing the distribution (Issue #89). - Daemonic processes are now allowed to have children. But note that it will not be possible to automatically terminate them when the process exits. - Pool: Would not always be able to detect that a process exited. 3.3.0.10 - 2013-12-02 --------------------- - Windows: Fixed problem with missing ``WAITABANDONED_0`` - Windows: PipeConnection can now be inherited. 3.3.0.9 - 2013-12-02 -------------------- - Temporary workaround for Celery maxtasksperchild issue. 3.3.0.8 - 2013-11-21 -------------------- - Now also sets ``multiprocessing.current_process`` for compatibility with loggings ``processName`` field. 3.3.0.7 - 2013-11-15 -------------------- - Fixed compatibility with PyPy 2.1 + 2.2. - Fixed problem in pypy detection. - Now uses ``ctypes.find_library`` instead of hardcoded path to find the OS X CoreServices framework. 3.3.0.6 - 2013-11-12 -------------------- - Now works without C extension again. - New ``_billiard.read(fd, buffer, [len, ])` function implements os.read with buffer support (new buffer API) - New pure-python implementation of ``Connection.send_offset``. 3.3.0.5 - 2013-11-11 -------------------- - All platforms except for Windows/PyPy/Jython now requires the C extension. 3.3.0.4 - 2013-11-11 -------------------- - Fixed problem with Python3 and setblocking. 3.3.0.3 - 2013-11-09 -------------------- - Now works on Windows again. 3.3.0.2 - 2013-11-08 -------------------- - ApplyResult.terminate() may be set to signify that the job must not be executed. It can be used in combination with Pool.terminate_job. - Pipe/_SimpleQueue: Now supports rnonblock/wnonblock arguments to set the read or write end of the pipe to be nonblocking. - Pool: Log message included exception info but exception happened in another process so the resulting traceback was wrong. - Pool: Worker process can now prepare results before they are sent back to the main process (using ``Worker.prepare_result``). 3.3.0.1 - 2013-11-04 -------------------- - Pool: New ``correlation_id`` argument to ``apply_async`` can be used to set a related id for the ``ApplyResult`` object returned: >>> r = pool.apply_async(target, args, kwargs, correlation_id='foo') >>> r.correlation_id 'foo' - Pool: New callback `on_process_exit` is called when a pool process exits, with signature ``(pid, exitcode)``. - Pool: Improved the too many restarts detection. 3.3.0.0 - 2013-10-14 -------------------- - Dual code base now runs on Python 2.6+ and Python 3. - No longer compatible with Python 2.5 - Includes many changes from multiprocessing in 3.4. - Now uses ``time.monotonic`` when available, also including fallback implementations for Linux and OS X. - No longer cleans up after receiving SIGILL, SIGSEGV or SIGFPE - ``Finalize`` and ``register_after_fork`` is now aliases to multiprocessing. It's better to import these from multiprocessing directly now so that there aren't multiple registries. - New `billiard.queues._SimpleQueue` that does not use semaphores. - Pool: Can now be extended to support using multiple IPC queues. - Pool: Can now use async I/O to write to pool IPC queues. - Pool: New ``Worker.on_loop_stop`` handler can be used to add actions at pool worker process shutdown. Note that, like all finalization handlers, there is no guarantee that this will be executed. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.4 2013/09/20 12:42:04 wiz Exp $ d14 1 @ 1.4 log @Remove curl dependency, put file on nbftp. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.3 2013/09/20 12:21:48 rodent Exp $ d3 1 a3 1 DISTNAME= billiard-2.7.3.32 d6 2 a7 1 MASTER_SITES= http://pypi.python.org/packages/source/b/billiard/ @ 1.3 log @Updated to latest release. From CHANGES.txt: 2.7.3.32 - 2012-08-16 --------------------- - Fixed compatibility with Python 3.3 - Process boostrap: Now ignores errors while flushing stdout (Issue #16). @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.2 2013/07/28 20:41:41 wiz Exp $ a6 1 FETCH_USING= curl @ 1.2 log @Update to 2.7.3.31: 2.7.3.31 - 2012-07-04 --------------------- - Recent changes broke support for running without C extension (Issue #57). @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.1 2013/07/02 11:08:27 rodent Exp $ d3 1 a3 1 DISTNAME= billiard-2.7.3.31 d7 1 @ 1.1 log @Import py27-billiard-2.7.3.30 as parallel/py-billiard. billiard is a fork of the Python 2.7 multiprocessing package. The multiprocessing package itself is a renamed and updated version of R Oudkerk's pyprocessing package. This standalone variant is intended to be compatible with Python 2.4 and 2.5, and will draw it's fixes/improvements from python-trunk. * Also it is a fork of the multiprocessin backport package by Christian Heims; * It includes the no-execv patch contributed by R. Oudkerk; * And the Pool improvements previously located in Celery; @ text @d1 1 a1 2 # $NetBSD$ # d3 1 a3 1 DISTNAME= billiard-2.7.3.30 @