+
    >aJ                     |   ^ RI Ht ^ RIHtHtHt ^ RIt^ RIHt  ! R R]	4      t
 ! R R]4      tR	]P                  R
]P                  /t ! R R]4      t ! R R]4      t ! R R]4      tR t ! R R4      t ! R R]4      t ! R R]4      tR]! ^R4      R]! ^R4      R]! ^R4      R]! 4       R]! ^R4      R ]! ^R!4      R"]! ^R4      R#]! ^R$4      R%]! ^R%4      R]! 4       /
t ! R& R'4      t]P1                  R(]! ]R ,          4      R)]! ]R ,          4      R*]! ]R,          4      /4        ! R+ R,4      t ! R- R.]4      t ! R/ R04      t ! R1 R24      tR3 tR4 t]! ]! ]R,          ]! 4       .4      4      tR5 t ^R)^R(^R(^R(^R ^R(^R(^R*^	R /	t!R6 t" ! R7 R84      t# ! R9 R:4      t$ ! R; R<4      t% ! R= R>4      t&R# )?    )deque)EnumIntEnumIntFlagN)Optionalc                       ] tR t^tRtRtR# )SizeLimitErrorzRaised when trying to (de-)serialise data exceeding D-Bus' size limit.

This is currently only implemented for arrays, where the maximum size is
64 MiB.
 N)__name__
__module____qualname____firstlineno____doc____static_attributes__r
       1lib/python3.14/site-packages/jeepney/low_level.pyr	   r	      s    
 	r   r	   c                   4   a  ] tR t^t o ^t^tR tR tRtV t	R# )
Endiannessc                2    V \         P                  J d   R # R# )<>r   littleselfs   &r   struct_codeEndianness.struct_code   s    z000s:s:r   c                2    V \         P                  J d   R # R# )   l   Br   r   s   &r   	dbus_codeEndianness.dbus_code   s    
 1 11t<<r   r
   N)
r   r   r   r   r   bigr   r!   r   __classdictcell____classdict__s   @r   r   r      s     F
C;= =r   r   r   r    c                   &    ] tR t^t^t^t^t^tRtR# )MessageTyper
   N)	r   r   r   r   method_callmethod_returnerrorsignalr   r
   r   r   r(   r(      s    KMEFr   r(   c                   "    ] tR t^#t^t^t^tRtR# )MessageFlagr
   N)r   r   r   r   no_reply_expectedno_auto_startallow_interactive_authorizationr   r
   r   r   r.   r.   #   s    M&'#r   r.   c                   :    ] tR t^)t^t^t^t^t^t^t	^t
^t^	tRtR# )HeaderFieldsr
   N)r   r   r   r   path	interfacemember
error_namereply_serialdestinationsender	signatureunix_fdsr   r
   r   r   r3   r3   )   s/    DIFJLKFIHr   r3   c                 4    WV,          ,
          pW!8X  d   ^ # V# r   r
   )possteppads   && r   paddingrB   5   s    
*
C
{Jr   c                   F   a  ] tR t^<t o R tRR ltR	R ltR tR tRt	V t
R# )
	FixedTypec                .    V;V n         V n        W n        R # N)size	alignmentr   )r   rG   r   s   &&&r   __init__FixedType.__init__=   s    %))	DN&r   c                   V\        W P                  4      ,          pVP                  4       V P                  ,           p\        P                  ! WQW"V P
                  ,            4      ^ ,          pWbV P
                  ,           3# r>   )rB   rH   r   structunpackrG   )r   bufr?   
endiannessfdscodevals   &&&&&  r   
parse_dataFixedType.parse_dataA   s_    wsNN++%%'$*:*::mmDc		/":;A>$))O##r   Nc                    R \        W P                  4      ,          pVP                  4       V P                  ,           pV\        P                  ! Wa4      ,           # )    )rB   rH   r   rL   pack)r   datar?   rO   rP   rA   rQ   s   &&&&&  r   	serialiseFixedType.serialiseG   sB    gc>>22%%'$*:*::V[[,,,r   c                N    R P                  V P                  V P                  4      # )zFixedType({!r}, {!r}))formatrG   r   r   s   &r   __repr__FixedType.__repr__L   s    &--dii9I9IJJr   c                    \        V4      \        J ;'       d;    V P                  VP                  8H  ;'       d    V P                  VP                  8H  # rF   )typerD   rG   r   r   others   &&r   __eq__FixedType.__eq__O   sJ    Uy( < <tyyEJJ/F < <%%):)::	<r   )rH   rG   r   r
   rF   )r   r   r   r   rI   rS   rY   r]   rc   r   r$   r%   s   @r   rD   rD   <   s$     '$-
K< <r   rD   c                   N   a a ] tR t^Tt oV 3R ltRV 3R lltR tR tRtVt	V ;t
# )Booleanc                (   < \         SV `  ^R4       R#    INsuperrI   r   	__class__s   &r   rI   Boolean.__init__U       C r   c                B   < \         SV `  WV4      w  rV\        V4      V3# rF   )rm   rS   bool)r   rN   r?   rO   rP   rR   new_posro   s   &&&&&  r   rS   Boolean.parse_dataX   s%    w)#J?Cy'!!r   c                    R # )z	Boolean()r
   r   s   &r   r]   Boolean.__repr__\       r   c                $    \        V4      \        J # rF   )r`   rg   ra   s   &&r   rc   Boolean.__eq___       E{g%%r   r
   re   )r   r   r   r   rI   rS   r]   rc   r   r$   __classcell__ro   r&   s   @@r   rg   rg   T   s     !"& &r   rg   c                   ^   a a ] tR t^ct oV 3R ltRV 3R lltRV 3R lltR tR tRt	Vt
V ;t# )	FileDescriptorc                (   < \         SV `  ^R4       R# ri   rl   rn   s   &r   rI   FileDescriptor.__init__d   rq   r   c                <   < \         SV `  WV4      w  rVWE,          V3# rF   )rm   rS   )r   rN   r?   rO   rP   idxrt   ro   s   &&&&&  r   rS   FileDescriptor.parse_datag   s#    w)#J?x  r   c                b  < Vf   \        R4      h\        VR4      '       d   VP                  4       p\        V\        4      '       g   \        V\
        4      '       g   \        R4      hV^ 8  d   \        RV R24      hVP                  V4       \        SV `)  \        V4      ^,
          W#4      # )Nz+Sending FDs is not supported or not enabledfilenozYCannot use {data!r} as file descriptor. Expected an int or an object with fileno() methodz#File descriptor can't be negative ())RuntimeErrorhasattrr   
isinstancers   int	TypeError
ValueErrorappendrm   rY   len)r   rX   r?   rO   rP   ro   s   &&&&&r   rY   FileDescriptor.serialisek   s    ;LMM4"";;=DdD!!D#)>)> G H H !8B4&JKK

4w SAs??r   c                    R # )zFileDescriptor()r
   r   s   &r   r]   FileDescriptor.__repr__{   s    !r   c                $    \        V4      \        J # rF   )r`   r   ra   s   &&r   rc   FileDescriptor.__eq__~   s    E{n,,r   r
   re   rF   )r   r   r   r   rI   rS   rY   r]   rc   r   r$   r|   r}   s   @@r   r   r   c   s$     !!@ "- -r   r   yBnhqHbiurk   xtQdc                   V   a  ] tR t^t o R t]R 4       tR	R ltR
R ltR t	R t
RtV tR# )
StringTypec                    Wn         R # rF   length_type)r   r   s   &&r   rI   StringType.__init__   s    &r   c                .    V P                   P                  # rF   )r   rG   r   s   &r   rH   StringType.alignment   s    $$$r   c                    V P                   P                  WV4      w  rRW%,           pWV P                  R 4      pWV^,            R8X  g   Q hWv^,           3# )utf-8rV   )r   rS   decode)r   rN   r?   rO   rP   lengthendrR   s   &&&&&   r   rS   StringType.parse_data   sZ    &&11#JGlcl!!'*sQw5(((!G|r   Nc                    \        V\        4      '       g   \        R P                  V4      4      hVP	                  R4      pV P
                  P                  \        V4      W#4      pWe,           R,           # )zExpected str, not {!r}r   rV   )r   strr   r\   encoder   rY   r   )r   rX   r?   rO   rP   encodedlen_datas   &&&&&  r   rY   StringType.serialise   s^    $$$4;;DABB++g&##--c'lCL!E))r   c                8    R P                  V P                  4      # )zStringType({!r}))r\   r   r   s   &r   r]   StringType.__repr__   s    !(()9)9::r   c                f    \        V4      \        J ;'       d    V P                  VP                  8H  # rF   )r`   r   r   ra   s   &&r   rc   StringType.__eq__   s1    Uz) ; ;$$(9(99	;r   r   re   rF   )r   r   r   r   rI   propertyrH   rS   rY   r]   rc   r   r$   r%   s   @r   r   r      s7     ' % %*;; ;r   r   sogc                   J   a  ] tR t^t o ^tR tRR ltR	R ltR tR t	Rt
V tR# )
Structc                    \         ;QJ d    R  V 4       F  '       g   K   RM	  RM! R  V 4       4      '       d   \        R4      hWn        R# )c              3   B   "   T F  p\        V\        4      x  K  	  R # 5irF   )r   	DictEntry).0fs   & r   	<genexpr>"Struct.__init__.<locals>.<genexpr>   s     8Az!Y''s   TFzFound dict entry outside arrayN)anyr   fields)r   r   s   &&r   rI   Struct.__init__   s4    3883338888<==r   c                    V\        V^4      ,          p. pV P                   F)  pVP                  WW4R7      w  rrVP                  V4       K+  	  \	        V4      V3# )   rP   )rB   r   rS   r   tuple)r   rN   r?   rO   rP   resfieldvs   &&&&&   r   rS   Struct.parse_data   sW    wsA[[E%%c
%DFAJJqM ! Sz3r   Nc           
     X   \        V\        4      '       g   \        R P                  V4      4      h\	        V4      \	        V P
                  4      8w  d8   \        RP                  \	        V4      \	        V P
                  4      4      4      hR\        W P                  4      ,          pV\	        V4      ,          p. p\        WP
                  4       F@  w  rxVP                  VP                  WrW4R7      4       V\	        VR,          4      ,          pKB  	  VRP                  V4      ,           # )zExpected tuple, not {!r}z{} entries for {} fieldsrV   r   r   )r   r   r   r\   r   r   r   rB   rH   zipr   rY   join)	r   rX   r?   rO   rP   rA   
res_piecesitemr   s	   &&&&&    r   rY   Struct.serialise   s    $&&6==dCDDt9DKK((7>>D	3t{{+   gc>>22s3x
t[[1KDeoodoMN3z"~&&C 2 SXXj)))r   c                `    R P                  \        V 4      P                  V P                  4      # )z{}({!r}))r\   r`   r   r   r   s   &r   r]   Struct.__repr__   s#      d!4!4dkkBBr   c                p    \        V4      \        V 4      J ;'       d    V P                  VP                  8H  # rF   )r`   r   ra   s   &&r   rc   Struct.__eq__   s*    UtDz)LLu||0KLr   )r   re   rF   )r   r   r   r   rH   rI   rS   rY   r]   rc   r   r$   r%   s   @r   r   r      s+     I
*CM Mr   r   c                   2   a a ] tR t^t oV 3R ltRtVtV ;t# )r   c                  < \        V4      ^8w  d   \        R\        V4      ,          4      h\        V^ ,          \        \        34      '       g+   \        RP                  \        V^ ,          4      4      4      h\        SV `!  V4       R# )   z%Dict entry must have 2 fields, not %dz5First field in dict entry must be simple type, not {}N)	r   r   r   rD   r   r\   r`   rm   rI   )r   r   ro   s   &&r   rI   DictEntry.__init__   sq    v;!7#f+EG G&)i%<==GVAY(* * 	 r   r
   )r   r   r   r   rI   r   r$   r|   r}   s   @@r   r   r      s     ! !r   r   c                   \   a  ] tR t^t o ^t]! ^R4      tR tR	R ltR
R lt	R t
R tRtV tR# )Arrayrk   c                    Wn         R # rF   elt_type)r   r   s   &&r   rI   Array.__init__   s     r   c                   V P                   P                  WV4      w  rRV\        W P                  P                  4      ,          pW%,           pV P                  \
        R ,          8X  d   WV V3# . pW&8  d3   V P                  P                  WW4R7      w  rVP                  V4       K8  \        V P                  \        4      '       d   \        V4      pWr3# )r   r   )
r   rS   rB   r   rH   simple_typesr   r   r   dict)	r   rN   r?   rO   rP   r   r   r   r   s	   &&&&&    r   rS   Array.parse_data   s    &&11#JGwsMM3344l==L--3<$$i]]--c
-LFAJJqMdmmY//s)Cxr   Nc           
     N   R p\        V P                  \        4      '       d(   \        V\        4      '       d   VP	                  4       pMeV P                  \
        R,          8X  d   \        V\        4      '       d   RpM0\        V\        4      '       g   \        RP                  V4      4      h\        V P                  \        4      '       d7   V P                  P                  \        V4      ,          R8  d   \        R4      h\        W P                  4      pW&,           ^,           p\        WpP                  P                  4      pV'       d   Tp	MWx,           p
V
R,           p. pV FY  pVP!                  V P                  P#                  WW4R7      4       V
\        VR	,          4      ,          p
W8  g   KP  \        R4      h	  RP%                  V4      p	V P&                  P#                  \        V	4      W&,           V4      pRV,          V,           RV,          ,           V	,           # )
Fr   TzNot suitable for array: {!r}zArray size exceeds 64 MiB limitr   r   rV   i   r   )r   r   r   r   itemsr   byteslistr   r\   rD   rG   r   r	   rB   rH   r   rY   r   r   )r   rX   r?   rO   rP   data_is_bytespad1pos_after_lengthpad2rN   data_pos	limit_poschunksr   r   s   &&&&&          r   rY   Array.serialise   s   dmmY//JtT4J4J::<Dmm|C00ju6M6M MD$'':AA$GHH dmmY//""SY.%7$%FGGsNN+:>')@)@AC'.H 7*IFdmm55J 6   Cr
O+'()JKK  ((6"C##--c#h*M (EDL9C??r   c                8    R P                  V P                  4      # )zArray({!r}))r\   r   r   s   &r   r]   Array.__repr__%  s    ##DMM22r   c                f    \        V4      \        J ;'       d    V P                  VP                  8H  # rF   )r`   r   r   ra   s   &&r   rc   Array.__eq__(  s&    Uu$KK4==ENN+JKr   r   re   rF   )r   r   r   r   rH   rD   r   rI   rS   rY   r]   rc   r   r$   r%   s   @r   r   r      s8     IAs#K!$$@L3L Lr   r   c                   D   a  ] tR tRt o ^tRR ltR	R ltR tR tRt	V t
R# )
Varianti,  c                    \         R ,          P                  WV4      w  rR\        \        V4      4      pVP                  WW4R7      w  rrWW3V3# r   r   )r   rS   parse_signaturer   )r   rN   r?   rO   rP   sigvaltyperR   s   &&&&&   r   rS   Variant.parse_data/  sL    $//*E!$s),%%c
%Dz3r   Nc                    Vw  rQ\        \        V4      4      p\        R ,          P                  WRV4      pWvP                  W\	        V4      ,           W4R7      ,           # r   )r   r   r   rY   r   )r   rX   r?   rO   rP   r   r  sig_bufs   &&&&&   r   rY   Variant.serialise8  sY    	!$s),s#--c
C**G$j + 
 
 	
r   c                    R # )z	Variant()r
   r   s   &r   r]   Variant.__repr__@  rx   r   c                $    \        V4      \        J # rF   )r`   r   ra   s   &&r   rc   Variant.__eq__C  r{   r   r
   re   rF   )r   r   r   r   rH   rS   rY   r]   rc   r   r$   r%   s   @r   r   r   ,  s#     I
& &r   r   c                   V P                  ^ 4      pVR8X  d   \        \        V 4      4      # VR8X  d   \        4       # VR8X  dI   . pV ^ ,          R8w  d   VP	                  \        V 4      4       K*  V P                  ^ 4       \        V4      # VR8X  dI   . pV ^ ,          R8w  d   VP	                  \        V 4      4       K*  V P                  ^ 4       \        V4      # VR9   d   \        R4      h\        V,          # )	z-Parse a symbolic signature into objects.
    ar   (r   {}z)}zUnexpected end of struct)	popr   r   r   r   r   r   r   r   )r   tokenr   des   &   r   r   r   F  s     GGAJE|_S)**|y	#!fmMM/#./
f~	#!fmIIoc*+
}	$344E""r   c                 v   \         P                  ! R V R,          4      w  p\        V,          p\         P                  ! VP                  4       R,           V R,          4      w  p\         P                  ! VP                  4       R,           V R,          4      w  p^V,           pV\	        V^4      ,           V,           # )c:N   Nrk   :rj   r   N:      N)rL   rM   
endian_mapr   rB   )rN   endianbody_lengthfields_array_len
header_lens   &    r   calc_msg_sizer  a  s    mmCR)GFF==!3!3!5!;SXFLKf&8&8&:S&@#e*M&&J
A..<<r   c                     \         P                  V ^V4      w  r#V UUu/ uF  w  rE\        V4      V^,          bK  	  uppV3# u uppi r  )_header_fields_typerS   r3   )rN   rO   lr?   kr   s   &&    r   parse_header_fieldsr"  m  sD     ++CZ@FA012fqLOQqT!2C772s   Ac                     \        V P                  4       4       UUu. uF   w  r#VP                  \        V,          V33NK"  	  ppp\        P                  V^V4      # u uppi r  )sortedr   valueheader_field_codesr  rY   )r   rO   r   r   r   s   &&   r   serialise_header_fieldsr'    sT    =CAGGI=NO=N6A!''&q)1-	.=NAO((B
;; 	Ps   &Ac                   F   a  ] tR tRt o R tR tRR lt]R 4       tRt	V t
R# )	Headeri  c                    Wn         \        V4      V n        \        V4      V n        W@n        WPn        W`n        Wpn        R# )zA D-Bus message header

It's not normally necessary to construct this directly: use higher level
functions and methods instead.
N)	rO   r(   message_typer.   flagsprotocol_versionr  serialr   )r   rO   r+  r,  r-  r  r.  r   s   &&&&&&&&r   rI   Header.__init__  s8     %'5 '
 0&r   c           	         R P                  V P                  V P                  V P                  V P                  V P
                  V P                  V P                  4      # )z7Header({!r}, {!r}, {!r}, {!r}, {!r}, {!r}, fields={!r}))r\   rO   r+  r,  r-  r  r.  r   r   s   &r   r]   Header.__repr__  sI    HOOOOT..

!!4#3#3T[[$++O 	Or   Nc           	     x   V P                   P                  4       R ,           pVf   V P                  p\        P                  ! W P                   P                  4       V P                  P                  V P                  V P                  V P                  V4      \        V P                  V P                   4      ,           # )cBBBII)rO   r   r.  rL   rW   r!   r+  r%  r,  r-  r  r'  r   )r   r.  r   s   && r   rY   Header.serialise  s    OO'')H4>[[F{{1oo779,,22DJJ00++V5 *$++tG	H 	Hr   c           	         \         P                  ! R VR,          4      w  r#rE\        V,          p\         P                  ! VP                  4       R,           VR,          4      w  rg\	        W4      w  rV ! W#WEWgV4      V	3# )cBBB:Nrj   NII:rj   r  N)rL   rM   r  r   r"  )
clsrN   r  msgtyper,  pvbodylenr.  r   r?   s
   &&        r   from_bufferHeader.from_buffer  sk    %+]]63r7%C"F# --(:(:(<t(CSYO)#66EwGLLr   )r  rO   r   r,  r+  r-  r.  rF   )r   r   r   r   rI   r]   rY   classmethodr<  r   r$   r%   s   @r   r)  r)    s,     O
H M Mr   r)  c                   f   a  ] tR tRt o RtR tR t]RV 3R lR ll4       tRV 3R lR	 llt	R
t
V tR# )Messagei  zObject representing a DBus message.

It's not normally necessary to construct this directly: use higher level
functions and methods instead.
c                    Wn         W n        R # rF   )headerbody)r   rB  rC  s   &&&r   rI   Message.__init__  s    	r   c                v    R P                  \        V 4      P                  V P                  V P                  4      # )z{}({!r}, {!r}))r\   r`   r   rB  rC  r   s   &r   r]   Message.__repr__  s)    &&tDz':':DKKSSr   c                $   < V ^8  d   QhRS[ RR/# )r   rN   returnr@  r   )r\   r&   s   "r   __annotate__Message.__annotate__  s     % %e %	 %r   c                   \         P                  V4      w  r4VP                  P                  \        P
                  ^ 4      pV\        V4      8  d   \        RV R\        V4       R24      hVRV pRp\        P                  VP                  9   db   VP                  \        P                  ,          p\        \        RV,          4      4      pVP                  WVP                  VR7      ^ ,          p\        W64      # )r   zMessage expects z FDs, but only z were receivedN(%s)r   r
   )r)  r<  r   getr3   r<   r   r   r;   r   r   rS   rO   r@  )	r8  rN   rP   rB  r?   n_fdsrC  r   	body_types	   &&&      r   r<  Message.from_buffer  s    ((-!!,"7"7;3s8"5'S
.Q  &5k!!V]]2-- 6 67C'Vc\(:;I''&2C2C'MaPDv$$r   Nc                    < V ^8  d   QhRS[ /# r   rH  rI  )r\   r&   s   "r   rJ  rK    s     + +% +r   c                   V P                   P                  p\        P                  V P                   P                  9   df   V P                   P                  \        P                  ,          p\        \        RV,          4      4      pVP                  V P                  ^ W2R7      pMRp\        V4      V P                   n
        V'       d1   \        V4      V P                   P                  \        P                  &   V P                   P                  VR7      pR\        \        V4      ^4      ,          pWx,           V,           # )a  Convert this message to bytes.

Specifying *serial* overrides the ``msg.header.serial`` field, so a
connection can use its own serial number without modifying the message.

If file-descriptor support is in use, *fds* should be a
:class:`array.array` object with type ``'i'``. Any file descriptors in
the message will be added to the array. If the message contains FDs,
it can't be serialised without this array.
rM  r   r   )r.  rV   )rB  rO   r3   r;   r   r   r   rY   rC  r   r  r<   rB   )	r   r.  rP   r  r   rP  body_buf
header_bufrA   s	   &&&      r   rY   Message.serialise  s     ''!!T[[%7%77++$$\%;%;<C'Vc\(:;I **499a*IHH"%h-8;CDKK|445[[**&*9
ws:22(**r   )rC  rB  re   )NN)r   r   r   r   r   rI   r]   r>  r<  rY   r   r$   r%   s   @r   r@  r@    s=     
T % % %+ + +r   r@  c                   ^   a  ] tR tRt o RtR tRV 3R lR lltR tR tV 3R lR	 lt	R
t
V tR# )Parseri  z8Parse DBus messages from a stream of incoming data.
    c                @    \        4       V n        . V n        R V n        R # rF   )
BufferPiperN   rP   next_msg_sizer   s   &r   rI   Parser.__init__  s    <!r   c                    < V ^8  d   QhRS[ /# )r   rX   rI  )r\   r&   s   "r   rJ  Parser.__annotate__  s      U r   c                r    V P                   P                  V4       V P                  P                  V4       R# )z)Provide newly received data to the parserN)rN   writerP   extend)r   rX   rP   s   &&&r   add_dataParser.add_data  s"    tr   c                b    V P                  V4       \        \        V P                  R4      4      # )zXFeed the parser newly read data.

Returns a list of messages completed by the new data.
N)rc  r   iterget_next_message)r   rX   s   &&r   feedParser.feed  s(    
 	dD..566r   c                    V P                   P                  pV^8  d
   ^V,
          # V P                  f*   \        V P                   P	                  ^4      4      V n        V P                  V,
          # )zHow many bytes can be received without going beyond the next message?

This is only used with file-descriptor passing, so we don't get too many
FDs in a single recvmsg call.
)rN   bytes_bufferedr\  r  peek)r   gots   & r   bytes_desiredParser.bytes_desired  sZ     hh%%88O%!.txx}}R/@!AD!!C''r   c                0   < V ^8  d   QhRS[ S[,          /# rS  )r   r@  )r\   r&   s   "r   rJ  r_  	  s      (7"3 r   c                   V P                   fE   V P                  P                  ^8  d*   \        V P                  P	                  ^4      4      V n         V P                   pVe   V P                  P                  V8  d   V P                  P                  V4      p\        P                  W P                  R7      pRV n         VP                  P                  P                  \        P                  ^ 4      pV P                  VR V n        V# R# R# )zaParse one message, if there is enough data.

Returns None if it doesn't have a complete message.
Nr   )r\  rN   rk  r  rl  readr@  r<  rP   rB  r   rN  r3   r<   )r   nmsraw_msgmsgfds_consumeds   &    r   rg  Parser.get_next_message	  s    
 %xx&&",%2488==3D%E"  O!8!8C!?hhmmC(G%%g88%<C!%D::,,001F1FJLxx.DHJ "@Or   )rN   rP   r\  Nre   )r   r   r   r   r   rI   rc  rh  rn  rg  r   r$   r%   s   @r   rY  rY    s-     "
 
7( r   rY  c                      a  ] tR tRt o RtR tV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
RtV tR# )r[  i  zA place to store received data until we can parse a complete message

The main difference from io.BytesIO is that read & write operate at
opposite ends, like a pipe.
c                2    \        4       V n        ^ V n        R# )r   N)r   r   rk  r   s   &r   rI   BufferPipe.__init__!  s    gr   c                    < V ^8  d   QhRS[ /# )r   r   rI  )r\   r&   s   "r   rJ  BufferPipe.__annotate__%  s     & &u &r   c                    V P                   P                  V4       V ;P                  \        V4      ,          un        R # rF   )r   r   rk  r   )r   r   s   &&r   ra  BufferPipe.write%  s)    1s1v%r   c                    < V ^8  d   QhRS[ /# r   nbytesr   )r\   r&   s   "r   rJ  r|  )  s       r   c              #     "   WP                   8:  g   Q hV P                   F(  pVR V pV\        V4      ,          pVx  V^ 8:  g   K'   R # 	  R # 5irF   )rk  r   r   )r   r  chunks   && r   
_peek_iterBufferPipe._peek_iter)  sM     ,,,,,[[E'6NEc%j FK{ !s   AAAc                &   < V ^8  d   QhRS[ RS[/# r   r  rH  r   r   )r\   r&   s   "r   rJ  r|  2       1 13 15 1r   c                B    RP                  V P                  V4      4      # )z=Get exactly nbytes bytes from the front without removing themr   )r   r  r   r  s   &&r   rl  BufferPipe.peek2      xx/00r   c                    < V ^8  d   QhRS[ /# r  r  )r\   r&   s   "r   rJ  r|  6  s       r   c              #    "   WP                   8:  g   Q h V P                  P                  4       pV ;P                   \        V4      ,          un         V\        V4      8:  d   MV\        V4      ,          pVx  Kf  VRV W!R r2V'       d>   V P                  P	                  V4       V ;P                   \        V4      ,          un         Vx  R# 5i)TN)rk  r   popleftr   
appendleft)r   r  r  rems   &&  r   
_read_iterBufferPipe._read_iter6  s     ,,,,,KK'')E3u:-U#c%j FK 7F^U7^sKK""3'3s8+s   CCc                &   < V ^8  d   QhRS[ RS[/# r  r  )r\   r&   s   "r   rJ  r|  G  r  r   c                B    RP                  V P                  V4      4      # )z1Take & return exactly nbytes bytes from the frontr   )r   r  r  s   &&r   rr  BufferPipe.readG  r  r   )rk  r   N)r   r   r   r   r   rI   ra  r  rl  r  rr  r   r$   r%   s   @r   r[  r[    sA     
 & & 1 1 "1 1r   r[  )'collectionsr   enumr   r   r   rL   typingr   r   r	   r   r   r#   r  r(   r.   r3   rB   rD   rg   r   r   r   updater   r   r   r   r   r  r  r"  r&  r'  r)  r@  rY  r[  r
   r   r   <module>r     s    ' '  	Z 	= = J%%tZ^^<
$ (' (	7 	< <0&i &-Y -@ 1c	1c	1c	1c	1c	1c	1c	1c		; ;<   L%	&L%	&L%	& #M #ML	! 	!CL CLL& &4#6= FL$5wy#ABC 8 sssssssss
 <
%M %MP7+ 7+t2 2j.1 .1r   