
    &`iy                    
   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZmZmZmZmZmZmZ d dlmc 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$ d dl%m&Z& d d	l'm(Z(m)Z) d d
l*m+Z+ d dl,m-Z- d dl.m/Z/ 	 d dl0m1Z1 n# e2$ r	 d dlm1Z1 Y nw xY w ej3        e4          Z5dZ6dZ7dZ8dZ9 e&dd          Z: e&dd          Z;e G d de                      Z<e G d de                      Z=ee>e?e@eAf         ZBe>ZC G d d          ZD e1e            G d d                      ZE e1e            G d d                      ZF e1e            G d  d!                      ZGd"dd#d$e?d%e?fd&ZH G d' d(e          ZId)eJd*eId%e?d+eJfd,ZK e1e            G d- d.                      ZL e1e            G d/ d0eI                      ZM e1e            G d1 d2eI                      ZN e1e            G d3 d4eI                      ZO G d5 d6eIe-e-neP          ZQ e1e            G d7 d8eI                      ZR e1e            G d9 d:eI                      ZS e1e            G d; d<eI                      ZT e1e            G d= d>eI                      ZU e1e            G d? d@eI                      ZVeMeNeOeReQeTeUeVgZWeWD ]ZX eYeXZ                                          d k    r;dA[                    eXZ                                          Z\eXxj]        dBe\ dCz  c_]         eYeX^                                          d k    r;dA[                    eX^                                          Z_eXxj]        dDe_ dCz  c_]         e1e            G dE dF                      Z`	 dGZa e1e            G dH dI                      Zbe1 G dJ dK                      Zc e1e            G dL dM                      Zde1 G dN dO                      Ze e1e            G dP dQ                      Zfe1 G dR dS                      Zg e1e            G dT dU                      Zhe1 G dV dW                      Zi e1e            G dX dY                      Zj e1e            G dZ d[                      Zkd\e<d+eIfd]Zl	 did_ee>         d`e?d+eJfdaZmdbe+d+eJfdcZndde>d+e>fdeZodfedge<d+eIfdhZpdS )j    N)ABC)asdictfieldfields)Enumunique)AnyDictListOptionalSetTupleUnion)IS_PYDANTIC_2)TypeActorStatusTypeNodeStatusTypePlacementGroupStatusTypeReferenceTypeTypeTaskStatusTypeTaskTypeTypeWorkerExitTypeTypeWorkerType)env_integer)
TaskStatusTaskType)
TaskEvents)
JobDetails)RayStateApiException)	dataclass   d     zfile.txtRAY_MAX_LIMIT_FROM_API_SERVERi'  RAY_MAX_LIMIT_FROM_DATA_SOURCEc                   2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )StateResourceactorsjobsplacement_groupsnodesworkerstasksobjectsruntime_envscluster_eventsN)__name__
__module____qualname__ACTORSJOBSPLACEMENT_GROUPSNODESWORKERSTASKSOBJECTSRUNTIME_ENVSCLUSTER_EVENTS     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/util/state/common.pyr&   r&   @   s<        FD)EGEG!L%NNNr=   r&   c                       e Zd ZdZdZdZdS )SummaryResourcer'   r,   r-   N)r0   r1   r2   r3   r8   r9   r<   r=   r>   r@   r@   M   s        FEGGGr=   r@   c                   Z    e Zd ZdZdefdZdefdZdefdZde	e
         fdZde
fd	Zd
S )HumanifyzUA class containing default methods to
    convert units into a human readable string.xc                 `    t          t          j                            | dz                      S )z+Converts milliseconds to a datetime object.r"   )strdatetimefromtimestamprC   s    r>   	timestampzHumanify.timestamp^   s%    8$221t8<<===r=   c                 8   | dk    r#t          t          | dz  d                    dz   S | dk    r#t          t          | dz  d                    dz   S | dk    r#t          t          | dz  d                    dz   S t          t          | d                    dz   S )	z3Converts raw bytes to a human readable memory size.i   @z.3fz GiB   z MiBi   z KiBz B)rE   formatrH   s    r>   memoryzHumanify.memoryb   s    ::va5k51122V;;%ZZva5k51122V;;%ZZva5k51122V;;6!U##$$t++r=   c                 F    t          t          j        |                     S )z3Converts milliseconds to a human readable duration.)milliseconds)rE   rF   	timedeltarH   s    r>   durationzHumanify.durationl   s    8%1555666r=   eventsc                 ^    | D ])}d|v r#t                               |d                   |d<   *| S )z<Converts a list of task events into a human readable format.
created_msrB   rI   )rR   events     r>   rR   zHumanify.eventsp   sA     	N 	NEu$$&.&8&8|9L&M&Ml#r=   	resourcesc                 ^    | D ])}d|v r#t                               | |                   | |<   *| S )z9Converts a node's resources into a human readable format.rM   )rB   rM   )rW   resources     r>   node_resourceszHumanify.node_resourcesw   s@    ! 	K 	KH8##&.ooi6I&J&J	(#r=   N)r0   r1   r2   __doc__floatrI   intrM   rQ   r   dictrR   rZ   r<   r=   r>   rB   rB   Z   s        3 3>U > > > >,# , , , ,7C 7 7 7 7tDz    $      r=   rB   )initc                       e Zd ZU eZeed<   eZeed<   dZ	e
ed<    ee          Zeeeeeef                           ed<   dZe
ed<   d	Zeed
<   d Zde
fdZdS )ListApiOptionslimittimeoutFdetaildefault_factoryfiltersTexclude_driver皙?server_timeout_multiplierc                    t          dt          | j        | j        z                      | _        | j        dk    s
J d            | j        g | _        | j        D ]'}|\  }}}|dk    r|dk    rt          d| d          (d S )N   r   "0 second timeout is not supported.=z!=zUnsupported filter predicate z' is given. Available predicates: =, !=.)maxr]   rc   rj   rg   
ValueError)selffilter_filter_predicates       r>   __post_init__zListApiOptions.__post_init__   s     1c$,1O"OPPQQ|q   "F   <DLl 	 	F%+"A3&&+;t+C+C 34D 3 3 3  	 	r=   returnc           
          i }| j         D ]T}|\  }}}|dk    rF||v r9||         |k    r-t          j        d| d||          d| dt                      dS ||vr|||<   UdS )Nrn   z2There are multiple '=' filters with the same key 'z' but different values'z' & 'z$'. Empty result set will be returnedTF)rg   warningswarnUserWarning)rq   equal_filtersrr   
filter_keyrt   filter_values         r>   has_conflicting_filtersz&ListApiOptions.has_conflicting_filters   s     l 	= 	=F9?6J(,3&&-//%j1\AAM< *< <)*5< <<H< < < $    44}440<M*-ur=   N)r0   r1   r2   DEFAULT_LIMITrb   r]   __annotations__DEFAULT_RPC_TIMEOUTrc   rd   boolr   listrg   r   r   r   rE   PredicateTypeSupportedFilterTyperh   rj   r\   ru   r~   r<   r=   r>   ra   ra      s          E3&GS&&& FD OTeO O OGXd5m5H!HIJK     ND
 (+u***  "      r=   ra   c                   2    e Zd ZU eZeed<   dZeed<   d Z	dS )GetApiOptionsrc   ri   rj   c                     t          dt          | j        | j        z                      | _        | j        dk    s
J d            d S )Nrl   r   rm   )ro   r]   rc   rj   rq   s    r>   ru   zGetApiOptions.__post_init__   sI     1c$,1O"OPPQQ|q   "F     r=   N)
r0   r1   r2   r   rc   r]   r   rj   r\   ru   r<   r=   r>   r   r      sO          'GS&&&
 (+u***G G G G Gr=   r   c                       e Zd ZU eZeed<    ee          Z	e
eeeeef                           ed<   dZe
e         ed<   dS )SummaryApiOptionsrc   re   rg   N
summary_by)r0   r1   r2   r   rc   r]   r   r   r   rg   r   r   r   rE   r   r   r   r<   r=   r>   r   r      s          'GS&&& OTeO O OGXd5m5H!HIJK    !%J$$$$$r=   r   F)rd   	format_fn
filterablerd   c                     || |d}|r	d|vrd|d<   d|v r|d                              |           n||d<   t          di |S )ah  A wrapper around dataclass.field to add additional metadata.

    The metadata is used to define detail / filterable option of
    each column.

    Args:
        detail: If True, the column is used when detail == True
        filterable: If True, the column can be used for filtering.
        kwargs: The same kwargs for the `dataclasses.field` function.
    rd   r   r   defaultNmetadatar<   )updater   )r   rd   r   kwargsms        r>   state_columnr      sr     )LLA !)6)) yVz!!!$$$$ z??6??r=   c                      e Zd ZdZededefd            Zeddedee	         fd            Z
edee	         fd            Zedee	         fd	            Zedee	         fd
            Zedee	         fd            Zd Zd Zd ZddZdS )StateSchemaa  Schema class for Ray resource abstraction.

    The child class must be dataclass. All child classes
    - perform runtime type checking upon initialization.
    - are supposed to use `state_column` instead of `field`.
        It will allow the class to return filterable/detail columns.
        If `state_column` is not specified, that column is not filterable
        and for non-detail output.

    For example,
    ```
    @dataclass
    class State(StateSchema):
        column_a: str
        column_b: int = state_column(detail=True, filterable=True)

    s = State(column_a="abc", b=1)
    # Returns {"column_b"}
    s.filterable_columns()
    # Returns {"column_a"}
    s.base_columns()
    # Returns {"column_a", "column_b"}
    s.columns()
    ```

    In addition, the schema also provides a humanify abstract method to
    convert the state object into something human readable, ready for printing.

    Subclasses should override this method, providing logic to convert its own fields
    to something human readable, packaged and returned in a dict.

    Each field that wants to be humanified should include a 'format_fn' key in its
    metadata dictionary.
    staterv   c           
      t   t          |           D ]}|j                            d          |j        |v r||j                 u	  |j        d         ||j                           ||j        <   ]# t          $ r=}t
                              d|j         d||j                  d|            Y d}~d}~ww xY w|S )z=Convert the given state object into something human readable.r   NzFailed to format :z with )r   r   getname	Exceptionloggererror)clsr   fes       r>   humanifyzStateSchema.humanify(  s      		X 		XA
{++7FeOO!&M-X$;AJ{$;E!&M$J$JE!&MM  X X XLL!VQV!V!VeAFm!V!VST!V!VWWWWWWWWXs   )A--
B473B//B4Trd   c                     g }t          |           D ]T}|r|                    |j                   |j                            dd          s|                    |j                   U|S )zReturn a list of columns.rd   F)r   appendr   r   r   )r   rd   colsr   s       r>   list_columnszStateSchema.list_columns7  so      	$ 	$A $AF####Z^^He44 $AF###r=   c                 H    t          |                     d                    S )zReturn a set of all columns.Trd   setr   r   s    r>   columnszStateSchema.columnsC  s#     3##4#00111r=   c                     t                      }t          |           D ]7}|j                            dd          r|                    |j                   8|S )z#Return a list of filterable columnsr   F)r   r   r   r   addr   )r   r   r   s      r>   filterable_columnszStateSchema.filterable_columnsH  sU     UU
 	' 	'Az~~lE22 'qv&&&r=   c                 H    t          |                     d                    S )zjReturn a list of base columns.

        Base columns mean columns to return when detail == False.
        Fr   r   r   s    r>   base_columnszStateSchema.base_columnsQ  s#     3##5#11222r=   c                 H    t          |                     d                    S )zmReturn a list of detail columns.

        Detail columns mean columns to return when detail == True.
        Tr   r   r   s    r>   detail_columnszStateSchema.detail_columnsY  s#     3##4#00111r=   c                      t          |           S N)r   r   s    r>   r   zStateSchema.asdicta  s    d||r=   c                 "    t          | |          S r   getattr)rq   keys     r>   __getitem__zStateSchema.__getitem__e  s    tS!!!r=   c                 (    t          | ||           d S r   )setattr)rq   r   values      r>   __setitem__zStateSchema.__setitem__h  s    c5!!!!!r=   Nc                 $    t          | ||          S r   r   )rq   r   r   s      r>   r   zStateSchema.getk  s    tS'***r=   Tr   )r0   r1   r2   r[   classmethodr^   r   r   r   rE   r   r   r   r   r   r   r   r   r   r   r<   r=   r>   r   r     sq       ! !F T d    [ 	 	$ 	$s) 	 	 	 [	 2C 2 2 2 [2 3s8    [ 3SX 3 3 3 [3 2s3x 2 2 2 [2  " " "" " "+ + + + + +r=   r   datastate_dataclassrv   c                     i }|r|                                 n|                                }|D ]}|| v r| |         ||<   d||<   |S )zFilter the given data's columns based on the given schema.

    Args:
        data: A single data entry to filter columns.
        state_dataclass: The schema to filter data.
        detail: Whether or not it should include columns for detail output.
    N)r   r   )r   r   rd   filtered_datar   cols         r>   filter_fieldsr   o  sl     M+1Uo%%'''7S7S7U7UG & &$;;!%cM#!%M#r=   c                   6   e Zd ZU eed<   dZee         ed<   dZee         ed<   dZ	eed<   dZ
ee         ed<   eZeed<   dZee         ed	<   dZee         ed
<   dZeed<   dZee         ed<   dZeed<   dZee         ed<   dZeed<   dZee         ed<   d ZdS )GetLogOptionsrc   Nnode_idnode_ipfile
media_typefilenamedownload_filenameactor_idtask_idr   attempt_numberpidr"   linesintervaloutsuffixsubmission_idc                 v   | j         rt          | j                   | _         | j        rt          | j                  | _        t          | j                  | _        | j        dk    r	| j        J | j        dvrt          d| j                   | j        s$| j        s| j	        s| j
        st          d          | j        r&| j        rt          d| j         d| j                   | j	        s+| j
        s$| j         s| j        s| j        st          d          | j        dvrt          d	| j         d
          d S )Nr   )r   streamzInvalid media type: zonode_id or node_ip must be provided as constructor arguments when no actor or task_id is supplied as arguments.zUBoth node_id and node_ip are given. Only one of them can be provided. Given node id: z, given node ip: zvNone of actor_id, task_id, pid, submission_id or filename is provided. At least one of them is required to fetch logs.)r   errzInvalid suffix: z . Must be one of 'out' or 'err'.)r   r]   r   r\   r   r   rp   r   r   r   r   r   r   r   r   s    r>   ru   zGetLogOptions.__post_init__  s   8 	%48}}DH= 	1!$-00DM__
?f$$=(((?"444EDOEEFFF 	 	t} 	 	=   < 	DL 	P"&,P PAEP P  
 M
	|
	 x
	 }	
	
 !
	 O  
 ;n,,P4;PPP   -,r=   )r0   r1   r2   r]   r   r   r   rE   r   r   r   DEFAULT_DOWNLOAD_FILENAMEr   r   r   r   r   r   r   r\   r   r   ru   r<   r=   r>   r   r     s+        LLL!GXc]!!!!GXc]!!! J #Hhsm""" 7s666"Hhsm"""!GXc]!!!NCC#E3 !%Hhuo$$$ FC $(M8C='''$ $ $ $ $r=   r   c                   @   e Zd ZU dZ ed          Zeed<    ed          Zeed<    ed          Z	e
ed<    ed          Zeed<    ed          Zee         ed<    ed          Zee         ed	<    ed          Zee         ed
<    ed          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    edd          Zeed<    edd          Zeed<    edd          Zeed<    edd          Zee         ed<    edd          Zee         ed<   dS )
ActorStatezActor StateTr   r   
class_namer   job_idr   r   r   ray_namespaceFr   rd   serialized_runtime_envrequired_resourcesdeath_causeis_detachedrd   r   placement_group_id	repr_namenum_restarts*num_restarts_due_to_lineage_reconstruction#num_restarts_due_to_node_preemption	call_sitelabel_selectorN)r0   r1   r2   r[   r   r   rE   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     s         !LD111Hc111"ld333J333  *\T:::E?:::,$///FC///&,$777D(3-777
 *\T:::GXc]:::%666C#666#/<4#@#@#@M8C=@@@,8LERV,W,W,WHSMWWW)5t)T)T)TTTT".,%"M"M"MK$MMM".,%"M"M"MK$MMM(4DT(R(R(RRRR+|4DIIIIx}III$dCCCL#CCC6Bl7 7 7.    0<|0 0 0'     ,|4EJJJIx}JJJ%1\%%P%P%PNHTNPPPPPr=   r   c                   8   e Zd ZU dZ ed          Zeed<    ed          Zeed<    ed          Z	eed<    ed          Z
eed<    edd	          Zeee                  ed
<    edd	          Zee         ed<    edd	          Zee         ed<   dS )PlacementGroupStatezPlacementGroup StateTr   r   r   creator_job_idr   Fr   bundlesr   statsN)r0   r1   r2   r[   r   r   rE   r   r   r   r   r   r   r   r   r^   r   r   r   r<   r=   r>   r   r     s          +ld;;;;;;---D#---&,$777NC777 '3ld&C&C&CE#CCC$0LE$$O$O$OGXd4j!OOO".,$t"L"L"LK$LLL(LE$GGGE8D>GGGGGr=   r   c                      e Zd ZU dZ ed          Zeed<    ed          Zeed<    ed          Z	e
ed<    ed          Zeed<    ed          Zee         ed	<    ed          Zeed
<    edej                  Zeed<    ed          Zeed<    eddej                  Zee         ed<    eddej                  Zee         ed<   dS )	NodeStatez
Node StateTr   r   r   is_head_noder   Fstate_message	node_namer   r   resources_totallabelsr   rd   r   start_time_msend_time_msN)r0   r1   r2   r[   r   r   rE   r   r   r   r   r   r   r   r   r   rB   rZ   r   r^   r   rI   r   r]   r  r<   r=   r>   r   r   *  s          <4000GS000<4000GS000%666L$666
 )LD999E>999 $0<5#A#A#AM8C=AAA!\T222Is222(LH$;  OT     <5111FD111#/<1C$ $ $M8C=    ".1C" " "K#     r=   r   c                       e Zd ZdZd Zedee         fd            Zede	de	fd            Z
eddedee         fd	            Zd
 Zedeeef         fd            ZdS )JobStatezFThe state of the job that's submitted by Ray's Job APIs or driver jobsc                 *    t          j        | fi | d S r   )r   __init__)rq   r   s     r>   r  zJobState.__init__V  s!    D++F+++++r=   rv   c                 
    h dS )N>   typer   statusr   r<   r   s    r>   r   zJobState.filterable_columnsY  s     =<<<r=   r   c                     |S r   r<   )r   r   s     r>   r   zJobState.humanify_  s    r=   Trd   c                     |sg dS t           g S t          t           d          r+t          t           j                                                  n*t          t           j                                                  S )N)r   r   
entrypointr  r  message
error_typedriver_infomodel_fields)r   hasattrr   r  keys
__fields__)r   rd   s     r>   r   zJobState.list_columnsc  s|     
		 	 	 	  I z>224D(--//000j+002233	
r=   c                 *    t          j        |           S r   )r   r^   r   s    r>   r   zJobState.asdict~  s    t$$$r=   c                 r    |                                  d         }d |                                D             S )N
propertiesc                 P    i | ]#\  }}|                     d           ||d          $S r  )r   ).0kvs      r>   
<dictcomp>z(JobState.schema_dict.<locals>.<dictcomp>  s8     
 
 
!QQUU6]]=VAqy=V=V=Vr=   )schemaitems)r   schema_typess     r>   schema_dictzJobState.schema_dict  sA    zz||L1
 
%1%7%7%9%9
 
 
 	
r=   Nr   )r0   r1   r2   r[   r  r   r   rE   r   r^   r   r   r   r   r   r
   r	   r  r<   r=   r>   r  r  S  s        PP, , , =3s8 = = = [=
 T d    [ 
 
$ 
$s) 
 
 
 [
4% % % 
DcN 
 
 
 [
 
 
r=   r  c                   ~   e Zd ZU dZ ed          Zeed<    ed          Ze	ed<    ed          Z
eed<    ed          Zee         ed<    ed          Zeed<    ed          Zeed	<    ed          Zeed
<    edd          Zee         ed<    eddd           Zee         ed<    eddd           Zee         ed<    eddej                  Zee         ed<    eddej                  Zee         ed<    edd          Zee         ed<    edd          Zee         ed<   dS )WorkerStatezWorker StateTr   	worker_idis_aliveworker_type	exit_typer   ipr   Fr   exit_detailc                 F    | dk    rdnt                               |           S N rU   rH   s    r>   <lambda>zWorkerState.<lambda>       !r''BBx/A/A!/D/D r=   r   worker_launch_time_msc                 F    | dk    rdnt                               |           S r)  rU   rH   s    r>   r,  zWorkerState.<lambda>  r-  r=   worker_launched_time_msr   r  r   debugger_portnum_paused_threadsN)r0   r1   r2   r[   r   r"  rE   r   r#  r   r$  r   r%  r   r   r   r&  r   r]   r'  r.  r0  rB   rI   r   r  r1  r2  r<   r=   r>   r!  r!    s=         "\T222Is222!\T222Hd222 #/,$"?"?"?K??? /;ld.K.K.KIx*+KKK<4000GS000ld+++B+++|t,,,C,,,!-Te!L!L!LK#LLL ,8<DD, , ,8C=    .:\DD. . .Xc]    $0<1C$ $ $M8C=    ".1C" " "K#    $0<4#M#M#MM8C=MMM(4T(R(R(RRRRRRr=   r!  c                       e Zd ZU  ed          Zeed<    ed          Zeed<    ed          Zeed<    ed          Z	eed<    ed          Z
eed<    edd	          Zee         ed
<   dS )ClusterEventStateTr   severityFtimesource_typer  event_idr   custom_fieldsN)r0   r1   r2   r   r5  rE   r   r6  r7  r  r8  r9  r   r^   r<   r=   r>   r4  r4    s          LD111Hc111...D#...#|t444K444<5111GS111 LD111Hc111$0LE$$O$O$OM8D>OOOOOr=   r4  c                      e Zd ZU dZ ed          Zeed<    ed          Ze	ed<    ed          Z
eed<    ed          Zeed<    ed          Zeed<    ed          Zee         ed	<    ed          Zeed
<    ed          Zeed<    ed          Zeed<    ed          Zee         ed<    ed          Zee         ed<    ed          Zee	         ed<    ed          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    edd          Zee         ed<    eddej                  Zeee                  ed<    edd          Z ee         ed<    eddej!                  Z"ee	         ed<    eddej!                  Z#ee	         ed<    eddej!                  Z$ee	         ed<    edd          Z%ee         ed<    edd          Z&ee         ed<    edd          Z'ee(         ed<    edd          Z)ee         ed <    edd          Z*ee         ed!<   d"S )#	TaskStatez
Task StateTr   r   r   r   r   r   r   r  func_or_class_nameparent_task_idr   r"  
worker_pidr  r   languageFr   runtime_env_infor   r   rR   profiling_datacreation_time_msr   r  task_log_infoerror_messageis_debugger_pausedr   r   N)+r0   r1   r2   r[   r   r   rE   r   r   r]   r   r   r   r   r   r   r  r   r<  r=  r   r"  r>  r  r?  r   r^   r@  r   rB   rR   r   rA  rI   rB  r   r  rC  rD  rE  r   r   r   r<   r=   r>   r;  r;    s          <4000GS000&,$777NC777---D#--- )LD999E>999,$///FC/// +ld;;;Hhsm;;; &666D,666 +ld;;;;;; ',$777NC777 *\T:::GXc]:::+|t<<<Ix}<<< , = = =J=== , = = =J===*l$4HHHHhsmHHH)5Te)T)T)TTTT'3|4E'R'R'RhtnRRR(4DT(R(R(RRRR $0<$ $ $FHT$Z     &2\%%P%P%PNHTNPPP&2l$' ' 'hsm    $0<$$ $ $M8C=    ".1C" " "K#    %1L$O$O$OM8D>OOO#/<t#N#N#NM8C=NNN)5Td)S)S)SSSS+|4EJJJIx}JJJ%1\%%P%P%PNHTNPPPPPr=   r;  c                   R   e Zd ZU dZ ed          Zeed<    edej	                  Z
eed<    ed          Zeed<    ed          Zeed<    ed          Zeed	<    ed          Zeed
<    ed          Zeed<    ed          Zeed<    ed          Zeed<   dS )ObjectStatezObject StateTr   	object_idr   object_sizetask_statusr   reference_typer   r  r   r&  N)r0   r1   r2   r[   r   rH  rE   r   rB   rM   rI  r]   rJ  r   r   rK  r   r   r  r   r   r&  r<   r=   r>   rG  rG  6  s*         "\T222Is222#|txOOOKOOO" #/,$"?"?"?K???&,$777NC777 )5(E(E(EN%EEE!\T222Is222 (<4888D.888|t,,,C,,,ld+++B+++++r=   rG  c                      e Zd ZU dZ ed          Zeed<    ed          Ze	ed<    ede
j                  Zee         ed<    ed          Zeed	<    edd
          Zee         ed<    edd
          Zee         ed<   dS )RuntimeEnvStatezRuntime Environment StateTr   runtime_envsuccessFr   rB  r   r   ref_cntr   N)r0   r1   r2   r[   r   rN  r^   r   rO  r   rB   rI   rB  r   r\   r   rE   rP  r]   r   r<   r=   r>   rM  rM  p  s         ## %555K555 LD111GT111 )5H$6) ) )huo     <4000GS000)\%HHHGXc]HHH (<tEEEE8C=EEEEEr=   rM  z

    z=

Below columns can be used for the `--filter` option.


    z


z

Below columns are available only when `get` API is used,

`--detail` is specified through CLI, or `detail=True` is given to Python APIs.




    c                       e Zd ZU eed<   eed<   eed<   ee         ed<   dZee	         ed<   dZ
eee	                  ed<   dS )	ListApiResponsetotalnum_after_truncationnum_filteredresultr+  partial_failure_warningNrx   )r0   r1   r2   r]   r   r   r
   rW  r   rE   rx   r<   r=   r>   rR  rR    su         * JJJJ .0Xc]///$(HhtCy!(((((r=   rR  (ffffffffffffffffffffffffffffffffffffffffc                   V    e Zd ZU eed<   eed<    ee          Zee	e
f         ed<   dS )TaskSummaryPerFuncOrClassNamer<  r  re   state_countsN)r0   r1   r2   rE   r   r   r^   r[  r
   r   r]   r<   r=   r>   rZ  rZ    sR          
III /4eD.I.I.IL$~s*+IIIIIr=   rZ  c                   $    e Zd ZU eed<   eed<   dS )Linkr  idN)r0   r1   r2   rE   r   r<   r=   r>   r]  r]    s$          IIIGGGGGr=   r]  c                       e Zd ZU eed<   eed<   eed<   dZee         ed<    ee	          Z
eeef         ed<    ee          Zed          ed<   dZee         ed	<   dS )
NestedTaskSummaryr   r   r  NrI   re   r[  childrenlink)r0   r1   r2   rE   r   rI   r   r]   r   r^   r[  r
   r   r   ra  r   rb  r]  r<   r=   r>   r`  r`    s          III	HHH III#Ix}### /4eD.I.I.IL$~s*+III*/%*E*E*EHd&'EEED(4.r=   r`  c                       e Zd ZU eeeef         ee         f         e	d<   e
e	d<   e
e	d<   e
e	d<   dZee	d<   edee         dd fd	            Zedee         d
ee         dd fd            ZdS )TaskSummariessummarytotal_taskstotal_actor_taskstotal_actor_scheduled	func_namer   r,   rv   c                   i }d}d}d}|D ]}|d         }||vr t          |d         |d                   ||<   ||         }|d         }	|	|j        vr
d|j        |	<   |j        |	xx         dz  cc<   t          j        j        |d                  j        }
|
t          j        k    r|dz  }|
t          j        k    r|dz  }|
t          j        k    r|dz  }t          ||||d          S )	Nr   r<  r  )r<  r  r   rl   ri  re  rf  rg  rh  r   )
rZ  r[  r   
DESCRIPTORvalues_by_namenumberNORMAL_TASKACTOR_CREATION_TASK
ACTOR_TASKrd  )r   r,   re  rf  rg  rh  taskr   task_summaryr   	type_enums              r>   to_summary_by_func_namez%TaskSummaries.to_summary_by_func_name  sB     ! 	' 	'D+,C'!!<'+,@'Af      #3<LMEL55534)%0%e,,,1,,, +:4<HOIH000q h:::%*%%h111!Q&!#/"7"
 
 
 	
r=   r'   c                   i i i g d}d}d}|D ]Pd         <   t           j        j        d                  j        }|t           j        k    rd         d         <   Qd |D             dt
          dt          t                   ffddt
          dt          t                   ffd|D ]d         } |          }|sd	         }	|	|j        vr
d|j        |	<   |j        |	xx         d
z  cc<   t           j        j        d                  j        }|t           j	        k    r|d
z  }|t           j        k    r|d
z  }|t           j
        k    r|d
z  }dt          t                   dt          t          t                   t          t                   f         ffd           \  }
dt          dt          fddt          dt          fddt          t                   ddffddt          dt          ffdfdD                         t          |||d          S )a  
        This summarizes tasks by lineage.
        i.e. A task will be grouped with another task if they have the
        same parent.

        This does things in 4 steps.
        Step 1: Iterate through all tasks and keep track of them by id and ownership
        Step 2: Put the tasks in a tree structure based on ownership
        Step 3: Merge together siblings in the tree if there are more
        than one with the same name.
        Step 4: Sort by running and then errored and then successful tasks
        Step 5: Total the children

        This can probably be more efficient if we merge together some steps to
        reduce the amount of iterations but this algorithm produces very easy to
        understand code. We can optimize in the future.
        r   r   r  r   c                      i | ]}|d          |S )r   r<   )r  actors     r>   r  z7TaskSummaries.to_summary_by_lineage.<locals>.<dictcomp>^  s    CCC5eJ'CCCr=   rv   c           
         | 	v r	|          S 
                     |           }|st                              d|             dS |d         p|d         }|d         } t          j        j        |d                  j        }t          || |d         |d         t          d| 	          
          	| <   |t          j	        k    s|t          j
        k    r4 |d                   }|r |j                            	|                     nm|d         }|r|                    t                    r                    	|                     n- |          }|r |j                            	|                     	|          S )a  
            Gets an already created task_group
            OR
            Creates a task group and puts it in the right place under its parent.
            For actor tasks, the parent is the Actor that owns it. For all other
            tasks, the owner is the driver or task that created it.

            Returns None if there is missing data about the task or one of its parents.

            For task groups that represents actors, the id is in the
            format actor:{actor_id}
            zWe're missing data about Nr   r<  r   r  rB  rr  r  r^  r   r   r  rI   rb  r   r=  )r   r   debugr   rl  rm  rn  r`  r]  rq  rp  ra  r   
startswithDRIVER_TASK_ID_PREFIX)r   rr  ri  rt  parent_task_groupr=  get_or_create_actor_task_groupget_or_create_task_groupre  task_group_by_idtasks_by_ids         r>   r  zETaskSummaries.to_summary_by_lineage.<locals>.get_or_create_task_group`  s    ***'00??7++D BBBCCC t VB-A(BI9oG +:4<HOI(9&\12v'222) ) )W% X000 <<< %C$B4
CS$T$T!$ Q%.556Fw6OPPP!%&6!7% U)B)B)* * U NN#3G#<====(@(@(P(P%( U)299:J7:STTT#G,,r=   c           
         d|  }
                     |           }|vr<	                     |           }                     |          }|st                              d|             dS |>t                              d|  d|            |d                             d          ^}}n|d         r|d         n|d	         }t	          ||d
d         t          d|                     |<   |d         }|r|                    t                    r                    |                    n- |          }|r |j	                            |                    |         S )aR  
            Gets an existing task group that represents an actor.
            OR
            Creates a task group that represents an actor. The owner of the actor is
            the parent of the creation_task that created that actor.

            Returns None if there is missing data about the actor or one of its parents.
            zactor:zWe're missing data about actor Nz$We are missing actor info for actor z$, even though creation task exists: r<  .r   r   ACTORrB  rx  rz  r{  r=  )
r   r   r|  splitr`  r]  r}  r~  r   ra  )r   r   rx  creation_task_idcreation_task
actor_namerestr=  r  #actor_creation_task_id_for_actor_id
actor_dictr  re  rr  r  r  s            r>   r  zKTaskSummaries.to_summary_by_lineage.<locals>.get_or_create_actor_task_group  s    &8%%CNN8,,E***#F#J#J8#T#T  +0@ A A$  LL!M8!M!MNNN  4
 =LLMx M M=JM M   +88L*M*S*STW*X*X'Z$$ !-1k**"<0  ):# "#567x888) ) ) % "//?!@% Q)B)B)* * Q NN#3C#89999(@(@(P(P%( Q)299:J3:OPPP#C((r=   r   rl   siblingsc                 V   t          |           s| dfS i }d}| D ]} |j                  \  |_        }|r||j        pt          j        k     r||_        |j        |vr$t          |j        |j        d          ||j        <   ||j                 j                            |           |j        r\|j        ||j                 j        pt          j        k     r5|j        ||j                 _        |j        |pt          j        k     r|j        }d |                                D             |fS )a  
            Merges task summaries with the same name into a group if there are more than
            one child with that name.

            Args:
                siblings: A list of NestedTaskSummary's to merge together

            Returns
                Index 0: A list of NestedTaskSummary's which have been merged
                Index 1: The smallest timestamp amongst the siblings
            NGROUP)r   r   r  c                 \    g | ])}t          |j                  d k    r|n|j        d         *S )rl   r   )lenra  )r  groups     r>   
<listcomp>z]TaskSummaries.to_summary_by_lineage.<locals>.merge_sibings_for_task_group.<locals>.<listcomp>  sG        U^,,q00enQ6G  r=   )	r  ra  rI   sysmaxsizer   r`  r   values)r  groupsmin_timestampchildchild_min_timestampmerge_sibings_for_task_groups        r>   r  zITaskSummaries.to_summary_by_lineage.<locals>.merge_sibings_for_task_group  sf    x== &~% F M! 8 86R6RN7 73 3 ' :+>O2s{, , ':EO:V++):"Z!J$* * *F5:&
 uz"+225999? 8u5:&0?CK( ( 49?F5:&0-*F3;GG(-
 #]]__    r=   
task_groupc                     | j                             dd          | j                             dd          z   | j                             dd          z   S )NRUNNINGr   RUNNING_IN_RAY_GETRUNNING_IN_RAY_WAITr[  r   r  s    r>   get_running_tasks_countzDTaskSummaries.to_summary_by_lineage.<locals>.get_running_tasks_count$  sW    '++Iq99)--.BAFFG)--.CQGGHr=   c                     | j                             dd          | j                             dd          z   | j                             dd          z   | j                             dd          z   S )NPENDING_ARGS_AVAILr   PENDING_NODE_ASSIGNMENTPENDING_OBJ_STORE_MEM_AVAILPENDING_ARGS_FETCHr  r  s    r>   get_pending_tasks_countzDTaskSummaries.to_summary_by_lineage.<locals>.get_pending_tasks_count+  sw    '++,@!DD)--.GKKL)--.KQOOP )--.BAFFGr=   task_groupsNc                     |                      d            |                      d            |                      d d           |                      d           |                      d           d S )Nc                      | j         dk    rdndS )Nrp  r   rl   r  rH   s    r>   r,  zOTaskSummaries.to_summary_by_lineage.<locals>.sort_task_groups.<locals>.<lambda>7  s    :O0O0O11UV r=   )r   c                 (    | j         pt          j        S r   )rI   r  r  rH   s    r>   r,  zOTaskSummaries.to_summary_by_lineage.<locals>.sort_task_groups.<locals>.<lambda>8  s    1;+E#+ r=   c                 8    | j                             dd          S )NFAIELDr   r  rH   s    r>   r,  zOTaskSummaries.to_summary_by_lineage.<locals>.sort_task_groups.<locals>.<lambda>:  s    an001== r=   T)r   reverse)sort)r  r  r  s    r>   sort_task_groupsz=TaskSummaries.to_summary_by_lineage.<locals>.sort_task_groups3  s     !V!VWWW!E!EFFF==t     !8$GGG!8$GGGGGr=   c                    t          | j                  s| S | j        D ]R} |          }|j                                        D ]+\  }}| j                            |d          |z   | j        |<   ,S | j                   | S )z}
            Calculates the total of a group as the sum of all children.
            Sorts children by timestamp
            r   )r  ra  r[  r  r   )r  r  totaledr   countcalc_total_for_task_groupr  s        r>   r  zFTaskSummaries.to_summary_by_lineage.<locals>.calc_total_for_task_group?  s     z*++ "!!#,  33E::$+$8$>$>$@$@  LE5"/33E1==E +E22
 Z0111r=   c                 &    g | ]} |          S r<   r<   )r  r  r  s     r>   r  z7TaskSummaries.to_summary_by_lineage.<locals>.<listcomp>V  s%    SSSZ,,Z88SSSr=   lineagerk  )r   rl  rm  rn  rp  rE   r   r`  r[  ro  rq  r   r   r]   rd  )r   r,   r'   rf  rg  rh  rt  r   r  r   rs   r  r  r  r  r  r  r  r  r  re  rr  r  r  s              @@@@@@@@@@@@@r>   to_summary_by_lineagez#TaskSummaries.to_summary_by_lineage2  s   0 .0+ !  	X 	XD+/KY( +:4<HOIH888HLY3D4DECCFCCC
9	-c 9	-h?P6Q 9	- 9	- 9	- 9	- 9	- 9	- 9	- 9	- 9	- 9	-v9	)9	)'(9	) 9	) 9	) 9	) 9	) 9	) 9	) 9	) 9	) 9	) 9	) 9	)x  	' 	'D9oG11'::J MEJ33312
'.#E***a/*** +:4<HOIH000q h:::%*%%h111!Q&!2	,-2	4)*HSM9:2	 2	 2	 2	 2	 2	j 21'::
	0A 	c 	 	 	 		0A 	c 	 	 	 	
	H$/@*A 
	Hd 
	H 
	H 
	H 
	H 
	H 
	H 
	H	)		 	 	 	 	 	 	. TSSS7SSS!!!#/"7 
 
 
 	
r=   N)r0   r1   r2   r   r
   rE   rZ  r   r`  r   r]   r   r   ru  r  r<   r=   r>   rd  rd    s         
 4::;TBS=TTUUUU!J!!!$
tDz $
o $
 $
 $
 [$
L l
Dzl
+/:l
	l
 l
 l
 [l
 l
 l
r=   rd  c                   L    e Zd ZU eed<    ee          Zee	e
f         ed<   dS )ActorSummaryPerClassr   re   r[  N)r0   r1   r2   rE   r   r   r^   r[  r
   r   r]   r<   r=   r>   r  r  b  sF          OOO 05uT/J/J/JL$+,JJJJJr=   r  c                   j    e Zd ZU eeef         ed<   eed<   dZeed<   e	de
e         fd            ZdS )ActorSummariesre  total_actorsclassr   r'   c                    i }d}|D ]d}|d         }||vrt          |d                   ||<   ||         }|d         }||j        vr
d|j        |<   |j        |xx         dz  cc<   |dz  }et          ||          S )Nr   r   )r   r   rl   )re  r  )r  r[  r  )r   r'   re  r  rx  r   actor_summaryr   s           r>   
to_summaryzActorSummaries.to_summarys  s      	 	E%C'!!3$\2      $CLM'NEM66645*51&u---2---ALL%
 
 
 	
r=   N)r0   r1   r2   r
   rE   r  r   r]   r   r   r   r  r<   r=   r>   r  r  k  st          #++,,,,J
4: 
 
 
 [
 
 
r=   r  c                       e Zd ZU eed<   eed<   eed<   eed<    ee          Ze	e
ef         ed<    ee          Ze	eef         ed<    ee          Ze	eef         ed<   d	S )
ObjectSummaryPerKeytotal_objectstotal_size_mbtotal_num_workerstotal_num_nodesre   task_state_countstask_attempt_number_countsref_type_countsN)r0   r1   r2   r]   r   r\   r   r^   r  r
   r   r  rE   r  r   r<   r=   r>   r  r    s           4953N3N3NtNC/0NNN 27t1L1L1LS#XLLL 5:E$4O4O4OOT+S01OOOOOr=   r  c                   ~    e Zd ZU eeef         ed<   eed<   eed<   e	ed<   dZ
eed<   edee         fd            Zd	S )
ObjectSummariesre  r  r  callsite_enabledcallsiter   r-   c                    i }d}d}i }i }d}|D ]t}|d         }	|	dk    rd}|	|vr8t          dddd          ||	<   t                      ||	<   t                      ||	<   ||	         }
|d         }||
j        vr
d|
j        |<   |
j        |xx         dz  cc<   t          |d	                   }||
j        vr
d|
j        |<   |
j        |xx         dz  cc<   |d
         }||
j        vr
d|
j        |<   |
j        |xx         dz  cc<   |
xj        dz  c_        |dz  }|d         }|dk    r|
xj        |dz  z  c_        ||dz  z  }||	                             |d                    ||	                             |d                    v|	                                D ]\  }	}t          |          ||	         _         |	                                D ]\  }	}t          |          ||	         _         t          ||||          S )Nr   Tr   disabledF)r  r  r  r  rJ  rl   r   rK  rI  r*  rK   r   r&  )re  r  r  r  )r  r   r  rE   r  r  r  r  r   r  r  r  r  r  )r   r-   re  r  r  key_to_workerskey_to_nodesr  objectr   object_summary
task_stater   ref_type
size_bytesr+   r*   s                    r>   r  zObjectSummaries.to_summary  s     )	0 )	0F%Cj  #( '!!2"#"#&'$%	      '*ees#$'EES!$S\N.J!AAA?@0<,Z888A=888 (8!9::N^%NNNLM9.I5nEEEJEEE./H~===;<.x8*84449444((A-((QM.J R,,
W0DD,,g!553##F5M222!!&,//// +0022 	: 	:LC-0\\GCL**&,,.. 	6 	6JC+.u::GCL((''-	
 
 
 	
r=   N)r0   r1   r2   r
   rE   r  r   r]   r\   r   r   r   r   r  r<   r=   r>   r  r    s          #**++++ J   @
DJ @
 @
 @
 [@
 @
 @
r=   r  c                   <    e Zd ZU eeeeeef         f         e	d<   dS )StateSummarynode_id_to_summaryN)
r0   r1   r2   r
   rE   r   rd  r  r  r   r<   r=   r>   r  r    s6         
 S%~(V"WWXXXXXXr=   r  c                   |    e Zd ZU eed<   eed<   eed<   dZeed<   dZee	         ed<   dZ
eee	                  ed<   dS )	SummaryApiResponserS  rT  rU  NrV  r+  rW  rx   )r0   r1   r2   r]   r   rV  r  rW  r   rE   rx   r   r<   r=   r>   r  r    su          JJJ FL-/Xc]///$(HhtCy!(((((r=   r  rY   c                    | t           j        k    rt          S | t           j        k    rt          S | t           j        k    rt          S | t           j        k    rt          S | t           j	        k    rt          S | t           j        k    rt          S | t           j        k    rt          S | t           j        k    rt           S | t           j        k    rt$          S J d            )NFUnreachable)r&   r3   r   r4   r  r6   r   r9   rG  r5   r   r:   rM  r8   r;  r7   r!  r;   r4  )rY   s    r>   resource_to_schemar    s    ='''	]'	'	'	](	(	(	]*	*	*	]3	3	3""	]/	/	/	](	(	(	]*	*	*	]1	1	1  #m##ur=   Tfields_to_decodepreserving_proto_field_namec                 2    t          j        | |d|          S )aG  Convert a protobuf message to dict

    Args:
        fields_to_decode: field names which will be decoded from binary to hex.
        preserving_proto_field_name: a pass-through option for protobuf message
            method. See google.protobuf MessageToDict

    Return:
        Dictionary of the converted rpc protobuf.
    T)$always_print_fields_with_no_presencer  )dashboard_utilsmessage_to_dict)r  r  r  s      r>   protobuf_message_to_dictr  #  s*     *-1$?	   r=   r  c                 \   t          | g d          }i }|                    di           }|                    di           }|                    di           }|r^|d         D ]U}t          |d                   dz  |d<   t          |d	                   dz  |d	<   t          j        |d
                   |d
<   V||d<   |g df|g df|g dfg}|D ]"\  }}	|	D ]}
|                    |
          ||
<   #d|d<   d|d<   d|d<   g }d|v r|d         }t          j                    D ]\  }}t          |          }
|
|v rt          ||
                   dz  }|                    ||d           |t
          j	        k    r||d<   |t
          j
        k    r||d<   |t
          j        k    s|t
          j        k    r||d<   ||d<   t          |          dk    r|d         d         }nd}||d<   |dk    rW|                    dd          }|r?t          |                    dd                    |d<   |                    dd          |d<   |                    d          rQ|d         d k    rE|d!         |d"         k    r3|d!                             d#          d         }|d          d#| }||d!<   |S )$z;
    Convert a TaskEvents to a dic repr of `TaskState`
    )r   r   r   r   r=  r"  r   component_id)r  r  	task_infostate_updatesprofile_eventsrR   end_timeg    .A
start_time
extra_datarA  )r   r   r   r  r<  r?  r   r@  r=  r   r   r   )r   r   r   )r   r"  rC  actor_repr_namer>  rE  NrB  r   r  state_ts_ns)r   rT   r   r*  r   NILFAILED
error_inforD  r+  r  r  r  rq  r   r<  r  )r  r   r]   jsonloadsr   r  rE   r   r  r  FINISHEDr  r  remove_ansi_escape_codesr  )r  task_attemptr  r  r  rA  rV   mappingssrcr  r   rR   r  
state_namer   ts_mslatest_stater  method_nameactor_repr_task_names                       r>   protobuf_to_task_state_dictr  :  s    ,	
 	
 	
  L J  b11I $$_b99M!%%&6;;N B#H- 	B 	BE #E*$5 6 6 <E*"%eL&9":":S"@E,"&*U<-@"A"AE,#1J 
   	
" 
>>>?  
	
'H>  + +	T 	+ 	+C!ggcllJsOO	+ &*J!""&J $J}F%%#M2!+!1!3!3 	6 	6Je**Ck!! K,--4!+&+    J9995:J12J...27J/J///5J<M3M3M05J}-!Jx
6{{Qbz'*&Jw x"&&|T::
 	H +C33+ +J' (2~~lB'G'GJ|$ 	+,,
2v,..v*+, ,
 !(..s33B7"/0A"BRR[RR1
6r=   textc                 8    ddl }|                    dd|           S )z'Remove ANSI escape codes from a string.r   Nz
\x1b[^m]*mr+  )resub)r  r  s     r>   r  r    s!    III66-T***r=   dstate_resourcec                 ~    	  t          |          di | S # t          $ r}t          d|  d|           |d}~ww xY w)zConvert a dict to a state schema.

    Args:
        d: a dict to convert.
        state_resource: the state resource to convert to.

    Returns:
        A state schema.
    zFailed to convert z to StateSchema: Nr<   )r  r   r   )r  r  r   s      r>   dict_to_stater
    sl    X1!.1166A666 X X X"#O#O#OA#O#OPPVWWXs    
<7<r   )qrF   r  loggingr  rx   abcr   dataclassesr   r   r   enumr   r   typingr	   r
   r   r   r   r   r   ray.dashboard.utils	dashboardutilsr  ray._common.pydantic_compatr   ray._private.custom_typesr   r   r   r   r   r   r   r   ray._private.ray_constantsr   ray.core.generated.common_pb2r   r   ray.core.generated.gcs_pb2r   )ray.dashboard.modules.job.pydantic_modelsr   ray.util.state.exceptionr   pydantic.dataclassesr   ImportError	getLoggerr0   r   r   r   DEFAULT_LOG_LIMITr   r#   r$   r&   r@   rE   r   r]   r\   r   r   rB   ra   r   r   r   r   r^   r   r   r   r   r   r  r  r!  r4  r;  rG  rM  AVAILABLE_STATESr   r  r   joinfilterable_colsr[   r   detail_colsrR  r~  rZ  r]  r`  rd  r  r  r  r  r  r  r  r  r  r  r
  r<   r=   r>   <module>r"     s\      



        - - - - - - - - - -         ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - - - - - - - - 6 5 5 5 5 5	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 3 2 2 2 2 2 > > > > > > > > 1 1 1 1 1 1 @ @ @ @ @ @ 9 9 9 9 9 9&.......  & & & &%%%%%%%& 
	8	$	$  &  !,#Y! !  "-$i" " 
 	& 	& 	& 	& 	&D 	& 	& 	&     d    CsE12  " " " " " " " "J M!"""A A A A A A A #"AH M!"""G G G G G G G #"G" M!"""% % % % % % % #"%( 6;d    d    2h+ h+ h+ h+ h+# h+ h+ h+V { D T    $ M!"""E E E E E E E #"ET M!"""=Q =Q =Q =Q =Q =Q =Q #"=Q@ M!"""H H H H H+ H H #"H8 M!"""" " " " " " " #""P4
 4
 4
 4
 4
{**@JJf 4
 4
 4
n M!"""BS BS BS BS BS+ BS BS #"BSJ M!"""P P P P P P P #"P M!"""XQ XQ XQ XQ XQ XQ XQ #"XQv M!"""6, 6, 6, 6, 6,+ 6, 6, #"6,r M!"""F F F F Fk F F #"F, 	    E
s5##%%&&**$//%*B*B*D*DEE     	 s5!!""Q&& ooe&:&:&<&<== 
    	 M!"""#) #) #) #) #) #) #) #"#)L C  M!"""J J J J J J J #"J         M!"""              #" & a
 a
 a
 a
 a
 a
 a
 a
H M!"""K K K K K K K #"K  
  
  
  
  
  
  
  
F M!"""P P P P P P P #"P( L
 L
 L
 L
 L
 L
 L
 L
^ M!"""Y Y Y Y Y Y Y #"Y M!""") ) ) ) ) ) ) #")$ $; $ $ $ $4 )- 3i "& 
	   .} } } } } }@+3 +3 + + + +XT X= X[ X X X X X Xs   B
 
BB