
    <Bh/U                    H   S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SS	KJrJrJr  SS
KJr  SSKJrJr  SSKJrJrJr  SSKJrJrJrJrJrJrJ r J!r!J"r"J#r#  \	(       a  SSK$J%r%J&r&  SSKJ'r'  SSKJ(r(  SSKJ)r)  \" \*5      r+ " S S\,5      r- " S S\-S9r. " S S\.5      r/      S$S jr0      S%S jr1S&S jr2          S'S jr3S(S jr4S)S jr5  S*       S+S  jjr6  S,       S-S! jjr7S.S" jr8S/S# jr9\Rt                  " \.Rv                  5        g)0zDefines Channel and MultiChannel objects and other channel-related functions.

Object inheritance:

.. autoapi-inheritance-diagram:: Channel MultiChannel
   :top-classes: conda.models.channel.Channel
   :parts: 1
    )annotations)copy)chain)	getLogger)TYPE_CHECKING)
IndexedSet   )DEFAULTS_CHANNEL_NAMEMAX_CHANNEL_PRIORITYUNKNOWN_CHANNEL)context)ensure_text_type
isiterable)is_package_fileis_pathwin_path_backout)
Url
has_schemeis_urljoin_urlpath_to_urlpercent_decodesplit_conda_url_easy_partssplit_platformsplit_scheme_auth_tokenurlparse)IterableIterator)Any)Context)PathTypec                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )ChannelType5   zb
This metaclass does basic caching and enables static constructor method usage with a
single arg.
c                  >^  [        U5      S:X  at  U(       dm  US   n[        U[        5      (       a  U$ U[        R                  ;   a  [        R                  U   $ [        R	                  U5      =n[        R                  U'   U$ SU;   a&  [        U 4S jUS   5       5      n[        US   U5      $ [        TT ]   " U0 UD6$ )N   r   channelsc              3  4   >#    U  H  nT" S0 UD6v   M     g 7f)N r)   ).0_kwargsclss     4lib/python3.13/site-packages/conda/models/channel.py	<genexpr>'ChannelType.__call__.<locals>.<genexpr>G   s     N;MS^7^;Ms   name)	len
isinstanceChannel_cache_
from_valuetupleMultiChannelsuper__call__)r,   argskwargsvaluecr'   	__class__s   `     r-   r9   ChannelType.__call__;   s    t9>&GE%))'//)u---4-?-?-FFGOOE*6!N6*;MNNHv997#T4V44    r)   )__name__
__module____qualname____firstlineno____doc__r9   __static_attributes____classcell__)r>   s   @r-   r#   r#   5   s    
5 5r@   r#   c                     \ rS rSrSr0 r\SS j5       r       S             SS jjr\	S S j5       r
\	S!S j5       r\	S S j5       r\S"S	 j5       r\S#S
 j5       r\S$S j5       r\ S%       S&S jj5       r\	S!S j5       r S'     S(S jjrS)S*S jjr\	S S j5       r\	S+S j5       r\	S!S j5       rS!S jrS!S jrS,S jrS-S jrS.S jrS.S jrS/S jr\	S0S j5       rS1S jrSr g)2r3   M   z
Channel:
scheme <> auth <> location <> token <> channel <> subchannel <> platform <> package_filename

Package Spec:
channel <> subchannel <> namespace <> package_name

c                     0 [         l        g N)r3   r4   r)   r@   r-   _reset_stateChannel._reset_stateY   s	    r@   Nc                l    Xl         X l        X0l        X@l        U=(       d    SU l        X`l        Xpl        g )N schemeauthlocationtokenr0   platformpackage_filename)selfrQ   rR   rS   rT   r0   rU   rV   s           r-   __init__Channel.__init__]   s.     	 
JB	  0r@   c                    U R                   $ rK   rS   rW   s    r-   channel_locationChannel.channel_locationo       }}r@   c                    U R                   $ rK   r0   r\   s    r-   channel_nameChannel.channel_names       yyr@   c                    U R                   $ rK   rU   r\   s    r-   subdirChannel.subdirw   r_   r@   c                    [        U 5      $ rK   )parse_conda_channel_urlurls    r-   from_urlChannel.from_url{   s    &s++r@   c                    [        U 5      $ rK   )_get_channel_for_name)rb   s    r-   from_channel_nameChannel.from_channel_name   s    $\22r@   c                x   U S;   a  [        [        S9$ [        U 5      n [        U 5      (       a6  U R	                  S5      (       a  [        U 5      n [         R                  U 5      $ [        U 5      (       a  [         R                  [        U 5      5      $ [        U 5      (       a6  U R	                  S5      (       a  [        U 5      n [         R                  U 5      $ [        [        R                  U 5      u  pU[        R                  ;   a  [        U[        R                  U   U5      $ [         R                  U 5      $ )a  Construct a new :class:`Channel` from a single value.

Args:
  value: Anyone of the following forms:

    `None`, or one of the special strings "<unknown>", "None:///<unknown>", or "None":
        represents the unknown channel, used for packages with unknown origin.

    A URL including a scheme like ``file://`` or ``https://``:
        represents a channel URL.

    A local directory path:
        represents a local channel; relative paths must start with ``./``.

    A package file (i.e. the path to a file ending in ``.conda`` or ``.tar.bz2``):
        represents a channel for a single package

    A known channel name:
        represents a known channel, e.g. from the users ``.condarc`` file or
        the global configuration.

Returns:
  A channel object.
)Nz	<unknown>zNone:///<unknown>Nonera   zfile:)r3   r   r   r   
startswithr   rm   r   r   r   r   r   known_subdirscustom_multichannelsr7   rq   )r<   	_strippedrU   s      r-   r5   Channel.from_value   s   4 DD00 'e(((/##E**U^^##K$677U##(((/##E** #11F1F"NIG888#w;;IF  0077r@   c           	        U n[        U5      u  pEpgU(       a#  U(       a  [        UUUUUR                  S5      S9$ U(       a  UR                  (       aI  UR	                  UR                  5      (       a)  UR                  UR                  UR                  SS5      p(OG[        U5      n	[        [        U	R                  U	R                  S95      nU	R                  =(       d    Sn[        UUUUUR                  S5      S9$ [        UR                  UR                  UR                  UR                  U=(       a    UR                  S5      =(       d    UR                  S5      S9$ )N/)rQ   rR   rS   rT   r0   rO   r&   hostnameport)r   r3   striprS   ru   replacer   strr   r}   r~   pathrQ   rR   rT   )
channel_aliaschannel_urlr0   catest_urlrQ   rR   rT   rS   	url_partss
             r-   make_simple_channelChannel.make_simple_channel   s"    (?(L%$F!ZZ_  {{x222;;??!#h.>.>r{{BPQ.R$$X.	sI,>,>Y^^TU ~~+!ZZ_  yyWWhh-djjoG1B1B31G r@   c                  ^   T R                   $ ! [         a     Of = f[        R                  R	                  5        H7  u  pU H,  nT R
                  UR
                  :X  d  M  U=nT l         Us  s  $    M9     [        R                   Hf  nT R
                  (       d  M  [        T R
                  R                  S5      UR                  S5      5      (       d  MQ  T R
                  =nT l         Us  $    [        U 4S j[        R                  /[        R                  Q75       5      (       a  T R
                  =nT l         U$ T R                  (       a8  T R                   S[        T R                  T R
                  5       3=nT l         U$ [        T R                  T R
                  5      R                  S5      =nT l         U$ )Nr{   c              3  V   >#    U  H  nUR                   TR                   :H  v   M      g 7frK   r[   )r*   aliasrW   s     r-   r.   )Channel.canonical_name.<locals>.<genexpr>   s)      
 NNdmm+s   &)://)_Channel__canonical_nameAttributeErrorr   rw   itemsr0   custom_channelstokenized_startswithsplitanyr   migrated_channel_aliasesrQ   r   rS   lstrip)rW   	multinamer'   channelcn	that_names   `     r-   canonical_nameChannel.canonical_name   s   	((( 		 $+#?#?#E#E#GI#99,1::B.I $ $H !00Iyyy1		$iooc&:  .2YY6T*	 1  
 %%11
 
 
 *.2B&I ;;;;-s8DMM499#E"FGB& I)1$--)K)R)RSV)WWB&Is    
c                  ^ ^^ Tc  [         R                  m[        T5      (       d   T5       eT R                  [        :X  a  [        [        5      R                  UT5      $ T R                  /mU(       a.  T R                  (       a  TR                  ST R                  /5        TR                  T R                  5        [        T6 mSU U4S jjnU4S jU" 5       5       nU(       a?  T R                  (       a.  UVs/ s H!  nT R                   ST R                   SU 3PM#     sn$ UVs/ s H  nT R                   SU 3PM     sn$ s  snf s  snf )Ntc               3     >#    T R                   (       a$  T R                   v   T R                   S:w  a  Sv   g g T S h  vN   g  N7f)Nnoarchrf   )rW   subdirss   r-   
_platforms Channel.urls.<locals>._platforms  s8     }}mm#==H,"N - #""s   ;AAAc              3  <   >#    U  H  n[        TU5      v   M     g 7frK   )r   )r*   pbases     r-   r.   Channel.urls.<locals>.<genexpr>  s     9Lq$""Ls   r   @)returnzIterator[str])r   r   r   r   r   r3   r
   urlsrS   rT   extendappendr0   r   rR   rQ   )rW   with_credentialsr   r   basesbr   s   ` `   @r-   r   Channel.urls  s    ?ooG'""+G+"/101667GQQ

KKdjj)*DII	# 	# :JL9		@EF1t{{m3tyyk1#6FF49:Eqt{{m3qc*E:: G:s   :(E(Ec                   U R                   [        :X  a  g U R                  /nU(       a.  U R                  (       a  UR	                  SU R                  /5        UR                  U R                  5        U R                  (       aH  UR                  U R                  5        U R                  (       a  UR                  U R                  5        O1[        S [        R                  5       S5      nUR                  U5        [        U6 nU(       a/  U R                  (       a  U R                   SU R                   SU 3$ U R                   SU 3$ )Nr   c              3  4   #    U  H  oS :w  d  M
  Uv   M     g7f)r   Nr)   )r*   ss     r-   r.   Channel.url.<locals>.<genexpr>0  s     =OqH}Os   		r   r   r   )r   r   rS   rT   r   r   r0   rU   rV   nextr   r   r   rR   rQ   )rW   r   r   first_non_noarchs       r-   rl   Channel.url"  s    /1

KKdjj)*DII==KK&$$D112#=GOO=x  KK()		kk]#dii[$88kk]#dV,,r@   c                    U R                   [        :X  a  g U R                   S[        U R                  U R
                  5       3$ )Nr   )r   r   rQ   r   rS   r0   r\   s    r-   base_urlChannel.base_url;  s8    /1++c(4==$))"D!EFFr@   c                    U R                   4$ rK   r   r\   s    r-   	base_urlsChannel.base_urlsA  s    r@   c                    U R                  S5      nU R                  (       a  U(       a  UR                  SS5      S   nU$ )NTr{   r&   r   )rl   rV   rsplit)rW   rl   s     r-   
subdir_urlChannel.subdir_urlE  s4    hhtn  S**S!$Q'C
r@   c                    U R                   =(       d    U R                  nU R                  (       a  [        XR                  5      $ U$ rK   )r   r0   rg   r   )rW   r   s     r-   __str__Channel.__str__L  s/    }})		;;D++..Kr@   c                    SU R                   (       a"  [        U R                  U R                   5      -  $ U R                  -  $ )NzChannel("%s"))rg   r   r0   r\   s    r-   __repr__Channel.__repr__S  s8    04HTYY,
 	
AE
 	
r@   c                   [        U[        5      (       a9  U R                  UR                  :H  =(       a    U R                  UR                  :H  $  [        U5      nU R                  UR                  :H  =(       a    U R                  UR                  :H  $ ! [         a   n[
        R                  SU5         S nAgS nAff = f)Nz%rF)r2   r3   rS   r0   	Exceptionlogdebug)rW   other_otheres       r-   __eq__Channel.__eq__X  s    eW%%==ENN2NtyyEJJ7NN }}7TDII<TT 		$"s   AB 
B>B99B>c                D    [        U R                  U R                  45      $ rK   )hashrS   r0   r\   s    r-   __hash__Channel.__hash__c  s    T]]DII.//r@   c                D    [        U R                  U R                  45      $ rK   )r   rS   r0   r\   s    r-   __nonzero__Channel.__nonzero__f  s    DMM499-..r@   c                "    U R                  5       $ rK   )r   r\   s    r-   __bool__Channel.__bool__i  s    !!r@   c                    U R                   $ rK   )__dict__r\   s    r-   __json__Channel.__json__l  s    }}r@   c                2    U R                   U R                  4$ rK   )r   r   r\   s    r-   url_channel_wtfChannel.url_channel_wtfo  s    }}d1111r@   c                    U R                   U R                  U R                  U R                  U R                  U R
                  U R                  S.$ )NrP   rP   r\   s    r-   dumpChannel.dumps  s?    kkIIZZII $ 5 5
 	
r@   )__canonical_namerR   rS   r0   rV   rU   rQ   rT   r   rt   )NNNNNNN)rQ   
str | NonerR   r   rS   r   rT   r   r0   r   rU   r   rV   r   )r   r   r   r   rl   r   r   r3   rb   r   r   r3   )r<   r   r   r3   rK   )r   r3   r   r   r0   r   r   r3   FNr   boolr   Iterable[str] | Noner   z	list[str]F)r   r   r   r   )r   ztuple[str | None])r   r   r   r   )r   int)r   r   )r   zdict[str, Any])r   ztuple[str | None, str])r   zdict[str, str | None])!rA   rB   rC   rD   rE   r4   staticmethodrL   rX   propertyr]   rb   rg   rm   rq   r5   r   r   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   rF   r)   r@   r-   r3   r3   M   s    G 
 "# #'+11 1 	1
 1 1 1 %1$       , , 3 3 /8 /8b EI""-0"8B"	" "H & &R OS; $;7K;	;>-2 G G
      

	0/" 2 2	
r@   r3   )	metaclassc                      \ rS rSr S     SS jjr\SS j5       r\SS j5       r S     SS jjr\SS j5       r	\SS j5       r
SSS	 jjrSS
 jrSrg)r7   i  Nc                   ^ Xl         S U l        T(       a  [        U4S jU5       5      U l        OX l        S U l        S U l        S U l        TU l        S U l        g )Nc              3  b   >#    U  H$  n[        S0 0 UR                  5       ES T0ED6v   M&     g7f)rU   Nr)   )r3   r   )r*   r   rU   s     r-   r.   (MultiChannel.__init__.<locals>.<genexpr>  s3      #'G CBW\\^BZBC's   ,/)	r0   rS   r6   	_channelsrQ   rR   rT   rU   rV   )rW   r0   r'   rU   s      `r-   rX   MultiChannel.__init__  sX     	" #'# DN
 &N	
  $r@   c                    U R                   $ rK   r[   r\   s    r-   r]   MultiChannel.channel_location  r_   r@   c                    U R                   $ rK   ra   r\   s    r-   r   MultiChannel.canonical_name  rd   r@   c                p   ^^ U R                   n[        [        R                  " UU4S jU5       5      5      $ )Nc              3  F   >#    U  H  oR                  TT5      v   M     g 7frK   )r   )r*   r=   r   r   s     r-   r.   $MultiChannel.urls.<locals>.<genexpr>  s     U9a'7 A A9s   !)r   listr   from_iterable)rW   r   r   r   s    `` r-   r   MultiChannel.urls  s/     NN	U9UU
 	
r@   c                    g rK   r)   r\   s    r-   r   MultiChannel.base_url  s    r@   c                8    [        S U R                  5       5      $ )Nc              3  8   #    U  H  oR                   v   M     g 7frK   r   r*   r=   s     r-   r.   )MultiChannel.base_urls.<locals>.<genexpr>  s     8AZZ   )r6   r   r\   s    r-   r   MultiChannel.base_urls  s    8888r@   c                    g rK   r)   )rW   r   s     r-   rl   MultiChannel.url  s    r@   c                R    U R                   [        S U R                  5       5      S.$ )Nc              3  @   #    U  H  oR                  5       v   M     g 7frK   )r   r
  s     r-   r.   $MultiChannel.dump.<locals>.<genexpr>  s     4V~!VVXX~s   )r0   r'   )r0   r6   r   r\   s    r-   r   MultiChannel.dump  s     		u4Vt~~4V/VWWr@   )r   rR   rS   r0   rV   rU   rQ   rT   rK   )r0   r   r'   zIterable[Channel]rU   r   r   r   r   r   )r   ztuple[str | None, ...]r   )r   r   r   rt   )r   z+dict[str, str | tuple[dict[str, Any], ...]])rA   rB   rC   rD   rX   r   r]   r   r   r   r   rl   r   rF   r)   r@   r-   r7   r7     s    MQ%%#4%@J%(     OS
 $
7K
	
   9 9Xr@   r7   c                6    [        S [        X5      5       5      $ )Nc              3  .   #    U  H  u  pX:H  v   M     g 7frK   r)   )r*   r   sws      r-   r.   'tokenized_startswith.<locals>.<genexpr>  s     L$K51qw$Ks   )allzip)test_iterablestartswith_iterables     r-   r   r     s     LC$KLLLr@   c                   [        U 5      [        U5      pU R                  UR                  :w  d  U R                  UR                  :w  a  gS n[        U" U 5      R	                  S5      U" U5      R	                  S5      5      $ )NFc                J    U R                   R                  S5      =(       d    S$ )Nr{   )r   r   rk   s    r-   <lambda>0tokenized_conda_url_startswith.<locals>.<lambda>  s    s 3 :s :r@   r{   )r   r}   r~   r   r   )r   startswith_urlnorm_url_paths      r-   tokenized_conda_url_startswithr"    sv      (18N3Kn^444==N///:Mh%%c*M.,I,O,OPS,T r@   c           	     .  ^ SU4S jjm[        [        R                  U 5      u  pT" U5      nUb   [        U5      nXl        U(       a  X#l        U$ [        R                  n[        UR                  UR                  UR                  UR                  UUS9$ )Nc                   > U [         R                  ;   a  [         R                  U    $ U R                  SS5      S   nX:X  a  g T" U5      $ )Nr{   r&   r   )r   r   r   )r0   	test_name_get_channel_for_name_helpers     r-   r&  ;_get_channel_for_name.<locals>._get_channel_for_name_helper  sK    7*****400C+A.I /	::r@   )rQ   rR   rS   rT   r0   rU   )r0   r   r   zChannel | None)r   r   rv   r   r0   rU   r   r3   rQ   rR   rS   rT   )rb   rx   rU   r   r   r&  s        @r-   rp   rp     s    ; ))>)>MI*95G w- '""99[[((
 	
r@   c                B   U=(       a    UR                  S5      n[        [        XUS95      nU(       d/  [        [        XS95      R                  S5      S U =(       d    S S S 4$ [        [        R
                  R                  5       SS S9 H  u  pV[        U5      u  pgp[        U[        Xe5      5      (       d  M/  UR                  [        Xe5      SS5      R                  S5      n
[        XZ5      n[        U5      nUR                  UUR                  UR                  UR                   4s  $    [        R"                   H  nUR%                  UR                  5      (       d  M%  UR                  UR                  SS5      R                  S5      n[        R&                  nUR                  X^R                  UR                  UR                   4s  $    [        [        R(                  R                  5       SS	 S9 H  u  p\[        UR                  UR*                  5      n[-        UR/                  S5      UR/                  S5      5      (       d  MV  UR                  USS5      R                  S5      n
UR                  [        UR*                  U
5      U UR                  UR                   4s  $    [        R&                  nUR                  (       a  [-        UR/                  S5      UR                  R/                  S5      5      (       aY  UR                  UR                  SS5      R                  S5      =(       d    S nUR                  XPUR                  UR                   4$ Uc,  Ub   eUR1                  SS5      u  peU(       d  SnS
u  pxn	XeXxU	4$ S nUR                  S5      R/                  S5      nU(       a  US   S:X  a  SSR3                  USS  5      nn[        [        XUS95      R                  S5      UR                  S5      =(       d    S U =(       d    S S S 4$ )Nr{   )r}   r~   r   r|   Tc                    [        U S   5      $ Nr   r1   xs    r-   r  -_read_channel_configuration.<locals>.<lambda>  s    cRSTURVir@   )reversekeyrO   r&   c                    [        U S   5      $ r*  r+  r,  s    r-   r  r.    s    S1Yr@   )fileNNr   conda)rstripr   r   sortedr   migrated_custom_channelsr   r   r"  r   r   r   rp   rS   rQ   rR   rT   r   ru   r   r   r0   r   r   r   join)rQ   hostr~   r   r   r0   rS   _scheme_auth_tokensubnamerb   r   migrated_aliasr   that_test_urlbump
path_partss                     r-   _read_channel_configurationrA    s   
 $DKK$D3d;<H T-.55c:Nd
 	
 !((..0$DW ,C8+L(5)(HX4LMM&&x'?QGMMcRG#D2L+L9G   $ "::~6677##N$;$;RCII#ND&&B;;ii"((BB	 ;  %%';N !!1!17<<@s 3]5H5H5MNN&&}b!<BB3GG  w/  
		B	{{+sR[[..s3  R399#>F${{D"''288;; |||!a0H!3wv55
 DC&&s+Jjmw.chhz!"~6dCt45<<SA

34$ r@   c           	        [        [        R                  U 5      u	  nnnnnnnnn	[        XXx5      u  n
nnnnU
c  Uc   eU(       a  [	        U5      nU(       a  [	        U5      n[        U=(       d    SU=(       d    UU
U=(       d    UUUU5      $ )Nhttps)r   r   rv   rA  r   r3   )rl   rQ   rR   rT   rU   rV   r8  r~   r   queryr]   rb   configured_schemeconfigured_authconfigured_tokens                  r-   rj   rj   E  s     	#7#8#8#>
 	$F$=
 '<+CCC %l3)*:;$W!! r@   c                 $    [         R                  4$ rK   )r   local_build_rootr)   r@   r-   get_conda_build_local_urlrJ  q  s    $$&&r@   Nc                   [         R                  " S S U 5       5       5      n 0 n[        U 5       HP  u  pE[        U5      nUR	                  X5       H+  nXs;   a  M
  UR
                  [        U[        S-
  5      4X7'   M-     MR     U$ )Nc              3  v   #    U  H/  n[        U[        5      (       a  S  UR                  5       OU4v   M1     g7f)c              3  8   #    U  H  n[        U5      v   M     g 7frK   r3   )r*   ccs     r-   r.   0prioritize_channels.<locals>.<genexpr>.<genexpr>  s     +{{r  N)r2   r7   r   r
  s     r-   r.   &prioritize_channels.<locals>.<genexpr>~  s6      #/A 0:!\/J/J+q{{+QRPTT/s   79c              3  8   #    U  H  n[        U5      v   M     g 7frK   rN  r
  s     r-   r.   rQ    s     /h'!**hr  r&   )r   r  	enumerater3   r   r   minr   )r'   r   r   resultpriority_counterchnr   rl   s           r-   prioritize_channelsrX  u  s     "" #/h/# H F!*8!4#,<< 0:C}&&$&:Q&>?FK ; "5 Mr@   c                    [        5       nU  H.  n[        U5      nUR                  UR                  X!5      5        M0     U$ rK   )r   r3   updater   )r'   r   r   rU  rW  r   s         r-   all_channel_urlsr[    s;    
 \F#,gll#3=>  Mr@   c                    [         R                  (       + =(       d(    [        U 5      (       + =(       d    U R                  S5      $ )Nzfile:/)r   offliner   ru   rk   s    r-   offline_keepr^    s(    MfSk/MS^^H5MMr@   c                8    [        S U R                  5       5      $ )z*Return current channels as Channel objectsc              3  8   #    U  H  n[        U5      v   M     g 7frK   rN  )r*   rW  s     r-   r.   #get_channel_objs.<locals>.<genexpr>  s     6#r  )r6   r'   )ctxs    r-   get_channel_objsrc    s    6666r@   )r  Iterable[Any]r  rd  r   r   )r   Iterable[str]r   re  r   r   r   )
rQ   r   r8  r   r~   r   r   r   r   zAtuple[str | None, str | None, str | None, str | None, str | None]r   )r   ztuple[PathType])TN)r'   zIterable[Channel | str]r   r   r   r   r   zdict[str, tuple[str, int]])NT)r'   zIterable[str | Channel]r   r   r   r   r   r   )rl   r   r   r   )rb  r    r   ztuple[Channel, ...])<rE   
__future__r   r   	itertoolsr   loggingr   typingr   boltons.setutilsr   base.constantsr
   r   r   base.contextr   common.compatr   r   common.pathr   r   r   
common.urlr   r   r   r   r   r   r   r   r   r   collections.abcr   r   r   r    r!   rA   r   typer#   r3   r7   r   r"  rp   rA  rj   rJ  rX  r[  r^  rc  register_reset_callabackrL   r)   r@   r-   <module>rs     s   #      ' 
 # 8 D D   2&& 5$ 50o
 o
d	1X7 1XhM M7DM	M-:	
BYY(Y0:YBLYFYx(X' "$(% "  	8 %)!	%	!	 	 		N7
     !5!5 6r@   