Ë
    ­Ó^j¤  ã                  óô  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZmZ ddlmZ ddlmZ ddlmZmZmZ ddlmZ dd	lmZmZmZmZm Z m!Z!m"Z"m#Z# dd
l$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+ erddl,m-Z-m.Z. ed   Z/dZ0de1d<   dZ2de1d<    e3edd«      Z4de1d<    e3edd«      Z5de1d<   e
jl                  dk7  xr ejn                  ejp                  v Z9de1d<    e«       Z:de1d<    ejv                  «       a<de1d<    e=«       Z>d e1d!<    G d"„ d#e?«      Z@ G d$„ d%e@¬&«      ZA G d'„ d(ej„                  «      ZCdd)œd@d*„ZDdAd+„ZEdd)œdBd,„ZFdd)œdCd-„ZGdDd.„ZHdd)œdEd/„ZIdd)œ	 	 	 	 	 	 	 	 	 dFd0„ZJdd)œdGd1„ZKdHd2„ZLdId3„ZMdJd4„ZN ed5¬6«       G d7„ d8«      «       ZOe G d9„ d:«      «       ZP ed5¬6«       G d;„ d<«      «       ZQe G d=„ d>«      «       ZRdKd?„ZS ej¨                  eS«        e eA«       d%gZUy)LzZCross-process and cross-host reader/writer lock built on :class:`SoftFileLock` primitives.é    )ÚannotationsN)ÚcontextmanagerÚsuppress)Ú	dataclass)ÚPath)ÚTYPE_CHECKINGÚFinalÚLiteral)ÚWeakValueDictionary)ÚAcquireReturnProxyÚ_ensure_current_processÚ_fork_transitionÚ_raise_grouped_errorsÚ_register_fork_classÚ_register_fork_objectÚ_register_owned_descriptorÚ_unregister_owned_descriptor)ÚTimeout)ÚSoftFileLock)Úensure_directory_existsÚtouchÚ	write_all)ÚCallableÚ	Generator)ÚreadÚwritez.breakz
Final[str]Ú_BREAK_SUFFIXi   z
Final[int]Ú_MAX_MARKER_SIZEÚ
O_NOFOLLOWÚ_O_NOFOLLOWÚ
O_NONBLOCKÚ_O_NONBLOCKÚwin32zFinal[bool]Ú_SUPPORTS_DIR_FDz2Final[WeakValueDictionary[int, SoftReadWriteLock]]Ú_ALL_INSTANCESúthreading.LockÚ_ALL_INSTANCES_LOCKzFinal[set[Path]]Ú_SINGLETONS_UNDER_CONSTRUCTIONc                  óf   ‡ — e Zd ZU ded<   ded<   	 ddddddd	œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd
„Zˆ xZS )Ú_SoftRWMetaú,WeakValueDictionary[Path, SoftReadWriteLock]Ú
_instanceszthreading.RLockÚ_instances_lockTç      >@Nç      Ð?©ÚblockingÚis_singletonÚheartbeat_intervalÚstale_thresholdÚpoll_intervalc          
     ó  •— t        «        |st        ‰| �	  |||||||¬«      S t        |«      j	                  «       }| j
                  5  | j                  j                  |«      }	|	€¡|t        v rd|›�}
t        |
«      ‚t        j                  «       }t        j                  |«       	 t        ‰| �	  |||||||¬«      }	t        j                  |«       t        j                  «       |k7  rd}
t        |
«      ‚|	| j                  |<   nK|	j                  |k7  s|	j                  |k7  r-d|	j                  › d|	j                  › d|› d|› �}
t!        |
«      ‚|	cd d d «       S # t        j                  |«       w xY w# 1 sw Y   y xY w)Nr0   z2Singleton lock construction is already active for zOLock construction cannot continue after fork; construct a new lock in the childz$Singleton lock created with timeout=z, blocking=z, cannot be changed to timeout=)r   ÚsuperÚ__call__r   Úresolver-   r,   Úgetr(   ÚRuntimeErrorÚosÚgetpidÚaddÚdiscardÚtimeoutr1   Ú
ValueError)ÚclsÚ	lock_filer@   r1   r2   r3   r4   r5   Ú
normalizedÚinstanceÚmsgÚconstruction_pidÚ	__class__s               €úb/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/filelock/_soft_rw/_sync.pyr8   z_SoftRWMeta.__call__:   s¥  ø€ ô 	 Ô!ÙÜ‘7Ñ#ØØØ!Ø)Ø#5Ø /Ø+ð $ó ð ô ˜)“_×,Ñ,Ó.ˆ
Ø× Ñ ñ 	Ø—~‘~×)Ñ)¨*Ó5ˆHØÐØÔ!?Ñ?ØNÈyÈmÐ\�CÜ& sÓ+Ð+Ü#%§9¡9£;Ð Ü.×2Ñ2°:Ô>ðGÜ$™wÑ/Ø!ØØ!)Ø%1Ø+=Ø(7Ø&3ð  0ó  �Hô 3×:Ñ:¸:ÔFÜ—9‘9“;Ð"2Ò2Øk�CÜ& sÓ+Ð+Ø-5�—‘˜zÒ*Ø×!Ñ! WÒ,°×0AÑ0AÀXÒ0Mà:¸8×;KÑ;KÐ:LÈKÐX`×XiÑXiÐWjð k5Ø5<°I¸[ÈÈ
ðTð ô ! “oÐ%Ø÷=	ñ 	øô& 3×:Ñ:¸:ÕFú÷'	ð 	ús&   Á	AE8Â)EÂ?BE8ÅE5Å5E8Å8F©éÿÿÿÿ)rC   ústr | os.PathLike[str]r@   Úfloatr1   Úboolr2   rN   r3   rM   r4   úfloat | Noner5   rM   ÚreturnÚSoftReadWriteLock)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r8   Ú__classcell__©rH   s   @rI   r*   r*   6   s‚   ø… Ø<Ó<Ø$Ó$ð
 ð6ð
 Ø!Ø$(Ø(,Ø#ñ6à)ð6ð ð6ð
 ð6ð ð6ð "ð6ð &ð6ð ð6ð 
÷6ñ 6ó    r*   c                  óö  — e Zd ZU dZ e«       Zded<    ej                  «       Z		 d$ddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%d	„Z
ed&d
„«       Zed'ddœd(d„«       Zed'ddœd(d„«       Zd'ddœd)d„Zd'ddœd)d„Ze	 d$ddœ	 	 	 	 	 	 	 d*d„«       Zd&d„Zddœd+d„Zd,d„Z	 	 	 	 	 	 	 	 d-d„Z	 	 	 	 	 	 	 	 	 	 d.d„Zd/d„Z	 	 	 	 	 	 	 	 d0d„Zd1d„Zd1d„Z	 	 	 	 	 	 	 	 d0d„Z	 	 	 	 	 	 	 	 d2d„Zd&d„Zd3d„Zd4d „Z d5d!„Z!d3d"„Z"d&d#„Z#y)6rQ   u°
  
    Cross-process and cross-host reader/writer lock built on :class:`SoftFileLock` primitives.

    Use this class instead of :class:`~filelock.ReadWriteLock` when the lock file lives on a network
    filesystem (NFS, Lustre with ``-o flock``, HPC cluster shared storage). ``ReadWriteLock`` is backed
    by SQLite and cannot run on NFS because SQLite's ``fcntl`` locking is unreliable there.

    Layout on disk for a lock at ``foo.lock``:

    - ``foo.lock.state`` â€” a :class:`SoftFileLock` taken only during state transitions (microseconds).
    - ``foo.lock.write`` â€” writer marker; its presence means a writer is claiming or holding the lock.
    - ``foo.lock.readers/<host>.<pid>.<uuid>`` â€” one file per reader.

    Each marker stores a random token (``secrets.token_hex(16)``), the holder's pid, and the holder's
    hostname. A daemon heartbeat thread refreshes ``mtime`` on every held marker. A marker whose mtime
    has not advanced in ``stale_threshold`` seconds may be evicted by any process on any host, giving
    correct behavior when a compute node crashes with a lock held.

    Writer acquire is two-phase and writer-preferring: phase 1 claims ``.write`` (blocking any new
    reader), phase 2 waits for existing readers to drain. Writer starvation is impossible.

    Reentrancy, upgrade/downgrade rules, thread pinning, and singleton caching by resolved path match
    :class:`~filelock.ReadWriteLock`.

    Forking invalidates the inherited instance in the child so the child cannot double-own the lock with its parent;
    ``release()`` on that instance is a no-op, and the child must construct a new instance if it needs a lock.

    Trust boundary: protects against same-UID non-cooperating processes (one host or cross-host) and
    same-host different-UID users via ``0o600`` / ``0o700`` permissions. Does not protect against root
    compromise, NTP tampering on same-UID cross-host nodes, or multi-tenant mounts where hostile
    co-tenants share the UID.

    :param lock_file: path to the lock file; sidecar state/write/readers live next to it
    :param timeout: maximum wait time in seconds; ``-1`` means block indefinitely
    :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately on contention
    :param is_singleton: if ``True``, reuse existing instances for the same resolved path
    :param heartbeat_interval: seconds between heartbeat refreshes; default 30 s
    :param stale_threshold: seconds of ``mtime`` inactivity before a marker is stale; defaults to
        ``3 * heartbeat_interval``, matching etcd's ``LeaseKeepAlive`` convention
    :param poll_interval: seconds between acquire retries under contention; default 0.25 s

    .. versionadded:: 3.27.0

    r+   r,   Tr.   Nr/   r0   c               ó6  — t        j                  «       | _        |dk  rd|› �}t        |«      ‚|€|dz  }||k  rd|› d|› d�}t        |«      ‚|dk  rd|› �}t        |«      ‚t        j                  |«      | _        || _        || _        || _        || _	        || _
        t        | j
                  › d�| j
                  › d	�| j
                  › d
�¬«      | _        t        | j
                  «       t        t        j                   «       t        j                   «       t#        | j                  j$                  d¬«      ¬«      | _        d | _        d | _        d | _        d| _        t0        5  | t2        t5        | «      <   d d d «       t7        | «       y # 1 sw Y   ŒxY w)Nr   z)heartbeat_interval must be positive, got é   z0stale_threshold must exceed heartbeat_interval (z <= ú)z$poll_interval must be positive, got z.statez.writez.readers)Ústater   ÚreadersrK   ©r@   ©ÚinternalÚtransactionr]   F)r<   r=   Ú_creator_pidrA   ÚfspathrC   r@   r1   r3   r4   r5   Ú_PathsÚ_pathsr   Ú_LocksÚ	threadingÚLockr   r]   Ú_locksÚ_readers_dir_fdÚ_readers_dir_fd_tokenÚ_holdÚ_closedr'   r%   Úidr   )	ÚselfrC   r@   r1   r2   r3   r4   r5   rF   s	            rI   Ú__init__zSoftReadWriteLock.__init__¤   s‹  € ô ŸI™I›KˆÔØ Ò"Ø=Ð>PÐ=QÐRˆCÜ˜S“/Ð!ØÐ"Ø0°1Ñ4ˆOØÐ0Ò0ØDÀ_ÐDUÐUYÐZlÐYmÐmnÐoˆCÜ˜S“/Ð!Ø˜AÒØ8¸¸ÐHˆCÜ˜S“/Ð!ä Ÿi™i¨	Ó2ˆŒØ%ˆŒØ&ˆŒØ);ˆÔØ&5ˆÔØ$1ˆÔäØ—^‘^Ð$ FÐ+Ø—^‘^Ð$ FÐ+Ø—~‘~Ð& hÐ/ô
ˆŒô
 	  §¡Ô/ÜÜ—^‘^Ó%Ü!Ÿ™Ó(Ü˜tŸ{™{×0Ñ0¸"Ô=ô
ˆŒð
 ,0ˆÔØ15ˆÔ"Ø#'ˆŒ
Ø"ˆŒä ñ 	,Ø'+ŒNœ2˜d›8Ñ$÷	,ä˜dÕ#÷	,ð 	,ús   Å(FÆFc                ó¤   — t        j                  «       at        «       | _        t        j
                  «       | _        t        j                  «        y ©N)	rh   ri   r'   r   r,   ÚRLockr-   r(   Úclear)rB   s    rI   Ú_reset_class_after_forkz)SoftReadWriteLock._reset_class_after_fork×   s6   € ô (Ÿn™nÓ.ÐÜ,Ó.ˆŒÜ'Ÿo™oÓ/ˆÔÜ&×,Ñ,Õ.rX   ©r1   c             #  ó†   K  — | j                  ||¬«       	 d–— | j                  «        y# | j                  «        w xY w­w)a  
        Context manager that acquires and releases a shared read lock.

        Falls back to instance defaults for *timeout* and *blocking* when ``None``.

        :param timeout: maximum wait time in seconds, or ``None`` to use the instance default
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately; ``None`` uses the instance default

        :raises RuntimeError: if a write lock is already held on this instance
        :raises Timeout: if the lock cannot be acquired within *timeout* seconds

        rw   N)Úacquire_readÚrelease©rp   r@   r1   s      rI   Ú	read_lockzSoftReadWriteLock.read_lockß   s5   è ø€ ð 	×Ñ˜'¨HÐÔ5ð	Ûà�L‰L�NøˆD�L‰L�Nüó   ‚A—, ›A¬>¾Ac             #  ó†   K  — | j                  ||¬«       	 d–— | j                  «        y# | j                  «        w xY w­w)a@  
        Context manager that acquires and releases an exclusive write lock.

        Falls back to instance defaults for *timeout* and *blocking* when ``None``.

        :param timeout: maximum wait time in seconds, or ``None`` to use the instance default
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately; ``None`` uses the instance default

        :raises RuntimeError: if a read lock is already held, or a write lock is held by a different thread
        :raises Timeout: if the lock cannot be acquired within *timeout* seconds

        rw   N)Úacquire_writerz   r{   s      rI   Ú
write_lockzSoftReadWriteLock.write_lockó   s5   è ø€ ð 	×Ñ˜7¨XÐÔ6ð	Ûà�L‰L�NøˆD�L‰L�Nür}   c               ó*   — | j                  d||¬«      S )uf  
        Acquire a shared read lock.

        If this instance already holds a read lock, the lock level is incremented (reentrant). Attempting to acquire a
        read lock while holding a write lock raises :class:`RuntimeError` (downgrade not allowed). On the 0â†’1
        transition a daemon heartbeat thread is started that refreshes the reader marker's ``mtime`` every
        ``heartbeat_interval`` seconds so peers on other hosts do not evict the marker as stale.

        :param timeout: maximum wait time in seconds, or ``None`` to use the instance default; ``-1`` means block
            indefinitely
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable;
            ``None`` uses the instance default

        :returns: a proxy that can be used as a context manager to release the lock

        :raises RuntimeError: if a write lock is already held on this instance, if this instance was invalidated by
            :func:`os.fork`, or if :meth:`close` was called
        :raises Timeout: if the lock cannot be acquired within *timeout* seconds

        r   rw   ©Ú_acquirer{   s      rI   ry   zSoftReadWriteLock.acquire_read  s   € ð* �}‰}˜V W°xˆ}Ó@Ð@rX   c               ó*   — | j                  d||¬«      S )a¨  
        Acquire an exclusive write lock.

        If this instance already holds a write lock from the same thread, the lock level is incremented (reentrant).
        Attempting to acquire a write lock while holding a read lock raises :class:`RuntimeError` (upgrade not
        allowed). Write locks are pinned to the acquiring thread: a different thread trying to re-enter also raises
        :class:`RuntimeError`.

        Writer acquisition runs in two phases. Phase 1 atomically claims ``<path>.write`` via ``O_CREAT | O_EXCL``,
        which immediately blocks any new reader on any host. Phase 2 waits for existing readers to drain. Writer
        starvation is impossible: new readers see ``<path>.write`` during phase 2 and wait behind the pending writer.

        :param timeout: maximum wait time in seconds, or ``None`` to use the instance default; ``-1`` means block
            indefinitely
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable;
            ``None`` uses the instance default

        :returns: a proxy that can be used as a context manager to release the lock

        :raises RuntimeError: if a read lock is already held, if a write lock is held by a different thread, if this
            instance was invalidated by :func:`os.fork`, or if :meth:`close` was called
        :raises Timeout: if the lock cannot be acquired within *timeout* seconds

        r   rw   r‚   r{   s      rI   r   zSoftReadWriteLock.acquire_write  s   € ð2 �}‰}˜W g¸ˆ}ÓAÐArX   c               ó   —  | |||¬«      S )a  
        Return the singleton :class:`SoftReadWriteLock` for *lock_file*.

        :param lock_file: path to the lock file; sidecar state/write/readers live next to it
        :param timeout: maximum wait time in seconds; ``-1`` means block indefinitely
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable

        :returns: the singleton lock instance

        :raises ValueError: if an instance already exists for this path with different *timeout* or *blocking* values

        rw   © )rB   rC   r@   r1   s       rI   Úget_lockzSoftReadWriteLock.get_lock9  s   € ñ( �9˜g°Ô9Ð9rX   c                ó<  — | j                   t        j                  «       k7  ry| j                  d¬«       | j                  j
                  5  | j                  r
	 ddd«       yd| _        | j                  �|t        «       5  | j                  �t        | j                  «       d| _	        | j                  dc}| _        t        t        «      5  t        j                  |«       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)u  
        Release any held lock and release internal filesystem resources.

        Idempotent. After calling this method the instance can no longer acquire locks â€” subsequent acquires raise
        :class:`RuntimeError`. A fork-invalidated instance is closed without raising.
        NT©Úforce)rc   r<   r=   rz   rj   ra   rn   rk   r   rl   r   r   ÚOSErrorÚclose)rp   Úfds     rI   rŒ   zSoftReadWriteLock.closeO  só   € ð ×Ñ¤§	¡	£Ò+ØØ�‰˜4ˆÔ Ø�[‰[×!Ñ!ñ 	%Ø�|Š|Ø÷	%ð 	%ð  ˆDŒLØ×#Ñ#Ð/Ü%Ó'ñ %Ø×1Ñ1Ð=Ü4°T×5OÑ5OÔPØ15�DÔ.Ø/3×/CÑ/CÀTÐ,�B˜Ô,Ü!¤'Ó*ñ %ÜŸ™ œ÷%÷%÷	%ð 	%÷%ð %ú÷%ð %ú÷	%ð 	%úsC   ÁDÁ"DÁ?ADÃC:Ã!DÃ)DÃ:DÃ?DÄD	ÄDÄDFr‰   c               ó¶  — | j                   t        j                  «       k7  ry| j                  j                  5  | j
                  }|€3|r
	 ddd«       yd| j                  › dt        | «      › d�}t        |«      ‚|rd|_	        n|xj                  dz  c_	        |j                  dkD  r
	 ddd«       yd| _        ddd«       j                  j                  «        |j                  j                  | j                  dz   ¬«       |j                  r"t!        |j"                  | j$                  ¬	«       y| j'                  |j(                  «       y# 1 sw Y   Œ–xY w)
a8  
        Release one level of the current lock.

        When the lock level reaches zero the heartbeat thread is stopped and the held marker file is unlinked. On a
        fork-invalidated instance (that is, the child of a :func:`os.fork` call made while the parent held a lock)
        this method is a no-op so inherited ``with`` blocks can unwind cleanly in the child.

        :param force: if ``True``, release the lock completely regardless of the current lock level

        :raises RuntimeError: if no lock is currently held and *force* is ``False``

        NzCannot release a lock on ú (lock id: z) that is not heldr   é   g      ð?r_   ©Údir_fd)rc   r<   r=   rj   ra   rm   rC   ro   r;   ÚlevelÚheartbeat_stopÚsetÚheartbeat_threadÚjoinr3   Ú	is_readerÚ_unlinkÚmarker_namerk   Ú_unlink_writer_marker_if_oursÚtoken)rp   rŠ   ÚholdrF   s       rI   rz   zSoftReadWriteLock.releasef  s$  € ð ×Ñ¤§	¡	£Ò+ØØ�[‰[×!Ñ!ñ 	Ø—:‘:ˆDØˆ|ÙØ÷		ð 	ð
 2°$·.±.Ð1AÀÌRÐPTËXÈJÐVhÐi�Ü" 3Ó'Ð'ÙØ�•
à—
’
˜a‘•
Ø�z‰z˜AŠ~Ø÷	ð 	ð ˆDŒJ÷	ð" 	×Ñ×ÑÔ!Ø×Ñ×"Ñ"¨4×+BÑ+BÀSÑ+HÐ"ÔIØ�>Š>Ü�D×$Ñ$¨T×-AÑ-AÖBà×.Ñ.¨t¯z©zÕ:÷-	ð 	ús   ¹EÁAEÂ3EÅEc                óP  — | j                   j                  5  t        | j                  j                  «      x}€
	 d d d «       y |\  }}|� t        j                  |j                  |«      s
	 d d d «       y t        | j                  j                  «       d d d «       y # 1 sw Y   y xY wrs   )	rj   r]   Ú_read_markerrf   r   ÚhmacÚcompare_digestrœ   r™   )rp   rœ   r   ÚinfoÚ_s        rI   r›   z/SoftReadWriteLock._unlink_writer_marker_if_ours�  s‘   € ð �[‰[×Ññ 	'Ü$ T§[¡[×%6Ñ%6Ó7Ð7�Ð@Ø÷	'ð 	'ð ‰GˆD�!Øˆ|¤4×#6Ñ#6°t·z±zÀ5Ô#IØ÷	'ð 	'ô �D—K‘K×%Ñ%Ô&÷	'÷ 	'ñ 	'ús   —#BÁ(BÁ4BÂB%c               óÂ  — | j                   t        j                  «       k7  rd| j                  › d�}t	        |«      ‚|€| j
                  n|}|€| j                  n|}| j                  j                  5  | j                  rd| j                  › d�}t	        |«      ‚| j                  �| j                  |«      cd d d «       S 	 d d d «       t        j                  «       }|s'| j                  j                  j                  d¬«      }nS|dk(  r'| j                  j                  j                  d¬«      }n'| j                  j                  j                  d|¬«      }|st!        | j                  «      d ‚	 | j#                  ||||¬«      | j                  j                  j%                  «        S # 1 sw Y   ŒëxY w# | j                  j                  j%                  «        w xY w)	NzSoftReadWriteLock on z4 was invalidated by fork(); construct a new instancez has been closedFrw   rK   T)r1   r@   )rc   r<   r=   rC   r;   r@   r1   rj   ra   rn   rm   Ú_validate_reentrantÚtimeÚperf_counterrb   Úacquirer   Ú_do_acquire_innerrz   )rp   Úmoder@   r1   rF   ÚstartÚacquireds          rI   rƒ   zSoftReadWriteLock._acquireœ  s—  € ð ×Ñ¤§	¡	£Ò+Ø)¨$¯.©.Ð)9Ð9mÐnˆCÜ˜sÓ#Ð#Ø") /�$—,’,°wˆØ$,Ð$4�4—=’=¸(ˆà�[‰[×!Ñ!ñ 	6Ø�|Š|Ø-¨d¯n©nÐ-=Ð=MÐN�Ü" 3Ó'Ð'Ø�z‰zÐ%Ø×/Ñ/°Ó5÷	6ñ 	6ð &÷		6ô ×!Ñ!Ó#ˆÙØ—{‘{×.Ñ.×6Ñ6ÀÐ6ÓF‰HØ˜Š]Ø—{‘{×.Ñ.×6Ñ6ÀÐ6ÓE‰Hà—{‘{×.Ñ.×6Ñ6ÀÈgÐ6ÓVˆHÙÜ˜$Ÿ.™.Ó)¨tÐ3ð	.Ø×)Ñ)¨$°¸ÈÐ)ÓRà�K‰K×#Ñ#×+Ñ+Õ-÷'	6ð 	6ûð& �K‰K×#Ñ#×+Ñ+Õ-ús   Á3AF,Å3F8 Æ,F5Æ8&Gc               óÊ  — | j                   j                  5  | j                  �| j                  |«      cd d d «       S 	 d d d «       |dk(  rd n||z   }t	        j
                  d«      }|dk(  r| j                  |||¬«      \  }}n| j                  |||¬«      \  }}t        j                  «       }	t        | j                  | j                  |	dt        | «      d›�¬«      }
| j                   j                  5  t        d||dk(  rt        j                  «       nd ||||
|	¬	«      | _        d d d «       |
j!                  «        t#        | ¬
«      S # 1 sw Y   �ŒxY w# 1 sw Y   Œ2xY w)NrK   é   r   ©Údeadliner1   zfilelock-heartbeat-Úx)ÚrefreshÚintervalÚ
stop_eventÚnamer�   )r“   rª   Úwrite_thread_idrš   r˜   rœ   r–   r”   ©Úlock)rj   ra   rm   r¥   ÚsecretsÚ	token_hexÚ_acquire_writer_slotÚ_acquire_reader_slotrh   ÚEventÚ_HeartbeatThreadÚ_refresh_markerr3   ro   Ú_HoldÚ	get_identr«   r   )rp   rª   Úeffective_timeoutr«   r1   r°   rœ   rš   r˜   r´   Ú	heartbeats              rI   r©   z#SoftReadWriteLock._do_acquire_inner¾  s]  € ð �[‰[×!Ñ!ñ 	6Ø�z‰zÐ%Ø×/Ñ/°Ó5÷	6ñ 	6Ø%÷	6ð -°Ò2‘4¸Ð@QÑ8QˆÜ×!Ñ! "Ó%ˆØ�7Š?Ø%)×%>Ñ%>¸uÈxÐbjÐ%>Ó%kÑ"ˆK™à%)×%>Ñ%>¸uÈxÐbjÐ%>Ó%kÑ"ˆK˜Ü—_‘_Ó&ˆ
Ü$Ø×(Ñ(Ø×,Ñ,Ø!Ø&¤r¨$£x° lÐ3ô	
ˆ	ð �[‰[×!Ñ!ñ 
	ÜØØØ9=Àº¤	× 3Ñ 3Ô 5ÈdØ'Ø#ØØ!*Ø)ô	ˆDŒJ÷
	ð 	�‰ÔÜ! tÔ,Ð,÷9	6ñ 	6ú÷ 
	ð 
	ús   —EÃ62EÅEÅE"c                óÂ  — | j                   }|€J ‚|j                  |k7  rB|dk(  rdnd}|dk(  rdnd}d|› d| j                  › dt        | «      › d|› d	|› d
�}t	        |«      ‚|dk(  rYt        j                  «       x}|j                  k7  r6d| j                  › dt        | «      › d|› d|j                  › �}t	        |«      ‚|xj                  dz  c_        t        | ¬«      S )Nr   r   Ú	downgradeÚupgradezCannot acquire z	 lock on r�   z): already holding a z lock (z not allowed)zCannot acquire write lock on z) from thread z while it is held by thread r�   r·   )
rm   rª   rC   ro   r;   rh   rÁ   r¶   r“   r   )rp   rª   r�   ÚoppositeÚ	directionrF   Úcurs          rI   r¥   z%SoftReadWriteLock._validate_reentrantä  s  € Ø�z‰zˆØÐÐÐØ�9‰9˜ÒØ"&¨&¢.‘w°fˆHØ'+¨v¢~™¸9ˆIà! $  y°·±Ð0@ÀÌBÈtËHÈ:ð V%Ø%- J¨g°i°[ÀðOð ô ˜sÓ#Ð#Ø�7Š?¤y×':Ñ':Ó'<Ð < À×AUÑAUÒUà/°·±Ð/?¸{Ì2ÈdË8È*ð UØ"˜eÐ#?À×@TÑ@TÐ?UðWð ô ˜sÓ#Ð#Ø�
Š
�a‰�
Ü! tÔ,Ð,rX   c               ó  ‡ ‡— ‰ j                  «        dˆ ˆfd„}dˆ ˆfd„}‰ j                  |||¬«       	 ‰ j                  |||¬«       ‰ j                  j
                  dfS # t        $ r ‰ j                  ‰«       ‚ w xY w)Nc                 ó~   •— ‰ j                   j                  5  ‰ j                  ‰«      cd d d «       S # 1 sw Y   y xY wrs   )rj   r]   Ú_claim_writer_marker©rp   rœ   s   €€rI   Útry_claim_writerz@SoftReadWriteLock._acquire_writer_slot.<locals>.try_claim_writer  s3   ø€ Ø—‘×"Ñ"ñ 8Ø×0Ñ0°Ó7÷8÷ 8ò 8ús   ˜3³<c                 ó  •— ‰ j                   j                  5  ‰ j                  ‰«      s‰ j                  ‰«      s
	 d d d «       y‰ j	                  t        j
                  «       «       ‰ j                  «        cd d d «       S # 1 sw Y   y xY w©NF)rj   r]   Ú_touch_writer_marker_if_oursrÌ   Ú_break_stale_readersr¦   Ú_any_readersrÍ   s   €€rI   Úreaders_drained_touchingzHSoftReadWriteLock._acquire_writer_slot.<locals>.readers_drained_touching  su   ø€ Ø—‘×"Ñ"ñ /ð ×8Ñ8¸Ô?È×HaÑHaÐbgÔHhØ ÷	/ð /ð
 ×)Ñ)¬$¯)©)«+Ô6Ø×,Ñ,Ó.Ð.÷/÷ /ò /ús   ˜$BÁ3BÂBr¯   F©rP   rN   )Ú_open_readers_dirÚ	_wait_forr   r›   rf   r   )rp   rœ   r°   r1   rÎ   rÔ   s   ``    rI   r»   z&SoftReadWriteLock._acquire_writer_slotø  s„   ù€ ð 	×ÑÔ ö	8ö	/ð 	�‰Ð'°(ÀXˆÔNð	Ø�N‰NÐ3¸hÐQYˆNÔZð �{‰{× Ñ  %Ð'Ð'øô ò 	ð ×.Ñ.¨uÔ5Øð		ús   ¶A" Á"A>c                ó   — t        | j                  j                  | j                  t	        j                  «       ¬«       t        | j                  j                  «      ry	 t        | j                  j                  |«       y# t        $ r Y yw xY w)N©r4   ÚnowFT)Ú_break_stale_markerrf   r   r4   r¦   Ú_file_existsÚ_atomic_create_markerÚFileExistsErrorrÍ   s     rI   rÌ   z&SoftReadWriteLock._claim_writer_marker  sq   € ô 	˜DŸK™K×-Ñ-¸t×?SÑ?SÔY]×YbÑYbÓYdÕeÜ˜Ÿ™×)Ñ)Ô*Øð	Ü! $§+¡+×"3Ñ"3°UÔ;ð øô ò 	Ùð	ús   Á  B Â	BÂBc                ó@  — t        | j                  j                  «      }|€y	 	 t        j                  |t
        dz   «      }t        |«      }|� t        j                  |j                  |«      s	 t        j                  |«       yt        t        «      5  t        | j                  j                  |¬«       d d d «       	 t        j                  |«       y# t        $ r Y t        j                  |«       yw xY w# 1 sw Y   ŒDxY w# t        j                  |«       w xY w)NFr�   ©r�   T)Ú_open_markerrf   r   r<   r   r   r‹   rŒ   Ú_parse_marker_bytesr    r¡   rœ   r   r   )rp   rœ   r�   Údatar¢   s        rI   rÑ   z.SoftReadWriteLock._touch_writer_marker_if_ours'  sä   € ô ˜$Ÿ+™+×+Ñ+Ó,ˆØˆ:Øð	ðÜ—w‘w˜rÔ#3°aÑ#7Ó8�ô ' tÓ,ˆDØˆ|¤4×#6Ñ#6°t·z±zÀ5Ô#IØô
 �H‰H�R�Lô	 œ'Ó"ñ 0Ü�d—k‘k×'Ñ'¨BÕ/÷0àä�H‰H�R�Løô ò Øô �H‰H�R�Lðú÷
0ð 0ûô �H‰H�R�LúsG   ¥C Á-D ÂD Â"C:Â7D Ã	C7ÃD Ã6C7Ã7D Ã:DÃ?D ÄDc               óT  ‡ ‡‡‡‡— ‰ j                  «        t        j                  «       j                  › dt	        j
                  «       › �Š‰ j                  Št        t        ‰ j                  j                  «      ‰z  «      Šdˆˆˆˆ ˆfd„}‰ j                  |||¬«       ‰�‰dfS ‰dfS )Nú.c                 óf  •— ‰j                   j                  5  t        ‰j                  j                  ‰j
                  t        j                  «       ¬«       t        ‰j                  j                  «      r
	 d d d «       y‰ �t        ‰‰‰ ¬«       nt        ‰‰«       	 d d d «       y# 1 sw Y   y xY w)NrÙ   Fr‘   T)	rj   r]   rÛ   rf   r   r4   r¦   rÜ   rÝ   )r’   Úfull_reader_pathÚreader_namerp   rœ   s   €€€€€rI   Útry_claim_readerz@SoftReadWriteLock._acquire_reader_slot.<locals>.try_claim_readerH  sŒ   ø€ Ø—‘×"Ñ"ñ Ü# D§K¡K×$5Ñ$5Àt×G[ÑG[Ôae×ajÑajÓalÕmÜ §¡× 1Ñ 1Ô2Ø ÷ð ð Ð%Ü)¨+°uÀVÖLä)Ð*:¸EÔBØ÷÷ ñ ús   ˜AB'Â B'Â'B0r¯   TrÕ   )rÖ   ÚuuidÚuuid4Úhexr<   r=   rk   Ústrr   rf   r^   r×   )rp   rœ   r°   r1   ré   r’   rç   rè   s   ``   @@@rI   r¼   z&SoftReadWriteLock._acquire_reader_slot<  s˜   ü€ ð 	×ÑÔ ÜŸ™›×)Ñ)Ð*¨!¬B¯I©I«K¨=Ð9ˆØ×%Ñ%ˆÜœt D§K¡K×$7Ñ$7Ó8¸;ÑFÓGÐ÷		ñ 		ð 	�‰Ð'°(ÀXˆÔNØ%Ð1�È$ÐNÐNÐ7GÈ$ÐNÐNrX   c               ó  — 	  |«       ry t        j                  «       }|st        | j                  «      ‚|�||k\  rt        | j                  «      ‚| j                  }|�t        |t        ||z
  d«      «      }t        j                  |«       ŒŒ)Ng        )r¦   r§   r   rC   r5   ÚminÚmaxÚsleep)rp   Ú	predicater°   r1   rÚ   Ú	sleep_fors         rI   r×   zSoftReadWriteLock._wait_forV  sƒ   € ð ÙŒ{ØÜ×#Ñ#Ó%ˆCÙÜ˜dŸn™nÓ-Ð-ØÐ#¨¨xªÜ˜dŸn™nÓ-Ð-Ø×*Ñ*ˆIØÐ#Ü 	¬3¨x¸#©~¸sÓ+CÓD�	Ü�J‰J�yÔ!ð rX   c           
     ó˜  — t        | j                  j                  «      }t        t        «      5  |j                  d¬«       d d d «       t        j                  | j                  j                  «      }t        j                  |j                  «      st        j                  |j                  «      s$| j                  j                  › d�}t        |«      ‚| j                  €†t        rt        «       5  t        j                   | j                  j                  t        j"                  t%        t        dd«      z  t&        z  «      }	 t)        |«      }|| _        || _        d d d «       y y y # 1 sw Y   �Œ(xY w# t*        $ r?}	 t        j,                  |«       ‚ # t*        $ r}t/        d||«       Y d }~‚ d }~ww xY wd }~ww xY w# 1 sw Y   y xY w)NiÀ  )rª   zB exists but is not a directory or is a symlink; refusing to use itÚO_DIRECTORYr   z>reader directory registration and descriptor close both failed)r   rf   r^   r   rÞ   Úmkdirr<   ÚlstatÚstatÚS_ISLNKÚst_modeÚS_ISDIRr;   rk   r$   r   ÚopenÚO_RDONLYÚgetattrr    r   ÚBaseExceptionrŒ   r   rl   )rp   Úreaders_pathÚstrF   r�   rœ   Úregistration_errorÚclose_errors           rI   rÖ   z#SoftReadWriteLock._open_readers_dirj  s}  € Ü˜DŸK™K×/Ñ/Ó0ˆÜ”oÓ&ñ 	+Ø×Ñ EÐÔ*÷	+ô �X‰X�d—k‘k×)Ñ)Ó*ˆÜ�<‰<˜Ÿ
™
Ô#¬4¯<©<¸¿
¹
Ô+CØ—[‘[×(Ñ(Ð)Ð)kÐlˆCÜ˜sÓ#Ð#Ø×ÑÐ'Õ,<Ü!Ó#ñ 3Ü—W‘W˜TŸ[™[×0Ñ0´"·+±+ÄÌÈMÐ[\Ó@]Ñ2]Ô`kÑ2kÓl�ðÜ6°rÓ:�Eð (*�Ô$Ø-2�Ô*÷3ð 3ð -=Ð'÷	+ñ 	+ûô %ò 	ðÜŸ™ œð øô )ò Ü-Ø\Ø.Ø'÷ð ð
 ûðþð	ú÷	3ð 3ús`   ¯E(Ã1AG ÅE5ÅG Å(E2Å5	F=Å?FÆF8Æ	F5ÆF0Æ+F8Æ0F5Æ5F8Æ8F=Æ=G Ç G	c                ó0   — | j                  «       D ]  } y y)NTF)Ú_iter_reader_entries)rp   r£   s     rI   rÓ   zSoftReadWriteLock._any_readers†  s    € Ø×*Ñ*Ó,ò 	ˆAÙð	àrX   c              #  óð  K  — | j                   �Wt        j                  | j                   «      5 }|D ](  }t        |j                  «      rŒ|j                  df–— Œ* 	 ddd«       yt        | j                  j                  «      }t        j                  |«      5 }|D ]4  }t        |j                  «      rŒt        ||j                  z  «      df–— Œ6 	 ddd«       y# 1 sw Y   yxY w# 1 sw Y   yxY w­w)a#  
        Yield ``(name, dirfd_relative)`` pairs for every live reader marker.

        ``dirfd_relative`` is ``True`` when *name* should be passed to ``dir_fd=``-aware syscalls; ``False``
        when *name* is a full path because dirfd-relative I/O is unavailable on this platform.
        NTF)	rk   r<   ÚscandirÚ_is_housekeeping_namerµ   r   rf   r^   rí   )rp   ÚitÚentryr   s       rI   r  z&SoftReadWriteLock._iter_reader_entries‹  sâ   è ø€ ð ×ÑÐ+Ü—‘˜D×0Ñ0Ó1ð /°RØò /�EÜ0°·±Õ<Ø#Ÿj™j¨$Ð.Ó.ñ/÷/ð Ü˜DŸK™K×/Ñ/Ó0ˆÜ�Z‰Z˜Ó%ð 	@¨Øò @�Ü,¨U¯Z©ZÕ8Ü˜l¨U¯Z©ZÑ7Ó8¸%Ð?Ó?ñ@÷	@ð 	@÷/ð ú÷	@ð 	@üs@   ‚,C6®CÁ
CÁ=C6ÂC*Â6C*Ã	C6ÃC'Ã#C6Ã*C3Ã/C6c                óâ   — g }	 | j                  «       D ]&  \  }}|j                  ||r| j                  nd f«       Œ( 	 |D ]  \  }}t	        || j
                  ||¬«       Œ  y # t        $ r Y y w xY w)N)r4   rÚ   r’   )r  Úappendrk   r‹   rÛ   r4   )rp   rÚ   Únamesrµ   Údirfd_relativer�   s         rI   rÒ   z&SoftReadWriteLock._break_stale_readersž  sˆ   € Ø.0ˆð	Ø(,×(AÑ(AÓ(Cò WÑ$��nØ—‘˜d¹N D×$8Ò$8ÐPTÐUÕVñWð ò 	`‰HˆD�"Ü °d×6JÑ6JÐPSÐ\^Ö_ñ	`øô ò 	Ùð	ús   „9A" Á"	A.Á-A.c                óè  — | j                   j                  5  | j                  }|€
	 d d d «       y|j                  }|j                  }|j
                  r| j                  nd }d d d «       	 t        ¬«      }	 	 t        |«      }t        |«      }|� t        j                  |j                  «      s	 t        j                  |«       yt!        t        «      5  t#        ||¬«       d d d «       	 t        j                  |«       y# 1 sw Y   Œ¤xY w# t        $ r Y yt        $ r Y yw xY w# t        $ r Y t        j                  |«       yw xY w# 1 sw Y   ŒixY w# t        j                  |«       w xY w)NFr‘   Trà   )rj   ra   rm   rš   rœ   r˜   rk   Ú_open_marker_fdÚFileNotFoundErrorr‹   Ú_read_marker_fdr<   rŒ   râ   r    r¡   r   r   )rp   r�   rš   rœ   r’   r�   rã   r¢   s           rI   r¿   z!SoftReadWriteLock._refresh_marker¨  sM  € Ø�[‰[×!Ñ!ñ 	FØ—:‘:ˆDØˆ|Ø÷	Fð 	Fð ×*Ñ*ˆKØ—J‘JˆEØ-1¯^ª^�T×)Ò)ÀˆF÷	Fð	Ü  °VÔ<ˆBð
	ðÜ& rÓ*�ô ' tÓ,ˆDð ˆ|¤4×#6Ñ#6°t·z±zÀ5Ô#IØô �H‰H�R�Lô	 œ'Ó"ñ *Ü�k bÕ)÷*àä�H‰H�R�L÷M	Fð 	Fûô" !ò 	ÙÜò 	Ùð	ûô
 ò Øô �H‰H�R�Lðú÷*ð *ûô �H‰H�R�Lúsp   —D°2DÁ+D Á:D* Â-E Ã	E ÃEÃ&E ÄDÄ	D'ÄD'Ä&D'Ä*	EÄ3E Å
EÅE ÅEÅE ÅE1c                óÄ   — t        t        j                  «       t        j                  «       | j                  j                  ¬«      | _        d | _        d | _        d | _        y )Nr`   )rg   rh   ri   rj   r]   rm   rk   rl   ©rp   s    rI   Ú_reset_after_fork_in_childz,SoftReadWriteLock._reset_after_fork_in_childÑ  sH   € ÜÜ—^‘^Ó%Ü!Ÿ™Ó(Ø—+‘+×#Ñ#ô
ˆŒð
 ˆŒ
Ø#ˆÔØ%)ˆÕ"rX   rJ   )rC   rL   r@   rM   r1   rN   r2   rN   r3   rM   r4   rO   r5   rM   rP   ÚNone©rP   r  rs   )r@   rO   r1   úbool | NonerP   zGenerator[None])r@   rO   r1   r  rP   r   )rC   rL   r@   rM   r1   rN   rP   rQ   )rŠ   rN   rP   r  )rœ   rí   rP   r  )rª   Ú_Moder@   rO   r1   r  rP   r   )
rª   r  rÂ   rM   r«   rM   r1   rN   rP   r   )rª   r  rP   r   )rœ   rí   r°   rO   r1   rN   rP   ztuple[str, bool])rœ   rí   rP   rN   )rò   úCallable[[], bool]r°   rO   r1   rN   rP   r  rÕ   )rP   zGenerator[tuple[str, bool]])rÚ   rM   rP   r  )$rR   rS   rT   Ú__doc__r   r,   rU   rh   rt   r-   rq   Úclassmethodrv   r   r|   r€   ry   r   r‡   rŒ   rz   r›   rƒ   r©   r¥   r»   rÌ   rÑ   r¼   r×   rÖ   rÓ   r  rÒ   r¿   r  r†   rX   rI   rQ   rQ   s   sx  … ñ+ñZ @SÓ?T€JÐ<ÓTØ%�i—o‘oÓ'€Oð
 ð1$ð
 Ø!Ø$(Ø(,Ø#ñ1$à)ð1$ð ð1$ð
 ð1$ð ð1$ð "ð1$ð &ð1$ð ð1$ð 
ó1$ðf ò/ó ð/ð ðÐQUô ó ðð& ðÐRVô ó ðð&AÐTXõ Að.BÐUYõ Bð6 ð ð:ð
 ñ:à)ð:ð ð:ð
 ð:ð 
ò:ó ð:ó*%ð. (-õ %;óN'ð .àð .ð ð .ð
 ð .ð 
ó .ðD$-àð$-ð !ð$-ð ð	$-ð ð$-ð 
ó$-óL-ð( (àð (ð ð	 (ð
 ð (ð 
ó (óDóð*OàðOð ð	Oð
 ðOð 
óOð4"à%ð"ð ð	"ð
 ð"ð 
ó"ó(3ó8ó
@ó&`ó'ôR*rX   rQ   )Ú	metaclassc                  ó<   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )r¾   c                óR   •— t         ‰| �  |d¬«       || _        || _        || _        y )NT)rµ   Údaemon)r7   rq   Ú_refreshÚ	_intervalÚ_stop_event)rp   r²   r³   r´   rµ   rH   s        €rI   rq   z_HeartbeatThread.__init__Ý  s-   ø€ ô 	‰Ñ˜d¨4ÐÔ0ØˆŒØ!ˆŒØ%ˆÕrX   c                óò   — | j                   j                  | j                  «      sR| j                  «       s| j                   j	                  «        y | j                   j                  | j                  «      sŒQy y rs   )r#  Úwaitr"  r!  r•   r  s    rI   Úrunz_HeartbeatThread.runé  sR   € Ø×"Ñ"×'Ñ'¨¯©Ô7Ø—=‘=”?Ø× Ñ ×$Ñ$Ô&Øð ×"Ñ"×'Ñ'¨¯©×7rX   )
r²   r  r³   rM   r´   úthreading.Eventrµ   rí   rP   r  r  )rR   rS   rT   rq   r&  rV   rW   s   @rI   r¾   r¾   Ü  s=   ø„ ð
&à#ð
&ð ð
&ð $ð	
&ð
 ð
&ð 
õ
&÷rX   r¾   r‘   c               óâ  — t        | |¬«      }|€y 	 t        j                  |«      }t        j                  |j
                  «      s#d |j                  ft        j                  |«       S t        j                  |t        dz   «      }	 t        j                  |«       t        |«      |j                  fS # t        $ r Y t        j                  |«       y w xY w# t        j                  |«       w xY w)Nr‘   r�   )rá   r<   Úfstatrø   ÚS_ISREGrú   Úst_mtimerŒ   r   r   r‹   râ   )rµ   r’   r�   r  rã   s        rI   rŸ   rŸ   ð  s¹   € Ü	�d 6Ô	*€BØ	€zØðÜ�X‰X�b‹\ˆô
 �|‰|˜BŸJ™JÔ'Ø˜Ÿ™Ð$ô
 	�‰��ô	 �w‰w�rÔ+¨aÑ/Ó0‰ô 	�‰�ŒÜ˜tÓ$ b§k¡kÐ1Ð1øô	 ò Øä
�‰��ðûô 	�‰��ús*   ’AB3 Á)B3 Â3	CÂ<C ÃCÃC ÃC.c                ó<   — t        j                  | t        dz   «      S )Nr�   )r<   r   r   rà   s    rI   r  r    s   € Ü�7‰7�2Ô'¨!Ñ+Ó,Ð,rX   c               óª   — t         j                  t        z  t        z  }t        r|�t        j
                  | ||¬«      S t        j
                  | |«      S ©Nr‘   )r<   rý   r    r"   r$   rü   )rµ   r’   Úflagss      rI   r  r    sF   € ô �K‰Kœ+Ñ%¬Ñ3€EÝ2BÀvÐGYŒ2�7‰7�4˜ vÔ.ÐsÔ_a×_fÑ_fÐgkÐmrÓ_sÐsrX   c               ó<   — 	 t        | |¬«      S # t        $ r Y y w xY wr.  )r  r‹   ©rµ   r’   s     rI   rá   rá     s&   € ðÜ˜t¨FÔ3Ð3øÜò Ùðús   ‚ �	šc                ó  — | rt        | «      t        kD  ry 	 | j                  d«      }t	        j
                  d|t        j                  «      }|€y t        |d   d«      }|dkD  ry t        |d   ||d   ¬«      S # t        $ r Y y w xY w)	NÚasciiuå  
        \A                                  # start of string
        (?P<token>    [0-9a-f]{32}     ) \n # 128-bit hex token
        (?P<pid>      [1-9][0-9]{0,9}  ) \n # decimal pid: no leading zero, â‰¤ 10 digits
        (?P<hostname> [\x21-\x7e]{1,253})   # printable non-whitespace ASCII (RFC 1123 hostname limit)
        \n*                                 # tolerate sloppy writers that append extra newlines
        \Z                                  # end of string
        Úpidé
   iÿÿÿrœ   Úhostname)rœ   r4  r6  )	Úlenr   ÚdecodeÚUnicodeDecodeErrorÚreÚmatchÚVERBOSEÚintÚ_MarkerInfo)rã   Útextr;  r4  s       rI   râ   râ     sš   € ñ ”3�t“9Ô/Ò/ØðØ�{‰{˜7Ó#ˆô �H‰Hð	ð 	Ü
�
‰
ó€Eð €}ØÜ
ˆe�E‰l˜BÓ
€CØ
ˆY‚ØÜ˜U 7™^°¸uÀZÑ?PÔQÐQøô' ò Ùðús   —A9 Á9	BÂBc               ó¾   — t        t        «      5  t        r|�t        j                  | |¬«       nt        | «      j	                  «        d d d «       y # 1 sw Y   y xY wr.  )r   r  r$   r<   Úunlinkr   r1  s     rI   r™   r™   5  sF   € Ü	Ô#Ó	$ñ  Ý Ð 2ä�I‰I�d 6Ö*ä�‹J×ÑÔ÷ ÷  ñ  ús   �:AÁAc               ó(  — t        | |¬«      x}€y|\  }}||z
  |k  ry|€t        | |¬«       y| › t        › dt        j                  «       › dt        j                  d«      › �}	 t        r|�t        j                  | |||¬«       nt        | «      j                  |«       t        ||¬«      }|€y|\  }	}
|	€t        ||¬«       yt        j                  |j                  |	j                  «      sy|
|kD  ryt        ||¬«       y# t        $ r Y yw xY w)Nr‘   FTrå   r®   )Ú
src_dir_fdÚ
dst_dir_fd)rŸ   r™   r   r<   r=   r¹   rº   r$   Úrenamer   r‹   r    r¡   rœ   )rµ   r4   rÚ   r’   Úread_resultÚinfo_beforeÚmtime_beforeÚ
break_nameÚ
read_afterÚ
info_afterÚmtime_afters              rI   rÛ   rÛ   >  s"  € ô $ D°Ô8Ð8ˆÐAØØ +Ñ€K�Ø
ˆ\Ñ˜_Ò,ØØÐÜ�˜VÕ$Øà�6œ-˜¨¬"¯)©)«+¨°a¼×8IÑ8IÈ"Ó8MÐ7NÐO€JðÝ Ð 2Ü�I‰I�d˜J°6ÀfÖMä�‹J×Ñ˜jÔ)ô ˜j°Ô8€JØÐØØ(Ñ€J�ØÐÜ�
 6Õ*ØÜ×Ñ˜{×0Ñ0°*×2BÑ2BÔCØØ�\Ò!ØÜˆJ˜vÕ&Øøô ò Ùðús   Á%<D Ä	DÄDc          	     ó‚  — t         j                  t         j                  z  t         j                  z  t        z  }t
        r|�t        j                  | |d|¬«      }nt        j                  | |d«      }d }	 t        j                  |«      }|j                  |j                  f}t        ||› dt        j                  «       › dt        j                  «       › d�j                  d«      «       t        j                  |«       y # t         $ r4 t        j                  |«       |�t#        | ||¬«      rt%        | |¬«       ‚ w xY w)Ni€  r‘   ú
r3  )r<   ÚO_CREATÚO_EXCLÚO_WRONLYr    r$   rü   r)  Úst_devÚst_inor   r=   ÚsocketÚgethostnameÚencoderŒ   rÿ   Ú
_same_filer™   )rµ   rœ   r’   r/  r�   Úidentityr  s          rI   rÝ   rÝ   j  sý   € ô �J‰JœŸ™Ñ"¤R§[¡[Ñ0´;Ñ>€EÝ˜FÐ.Ü�W‰W�T˜5 %°Ô7‰ä�W‰W�T˜5 %Ó(ˆð (,€Hð
Ü�X‰X�b‹\ˆØ—9‘9˜bŸi™iÐ'ˆÜ�"˜˜˜r¤"§)¡)£+ ¨b´×1CÑ1CÓ1EÐ0FÀbÐI×PÑPÐQXÓYÔZô 	�‰��øô ò Ü
�‰�ŒØÐ¤J¨t°XÀfÕ$MÜ�D Õ(Øð	ús   Á6A5D Ä=D>c               óÀ   — 	 t         r|�t        j                  | |¬«      nt        j                  | «      }|j                  |j
                  f|k(  S # t        $ r Y yw xY w)Nr‘   F)r$   r<   r÷   r‹   rR  rS  )rµ   rX  r’   r  s       rI   rW  rW  ‚  s[   € ðÝ.>À6ÐCUŒR�X‰X�d 6Õ*Ô[]×[cÑ[cÐdhÓ[iˆð �I‰I�r—y‘yÐ! XÑ-Ð-øô ò Ùðús   ‚4A Á	AÁAc                óŠ   — 	 t        j                  | «      }t        j                  |j
                  «      S # t        $ r Y yw xY wrÐ   )r<   r÷   r  rø   r*  rú   )Úpathr  s     rI   rÜ   rÜ   Š  s=   € ðÜ�X‰X�d‹^ˆô �<‰<˜Ÿ
™
Ó#Ð#øô ò Ùðús   ‚6 ¶	AÁAc                ó8   — | j                  d«      xs t        | v S )Nrå   )Ú
startswithr   )rµ   s    rI   r  r  ’  s   € Ø�?‰?˜3ÓÒ8¤=°DÐ#8Ð8rX   T)Úfrozenc                  ó,   — e Zd ZU ded<   ded<   ded<   y)re   rí   r]   r   r^   N©rR   rS   rT   rU   r†   rX   rI   re   re   –  s   … àƒJØƒJØ„LrX   re   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)rg   r&   ra   rb   r   r]   Nr`  r†   rX   rI   rg   rg   �  s   … àÓØÓØÔrX   rg   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)r>  rí   rœ   r=  r4  r6  Nr`  r†   rX   rI   r>  r>  ¤  s   … àƒJØ	ƒHØ„MrX   r>  c                  ób   — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   y)rÀ   zYEverything that exists only while a lock is held; ``None`` when the instance has no lock.r=  r“   r  rª   ú
int | Noner¶   rí   rš   rN   r˜   rœ   r¾   r–   r'  r”   N)rR   rS   rT   r  rU   r†   rX   rI   rÀ   rÀ   «  s1   … ácàƒJØ
ƒKØÓØÓØƒOØƒJØ&Ó&Ø#Ô#rX   rÀ   c                 ó´   — t        t        j                  «       «      D ],  } t        t        «      5  | j                  d¬«       d d d «       Œ. y # 1 sw Y   Œ9xY w)NTr‰   )Úlistr%   Úvaluesr   Ú	Exceptionrz   )rE   s    rI   Ú_cleanup_all_instancesri  ¹  sR   € Üœ×.Ñ.Ó0Ó1ò )ˆÜ”iÓ ñ 	)Ø×Ñ 4ÐÔ(÷	)ð 	)ñ)÷	)ð 	)ús   °AÁA	)rµ   rí   r’   rd  rP   z'tuple[_MarkerInfo | None, float] | None)r�   r=  rP   Úbytes)rµ   rí   r’   rd  rP   r=  )rµ   rí   r’   rd  rP   rd  )rã   rj  rP   z_MarkerInfo | None)rµ   rí   r’   rd  rP   r  )
rµ   rí   r4   rM   rÚ   rM   r’   rd  rP   rN   )rµ   rí   rœ   rí   r’   rd  rP   r  )rµ   rí   rX  ztuple[int, int]r’   rd  rP   rN   )r[  rí   rP   rN   )rµ   rí   rP   rN   r  )Vr  Ú
__future__r   Úatexitr    r<   r:  r¹   rT  rø   Úsysrh   r¦   rê   Ú
contextlibr   r   Údataclassesr   Úpathlibr   Útypingr   r	   r
   Úweakrefr   Úfilelock._apir   r   r   r   r   r   r   r   Úfilelock._errorr   Úfilelock._softr   Úfilelock._utilr   r   r   Úcollections.abcr   r   r  r   rU   r   rþ   r    r"   Úplatformrü   Úsupports_dir_fdr$   r%   ri   r'   r•   r(   Útyper*   rQ   ÚThreadr¾   rŸ   r  r  rá   râ   r™   rÛ   rÝ   rW  rÜ   r  re   rg   r>  rÀ   ri  ÚregisterÚ__all__r†   rX   rI   ú<module>r~     sS  ðÚ `å "ã Û Û 	Û 	Û Û Û Û 
Û Û Û ß /Ý !Ý ß 0Ñ 0Ý '÷	÷ 	ó 	õ $Ý 'ß DÑ Dáß3ð 	�Ñ €Ø$€ˆzÓ $Ø#Ð �*Ó #Ù! " l°AÓ6€ˆZÓ 6Ù! " l°AÓ6€ˆZÓ 6ð !$§¡°Ñ 7Ò Y¸B¿G¹GÀr×GYÑGYÐ<YÐ �+Ó YáEXÓEZ€ÐBÓ ZØ&4 i§n¡nÓ&6Ð �^Ó 6Ù36³5Ð Ð 0Ó 8ô:�$ô :ôzf	* +õ f	*ôR�y×'Ñ'ô ð( 59õ 2ó(-ð 8<õ tð 59õ óRð< 04õ  ð ñ)Ø
ð)ð ð)ð 
ð	)ð
 ð)ð 
ó)ðX JNõ ó0.ó$ó9ñ �$Ô÷ð ó ðð ÷ð ó ðñ �$Ô÷ð ó ðð ÷
$ð 
$ó ð
$ó)ð €‡�Ð&Ô 'Ù Ð&Ô 'ð ð�rX   