
    X-PhU                    V   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z?m@Z@ dd	lAmBZB dd
lCmDZD ddlEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` ddlambZb ddlcmdZd d7dZed8dZf G d deB          Zg	 d9d:d(Zh G d) d*e[eiej                            Zkd;d.Zld<d2Zmd=d3Znd>d6Zod S )?a  Generate fine-grained dependencies for AST nodes, for use in the daemon mode.

Dependencies are stored in a map from *triggers* to *sets of affected locations*.

A trigger is a string that represents a program property that has changed, such
as the signature of a specific function. Triggers are written as '<...>' (angle
brackets). When a program property changes, we determine the relevant trigger(s)
and all affected locations. The latter are stale and will have to be reprocessed.

An affected location is a string than can refer to a *target* (a non-nested
function or method, or a module top level), a class, or a trigger (for
recursively triggering other triggers).

Here's an example representation of a simple dependency map (in format
"<trigger> -> locations"):

  <m.A.g> -> m.f
  <m.A> -> <m.f>, m.A, m.f

Assuming 'A' is a class, this means that

1) if a property of 'm.A.g', such as the signature, is changed, we need
   to process target (function) 'm.f'

2) if the MRO or other significant property of class 'm.A' changes, we
   need to process target 'm.f', the entire class 'm.A', and locations
   triggered by trigger '<m.f>' (this explanation is a bit simplified;
   see below for more details).

The triggers to fire are determined using mypy.server.astdiff.

Examples of triggers:

* '<mod.x>' represents a module attribute/function/class. If any externally
  visible property of 'x' changes, this gets fired. For changes within
  classes, only "big" changes cause the class to be triggered (such as a
  change in MRO). Smaller changes, such as changes to some attributes, don't
  trigger the entire class.
* '<mod.Cls.x>' represents the type and kind of attribute/method 'x' of
  class 'mod.Cls'. This can also refer to an attribute inherited from a
  base class (relevant if it's accessed through a value of type 'Cls'
  instead of the base class type).
* '<package.mod>' represents the existence of module 'package.mod'. This
  gets triggered if 'package.mod' is created or deleted, or if it gets
  changed into something other than a module.

Examples of locations:

* 'mod' is the top level of module 'mod' (doesn't include any function bodies,
  but includes class bodies not nested within a function).
* 'mod.f' is function 'f' in module 'mod' (module-level variables aren't separate
  locations but are included in the module top level). Functions also include
  any nested functions and classes -- such nested definitions aren't separate
  locations, for simplicity of implementation.
* 'mod.Cls.f' is method 'f' of 'mod.Cls'. Non-method attributes aren't locations.
* 'mod.Cls' represents each method in class 'mod.Cls' + the top-level of the
  module 'mod'. (To simplify the implementation, there is no location that only
  includes the body of a class without the entire surrounding module top level.)
* Trigger '<...>' as a location is an indirect way of referring to all
  locations triggered by the trigger. These indirect locations keep the
  dependency map smaller and easier to manage.

Triggers can be triggered by program changes such as these:

* Addition or deletion of an attribute (or module).
* Change of the kind of thing a name represents (such as a change from a function
  to a class).
* Change of the static type of a name.

Changes in the body of a function that aren't reflected in the signature don't
cause the function to be triggered. More generally, we trigger only on changes
that may affect type checking results outside the module that contains the
change.

We don't generate dependencies from builtins and certain other stdlib modules,
since these change very rarely, and they would just increase the size of the
dependency map significantly without significant benefit.

Test cases for this module live in 'test-data/unit/deps*.test'.
    )annotations)defaultdict)/GDEFLDEFMDEFSYMBOL_FUNCBASE_TYPESAssertTypeExprAssignmentStmt	AwaitExprBlockCallExprCastExprClassDefComparisonExpr	DecoratorDelStmtDictionaryComprehensionEnumCallExpr
ExpressionForStmtFuncBaseFuncDefGeneratorExprImport	ImportAll
ImportFrom	IndexExpr
MemberExprMypyFileNamedTupleExprNameExprNewTypeExprNodeOperatorAssignmentStmtOpExprOverloadedFuncDefRefExprStarExpr	SuperExpr	TupleExprTypeAliasExprTypeApplicationTypedDictExprTypeInfoTypeVarExpr	UnaryExprVarWithStmtYieldFromExpr)
op_methodsops_with_inplace_methodreverse_op_methodsunary_op_methods)Options)Scope)make_triggermake_wildcard_trigger)TraverserVisitor)	bind_self)AnyTypeCallableTypeDeletedType
ErasedTypeFunctionLikeInstanceLiteralTypeNoneType
Overloaded
ParametersParamSpecTypePartialType
ProperType	TupleTypeTypeTypeAliasTypeTypedDictType	TypeOfAnyTypeTypeTypeVarTupleTypeTypeVarTypeTypeVisitorUnboundTypeUninhabitedType	UnionType
UnpackTypeget_proper_type)
type_state)correct_relative_importtargetr   type_mapdict[Expression, Type]python_versiontuple[int, int]optionsr8   returndict[str, set[str]]c                h    t          ||| j        |          }|                     |           |j        S )z,Get all dependencies of a node, recursively.)DependencyVisitor
alias_depsacceptmap)r[   r\   r^   r`   visitors        P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/server/deps.pyget_dependenciesrj      s4      .&:KWUUG
MM';    	module_idstrmodule_treer#   c           	     V   t          |||j                  }|j                            |           5  t	          |t
                    rH|j        D ]?}t	          |t          t          t          t          f          s|                    |           @n~t	          |t                    rT|j        rM|j                            |j                  5  |                    |           ddd           n# 1 swxY w Y   n|                    |           ddd           n# 1 swxY w Y   |j        S )zDGet dependencies of a target -- don't recursive into nested targets.N)rd   re   scopemodule_scope
isinstancer   defsr   r   r   r&   rf   r   infoclass_scoperg   )rl   rn   r[   r\   r^   rh   defns          ri   get_dependencies_of_targetrw      s     .+:PQQG		#	#I	.	. # #fh'' 	#  ) )!$9gGX(YZZ )KK((() )) 	#fk 	# **6;77 ' 'g&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' MM'"""# # # # # # # # # # # # # # # ;s6   BD
C, D,C0	0D3C0	4DD Dc                      e Zd Z	 dtdudZdv fdZdw fdZdx fdZdy fdZdzdZd{dZ	d|dZ
d}dZd~d Zd fd"Zd fd$Zdd'Zdd+Zdd.Zd fd0Zd fd2Zd fd4Zd fd6Zdd7Zdd9Zd fd;Zdd?Zd fdAZd fdCZd fdDZd fdFZd fdHZd fdJZd fdLZ d fdNZ!d fdPZ"d fdRZ#ddWZ$ddYZ%dd[Z&d fd]Z'd fd_Z(d fdaZ)d fdcZ*d fdeZ+ddgZ,dtddiZ-dtddjZ.ddlZ/ddnZ0ddoZ1ddqZ2ddrZ3ddsZ4 xZ5S )rd   Nr\   r]   r^   r_   re   defaultdict[str, set[str]]r`   Options | Nonera   Nonec                    t                      | _        || _        || _        i | _        d| _        d| _        || _        d S )NF)r9   rp   r\   re   rg   is_classis_package_init_filer`   )selfr\   r^   re   r`   s        ri   __init__zDependencyVisitor.__init__   s@     WW
  %(*$)!rk   or   c                   | j                             |j                  5  |                                | _        |                     | j                                                    |j                                        D ]?\  }}| j        	                    |t                                                    |           @t                                          |           d d d            d S # 1 swxY w Y   d S N)rp   rq   fullnamer~   add_type_alias_depscurrent_targetplugin_depsitemsrg   
setdefaultsetupdatesupervisit_mypy_file)r   r   triggertargets	__class__s       ri   r   z!DependencyVisitor.visit_mypy_file   s   Z$$QZ00 	' 	'()(>(>(@(@D%$$TZ%>%>%@%@AAA$%M$7$7$9$9 D D ##GSUU33::7CCCCGG##A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   C C..C25C2r   c                   | j                             |          5  | j                                         }|j        r| j        r/t          |j        t                    rt          |j                  }n|j        }|                     |          D ];}| 	                    |           | 	                    |t          |                     <|j        rft          |j                  D ]Q}|                                 r	|j        dvr2| 	                    t          |j        dz   |j        z                        R|                     | j                                                    t#                                          |           t'          |j                  |hz
  }|D ]8}t          |t*                    r!t#                                          |           9	 d d d            d S # 1 swxY w Y   d S )Nr[   r   __new__.)rp   function_scoper   typer}   rr   rB   r=   get_type_triggersadd_dependencyr:   rt   non_trivial_basesuse_logical_depsnamer   r   r   visit_func_defr   expandedr   )	r   r   r[   	signaturer   basevariantsexr   s	           ri   r   z DependencyVisitor.visit_func_def   s)   Z&&q)) 	/ 	/Z..00Fv N= 'Z%E%E '&/&7&7II !I#55i@@ N NG''000''V8L8L'MMMMv X-af55 X XD  0022 XafD[6[6[++L9Lqv9U,V,VWWW$$TZ%>%>%@%@AAAGG""1%%%1:!,H / /b'** /GG**2.../'	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   F<G&&G*-G*r   c                z   |                                  sR|j        j        sE| j                                        ,|                     t          |j        j                             n|j        D ]}d }t          |t                    r|j        r|j        }t          |t                    r2t          |j        t                    r|j        j        r|j        j        }|:|                     t          |          t          |j        j                             t                                          |           d S r   )r   funcis_overloadrp   current_function_namer   r:   r   
decoratorsrr   r'   r   calleer   visit_decorator)r   r   dtnamer   s       ri   r   z!DependencyVisitor.visit_decorator  s$   $$&& 	\ 6% C$**J*J*L*L*T##L$A$ABBB \ \ \$(a)) 'aj 'JEa** .z!(G/L/L .QRQYQb .H-E$''U(;(;\!&/=Z=Z[[["""""rk   r   c                   | j                             |j                  5  | j                                         }|                     t          |          |           | j        }d| _        |j        D ]*}|                     t          |j                  |           +| 	                    |j                   t                                          |           || _        d d d            d S # 1 swxY w Y   d S )NT)rp   ru   rt   current_full_targetr   r:   r}   	type_varsr   process_type_infor   visit_class_def)r   r   r[   old_is_classtvr   s        ri   r   z!DependencyVisitor.visit_class_def,  s)   Z##AF++ 
	) 
	)Z3355FV 4 4f====L DMk G G##L$=$=vFFFF""16***GG##A&&&(DM
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	)s   B?C--C14C1r"   c                    |j         rT| j                            |j                   5  |                     |j                    d d d            d S # 1 swxY w Y   d S d S r   )rt   rp   ru   r   r   r   s     ri   visit_newtype_exprz$DependencyVisitor.visit_newtype_expr9  s    6 	/''// / /&&qv.../ / / / / / / / / / / / / / / / / /	/ 	/s   AAArt   r.   c           	        | j                                         }|j        D ]}|                     ||           |j        r)|                     |j        t          |                     |j        r)|                     |j        t          |                     |j        r)|                     |j        t          |                     |j        rH|j	        d d         D ]8}| 
                    t          |j                  t          |                     9|                     | j                                                    |j                                        D ]\  }}t#          |j        t&                    r|j        j        r<t+          |          r-| 
                    t          |j        dz   |z                        t-          |          D ]I}| 
                    t          |j        dz   |z             t          |j        dz   |z                        Jt-          |          D ]}|j                                        D ]o\  }}|                                 r||j        vr#|dv r(| 
                    t          |j        dz   |z             t          |j        dz   |z                        p|                                 s| 
                    t          |j        dz             t          |j        dz                        | 
                    t          |j        dz             t          |j        dz                        | 
                    t          |j        dz             t          |j        dz                        | 
                    t          |j        dz                        d S )Nr   r   r   	.__init__.__new__z.(abstract))rp   r   basesadd_type_dependencies
tuple_typer:   typeddict_typedeclared_metaclassis_protocolmror   r;   r   r   r   namesr   rr   noder1   is_initialized_in_classhas_user_basesr   r   )r   rt   r[   r   	base_infor   r   s          ri   r   z#DependencyVisitor.process_type_info>  s   //11J 	< 	<D&&tF&;;;;? 	U&&t|F?S?S&TTT 	Y&&t':<PVCWCW&XXX" 	]&&t'>|TZG[G[&\\\ 	!Xcrc]  	 ##))*<==lSYFZFZ $     	  !:!:!<!<===***,, 	 	JD$$)S)) 
94 R9M9M R''T]S5H45O(P(PQQQ!24!8!8  I ''$Y%7#%=%DEE+DMC,?$,FGG (     +400 +	V +	VI'o3355  
d((** ! 4:--  666 ## !3c!9D!@AA'(;d(BCC $     ((** V ## !3k!ABB'(CDD $    ## !3j!@AA'
(BCC $    ## !3m!CDD'(CDD $    ##L1Cm1S$T$TUUUW+	V +	Vrk   r   c                    |j         D ]?\  }}|                     t          |          | j                                                   @d S r   )idsr   r:   rp   r   )r   r   idas_ids       ri   visit_importzDependencyVisitor.visit_import  sT     	O 	OIBR 0 0$*2K2K2M2MNNNN	O 	Ork   r   c                V   |                                  rd S t          | j                                        |j        |j        | j                  \  }}|                     t          |                     |j	        D ]-\  }}|                     t          |dz   |z                        .d S Nr   )
r   rZ   rp   current_module_idrelativer   r~   r   r:   r   )r   r   rl   _r   as_names         ri   visit_import_fromz#DependencyVisitor.visit_import_from  s      "" 	F.J((**AJd>W
 
	1 	L33444W 	F 	FMD'Y_t-C D DEEEE	F 	Frk   r   c                    t          | j                                        |j        |j        | j                  \  }}|                     t          |                     d S r   )rZ   rp   r   r   r   r~   r   r;   )r   r   rl   r   s       ri   visit_import_allz"DependencyVisitor.visit_import_all  sX    .J((**AJd>W
 
	1
 	1)<<=====rk   r   c                \    |j         s#t                                          |           d S d S r   )is_unreachabler   visit_blockr   r   r   s     ri   r   zDependencyVisitor.visit_block  s6     	#GG"""""	# 	#rk   r
   c                4   |j         }t          |t                    rt          |j        t                    r|j        }|                     |j        t          |j                             |j	        D ]+}|                     |t          |j                             ,t                                          |           nt          |t                    rt          |j        t                    r|j        j        }| j                                         d|j         }|j                                        D ]\  }}|                    d          st          |j        t*                    rr|j        j        }	|	rd|                     |	           |                     |	t          |                     t          | d|           }
|                     |	|
           nbt          |t                    r}t          |j        t.                    rc|j        j        }|j        J | j                                         d|j         }|                     |j        t          |                     nt          |t                    rt          |j        t2                    rp|j        j        j                                        D ]J\  }}t          |j        t*                    r+|j        j        r|                     |j        j                   Kn1|j        r]t7          |j                  dk    sJ |j        d         }t          |t:                    sJ t=          | j                             |                    }	t          |	tB                    rw|	"                                rc|	#                                j        }| $                    t          |dz                        | $                    t          |dz                        t          |tJ                    r?t          |j        tL                    r%|                     |j        j        j'                   n|	r|                     |	           nt                      (                    |           |j        D ]}| )                    |           |j        |gz   }tU          t7          |          dz
            D ]@}||         }||dz            }t          |tV                    r| ,                    |d           A|j        r|                     |j                   | -                                r3|j.        -t          |t                    rt          |j/        t`                    r |j/        j        rd }t          |j/        j        tb                    rH|j/        j                             d	          }|r&t          |j        td                    r|j        j        }n|j/        j        }|sd S |j        D ]w}t          |t`                    rV|j        rO|j3        rH|j4        tj          k    r d S | $                    t          |          t          |j                             nd S d S d S d S d S d S )
Nr   r   r      r   r   r   __iter__r   )6rvaluerr   r   analyzedr/   r   upper_boundr:   r   valuesr   visit_call_exprr    rt   rp   r   r   r   r   
startswithr   r1   r   r-   r   r   is_alias_deflenlvaluesr!   rX   r\   getrB   is_type_objtype_objectr   r   r+   r[   visit_assignment_stmtprocess_lvalueranger*   !add_attribute_dependency_for_exprr   unanalyzed_typer   r'   r.   r   
is_new_defkindr   )r   r   r   r   valrt   prefixr   symnodetypattr_targetlvalue
class_namer   ifnameinitlvr   s                     ri   r   z'DependencyVisitor.visit_assignment_stmt  s   fh'' 9	3Jv,T,T 9	3H&&$\(:K-L-L '      X X**3|HDU7V7V*WWWWGG##F++++)) 0	3j..Y.Y 0	3?'D
6688FF49FFF!%!1!1!3!3 L Lgs++ L
7<0M0M L!,+C L223777223|F?S?S2TTT&2f3E3Et3E3E&F&F223{2KKKL )) $	3j-.X.X $	3?'D&222
6688FF49FFF&&t':<PVCWCW&XXXX)) 	3j,.W.W 	3!'!5!;!A!A!C!C B BgglC00 BW\5F B..w|/@AAAB ^ 	3qy>>Q&&&&Yq\Ffh/////!$-"3"3F";";<<C#|,, K1B1B K __..7
##Lk1I$J$JKKK##Lj1H$I$IJJJ&),, 0FO]1[1[ 0**6?+?+FGGGG 0**3/// GG))!,,,) , ,##F++++I(E3u::>** O Oqq1ufi00 O::6:NNNv 3**16222  "" 	\q'8'@ 68,,\v}g66\ M*\
 %)fm0(;; 3!=-11*==D 3
496K L L 3 $	 2"M2E F) \ \B!"g.. \2; \2= \7d??"FF++L,?,?bkAZAZ[[[1	\ 	\'@'@
\ \ \ \ \ \\ \rk   r   r   c                   t          |t                    r|                     |j        d           dS t          |t                    r|j        t          t          fv ru|                     |          }| 	                    |          }t          | j                                         d|j                   }|D ]}|                     ||           dS dS t          |t                    r|                     |          rm|j        rf|j        }t          |t&                    rJ|j        }|rAt+          |          r2|                     t          |j        dz   |j        z                        |j        |j        | j        vrdS | j        |j                 }|                     |          }| 	                    |          }|                     ||j                  D ]}|D ]}|                     ||           dS dS t          |t4                    r!|j        D ]}	|                     |	           dS t          |t:                    r|                     |j                   dS dS )z/Generate additional dependencies for an lvalue.__setitem__r   N)rr   r   add_operator_method_dependencyr   r!   r   r   r   get_non_partial_lvalue_typer   r:   rp   r   r   r   r   is_self_member_refr   r   r1   rt   r   r   exprr\   attribute_triggersr*   r   r   r(   )
r   r   lvalue_typetype_triggersattr_triggertype_triggerr   rt   object_typeitems
             ri   r   z DependencyVisitor.process_lvalue  s   fi(( "	-//]KKKKK))  	-{tTl** #>>vFF $ 6 6{ C C+tz/M/M/O/O,_,_RXR],_,_``$1 D DL''lCCCC +*D D
++ 	-&&v.. ]63D ]{dC(( ]9D ]t 4 4 ]++L9Lv{9Z,[,[\\\{";dm33F"mFK8">>vFF $ 6 6{ C C$($;$;K$U$U H HL(5 H H++L,GGGGH #"H H 	** 	- * *##D))))* *)) 	-,,,,,	- 	-rk   
memberexprr   boolc                    t          |j        t                    sdS |j        j        }t          |t                    o|j        S )z1Does memberexpr to refer to an attribute of self?F)rr   r   r!   r   r1   is_self)r   r  r   s      ri   r   z$DependencyVisitor.is_self_member_ref+  s<    */844 	5#$$$55rk   r'   rL   c                ^   || j         vrt                      S t          | j         |                   }t          |t                    rft          |j        t                    r5|j        j        rt          |j        j                  }n&t                      }n|j        rJ t                      S |S r   )	r\   rU   rX   rr   rI   r   r1   r   r   )r   r   r   s      ri   r   z-DependencyVisitor.get_non_partial_lvalue_type2  s    &&"$$$%dmF&;<<k;// 	)&+s++ );# 4"1&+2B"C"CKK"1"3"3KK ",,,,&(((rk   r$   c                H   t                                          |           |                     |j                   t          |j                 }|                     |j        |           |j        t          v r*d|dd          z   }|                     |j        |           d S d S )N__i   )r   visit_operator_assignment_stmtr   r   r4   opr   r5   )r   r   methodinplace_methodr   s       ri   r  z0DependencyVisitor.visit_operator_assignment_stmtG  s    ..q111AH%%%AD!..qx@@@4***"VABBZ/N2218^LLLLL +*rk   r   c                   t                                          |           |j        sY|                     |j        d           |                     |j        d           |j        r|                     |j        d           n=|                     |j        d           |j        r|                     |j        d           |                     |j                   t          |j        t                    r5|j        }|r,|                     |d           |                     |d           |j        r|                     |j                   d S d S )Nr   __getitem____next__	__aiter__	__anext__)r   visit_for_stmtis_asyncr   r   inferred_iterator_typeadd_attribute_dependencyr   indexrr   r*   inferred_item_type
index_typer   )r   r   	item_typer   s      ri   r  z DependencyVisitor.visit_for_stmtP  sS   q!!!z 
	U 2216:FFF2216=III' T--a.F
SSS2216;GGG' U--a.FTTTAG$$$agy)) 	H,I H--iDDD--iGGG< 	5&&q|44444	5 	5rk   r2   c                \   t                                          |           |j        D ]b}|j        s-|                     |d           |                     |d           6|                     |d           |                     |d           c|j        D ]}|                     |           d S )N	__enter____exit__
__aenter__	__aexit__)r   visit_with_stmtr   r  r   analyzed_typesr   )r   r   er   r   s       ri   r$  z!DependencyVisitor.visit_with_stmti  s    """ 	G 	GA: G66q+FFF66q*EEEE66q,GGG66q+FFFF# 	, 	,C&&s++++	, 	,rk   r   c                    t                                          |           t          |j        t                    r"|                     |j        j        d           d S d S )N__delitem__)r   visit_del_stmtrr   r   r   r   r   r   s     ri   r)  z DependencyVisitor.visit_del_stmtu  s\    q!!!afi(( 	O2216;NNNNN	O 	Ork   c                   |j         r'|                     t          |j                              t          | j                            |                    }t          |t                    ry|                                rg|	                                j         }|                     t          |dz                        |                     t          |dz                        d S d S d S )Nr   r   )
r   r   r:   rX   r\   r   rr   rB   r   r   )r   r   r   r   s       ri   process_global_ref_exprz)DependencyVisitor.process_global_ref_expr|  s    : 	:QZ 8 8999 dm//2233c<(( 	GS__->-> 	G**3JZ+-E F FGGGZ*-D E EFFFFF	G 	G 	G 	Grk   r!   c                x    |j         t          k    rd S |j         t          k    rd S |                     |           d S r   )r   r   r   r+  r   s     ri   visit_name_exprz!DependencyVisitor.visit_name_expr  s@    6T>> F6T>> F$$Q'''''rk   r&  c                   t          |j        t                    rQt          |j        j        t                    r2|                     t          |j        j        j                             n!t                      	                    |           |j
        |                     |           d S |j        | j        vrd S t          |j        t                    r]t          |j        j        t                    r>|                     t          |j        j        j        dz   |j        z                        d S t          | j        |j                           }|                     ||j                   |                                 rQt          |t$                    r>|                     ||          }|(|                     t          |                     d S d S d S d S r   )rr   r   r'   r   r.   r   r:   r   r   visit_member_exprr   r+  r\   r   r   rX   r  r   r>   get_unimported_fullname)r   r&  r   r   r   s       ri   r/  z#DependencyVisitor.visit_member_expr  s   afg&& 	):afk8+L+L 	)QV[-A B BCCCCGG%%a(((6((+++++ vT]** !&'** z!&+x/P/P ##L1E1Kaf1T$U$UVVV!$-"788C))#qv666$$&& 
<:c7+C+C 
<33As;;# ''T(:(:;;;;;
< 
< 
< 
<##rk   r   r>   
str | Nonec                   d}|j         t          j        k    rt          |j        t
                    rd|j        z   |z   }|j        }|j        | j        vrdS t          | j        |j                           }t          |t                    sdS |}|j         t          j        k    rt          |j        t
                    |j         t          j
        k    r|j        r|j        dz   |j        z   |z   S dS )zIf e refers to an unimported definition, infer the fullname of this.

        Return None if e doesn't refer to an unimported definition or if we can't
        determine the name.
         r   N)type_of_anyrO   from_another_anyrr   r   r   r   r\   rX   r>   from_unimported_typemissing_import_name)r   r&  r   suffixobj_types        ri   r0  z)DependencyVisitor.get_unimported_fullname  s     
 o!;;;
16S]@^@^;16\F*FAvT]**t&t}QV'<==Hh00 tC o!;;;
16S]@^@^; ?i<<<AX<*S0169FBBtrk   r)   c                2   |                                  s!t                                          |           |j        W|j        }t          |j                  D ]=}|                     t          |j        dz   |z                        ||j	        v r d S <d S d S r   )
r   r   visit_super_exprrt   r   r   r   r:   r   r   )r   r&  r   r   r   s       ri   r;  z"DependencyVisitor.visit_super_expr  s    $$&& 	(GG$$Q'''66D)!&11  ##L1Dt1K$L$LMMM4:%% EE	 &	  rk   r   c                   t          |j        t                    r'|j        j        dk    r|                     |           d S t                                          |           | j                            |j                  }|<t          |          }t          |t                    s|                     |d           d S d S d S )Nzbuiltins.isinstance__call__)rr   r   r'   r   process_isinstance_callr   r   r\   r   rX   rB   r  r   r&  r   r   s      ri   r   z!DependencyVisitor.visit_call_expr  s    ah(( 	CQX->BW-W-W((+++++GG##A&&&-##AH--C%c**!#|44 C11#zBBBBB C Crk   c                r   t          |j                  dk    r||j        d         }t          |t                    rZ|j        t
          k    rJt          |j        t                    r0|j        r)| 	                    t          |j                             dS t                                          |           dS )zDProcess "isinstance(...)" in a way to avoid some extra dependencies.r  r   N)r   argsrr   r'   r   r   r   r.   r   r   r:   r   r   )r   r&  argr   s      ri   r>  z)DependencyVisitor.process_isinstance_call  s    qv;;!&)C3((H$$sx22 %L %
 ##L$>$>??? 	"""""rk   r   c                ~    t                                          |           |                     |j                   d S r   )r   visit_cast_exprr   r   r   r&  r   s     ri   rD  z!DependencyVisitor.visit_cast_expr  s7    """""16*****rk   r	   c                ~    t                                          |           |                     |j                   d S r   )r   visit_assert_type_exprr   r   rE  s     ri   rG  z(DependencyVisitor.visit_assert_type_expr  s7    &&q)))""16*****rk   r,   c                    t                                          |           |j        D ]}|                     |           d S r   )r   visit_type_applicationtypesr   r?  s      ri   rI  z(DependencyVisitor.visit_type_application  sM    &&q)))7 	, 	,C&&s++++	, 	,rk   r   c                    t                                          |           |                     |j        d           d S )Nr  )r   visit_index_exprr   r   rE  s     ri   rL  z"DependencyVisitor.visit_index_expr  s9      ###++AFMBBBBBrk   r0   c                    t                                          |           |j        t          vrd S t          |j                 }|                     |j        |           d S r   )r   visit_unary_exprr  r7   r   r   )r   r&  r  r   s      ri   rN  z"DependencyVisitor.visit_unary_expr  sX      ###4'''F!!$'++AFF;;;;;rk   r%   c                    t                                          |           |                     |j        |j        |j                   d S r   )r   visit_op_exprprocess_binary_opr  leftrightrE  s     ri   rP  zDependencyVisitor.visit_op_expr  s?    a   qtQVQW55555rk   r   c                    t                                          |           t          |j                  D ]9\  }}|j        |         }|j        |dz            }|                     |||           :d S )Nr   )r   visit_comparison_expr	enumerate	operatorsoperandsrQ  )r   r&  r   r  rR  rS  r   s         ri   rU  z'DependencyVisitor.visit_comparison_expr  sx    %%a(((q{++ 	4 	4EAr:a=DJq1u%E""2tU3333	4 	4rk   r  rm   rR  rS  c                    t          j        |          }|rb|dk    r|                     ||           d S |                     ||           t          j        |          }|r|                     ||           d S d S d S )Nin)r4   r   r   r6   )r   r  rR  rS  r  
rev_methods         ri   rQ  z#DependencyVisitor.process_binary_op  s    ## 	KTzz33E6BBBBB33D&AAA/3F;;
 K77zJJJJJ	K 	KK Krk   r  c                    t          | j                            |                    }||                     ||           d S d S r   )rX   r\   r   'add_operator_method_dependency_for_type)r   r&  r  r   s       ri   r   z0DependencyVisitor.add_operator_method_dependency(  sG    dm//2233?88fEEEEE ?rk   rJ   c                   t          |t                    rt          |j                  }t          |t                    r|j        }t          |t                    r6t          |j        j	        dz   |z             }| 
                    |           d S t          |t                    r/|j        D ]%}|                     t          |          |           &d S t          |t                    r1|                                r|                     |j        |           d S t          |t"                    rRt          |j        t                    r:|j        j        j        +|                     |j        j        j        |           d S d S d S d S r   )rr   rR   rX   r   rK   partial_fallbackrC   r:   r   r   r   rV   r   r]  rB   r   fallbackrP   r  metaclass_type)r   r   r  r   r  s        ri   r]  z9DependencyVisitor.add_operator_method_dependency_for_type-  s    c;'' 	3!#/22Cc9%% 	'&Cc8$$ 
	c"38#4s#:V#CDDG(((((Y'' 	c	 \ \<<_T=R=RTZ[[[[\ \\** 	cs/@/@ 	c88vNNNNNX&& 	c#(H-- c#(-2N2Z<<SX]=Y[abbbbb	c 	cc c2Z2Zrk   r   c                    t                                          |           |j        D ]}|                     |           d S r   )r   visit_generator_expr	sequencesadd_iter_dependencyr   r&  seqr   s      ri   rc  z&DependencyVisitor.visit_generator_expr@  sM    $$Q'''; 	* 	*C$$S))))	* 	*rk   r   c                    t                                          |           |j        D ]}|                     |           d S r   )r   visit_dictionary_comprehensionrd  re  rf  s      ri   ri  z0DependencyVisitor.visit_dictionary_comprehensionE  sM    ..q111; 	* 	*C$$S))))	* 	*rk   r(   c                ~    t                                          |           |                     |j                   d S r   )r   visit_star_exprre  r   rE  s     ri   rk  z!DependencyVisitor.visit_star_exprJ  s7    """  (((((rk   r3   c                ~    t                                          |           |                     |j                   d S r   )r   visit_yield_from_exprre  r   rE  s     ri   rm  z'DependencyVisitor.visit_yield_from_exprN  s7    %%a(((  (((((rk   r   c                    t                                          |           |                     |j        d           d S )N	__await__)r   visit_await_exprr   r   rE  s     ri   rp  z"DependencyVisitor.visit_await_exprR  s9      ###..qv{CCCCCrk   r[   c                    || j         v r2| j         |         D ]&}|                     t          |                     %d S d S r   )re   r   r:   )r   r[   aliass      ri   r   z%DependencyVisitor.add_type_alias_depsX  sX     T_$$0 9 9##L$7$78888 %$9 9rk   r   c                    |                     d          rdS || j                                        }| j                            |t                                                    |           dS )zyAdd dependency from trigger to a target.

        If the target is not given explicitly, use the current target.
        )z
<builtins.z<typing.z<mypy_extensions.z<typing_extensions.N)r   rp   r   rg   r   r   add)r   r   r[   s      ri   r   z DependencyVisitor.add_dependency_  sn    
 R
 
 	 F>Z..00FGSUU++//77777rk   c                b    |                      |          D ]}|                     ||           dS )zAdd dependencies to all components of a type.

        Args:
            target: If not None, override the default (current) target of the
                generated dependency.
        N)r   r   )r   r   r[   r   s       ri   r   z'DependencyVisitor.add_type_dependenciesp  sD     --c22 	1 	1G0000	1 	1rk   r   c                f    |                      ||          }|D ]}|                     |           dS )z;Add dependencies for accessing a named attribute of a type.N)r   r   )r   r   r   r   r[   s        ri   r  z*DependencyVisitor.add_attribute_dependencyz  sG    ))#t44 	( 	(F''''	( 	(rk   	list[str]c                   t          |          }t          |t                    rt          |j                  }t          |t                    r|j        }t          |t                    r!|j        j         d| }t          |          gS t          |t                    rr|                                r^|                                j         d| }t          |          g}|                    |                     |j        |                     |S t          |t                     r7g }|j        D ]+}|                    |                     ||                     ,|S t          |t$                    r|                     |j        |          }t          |j        t                    rQ|j        j        j        @|                    t          |j        j        j        j        j         d|                      |S g S )z<Return all triggers associated with the attribute of a type.r   )rX   rr   rR   r   rK   r_  rC   r   r   r:   rB   r   r   extendr   r`  rV   r   rP   r  ra  append)r   r   r   membertriggersr   r  s          ri   r   z$DependencyVisitor.attribute_triggers  s   c""c;'' 	3!#/22Cc9%% 	'&Cc8$$ 	)22D22F (())\** 	s/@/@ 	))2;;T;;F$V,,-HOOD33CL$GGHHHOY'' 	G	 D Dt66tTBBCCCCNX&& 	..sx>>H#(H-- #(-2N2Z CHM$@$E$N!W!WQU!W!WXX   OIrk   c                n    | j                             |          }||                     ||           d S d S r   r\   r   r  )r   r&  r   r   s       ri   r   z3DependencyVisitor.add_attribute_dependency_for_expr  s?    m""?))#t44444 ?rk   r   c                n    | j                             |          }|r|                     |d           d S d S )Nr   r~  )r   r   r   s      ri   re  z%DependencyVisitor.add_iter_dependency  sE    m%% 	;))#z:::::	; 	;rk   c                ,    | j         d uo| j         j        S r   )r`   logical_deps)r   s    ri   r   z"DependencyVisitor.use_logical_deps  s    |4'EDL,EErk   c                F    t          ||                                           S r   )r   r   r   r   s     ri   r   z#DependencyVisitor.get_type_triggers  s     d&;&;&=&=>>>rk   r   )
r\   r]   r^   r_   re   ry   r`   rz   ra   r{   )r   r   ra   r{   )r   r   ra   r{   )r   r   ra   r{   )r   r   ra   r{   )r   r"   ra   r{   )rt   r.   ra   r{   )r   r   ra   r{   )r   r   ra   r{   )r   r   ra   r{   )r   r   ra   r{   )r   r
   ra   r{   )r   r   ra   r{   )r  r   ra   r  )r   r'   ra   rL   )r   r$   ra   r{   )r   r   ra   r{   )r   r2   ra   r{   )r   r   ra   r{   )r   r'   ra   r{   )r   r!   ra   r{   )r&  r   ra   r{   )r&  r   r   r>   ra   r1  )r&  r)   ra   r{   )r&  r   ra   r{   )r&  r   ra   r{   )r&  r	   ra   r{   )r&  r,   ra   r{   )r&  r   ra   r{   )r&  r0   ra   r{   )r&  r%   ra   r{   )r&  r   ra   r{   )r  rm   rR  r   rS  r   ra   r{   )r&  r   r  rm   ra   r{   )r   rJ   r  rm   ra   r{   )r&  r   ra   r{   )r&  r   ra   r{   )r&  r(   ra   r{   )r&  r3   ra   r{   )r&  r   ra   r{   )r[   rm   ra   r{   )r   rm   r[   r1  ra   r{   )r   rL   r[   r1  ra   r{   )r   rL   r   rm   ra   r{   )r   rL   r   rm   ra   rw  )r&  r   r   rm   ra   r{   )r   r   ra   r{   )ra   r  r   rL   ra   rw  )6__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r$  r)  r+  r-  r/  r0  r;  r   r>  rD  rG  rI  rL  rN  rP  rU  rQ  r   r]  rc  ri  rk  rm  rp  r   r   r   r  r   r   re  r   r   __classcell__)r   s   @ri   rd   rd      sq        #'    0' ' ' ' ' '/ / / / / /0# # # # # #0) ) ) ) ) )/ / / /
TV TV TV TVlO O O O	F 	F 	F 	F> > > ># # # # # #T\ T\ T\ T\ T\ T\l$- $- $- $-L6 6 6 6   *M M M M M M5 5 5 5 5 52
, 
, 
, 
, 
, 
,O O O O O OG G G G	( 	( 	( 	(< < < < < <B   4     	C 	C 	C 	C 	C 	C# # # # # #"+ + + + + ++ + + + + +, , , , , ,
C C C C C C< < < < < <6 6 6 6 6 64 4 4 4 4 4	K 	K 	K 	KF F F F
c c c c&* * * * * *
* * * * * *
) ) ) ) ) )) ) ) ) ) )D D D D D D9 9 9 98 8 8 8 8"1 1 1 1 1( ( ( (   <5 5 5 5
; ; ; ;
F F F F? ? ? ? ? ? ? ?rk   rd   Nr   rL   r   r  seen_aliasesset[TypeAliasType] | Nonerw  c                H    |                      t          ||                    S )z=Return all triggers that correspond to a type becoming stale.)rf   TypeTriggersVisitor)r   r   r  s      ri   r   r     s"     ::)*:LIIJJJrk   c                      e Zd Z	 d8d9dZd:dZd;dZd<dZd=dZd>dZd?dZ	d@dZ
dAdZdBdZdCdZdDd!ZdEd#ZdFd%ZdGd'ZdHd)ZdId+ZdJd-ZdKd/ZdLd1ZdMd3ZdNd5ZdOd7ZdS )Pr  Nr   r  r  r  ra   r{   c                L    g | _         |pt                      | _        || _        d S r   )depsr   r  r   )r   r   r  s      ri   r   zTypeTriggersVisitor.__init__  s*      "	0<0E 0rk   r   rL   rw  c                8    t          || j        | j                  S r   )r   r   r  r  s     ri   r   z%TypeTriggersVisitor.get_type_triggers  s     d&;T=NOOOrk   rC   c                   t          |j        j                  }|g}|j        D ]*}|                    |                     |                     +|j        r-|                    |                     |j                             |j        r8|j        j        r,|	                    t          |j        j                             |S r   )r:   r   r   rA  ry  r   last_known_valueextra_attrsmod_namerz  r;   r   r   r   r|  rB  s        ri   visit_instancez"TypeTriggersVisitor.visit_instance  s    sx01198 	9 	9COOD223778888 	JOOD2233GHHIII? 	Ms7 	MOO1#/2JKKLLLrk   rM   c                b   || j         v rg S | j                             |           |j        J t          |j        j                  }|g}|j        D ]*}|                    |                     |                     +|                    |                     |j        j                             |S r   )	r  rt  rr  r:   r   rA  ry  r   r[   r  s        ri   visit_type_alias_typez)TypeTriggersVisitor.visit_type_alias_type  s    $###Ic"""y$$$sy12298 	9 	9COOD223778888 	..sy/?@@AAArk   r>   c                >    |j         t          |j                   gS g S r   )r7  r:   r  s     ri   	visit_anyzTypeTriggersVisitor.visit_any  s$    ". !899::	rk   rE   c                    g S r    r  s     ri   visit_none_typez#TypeTriggersVisitor.visit_none_type      	rk   r?   c                    g }|j         D ]*}|                    |                     |                     +|                    |                     |j                             |S r   )	arg_typesry  r   ret_typer   r   r|  rB  s       ri   visit_callable_typez'TypeTriggersVisitor.visit_callable_type  sd    = 	9 	9COOD223778888..s|<<=== rk   rF   c                n    g }|j         D ]*}|                    |                     |                     +|S r   r   ry  r   r   r   r|  r  s       ri   visit_overloadedz$TypeTriggersVisitor.visit_overloaded  @    I 	: 	:DOOD224889999rk   trA   c                    J d            )NFz"Should not see an erased type herer  )r   r  s     ri   visit_erased_typez%TypeTriggersVisitor.visit_erased_type  s    :::::rk   r@   c                    g S r   r  r  s     ri   visit_deleted_typez&TypeTriggersVisitor.visit_deleted_type  r  rk   rI   c                    J d            )NFz"Should not see a partial type herer  r  s     ri   visit_partial_typez&TypeTriggersVisitor.visit_partial_type  s    :::::rk   rK   c                    g }|j         D ]*}|                    |                     |                     +|                    |                     |j                             |S r   )r   ry  r   r_  r  s       ri   visit_tuple_typez$TypeTriggersVisitor.visit_tuple_type  sc    I 	: 	:DOOD224889999..s/CDDEEErk   rP   c                &   |                      |j                  }| j        so|                                }|D ]X}|                    |                    d          dz              |                    |                    d          dz              Y|S )N>z
.__init__>z	.__new__>)r   r  r   copyrz  rstrip)r   r   r|  old_triggersr   s        ri   visit_type_typez#TypeTriggersVisitor.visit_type_type  s    ))#(33$ 	C#==??L' C Cs 3 3l BCCCs 3 3k ABBBBrk   rR   c                   g }|j         r'|                    t          |j                              |j        r-|                    |                     |j                             |j        r-|                    |                     |j                             |j        D ]*}|                    |                     |                     +|S r   )r   rz  r:   r   ry  r   defaultr   )r   r   r|  r   s       ri   visit_type_varz"TypeTriggersVisitor.visit_type_var  s    < 	8OOL66777? 	EOOD223?CCDDD; 	AOOD223;??@@@: 	9 	9COOD223778888rk   rH   c                   g }|j         r'|                    t          |j                              |j        r-|                    |                     |j                             |j        r-|                    |                     |j                             |                    |                     |j                             |S r   r   rz  r:   r   ry  r   r  r   r   r|  s      ri   visit_param_specz$TypeTriggersVisitor.visit_param_spec      < 	8OOL66777? 	EOOD223?CCDDD; 	AOOD223;??@@@..s??@@@rk   rQ   c                   g }|j         r'|                    t          |j                              |j        r-|                    |                     |j                             |j        r-|                    |                     |j                             |                    |                     |j                             |S r   r  r  s      ri   visit_type_var_tuplez(TypeTriggersVisitor.visit_type_var_tuple#  r  rk   rW   c                6    |j                             |           S r   )r   rf   r  s     ri   visit_unpack_typez%TypeTriggersVisitor.visit_unpack_type.  s    xt$$$rk   rG   c                n    g }|j         D ]*}|                    |                     |                     +|S r   )r  ry  r   r  s       ri   visit_parametersz$TypeTriggersVisitor.visit_parameters1  s@    = 	9 	9COOD223778888rk   rN   c                    g }|j                                         D ]*}|                    |                     |                     +|                    |                     |j                             |S r   )r   r   ry  r   r`  r  s       ri   visit_typeddict_typez(TypeTriggersVisitor.visit_typeddict_type7  sn    I$$&& 	: 	:DOOD224889999..s|<<===rk   rD   c                6    |                      |j                  S r   )r   r`  r  s     ri   visit_literal_typez&TypeTriggersVisitor.visit_literal_type>  s    %%cl333rk   rT   c                    g S r   r  r  s     ri   visit_unbound_typez&TypeTriggersVisitor.visit_unbound_typeA  r  rk   rU   c                    g S r   r  r  s     ri   visit_uninhabited_typez*TypeTriggersVisitor.visit_uninhabited_typeD  r  rk   rV   c                n    g }|j         D ]*}|                    |                     |                     +|S r   r  r  s       ri   visit_union_typez$TypeTriggersVisitor.visit_union_typeG  r  rk   r   )r   r  r  r  ra   r{   r  )r   rC   ra   rw  )r   rM   ra   rw  )r   r>   ra   rw  )r   rE   ra   rw  )r   r?   ra   rw  )r   rF   ra   rw  )r  rA   ra   rw  )r   r@   ra   rw  )r   rI   ra   rw  )r   rK   ra   rw  )r   rP   ra   rw  )r   rR   ra   rw  )r   rH   ra   rw  )r   rQ   ra   rw  )r   rW   ra   rw  )r   rG   ra   rw  )r   rN   ra   rw  )r   rD   ra   rw  )r   rT   ra   rw  )r   rU   ra   rw  )r   rV   ra   rw  )r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rk   ri   r  r    s       PT1 1 1 1 1P P P P
 
 
 
      
         ; ; ; ;   ; ; ; ;      
 
 
 
	 	 	 		 	 	 	% % % %      4 4 4 4           rk   r  new_depsr  r{   c                    |                                  D ]:\  }}|                    |t                                                    |           ;d S r   )r   r   r   r   )r  r  r   r   s       ri   merge_dependenciesr  N  sS    $NN,, 8 8''..w77778 8rk   rt   r.   list[TypeInfo]c                4    d | j         dd          D             S )Nc                (    g | ]}|j         d k    |S )zbuiltins.object)r   .0r   s     ri   
<listcomp>z%non_trivial_bases.<locals>.<listcomp>T  s%    PPPTT]>O-O-OD-O-O-Ork   r   )r   rt   s    ri   r   r   S  s     PPTXabb\PPPPrk   c                N    t          d | j        dd          D                       S )Nc              3  (   K   | ]}|j         d vV  dS ))builtinstypingenumN)module_namer  s     ri   	<genexpr>z!has_user_bases.<locals>.<genexpr>X  s+      __$t'EE______rk   r   )anyr   r  s    ri   r   r   W  s/    __RVRZ[\[][]R^______rk   modulesdict[str, MypyFile]c                   i }|                                  D ]\  }}|dv s	d|j        v r||j        k    sJ t          ||||          }|                                 D ]:\  }}	|                    |t                                                    |	           ;t          j        |           t          |                                 d           D ]8\  }}	t          |           t          |	          D ]}
t          d|
            9dS )zKGenerate dependencies for all interesting modules and print them to stdout.)r  r  z
/typeshed/c                    | d         S )Nr   r  )xs    ri   <lambda>z'dump_all_dependencies.<locals>.<lambda>n  s
    1Q4 rk   )keyz    N)r   pathr   rj   r   r   r   rY   add_all_protocol_depssortedprint)r  r\   r^   r`   all_depsr   r   r  r   r   r[   s              ri   dump_all_dependenciesr  [  s<    %'HMMOO @ @D '''<49+D+DT]""""hHH $

 	@ 	@GW//66w????	@$X..."8>>#3#3HHH # #gWoo 	# 	#F///""""	## #rk   )
r[   r   r\   r]   r^   r_   r`   r8   ra   rb   )rl   rm   rn   r   r[   r#   r\   r]   r^   r_   ra   rb   r   )r   rL   r   r  r  r  ra   rw  )r  rb   r  rb   ra   r{   )rt   r.   ra   r  )rt   r.   ra   r  )
r  r  r\   r]   r^   r_   r`   r8   ra   r{   )p__doc__
__future__r   collectionsr   
mypy.nodesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   mypy.operatorsr4   r5   r6   r7   mypy.optionsr8   
mypy.scoper9   mypy.server.triggerr:   r;   mypy.traverserr<   mypy.typeopsr=   
mypy.typesr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   mypy.typestaterY   	mypy.utilrZ   rj   rw   rd   r   listrm   r  r  r   r   r  r  rk   ri   <module>r     s(  O Ob # " " " " " # # # # # #0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0b            !                 C C C C C C C C + + + + + + " " " " " "                                                         : & % % % % % - - - - - -	 	 	 	   8Q? Q? Q? Q? Q?( Q? Q? Q?j RVK K K K KU U U U U+d3i0 U U Up8 8 8 8
Q Q Q Q` ` ` `# # # # # #rk   