3
sY]uW                 @   s  d dl mZmZ d dlZd dlZd dlZd dlZG dd dejZG dd dejZ	G dd de	Z
G d	d
 d
e	ZG dd de	ZG dd deZG dd deZG dd dejZG dd dejZG dd deeZG dd deeZG dd de
eZG dd deeZG dd dejZG dd  d eeZG d!d" d"ejZG d#d$ d$ejZG d%d& d&eZG d'd( d(eeZG d)d* d*e
eZG d+d, d,eeZed-krej  dS ).    )verbose
is_androidNc               @   s    e Zd Zedd Zdd ZdS )BaseLocalizedTestc             C   s   t jdkr>dd l}d}t|j jjdd dk rTtjdnt jj	d	rPd}nd}zft
jt
j}xN|D ]2}yt
jt
j| W n t
jk
r   whY nX P qhW tjddj| || _W d t
jt
j| X d S )Ndarwinr   en_US.UTF-8en_US.ISO8859-1en_US.
   z#Locale support on MacOSX is minimalwinEnEnglishen_US.US-ASCIIz$Test locale not supported (tried %s)z, )r   r   r   )r   r   )r   r   r   r   )sysplatformosintunamereleasesplitunittestSkipTest
startswithlocale	setlocale
LC_NUMERICErrorjoinenUS_locale)clsr   Ztlocs	oldlocaleZtloc r!   !lib/python3.6/test/test_locale.py
setUpClass   s*    
 

zBaseLocalizedTest.setUpClassc             C   sJ   t j| j}| jt j| j| t j| j| j trFtd| j ddd d S )Nztesting with %r... T)endflush)r   r   locale_type
addCleanupr   r   print)selfr    r!   r!   r"   setUp*   s
    zBaseLocalizedTest.setUpN)__name__
__module____qualname__classmethodr#   r+   r!   r!   r!   r"   r      s   r   c               @   s   e Zd Zdd Zdd ZdS )BaseCookedTestc             C   s   | j t_d S )N)cooked_valuesr   _override_localeconv)r*   r!   r!   r"   r+   7   s    zBaseCookedTest.setUpc             C   s
   i t _d S )N)r   r2   )r*   r!   r!   r"   tearDown:   s    zBaseCookedTest.tearDownN)r,   r-   r.   r+   r3   r!   r!   r!   r"   r0   2   s   r0   c               @   s6   e Zd Zdddg dddg dddddddddddZdS )CCookedTest r	      )currency_symboldecimal_pointfrac_digitsgroupingint_curr_symbolint_frac_digitsmon_decimal_pointmon_groupingmon_thousands_sepn_cs_precedesn_sep_by_spacen_sign_posnnegative_signp_cs_precedesp_sep_by_spacep_sign_posnpositive_signthousands_sepN)r,   r-   r.   r1   r!   r!   r!   r"   r4   =   s$   r4   c               @   sB   e Zd Zddddddgddddddgddddd	dddd
ddZdS )EnUSCookedTest$r	         r   zUSD ,   -r5   )r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   N)r,   r-   r.   r1   r!   r!   r!   r"   rI   U   s$   rI   c               @   sB   e Zd Zddddddgddddddgddddd	dddd
ddZdS )FrFRCookedTestu   €rM   rK   rL   r   zEUR r$   rN   rO   r5   )r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   N)r,   r-   r.   r1   r!   r!   r!   r"   rP   n   s$   rP   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
BaseFormattingTestc             K   s   | j |||f|| d S )N)assertEqual)r*   formatvalueoutfuncformat_optsr!   r!   r"   _test_formatfunc   s    z#BaseFormattingTest._test_formatfuncc             K   s    | j |||fdtji| d S )NrV   )rX   r   rS   )r*   rS   rT   rU   rW   r!   r!   r"   _test_format   s    zBaseFormattingTest._test_formatc             K   s    | j |||fdtji| d S )NrV   )rX   r   format_string)r*   rS   rT   rU   rW   r!   r!   r"   _test_format_string   s    z&BaseFormattingTest._test_format_stringc             K   s   | j tj|f|| d S )N)rR   r   Zcurrency)r*   rT   rU   rW   r!   r!   r"   _test_currency   s    z!BaseFormattingTest._test_currencyN)r,   r-   r.   rX   rY   r[   r\   r!   r!   r!   r"   rQ      s   rQ   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )EnUSNumberFormattingc             C   s   t j d | _d S )NrH   )r   
localeconvsep)r*   r!   r!   r"   r+      s    zEnUSNumberFormatting.setUpc             C   sR   | j dddd| j d | j ddddd | j dddd	d | j d
ddd	d d S )Nz%fi   rN   z1%s024.000000)r:   rU   f   z
102.000000*   z
-42.000000z%+fii)rY   r_   )r*   r!   r!   r"   test_grouping   s    z"EnUSNumberFormatting.test_groupingc             C   s^   | j ddddjdd | jrZ| j dddd	| j jd
d | j dddd	| j jd
d d S )Nz%20.fra   rN   z-42   )r:   rU   z%+10.fih  z-4%s200r
   z%-10.fiii)rY   rjustr_   ljust)r*   r!   r!   r"   test_grouping_and_padding   s    

z.EnUSNumberFormatting.test_grouping_and_paddingc             C   sL   | j dddd| j d | j dddd| j d | j dd	dd| j d d S )
Nz%dih  Tz4%s200)r:   rU   z%+dz+4%s200z-4%s200i)rY   r_   )r*   r!   r!   r"   test_integer_grouping   s    z*EnUSNumberFormatting.test_integer_groupingc             C   s@   | j dddd| j jdd | j dd	dd| j jdd d S )
Nz%10dih  Tz4%s200r
   )r:   rU   z%-10dz-4%s200i)rY   r_   rd   re   )r*   r!   r!   r"   !test_integer_grouping_and_padding   s    

z6EnUSNumberFormatting.test_integer_grouping_and_paddingc             C   sL   | j ddddd | j ddddd | j dddd	d | j d
ddd	d d S )Nz%fi   r   z1024.000000)r:   rU   r`   z
102.000000ra   z
-42.000000z%+fii)rY   )r*   r!   r!   r"   test_simple   s    z EnUSNumberFormatting.test_simplec             C   sL   | j ddddjdd | j dddd	jd
d | j ddddjd
d d S )Nz%20.fra   r   z-42rc   )r:   rU   z%+10.fih  z-4200r
   z%-10.fZ4200ii)rY   rd   re   )r*   r!   r!   r"   test_padding   s    z!EnUSNumberFormatting.test_paddingc             C   s   | j dddd| j| jf d | j dddd| j| jf d | j dd	d
d | jrt| j ddddd| j jd d | j ddddjdd | jr| j dddd| j jdd | jr| j dddd| j| jf d d S )NzOne million is %ii@B rN   zOne million is 1%s000%s000)r:   rU   zOne  million is %izOne  million is 1%s000%s000z.%f.     @@z.1000.000000.)rU   z-->  %10.2fih  z-->  z	4%s200.00r
   z%10.*frK     r   z1000.00z%*.*fz	1%s000.00zint %i float %.2f str %sstrz"int 1%s000 float 1%s000.00 str str)rK   rl   )r
   rK   rl   )rl   rk   rm   )r[   r_   rd   )r*   r!   r!   r"   test_complex_formatting   s$    




z,EnUSNumberFormatting.test_complex_formattingN)r,   r-   r.   r+   rb   rf   rg   rh   ri   rj   rn   r!   r!   r!   r"   r]      s   r]   c               @   s   e Zd Zdd ZdS )TestFormatPatternArgc             C   s   | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd d S )	Nz%f
fooz%fz%f
z %fz%fgz%^gz%f%%)assertRaises
ValueErrorr   rS   )r*   r!   r!   r"   test_onlyOnePattern   s    z(TestFormatPatternArg.test_onlyOnePatternN)r,   r-   r.   rs   r!   r!   r!   r"   ro      s   ro   c               @   s    e Zd ZdZdd Zdd ZdS )TestLocaleFormatStringz%General tests on locale.format_stringc             C   sT   | j tjdddd  | j tjdddd	  | j tjdddidddi  d S )
Nz%f%%      ?z%d %f%%drN   z%(foo)s %%drp   bar)rN   ru   )rN   ru   )rR   r   rZ   )r*   r!   r!   r"   test_percent_escape   s
    
z*TestLocaleFormatString.test_percent_escapec             C   sD   | j tjdddidddi  | j tjdddidddi  d S )Nz%(foo)s bing.rp   rv   z%(foo)s)rR   r   rZ   )r*   r!   r!   r"   test_mapping   s    z#TestLocaleFormatString.test_mappingN)r,   r-   r.   __doc__rw   rx   r!   r!   r!   r"   rt      s   rt   c               @   s   e Zd ZejZdd ZdS )TestNumberFormattingc             C   s   t j|  tj|  d S )N)r   r+   r]   )r*   r!   r!   r"   r+     s    
zTestNumberFormatting.setUpN)r,   r-   r.   r   r   r'   r+   r!   r!   r!   r"   rz     s   rz   c               @   s   e Zd Zdd Zdd ZdS )TestEnUSNumberFormattingc             C   s   t j|  tj|  d S )N)rI   r+   r]   )r*   r!   r!   r"   r+     s    
zTestEnUSNumberFormatting.setUpc             C   s2   | j dd | j dddd | j ddddd d S )NiP  z	$50000.00z
$50,000.00T)r:   zUSD 50,000.00)r:   international)r\   )r*   r!   r!   r"   test_currency  s    z&TestEnUSNumberFormatting.test_currencyN)r,   r-   r.   r+   r}   r!   r!   r!   r"   r{     s   r{   c               @   s   e Zd Zdd Zdd ZdS )TestCNumberFormattingc             C   s   | j ddddd d S )Nz%.2fg)\@Tz12345.67)r:   rU   )rY   )r*   r!   r!   r"   rb     s    z#TestCNumberFormatting.test_groupingc             C   s   | j ddddd d S )Nz%9.2fg)\@Tz	 12345.67)r:   rU   )rY   )r*   r!   r!   r"   rf      s    z/TestCNumberFormatting.test_grouping_and_paddingN)r,   r-   r.   rb   rf   r!   r!   r!   r"   r~     s   r~   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestFrFRNumberFormattingc             C   s   | j dddd d S )Nz%.2fg)\@z12345,67)rU   )rY   )r*   r!   r!   r"   test_decimal_point'  s    z+TestFrFRNumberFormatting.test_decimal_pointc             C   s(   | j ddddd | j ddddd d S )Nz%.2fgQu@Tz345,67)r:   rU   g)\@z	12 345,67)rY   )r*   r!   r!   r"   rb   *  s    z&TestFrFRNumberFormatting.test_groupingc             C   s   | j ddddd | j ddddd | j dd	dd
d | j dd	dd
d | j dd	ddd | j ddddd | j ddddd | j dd	dd
d | j dd	dd
d | j dd	ddd d S )Nz%6.2fgQu@Tz345,67)r:   rU   z%7.2fz 345,67z%8.2fg)\@z	12 345,67z%9.2fz%10.2fz
 12 345,67z%-6.2fz%-7.2fz345,67 z%-8.2fz%-9.2fz%-10.2fz
12 345,67 )rY   )r*   r!   r!   r"   rf   .  s    z2TestFrFRNumberFormatting.test_grouping_and_paddingc             C   s(   | j ddddd | j ddddd d S )Nz%d   TZ200)r:   rU   ih  z4 200)rY   )r*   r!   r!   r"   rg   :  s    z.TestFrFRNumberFormatting.test_integer_groupingc             C   s|   | j ddddd | j ddddd | j ddddjdd | j d	dddd | j d
dddd | j ddddjdd d S )Nz%4dih  Tz4 200)r:   rU   z%5dz%10dr
   z%-4dz%-5dz%-10d)rY   rd   re   )r*   r!   r!   r"   rh   >  s    z:TestFrFRNumberFormatting.test_integer_grouping_and_paddingc             C   s>   d}| j dd|  | j dd| dd | j ddddd d S )	Nu   €iP  z	50000,00 z
50 000,00 T)r:   z50 000,00 EUR )r:   r|   )r\   )r*   Zeuror!   r!   r"   r}   F  s
    z&TestFrFRNumberFormatting.test_currencyN)	r,   r-   r.   r   rb   rf   rg   rh   r}   r!   r!   r!   r"   r   $  s   r   c               @   s   e Zd Zdd Zdd ZdS )TestCollationc             C   sd   | j tjddd | jtjddd | jtjddd | jttjdd | jttjdd d S )Nabr   za )
assertLessr   strcollrR   ZassertGreaterrq   rr   )r*   r!   r!   r"   test_strcollR  s
    zTestCollation.test_strcollc             C   s,   | j tjdtjd | jttjd d S )Nr   r   za )r   r   strxfrmrq   rr   )r*   r!   r!   r"   test_strxfrmZ  s    zTestCollation.test_strxfrmN)r,   r-   r.   r   r   r!   r!   r!   r"   r   O  s   r   c               @   s*   e Zd ZejZdd Zdd Zdd ZdS )TestEnUSCollationc             C   sb   t jtjdpdj}|d
kr(tjd|dkrTtjdksJt	sJtjj
drTtjd	tj|  d S )NFasciiutf-8	iso8859-1cp1252zencoding not suitabler   Zfreebsdzwcscoll/wcsxfrm have known bugs)r   r   r   )codecslookupr   getpreferredencodingnamer   r   r   r   r   r   r   r+   )r*   encr!   r!   r"   r+   e  s    

zTestEnUSCollation.setUpc             C   s   | j tjddd d S )N   àr   r   )r   r   r   )r*   r!   r!   r"   test_strcoll_with_diacriticn  s    z-TestEnUSCollation.test_strcoll_with_diacriticc             C   s   | j tjdtjd d S )Nr   r   )r   r   r   )r*   r!   r!   r"   test_strxfrm_with_diacriticq  s    z-TestEnUSCollation.test_strxfrm_with_diacriticN)	r,   r-   r.   r   LC_ALLr'   r+   r   r   r!   r!   r!   r"   r   `  s   	r   c               @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )NormalizeTestc             C   s   | j tj|||d d S )N)msg)rR   r   Z	normalize)r*   
localenameZexpectedr!   r!   r"   checkv  s    zNormalizeTest.checkc             C   sD   x>t jj D ]0\}}| j||fd | j|| W d Q R X qW d S )N)r   )r   Zlocale_aliasitemsZsubTestr   )r*   r   aliasr!   r!   r"   test_locale_aliasy  s    zNormalizeTest.test_locale_aliasc             C   s   | j dd d S )Nr5   )r   )r*   r!   r!   r"   
test_empty~  s    zNormalizeTest.test_emptyc             C   s   | j dd | j dd d S )NcCposix)r   )r*   r!   r!   r"   test_c  s    zNormalizeTest.test_cc             C   s   | j dd | j dd | j dd | j dd | j dd | j dd | j d	d	 | j d
d	 | j dd	 | j dd | j dd | j dd | j dd | j dd | j dd d S )NZenzen_US.ISO8859-1ZENzen.iso88591r   Zen_usZen_GBzen_GB.ISO8859-1zen_US.UTF-8z
en_US.utf8zen_US:UTF-8zen_US.US-ASCIIzen_US.88591zen_US.885915zen_US.ISO8859-15Zenglishzen_EN.ISO8859-1zenglish_uk.ascii)r   )r*   r!   r!   r"   test_english  s    zNormalizeTest.test_englishc             C   s   | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd	 | j d
d	 | j dd | j dd | j dd | j dd d S )Nzaz_AZ.iso88599ezaz_AZ.ISO8859-9Eztt_RU.koi8cztt_RU.KOI8-Czlo_LA.cp1133zlo_LA.IBM-CP1133zlo_LA.ibmcp1133zuk_ua.microsoftcp1251zuk_UA.CP1251zuk_ua.microsoft-cp1251zka_ge.georgianacademyzka_GE.GEORGIAN-ACADEMYzcs_CZ.iso88592zcs_CZ.ISO8859-2)r   )r*   r!   r!   r"   test_hyphenated_encoding  s    z&NormalizeTest.test_hyphenated_encodingc             C   s(   | j dd | j dd | j dd d S )Nz
de_DE@eurozde_DE.ISO8859-15zen_US.ISO8859-15@eurozen_US.ISO8859-15zde_DE.utf8@eurozde_DE.UTF-8)r   )r*   r!   r!   r"   test_euro_modifier  s    z NormalizeTest.test_euro_modifierc             C   s(   | j dd | j dd | j dd d S )Nzbe_BY.UTF-8@latinzsr_RS.UTF-8@latinzsr_RS.UTF-8@latn)r   )r*   r!   r!   r"   test_latin_modifier  s    z!NormalizeTest.test_latin_modifierc             C   s(   | j dd | j dd | j dd d S )Nzca_ES.UTF-8@valenciazca_ES@valenciazca@valenciazca_ES.ISO8859-1@valencia)r   )r*   r!   r!   r"   test_valencia_modifier  s    z$NormalizeTest.test_valencia_modifierc             C   s   | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j d	d | j d
d
 | j dd
 | j dd
 d S )Nzks_IN.UTF-8@devanagarizks_IN@devanagarizks@devanagarizks_IN.UTF-8Zks_INZkszsd_IN.UTF-8@devanagarizsd_IN@devanagarizsd@devanagarizsd_IN.UTF-8Zsd_INZsd)r   )r*   r!   r!   r"   test_devanagari_modifier  s    z&NormalizeTest.test_devanagari_modifierc             C   sX   | j dd | j dd | j dd | j dd | j dd | j d	d
 | j dd
 d S )Nz	ja_jp.euczja_JP.eucJPzja_jp.eucjpz	ko_kr.euczko_KR.eucKRzko_kr.euckrz	zh_cn.euczzh_CN.eucCNz	zh_tw.euczzh_TW.eucTWzzh_tw.euctw)r   )r*   r!   r!   r"   test_euc_encoding  s    zNormalizeTest.test_euc_encodingc             C   s  | j dd | j dd | j dd | j dd | j dd | j d	d | j d
d | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd | j dd d S )NZjazja_JP.eucJPzja.jisz
ja_JP.JIS7zja.sjisz
ja_JP.SJISZja_jpz
ja_jp.ajecz	ja_jp.euczja_jp.eucjpzja_jp.iso-2022-jpzja_jp.iso2022jpz	ja_jp.jisz
ja_jp.jis7zja_jp.mscodez	ja_jp.pckz
ja_jp.sjisz
ja_jp.ujisz
ja_jp.utf8zja_JP.UTF-8ZjapanZjapanesezjapanese-euczjapanese.euczjapanese.sjisZjp_jp)r   )r*   r!   r!   r"   test_japanese  s,    zNormalizeTest.test_japaneseN)r,   r-   r.   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r   u  s   	r   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestMiscellaneousc             C   s   t j }|rtj| d S )N)r   r   r   r   )r*   r   r!   r!   r"   test_getpreferredencoding  s    z+TestMiscellaneous.test_getpreferredencodingc             C   s(   | j ttjdd  | j ttjdd  d S )Nr      a)rq   	TypeErrorr   r   )r*   r!   r!   r"   test_strcoll_3303  s    z#TestMiscellaneous.test_strcoll_3303c             C   s^   t jt j t jt j t jt j t jt j t jt j t jt j | jt j	t jd d S )Ni90  )
r   r   r   LC_TIMELC_CTYPE
LC_COLLATELC_MONETARYr   rq   r   )r*   r!   r!   r"   test_setlocale_category  s    z)TestMiscellaneous.test_setlocale_categoryc             C   s   t jt j}| jt jt j| yt jt jd W n  t jk
rP   | jd Y nX t jt j}trvtd|f ddd t jt j| | j	|t jt j d S )NZtr_TRztest needs Turkish localeztesting with %ar$   T)r%   r&   )
r   r   r   r(   r   ZskipTestZ	getlocaler   r)   rR   )r*   r    locr!   r!   r"   test_getsetlocale_issue1813  s    z-TestMiscellaneous.test_getsetlocale_issue1813c          
   C   s(   | j t tjtjd W d Q R X d S )Ns   fi_FI)rq   r   r   r   r   )r*   r!   r!   r"   )test_invalid_locale_format_in_localetuple  s    z;TestMiscellaneous.test_invalid_locale_format_in_localetuplec             C   s(   | j t tjtjd W d Q R X d S )N   not   valid)r   r   )rq   r   r   r   r   )r*   r!   r!   r"   $test_invalid_iterable_in_localetuple  s    z6TestMiscellaneous.test_invalid_iterable_in_localetupleN)	r,   r-   r.   r   r   r   r   r   r   r!   r!   r!   r"   r     s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )BaseDelocalizeTestc             C   s   | j tj|| d S )N)rR   r   Z
delocalize)r*   rT   rU   r!   r!   r"   _test_delocalize  s    z#BaseDelocalizeTest._test_delocalizec             C   s   | j tj|| d S )N)rR   r   Zatof)r*   rT   rU   r!   r!   r"   
_test_atof  s    zBaseDelocalizeTest._test_atofc             C   s   | j tj|| d S )N)rR   r   Zatoi)r*   rT   rU   r!   r!   r"   
_test_atoi  s    zBaseDelocalizeTest._test_atoiN)r,   r-   r.   r   r   r   r!   r!   r!   r"   r     s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestEnUSDelocalizec             C   s   | j dd | j dd d S )Nz50000.00z	50,000.00)r   )r*   r!   r!   r"   test_delocalize"  s    z"TestEnUSDelocalize.test_delocalizec             C   s   | j dd | j dd d S )Nz50000.00g     j@z	50,000.00)r   )r*   r!   r!   r"   	test_atof&  s    zTestEnUSDelocalize.test_atofc             C   s   | j dd | j dd d S )N50000iP  z50,000)r   )r*   r!   r!   r"   	test_atoi*  s    zTestEnUSDelocalize.test_atoiN)r,   r-   r.   r   r   r   r!   r!   r!   r"   r      s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestCDelocalizeTestc             C   s   | j dd d S )Nz50000.00)r   )r*   r!   r!   r"   r   1  s    z#TestCDelocalizeTest.test_delocalizec             C   s   | j dd d S )Nz50000.00g     j@)r   )r*   r!   r!   r"   r   4  s    zTestCDelocalizeTest.test_atofc             C   s   | j dd d S )Nr   iP  )r   )r*   r!   r!   r"   r   7  s    zTestCDelocalizeTest.test_atoiN)r,   r-   r.   r   r   r   r!   r!   r!   r"   r   /  s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestfrFRDelocalizeTestc             C   s   | j dd | j dd d S )Nz50000,00z50000.00z	50 000,00)r   )r*   r!   r!   r"   r   =  s    z&TestfrFRDelocalizeTest.test_delocalizec             C   s   | j dd | j dd d S )Nz50000,00g     j@z	50 000,00)r   )r*   r!   r!   r"   r   A  s    z TestfrFRDelocalizeTest.test_atofc             C   s   | j dd | j dd d S )Nr   iP  z50 000)r   )r*   r!   r!   r"   r   E  s    z TestfrFRDelocalizeTest.test_atoiN)r,   r-   r.   r   r   r   r!   r!   r!   r"   r   ;  s   r   __main__) Ztest.supportr   r   r   r   r   r   ZTestCaser   r0   r4   rI   rP   objectrQ   r]   ro   rt   rz   r{   r~   r   r   r   r   r   r   r   r   r   r,   mainr!   r!   r!   r"   <module>   s6   +E

+o0
