Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib/python3.7/site-packages/pylint/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib/python3.7/site-packages/pylint/__pycache__/config.cpython-37.pyc

B

A!p\���
@s0dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlmZej�d�Zdejkr�ejdZedkr�ej�e�Znedkr�dZnej�ed�Zdd	�Zd
d�Zejdkr�d
\ZZnd\ZZdd�Zdd�Ze�Zde�Z Gdd�de!�Z"dd�Z#dd�Z$dd�Z%dd�Z&dd�Z'd d!�Z(d"d#�Z)ej*e+e
j,e'e%e(d$d%�d&d%�e)d'�	Z-d(d)�Z.dDd+d,�Z/d-d.�Z0d/d0�Z1ej2d1d2��Z3d3d4�Z4Gd5d6�d6ej5�Z5Gd7d8�d8ej6�Z6Gd9d:�d:ej7�Z8Gd;d<�d<�Z9Gd=d>�d>�Z:Gd?d@�d@e9e:�Z;dAej<dfdBdC�Z=dS)EzIutilities for Pylint configuration :

* pylintrc
* pylint.d (PYLINTHOME)
�)�print_functionN)�utils�~Z
PYLINTHOMEz	.pylint.dcCs&|�tjd�}tj�td||df�S)N�_z%s%s%sz.stats)�replace�os�sep�path�join�PYLINT_HOME)�	base_nameZrecurs�r
�>/opt/alt/python37/lib/python3.7/site-packages/pylint/config.py�_get_pdata_pathHsrc	CsDt|d�}y t|t��}t�|�SQRXWntk
r>iSXdS)N�)r�open�
_PICK_LOAD�pickle�load�	Exception)�base�	data_file�streamr
r
r�load_resultsMs
r)�r)�w�r)�wb�rbc
Cs�tj�t�sByt�t�Wn&tk
r@tdttjd�YnXt	|d�}y&t
|t��}t�
||�WdQRXWn<ttfk
r�}ztd||ftjd�Wdd}~XYnXdS)NzUnable to create directory %s)�filerzUnable to create file %s: %s)rr	�existsr�mkdir�OSError�print�sys�stderrrr�
_PICK_DUMPr�dump�IOError)�resultsrrr�exr
r
r�save_results\s
r+cCs`tj�d�rtj�d�Stj�d�r0tj�d�Stj�d�r�tj�t���}xxtj�tj�|d��r�tj�tj�|d��}tj�tj�|d��r�tj�|d�Stj�tj�|d��rNtj�|d�SqNWdtjkr�tj�tjd�r�tjd}nHtj�d�}|dk�r
d}n,tj�|d�}tj�|��s6tj�|dd�}tj�|��s\tj�d	��rXd	}nd
}|S)zKsearch the pylint rc file and return its path if it find it, else None
    �pylintrcz	.pylintrcz__init__.pyz..�PYLINTRCr)rz/rootz.configz
/etc/pylintrcN)	rr	r �abspath�isfile�getcwdr
�environ�
expanduser)�curdirr,Z	user_homer
r
r�
find_pylintrcjs2
r4af
The following environment variables are used:
    * PYLINTHOME
    Path to the directory where persistent data for the run will be stored. If
not found, it defaults to ~/.pylint.d/ or .pylint.d (in the current working
directory).
    * PYLINTRC
    Path to the configuration file. See the documentation for the method used
to search for configuration file.
c@seZdZdZdS)�UnsupportedActionzBraised by set_option when it doesn't know what to do for an actionN)�__name__�
__module__�__qualname__�__doc__r
r
r
rr5�sr5cCs<t�|�}x,|D]$}||krd}t�||||f��qW|S)Nz-option %s: invalid value: %r, should be in %s)r�
_check_csv�optparse�OptionValueError)�choices�name�value�valuesZ	csv_value�msgr
r
r�_multiple_choice_validator�s

rBcCs$||kr d}t�||||f��|S)Nz-option %s: invalid value: %r, should be in %s)r;r<)r=r>r?rAr
r
r�_choice_validator�srCcCs
t�|�S)N)rr:)rr>r?r
r
r�_csv_validator�srDcCst|d�r|St�|�S)N�pattern)�hasattr�re�compile)rr>r?r
r
r�_regexp_validator�s
rIcs��fdd�t��|�D�S)Ncsg|]}t��|��qSr
)rI)�.0�val)rr>r
r�
<listcomp>�sz)_regexp_csv_validator.<locals>.<listcomp>)rD)rr>r?r
)rr>r�_regexp_csv_validator�srMcCsDt|t�rt|�S|dkrdS|dkr*dSd}t�|||f��dS)N)�y�yesT)�n�noFz<option %s: invalid yn value %r, should be in (y, yes, n, no))�
isinstance�int�boolr;r<)�optrr?rAr
r
r�
_yn_validator�s
rVcCs|sd}t�|��t�|�S)Nzindent string can't be empty.)r;r<r�_unquote)rUrr?rAr
r
r�_non_empty_string_validator�s
rXcCst|d||�S)Nr=)rC)rUr>r?r
r
r�<lambda>��rYcCst|d||�S)Nr=)rB)rUr>r?r
r
rrY�s)	�stringrS�regexp�
regexp_csv�csv�yn�choice�multiple_choice�non_empty_stringcCst|tkrtd|��yt||||�Stk
rnyt||�Stk
rht�d|||f��YnXYnXdS)NzUnsupported type "%s"z"%s value (%r) should be of type %s)�
VALIDATORSr�	TypeErrorr;r<)Zopttype�optdict�optionr?r
r
r�_call_validator�srg�cCs0y|d}Wntk
r |SXt||||�S)z�return a validated value for an option according to its type

    optional argument name is only used for error message formatting
    �type)�KeyErrorrg)r?rer>Z_typer
r
r�	_validate�s
rkcs�fdd�|jD�S)Ncs0g|](}t|dd�pd�kr|jtjk	r|�qS)�levelr)�getattr�helpr;�
SUPPRESS_HELP)rJrf)�outputlevelr
rrLsz"_level_options.<locals>.<listcomp>)�option_list)�grouprpr
)rpr�_level_options�s
rscCs�|jdks|js|jS|jddd�}y|jjj|}Wntk
rRd}Yn2X|�|�}|�||�}t	|j
||�}t�||�}|t
jks�|s�|j}|j�|jt|��S)z�Patch OptionParser.expand_default with custom behaviour

    This will handle defaults to avoid overriding values in the
    configuration file.
    Nr�)�parserZdefault_tagrnZ
_long_opts�options_manager�_all_optionsrj�get_option_def�option_attrnamerm�configrZ_format_option_valuer;Z
NO_DEFAULTZNO_DEFAULT_VALUEr�str)�selfrf�optname�providerr?rer
r
r�_expand_defaults

rccs(tj}zttj_dVWd|tj_XdS)N)r;�
HelpFormatterr�expand_default)Zorig_defaultr
r
r�_patch_optparses

r�cCst|j||�S)N)rBr=)rUr>r?r
r
r�#_multiple_choices_validating_option(sr�c@s�eZdZejjdZejjddgZe�ejj�Ze	ed<e
ed<eed<eed<e
ed<eed	<d
d�Zdd
�Zeejjd<dd�ZdS)�Option)r\r]r^r_rarb�hiderlr\r]r^r_rarbcOs0tjj|f|�|�t|d�r,|jr,tj|_dS)Nr�)r;r��__init__rFr�rorn)r|�opts�attrsr
r
rr�?szOption.__init__cCsv|jdkrV|jdkr t�d|��t|jttf�srt�dtt|j���d�d|��n|jdk	rrt�d|j|��dS)N)r`raz/must supply a list of choices for type 'choice'z1choices must be a list of strings ('%s' supplied)�'rz#must not supply choices for type %r)	rir=r;�OptionErrorrR�tuple�listr{�split)r|r
r
r�
_check_choiceDs


zOption._check_choicertcCsL|�||�}|jdkr4t||j�}|r4|�|�|}|�|j|j||||�S)N�named)Z
convert_valuerirm�dest�updateZtake_action�action)r|rUr?r@ruZexistentr
r
r�processXs

zOption.processN)r6r7r8r;r�ZTYPES�ATTRS�copyZTYPE_CHECKERrIrMrDrVr�rXr�r�Z
CHECK_METHODSr�r
r
r
rr�-sr�c@s&eZdZdd�Zddd�Zdd�ZdS)	�OptionParsercOs tjj|f|�dti|��dS)N�option_class)r;r�r�r�)r|r��args�kwargsr
r
rr�hszOptionParser.__init__NcCs�|dkr|j}t|dd�}|�|�g}|�|�d��|��|jrd|�tj�	||��|�d�xB|j
D]8}|j|krl|js�t
||�rl|�|�|��|�d�qlW|��d�|dd��S)N�output_levelr�Options�
rh���)�	formatterrmZstore_option_strings�append�format_heading�indentrqr;ZOptionContainer�format_option_help�
option_groupsrl�descriptionrs�format_help�dedentr
)r|r�rp�resultrrr
r
rr�ks"


zOptionParser.format_option_helpcCs||jkrt�|��|S)zDisable abbreviations.)Z	_long_optr;ZBadOptionError)r|rUr
r
r�_match_long_opt�s

zOptionParser._match_long_opt)N)r6r7r8r�r�r�r
r
r
rr�gs
r�c@steZdZddd�Zdd�Zdd	�Zd
d�Zdd
d�Zedd��Z	edd��Z
edd��Zedd��Zedd��Z
dS)�_ManHelpFormatterr��OcCstj�|||||�dS)N)r;r�r�)r|Zindent_incrementZmax_help_position�widthZshort_firstr
r
rr��sz_ManHelpFormatter.__init__cCsd|��S)Nz.SH %s
)�upper)r|Zheadingr
r
rr��sz _ManHelpFormatter.format_headingcCs|S)Nr
)r|r�r
r
r�format_description�sz$_ManHelpFormatter.format_descriptioncCs|y
|j}Wntk
r(|�|�}YnX|jrl|�|�}d�dd�|��D��}|�dd�}|�dd�}nd}d	||fS)
N� cSsg|]}|���qSr
)�strip)rJ�lr
r
rrL�sz3_ManHelpFormatter.format_option.<locals>.<listcomp>�\z\\z	[current:z	[default:rhz.IP "%s"
%s
)Zoption_strings�AttributeErrorZformat_option_stringsrnr�r
�
splitlinesr)r|rf�	optstringZ	help_text�help_stringr
r
r�
format_option�s

z_ManHelpFormatter.format_optionrcCsrd}y|��}Wntk
r,|��}YnX|�||j�}t|d�rT|�||j�}d|�||�||�	|�|fS)Nrh�	long_descz%s
%s
%s
%s)
Z_get_prog_namer�Z
get_prog_name�format_short_descriptionr�rF�format_long_descriptionr��format_title�format_synopsis)r|�	optparser�pkginfo�sectionr��pgm�
short_descr
r
r�format_head�s

z_ManHelpFormatter.format_headcCs$dt��dd�}d||||fS)Nz%d-%02d-%02drz.TH %s %s "%s" %s)�time�	localtime)r�r��dater
r
rr��sz_ManHelpFormatter.format_titlecCsd||��fS)Nz.SH NAME
.B %s
\- %s
)r�)r�r�r
r
rr��sz*_ManHelpFormatter.format_short_descriptioncCsd|S)Nz6.SH SYNOPSIS
.B  %s
[
.I OPTIONS
] [
.I <arguments>
]
r
)r�r
r
rr��s
z!_ManHelpFormatter.format_synopsiscCsRd�dd�|��D��}|�dd�}|���|�rB|t|�d�}d||��fS)Nr�css|]}|��VqdS)N)�lstrip)rJ�liner
r
r�	<genexpr>�sz<_ManHelpFormatter.format_long_description.<locals>.<genexpr>z
.
z

z.SH DESCRIPTION
.B %s
%s
)r
r�r�lower�
startswith�lenr�)r�r�r
r
rr��sz)_ManHelpFormatter.format_long_descriptioncCs<dt|d|j�|j|j|jf}t|d�r8|d|j7}|S)Nz}.SH SEE ALSO
/usr/share/doc/pythonX.Y-%s/

.SH BUGS
Please report bugs on the project's mailing list:
%s

.SH AUTHOR
%s <%s>
Zdebian_name�	copyrightz
.SH COPYRIGHT
%s
)rm�modname�mailinglist�author�author_emailrFr�)r��tailr
r
r�format_tail�s


z_ManHelpFormatter.format_tailN)rr�r�r)r)r6r7r8r�r�r�r�r��staticmethodr�r�r�r�r�r
r
r
rr��s


r�c@s�eZdZdZd,dd�Zd-dd�Zd.d	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zd/dd�Zd0dd�Z
dd�Zd1dd�Zdd �Zd!d"�Zd#d$�Zd2d%d&�Zd3d(d)�Zd4d*d+�ZdS)5�OptionsManagerMixInzLHandle configuration from both a configuration file and command line optionsNcCs@||_|j||d�g|_t��|_i|_i|_i|_d|_	dS)N)�versionr)
�config_file�
reset_parsers�options_providers�collections�OrderedDictrw�_short_options�_nocallback_options�	_mygroups�	_maxlevel)r|�usager�r�r
r
rr�s
zOptionsManagerMixIn.__init__rhcCs:tjdd�|_tt||d�|_||j_t|jjj	�|_
dS)N)�#�;)�inline_comment_prefixes)r�r�)�configparser�ConfigParser�cfgfile_parserr�r��cmdline_parserrv�setr�r��_optik_option_attrs)r|r�r�r
r
rr�s

z!OptionsManagerMixIn.reset_parsersTc
s�|jdkstd��xDtt|j��D]&}|j|j|jkr"|j�||�Pq"W|j�|�dd�|jD�}t|dd�}|r�|r�|�	|j
��|j||�n$x"|D]\}}|�
||j||�q�Wx<|D]4\�}�����fdd�|jD�}	|�	�||	|�q�WdS)	zregister an options providerrz!provider's priority can't be >= 0cSsg|]}d|dkr|�qS)rrrr
)rJrfr
r
rrL'szAOptionsManagerMixIn.register_options_provider.<locals>.<listcomp>r�r
cs(g|] }|d�dd����kr|�qS)rrrrh)�getr�)rJrf)�gnamer
rrL7sN)�priority�AssertionError�ranger�r��insertr��optionsrm�add_option_groupr>r�r9�add_optik_optionr�)
r|r~�	own_group�iZnon_group_spec_options�groupsrUreZgdocZgoptionsr
)r�r�register_options_providers*

z-OptionsManagerMixIn.register_options_providercCs�||jkr|j|}nRtj|j|��d�}|j�|�|j|_||j|<|dkrh||jjkrh|j�	|�x |D]\}}|�
||||�qnWdS)N)�title�DEFAULT)r�r;�OptionGroupr��
capitalizer�rlr��	_sections�add_sectionr�)r|Z
group_namerr�r~rrrUrer
r
rr�=s

z$OptionsManagerMixIn.add_option_groupcCs@|�|||�\}}|j||�}||j|<t|j|jp6d�|_dS)Nr)�optik_option�
add_optionrw�maxr�rl)r|r~ZoptikcontainerrUrer�rfr
r
rr�Rs
z$OptionsManagerMixIn.add_optik_optioncCs�t�|�}d|kr||j|<nd|d<|j|d<d|krpd|krj|�d�dk	rj|ddkrj|dd7<|d=dt|�g}d	|kr�||j|d	<|�d
|d	�|d	=x(t|���D]}||j	kr�|�
|�q�W||fS)zjget our personal option definition and return a suitable form for
        use with optik/optparse
        r��callback�defaultrnN)�
store_true�store_falsez [current: %default]z--�short�-)r�r��cb_set_provider_optionr�r{r�r�r��keysr��pop)r|r~rUrer��keyr
r
rr�Xs(


z OptionsManagerMixIn.optik_optioncCsF|�d�r|dd�}n|j|dd�}|dkr6d}|�||�dS)z!optik callback for option settingz--rtNr)r�r��global_set_option)r|rfrUr?rur
r
rrws
z*OptionsManagerMixIn.cb_set_provider_optioncCs|j|�||�dS)z)set option on the correct option providerN)rw�
set_option)r|rUr?r
r
rr	�sz%OptionsManagerMixIn.global_set_optionr
cCs�i}g}xv|jD]l}xf|��D]Z\}}|dkr4|j}||kr>qdd�|D�}|sRq||krd|�|�|�|g�}	|	|7}	qWqW|p�tj}d}
x:|D]2}|
r�td|d�t�	||�
�t||��d}
q�WdS)zrwrite a configuration file according to the current configuration
        into the given stream or stdout
        NcSs4g|],\}}}|�d�dk	r|�d�s|||f�qS)riNZ
deprecated)r�)rJrP�d�vr
r
rrL�sz7OptionsManagerMixIn.generate_config.<locals>.<listcomp>Fr�)rT)r��options_by_sectionr>r��
setdefaultr$�stdoutr#rZformat_sectionr��sorted)r|rZskipsections�encodingr
�sectionsr~r�r�Z
alloptionsZprintedr
r
r�generate_config�s0


z#OptionsManagerMixIn.generate_configrc	Cs2t��"t|j|||ptj|jd�WdQRXdS)N)rrl)r��_generate_manpager�r$rr�)r|r�r�rr
r
r�generate_manpage�sz$OptionsManagerMixIn.generate_manpagecCsx|jD]}|��qWdS)z-initialize configuration using default valuesN)r��
load_defaults)r|r~r
r
r�load_provider_defaults�sz*OptionsManagerMixIn.load_provider_defaultsc	s�d}x�|�jkr�d�dg|�d}|�jkr0P|f�fdd�	}dd�d	g|�}d
||d�}�jd}��|�j||�|j||ff7_|d7}qW|d
kr��j}|d
k	r�tj	�
|�}tj	�|�s�td�
|���|o�tj	�|�}	|	�rV�j}
tj|ddd��}|
�|�Wd
QRXx:t|
j���D](\}}
|���s*|
�r*|
|
j|��<�q*W|�s`d
S|	�rzd�
tj	�|��}nd}t|tjd�d
S)zrread the configuration file but do not load it (i.e. dispatching
        values to each options provider)
        rr�longz-helpcst��|��t�d�dS)Nr)r#rnr$�exit)rfrUrK�prl)r|r
r�helpfunc�sz6OptionsManagerMixIn.read_config_file.<locals>.helpfuncz%s verbose help.r�Zmorer�)r�r�rnrNz#The config file {:s} doesn't exist!rZ	utf_8_sig)rzUsing config file {}z1No config file found, using default configuration)r)r�r
rwr�r�r�r�r�rr	r2r r(�formatr��ior�	read_filer�r��items�isupperr�r.r#r$r%)r|r��verboseZ	helplevelrUrZhelpmsgrer~Zuse_config_fileru�fp�sectr@rAr
)r|r�read_config_file�s@

z$OptionsManagerMixIn.read_config_filecCsb|j}xV|��D]J}xD|�|�D]6\}}y|�||�Wq ttjfk
rTw Yq Xq WqWdS)zddispatch values previously read from a configuration file to each
        options provider)
        N)r�rrr	rjr;r�)r|rur�rfr?r
r
r�load_config_file�sz$OptionsManagerMixIn.load_config_filecKs
|�|�S)z4override configuration according to given parameters)�load_configuration_from_config)r|r�r
r
r�load_configuration�sz&OptionsManagerMixIn.load_configurationcCs<x6|��D]*\}}|�dd�}|j|}|�||�q
WdS)Nrr)rrrwr
)r|rzrUZ	opt_valuer~r
r
rr&�s
z2OptionsManagerMixIn.load_configuration_from_configc	Cs�t���|dkr tjdd�}nt|�}|jj|d�\}}xJ|jD]@}|j}x4|j�	�D]&}t
||d�}|dkrrqXt|||�qXWqBW|SQRXdS)ziOverride configuration according to command line parameters

        return additional arguments
        Nr)r�)r�r$�argvr�r��
parse_argsr�rz�__dict__rrm�setattr)r|r�r�r~rz�attrr?r
r
r�load_command_line_configurationsz3OptionsManagerMixIn.load_command_line_configurationrcCs:tj|j|��|d�}||_t|j|�|_|j�|�dS)z,add a dummy option section for help purpose )r�r�N)r;r�r�r�rlr�r�r�)r|r�r�rlrrr
r
r�add_help_sections
z$OptionsManagerMixIn.add_help_sectionc	Cs&||jj_t��|j��SQRXdS)z.return the usage string for available options N)r�r�r�r�r�)r|rlr
r
rrns
zOptionsManagerMixIn.help)NN)rhN)T)Nr
N)rN)NN)N)r)r)r6r7r8r9r�r�r�r�r�r�rr	rrrr$r%r'r&r-r.rnr
r
r
rr�s&



 

!


1


	r�c@sfeZdZdZdZdZdZdZdd�Zdd	�Z	ddd�Z
d
d�Zddd�Zdd�Z
dd�Zddd�Zd
S)�OptionsProviderMixInz-Mixin to provide options to an OptionsManagerr�rr
rcCst��|_|��dS)N)r;ZValuesrzr)r|r
r
rr�-s
zOptionsProviderMixIn.__init__cCsVxP|jD]F\}}|�d�}|dkr|dkr4|�|�}|�d�}|�||||�qWdS)z,initialize the provider using default valuesr�r�Nr)r�r�rxr
)r|rUrer�rr
r
rr1s


z"OptionsProviderMixIn.load_defaultsNcCs&|dkr|�|�}|�d|�dd��S)z-get the config attribute corresponding to optNr�rr)rxr�r)r|rUrer
r
rry<s
z$OptionsProviderMixIn.option_attrnamecCst|j|�|�d�S)z*get the current value for the given optionN)rmrzry)r|rUr
r
r�option_valueBsz!OptionsProviderMixIn.option_valuecCsZ|dkr|�|�}|dk	r&t|||�}|dkr:|�dd�}|dkrZt|j|�||�|�n�|dkrzt|j|�||�d�n�|dkr�t|j|�||�d�n�|dk�r0|�||�}t|j|d�}|dk�rt|tt	f�r�|}n|dk	r�g}|�
|�t|j||�n,t|t	��r$t|j|||f�n
|�
|�n&|d	k�rN|d	d||d�nt|��dS)
z?method called to set an option (registered in the options list)Nr��store)r�countrrrr�r�)rxrkr�r+rzryrmrRr�r�r�r5)r|r}r?r�reZ_listr
r
rr
Fs8




zOptionsProviderMixIn.set_optioncCsH|js
t�x"|jD]}|d|kr|dSqWt�d||jf|��dS)z7return the dictionary defining an option given its namerrzno such option %s in section %rN)r�r�r;r�r>)r|rUrfr
r
rrxgs
z#OptionsProviderMixIn.get_option_defccs�i}x6|jD],\}}|�|�d�g��|||�|�f�qWd|krTd|�d�fVx&t|���D]\}}|��|fVqbWdS)ztreturn an iterator on options grouped by section

        (section, [list of (optname, optdict, optvalue)])
        rrN)	r�rr�r�r0rrrr�)r|rr}rer�r�r
r
rr
qsz'OptionsProviderMixIn.options_by_sectionccs6|dkr|j}x"|D]\}}|||�|�fVqWdS)N)r�r0)r|r�r}rer
r
r�options_and_values�sz'OptionsProviderMixIn.options_and_values)N)NN)N)r6r7r8r9r�r>r�rlr�rryr0r
rxr
r3r
r
r
rr/$s

!
r/c@seZdZdZdd�ZdS)�ConfigurationMixInz]basic mixin for simple configurations which don't need the
    manager / providers model
    c	Os�|s|�dd�tj|f|�|�t�|�t|dd�s�g|_xT|jD]J\}}y|d��df}Wntk
rxwFYnX||jkrF|j�	|�qFW|j
|dd�dS)Nr�rhr�rrF)r�)rr�r�r/rmr�r�r�rjr�r�)r|r�r�rreZgdefr
r
rr��s

zConfigurationMixIn.__init__N)r6r7r8r9r�r
r
r
rr4�sr4rcCsPt�}||_||_t|�|||�|d�t|�|�|d�t|�|�|d�dS)N)r)r�r�rur#r�r�r�)r�r�r�rrlr�r
r
rr�sr)rh)>r9�
__future__r�
contextlibr�r�rr;rrrGr$r�r��pylintrr	r2Z	USER_HOMEr1r�dirnamer
rr�version_infor&rr+r4r-�globalsZENV_HELPrr5rBrCrDrIrMrVrXrWrSrHrcrgrkrsr�contextmanagerr�r�r�r�r�r�r�r/r4rrr
r
r
r�<module>#s~	

	

"	

	
:!{#c