§
    xÅj‰R  ã                  ó*  — 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m
Z
mZmZ d dlmZ d dlmZ d dlmZ erd dlmZ  ej        d¦  «        Z eed¦  «        r eed	¦  «        r eed
¦  «        sdej        › �Z ee¦  «        ‚  ej        eee
ed¬¦  «        d	ef¦  «        Z  ej        eeed¬¦  «        d
ef¦  «        Z  ej        ed¬¦  «        def¦  «        Z G d„ d¦  «        Z ed„ ej        ej         ej!        ej"        ej#        ej$        ej%        ej&        ej'        ej(        ej)        g¦  «        Z* G d„ dej+        ¦  «        Z, ej-        e,¦  «        Z.dZ/e/e.dz   z  Z0 G d„ d¦  «        Z1 G d„ d¦  «        Z2dS )é    )ÚannotationsN)Úc_char_pÚc_intÚc_uint32)Úreduce)ÚTYPE_CHECKING)ÚUnsupportedLibcError)Ú	GeneratorÚinotify_initÚinotify_add_watchÚinotify_rm_watchz Unsupported libc version found: T)Ú	use_errnoc                  ó¦   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZe	e
z  ZdZdZdZdZdZdZdZdZdZ ed„ eeeeeee	e
eeeeg¦  «        ZdZdZdS )ÚInotifyConstantsé   é   é   é   é   é    é@   é€   é   i   i   é   i    i @  i €  i   i   i   i    i   @l        c                ó   — | |z  S ©N© ©ÚxÚys     úMC:\Projects\Historical\venv\Lib\site-packages\watchdog/observers/inotify_c.pyú<lambda>zInotifyConstants.<lambda>B   s
   € �Q˜‘U€ ó    N)Ú__name__Ú
__module__Ú__qualname__Ú	IN_ACCESSÚ	IN_MODIFYÚ	IN_ATTRIBÚIN_CLOSE_WRITEÚIN_CLOSE_NOWRITEÚIN_OPENÚIN_MOVED_FROMÚIN_MOVED_TOÚ	IN_CREATEÚ	IN_DELETEÚIN_DELETE_SELFÚIN_MOVE_SELFÚIN_MOVEÚ
IN_UNMOUNTÚIN_Q_OVERFLOWÚ
IN_IGNOREDÚ
IN_ONLYDIRÚIN_DONT_FOLLOWÚIN_EXCL_UNLINKÚIN_MASK_ADDÚIN_ISDIRÚ
IN_ONESHOTr   ÚIN_ALL_EVENTSÚ
IN_CLOEXECÚIN_NONBLOCKr   r#   r!   r   r   !   sÖ   € € € € € à€IØ€IØ€IØ€NØ!ÐØ€GØ€MØ€KØ€IØ€IØ€NØ€Lð ˜kÑ)€Gð €JØ€MØ€Jð €JØ€NØ€NØ€KØ€HØ€Jð �FØÐàØØØØØØØØØØØð	
ñô €Mð& €JØ€K€K€Kr#   r   c                ó   — | |z  S r   r   r   s     r!   r"   r"   Z   s
   € ��Q‘€ r#   c                  ó4   — e Zd ZdZdefdefdefdefdeffZdS )ÚInotifyEventStructaÈ  Structure representation of the inotify_event structure
    (used in buffer size calculations)::

        struct inotify_event {
            __s32 wd;            /* watch descriptor */
            __u32 mask;          /* watch mask */
            __u32 cookie;        /* cookie to synchronize two events */
            __u32 len;           /* length (including nulls) of name */
            char  name[0];       /* stub for possible name */
        };
    ÚwdÚmaskÚcookieÚlenÚnameN)r$   r%   r&   Ú__doc__r   r   r   Ú_fields_r   r#   r!   rB   rB   k   sH   € € € € € ð
ð 
ð 
ˆuˆØ	�ÐØ	�8ÐØ	�ÐØ	�Ðð€H€H€Hr#   rB   r   r   c                  ó  — e Zd ZdZdddœd)d„Zed*d„¦   «         Zed+d„¦   «         Zed,d„¦   «         Zed*d„¦   «         Z	d-d„Z
d.d„Zd/d„Zd0d„Zd0d„Zd-d„Zedœd1d „Zd-d!„Zd2d#„Zd3d$„Zed-d%„¦   «         Zed4d(„¦   «         ZdS )5ÚInotifya  Linux inotify(7) API wrapper class.

    :param path:
        The directory path for which we want an inotify object.
    :type path:
        :class:`bytes`
    :param recursive:
        ``True`` if subdirectories should be monitored; ``False`` otherwise.
    FN)Ú	recursiveÚ
event_maskÚpathÚbytesrL   ÚboolrM   ú
int | NoneÚreturnÚNonec               ó6  ‡ — t          ¦   «         }|dk    rt                               ¦   «          |‰ _        t	          j        ¦   «         ‰ _        d‰ _        d‰ _        t          j
        ¦   «         \  ‰ _        ‰ _        t          t          d¦  «        rzt          j        ¦   «         ‰ _        ‰ j                             ‰ j        t          j        ¦  «         ‰ j                             ‰ j        t          j        ¦  «         d
ˆ fd„}|‰ _        nd
ˆ fd„}|‰ _        i ‰ _        i ‰ _        |‰ _        |€t.          }|‰ _        |‰ _        t          j                             |¦  «        r‰                      |||¬	¦  «         n‰                      ||¦  «         i ‰ _        d S )NéÿÿÿÿFTÚpollrR   rP   c                 óh   •— t          ˆ fd„‰ j                             ¦   «         D ¦   «         ¦  «        S )Nc              3  ó4   •K  — | ]\  }}|‰j         k    V — Œd S r   ©Ú_inotify_fd)Ú.0ÚfdÚ_Úselfs      €r!   ú	<genexpr>z4Inotify.__init__.<locals>.do_poll.<locals>.<genexpr>£   s/   øè è € ÐSÐS±e°b¸!˜2 Ô!1Ò1ÐSÐSÐSÐSÐSÐSr#   )ÚanyÚ_pollerrV   ©r^   s   €r!   Údo_pollz!Inotify.__init__.<locals>.do_poll¢   s4   ø€ ÝÐSÐSÐSÐS¸t¼|×?PÒ?PÑ?RÔ?RÐSÑSÔSÑSÔSÐSr#   c                 óf   •— t          j         ‰j        ‰j        gg g ¦  «        } ‰j        | d         v S ©Nr   )ÚselectrZ   Ú_kill_r)Úresultr^   s    €r!   Ú	do_selectz#Inotify.__init__.<locals>.do_select¨   s2   ø€ Ýœ¨Ô(8¸$¼,Ð'GÈÈRÑPÔP�ØÔ'¨6°!¬9Ð4Ð4r#   )rL   ©rR   rP   )r   rK   Ú_raise_errorrZ   Ú	threadingÚLockÚ_lockÚ_closedÚ_is_readingÚosÚpiperg   Ú_kill_wÚhasattrrf   rV   ra   ÚregisterÚPOLLINÚ_check_inotify_fdÚ_wd_for_pathÚ_path_for_wdÚ_pathÚWATCHDOG_ALL_EVENTSÚ_event_maskÚ_is_recursiverN   ÚisdirÚ_add_dir_watchÚ
_add_watchÚ_moved_from_events)r^   rN   rL   rM   Ú
inotify_fdrc   ri   s   `      r!   Ú__init__zInotify.__init__‘   s   ø€ å!‘^”^ˆ
Ø˜ÒÐÝ× Ò Ñ"Ô"Ð"Ø%ˆÔÝ”^Ñ%Ô%ˆŒ
ØˆŒØˆÔÝ%'¤W¡Y¤YÑ"ˆŒ�d”lõ •6˜6Ñ"Ô"ð 	/Ý!œ;™=œ=ˆDŒLØŒL×!Ò! $Ô"2µF´MÑBÔBÐBØŒL×!Ò! $¤,µ´Ñ>Ô>Ð>ðTð Tð Tð Tð Tð Tð &-ˆDÔ"Ð"ð5ð 5ð 5ð 5ð 5ð 5ð &/ˆDÔ"ð /1ˆÔØ.0ˆÔàˆŒ
àÐÝ,ˆJØ%ˆÔØ&ˆÔÝŒ7�=Š=˜ÑÔð 	.Ø×Ò  j¸IÐÑFÔFÐFÐFà�OŠO˜D *Ñ-Ô-Ð-Ø;=ˆÔÐÐr#   Úintc                ó   — | j         S )z)The event mask for this inotify instance.)r|   rb   s    r!   rM   zInotify.event_mask¾   ó   € ð ÔÐr#   c                ó   — | j         S )z.The path associated with the inotify instance.)rz   rb   s    r!   rN   zInotify.pathÃ   s   € ð ŒzÐr#   c                ó   — | j         S )z0Whether we are watching directories recursively.)r}   rb   s    r!   Úis_recursivezInotify.is_recursiveÈ   s   € ð Ô!Ð!r#   c                ó   — | j         S )z9The file descriptor associated with the inotify instance.rY   rb   s    r!   r\   z
Inotify.fdÍ   r†   r#   c                ó   — i | _         dS )z)Clear cached records of MOVED_FROM eventsN)r�   rb   s    r!   Úclear_move_recordszInotify.clear_move_recordsÒ   s   € à"$ˆÔÐÐr#   Údestination_eventÚInotifyEventúbytes | Nonec                óP   — |j         | j        v r| j        |j                  j        S dS )z§The source path corresponding to the given MOVED_TO event.

        If the source path is outside the monitored directories, None
        is returned instead.
        N)rE   r�   Úsrc_path)r^   r�   s     r!   Úsource_for_movezInotify.source_for_moveÖ   s/   € ð Ô# tÔ'>Ð>Ð>ØÔ*Ð+<Ô+CÔDÔMÐMàˆtr#   Úeventc                ó$   — || j         |j        <   dS )z]Save this event as the source event for future MOVED_TO events to
        reference.
        N)r�   rE   )r^   r“   s     r!   Úremember_move_from_eventz Inotify.remember_move_from_eventá   s   € ð 16ˆÔ ¤Ñ-Ð-Ð-r#   c                ó|   — | j         5  |                      || j        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zeAdds a watch for the given path.

        :param path:
            Path to begin monitoring.
        N)rn   r€   r|   )r^   rN   s     r!   Ú	add_watchzInotify.add_watchç   s‡   € ð ŒZð 	4ð 	4Ø�OŠO˜D $Ô"2Ñ3Ô3Ð3ð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4ð 	4ð 	4s   ˆ1±5¸5c                óî   — | j         5  | j                             |¦  «        }| j        |= t	          | j        |¦  «        dk    rt                               ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )zRemoves a watch for the given path.

        :param path:
            Path string for which the watch will be removed.
        rU   N)rn   rx   Úpopry   r   rZ   rK   rk   )r^   rN   rC   s      r!   Úremove_watchzInotify.remove_watchð   s»   € ð ŒZð 	'ð 	'ØÔ"×&Ò& tÑ,Ô,ˆBØÔ! "Ð%Ý Ô 0°"Ñ5Ô5¸Ò;Ð;Ý×$Ò$Ñ&Ô&Ð&ð		'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   ˆAA*Á*A.Á1A.c                ó8  — | j         5  | j        srd| _        | j        | j        v r'| j        | j                 }t	          | j        |¦  «         | j        rt          j        | j	        d¦  «         n|  
                    ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )z?Closes the inotify instance and removes all associated watches.Tó   !N)rn   ro   rz   rx   r   rZ   rp   rq   Úwriters   Ú_close_resources)r^   rC   s     r!   ÚclosezInotify.closeü   sç   € àŒZð 	,ð 	,Ø”<ð ,Ø#�”à”: Ô!2Ð2Ð2ØÔ*¨4¬:Ô6�BÝ$ TÔ%5°rÑ:Ô:Ð:àÔ#ð ,õ ”H˜Tœ\¨4Ñ0Ô0Ð0Ð0à×)Ò)Ñ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,s   ˆA:BÂBÂB)Úevent_buffer_sizer    úlist[InotifyEvent]c          	     óD  ‡ — dˆ fd„}d}	 	 ‰ j         5  ‰ j        rg cddd¦  «         S d‰ _        ddd¦  «         n# 1 swxY w Y   ‰                      ¦   «         rt	          j        ‰ j        |¦  «        }‰ j         5  d	‰ _        ‰ j        r"‰                      ¦   «          g cddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   nI# t          $ r<}|j	        t          j
        k    rY d}~Œà|j	        t          j        k    rg cY d}~S ‚ d}~ww xY w	 ‰ j         5  g }t                               |¦  «        D �]R\  }}}}	|d
k    rŒ‰ j        |         }
|	r t          j                             |
|	¦  «        n|
}t#          ||||	|¦  «        }|j        r‰                      |¦  «         �n1|j        �r)‰                      |¦  «        }|‰ j        v rØ‰ j        |         }‰ j        |= |‰ j        |j        <   |j        ‰ j        |<   ‰ j        rž‰ j                             ¦   «         D ]„}|                     |t          j        j                             ¦   «         z   ¦  «        rI‰ j                             |¦  «        }|                     ||j        ¦  «        }|‰ j        |<   |‰ j        |<   Œ…t          j                             |
|	¦  «        }t#          ||||	|¦  «        }|j        r3‰ j                             |¦  «        }‰ j        |         |k    r‰ j        |= |                      |¦  «         ‰ j        rZ|j!        rS|j"        rL	 ‰  #                    |‰ j$        ¦  «         n# t          $ r Y �Œ0w xY w| %                     ||¦  «        ¦  «         �ŒT	 ddd¦  «         n# 1 swxY w Y   |S )z*Reads events from inotify and yields them.r‘   rO   rR   r¡   c           
     ó¨  •— g }t          j        | ¦  «        D �]8\  }}}|D ]­}t          j        t          ¦  «        5  t           j                             ||¦  «        }‰                     |‰j        ¦  «        }t          |t          j        t          j        z  d||¦  «        }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   Œ®|D ]~}	t           j                             ||	¦  «        }‰j        t           j                             |¦  «                 }
t          |
t          j        d|	|¦  «        }|                     |¦  «         Œ�Œ:|S re   )rq   ÚwalkÚ
contextlibÚsuppressÚOSErrorrN   Újoinr€   r|   rŽ   r   r/   r;   Úappendrx   Údirname)r‘   ÚeventsÚrootÚdirnamesÚ	filenamesrª   Ú	full_pathÚwd_dirÚeÚfilenameÚwd_parent_dirr^   s              €r!   Ú_recursive_simulatez0Inotify.read_events.<locals>._recursive_simulate  sŒ  ø€ ØˆFÝ-/¬W°XÑ->Ô->ð %ñ %Ñ)��h 	Ø'ð )ð )�GÝ#Ô,­WÑ5Ô5ð 
)ð 
)Ý$&¤G§L¢L°°wÑ$?Ô$?˜	Ø!%§¢°¸DÔ<LÑ!MÔ!M˜Ý(Ø"Ý,Ô6Õ9IÔ9RÑRØØ#Ø%ñô ˜ð Ÿš aÑ(Ô(Ð(ð
)ð 
)ð 
)ñ 
)ô 
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)øøøð 
)ð 
)ð 
)ð 
)øð !*ð 
%ð 
%�HÝ "¤§¢¨T°8Ñ <Ô <�IØ$(Ô$5µb´g·o²oÀiÑ6PÔ6PÔ$Q�MÝ$Ø%Ý(Ô2ØØ Ø!ñô �Að —M’M !Ñ$Ô$Ð$Ð$ñ
%ð ˆMs   ¼A;CÃCÃ
Cr#   TNFrU   )r‘   rO   rR   r¡   )&rn   ro   rp   rw   rq   ÚreadrZ   rž   r§   ÚerrnoÚEINTRÚEBADFrK   Ú_parse_event_bufferry   rN   r¨   rŽ   Úis_moved_fromr•   Úis_moved_tor’   rx   r‘   r‰   ÚcopyÚ
startswithÚsepÚencoder™   ÚreplaceÚ
is_ignoredr©   Úis_directoryÚ	is_creater€   r|   Úextend)r^   r    r´   Úevent_bufferr±   Ú
event_listrC   rD   rE   rG   Úwd_pathr‘   Úinotify_eventÚmove_src_pathÚmoved_wdrz   Ú_move_to_pathrN   s   `                 r!   Úread_eventszInotify.read_events  s.  ø€ ð	ð 	ð 	ð 	ð 	ð 	ð8 ˆð	ðØ”Zð ,ð ,Ø”|ð "Ø!ð,ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð (,�DÔ$ð	,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ×)Ò)Ñ+Ô+ð PÝ#%¤7¨4Ô+;Ð=NÑ#OÔ#O�Là”Zð "ð "Ø',�DÔ$à”|ð "Ø×-Ò-Ñ/Ô/Ð/Ø!ð"ð "ð "ð "ñ "ô "ð "ð "ð"ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "øøõ ð ð ð Ø”7�eœkÒ)Ð)Ø�H�H�H�Hà”7�eœkÒ)Ð)Ø�I�I�I�I�I�Iàøøøøðøøøð àŒZð 1	Eð 1	EØˆJÝ*1×*EÒ*EÀlÑ*SÔ*Sð /Eñ /EÑ&��D˜& $Ø˜’8�8ØØÔ+¨BÔ/�Ø:>ÐK�2œ7Ÿ<š<¨°Ñ6Ô6Ð6ÀG�Ý ,¨R°°v¸tÀXÑ NÔ N�à Ô.ð SØ×1Ò1°-Ñ@Ô@Ð@Ñ@Ø"Ô.ñ SØ$(×$8Ò$8¸Ñ$GÔ$G�MØ$¨Ô(9Ð9Ð9Ø#'Ô#4°]Ô#C˜Ø Ô-¨mÐ<ØDL˜Ô)¨-Ô*@ÑAØ6CÔ6L˜Ô)¨(Ñ3ØÔ,ð PØ)-Ô):×)?Ò)?Ñ)AÔ)Að Pð P Ø#(×#3Ò#3°MÅBÄGÄK×DVÒDVÑDXÔDXÑ4XÑ#YÔ#Yð !PØ/3Ô/@×/DÒ/DÀUÑ/KÔ/K HØ49·M²MÀ-ÐQ^ÔQgÑ4hÔ4h MØGO DÔ$5°mÑ$DØBO DÔ$5°hÑ$?øÝ!œwŸ|š|¨G°TÑ:Ô:�HÝ$0°°T¸6À4ÈÑ$RÔ$R�Mà Ô+ð 4àÔ,×0Ò0°Ñ4Ô4�DØÔ(¨Ô.°"Ò4Ð4Ø Ô-¨dÐ3à×!Ò! -Ñ0Ô0Ð0àÔ$ð E¨Ô)Cð EÈÔH_ð Eð!ØŸš¨°$Ô2BÑCÔCÐCÐCøÝ"ð !ð !ð !Ø ™ð!øøøð ×%Ò%Ð&9Ð&9¸(Ñ&CÔ&CÑDÔDÐDùð_/Eð1	Eð 1	Eð 1	Eñ 1	Eô 1	Eð 1	Eð 1	Eð 1	Eð 1	Eð 1	Eð 1	Eøøøð 1	Eð 1	Eð 1	Eð 1	Eðf Ðs³   ŒC “	<œC ©<°C ¼A Á C ÁA Á8C Á<$B:Â C Â.C Â:B>Â>C ÃB>ÃC Ã
DÃDÃ*DÄ DÄDÄDÄH#NÌ;MÍNÍ
M%Í!NÍ$M%Í%#NÎNÎNc                óœ   — t          j        | j        ¦  «         t          j        | j        ¦  «         t          j        | j        ¦  «         d S r   )rq   rŸ   rZ   rg   rs   rb   s    r!   rž   zInotify._close_resources�  s?   € Ý
Œ�Ô!Ñ"Ô"Ð"Ý
Œ�”ÑÔÐÝ
Œ�”ÑÔÐÐÐr#   rD   c               óÒ  — t           j                             |¦  «        s7t          t          j        t          j        t          j        ¦  «        |¦  «        ‚|                      ||¦  «         |rvt          j        |¦  «        D ]c\  }}}|D ]X}t           j         	                    ||¦  «        }t           j         
                    |¦  «        rŒB|                      ||¦  «         ŒYŒbdS dS )a&  Adds a watch (optionally recursively) for the given directory path
        to monitor events specified by the mask.

        :param path:
            Path to monitor
        :param recursive:
            ``True`` to monitor recursively.
        :param mask:
            Event bit mask.
        N)rq   rN   r~   r§   r¶   ÚENOTDIRÚstrerrorr€   r¤   r¨   Úislink)	r^   rN   rD   rL   r¬   r­   r]   rª   r¯   s	            r!   r   zInotify._add_dir_watch‡  sâ   € õ Œw�}Š}˜TÑ"Ô"ð 	KÝ�%œ-­¬µU´]Ñ)CÔ)CÀTÑJÔJÐJØ�Š˜˜dÑ#Ô#Ð#Øð 	5Ý%'¤W¨T¡]¤]ð 5ð 5Ñ!��h Ø'ð 5ð 5�GÝ "¤§¢¨T°7Ñ ;Ô ;�IÝ”w—~’~ iÑ0Ô0ð !Ø Ø—O’O I¨tÑ4Ô4Ð4Ð4ð	5ð	5ð 	5ð5ð 5r#   c                ó˜   — t          | j        ||¦  «        }|dk    rt                               ¦   «          || j        |<   || j        |<   |S )z¼Adds a watch for the given path to monitor events specified by the
        mask.

        :param path:
            Path to monitor
        :param mask:
            Event bit mask.
        rU   )r   rZ   rK   rk   rx   ry   )r^   rN   rD   rC   s       r!   r€   zInotify._add_watch�  sR   € õ ˜tÔ/°°tÑ<Ô<ˆØ�Š8ˆ8Ý× Ò Ñ"Ô"Ð"Ø"$ˆÔ˜$ÑØ $ˆÔ˜"ÑØˆ	r#   c                 ó8  — t          j        ¦   «         } | t          j        k    rt	          t          j        d¦  «        ‚| t          j        k    rt	          t          j        d¦  «        ‚| t          j        k    r"t	          | t          j        | ¦  «        ¦  «        ‚dS )z#Raises errors for inotify failures.zinotify watch limit reachedzinotify instance limit reachedN)	ÚctypesÚ	get_errnor¶   ÚENOSPCr§   ÚEMFILEÚEACCESrq   rÐ   )Úerrs    r!   rk   zInotify._raise_error­  s�   € õ ÔÑ Ô ˆà•%”,ÒÐÝ�%œ,Ð(EÑFÔFÐFà•%”,ÒÐÝ�%œ,Ð(HÑIÔIÐIà•%”,ÒÐÝ˜#�rœ{¨3Ñ/Ô/Ñ0Ô0Ð0ð Ðr#   rÅ   ú&Generator[tuple[int, int, int, bytes]]c              #  ó  K  — d}|dz   t          | ¦  «        k    rit          j        d| |¦  «        \  }}}}| |dz   |dz   |z   …                              d¦  «        }|d|z   z  }||||fV — |dz   t          | ¦  «        k    °gdS dS )aƒ  Parses an event buffer of ``inotify_event`` structs returned by
        inotify::

            struct inotify_event {
                __s32 wd;            /* watch descriptor */
                __u32 mask;          /* watch mask */
                __u32 cookie;        /* cookie to synchronize two events */
                __u32 len;           /* length (including nulls) of name */
                char  name[0];       /* stub for possible name */
            };

        The ``cookie`` member of this struct is used to pair two related
        events, for example, it pairs an IN_MOVED_FROM event with an
        IN_MOVED_TO event.
        r   r   ÚiIIIó    N)rF   ÚstructÚunpack_fromÚrstrip)rÅ   ÚirC   rD   rE   ÚlengthrG   s          r!   r¹   zInotify._parse_event_buffer»  s³   è è € ð" ˆØ�"‰f�˜LÑ)Ô)Ò)Ð)Ý'-Ô'9¸&À,ÐPQÑ'RÔ'RÑ$ˆB��f˜fØ  B¡¨¨R©°&©Ð 8Ô9×@Ò@ÀÑGÔGˆDØ��f‘ÑˆAØ�d˜F DÐ(Ð(Ð(Ð(ð	 �"‰f�˜LÑ)Ô)Ò)Ð)Ð)Ð)Ð)Ð)r#   )rN   rO   rL   rP   rM   rQ   rR   rS   ©rR   r„   ©rR   rO   rj   )rR   rS   )r�   rŽ   rR   r�   )r“   rŽ   rR   rS   )rN   rO   rR   rS   )r    r„   rR   r¡   )rN   rO   rD   r„   rL   rP   rR   rS   )rN   rO   rD   r„   rR   r„   )rÅ   rO   rR   rÚ   )r$   r%   r&   rH   rƒ   ÚpropertyrM   rN   r‰   r\   rŒ   r’   r•   r—   rš   rŸ   ÚDEFAULT_EVENT_BUFFER_SIZErÌ   rž   r   r€   Ústaticmethodrk   r¹   r   r#   r!   rK   rK   †   sä  € € € € € ðð ð :?ÐY]ð +>ð +>ð +>ð +>ð +>ð +>ðZ ð ð  ð  ñ „Xð ð ðð ð ñ „Xðð ð"ð "ð "ñ „Xð"ð ð ð  ð  ñ „Xð ð%ð %ð %ð %ð	ð 	ð 	ð 	ð6ð 6ð 6ð 6ð4ð 4ð 4ð 4ð
'ð 
'ð 
'ð 
'ð,ð ,ð ,ð ,ð" 7Pð rð rð rð rð rð rðhð ð ð ð5ð 5ð 5ð 5ð,ð ð ð ð  ð1ð 1ð 1ñ „\ð1ð ð)ð )ð )ñ „\ð)ð )ð )r#   rK   c                  óJ  — e Zd ZdZd,d„Zed-d„¦   «         Zed.d„¦   «         Zed.d„¦   «         Zed.d„¦   «         Z	ed-d„¦   «         Z
ed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d„¦   «         Zed/d „¦   «         Zed0d"„¦   «         Zd1d%„Zd1d&„Zd.d'„Zed2d)„¦   «         Zd3d*„Z d+S )4rŽ   a	  Inotify event struct wrapper.

    :param wd:
        Watch descriptor
    :param mask:
        Event mask
    :param cookie:
        Event cookie
    :param name:
        Base name of the event source path.
    :param src_path:
        Full event source path.
    rC   r„   rD   rE   rG   rO   r‘   rR   rS   c                óL   — || _         || _        || _        || _        || _        d S r   )Ú_wdÚ_maskÚ_cookieÚ_nameÚ	_src_path)r^   rC   rD   rE   rG   r‘   s         r!   rƒ   zInotifyEvent.__init__ã  s)   € ØˆŒØˆŒ
ØˆŒØˆŒ
Ø!ˆŒˆˆr#   c                ó   — | j         S r   )rî   rb   s    r!   r‘   zInotifyEvent.src_pathê  s
   € àŒ~Ðr#   c                ó   — | j         S r   )rê   rb   s    r!   rC   zInotifyEvent.wdî  s	   € àŒxˆr#   c                ó   — | j         S r   )rë   rb   s    r!   rD   zInotifyEvent.maskò  ó
   € àŒzÐr#   c                ó   — | j         S r   )rì   rb   s    r!   rE   zInotifyEvent.cookieö  s
   € àŒ|Ðr#   c                ó   — | j         S r   )rí   rb   s    r!   rG   zInotifyEvent.nameú  rò   r#   rP   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r(   rb   s    r!   Ú	is_modifyzInotifyEvent.is_modifyþ  ó   € àŒzÕ,Ô6Ñ6¸Ò:Ð:r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r*   rb   s    r!   Úis_close_writezInotifyEvent.is_close_write  ó   € àŒzÕ,Ô;Ñ;¸aÒ?Ð?r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r+   rb   s    r!   Úis_close_nowritezInotifyEvent.is_close_nowrite  s   € àŒzÕ,Ô=Ñ=ÀÒAÐAr#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r,   rb   s    r!   Úis_openzInotifyEvent.is_open
  ó   € àŒzÕ,Ô4Ñ4°qÒ8Ð8r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r'   rb   s    r!   Ú	is_accesszInotifyEvent.is_access  r÷   r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r0   rb   s    r!   Ú	is_deletezInotifyEvent.is_delete  r÷   r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r1   rb   s    r!   Úis_delete_selfzInotifyEvent.is_delete_self  rú   r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r/   rb   s    r!   rÃ   zInotifyEvent.is_create  r÷   r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r-   rb   s    r!   rº   zInotifyEvent.is_moved_from  s   € àŒzÕ,Ô:Ñ:¸QÒ>Ð>r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r.   rb   s    r!   r»   zInotifyEvent.is_moved_to"  s   € àŒzÕ,Ô8Ñ8¸1Ò<Ð<r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r3   rb   s    r!   Úis_movezInotifyEvent.is_move&  rÿ   r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r2   rb   s    r!   Úis_move_selfzInotifyEvent.is_move_self*  s   € àŒzÕ,Ô9Ñ9¸AÒ=Ð=r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r)   rb   s    r!   Ú	is_attribzInotifyEvent.is_attrib.  r÷   r#   c                ó2   — | j         t          j        z  dk    S re   )rë   r   r6   rb   s    r!   rÁ   zInotifyEvent.is_ignored2  s   € àŒzÕ,Ô7Ñ7¸!Ò;Ð;r#   c                óN   — | j         p| j        p| j        t          j        z  dk    S re   )r  r  rë   r   r;   rb   s    r!   rÂ   zInotifyEvent.is_directory6  s+   € ð
 Ô"Ðe dÔ&7Ðe¸4¼:ÕHXÔHaÑ;aÐdeÒ;eÐer#   ú"tuple[bytes, int, int, int, bytes]c                óB   — | j         | j        | j        | j        | j        fS r   )rî   rê   rë   rì   rí   rb   s    r!   ÚkeyzInotifyEvent.key=  s   € àŒ~˜tœx¨¬°T´\À4Ä:ÐMÐMr#   rÈ   Úobjectc                óZ   — t          |t          ¦  «        st          S | j        |j        k    S r   ©Ú
isinstancerŽ   ÚNotImplementedr  ©r^   rÈ   s     r!   Ú__eq__zInotifyEvent.__eq__A  ó*   € Ý˜-­Ñ6Ô6ð 	"Ý!Ð!ØŒx˜=Ô,Ò,Ð,r#   c                óZ   — t          |t          ¦  «        st          S | j        |j        k    S r   r  r  s     r!   Ú__ne__zInotifyEvent.__ne__F  r  r#   c                ó*   — t          | j        ¦  «        S r   )Úhashr  rb   s    r!   Ú__hash__zInotifyEvent.__hash__K  s   € Ý�D”H‰~Œ~Ðr#   Ústrc                óî   — g }t          t          ¦  «        D ]J}|                     d¦  «        r3|dvr/t          t          |¦  «        }| |z  r|                     |¦  «         ŒKd                     |¦  «        S )NÚIN_>   r3   r=   ú|)Údirr   r½   Úgetattrr©   r¨   )rD   ÚmasksÚcÚc_vals       r!   Ú_get_mask_stringzInotifyEvent._get_mask_stringN  sz   € àˆÝÕ%Ñ&Ô&ð 	$ð 	$ˆAØ�|Š|˜EÑ"Ô"ð $ qÐ0LÐ'LÐ'LÝÕ 0°!Ñ4Ô4�Ø˜%‘<ð $Ø—L’L ‘O”O�OøØ�xŠx˜‰ŒÐr#   c                óÌ   — dt          | ¦  «        j        › d| j        ›d| j        › d|                      | j        ¦  «        › d| j        › dt          j        | j	        ¦  «        ›d�S )Nú<z: src_path=z, wd=z, mask=z	, cookie=z, name=ú>)
Útyper$   r‘   rC   r*  rD   rE   rq   ÚfsdecoderG   rb   s    r!   Ú__repr__zInotifyEvent.__repr__X  s‡   € ð1•�T‘
”
Ô#ð 1ð 1°´ð 1ð 1ÀdÄgð 1ð 1Ø×*Ò*¨4¬9Ñ5Ô5ð1ð 1Ø@DÄð1ð 1å”[ ¤Ñ+Ô+ð1ð 1ð 1ð	
r#   N)rC   r„   rD   r„   rE   r„   rG   rO   r‘   rO   rR   rS   rä   rã   rj   )rR   r  )rÈ   r  rR   rP   )rD   r„   rR   r!  )rR   r!  )!r$   r%   r&   rH   rƒ   rå   r‘   rC   rD   rE   rG   rö   rù   rü   rþ   r  r  r  rÃ   rº   r»   r
  r  r  rÁ   rÂ   r  r  r  r   rç   r*  r0  r   r#   r!   rŽ   rŽ   Ô  sV  € € € € € ðð ð"ð "ð "ð "ð ðð ð ñ „Xðð ðð ð ñ „Xðð ðð ð ñ „Xðð ðð ð ñ „Xðð ðð ð ñ „Xðð ð;ð ;ð ;ñ „Xð;ð ð@ð @ð @ñ „Xð@ð ðBð Bð Bñ „XðBð ð9ð 9ð 9ñ „Xð9ð ð;ð ;ð ;ñ „Xð;ð ð;ð ;ð ;ñ „Xð;ð ð@ð @ð @ñ „Xð@ð ð;ð ;ð ;ñ „Xð;ð ð?ð ?ð ?ñ „Xð?ð ð=ð =ð =ñ „Xð=ð ð9ð 9ð 9ñ „Xð9ð ð>ð >ð >ñ „Xð>ð ð;ð ;ð ;ñ „Xð;ð ð<ð <ð <ñ „Xð<ð ðfð fð fñ „Xðfð ðNð Nð Nñ „XðNð-ð -ð -ð -ð
-ð -ð -ð -ð
ð ð ð ð ðð ð ñ „\ðð
ð 
ð 
ð 
ð 
ð 
r#   rŽ   )3Ú
__future__r   r¥   rÔ   Úctypes.utilr¶   rq   rf   rÞ   rl   r   r   r   Ú	functoolsr   Útypingr   Úwatchdog.utilsr	   Úcollections.abcr
   ÚCDLLÚlibcrt   rí   ÚerrorÚ	CFUNCTYPEr   r   r   r   r(   r)   r-   r.   r/   r0   r1   r8   r*   r+   r,   r{   Ú	StructurerB   ÚsizeofÚ
EVENT_SIZEÚDEFAULT_NUM_EVENTSræ   rK   rŽ   r   r#   r!   ú<module>r?     s  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à /Ð /Ð /Ð /Ð /Ð /àð *Ø)Ð)Ð)Ð)Ð)Ð)à€v„{�4ÑÔ€à€wˆt�^Ñ$Ô$ð &¨G¨G°DÐ:MÑ,NÔ,Nð &ÐV]ÐV]Ð^bÐdvÑVwÔVwð &Ø;¨t¬zÐ;Ð;€EØ
Ð
˜uÑ
%Ô
%Ð%àVÐ$�FÔ$ U¨E°8¸XÐQUÐVÑVÔVÐXkÐmqÐWrÑsÔsÐ àKÐ#�6Ô# E¨5°(ÀdÐKÑKÔKÐM_ÐaeÐLfÑgÔgÐ à6ÐˆvÔ °Ð6Ñ6Ô6¸ÈÐ7MÑNÔN€ð4ð 4ð 4ð 4ð 4ñ 4ô 4ð 4ðp �fØÐàÔ"ØÔ"ØÔ&ØÔ$ØÔ"ØÔ"ØÔ'ØÔ'ØÔ'ØÔ)ØÔ ðñô Ð ð$ð ð ð ð ˜Ô)ñ ô ð ð, ˆVŒ]Ð-Ñ.Ô.€
ØÐ Ø.°*¸r±/ÑBÐ ðK)ð K)ð K)ð K)ð K)ñ K)ô K)ð K)ð\
I
ð I
ð I
ð I
ð I
ñ I
ô I
ð I
ð I
ð I
r#   