
    FZjk                        U d dl mZ d dlZd dlmZ d dlmZ ej                  dk\  rd dlm	Z	 n	 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 dd
lmZmZmZmZmZm Z m!Z! eez  ez  ez  ez  Z"de#d<   e	 G d d             Z$ ed      d+d       Z% e&d      D  cg c]  }  e$ e'|              c} Z(de#d<    G d d      Z)e	 G d de)             Z*e	 G d de)             Z+e	 G d de)             Z,e	 G d de)             Z-e	 G d de)             Z.e	 G d  d!e)             Z/e	 G d" d#e)             Z0e	 G d$ d%e)             Z1e	 G d& d'e)             Z2 ed(      	 	 	 	 	 	 d,d)       Z3	 d-	 	 	 	 	 	 	 d.d*Z4y# e$ r d Z	Y Rw xY wc c} w )/    )annotationsN)	lru_cache)	getLogger)      )finalc                    | S )N )clss    WC:\Users\Rodrigo\frota-trucks-cliente\python\Lib\site-packages\charset_normalizer/md.pyr   r      s    J       )COMMON_CJK_CHARACTERSCOMMON_SAFE_ASCII_CHARACTERSTRACEUNICODE_SECONDARY_RANGE_KEYWORD_ACCENTUATED_ARABIC_ARABIC_ISOLATED_FORM_CJK_HANGUL	_HIRAGANA	_KATAKANA_LATIN_THAI)_character_flagsis_emoticonis_punctuationis_separator	is_symbolremove_accentunicode_rangeint_GLYPH_MASKc                      e Zd ZU dZdZded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ddZy) CharInfoz>Pre-computed character properties shared across all detectors.)	character	printablealphaupperlowerspacedigitis_asciicase_variableflagsaccentuatedlatinis_cjk	is_arabicis_glyphpunctsymrangesepemoticonsafe
common_cjkstrr'   boolr(   r)   r*   r+   r,   r-   r.   r/   r#   r0   r1   r2   r3   r4   r5   r6   r7   
str | Noner8   r9   r:   r;   r<   c                   || _         t        |      }|dk  r2d| _        d| _        d| _        d| _        d| _        d|cxk  rdk  rVn nSd| _        d| _        d| _	        d| _
        d| _        d| _        d| _        t        | _        d| _        d| _        d| _        n!d|cxk  rdk  rVn nSd| _        d| _        d| _	        d| _
        d| _        d| _        d| _        t        | _        d| _        d| _        d| _        nd|cxk  rd	k  rRn nOd| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d
| _        d| _        d| _        d| _        nc|dk(  sd|cxk  rdk  rUn nRd| _        d| _        d| _	        d| _
        d| _        |dk(  | _        d| _        d
| _        d| _        d| _        d| _        n|j'                         | _        d| _        d| _        d| _	        d| _
        d| _        d| _        d
| _        d| _        | j                  rt)        |      nd| _        | j                  rt+        |      nd| _        nsd| _        |j'                         | _        |j-                         | _        |j/                         | _        |j1                         | _	        |j3                         | _
        |j5                         | _        | j                  | j                  k7  | _        | j                  rt7        |      }nd
}|| _        t9        |t:        z        | _        t9        |t        z        | _        t9        |t<        z        | _        t9        |t>        z        | _        t9        |t@        z        | _        | j                  rt)        |      nd| _        | j                  rt+        |      nd| _        tC        |      | _"        tG        |      | _$        tK        |      | _&        |tN        v | _(        |tR        v | _*        y)zkCompute all properties for *character* (built once per codepoint,
        every branch assigns every slot).   TFA   Z   a   z   0   9   r       	      N)+r'   ordr.   r1   r3   r4   r5   r)   r*   r+   r,   r-   r(   r/   r   r0   r2   r6   r7   isprintabler   r    isalphaisupperislowerisspaceisdigitr   r>   r   r   r   r$   r"   r8   r   r9   r   r:   r   r;   r   r<   )selfr'   or0   s       r   __init__zCharInfo.__init__c   sz    # Ys7 DM$DDK"DN!DMQ}"}!
!
"
"
"
!%%)"#
!
"
 qC!
"
!
"
"
!%%)"#
!
"
 qB"
"
"
"
!
!%%*"
"
"
 bQ!\r\"
"
"
!
"
!"b%*"
"
"
  "+!6!6!8"
"
"
"
"
%*"
"
:>..^I6e
37>>9Y/u "DM&224DN"**,DJ"**,DJ"**,DJ"**,DJ"**,DJ!%tzz!9D zz(3DJ#EL$89Defn-DJut|,DK!%'/2DN !45DM 7;nn	2%DJ/3~~y+5DH"9-
	*#I.!==	#'<<r   N)r'   r=   returnNone)__name__
__module____qualname____doc__	__slots____annotations__rT   r
   r   r   r&   r&   /   s    HI2 NOKKKKKNJKLONK	I	IN
Jq=r   r&   )maxsizec                    t        |       S )zBBuild (once per codepoint) and cache the CharInfo for *character*.)r&   )r'   s    r   
_char_infor_      s     Ir   rA   zlist[CharInfo]_ASCII_CHAR_INFOc                  6    e Zd ZdZdZddZddZed	d       Zy)
MessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    r
   c                    t         )z
        The main routine to be executed upon character.
        Insert the logic in witch the text would be considered chaotic.
        NotImplementedErrorrR   r'   infos      r   	feed_infozMessDetectorPlugin.feed_info   s
    
 "!r   c                    t         )zB
        Permit to reset the plugin to the initial state.
        rd   rR   s    r   resetzMessDetectorPlugin.reset   s
     "!r   c                    t         )z
        Compute the chaos ratio based on what your feed() has seen.
        Must NOT be lower than 0.; No restriction gt 0.
        rd   rj   s    r   ratiozMessDetectorPlugin.ratio   s
     "!r   Nr'   r=   rg   r&   rU   rV   rU   rV   rU   float)	rW   rX   rY   rZ   r[   rh   rk   propertyrm   r
   r   r   rb   rb      s,    
 I"" " "r   rb   c                  :    e Zd ZdZddZddZddZed	d       Zy)
 TooManySymbolOrPunctuationPlugin_punctuation_count_symbol_count_character_count_last_printable_char_frenzy_symbol_in_wordc                J    d| _         d| _        d| _        d | _        d| _        y Nr   Fru   rj   s    r   rT   z)TooManySymbolOrPunctuationPlugin.__init__  s*    '("#%&04!,1#r   c                6   | xj                   dz  c_         || j                  k7  rn|j                  sb|j                  r| xj                  dz  c_        || _        y|j
                  s-|j                  r!|j                  s| xj                  dz  c_        || _        y)1Optimized feed using pre-computed character info.r      N)	rx   ry   r;   r6   rv   r-   r7   r:   rw   rf   s      r   rh   z*TooManySymbolOrPunctuationPlugin.feed_info  sw    "111$))zz''1,' %.! ZZDHHT]]""a'"$-!r   c                .    d| _         d| _        d| _        y Nr   )rv   rx   rw   rj   s    r   rk   z&TooManySymbolOrPunctuationPlugin.reset!  s    "# !r   c                    | j                   dk(  ry| j                  | j                  z   | j                   z  }|dk\  r|S dS )Nr           333333?)rx   rv   rw   )rR   ratio_of_punctuations     r   rm   z&TooManySymbolOrPunctuationPlugin.ratio&  sO      A% ##d&8&88!!'" (<s'B#KKr   Nro   rn   rp   	rW   rX   rY   r[   rT   rh   rk   rr   rm   r
   r   r   rt   rt     s.    I2
.
 L Lr   rt   c                  :    e Zd ZdZddZddZddZed	d       Zy)
TooManyAccentuatedPluginrx   _accentuated_countc                     d| _         d| _        y r   r   rj   s    r   rT   z!TooManyAccentuatedPlugin.__init__6  s    %&'(r   c                r    | xj                   dz  c_         |j                  r| xj                  dz  c_        yyr~   r   N)rx   r1   r   rf   s      r   rh   z"TooManyAccentuatedPlugin.feed_info:  s2    "##q(# r   c                     d| _         d| _        y r   r   rj   s    r   rk   zTooManyAccentuatedPlugin.resetA  s     !"#r   c                f    | j                   dk  ry| j                  | j                   z  }|dk\  r|S dS )Nr   r   gffffff?r   )rR   ratio_of_accentuations     r   rm   zTooManyAccentuatedPlugin.ratioE  s=      1$'+'>'>AVAV'V(=(E$N3Nr   Nro   rn   rp   r   r
   r   r   r   r   2  s,    :I))$ O Or   r   c                  :    e Zd ZdZddZddZddZed	d       Zy)
UnprintablePlugin_unprintable_countrx   c                     d| _         d| _        y r   r   rj   s    r   rT   zUnprintablePlugin.__init__R  s    '(%&r   c                    |j                   s+|j                  s|dk7  r|dk7  r| xj                  dz  c_        | xj                  dz  c_        y)r~   u   ﻿r   N)r,   r(   r   rx   rf   s      r   rh   zUnprintablePlugin.feed_infoV  sD     

NNV#X%##q(#"r   c                    d| _         y r   )r   rj   s    r   rk   zUnprintablePlugin.reseta  s
    "#r   c                Z    | j                   dk(  ry| j                  dz  | j                   z  S )Nr   r   r   )rx   r   rj   s    r   rm   zUnprintablePlugin.ratiod  s/      A%''!+t/D/DDDr   Nro   rn   rp   r   r
   r   r   r   r   N  s,    :I'	#$ E Er   r   c                  :    e Zd ZdZddZddZddZed	d       Zy)
SuspiciousDuplicateAccentPlugin_successive_countrx   _last_latin_character_last_was_accentuatedc                <    d| _         d| _        d | _        d| _        y r|   r   rj   s    r   rT   z(SuspiciousDuplicateAccentPlugin.__init__u  s"    &'%&15"+0"r   c                   | xj                   dz  c_         | j                  |j                  r}| j                  rq|j                  r/| j                  j                         r| xj                  dz  c_        t        |      t        | j                        k(  r| xj                  dz  c_        || _        |j                  | _        yr   )rx   r   r1   r   r*   rN   r   r!   rf   s      r   rh   z)SuspiciousDuplicateAccentPlugin.feed_info|  s    "&&2  **zzd88@@B&&!+&Y'=9S9S+TT&&!+&%."%)%5%5"r   c                <    d| _         d| _        d | _        d| _        y r|   r   rj   s    r   rk   z%SuspiciousDuplicateAccentPlugin.reset  s"    !" !%)"%*"r   c                Z    | j                   dk(  ry| j                  dz  | j                   z  S )Nr   r   r   )rx   r   rj   s    r   rm   z%SuspiciousDuplicateAccentPlugin.ratio  s/      A%&&*d.C.CCCr   Nro   rn   rp   r   r
   r   r   r   r   l  s.    I16+ D Dr   r   c                  :    e Zd ZdZddZddZddZed	d       Zy)
SuspiciousRange"_suspicious_successive_range_countrx   _last_printable_seen_last_printable_rangec                <    d| _         d| _        d | _        d | _        y r   r   rj   s    r   rT   zSuspiciousRange.__init__  s"    78/%&04!15"r   c                z   | xj                   dz  c_         |j                  s|j                  s|j                  rd| _        d| _        y| j                  || _        |j                  | _        y| j
                  }|j                  }||k7  s|!t        ||      r| xj                  dz  c_        || _        || _        yr   )	rx   r,   r6   r;   r   r   r8    is_suspiciously_successive_ranger   )rR   r'   rg   unicode_range_aunicode_range_bs        r   rh   zSuspiciousRange.feed_info  s    "::tyy(,D%)-D&$$,(1D%)-D&&*&@&@&*jj o-1H/Q771<7$-!%4"r   c                <    d| _         d| _        d | _        d | _        y r   )rx   r   r   r   rj   s    r   rk   zSuspiciousRange.reset  s"     !23/$(!%)"r   c                ^    | j                   dk  ry| j                  dz  | j                   z  }|S )NrJ   r   r   )rx   r   )rR   ratio_of_suspicious_range_usages     r   rm   zSuspiciousRange.ratio  s<      B& 33a7!!2"' /.r   Nro   rn   rp   r   r
   r   r   r   r     s,    I652* / /r   r   c                  :    e Zd ZdZddZddZddZed	d       Zy)
SuperWeirdWordPlugin_word_count_bad_word_count_foreign_long_count_is_current_word_bad_foreign_long_watchrx   _bad_character_count_buffer_length_buffer_last_char_buffer_last_char_accentuated_buffer_accent_count_buffer_glyph_count_buffer_upper_count_buffer_first_lower_buffer_has_non_asciic                    d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d | _        d| _	        d| _
        d| _        d| _        d| _        d| _        y r|   r   rj   s    r   rT   zSuperWeirdWordPlugin.__init__  sz     !$%() */!). %&)*!#$-138*)*!() () ). +0"r   c                   |j                   r| j                  dk(  r|j                  | _        | xj                  dz  c_        || _        |j
                  r| xj                  dz  c_        |j                  sd| _        |j                  | _
        |j                  r| xj                  dz  c_        | j                  s+|j                  r|j                  r|j                  sd| _        |j                  r| xj                  dz  c_        y| j                  sy|j                   s|j"                  s|j$                  r| xj&                  dz  c_        | j                  }| xj(                  |z  c_        |dk\  r| j                  |z  dk\  rd| _        n| j                  rF| j                  j-                         r,| j                  |k7  r| xj.                  dz  c_        d| _        nr| j                  dk(  rd| _        | xj.                  dz  c_        nF| j                  r:| j                  r.| j                  |dz
  k(  r| xj.                  dz  c_        d| _        |dk\  rM| j                  rA| j                  dkD  xr | j                  |z  dk  }|s| xj.                  dz  c_        d| _        | j*                  r1| xj0                  dz  c_        | xj2                  |z  c_        d	| _        d	| _        d| _        d| _        d	| _
        d| _        d| _        d| _        d	| _        d	| _        y|d
vrE|j4                  s8|j6                  r+d| _        | xj                  dz  c_        || _        d	| _
        yyyy)r~   r   r   TN         ?   r   F>   -<=>_|~)r)   r   r+   r   r   r*   r   r.   r   r1   r   r   r   r2   r5   r   r,   r6   r9   r   rx   r   rN   r   r   r   r-   r7   )rR   r'   rg   buffer_lengthprobable_camel_caseds        r   rh   zSuperWeirdWordPlugin.feed_info  s
   ::""a'+/::(1$%.D"zz((A-(==-1*151A1AD.))Q.),,t'7'7+/(}}((A-(""::txx!!%!4!4M!!]2!!,,}<C04D-66..66800MA,,1,04D---204D-,,1,..0000MA4EE
 ,,1,04D-"t'?'?,,q0 H00=@CG %
 ,,,1,04D-(($$)$))]:),1)',D$"#D%)D"16D.()D%'(D$'(D$',D$).D&@@JJ(,D%1$%.D"16D.   Ar   c                    d| _         d | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        y r|   )r   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   rj   s    r   rk   zSuperWeirdWordPlugin.resetV  sz    !%-2*$)!#(   !$%!#$ $%!#$ #$ #( %*"r   c                r    | j                   dk  r| j                  dk(  ry| j                  | j                  z  S )N
   r   r   )r   r   r   rx   rj   s    r   rm   zSuperWeirdWordPlugin.ratiog  s7    r!d&>&>!&C((4+@+@@@r   Nro   rn   rp   r   r
   r   r   r   r     s0    I$1(Y7v+" A Ar   r   c                  >    e Zd ZdZdZddZd	dZddZed
d       Z	y)CjkUncommonPluginz<
    Detect messy CJK text that probably means nothing.
    rx   _uncommon_countc                     d| _         d| _        y r   r   rj   s    r   rT   zCjkUncommonPlugin.__init__w  s    %&$%r   c                r    | xj                   dz  c_         |j                  s| xj                  dz  c_        yyr   )rx   r<   r   rf   s      r   rh   zCjkUncommonPlugin.feed_info{  s0    "  A%  r   c                     d| _         d| _        y r   r   rj   s    r   rk   zCjkUncommonPlugin.reset  s     ! r   c                l    | j                   dk  ry| j                  | j                   z  }|dkD  r|dz  S dS )Nr   r   r   r   r   )rR   uncommon_form_usages     r   rm   zCjkUncommonPlugin.ratio  sD      1$%)%9%9D<Q<Q%Q ,?+D"R'M#Mr   Nro   rn   rp   )
rW   rX   rY   rZ   r[   rT   rh   rk   rr   rm   r
   r   r   r   r   o  s3     8I&&! N Nr   r   c                  :    e Zd ZdZddZddZddZed	d       Zy)
ArchaicUpperLowerPlugin	_buf_character_count_since_last_sep_successive_upper_lower_count#_successive_upper_lower_count_finalrx   _last_alpha_seen_last_alpha_seen_upper_last_alpha_seen_lower_current_ascii_onlyc                    d| _         d| _        d| _        d| _        d| _        d | _        d| _        d| _        d| _        y )NFr   Tr   rj   s    r   rT   z ArchaicUpperLowerPlugin.__init__  sI    	45,23*890%&,0,1#,1#)- r   c                *   |j                   xr |j                  }| }|r| j                  dkD  r| j                  dk  r7|j                  s+| j                  s| xj
                  | j                  z  c_        d| _        d| _        d| _        d| _        | xj                  dz  c_	        d| _        y| j                  r|j                  sd| _        | j                  h|j                  r| j                  s|j                  r=| j                  r1| j                  r| xj                  dz  c_        d| _        nd| _        nd| _        | xj                  dz  c_	        | xj                  dz  c_        || _        |j                  | _        |j                  | _        y)r~   r   @   NFr   Tr   )r)   r/   r   r-   r   r   r   r   r   rx   r.   r*   r   r+   r   )rR   r'   rg   is_concerned	chunk_seps        r   rh   z!ArchaicUpperLowerPlugin.feed_info  sS   !ZZ>D,>,>**	==A44:

0088668 23D.34D0$(D!DI!!Q&!'+D$##DMM',D$  ,

t::

t::9966!;6 %DI $DI!	",,1, )&*jj#&*jj#r   c                    d| _         d| _        d| _        d| _        d | _        d| _        d| _        d| _        d| _        y )Nr   FT)	rx   r   r   r   r   r   r   r   r   rj   s    r   rk   zArchaicUpperLowerPlugin.reset  sI     !/0,-.*340 $&+#&+#	#' r   c                T    | j                   dk(  ry| j                  | j                   z  S )Nr   r   )rx   r   rj   s    r   rm   zArchaicUpperLowerPlugin.ratio  s*      A%77$:O:OOOr   Nro   rn   rp   r   r
   r   r   r   r     s/    
I.+1Z	( P Pr   r   c                  :    e Zd ZdZddZddZddZed	d       Zy)
ArabicIsolatedFormPluginrx   _isolated_form_countc                     d| _         d| _        y r   r   rj   s    r   rT   z!ArabicIsolatedFormPlugin.__init__  s    %&)*!r   c                     d| _         d| _        y r   r   rj   s    r   rk   zArabicIsolatedFormPlugin.reset  s     !$%!r   c                    | xj                   dz  c_         |j                  t        z  r| xj                  dz  c_        yyr   )rx   r0   r   r   rf   s      r   rh   z"ArabicIsolatedFormPlugin.feed_info  s6    "::--%%*% .r   c                X    | j                   dk  ry| j                  | j                   z  }|S )Nr   r   r   )rR   isolated_form_usages     r   rm   zArabicIsolatedFormPlugin.ratio  s0      1$%)%>%>AVAV%V""r   Nro   rn   rp   )	rW   rX   rY   r[   rT   rk   rh   rr   rm   r
   r   r   r   r     s*    <I+&+ # #r   r      c                   | |y| |k(  ryd| v rd|v ryd| v sd|v ryd| v sd|v r	d| v sd|v ry| j                  d      |j                  d      }}|D ]  }|t        v r||v s y | dv |dv }}|s|r	d| v sd|v ry|r|ryd	| v sd	|v rd| v sd|v ry| d
k(  s|d
k(  ryd| v sd|v s| dv r!|dv rd| v sd|v ryd| v sd|v ry| d
k(  s|d
k(  ryy)za
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    TFLatin	Emoticons	Combining )HiraganaKatakanaCJKHangulzBasic Latin)r   r   PunctuationForms)splitr   )r   r   keywords_range_akeywords_range_belrange_a_jp_charsrange_b_jp_charss          r   r   r     s    /"9/)/!g&@o%)G 	?"g&@&+*H 	c"c" '
 00!!	  	
	

 	33 ' 	, E_$<,?"h/&AO#u'?m+-/O 	 E_$<3377O+}/Oo%O)Cm+-/Or   c           	     V   t        |       }|dk  rd}n
|dk  rd}nd}| j                         }t        }t        }t	               }t               }	t               }
t               }t               }t               }t               }t               }t               }|j                  }|	j                  }|
j                  }|j                  }|j                  }|j                  }|j                  }|j                  }|j                  }t        d||      D ]P  }| |||z    D ]  }t        |      }|dk  r||   }n ||      } |||        |||       |r|j                   r	 |||       K |||       |j                   r |||        |||       |j"                  s |||       |j$                  r	 |||       |j&                  r	 |||       |j(                  s |||        |j*                  |	j*                  z   |
j*                  z   |j*                  z   |j*                  z   |j*                  z   |j*                  z   |j*                  z   |j*                  z   }||k\  sQ n |d   } |d|       |s	 |d|        |d|       |j*                  |	j*                  z   |
j*                  z   |j*                  z   |j*                  z   |j*                  z   |j*                  z   |j*                  z   |j*                  z   }|rt-        d	      } | j/                  t0        d
| d| d|        |dkD  r8| j/                  t0        d| dd         | j/                  t0        d| dd         ||	|
||||||f	D ]1  }!| j/                  t0        |!j2                   d|!j*                          3 t5        |d      S )zw
    Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
    i  rH   r   r   rA   r   r   
charset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=   zStarting with: NzEnding with: iz: r   )lenisasciir`   r_   rt   r   r   r   r   r   r   r   r   rh   r8   rK   r(   r)   r2   r3   r4   rm   r   logr   	__class__round)"decoded_sequencemaximum_thresholddebugseq_lenstepis_pure_ascii
ascii_info	char_infod_spd_tad_upd_sdad_srd_swd_cud_aud_ai	d_sp_feed	d_ta_feed	d_up_feed
d_sda_feed	d_sr_feed	d_sw_feed	d_cu_feed	d_au_feed	d_ai_feedblock_startr'   	codepointrg   mean_mess_rationl_infologgerdts"                                     r   
mess_ratior3  V  s    '(G}	4
 +224M
 "JI .N-OD%=%?D/1D-L-NE+-D!5!7D/1D$;$=D%=%?D IIIJIIIIIQ.)+d8JKI
 !^I3!), + i&i&>>i.i& ~~)T*)T* zz)T*::y$/;;i.>>i.O LT JJjjjj kk jj	
 jj jj jj jj 	 //o /t R.$ dG$$  JJjjjj kk jj	
 jj jj jj jj 	 /0

1156GGX Y!!2 35	
 R<JJu0@"0E/FGHJJu.>su.E-FGHtUD$dDIBJJub
;< J !$$r   )r'   r=   rU   r&   )r   r?   r   r?   rU   r>   )g?F)r  r=   r  rq   r  r>   rU   rq   )5
__future__r   sys	functoolsr   loggingr   version_infotypingr   typing_extensionsImportErrorconstantr   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   r   r   r    r!   r"   r$   r\   r&   r_   r8   chrr`   rb   rt   r   r   r   r   r   r   r   r   r   r3  )
_codepoints   0r   <module>r@     s}   " 
  v+      '>I-	9EAS A d= d= d=R 4  16c
$0:*HS_
$ . 
" "< +L'9 +L +L\ O1 O O6 E* E E: )D&8 )D )DX 6/( 6/ 6/r XA- XA XAv N* N ND YP0 YP YPx #1 # #8 4FF2<F	F FT JOT%T%.3T%BFT%
T%U  	h$s   E< !F<FF