+
    '(j.                       a  R t.0 t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHt ^ RI	H
t
 ^RIHtHt ^RIHtHt ^RIHtHtHt ^RIHt R	.t]P0                  R
8X  d   ]
! 4       t] ^ k RtR R ltMR R lt^ t^t^t^t^t Rt!Rt"^t#^t$^t%^t&^ t'^t(^t) ]PT                  ! 4       R R l4       t+]PT                  ! 4       R R l4       t, ! R R	4      t-R# )    N)suppress)AnyOptional)WeakKeyDictionary)ffilib)	CurlECodeCurlMOpt)DEFAULT_CACERTCurl	CurlError)CurlCffiWarning	AsyncCurlwin32a  
    Proactor event loop does not implement add_reader family of methods required.
    Registering an additional selector thread for add_reader support.
    To avoid this warning use:
        asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy())
    c                X    V ^8  d   QhR\         P                  R\         P                  /# )   asyncio_loopreturnasyncioAbstractEventLoop)formats   "B/home/ubuntu/cf-venv/lib/python3.14/site-packages/curl_cffi/aio.py__annotate__r      s(     & &//&		"	"&    c           
     :  a aa S \         9   d   \         S ,          # \        S \        \        R\	        R4      4      4      '       g   S # \
        P                  ! \        \        ^R7       ^RI	H
p V! S 4      ;o\         S &   S P                  oV VV3R lpVS n        S# )zGet selector-compatible loop

Returns an object with ``add_reader`` family of methods,
either the loop itself or a SelectorThread instance.

Workaround Windows proactor removal of *reader methods.
ProactorEventLoopN
stacklevel)AddThreadSelectorEventLoopc                  b   < SS n         \        P                  S R 4       SP                  4        R # N)close
_selectorspop)r   
loop_closeselector_loops   r   _close_selector_and_loop.get_selector.<locals>._close_selector_and_loop7   s'     ",LNN<.!r   )r$   
isinstancegetattrr   typewarningswarnPROACTOR_WARNINGr   _asyncio_selectorr    r#   )r   r    r(   r&   r'   s   f  @@r   get_selectorr1      s     :%l++''+>T
K
 
  &AFA3M4
 	

<0
 "''
	" 6r   c                X    V ^8  d   QhR\         P                  R\         P                  /# )r   loopr   r   )r   s   "r   r   r   C   s&      744 9R9R r   c                     V # r"    )r3   s   &r   r1   r1   C   s    r   c                <    V ^8  d   QhR\         R\        R\         /# )r   
timeout_msclientpr   intr   )r   s   "r   r   r   v   s!      c C C r   c                   \         P                  ! V4      pVP                  '       d"   VP                  P                  4        RVn        VP                  P                  VR,          VP                  \        \        4      Vn        ^ # )z<
see: https://curl.se/libcurl/c/CURLMOPT_TIMERFUNCTION.html
Ni  )	r   from_handle_timercancelr3   
call_laterprocess_dataCURL_SOCKET_TIMEOUTCURL_POLL_NONE)curlmr7   r8   
async_curls   &&& r   timer_functionrE   u   so    
 )J   " 
 #22T	J r   c          
      T    V ^8  d   QhR\         R\         R\        R\        R\         /# )r   sockfdwhatr8   datar   r9   )r   s   "r   r   r      s/      # S 3 c c r   c                6   \         P                  ! V4      pVP                  pWP                  9   d#   VP	                  V4       VP                  V4       V\        ,          '       d=   VP                  WP                  V\        4       VP                  P                  V4       V\        ,          '       d=   VP                  WP                  V\        4       VP                  P                  V4       V\        8X  d   VP                  P                  V4       ^ # )zWThis callback is called when libcurl decides it's time to interact with certain
sockets)r   r<   r3   _sockfdsremove_readerremove_writerCURL_POLL_IN
add_readerr@   CURL_CSELECT_INaddCURL_POLL_OUT
add_writerCURL_CSELECT_OUTCURL_POLL_REMOVEremove)curlrG   rH   r8   rI   rD   r3   s   &&&&&  r   socket_functionrX      s    
 )J??D $$$6"6" l 7 7Q' m 7 7AQR' ""6*r   c                      a  ] tR t^t o RtRV 3R lR lltR t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V 3R lR ltV 3R lR ltV 3R lR ltR tRtV tR# )r   zdWrapper around curl_multi handle to provide asyncio support. It uses the libcurl
socket_action APIs.Nc                    < V ^8  d   QhRS[ /# )r   cacert)str)r   __classdict__s   "r   r   AsyncCurl.__annotate__   s      s r   c                z   \         P                  ! 4       V n        T;'       g    \        V n        / V n        / V n        \        4       V n        \        Ve   TM\        P                  ! 4       4      V n        V P                  P                  V P                  4       4      V n        RV n        V P#                  4        R# )zw
Parameters:
    cacert: CA cert path to use, by default, certs from ``certifi`` are used.
    loop: EventLoop to use.
N)r   curl_multi_init_curlmr   _cacert_curl2future
_curl2curlsetrK   r1   r   get_running_loopr3   create_task_force_timeout_timeout_checkerr=   _setup)selfr[   r3   s   &&&r   __init__AsyncCurl.__init__   s     ))+//8:13"%% $D'*B*B*D
	 !%		 5 5d6I6I6K L59r   c                   V P                  \        P                  \        P                  4       V P                  \        P
                  \        P                  4       \        P                  ! V 4      V n	        V P                  \        P                  V P                  4       V P                  \        P                  V P                  4       R # r"   )setoptr
   TIMERFUNCTIONr   rE   SOCKETFUNCTIONrX   r   
new_handle_self_handle
SOCKETDATA	TIMERDATArk   s   &r   rj   AsyncCurl._setup   s{    H**C,>,>?H++S-@-@ANN40H''):):;H&&(9(9:r   c                F  "   V P                   P                  4        \        \        P                  4      ;_uu_ 4        V P                   G Rj  xL
  RRR4       V P
                  P                  4        Fq  w  r\        P                  ! V P                  VP                  4       VP                  4       '       d   KH  VP                  4       '       d   K`  VP                  R4       Ks  	  \        P                  ! V P                  4       RV n	        V P                   F9  pV P                   P#                  V4       V P                   P%                  V4       K;  	  V P&                  '       d   V P&                  P                  4        R# R#  EL<  + '       g   i     ELC; i5i)z?Close and cleanup running timers, readers, writers and handles.N)ri   r>   r   r   CancelledErrorrc   itemsr   curl_multi_remove_handlera   _curldone	cancelled
set_resultcurl_multi_cleanuprK   r3   rL   rM   r=   )rk   rW   futurerG   s   &   r   r#   AsyncCurl.close   s     	$$&g,,--'''' . !--335LD((djjA;;==)9)9););!!$' 6 	t{{+ mmFII##F+II##F+ $
 ;;;KK  % ( .--sB   <F!FF
FA%F!=F!BF!,F!
FF		F!c                   "    V P                   '       g   R# V P                  \        \        4       \        P
                  ! R4      G Rj  xL
  KO   L5i)zhThis coroutine is used to safeguard from any missing signals from curl, and
put everything back on trackg?N)ra   socket_actionrA   rB   r   sleeprv   s   &r   rh   AsyncCurl._force_timeout   s9      ;;;2NC--$$$s   A5AAAc                    < V ^8  d   QhRS[ /# r   rW   r   )r   r]   s   "r   r   r^      s     
 
t 
r   c                   VP                  4        \        P                  ! V P                  VP                  4      pV P                  V4       V P                  P                  4       pW0P                  V&   WP                  VP                  &   V# )zfAdd a curl handle to be managed by curl_multi. This is the equivalent of
`perform` in the async world.)
_ensure_cacertr   curl_multi_add_handlera   r|   _check_errorr3   create_futurerc   rd   )rk   rW   errcoder   s   &&  r   
add_handleAsyncCurl.add_handle   sm     	++DKKD'"((*"($&*

#r   c                ,   < V ^8  d   QhRS[ RS[ RS[ /# )r   rG   
ev_bitmaskr   r:   )r   r]   s   "r   r   r^      s"     ! !C !S !S !r   c                    \         P                  ! R4      p\        P                  ! V P                  WV4      pV P                  V4       V^ ,          # )zQwrapper for curl_multi_socket_action,
returns the number of running curl handles.int *)r   newr   curl_multi_socket_actionra   r   )rk   rG   r   running_handler   s   &&&  r   r   AsyncCurl.socket_action   sH     )..KK^
 	'"a  r   c                &   < V ^8  d   QhRS[ RS[ /# )r   rG   r   r   )r   r]   s   "r   r   r^     s     " "3 "C "r   c                   V P                   '       g    \        P                  ! R\        ^R7       R# V P	                  W4       \
        P                  ! R4      p  \        P                  ! V P                   V4      pV\
        P                  8X  d   R# VP                  \        8X  dq   V P                  VP                  ,          pVP                  P                  pV^ 8X  d   V P!                  V4       K  V P#                  WUP%                  VR4      4       K  \'        R4       K    \(         d"    \        P                  ! R\        ^R7        K  i ; i)z8Call curl_multi_info_read to read data for given socket.z0Curlm already closed! quitting from process_datar   Nr   performzNOT DONEzLUnexpected curl multi state in process_data, please open an issue on GitHub
)ra   r-   r.   r   r   r   r   r   curl_multi_info_readNULLmsgCURLMSG_DONErd   easy_handlerI   resultr   set_exception
_get_errorprint	Exception)rk   rG   r   msg_in_queuecurl_msgrW   retcodes   &&&    r   r@   AsyncCurl.process_data  s    {{{MMB
 6.www'33DKKNsxx'<<</??8+?+?@D&mm22G!|-**4)1TU*% 7# 	 s%   6D% A D% 5!D% D% %(EEc                    < V ^8  d   QhRS[ /# r   r   )r   r]   s   "r   r   r^   '  s     1 1 1r   c                    \         P                  ! V P                  VP                  4      pV P	                  V4       V P
                  P                  VP                  R 4       V P                  P                  VR 4      # r"   )r   r{   ra   r|   r   rd   r%   rc   )rk   rW   r   s   && r   _pop_futureAsyncCurl._pop_future'  s[    ..t{{DJJG'"DJJ-  $$T400r   c                    < V ^8  d   QhRS[ /# r   r   )r   r]   s   "r   r   r^   -  s      $ r   c                    V P                  V4      pV'       dC   VP                  4       '       g+   VP                  4       '       g   VP                  4        R# R# R# R# )z&Cancel a future for given curl handle.N)r   r}   r~   r>   rk   rW   r   s   && r   remove_handleAsyncCurl.remove_handle-  s@    !!$'&++--0@0@0B0BMMO 1C-6r   c                    < V ^8  d   QhRS[ /# r   r   )r   r]   s   "r   r   r^   3  s     $ $t $r   c                    V P                  V4      pV'       dD   VP                  4       '       g,   VP                  4       '       g   VP                  R4       R# R# R# R# )z,Mark a future as done for given curl handle.N)r   r}   r~   r   r   s   && r   r   AsyncCurl.set_result3  sE    !!$'&++--0@0@0B0Bd# 1C-6r   c                    < V ^8  d   QhRS[ /# r   r   )r   r]   s   "r   r   r^   9  s     , ,$ ,r   c                    V P                  V4      pV'       dD   VP                  4       '       g,   VP                  4       '       g   VP                  V4       R# R# R# R# )z2Raise exception of a future for given curl handle.N)r   r}   r~   r   )rk   rW   	exceptionr   s   &&& r   r   AsyncCurl.set_exception9  sE    !!$'&++--0@0@0B0B  + 1C-6r   c                &   < V ^8  d   QhRS[ RS[/# )r   r   argsr9   )r   r]   s   "r   r   r^   ?  s     	
 	
C 	
 	
r   c           	         V\         P                  8X  d   R # \        P                  ! V4      pRP	                  V Uu. uF  p\        V4      NK  	  up4      p\        RV RV RV R24      hu upi )N z
Failed in z
, multi: (z) z. See https://curl.se/libcurl/c/libcurl-errors.html first for more details. Please open an issue on GitHub to help debug this error.)r	   OKr   curl_multi_strerrorjoinr\   r   )rk   r   r   errmsgaactions   &&*   r   r   AsyncCurl._check_error?  ss    ill"((1404a3q6401
7)2fX >P P
 	
 1s   A-c                :   V\         P                  \         P                  \         P                  \         P                  \         P
                  \         P                  39   d   \        P                  ! RV4      pMTp\        P                  ! V P                  W4      # )z!Wrapper around curl_multi_setopt.zlong*)r
   
PIPELININGMAXCONNECTSMAX_HOST_CONNECTIONSMAX_PIPELINE_LENGTHMAX_TOTAL_CONNECTIONSMAX_CONCURRENT_STREAMSr   r   r   curl_multi_setoptra   )rk   optionvaluec_values   &&& r   ro   AsyncCurl.setoptJ  ss      ))((**++
 
 gggu-GG$$T[[&BBr   )	rb   rd   rc   ra   rs   rK   ri   r=   r3   ) N)__name__
__module____qualname____firstlineno____doc__rl   rj   r#   rh   r   r   r@   r   r   r   r   r   ro   __static_attributes____classdictcell__)r]   s   @r   r   r      s      $;!6%
 
! !" "H1 1 $ $, ,	
 	
C Cr   c                @    V ^8  d   Qh/ ^ \         9   d
   \        ;R&   # )r   r$   )__conditional_annotations__r   )r   s   "r   r   r      s      87!7! r   )/r   r   sysr-   
contextlibr   typingr   r   weakrefr   _wrapperr   r   constr	   r
   rW   r   r   r   utilsr   __all__platformr$   r/   r1   rB   rN   rR   CURL_POLL_INOUTrU   rA   CURL_SOCKET_BADrP   rT   CURL_CSELECT_ERRr   CURLPIPE_NOTHINGCURLPIPE_HTTP1CURLPIPE_MULTIPLEX
def_externrE   rX   r   r   )r   s   @r   <module>r      s     
     %  & 1 1 "-<<7$5$7J7&T       4  .  :lC lCr   