
    [iR                    L   U d dl mZ d dlmZ d dlmZmZmZ d dlZ	d dl
mZ d dlmZ d dlmZmZmZ eryd dl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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* d dl+m,Z,m-Z- e"Z.de/d<   dedZ0dfdZ1dgdZ2dhdZ3didZ4djdZ5ddd	 	 	 	 	 	 	 	 	 dkdZ6nd dl
m6Z6 d dl7m5Z5m1Z1m4Z4m3Z3m2Z2m0Z0 ejp                  js                         Z:	 dddddd d!d"d#d$d%
Z;d&e/d'<   e	jx                  Z=	 dld(Z>dmd)Z?	 dn	 	 	 	 	 dod*Z@dpd+ZA	 dn	 	 	 	 	 	 	 dqd,ZBdrd-ZCdsd.ZD ed/0      dsd1       ZEej                  j                  ZGi eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                   e	j                          e	j                               eGj                   e	j                         eGj                   e	j                  d2      eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         Zhd3e/d4<   eGj                  fZjdtd5Zk	 	 	 	 	 	 dud6Zldvd7Zm	 	 	 	 	 	 dwd8Znd9Zod:Zpd;Zqd<Zrd=Zsd>Ztd?Zueo ep d@eq d@eu dAZvdBZwdCZxdDZydEZzezdFfewdGfexdHfeydIffZ{erdJfesdKfetdLffZ|ddd	 	 	 	 	 	 	 	 	 dxdMZ}dydNZ~dzdOZdzdPZ	 	 	 	 	 	 	 	 d{dQZ	 	 	 	 	 	 d|dRZe:dSk\  rdTdUidTdVidTdWidXZdYe/dZ<   nd[d\id[d\id[d]idXZ	 d}	 	 	 	 	 d~d^Z G d_ d`eda         ZddbZ	 	 	 	 	 	 ddcZ	 	 	 	 	 	 	 	 dddZy)    )annotations)	lru_cache)TYPE_CHECKINGAnycastN)EagerSeriesNamespace)ImplementationVersionisinstance_or_issubclass)IterableIteratorMapping)Literal)	TypeAliasTypeIsArrowSeries)	ArrayAnyArrayOrScalarArrayOrScalarT1ArrayOrScalarT2ChunkedArrayAny
IncompleteNativeIntervalUnitPromoteOptions	ScalarAny)IntervalUnit)DType)	IntoDTypePythonLiteralr   ChunkedArrayStructArrayc                     y N ts    f/var/www/html/userprofiledev.eatanceapp.com/venv/lib/python3.12/site-packages/narwhals/_arrow/utils.pyis_timestampr(   &   s    C    c                     y r#   r$   r%   s    r'   is_durationr+   '   s    Sr)   c                     y r#   r$   r%   s    r'   is_listr-   (   s    Sr)   c                     y r#   r$   r%   s    r'   is_large_listr/   )   s    r)   c                     y r#   r$   r%   s    r'   is_fixed_size_listr1   *   s    cr)   c                     y r#   r$   r%   s    r'   is_dictionaryr3   +   s    3r)   optionsmemory_poolc                   y r#   r$   )stringspatternr5   r6   s       r'   extract_regexr:   ,   s     #&r)   )r:   )r3   r+   r1   r/   r-   r(   yearquartermonthdayhourminutesecondmillisecondmicrosecond
nanosecond)
yqmodhmsmsusnsz)Mapping[IntervalUnit, NativeIntervalUnit]
UNITS_DICTc               "    ddl m}  || d      S )Nr   )maybe_extract_py_scalarT)return_py_scalar)narwhals._arrow.seriesrQ   )valuerQ   s     r'   extract_py_scalarrU   S   s    >"54@@r)   c                t    t        | t        j                  t        j                  t        j                  f      S )z-Return True for any base `pyarrow` container.)
isinstancepaChunkedArrayArrayScalar)objs    r'   is_array_or_scalarr]   Y   s"    cBOORXXryyABBr)   c                   t        | t        j                        r| S t        | t              rt        j                  | |      S t        j                  | g|      S r#   )rW   rX   rY   listchunked_array)arrdtypes     r'   r`   r`   ^   sI     #r'
#tU++SE5))r)   c                V    t        j                  | |j                  j                        S )z|Create a strongly-typed Array instance with all elements null.

    Uses the type of `series`, without upseting `mypy`.
    )rX   nullsnativetype)nseriess     r'   
nulls_likeri   h   s    
 88Av}}))**r)   c               J    t         }t        j                   || |      |      S )zCreate an Array instance whose slots are the given scalar.

    *Optionally*, casting to `dtype` **before** repeating `n` times.
    rf   )litrX   repeat)rT   rg   rb   lit_s       r'   rm   rm   p   s!     D99T%e,a00r)   c               .    t        j                  d|       S )Nr   )rX   rm   )rg   s    r'   zerosrp   {   s    99Q?r)   c                    t        | t        j                        r|j                  j	                         S t        | |      S r#   )rW   rX   ExtensionTypedtypesUnknown&native_non_extension_to_narwhals_dtype)rb   versions     r'   native_to_narwhals_dtyperw      s2    %))*~~%%''1%AAr)      )maxsizec                H
   |j                   }t        j                  j                  |       r|j	                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j!                         S t        j                  j#                  |       r|j%                         S t        j                  j'                  |       r|j)                         S t        j                  j+                  |       r|j-                         S t        j                  j/                  |       r|j1                         S t        j                  j3                  |       sAt        j                  j5                  |       s" t7        t        j                  dd       |       r|j9                         S t        j                  j;                  |       r|j=                         S t?        |       r'|jA                  | jB                  | jD                        S tG        |       r|jI                  | jB                        S t        j                  jK                  |       r|jM                         S t        j                  jO                  |       r~|jQ                  tS        | jT                        D cg c]P  }|jW                  | jY                  |      jZ                  t]        | jY                  |      j^                  |            R c}      S ta        |       stc        |       r%|je                  t]        | jf                  |            S ti        |       r0|jk                  t]        | jf                  |      | jl                        S t        j                  jo                  |       r'|jq                  | jr                  | jt                        S t        j                  jw                  |       st        j                  jy                  |       r|j{                         S t        j                  j}                  |       r|j                         S |j                         S c c}w )Nis_string_viewc                     y)NFr$   )_s    r'   <lambda>z8native_non_extension_to_narwhals_dtype.<locals>.<lambda>   s    r)   )	time_unit	time_zone)r   	precisionscale)Ars   rX   typesis_int64Int64is_int32Int32is_int16Int16is_int8Int8	is_uint64UInt64	is_uint32UInt32	is_uint16UInt16is_uint8UInt8
is_booleanBoolean
is_float64Float64
is_float32Float32	is_stringis_large_stringgetattrString	is_date32Dater(   Datetimeunittzr+   Durationr3   Categorical	is_structStructrange
num_fieldsFieldfieldnamerw   rf   r-   r/   List
value_typer1   rZ   	list_sizeis_decimal128Decimalr   r   	is_time32	is_time64Time	is_binaryBinaryrt   )rb   rv   rs   is       r'   ru   ru      s   ^^F	xx||~	xx||~	xx||~	xx{{}	xx% }}	xx% }}	xx% }}	xx||~	xx5!~~	xx5!~~	xx5!~~ 	5!88##E*?7288-?F}}	xx% {{}EuxxHH544	xxe$!!##	xx% }} u//0
 1A	 KKN'',U[[^-@-@'J 1
 	
 u~u-{{3E4D4DgNOO% ||$U%5%5w?
 	
 
xxe$~~u{{~KK	xx% BHH$6$6u$={{}	xx% }}>>)s   :ATrN   z!Mapping[type[DType], pa.DataType]NW_TO_PA_DTYPESc           
     x   |j                   }| j                         }t        j                  |      x}r|S t	        | |j
                        rE| j                  }| j                  x}rt        j                  ||      S t        j                  |      S t	        | |j                        rt        j                  | j                        S t	        | |j                        r+t        j                  t        | j                  |            S t	        | |j                         rNt        j"                  | j$                  D cg c]%  }|j&                  t        |j(                  |      f' c}      S t	        | |j*                        r:t        | j                  |      }| j,                  }	t        j                  ||	      S t	        | |j.                        r+t        j0                  | j2                  | j4                        S t7        |t8              rd|j:                   d}
t=        |
      d|  }
t?        |
      c c}w )N)rv   )r   )r   r   zConverting to z$ dtype is not supported for PyArrow.zUnknown dtype: ) rs   	base_typer   getr   r   r   r   rX   	timestampr   durationr   list_narwhals_to_native_dtypeinnerr   structfieldsr   rb   rZ   sizer   
decimal128r   r   
issubclassUNSUPPORTED_DTYPES__name__NotImplementedErrorAssertionError)rb   rv   rs   r   pa_typer   r   r   r   r   msgs              r'   r   r      s   ^^F!I!%%i00w0v705*?"*?r||D"%XbllSWFXXv7{{5??++v{{3xx#;EKKQX#YZZv}}5yy #\\)E 5ekk7ST)
 	
  v||4(gFJJ	xx33v~~6}}uekkJJ)/0y1122VW!#&&E7
#C

s   :*H7c                   ddl m} |#| j                  t        d| j                        fS t        ||      rr| j                  r'|j                  s| j                  d   |j                  fS |j                  r| j                  |j                  d   fS | j                  |j                  fS t        |t              rd}t        |      | j                  t        |t        j                        r|fS t        |      fS )aJ  Extract native objects in binary  operation.

    If the comparison isn't supported, return `NotImplemented` so that the
    "right-hand-side" operation (e.g. `__radd__`) can be tried.

    If one of the two sides has a `_broadcast` flag, then extract the scalar
    underneath it so that PyArrow can do its own broadcasting.
    r   r   Nrk   z$Expected Series or scalar, got list.)rS   r   re   rl   _typerW   
_broadcastr_   	TypeErrorrX   r[   )lhsrhsr   r   s       r'   extract_nativer      s     3
{zz3t#))444#{#>>#..::a=#**,,>>::szz!},,zz3::%%#t4n::jbii8sFFc#hFFr)   c          
     l   t        j                  |t        d|j                              }t        j                  ||t        d|j                              }t        d | j                        }t
        j                  j                  | j                        r[t
        j                  j                  |j                        r1t        j                  |t        j                  | |      |      }t
        j                  j                  |j                        rt        d|j                        }t        j                  t        j                  ||      |       }t        j                  t        j                  | |      t        d|            }t        j                  t        j                  ||      t        j                  |t        d|            |      }	n|}	|	j                  | j                        }	|	S t        j                  |t        j                   | |      |      }t        j"                  |      }	|	S )Nr   rk      zpa._lib.Int64Type)pc	not_equalrl   rf   if_elserX   r   
is_integerdivide_checkedis_signed_integerr   multiplylessbit_wise_xorand_subtractdividefloor)
leftright	safe_mask
safe_rightnon_safe_resultdivideddiv_typehas_remainderhas_one_negative_operandresults
             r'   floordiv_compatr     s    UC

$;<IIuc!%**.EFJ$TYY/O	xx499%"((*=*=ejj*I**r((z:O
 88%%gll3/>HLLWe)DdKM')wwe,c!X.>($ ZZ'?@GSH%56F FTYY' M **Y		$
(C_U'"Mr)   c                B   t         j                  j                  | j                        rst         j                  j                  |j                        rJ| j	                  t        j
                         d      |j	                  t        j
                         d      fS | |fS )NF)safe)rX   r   r   rf   r   float64)arrow_array	pa_objects     r'   cast_for_truedivr   >  s     
xx;++,1D1DY^^1T 

599>>JJLu <J <
 
 	
 	!!r)   z/(?P<date>\d{1,4}[-/.]\d{1,2}[-/.]\d{1,4}|\d{8})z(?P<sep>\s|T)z'(?P<time>\d{2}:\d{2}(?::\d{2})?|\d{6}?)z^(?P<hms>\d{2}:\d{2}:\d{2})$z^(?P<hm>\d{2}:\d{2})$z^(?P<hms_no_sep>\d{6})$z(?P<tz>Z|[+-]\d{2}:?\d{2})?z?$zw^(?P<year>(?:[12][0-9])?[0-9]{2})(?P<sep1>[-/.])(?P<month>0[1-9]|1[0-2])(?P<sep2>[-/.])(?P<day>0[1-9]|[12][0-9]|3[01])$zw^(?P<day>0[1-9]|[12][0-9]|3[01])(?P<sep1>[-/.])(?P<month>0[1-9]|1[0-2])(?P<sep2>[-/.])(?P<year>(?:[12][0-9])?[0-9]{2})$zw^(?P<month>0[1-9]|1[0-2])(?P<sep1>[-/.])(?P<day>0[1-9]|[12][0-9]|3[01])(?P<sep2>[-/.])(?P<year>(?:[12][0-9])?[0-9]{2})$zY^(?P<year>(?:[12][0-9])?[0-9]{2})(?P<month>0[1-9]|1[0-2])(?P<day>0[1-9]|[12][0-9]|3[01])$%Y%m%dz%Y-%m-%dz%d-%m-%Yz%m-%d-%Yz%H:%M:%Sz%H:%Mz%H%M%Sc              r    t        j                  t        | |||      j                        }t	        d|      S )Nr4   pa.StructArray)rX   concat_arraysr:   chunksr   )r8   r9   r5   r6   rs        r'   _extract_regex_concat_arraysr   h  s8     	gw[QXX	A  !$$r)   c                0   t        | j                         j                  dd      t              }t	        j
                  |j                               j                         sd}t        |      |j                  d      }|j                  d      }t	        j                  t	        j                  |            j                         dkD  rd}t        |      t	        j                  t	        j                  |            j                         dkD  rd	}t        |      t        t        d
|j                  d                  }t        t        d
|j                  d                  }|d   j                         }|d   j                         rdnd}| | | | S )z.Try to infer datetime format from StringArray.r   
   r9   zUnable to infer datetime format, provided format is not supported. Please report a bug to https://github.com/narwhals-dev/narwhals/issuessepr   r   z@Found multiple separator values while inferring datetime format.z?Found multiple timezone values while inferring datetime format.pc.StringArraydatetimez%z )r   	drop_nullsliceFULL_REr   allis_validas_pyr   r   countunique
ValueError_parse_date_formatr   _parse_time_format)	ra   matchesr   
separatorsr   
date_value
time_value	sep_valuetz_values	            r'   parse_datetime_formatr  v  sK   *3==?+@+@B+GQXYG66'""$%++-U 	 "#&&u%J	t	B 
xx		*%&,,.2Po	xx		"$$&*Oo#D)97==;P$QRJ#D)97==;P$QRJ1##%I!u{{}t"H\)ZL
;;r)   c                   t         D ]]  \  }}t        j                  | |      }|dk(  r5t        j                  |j	                               j                         r|c S t        j                  |j	                               j                         st        j                  t        j                  |j                  d      x}            j                         dk(  st        j                  t        j                  |j                  d      x}            j                         dk(  s!|d   j                         x}|d   j                         k(  sL|j                  d|      c S  d}t        |      )	Nr   r   sep1r   sep2r   -zgUnable to infer datetime format. Please report a bug to https://github.com/narwhals-dev/narwhals/issues)DATE_FORMATSr   r:   r  r  r  r	  r
  r   replacer  )ra   date_rgxdate_fmtr  r  r  date_sep_valuer   s           r'   r  r    s   *l(""39xBFF7+;+;+=$>$D$D$FOFF7##%&,,.7==+@#@4ABHHJaO7==+@#@4ABHHJaO#'7==?2tAw}}F##C88 +	Q  S/r)   c                    t         D ]Q  \  }}t        j                  | |      }t        j                  |j	                               j                         sO|c S  y)Nr   r  )TIME_FORMATSr   r:   r  r  r  )ra   time_rgxtime_fmtr  s       r'   r  r    sK    *(""3966'""$%++-O + r)   c                   |s| dfS |dz  }||dz  dk(  z
  }| j                   j                  }t        ||       g|t        ||       }| j                  t	        j
                  |            ||z   fS )au  Pad series with None values on the left and/or right side, depending on the specified parameters.

    Arguments:
        series: The input ArrowSeries to be padded.
        window_size: The desired size of the window.
        center: Specifies whether to center the padding or not.

    Returns:
        A tuple containing the padded ArrowSeries and the offset value.
    r      )re   r   ri   _with_nativerX   r   )rh   window_sizecenteroffset_leftoffset_rightr   arrayss          r'   
pad_seriesr*    s     qy"K+/Q"67L]]!!FV,WvWz,PV7WWFr//78+:TTTr)   c                    t        d |D              st        j                         nt        j                         fd|D        t	        |       fS )Nc              3  n   K   | ]-  }t         j                  j                  |j                         / y wr#   )rX   r   r   rf   ).0cas     r'   	<genexpr>z2cast_to_comparable_string_types.<locals>.<genexpr>  s$     N~288++BGG4~s   35c              3  @   K   | ]  }|j                          y wr#   )r   )r-  r.  rb   s     r'   r/  z2cast_to_comparable_string_types.<locals>.<genexpr>  s     4^rBGGEN^s   )anyrX   stringlarge_stringrl   )	separatorchunked_arraysrb   s     @r'   cast_to_comparable_string_typesr6    sF     N~NN 			__ 

 5^4c)U6KKKr)   )   promote_optionsdefault
permissivenone)r9  r:  r;  z*Mapping[PromoteOptions, Mapping[str, Any]]_PROMOTEpromoteTFc                <    t        j                  | fi t        |   S r#   )rX   concat_tablesr<  )tablesr8  s     r'   r?  r?    s     F@h&?@@r)   c                      e Zd Zy)ArrowSeriesNamespaceN)r   
__module____qualname__r$   r)   r'   rB  rB    s    r)   rB  )r   r   c                    t         dk  r*dd l}t        j                  |j	                  | ||            S t        j                  | ||      S )N)   r   )BACKEND_VERSIONnumpyrX   arrayarange)startendstepnps       r'   rJ  rJ    s<    xx		%d34499UC&&r)   c                D   t         }|dk(  rd|t        j                  d      fnd|f}t        j                  t        j
                  j                  t        j                  |       t        j                  |       gddg      j                  d      j                  |g      j                  d      j                  d|             }t        j                  t        j                  t        j                  |       t        d                  }|dk(  r&t        j                  |j!                         d d      }n1t        j"                   |d |j$                        t'        |             }t        j(                  t        j*                  ||j-                  d	      |      g      S )
Nsumvaluesr   )	min_countoffsetsnamesvalues_rk   F)rl   r   ScalarAggregateOptionsrX   rI  Tablefrom_arrayslist_flattenlist_parent_indicesgroup_by	aggregatesort_bycolumnr   list_value_lengthr   is_nullrm   rf   lenr`   replace_with_mask	fill_null)rI  funcrn   aggregationaggnon_empty_mask
base_arrays          r'   list_aggrj    sY    D 5= 
422Q?@ 
 ((
__U#R%;%;E%BCY' 	 	
 
)		K=	!			'$ 	!	C XXbll2+?+?+FAOPNu}ZZ 6 6 8$B
YYtDsxx8#e*E
  ((/	
 r)   c               8   |rdnd}|rdnd}d\  }}t        j                  t        j                  |       t        d            }t        j
                  j                  t        dt        |       d      | g||g	      }|j                  |      }	|j                  t        j                  t        j                  |      t        d
                  }
t        j
                  j                  t        j                  |       t        j                  |       g||g	      }t        j                  ||df||fg|      }|	j                  |      j!                         j"                  }t        j$                  j                  |t	        j&                  |j)                  |      j                  |                  }t        j
                  j                  |	j                  |      |g||g	      }t	        j*                  ||
g      j-                  |      j                  |      S )N
descending	ascendingat_endat_start)idxrQ  r   r   )rK  rL  rM  rT  T)	sort_keysnull_placement)r   greaterr`  rl   rX   rX  rY  rJ  rb  filterrd  invertrZ  r[  sort_indicesr_  combine_chunksrS  	ListArrayrI  taker?  r^  )rI  rl  
nulls_lastsort_directionnulls_positionrp  vis_not_sortedindexednot_sorted_partpass_throughexplodedsorted_indicesrS  sorted_implodedimploded_by_idxs                   r'   	list_sortr    s    #  AKHPZNFCJJr33E:CFCMhh""	aSZa	0%8a # G nn]3O>>",,ryy/GT"STLxx##		!7!7!>?3x $ H __%>':;%N
 $$Q'668@@Gll..(--7>>qABO hh**				$o6sAh + O _l;<DDSIPPQRSSr)   )r&   r   returnz"TypeIs[pa.TimestampType[Any, Any]])r&   r   r  zTypeIs[pa.DurationType[Any]])r&   r   r  zTypeIs[pa.ListType[Any]])r&   r   r  zTypeIs[pa.LargeListType[Any]])r&   r   r  z&TypeIs[pa.FixedSizeListType[Any, Any]])r&   r   r  z(TypeIs[pa.DictionaryType[Any, Any, Any]])
r9   strr8   r   r5   r   r6   r   r  r!   )rT   r   r  r   )r\   r   r  zTypeIs[ArrayOrScalar]r#   )ra   z#ArrayOrScalar | list[Iterable[Any]]rb   pa.DataType | Noner  r   )rg   intrh   r   r  r   )rb   r  rT   zPythonLiteral | ScalarAnyrg   r  r  r   )rg   r  r  zpa.Int64Array)rb   pa.DataTyperv   r
   r  r   )rb   r   rv   r
   r  r  )r   r   r   z'ArrowSeries | PythonLiteral | ScalarAnyr  z3tuple[ChunkedArrayAny, ChunkedArrayAny | ScalarAny])r   r   r   r   r  r   )r   r   r   r   r  z'tuple[ArrayOrScalarT1, ArrayOrScalarT2])
r9   r  r8   r   r5   r   r6   r   r  r   )ra   r   r  r  )ra   r   r  r  )rh   r   r%  r  r&  boolr  ztuple[ArrowSeries, int])r5  zChunkedArrayAny | ScalarAnyr4  r  r  z7tuple[Iterator[ChunkedArrayAny | ScalarAny], ScalarAny])r;  )r@  zIterable[pa.Table]r8  r   r  zpa.Table)rK  r  rL  r  rM  r  r  r   )rI  r   re  z:Literal['min', 'max', 'mean', 'approximate_median', 'sum']r  r   )rI  r   rl  r  rz  r  r  r   )
__future__r   	functoolsr   typingr   r   r   pyarrowrX   pyarrow.computecomputer   narwhals._compliantr   narwhals._utilsr	   r
   r   collections.abcr   r   r   r   typing_extensionsr   r   rS   r   narwhals._arrow.typingr   r   r   r   r   r   r   r   r   narwhals._durationr   narwhals.dtypesr   narwhals.typingr   r    r!   __annotations__r(   r+   r-   r/   r1   r3   r:   pyarrow.typesPYARROW_backend_versionrG  rO   scalarrl   rU   r]   r`   ri   rm   rp   rw   ru   MAINrs   r   r   r   float32r   binaryr   r2  r   bool_r   
dictionaryuint32r   date32r   time64r   int8r   int16r   int32r   int64r   uint8r   uint16r   r   uint64r   Objectr   r   r   r   r   DATE_RESEP_RETIME_REHMS_REHM_REHMS_RE_NO_SEPTZ_REr  YMD_REDMY_REMDY_REYMD_RE_NO_SEPr  r  r   r  r  r  r*  r6  r<  r?  rB  rJ  rj  r  r$   r)   r'   <module>r     s   "  + +   4 M M;;32
 
 
 0%8 *9Y8G@8CQN & & &
 & & 
!& .  !((99; + 
	
				


9
5  	ii !AC KO*	,*5G**+ NR18J1$1),11B 2> >B 
		6
NNJBJJL6
NNJBJJL6 MM9299;6 MM9299;	6
 NNHBHHJ6 ibiik9299;?6 KK6 KK46 KK6 LL("((*6 LL("((*6 LL("((*6 LL("((*6 MM9299;6 MM9299;6  MM9299;!62 $ mm% @G	GBG8G< F" "-<","$ =	
4	( *%Yvhay%
3 
D 
D 
Dl HZZZ	 $ug&68QR % %%
 % % %<>(UU),U6:UU.	L0	L=@	L<	L e &y1(,7"F+<H8  t$ $'E"H CIAA1?AA X/0PQ W'""
D" "JTT+/T=ATTr)   