+
    ‘°³j~s  ã                  óT  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	IHtHtHtHtHt ^ R
IHt ^ RIHt ^RI H!t!H"t"H#t#H$t$ ^RI%H&t& ]'       d   ^ RI'H(t(H)t) ^ RIH*t* ]! 4       t+R],R&   ]PZ                  ! 4       s.R],R&   ]/! 4       t0R],R&    ! R R]14      t2 ! R R]2R7      t3 ! R R]Ph                  4      t5R R lt6] ! R R 4      4       t7] ! R! R"4      4       t8R# R$ lt9]Pt                  ! ]94       ]! ]34       R.t;R# )%z]Cross-process and cross-host reader/writer lock over a generation log of immutable snapshots.)ÚannotationsN)ÚcontextmanagerÚsuppress)Ú	dataclass)Úisfinite)ÚPath)ÚTYPE_CHECKINGÚFinal)ÚWeakValueDictionary)ÚAcquireReturnProxyÚ
_canonicalÚ_ensure_current_processÚ_register_fork_classÚ_register_fork_object)ÚTimeout)ÚLeaseCompromise)ÚGenerationLogÚLedgerÚModeÚParticipant)ÚOsFiles)ÚCallableÚ	Generator)ÚCompromiseReasonz2Final[WeakValueDictionary[int, SoftReadWriteLock]]Ú_ALL_INSTANCESúthreading.LockÚ_ALL_INSTANCES_LOCKzFinal[set[Path]]Ú_SINGLETONS_UNDER_CONSTRUCTIONc                  ód   a € ] tR t^'t$ R]R&   R]R&   RRRRRRR	R
RRRRR/R V 3R lllltRtV ;t# )Ú_SoftRWMetaú,WeakValueDictionary[Path, SoftReadWriteLock]Ú
_instanceszthreading.RLockÚ_instances_lockÚblockingTÚis_singletonÚheartbeat_intervalç      >@Ústale_thresholdNÚpoll_intervalç      Ð?Úon_compromisec               ó<   € V ^8„  d   QhRRRRRRRRRRR	R
RRRRRR/	# )é   Ú	lock_fileústr | os.PathLike[str]ÚtimeoutÚfloatr#   Úboolr$   r%   r'   úfloat | Noner(   r*   ú(Callable[[LeaseCompromise], None] | NoneÚreturnÚSoftReadWriteLock© )Úformats   "ÚX/home/luca/screen-checking/.venv/lib/python3.14/site-packages/filelock/_soft_rw/_sync.pyÚ__annotate__Ú_SoftRWMeta.__annotate__+   sp   € ÷ Bñ Bà)ðBð ðBð
 ðBð ðBð "ðBð &ðBð ðBð @ðBð 
ñBó    c               	óà  <€ \        4        Vf   / MRV/p	V'       g   \        SV `  ! VV3RVRVRVRVRV/V	B # \        V4      P	                  4       p
V P
                  ;_uu_ 4        V P                  P                  V
4      pVf¯   V
\        9   d   RV: 2p\        V4      h\        P                  ! 4       p\        P                  V
4        \        SV `  ! VV3RVRVRVRVRV/V	B p\        P                  V
4       \        P                  ! 4       V8w  d   Rp\        V4      hW°P                  V
&   M�VP                  V8w  g   VP                  V8w  d.   R	VP                   R
VP                   RV R
V 2p\!        V4      hVe#   VP"                  V8w  d   RV: 2p\!        V4      h\%        WVV4       VuuR R R 4       #   \        P                  T
4       i ; i  + '       g   i     R # ; i)Nr*   r#   r$   r%   r'   r(   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=zCSingleton lock created with a different on_compromise callback for )r   ÚsuperÚ__call__r   Úresolver"   r!   Úgetr   ÚRuntimeErrorÚosÚgetpidÚaddÚdiscardr/   r#   Ú
ValueErrorÚ_on_compromiseÚ_validate_intervals)Úclsr-   r/   r#   r$   r%   r'   r(   r*   ÚextraÚ
normalizedÚinstanceÚmsgÚconstruction_pidÚ	__class__s   &&&$$$$$$     €r8   r>   Ú_SoftRWMeta.__call__+   s;  ø€ ô 	 Ô!à#Ò+‘°/À=Ð1QˆßÜ‘7Ò#ØØñ	ð "ð	ð *ð		ð
 $6ð	ð !0ð	ð ,ð	ð ñ	ð 	ô ˜)“_×,Ñ,Ó.ˆ
Ø× × Ó Ø—~‘~×)Ñ)¨*Ó5ˆHØÒØÔ!?Ô?ØNÈyÉmÐ\�CÜ& sÓ+Ð+Ü#%§9¢9£;Ð Ü.×2Ñ2°:Ô>ðGÜ$™wÒ/Ø!Øñ	 ð "*ð	 ð &2ð		 ð
 ,>ð	 ð )8ð	 ð '4ð	 ð  ñ	 �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Ð%ØÒ*¨x×/FÑ/FÈ-Ô/Wð \Ð\eÑ[hÐi�Ü  “oÐ%ä#Ð$6ÈÔWØ÷M !Ò øô( 3×:Ñ:¸:ÕFú÷) !× Ð ús&   Á'A&GÃGÃ*CGÇGÇGÇG-	r6   ©éÿÿÿÿ)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r>   Ú__static_attributes__Ú__classcell__©rO   s   @r8   r   r   '   se   ø‡ Ø<Ó<Ø$Ó$ñBð
 ðBð "ðBð %)ðBð )-ðBð  $ðBð CG÷B÷ Bñ Br;   r   c                  óÎ  € ] tR t^pt$ Rt]! 4       tR]R&   ]P                  ! 4       t
R5RRRRRRR	R
RRRR
/R R lllt]R R l4       t]R R l4       t]R R l4       t]R6RR
/R R lll4       t]R6RR
/R R lll4       tR6RR
/R R llltR6RR
/R R lllt]R5RR/R R lll4       tR  R! ltR"R#/R$ R% lltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4t R
# )7r5   a  
Cross-process and cross-host reader/writer lock for shared filesystems.

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

The lock's state is a log of immutable snapshots under ``foo.lock.rw/gen/<N>``, each naming the writer and the
readers holding the lock at generation ``N``. Every acquire, release, and eviction publishes the next snapshot with
one atomic no-replace hard link, so no transition can be left half done by a crash on any host. Each participant
also keeps ``foo.lock.rw/holders/<token>``, a record whose nonce a daemon heartbeat thread rewrites every
``heartbeat_interval`` seconds. A contender evicts a member whose record has not changed for ``stale_threshold``
seconds of the contender's own monotonic clock; no clock is ever compared across hosts, so skew between hosts or
against the file server cannot make a live holder look dead.

Writer acquire is writer-preferring: a writer enters the snapshot as soon as no live writer is named, which blocks
any new reader, then waits for the named readers to leave. Writer starvation is impossible.

An expired holder is not fenced by the lock: a process paused past ``stale_threshold`` resumes believing it holds
the lock until its next heartbeat reports the loss through ``on_compromise``. :attr:`generation` is a monotonic
fencing token for the protected resource: a store that rejects writes carrying a lower generation than the highest
it has accepted refuses such a holder.

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 or multi-tenant
mounts where hostile co-tenants share the UID.

:param lock_file: path to the lock file; the protocol directory lives next to it as ``<lock_file>.rw``
: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 a holder record may stay unchanged before a contender evicts it; defaults to
    ``3 * heartbeat_interval``, matching etcd's ``LeaseKeepAlive`` convention
:param poll_interval: seconds between acquire retries under contention; default 0.25 s
:param on_compromise: called from the heartbeat thread with a :class:`~filelock.LeaseCompromise` when the hold is
    lost: a peer evicted it, or refreshes failed for long enough that a peer could have

.. versionadded:: 3.27.0

.. versionchanged:: 3.33.0

    The on-disk protocol is a generation log; earlier releases cannot share a lock path with this one.

r    r!   r#   Tr$   r%   r&   r'   Nr(   r)   r*   c               ó<   € V ^8„  d   QhRRRRRRRRRRR	R
RRRRRR/	# )r,   r-   r.   r/   r0   r#   r1   r$   r%   r'   r2   r(   r*   r3   r4   ÚNoner6   )r7   s   "r8   r9   ÚSoftReadWriteLock.__annotate__¨   se   € ÷ #$ñ #$à)ð#$ð ð#$ð
 ð#$ð ð#$ð "ð#$ð &ð#$ð ð#$ð @ð#$ð 
ñ#$r;   c               	ó  € \         P                  ! 4       V n        \        WVV4      p\         P                  ! V4      V n        W n        W0n        WPn        W`n	        Wpn
        \        V P
                  4       R 2V n        \        V P
                  4      V n        \        \         P"                  4      V n        \'        V P                  V P
                  V P                  4      V n        W€n        \-        \.        P0                  ! 4       \.        P0                  ! 4       R7      V n        RV n        RV n        RV n        \:        ;_uu_ 4        V \<        \?        V 4      &   RRR4       \A        V 4       R#   + '       g   i     L; i)z.rw©ÚinternalÚtransactionNF)!rB   rC   Ú_creator_pidrH   Úfspathr-   r/   r#   r%   r'   r(   r   Ú_rootr   Ú_filesr   ÚtimeÚ	monotonicÚ_ledgerr   Ú_logrG   Ú_LocksÚ	threadingÚLockÚ_locksÚ_holdÚ_compromiseÚ_closedr   r   Úidr   )	Úselfr-   r/   r#   r$   r%   r'   r(   r*   s	   &&&$$$$$$r8   Ú__init__ÚSoftReadWriteLock.__init__¨   s  € ô ŸIšI›KˆÔÜ-Ð.@ÐS`Óaˆä Ÿiši¨	Ó2ˆŒØ%ŒØ&ŒØ);ÔØ&5ÔØ$1Ôô # 4§>¡>Ó2Ð3°3Ð7ˆŒ
Ü˜dŸn™nÓ-ˆŒÜœdŸn™nÓ-ˆŒÜ! $§+¡+¨t¯~©~¸t¿z¹zÓJˆŒ	Ø+ÔÜ¤i§n¢nÓ&6ÄIÇNÂNÓDTÔUˆŒØ#'ˆŒ
Ø37ˆÔØ"ˆŒç Ö Ø'+ŒNœ2˜d›8Ñ$÷ !ä˜dÖ#÷ !× ús   ÅE.Å.E>	c               ó   € V ^8„  d   QhRR/# ©r,   r4   r]   r6   )r7   s   "r8   r9   r^   Î   s   € ÷ /ñ /¨ñ /r;   c                	óª   € \         P                  ! 4       s\        4       V n        \         P
                  ! 4       V n        \        P                  4        R # ©N)	rl   rm   r   r
   r!   ÚRLockr"   r   Úclear)rI   s   &r8   Ú_reset_class_after_forkÚ)SoftReadWriteLock._reset_class_after_forkÍ   s6   € ô (ŸnšnÓ.ÐÜ,Ó.ˆŒÜ'ŸošoÓ/ˆÔÜ&×,Ñ,Ö.r;   c               ó   € V ^8„  d   QhRR/# )r,   r4   ú
int | Noner6   )r7   s   "r8   r9   r^   Ö   s   € ÷ Uñ U˜Jñ Ur;   c                óÜ   € V P                   P                  ;_uu_ 4        V P                  f   RMV P                  P                  P                  uuRRR4       #   + '       g   i     R# ; i)a¯  
The generation at which the current hold was granted, or ``None`` when no lock is held.

Generations are monotonic across all participants and hosts, so this is a fencing token: pass it to the
protected resource and have the resource reject any operation carrying a lower generation than the highest it
has accepted. That refuses a holder that paused past ``stale_threshold``, was evicted, and resumed.

.. versionadded:: 3.33.0

N)rn   ra   ro   ÚparticipantÚ
generation©rs   s   &r8   r‚   ÚSoftReadWriteLock.generationÕ   sA   € ð �[‰[×!×!Ó!ØŸ:™:Ò-‘4°4·:±:×3IÑ3I×3TÑ3T÷ "×!×!Ó!ús   Ÿ0AÁA+	c               ó   € V ^8„  d   QhRR/# )r,   r4   zLeaseCompromise | Noner6   )r7   s   "r8   r9   r^   å   s   € ÷ $ñ $Ð2ñ $r;   c                ó”   € V P                   P                  ;_uu_ 4        V P                  uuRRR4       #   + '       g   i     R# ; i)a  
How the current hold was lost, or ``None`` while it stands.

Set by the heartbeat thread once a peer has evicted this holder or refreshes have failed for long enough that a
peer could have. The holder should stop using the protected resource when it is set.

.. versionadded:: 3.33.0

N)rn   ra   rp   rƒ   s   &r8   Ú
compromiseÚSoftReadWriteLock.compromiseä   s,   € ð �[‰[×!×!Ó!Ø×#Ñ#÷ "×!×!Ó!ús	   Ÿ6¶A	c               ó$   € V ^8„  d   QhRRRRRR/# ©r,   r/   r2   r#   úbool | Noner4   zGenerator[None]r6   )r7   s   "r8   r9   r^   ó   s"   € ÷ ñ  ð À;ð ÐZiñ r;   c             #  ó†   "  € V P                  WR7        Rx € V P                  4        R#   T P                  4        i ; i5i)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

©r#   N)Úacquire_readÚrelease©rs   r/   r#   s   &&$r8   Ú	read_lockÚSoftReadWriteLock.read_lockò   s2   é € ð 	×Ñ˜'ÐÔ5ð	Ûà�L‰LŽNøˆD�L‰L�Nüó   ‚A–, šA¬>¾Ac               ó$   € V ^8„  d   QhRRRRRR/# rŠ   r6   )r7   s   "r8   r9   r^     s"   € ÷ ñ  ,ð ÀKð Ð[jñ r;   c             #  ó†   "  € V P                  WR7        Rx € V P                  4        R#   T P                  4        i ; i5i)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

r�   N)Úacquire_writer�   r�   s   &&$r8   Ú
write_lockÚSoftReadWriteLock.write_lock  s2   é € ð 	×Ñ˜7ÐÔ6ð	Ûà�L‰LŽNøˆD�L‰L�Nür“   c               ó$   € V ^8„  d   QhRRRRRR/# ©r,   r/   r2   r#   r‹   r4   r   r6   )r7   s   "r8   r9   r^     s'   € ÷ Añ A Lð AÀkð AÐ]oñ Ar;   c               ó(   € V P                  RWR7      # )uã  
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 the reader publishes its holder record, enters the next snapshot once no live writer is named, and
starts a daemon heartbeat thread that rewrites the record's nonce every ``heartbeat_interval`` seconds so peers
on other hosts do not evict it.

: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
:raises SoftFileLockProtocolError: if a snapshot cannot be read without risking overlap, or the filesystem
    refuses the no-replace hard links the protocol commits with

Úreadr�   ©Ú_acquirer�   s   &&$r8   rŽ   ÚSoftReadWriteLock.acquire_read  s   € ð0 �}‰}˜V Wˆ}Ó@Ð@r;   c               ó$   € V ^8„  d   QhRRRRRR/# rš   r6   )r7   s   "r8   r9   r^   4  s'   € ÷ Bñ B \ð BÀ{ð BÐ^pñ Br;   c               ó(   € V P                  RWR7      # )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`.

A writer enters the next snapshot as its writer as soon as no live writer is named, which blocks every new
reader on every host, then waits for the readers that snapshot names to leave. Writer starvation is impossible:
new readers see the named writer and wait behind it.

: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
:raises SoftFileLockProtocolError: if a snapshot cannot be read without risking overlap, or the filesystem
    refuses the no-replace hard links the protocol commits with

Úwriter�   r�   r�   s   &&$r8   r–   ÚSoftReadWriteLock.acquire_write4  s   € ð6 �}‰}˜W gˆ}ÓAÐAr;   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r,   r-   r.   r/   r0   r#   r1   r4   r5   r6   )r7   s   "r8   r9   r^   R  s2   € ÷ :ñ :à)ð:ð ð:ð
 ð:ð 
ñ:r;   c               ó   € V ! WVR7      # )aø  
Return the singleton :class:`SoftReadWriteLock` for *lock_file*.

:param lock_file: path to the lock file; the protocol directory lives next to it as ``<lock_file>.rw``
: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

r�   r6   )rI   r-   r/   r#   s   &&&$r8   Úget_lockÚSoftReadWriteLock.get_lockQ  s   € ñ( �9°Ô9Ð9r;   c               ó   € V ^8„  d   QhRR/# rw   r6   )r7   s   "r8   r9   r^   g  s   € ÷  ñ  �tñ  r;   c                óú   € V P                   \        P                  ! 4       8w  d   R# V P                  RR7       V P                  P
                  ;_uu_ 4        RV n        RRR4       R#   + '       g   i     R# ; i)uñ   
Release any held lock and mark the instance closed.

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   rB   rC   r�   rn   ra   rq   rƒ   s   &r8   ÚcloseÚSoftReadWriteLock.closeg  sO   € ð ×Ñ¤§	¢	£Ô+ÙØ�‰˜4ˆÔ Ø�[‰[×!×!Ó!ØˆDŒL÷ "×!×!Ò!ús   ÁA)Á)A:	r«   Fc               ó    € V ^8„  d   QhRRRR/# )r,   r«   r1   r4   r]   r6   )r7   s   "r8   r9   r^   t  s   € ÷ %!ñ %! ð %!°ñ %!r;   c               óú  € V P                   \        P                  ! 4       8w  d   R# V P                  P                  ;_uu_ 4        V P
                  pVf;   V'       d    RRR4       R# RV P                   R\        V 4       R2p\        V4      hV'       d	   ^ Vn	        MV;P                  ^,          un	        VP                  ^ 8”  d    RRR4       R# RV n        RRR4       XP                  P                  4        VP                  \        P                  ! 4       Jd.   VP                  P                  V P                   R,           R7       VP"                  P%                  4        R#   + '       g   i     L–; i)a4  
Release one level of the current lock.

When the lock level reaches zero the heartbeat thread is stopped, the participant is committed out of the next
snapshot, and its holder record is removed. 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 heldg      ð?)r/   )rc   rB   rC   rn   ra   ro   r-   rr   rA   ÚlevelÚheartbeat_stopÚsetÚheartbeat_threadrl   Úcurrent_threadÚjoinr%   r�   Úleave)rs   r«   ÚholdrM   s   &$  r8   r�   ÚSoftReadWriteLock.releaset  s  € ð ×Ñ¤§	¢	£Ô+ÙØ�[‰[×!×!Ó!Ø—:‘:ˆDØŠ|ßØ÷	 "Ñ!ð
 2°$·.±.Ð1AÀÌRÐPTËXÈJÐVhÐi�Ü" 3Ó'Ð'ßØ�•
à—
’
˜a••
Ø�z‰z˜AŒ~Ø÷ "Ñ!ð ˆDŒJ÷ "ð$ 	×Ñ×ÑÔ!Ø× Ñ ¬	×(@Ò(@Ó(BÓBØ×!Ñ!×&Ñ&¨t×/FÑ/FÈÕ/LÐ&ÔMØ×Ñ×ÑÖ ÷+ "×!ús$   ÁE*ÁE*Á).E*Â3E*ÃE*Å*E:	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r,   Úmoder   r/   r2   r#   r‹   r4   r   r6   )r7   s   "r8   r9   r^   ›  s2   € ÷  .ñ  .àð .ð ð .ð
 ð .ð 
ñ .r;   c               	ó  € V P                   \        P                  ! 4       8w  d   R V P                   R2p\	        V4      hVf   V P
                  MTpVf   V P                  MTpV P                  P                  ;_uu_ 4        V P                  '       d   R V P                   R2p\	        V4      hV P                  e   V P                  V4      uuRRR4       #  RRR4       \        P                  ! 4       pV'       g(   V P                  P                  P                  RR7      pMUVR8X  d(   V P                  P                  P                  RR7      pM'V P                  P                  P                  RVR7      pV'       g   \!        V P                  4      Rh V P#                  WWSR7      V P                  P                  P%                  4        #   + '       g   i     Lÿ; i  T P                  P                  P%                  4        i ; i)	zSoftReadWriteLock on z4 was invalidated by fork(); construct a new instanceNz has been closedFr�   T)r#   r/   rR   )rc   rB   rC   r-   rA   r/   r#   rn   ra   rq   ro   Ú_validate_reentrantrg   Úperf_counterrb   Úacquirer   Ú_do_acquire_innerr�   )rs   r»   r/   r#   rM   ÚstartÚacquireds   &&&$   r8   rž   ÚSoftReadWriteLock._acquire›  s�  € ð ×Ñ¤§	¢	£Ô+Ø)¨$¯.©.Ð)9Ð9mÐnˆCÜ˜sÓ#Ð#Ø")¢/�$—,’,°wˆØ$,Ò$4�4—=’=¸(ˆà�[‰[×!×!Ó!Ø�|�|ˆ|Ø-¨d¯n©nÐ-=Ð=MÐN�Ü" 3Ó'Ð'Ø�z‰zÒ%Ø×/Ñ/°Ó5÷ "Ò!ð &÷	 "ô ×!Ò!Ó#ˆßØ—{‘{×.Ñ.×6Ñ6ÀÐ6ÓF‰HØ˜Œ]Ø—{‘{×.Ñ.×6Ñ6ÀÐ6ÓE‰Hà—{‘{×.Ñ.×6Ñ6ÀÈgÐ6ÓVˆHßÜ˜$Ÿ.™.Ó)¨tÐ3ð	.Ø×)Ñ)¨$¸Ð)ÓRà�K‰K×#Ñ#×+Ñ+Õ-÷' "×!ûð& �K‰K×#Ñ#×+Ñ+Õ-ús   ÂAGÆG$ ÇG!	Ç$&H
c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r,   r»   r   Úeffective_timeoutr0   rÁ   r#   r1   r4   r   r6   )r7   s   "r8   r9   r^   ½  s<   € ÷ >-ñ >-àð>-ð !ð>-ð ð	>-ð ð>-ð 
ñ>-r;   c               	óê  a a	a
€ S P                   P                  ;_uu_ 4        S P                  e   S P                  V4      uuR R R 4       #  R R R 4       VR
8X  d   R MW2,           p\	        S P
                  S P                  VS P                  \        P                  S P                  S P                  R7      o
S
P                  4         S P                  S
P                  WTR7       \&        P(                  ! 4       p\+        ^TTR8X  d   \&        P,                  ! 4       MR S
\/        T	T
T 3R lS P0                  TR\3        S 4      R 2R7      T\        P                  ! 4       R7      o	R pS P                   P                  ;_uu_ 4        S	S n        R S n         S	P6                  P9                  4        R R R 4       Te   S
P%                  4        Th\;        S R	7      #   + '       g   i     EL–; i  \         dF    \!        \"        4      ;_uu_ 4        S
P%                  4        R R R 4       h   + '       g   i     h ; ii ; i  \         d   pR S n        Tp R p?LªR p?ii ; i  + '       g   i     Lº; i)N)r'   ÚclockÚledgerÚlog)Údeadliner#   r¢   c                 ó(   <€ SP                  SS 4      # ry   )Ú_refresh)r¸   r�   rs   s   €€€r8   Ú<lambda>Ú5SoftReadWriteLock._do_acquire_inner.<locals>.<lambda>ã  s   ø€  §¡¨k¸4Ô @r;   zfilelock-heartbeat-Úx)ÚrefreshÚintervalÚ
stop_eventÚname)r±   r»   Úwrite_thread_idr�   r´   r²   Úlast_refresh©ÚlockrR   )rn   ra   ro   r½   r   rf   re   r'   rg   rh   ri   rj   ÚpublishÚ	_wait_forÚadvanceÚBaseExceptionr   ÚOSErrorr·   rl   ÚEventÚ_HoldÚ	get_identÚ_HeartbeatThreadr%   rr   rp   r´   rÁ   r   )rs   r»   rÅ   rÁ   r#   rÊ   rÒ   Ústart_errorÚerrorr¸   r�   s   f&&&$    @@r8   rÀ   Ú#SoftReadWriteLock._do_acquire_inner½  sõ  ú€ ð �[‰[×!×!Ó!Ø�z‰zÒ%Ø×/Ñ/°Ó5÷ "Ò!Ø%÷ "ð -°Ô2‘4¸Õ8QˆÜ!Ø�K‰KØ�J‰JØØ ×0Ñ0Ü—.‘.Ø—<‘<Ø—	‘	ô
ˆð 	×ÑÔð	Ø�N‰N˜;×.Ñ.¸ˆNÔUô —_’_Ó&ˆ
ÜØØØ59¸W´_œI×/Ò/Ô1È$Ø#Ü-Þ@Ø×0Ñ0Ø%Ø*¬2¨d«8°A¨,Ð7ô	ð &ÜŸšÓ)ô
ˆð$ -1ˆØ�[‰[×!×!Ó!ØˆDŒJØ#ˆDÔð$Ø×%Ñ%×+Ñ+Ô-÷	 "ð Ò"Ø×ÑÔØÐÜ! tÔ,Ð,÷m "×!Ð!ûô  ô 	ô œ'×"Õ"Ø×!Ñ!Ô#÷ #à÷ #Ö"àúð	ûô@ !ô $Ø!�”
Ø#•ûð$ú÷ "×!ús_   ¢GÃ	G. ÆI"ÆIÇG+	Ç."H>ÈH*È!	H>È*H:È5	H>ÉIÉ	IÉI"ÉIÉI"É"I2	c               ó    € V ^8„  d   QhRRRR/# )r,   r»   r   r4   r   r6   )r7   s   "r8   r9   r^   ý  s   € ÷ -ñ -¨ð -Ð1Cñ -r;   c                	óâ  € V P                   pVf   Q hVP                  V8w  dG   VR8X  d   RMRpVR8X  d   RMRpRV RV P                   R\        V 4       RV R	V R
2p\	        V4      hVR8X  d\   \
        P                  ! 4       ;qbP                  8w  d7   RV P                   R\        V 4       RV RVP                   2p\	        V4      hV;P                  ^,          un        \        V R7      # )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Ö   )
ro   r»   r-   rr   rA   rl   rß   rÔ   r±   r   )rs   r»   r¸   ÚoppositeÚ	directionrM   Úcurs   &&     r8   r½   Ú%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Ô,Ð,r;   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r,   Ú	predicateúCallable[[], bool]rÊ   r2   r#   r1   r4   r]   r6   )r7   s   "r8   r9   r^     s2   € ÷ "ñ "à%ð"ð ð	"ð
 ð"ð 
ñ"r;   c               	óJ  € V! 4       '       g–   \         P                  ! 4       pV'       g   \        V P                  4      hVe   WB8¼  d   \        V P                  4      hV P                  pVe   \        V\        W$,
          R4      4      p\         P                  ! V4       K¢  R # )Ng        )rg   r¾   r   r-   r(   ÚminÚmaxÚsleep)rs   rí   rÊ   r#   ÚnowÚ	sleep_fors   &&$$  r8   rÙ   ÚSoftReadWriteLock._wait_for  s{   € ñ —+’+Ü×#Ò#Ó%ˆCßÜ˜dŸn™nÓ-Ð-ØÒ#¨¬Ü˜dŸn™nÓ-Ð-Ø×*Ñ*ˆIØÒ#Ü 	¬3¨x­~¸sÓ+CÓD�	Ü�JŠJ�yÖ!ñ r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r,   r�   r   r¸   rÞ   r4   r1   r6   )r7   s   "r8   r9   r^   #  s!   € ÷ ñ  Kð °uð Àñ r;   c                	ó^  € VP                  4       w  r4VR 8X  d   \        P                  ! 4       Vn        R# VR8X  d   V P	                  VRR4       R# \        P                  ! 4       VP                  ,
          V P
                  V P                  ,
          8¼  d   V P	                  VRV4       R# R# )ÚokTÚlostÚevictedNFzrefresh-failed)Ú	heartbeatrg   rh   rÕ   Ú_report_compromiser'   r%   )rs   r�   r¸   Úoutcomerâ   s   &&&  r8   rÌ   ÚSoftReadWriteLock._refresh#  sŽ   € ð
 %×.Ñ.Ó0‰ˆØ�dŒ?Ü $§¢Ó 0ˆDÔÙØ�fÔØ×#Ñ# D¨)°TÔ:ÙÜ�>Š>Ó˜d×/Ñ/Õ/°4×3GÑ3GÈ$×JaÑJaÕ3aÔaØ×#Ñ# DÐ*:¸EÔBÙÙr;   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r,   r¸   rÞ   Úreasonr   râ   zOSError | Noner4   r]   r6   )r7   s   "r8   r9   r^   4  s*   € ÷ 
,ñ 
, uð 
,Ð6Fð 
,È~ð 
,Ðbfñ 
,r;   c           	     	óV  € V P                   P                  ;_uu_ 4        V P                  VJd    R R R 4       R # \        V P                  VP
                  P                  W#R7      pW@n        R R R 4       V P                  e   V P                  X4       R # R #   + '       g   i     L3; i)N)r-   Útokenr   râ   )	rn   ra   ro   r   r-   r�   r  rp   rG   )rs   r¸   r   râ   r‡   s   &&&& r8   rü   Ú$SoftReadWriteLock._report_compromise4  sƒ   € à�[‰[×!×!Ó!Ø�z‰z Ó%Ø÷ "Ñ!ô )ØŸ.™.°×0@Ñ0@×0FÑ0FÈvôˆJð  *Ô÷ "ð ×ÑÒ*Ø×Ñ 
Ö+ñ +÷ "×!ús   ŸB»2BÂB(	c               ó   € V ^8„  d   QhRR/# rw   r6   )r7   s   "r8   r9   r^   @  s   € ÷ ñ ¨Dñ r;   c                	ó„   € \        \        P                  ! 4       \        P                  ! 4       R 7      V n        RV n        R# )r`   N)rk   rl   rm   rn   ro   rƒ   s   &r8   Ú_reset_after_fork_in_childÚ,SoftReadWriteLock._reset_after_fork_in_child@  s%   € Ü¤i§n¢nÓ&6ÄIÇNÂNÓDTÔUˆŒØˆŽ
r;   )rq   rp   rc   rf   ro   ri   rn   rj   rG   re   r#   r%   r-   r(   r'   r/   rQ   ry   )!rS   rT   rU   rV   Ú__doc__r
   r!   rW   rl   rz   r"   rt   Úclassmethodr|   Úpropertyr‚   r‡   r   r‘   r—   rŽ   r–   r¦   r¬   r�   rž   rÀ   r½   rÙ   rÌ   rü   r  rX   r6   r;   r8   r5   r5   p   si  ‡ ñ2ñh @SÓ?T€JÐ<ÓTØ—o’oÓ'€Oñ#$ð
 ð#$ð "ð#$ð %)ð#$ð )-ð#$ð  $ð#$ð CG÷#$ð #$ðJ ô/ó ð/ð ôUó ðUð ô$ó ð$ð ñÐQU÷ ó ðð& ñÐRV÷ ó ðñ&AÐTX÷ Að Añ4BÐUY÷ Bð Bð: ñ:ð
 ÷:ó ð:õ* ð%! u÷ %!õN .õD>-õ@-õ("õ$õ"
,÷ñ r;   r5   )Ú	metaclassc                  ó:   a € ] tR tRtR V 3R lltR R ltRtV ;t# )rà   iE  c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r,   rÐ   rî   rÑ   r0   rÒ   úthreading.EventrÓ   Ústrr4   r]   r6   )r7   s   "r8   r9   Ú_HeartbeatThread.__annotate__F  s<   € ÷ 
&ñ 
&à#ð
&ð ð
&ð $ð	
&ð
 ð
&ð 
ñ
&r;   c                	óN   <€ \         SV `  VR R7       Wn        W n        W0n        R# )T)rÓ   ÚdaemonN)r=   rt   rÌ   Ú	_intervalÚ_stop_event)rs   rÐ   rÑ   rÒ   rÓ   rO   s   &&&&&€r8   rt   Ú_HeartbeatThread.__init__F  s'   ø€ ô 	‰Ñ˜d¨4ÐÔ0ØŒØ!ŒØ%Ör;   c               ó   € V ^8„  d   QhRR/# rw   r6   )r7   s   "r8   r9   r  R  s   € ÷ ñ �Tñ r;   c                	óÄ   € V P                   P                  V P                  4      '       g5   V P                  4       '       d   KC  V P                   P	                  4        R # R # ry   )r  Úwaitr  rÌ   r³   rƒ   s   &r8   ÚrunÚ_HeartbeatThread.runR  sB   € Ø×"Ñ"×'Ñ'¨¯©×7Ò7Ø—=‘=—?”?Ø× Ñ ×$Ñ$Ô&Ùñ 8r;   )r  rÌ   r  )rS   rT   rU   rV   rt   r  rX   rY   rZ   s   @r8   rà   rà   E  s   ø† ÷
&ð 
&÷ó r;   rà   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r,   r%   r0   r'   r2   r(   r4   r6   )r7   s   "r8   r9   r9   Y  s*   € ÷ ñ ¨Eð ÀLð Ðafð Ðkpñ r;   c                óF  € \        V 4      '       d   V ^ 8:  d   RV  2p\        V4      hVf
   V ^,          p\        V4      '       d   W8:  d   RV  RV 2p\        V4      h\        V4      '       d   V^ 8:  d   RV 2p\        V4      hW!8¼  d   RV RV 2p\        V4      hV# )é    z4heartbeat_interval must be positive and finite, got z0stale_threshold must exceed heartbeat_interval (z) and be finite, got z/poll_interval must be positive and finite, got z-poll_interval must be below stale_threshold (z), got )r   rF   )r%   r'   r(   rM   s   &&& r8   rH   rH   Y  sÌ   € ÜÐ&×'Ò'Ð+=ÀÔ+BØDÐEWÐDXÐYˆÜ˜‹oÐØÒØ,¨qÕ0ˆÜ�O×$Ò$¨Ô(Mà>Ð?QÐ>Rð S"Ø"1Ð!2ð4ð 	ô ˜‹oÐÜ�M×"Ò" m°qÔ&8Ø?À¸ÐOˆÜ˜‹oÐàÔ'Ø=¸oÐ=NÈgÐVcÐUdÐeˆÜ˜‹oÐØÐr;   c                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )rk   io  r   ra   rb   r6   N)rS   rT   rU   rV   rW   rX   r6   r;   r8   rk   rk   o  s   ‡ àÓØ×r;   rk   c                  ób   € ] tR tRt$ RtR]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   R]R&   RtR# )rÞ   iu  zYEverything that exists only while a lock is held; ``None`` when the instance has no lock.Úintr±   r   r»   r   rÔ   r   r�   rà   r´   r  r²   r0   rÕ   r6   N)rS   rT   rU   rV   r  rW   rX   r6   r;   r8   rÞ   rÞ   u  s-   ‡ ácàƒJØ
ƒJØÓØÓØ&Ó&Ø#Ó#Ø×r;   rÞ   c               ó   € V ^8„  d   QhRR/# rw   r6   )r7   s   "r8   r9   r9   ‚  s   € ÷ )ñ ) ñ )r;   c                 óÚ   € \        \        P                  4       4       F5  p \        \        4      ;_uu_ 4        V P                  R R7       RRR4       K7  	  R#   + '       g   i     KL  ; i)Trª   N)Úlistr   Úvaluesr   Ú	Exceptionr�   )rL   s    r8   Ú_cleanup_all_instancesr&  ‚  sH   € Üœ×.Ñ.Ó0Ö1ˆÜ”i× Õ Ø×Ñ 4ÐÔ(÷ !Ñ ó 2ß × Ð ús   ¸AÁA*)<Ú__conditional_annotations__r  Ú
__future__r   ÚatexitrB   rl   rg   Ú
contextlibr   r   Údataclassesr   Úmathr   Úpathlibr   Útypingr   r	   Úweakrefr
   Úfilelock._apir   r   r   r   r   Úfilelock._errorr   Úfilelock._leaser   Ú	_protocolr   r   r   r   Ú_storager   Úcollections.abcr   r   r   r   rW   rm   r   r³   r   Útyper   r5   ÚThreadrà   rH   rk   rÞ   r&  ÚregisterÚ__all__)r'  s   @r8   Ú<module>r:     s  øðÜ cå "ã Û 	Û Û ß /Ý !Ý Ý ß 'Ý '÷õ õ $Ý +ç ?Ó ?Ý çß3å0áEXÓEZ€ÐBÓ ZØ&/§n¢nÓ&6Ð �^Ó 6Ù36³5Ð Ð 0Ó 8ôF�$ô FôRR +õ Rôj�y×'Ñ'ô õ(ð, ÷ ð  ó ð ð
 ÷	ð 	ó ð	õ)ð ‡‚Ð&Ô 'Ù Ð&Ô 'ð ð‚r;   