+
    :1j_J                      a  0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ R	IHtHt ^R
IHt ]'       d#   ^ RIHtHtHt ^ RIHt ^ RIH t  ^RI!H"t" ^RI#H$t$ ]! ]%4      t&R R lt'R R lt(0 R2mt)R]*R&   0 ])mRkRkRkRkRkRkRkRkRkt+R]*R&   R  R! lt,R" R# lt-R$ R% lt.R& R' lt/R( R) lt0R* R+ lt1]R3,          t2  ! R, R-4      t3R. R/ lt4R0 R1 lt5R# )4z\CLI implementation for `conda info`.

Display information about current conda installation.
)annotationsN)SUPPRESS)cached_property)	getLogger)exists
expanduserisfilejoin)
gettempdir)wrap)TYPE_CHECKINGLiteral)ArgumentError)ArgumentParser	Namespace_SubParsersAction)Iterable)Any)Context)PackageRecordc                    V ^8  d   QhRRRR/# )   sub_parsersr   returnr    )formats   "3lib/python3.14/site-packages/conda/cli/main_info.py__annotate__r   "   s     : :"3 :. :    c           	        ^RI Hp ^RIHp RpTpRpV P                  ! RRVRVRV/VB pV! V4       VP                  RR	V\        R
7       VP                  RRR	RR7       VP                  RR	RR7       VP                  RRR	RR7       VP                  RRR	RR7       VP                  RR	RR7       VP                  RR	RR7       VP                  RR7       V# )r   )NULL)add_parser_jsonz0Display information about current conda install. helpdescriptionepilogz	--offline
store_true)actiondefaultr#   z-az--allzShow all information.)r'   r#   z--basezDisplay base environment path.z-ez--envszPList all known conda environments. Combine with `--json` to obtain more details.z-sz--systemzList environment variables.z--sizeziShow conda-managed disk usage for each environment (excludes untracked files created after installation).z--unsafe-channelsz-Display list of channels with tokens exposed.zconda.cli.main_info.execute)func)info)common.constantsr    helpersr!   
add_parseradd_argumentr   set_defaults)r   kwargsr    r!   summaryr$   r%   ps   &,      r   configure_parserr3   "   s;   '(@GKF 		  	 		
 	A ANN	   NN$	   NN-  
 NN_	   NN*	   NNx  
 NN<   NN5N6Hr   c                   V ^8  d   QhRR/# r   r   z	list[str]r   )r   s   "r   r   r   _   s      y r   c                    ^RI Hp  . p V '       g   \        \        R4      4      '       dj   \        P
                  ! R4      p\        P                  ! \        R4      4       F0  pVP                  V4      '       g   K  VP                  RV 24       K2  	  V# R\        P                  9  d   V# \        P                  R,          p\        \        VR4      4      '       d;   \        P                  ! \        VR4      4       Uu. uF  p\        VRV4      NK  	  ppV# u upi   \         d"   p\        P                  RT4        R	p?T# R	p?ii ; i)
zZ
Method used to populate ``site_dirs`` in ``conda info``.

:returns: List of directories.
on_winz~/.local/libzpython\d\.\dz~/.local/lib/APPDATAPythonPYTHONz'Error accessing user site directory.
%rN)common.compatr8   r   r   recompileoslistdirmatchappendenvironr	   OSErrorlogdebug)r8   	site_dirs	python_repathr9   ies          r   get_user_siterL   _   s     'IAj011JJ7	JJz/'BCD t,,!((=)?@ D  

*  jj+Gd7H-..  ZZWh(?@@ (A.@     A		<a@@AsB   D! A&D! =D! D! .AD! DD! D! !E,EEzset[str]IGNORE_FIELDSnameversionbuildbuild_numberchannelschannelsizefndependsSKIP_FIELDSc                    V ^8  d   QhRRRR/# )r   precr   r   dict[str, Any]r   )r   s   "r   r   r      s     L Lm L Lr   c                    V P                  4       P                  4        UUu/ uF  w  rV\        9  g   K  WbK  	  upp# u uppi )z
Returns a dictionary of key/value pairs from ``prec``.  Keys included in ``IGNORE_FIELDS`` are not returned.

:param prec: A ``PackageRecord`` object.
:returns: A dictionary of elements dumped from ``prec``
)dumpitemsrM   )rY   kvs   &  r   dump_recordr`      s:     "YY[..0K0TQA]4JDAD0KKKs
   A A c                    V ^8  d   QhRRRR/# )r   rY   r   r   Noner   )r   s   "r   r   r      s       4 r   c                   ^RI Hp \        V 4      pRV P                  RVR,          RVR,          RVR,          RVR,          R	\	        V P
                  4      R
V! VR
,          4      /p\        \        VP                  4       4      \        ,
          4       F  pW$,          W4&   K  	  \        4        RP                  VR,          VR,          VR,          4      p\        V4       \        R\        V4      ,          4       V F  p\        V:R RW4,          : 24       K  	  \        R4       VR,           F  p\        RV 24       K  	  R# )zQ
Pretty prints contents of a ``PackageRecord``

:param prec: A ``PackageRecord``
)human_bytesz	file namerN   rO   zbuild stringrP   zbuild numberrQ   rR   rT   z{} {} {}-12: zdependencies:rV   z    N)utilsrd   r`   rU   strrR   sortedsetkeysrW   printr   len)rY   rd   pkgdkeyheaderdeps   &      r   pretty_packagert      s
    $
d
CTWWF3y>GN+3t||$CK(	A c#((*o34 5 
Gqy!I,.8IJF	&M	#F
S!&)* 	/9~~SEl r   c                   V ^8  d   QhRR/# r   r   rZ   r   )r   s   "r   r   r      s     } }~ }r   c                 	   ^RI Hp  ^RI Hp ^RIHpHpHpHpHp ^RI	H
p ^RIHp ^RIHp	 ^RIHp
Hp  ^ RIHp V	! 4       P0                  pVP3                  4        Uu. uF%  qP4                  VP6                  VP8                  .NK'  	  pp\;        V
! VP<                  4      4      pVP>                  '       g)   V Uu. uF  pTV! V4      '       d   RMR,           NK  	  ppV Uu. uF  pV! V4      NK  	  pp\@        PB                  PE                  R4      pV'       g   \G        R4      p\I        V4      '       d   TpV! VPJ                  4      pRVPL                  RVPO                  4       RVPL                  V8H  /p\Q        RB/ RVPR                  bRVbRVbRVbRVPT                  bRVPV                  bRVPX                  bRVPZ                  bRVP\                  bRVP^                  bRVP`                  bRVPb                  bR VPJ                  bR!VbR"VPd                  bR#VbR$VbR%VbR&VbR'VPf                  bR(. bR)R*Pi                  \k        \l        \n        Pp                  4      4      bR+VPr                  bRVPt                  bR,V bR-VPv                  bR.VbR/VbR0VbR1\y        4       b pV'       d   ^R2I=H>p V! 4       VR3&   M0\@        P~                  ! 4       VR4&   \@        P                  ! 4       VR5&   0 RCmpVP                  R6 \@        PB                   4       4       VP                  R7 \@        PB                   4       4       VP                  R8 \@        PB                   4       4       VP                  R9 \@        PB                   4       4       V Uu/ uF>  pV\@        P                  ! V\@        P                  ! VP                  4       R:4      4      bK@  	  ppR; \@        PB                   4       pTP                  V Uu/ uF  pVR<bK  	  up4       VP                  R=\n        P6                  R>\n        P                  R?\n        P                  R@\        4       RAV/4       V#   \&         d$   p\(        P+                  RT4       R	p R
p?ELLR
p?i\,         d$   p\(        P/                  RT4       Rp R
p?ELxR
p?ii ; iu upi u upi u upi u upi u upi )Dzs
Returns a dictionary of contextual information.

:returns:  Dictionary of conda information to be sent to stdout.
)CONDA_PACKAGE_ROOT)__version__)DEFAULT_SOLVERcontextenv_namesys_rc_pathuser_rc_pathr7   )mask_anaconda_token)Index)all_channel_urlsoffline_keepz Unable to import conda-build: %sznot installedNzError importing conda-build: %serrorr"   z  (offline)NETRCz~/.netrcrN   
user_agentr(   platformconda_versionconda_env_versionconda_build_versionroot_prefixconda_prefixav_data_dirav_metadata_url_baseroot_writable	pkgs_dirs	envs_dirsdefault_prefixactive_prefixactive_prefix_nameconda_shlvlchannelsr~   rc_pathr}   offlineenvspython_version.requests_versionconda_locationconfig_files
netrc_filevirtual_pkgssolvertmp_dir)is_admin_on_windowsis_windows_adminUIDGIDc              3  r   "   T F-  qP                  4       P                  R 4      '       g   K)  Vx  K/  	  R# 5i)CONDANupper
startswith.0r_   s   & r   	<genexpr> get_info_dict.<locals>.<genexpr>   s#     O:a1E1Eg1N:   &7
7c              3  r   "   T F-  qP                  4       P                  R 4      '       g   K)  Vx  K/  	  R# 5i)r;   Nr   r   s   & r   r   r   !  s#     P:a1E1Eh1O:r   c              3  r   "   T F-  qP                  4       P                  R 4      '       g   K)  Vx  K/  	  R# 5i)PATHNr   endswithr   s   & r   r   r   "  s#     L:a1C1CF1K:r   c              3  r   "   T F-  qP                  4       P                  R 4      '       g   K)  Vx  K/  	  R# 5i)SUDONr   r   s   & r   r   r   #  s#     N:a1E1Ef1M:r   z	<not set>c              3  r   "   T F-  qP                  4       P                  R 4      '       g   K)  Vx  K/  	  R# 5i)PROXYNr   r   s   & r   r   r   )  s#     GZ779+=+=g+F!!Zr   z<set>zsys.versionz
sys.prefixzsys.executablerG   env_varsr   >   CIO_TEST
LD_PRELOADSSL_CERT_FILECURL_CA_BUNDLEREQUESTS_CA_BUNDLE)Gr"   rx   ry   base.contextrz   r{   r|   r}   r~   r<   r8   
common.urlr   
core.indexr   models.channelr   r   conda_buildImportErrorrE   rF   	Exceptionr   system_packagesvaluesrN   rO   rP   listr   jsonr?   rC   getr   r   r   r   solver_user_agentdictsubdirr   r   r   signing_metadata_url_baser   r   r   r   shlvlr   r	   mapri   sysversion_infor   r   r   r
   common._os.windowsr   geteuidgetegidupdategetenvlowerprefix
executablerL   )rx   r   rz   r{   r|   r}   r~   r8   r   r   r   r   r   errvirtual_pkg_indexr2   r   r   cr   
user_netrcr   r   	info_dictr   env_var_keysevr   
proxy_keyss                                r   get_info_dictr      s    &/  '0"?&B //:K:R:R:TU:TQVVQYY0:TLU$W%5%567H<<<LTUHqA|AMBBHU0891#A&H9(J
+
*#J!'"7"78 	g//17>>^3F    #  (  0	 
 ''  ))  ''  %>>  ++  ##  ##  --  ++  .  MM   ! " "# $ % &  ' * + , - . xxC)9)9 :;/ 0 !111 2 %%3 4 *5 6 ))7 8 9 : "; < = > ? IB <(;(=	$%::<	%::<	%L O2::OOP2::PPL2::LLN2::NN IUHT"BIIb"))BHHJ<==   HRZZGJOO:6:RR[:673;;#**cnn	
 M  .		4c:- &		3S9%&
 V V9N
 7sN   Q +R<=SS%SAS=SR9*RR9R9R44R9c                    V ^8  d   QhRRRR/# r   r   rZ   r   ri   r   )r   s   "r   r   r   9  s       3 r   c                   . pVP                  RR,          4       V P                  R/ 4      p\        V4       F  p\        W#,          4      p\	        V4      '       d
   V^ ,          MRp\	        V4      ^8  d
   VR,          MR	pVP                  V:R RV: 24       V F  pVP                  R
V,           4       K  	  K  	  RP                  V4      # )z
Returns a printable string representing environment variables from the dictionary returned by ``get_info_dict``.

:param info_dict:  The returned dictionary from ``get_info_dict()``.
:returns:  String to print.
z%23s:zenvironment variablesr   r"      NNz>25=
r   z                          )rB   r   rj   r   rn   r	   )r   builderr   rq   value
first_lineother_linesvals   &       r   get_env_vars_strr   9  s     GNN7445}}Z,HhX]#!$UU1X
#&u:>eBirC45CNN8c>*    99Wr   c                    V ^8  d   QhRRRR/# )r   r   rZ   r   dict[str, str]r   )r   s   "r   r   r   N  s     34 34^ 34 34r   c                r   a aa ^RI Ho R R loVV V3R lpV! 4        UUu/ uF  w  r#W#bK	  	  upp# u uppi )zI
Returns the data that can be used to display information for conda info
r7   c                    V ^8  d   QhRRRR/# )r   lineszIterable[str]r   ri   r   )r   s   "r   r   +get_main_info_display.<locals>.__annotate__T  s     7 7} 7 7r   c                @    RP                  \        \        V 4      4      # )r   z
                          )r	   r   ri   )r   s   &r   flatten&get_main_info_display.<locals>.flattenT  s    %%c#uo66r   c               3    <"   SR ,          '       d   RSR ,          3x  RSR,          3x  MRSR,          3x  SR,          ^ 8  d   RSR,          3x  RSR,          3x  RS! SR	,          4      3x  R
SR,          3x  RSR,          3x  RSR,          3x  RSR,          R,           SR,          R,          '       d   RMR 23x  RS! R SR,           4       4      3x  SR,          '       d   RMRp RSR,           RV  R23x  RSR ,          3x  R!SR",          3x  R#S! SR$,          4      3x  R%S! SR&,          4      3x  R'S! SR(,          4      3x  R)SR*,          3x  R+SR+,          3x  R,SR-,          3x  S'       d   R.SR/,          3x  MR0SR1,           R2SR3,           23x  R4SR5,          3x  R6SR7,          3x  R8# 5i)9r   zactive environmentzactive env locationr   r   zshell levelzuser config filer~   zpopulated config filesr   zconda versionr   zconda-build versionr   zpython versionr   r   rN   r(   z
 (default)r"   zvirtual packagesc              3  D   "   T F  pR P                  V4      x  K  	  R# 5i)r   N)r	   )r   ro   s   & r   r   9get_main_info_display.<locals>.builder.<locals>.<genexpr>l  s     G-FcCHHSMM-Fs    r   r   writablez	read onlyzbase environmentr   z  ()zconda av data dirr   zconda av metadata urlr   zchannel URLsr   zpackage cacher   zenvs directoriesr   ztemporary directoryr   r   z
user-agentr   administratorr   zUID:GIDr   :r   z
netrc filer   zoffline moder   Nr   )r   r   r   r8   s    r   r   &get_main_info_display.<locals>.builderW  s(    )**'3G)HII()O*DEE'?)CDD]#q( )M":;;!9^#<=='>1J)KLL	/ :;;$i0E&FGG+;!<=="6*+Ih<OPY<Z<ZL`b+cd
 	

 GY~-FGG
 	
 "+?!;!;:!i&>%?s8*A#NOO"Im$<==&	2H(IJJwy'<=>>	+(> ?@@!79[+A#BCC$i	&:;;9Z011Y|455"I.@$ABB5!1 2!Ie4D3EFGGY|455y344s   C G1G6BGAG)r<   r8   )r   r   rq   r   r   r8   s   f   @@r   get_main_info_displayr  N  s3     '7(5T *13:3CJ333s   3c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r     s       C r   c                p    \        V 4      pRP                  R.R VP                  4        4       ORN54      # )z
Returns a printable string of the contents of ``info_dict``.

:param info_dict:  The output of ``get_info_dict()``.
:returns:  String to print.
r   r"   c              3  6   "   T F  w  rVR  RV 2x  K  	  R# 5i)z>23z : Nr   )r   rq   r   s   &  r   r   $get_main_info_str.<locals>.<genexpr>  s!     M8L*##c#eW%8Ls   )r  r	   r]   )r   display_infos   & r   get_main_info_strr    s>     )3L99	RM8J8J8LMRrR r   c                      ] tR tRtRtRR R llt]R 4       t]R R l4       t]R R	 l4       t	R
 R lt
R R ltR R ltR R ltR tR R ltR R ltRtR# )InfoRendereri  z?
Provides a ``render`` method for rendering ``InfoComponents``
c                    V ^8  d   QhRRRR/# )r   r{   r   	show_sizeboolr   )r   s   "r   r   InfoRenderer.__annotate__  s     

 

 

D 

r   c                	D    Wn         W n        R RRRRRRRRRRR/V n        R# )	baseNr   detaildetail_viewr   	envs_listsystemjson_all)_context
_show_size_component_style_map)selfr{   r  s   &&&r   __init__InfoRenderer.__init__  s4    #DmKd%
!r   c                	V    \        4       pV P                  VR &   V P                  VR&   V# r   envs_details)r   _info_dict_envs_info_dict_envs_details)r  r   s   & r   
_info_dictInfoRenderer._info_dict  s/    !O	 00	&$($@$@	.!r   c                   V ^8  d   QhRR/# r5   r   )r   s   "r   r   r    s     ) ) )r   c                	    ^RI Hp V! 4       # )r   )list_all_known_prefixes)core.envs_managerr%  )r  r%  s   & r   r  InfoRenderer._info_dict_envs  s    ?&((r   c                   V ^8  d   QhRR/# )r   r   z-dict[str, dict[str, str | bool | None | int]]r   )r   s   "r   r   r    s      )V r   c                	   ^RI Hp / pV P                  P                  ;p'       d
   V! V4      pMRpV P                   F  pV! V4      pVP
                  ;p'       d   VP                  4       pVP                  ;p'       d   VP                  4       pRVP                  RVRVRWd8H  RVP                  4       RVP                  4       R	VP                  /W%&   V P                  '       g   K  VP                  4       W%,          R
&   K  	  V# )r   )
PrefixDataNrN   createdlast_modifiedactiver  frozenr   rT   )core.prefix_datar*  r  r   r  r+  	isoformatr,  rN   is_base	is_frozenis_writabler  rT   )	r  r*  resultr   active_prefix_datar   prefix_datar+  r,  s	   &        r   r   $InfoRenderer._info_dict_envs_details  s    1 MM777=7!+M!:!%**F$V,K%---w-!++- + 9 99}9 - 7 7 9((7+;++-+//1K33FN )4)9)9);v&! +" r   c                   V ^8  d   QhRR/# )r   
componentsIterable[InfoComponents]r   )r   s   "r   r   r    s     4 4!9 4r   c                   ^RI Hp V Fu  pV P                  P                  V4      p\	        V RV R2R4      pV'       g   K9  V! 4       pV'       g   KJ  / pVR8X  d   V P
                  '       d   RVR&   V! V3RV/VB  Kw  	  R# )	z
Iterates through the registered components, obtains the data to render via a
``_<component>_component`` method and then renders it.
)render_
_componentNr   Tr  style)	reportersr<  r  r   getattrr  )r  r9  r<  	componentr?  	data_funcdatar0   s   &&      r   r<  InfoRenderer.render  s    
 	'#I--11)<E)J&?FI;Dt&4???*.F;'t353F3 $r   c                   V ^8  d   QhRR/# r   r   z
str | dictr   )r   s   "r   r   r    s     - - -r   c                	    V P                   P                  '       d   R V P                   P                  /# V P                   P                  # )r   )r  r   r   r  s   &r   _base_componentInfoRenderer._base_component  s7    ==!4==#<#<====,,,r   c                   V ^8  d   QhRR/# rG  r   )r   s   "r   r   r    s     5 5Z 5r   c                	    V P                   P                  '       d   R V P                   P                  /# RP                  V P                   P                  4      # )r   r   )r  r   r   r	   rI  s   &r   _channels_component InfoRenderer._channels_component  s@    == 6 67799T]]3344r   c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r    s     6 6> 6r   c                	,    \        V P                  4      # N)r  r!  rI  s   &r   _detail_componentInfoRenderer._detail_component  s    $T__55r   c                	    V P                   P                  '       d   R V P                  RV P                  /# V P                  # r  )r  r   r  r   rI  s   &r   _envs_componentInfoRenderer._envs_component  s@    ==,, < <  ###r   c                   V ^8  d   QhRR/# )r   r   ri   r   )r   s   "r   r   r    s     ! !3 !r   c                	   R \         P                  R,           R2R\         P                   2R\         P                   2RV P                  R,           2.pV P
                  P                  P                  4       pVP                  RR4      p\        \        VR	R4      R
R4      pTP                  RT;'       g    R 24       \        VP                  4       4       F>  w  rV\        \        VR	R4      R
R4      pTP                  RT RT;'       g    R 24       K@  	  V P                  R,          pV'       d   VP                  RV^ ,           24       MVP                  R4       VR,           F  pVP                  RV 24       K  	  VP                  R4       \        V P                  R,          P                  4       4       F  w  rYVP                  V RV	 24       K  	  RP                  V4      # )zsys.version: :N(   Nz...zsys.prefix: zsys.executable: zconda location: r   rP   Nimplplugin_namezconda-build: z	(missing)zconda-rg   z	(unknown)rG   zuser site dirs: zuser site dirs:r   z                r"   r   r   )r   rO   r   r   r!  r  plugin_managerget_subcommandspoprA  rB   rj   r]   r	   )
r  outputsubcommandsr   r\  rN   pluginrG   site_dirr   s
   &         r   _system_componentInfoRenderer._system_component  s    CKK,-S13::,'s~~./t/?@AB	
 mm22BBD!oogt4gk64@-QUVk&@&@[%ABC";#4#4#67LD!'&&$"?PTUKMMF4&;+E+E+*FGH 8 OOK0	MM,Yq\N;<MM+,!"HMM,XJ78 & 	b!$//*"="C"C"EFKDMMTF"UG,- G yy  r   c                   V ^8  d   QhRR/# rv   r   )r   s   "r   r   r    s      ^ r   c                	    V P                   # rR  )r!  rI  s   &r   _json_all_component InfoRenderer._json_all_component  s    r   )r  r  r  N)F)__name__
__module____qualname____firstlineno____doc__r  r   r!  r  r   r<  rJ  rN  rS  rV  rd  rh  __static_attributes__r   r   r   r
  r
    sq    

   ) )
  64,-56$!B r   r
  c               $    V ^8  d   QhRRRRRR/# )r   argsr   r{   r   r   r:  r   )r   s   "r   r   r   "  s"      y 7 ?W r   c              #    "   V P                   '       d   Rx  V P                  '       d   Rx  V P                  '       g%   V P                  '       gM   V P                  '       g;   VP
                  '       g)   V P                   '       g   V P                  '       g   Rx  V P                  '       g%   V P                  '       d   VP
                  '       g	   Rx  Rx  V P                  '       g   V P                  '       d   VP
                  '       g   Rx  VP
                  '       dC   V P                   '       g/   V P                  '       g   V P                  '       g   Rx  R# R# R# R# R# 5i)	z
Determine which components to display.

:param args: The parsed command line arguments.
:param context: The conda context.
:returns: An iterable of components to display.
r  r   r  r   r  r  r  N)r  unsafe_channelsallr   r  r   )rq  r{   s   &&r   iter_info_componentsru  "  s      yyy 
$)))DKKK			$$$yyyTXXXgllltxxx|||DIIId.B.B.B4999 LU.BI|sj   (E-E-E-E-%E-7E-	E-E-1E-E-E-/E-E-E-)E-;E-E-E-c               $    V ^8  d   QhRRRRRR/# )r   rq  r   parserr   r   intr   )r   s   "r   r   r   C  s!      ) ^  r   c                    ^RI Hp V P                  '       d   V P                  '       g   \	        R4      h\        W4      p\        V RR4      p\        W$R7      pVP                  V4       ^ # )z
Implements ``conda info`` command.

 * ``conda info``
 * ``conda info --base``
 * ``conda info <package_spec> ...``
 * ``conda info --unsafe-channels``
 * ``conda info --envs``
 * ``conda info --system``
)r{   z#--size can only be used with --envsrT   F)r  )	r   r{   rT   r   r   ru  rA  r
  r<  )rq  rw  r{   r9  r  renderers   &&    r   executer{  C  sU     'yyyABB%d4Jfe,IG9HOOJr   >   authfilesprioritypreferred_env)r  r   r   r  r  r  )6__conditional_annotations__rn  
__future__r   r?   r=   r   argparser   	functoolsr   loggingr   os.pathr   r   r   r	   tempfiler
   textwrapr   typingr   r   
exceptionsr   r   r   r   collections.abcr   r   r   r   models.recordsr   rj  rE   r3   rL   rM   __annotations__rW   r`   rt   r   r   r  r  InfoComponentsr
  ru  r{  )r  s   @r   <module>r     s$  
 # 	 	 
  %  4 4   ) &EE(&.:z> Ix H
  	
     	 X LB}@*34l ST 9I IXBr   