3
ûâdeôx  ã               @   sž  d dl Z d dlZd dlZd dlZd dlZd dlmZ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 ddlmZmZmZ eeef Zeeeef Zeded�Zeeegef ZG dd	„ d	eƒZG d
d„ de jd�Z G dd„ de ƒZ!G dd„ de!ƒZ"edeegef edeegef dœdd„Z#G dd„ de!ƒZ$ej%dƒZ&ee
e dœdd„Z'eedœdd„Z(e
e e
e ee
e e
e f dœdd„Z)G d d!„ d!e ƒZ*dS )"é    N)ÚCallableÚDictÚIterableÚIteratorÚListÚOptionalÚPatternÚSetÚTupleÚTypeVarÚUnioné   )Úcanonicalize_version)ÚLegacyVersionÚVersionÚparseÚVersionTypeVar)Zboundc               @   s   e Zd ZdZdS )ÚInvalidSpecifierzH
    An invalid specifier was found, users should refer to PEP 440.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú?/tmp/pip-build-red6nood/pip/pip/_vendor/packaging/specifiers.pyr   !   s   r   c               @   sÒ   e Zd Zejedœdd„ƒZejedœdd„ƒZeje	e
dœdd„ƒZeje	e
dœd	d
„ƒZejee
 dœdd„ƒZeje
ddœdd„ƒZejdeee
 e
dœdd„ƒZejdee ee
 ee dœdd„ƒZdS )ÚBaseSpecifier)Úreturnc             C   s   dS )zŽ
        Returns the str representation of this Specifier like object. This
        should be representative of the Specifier itself.
        Nr   )Úselfr   r   r   Ú__str__(   s    zBaseSpecifier.__str__c             C   s   dS )zF
        Returns a hash value for this Specifier like object.
        Nr   )r   r   r   r   Ú__hash__/   s    zBaseSpecifier.__hash__)Úotherr   c             C   s   dS )zq
        Returns a boolean representing whether or not the two Specifier like
        objects are equal.
        Nr   )r   r   r   r   r   Ú__eq__5   s    zBaseSpecifier.__eq__c             C   s   dS )zu
        Returns a boolean representing whether or not the two Specifier like
        objects are not equal.
        Nr   )r   r   r   r   r   Ú__ne__<   s    zBaseSpecifier.__ne__c             C   s   dS )zg
        Returns whether or not pre-releases as a whole are allowed by this
        specifier.
        Nr   )r   r   r   r   ÚprereleasesC   s    zBaseSpecifier.prereleasesN)Úvaluer   c             C   s   dS )zd
        Sets whether or not pre-releases as a whole are allowed by this
        specifier.
        Nr   )r   r#   r   r   r   r"   J   s    )Úitemr"   r   c             C   s   dS )zR
        Determines if the given item is contained within this specifier.
        Nr   )r   r$   r"   r   r   r   ÚcontainsQ   s    zBaseSpecifier.contains)Úiterabler"   r   c             C   s   dS )z•
        Takes an iterable of items and filters them so that only items which
        are contained within this specifier are allowed in it.
        Nr   )r   r&   r"   r   r   r   ÚfilterW   s    zBaseSpecifier.filter)N)N)r   r   r   ÚabcÚabstractmethodÚstrr   Úintr   ÚobjectÚboolr    r!   Úabstractpropertyr   r"   Úsetterr%   r   r   r'   r   r   r   r   r   '   s"   r   )Ú	metaclassc               @   sZ  e Zd ZU i Zeeef ee d+eee	 ddœdd„Z
edœdd„Zedœd	d
„Zeeeef dœdd„ƒZedœdd„Zee	dœdd„Zee	dœdd„Zeedœdd„Zeedœdd„Zeedœdd„ƒZeedœdd„ƒZeee	 dœdd„ƒZeje	dd œd!d„ƒZee	d"œd#d$„Zd,eee	 e	d%œd&d'„Zd-e e! ee	 e e! d(œd)d*„Z"dS ).Ú_IndividualSpecifierÚ N)Úspecr"   r   c             C   sH   | j j|ƒ}|s td|› d�ƒ‚|jdƒjƒ |jdƒjƒ f| _|| _d S )NzInvalid specifier: 'ú'ÚoperatorÚversion)Ú_regexÚsearchr   ÚgroupÚstripÚ_specÚ_prereleases)r   r3   r"   Úmatchr   r   r   Ú__init__f   s    z_IndividualSpecifier.__init__)r   c             C   s0   | j d k	rd| j›�nd}dj| jjt| ƒ|ƒS )Nz, prereleases=r2   z<{}({!r}{})>)r<   r"   ÚformatÚ	__class__r   r*   )r   Úprer   r   r   Ú__repr__s   s    z_IndividualSpecifier.__repr__c             C   s   dj | jŽ S )Nz{}{})r?   r;   )r   r   r   r   r   |   s    z_IndividualSpecifier.__str__c             C   s   | j d t| j d ƒfS )Nr   r   )r;   r   )r   r   r   r   Ú_canonical_spec   s    z$_IndividualSpecifier._canonical_specc             C   s
   t | jƒS )N)ÚhashrC   )r   r   r   r   r   ƒ   s    z_IndividualSpecifier.__hash__)r   r   c             C   sP   t |tƒr4y| jt|ƒƒ}W qD tk
r0   tS X nt || jƒsDtS | j|jkS )N)Ú
isinstancer*   r@   r   ÚNotImplementedrC   )r   r   r   r   r   r    †   s    
z_IndividualSpecifier.__eq__c             C   sP   t |tƒr4y| jt|ƒƒ}W qD tk
r0   tS X nt || jƒsDtS | j|jkS )N)rE   r*   r@   r   rF   r;   )r   r   r   r   r   r!   ‘   s    
z_IndividualSpecifier.__ne__)Úopr   c             C   s   t | d| j| › �ƒ}|S )NZ	_compare_)ÚgetattrÚ
_operators)r   rG   Úoperator_callabler   r   r   Ú_get_operatorœ   s    z"_IndividualSpecifier._get_operator)r6   r   c             C   s   t |ttfƒst|ƒ}|S )N)rE   r   r   r   )r   r6   r   r   r   Ú_coerce_version¢   s    z$_IndividualSpecifier._coerce_versionc             C   s
   | j d S )Nr   )r;   )r   r   r   r   r5   §   s    z_IndividualSpecifier.operatorc             C   s
   | j d S )Nr   )r;   )r   r   r   r   r6   «   s    z_IndividualSpecifier.versionc             C   s   | j S )N)r<   )r   r   r   r   r"   ¯   s    z _IndividualSpecifier.prereleases)r#   r   c             C   s
   || _ d S )N)r<   )r   r#   r   r   r   r"   ³   s    )r$   r   c             C   s
   | j |ƒS )N)r%   )r   r$   r   r   r   Ú__contains__·   s    z!_IndividualSpecifier.__contains__)r$   r"   r   c             C   s@   |d kr| j }| j|ƒ}|jr(| r(dS | j| jƒ}||| jƒS )NF)r"   rL   Úis_prereleaserK   r5   r6   )r   r$   r"   Znormalized_itemrJ   r   r   r   r%   º   s    
z_IndividualSpecifier.contains)r&   r"   r   c             c   sŒ   d}g }d|d k	r|ndi}xL|D ]D}| j |ƒ}| j|f|Žr"|jr\|pL| j r\|j|ƒ q"d}|V  q"W | rˆ|rˆx|D ]
}|V  qzW d S )NFr"   T)rL   r%   rN   r"   Úappend)r   r&   r"   ÚyieldedÚfound_prereleasesÚkwr6   Úparsed_versionr   r   r   r'   Ñ   s    




z_IndividualSpecifier.filter)r2   N)N)N)#r   r   r   rI   r   r*   r   r7   r   r-   r>   rB   r   Úpropertyr
   rC   r+   r   r,   r    r!   ÚCallableOperatorrK   ÚUnparsedVersionÚParsedVersionrL   r5   r6   r"   r/   rM   r%   r   r   r'   r   r   r   r   r1   a   s2   
	
r1   c                   sÚ   e Zd ZdZejde d ejejB ƒZdddddd	d
œZ	d e
ee ddœ‡ fdd„Zeedœdd„Zee
edœdd„Zee
edœdd„Zee
edœdd„Zee
edœdd„Zee
edœdd„Zee
edœdd„Z‡  ZS )!ÚLegacySpecifieraÛ  
        (?P<operator>(==|!=|<=|>=|<|>))
        \s*
        (?P<version>
            [^,;\s)]* # Since this is a "legacy" specifier, and the version
                      # string can be just about anything, we match everything
                      # except for whitespace, a semi-colon for marker support,
                      # a closing paren since versions can be enclosed in
                      # them, and a comma since it's a version separator.
        )
        z^\s*z\s*$ÚequalÚ	not_equalÚless_than_equalÚgreater_than_equalÚ	less_thanÚgreater_than)z==z!=z<=z>=ú<ú>r2   N)r3   r"   r   c                s   t ƒ j||ƒ tjdtƒ d S )NzZCreating a LegacyVersion has been deprecated and will be removed in the next major release)Úsuperr>   ÚwarningsÚwarnÚDeprecationWarning)r   r3   r"   )r@   r   r   r>     s    zLegacySpecifier.__init__)r6   r   c             C   s   t |tƒstt|ƒƒ}|S )N)rE   r   r*   )r   r6   r   r   r   rL     s    
zLegacySpecifier._coerce_version)Úprospectiver3   r   c             C   s   || j |ƒkS )N)rL   )r   re   r3   r   r   r   Ú_compare_equal  s    zLegacySpecifier._compare_equalc             C   s   || j |ƒkS )N)rL   )r   re   r3   r   r   r   Ú_compare_not_equal  s    z"LegacySpecifier._compare_not_equalc             C   s   || j |ƒkS )N)rL   )r   re   r3   r   r   r   Ú_compare_less_than_equal"  s    z(LegacySpecifier._compare_less_than_equalc             C   s   || j |ƒkS )N)rL   )r   re   r3   r   r   r   Ú_compare_greater_than_equal%  s    z+LegacySpecifier._compare_greater_than_equalc             C   s   || j |ƒk S )N)rL   )r   re   r3   r   r   r   Ú_compare_less_than*  s    z"LegacySpecifier._compare_less_thanc             C   s   || j |ƒkS )N)rL   )r   re   r3   r   r   r   Ú_compare_greater_than-  s    z%LegacySpecifier._compare_greater_than)r2   N)r   r   r   Ú
_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASEr7   rI   r*   r   r-   r>   rV   r   rL   rf   rg   rh   ri   rj   rk   Ú__classcell__r   r   )r@   r   rX   õ   s"   	rX   Ú	Specifier)Úfnr   c                s&   t jˆ ƒdtttdœ‡ fdd„ƒ}|S )Nrr   )r   re   r3   r   c                s   t |tƒsdS ˆ | ||ƒS )NF)rE   r   )r   re   r3   )rs   r   r   Úwrapped4  s    
z)_require_version_compare.<locals>.wrapped)Ú	functoolsÚwrapsrW   r*   r-   )rs   rt   r   )rs   r   Ú_require_version_compare1  s    rw   c            	   @   s  e Zd ZdZejde d ejejB ƒZdddddd	d
ddœZ	e
eeedœdd„ƒZe
eeedœdd„ƒZe
eeedœdd„ƒZe
eeedœdd„ƒZe
eeedœdd„ƒZe
eeedœdd„ƒZe
eeedœdd„ƒZeeedœdd„Zeedœd d!„ƒZejed"d#œd$d!„ƒZd"S )%rr   a  
        (?P<operator>(~=|==|!=|<=|>=|<|>|===))
        (?P<version>
            (?:
                # The identity operators allow for an escape hatch that will
                # do an exact string match of the version you wish to install.
                # This will not be parsed by PEP 440 and we cannot determine
                # any semantic meaning from it. This operator is discouraged
                # but included entirely as an escape hatch.
                (?<====)  # Only match for the identity operator
                \s*
                [^\s]*    # We just match everything, except for whitespace
                          # since we are only testing for strict identity.
            )
            |
            (?:
                # The (non)equality operators allow for wild card and local
                # versions to be specified so we have to define these two
                # operators separately to enable that.
                (?<===|!=)            # Only match for equals and not equals

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?

                # You cannot use a wild card and a dev or local version
                # together so group them with a | and make them optional.
                (?:
                    (?:[-_\.]?dev[-_\.]?[0-9]*)?         # dev release
                    (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
                    |
                    \.\*  # Wild card syntax of .*
                )?
            )
            |
            (?:
                # The compatible operator requires at least two digits in the
                # release segment.
                (?<=~=)               # Only match for the compatible operator

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)+   # release  (We have a + instead of a *)
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
            |
            (?:
                # All other operators only allow a sub set of what the
                # (non)equality operators do. Specifically they do not allow
                # local versions to be specified nor do they allow the prefix
                # matching wild cards.
                (?<!==|!=|~=)         # We have special cases for these
                                      # operators so we want to make sure they
                                      # don't match here.

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
        )
        z^\s*z\s*$Ú
compatiblerY   rZ   r[   r\   r]   r^   Ú	arbitrary)z~=z==z!=z<=z>=r_   r`   z===)re   r3   r   c             C   sJ   dj ttjtt|ƒƒƒd d… ƒ}|d7 }| jdƒ||ƒoH| jdƒ||ƒS )NÚ.r   z.*z>=z==éÿÿÿÿ)ÚjoinÚlistÚ	itertoolsÚ	takewhileÚ_is_not_suffixÚ_version_splitrK   )r   re   r3   Úprefixr   r   r   Ú_compare_compatible©  s
    zSpecifier._compare_compatiblec       	      C   sz   |j dƒrVt|jƒ}t|d d… ƒ}tt|ƒƒ}|d t|ƒ… }t||ƒ\}}||kS t|ƒ}|jsnt|jƒ}||kS d S )Nz.*é   éþÿÿÿ)Úendswithr   Úpublicr�   r*   ÚlenÚ_pad_versionÚlocal)	r   re   r3   Z
split_specZsplit_prospectiveZshortened_prospectiveZpadded_specZpadded_prospectiveZspec_versionr   r   r   rf   ¿  s    


zSpecifier._compare_equalc             C   s   | j ||ƒ S )N)rf   )r   re   r3   r   r   r   rg   ç  s    zSpecifier._compare_not_equalc             C   s   t |jƒt |ƒkS )N)r   r‡   )r   re   r3   r   r   r   rh   ë  s    z"Specifier._compare_less_than_equalc             C   s   t |jƒt |ƒkS )N)r   r‡   )r   re   r3   r   r   r   ri   ó  s    z%Specifier._compare_greater_than_equal)re   Úspec_strr   c             C   s>   t |ƒ}||k sdS |j r:|jr:t |jƒt |jƒkr:dS dS )NFT)r   rN   Úbase_version)r   re   r‹   r3   r   r   r   rj   ý  s    zSpecifier._compare_less_thanc             C   s`   t |ƒ}||ksdS |j r:|jr:t |jƒt |jƒkr:dS |jd k	r\t |jƒt |jƒkr\dS dS )NFT)r   Úis_postreleaserŒ   rŠ   )r   re   r‹   r3   r   r   r   rk     s    
zSpecifier._compare_greater_thanc             C   s   t |ƒjƒ t |ƒjƒ kS )N)r*   Úlower)r   re   r3   r   r   r   Ú_compare_arbitrary7  s    zSpecifier._compare_arbitrary)r   c             C   sR   | j d k	r| j S | j\}}|d
krN|dkr@|jdƒr@|d d… }t|ƒjrNdS d	S )Nú==ú>=ú<=ú~=ú===z.*r„   TF)r�   r‘   r’   r“   r”   r…   )r<   r;   r†   r   rN   )r   r5   r6   r   r   r   r"   :  s    


zSpecifier.prereleasesN)r#   r   c             C   s
   || _ d S )N)r<   )r   r#   r   r   r   r"   S  s    )r   r   r   rl   rm   rn   ro   rp   r7   rI   rw   rW   r*   r-   rƒ   rf   rg   rh   ri   rj   rk   r   r�   rT   r"   r/   r   r   r   r   rr   =  s<   ]'z^([0-9]+)((?:a|b|c|rc)[0-9]+)$)r6   r   c             C   sD   g }x:| j dƒD ],}tj|ƒ}|r2|j|jƒ ƒ q|j|ƒ qW |S )Nrz   )ÚsplitÚ_prefix_regexr8   ÚextendÚgroupsrO   )r6   Úresultr$   r=   r   r   r   r�   [  s    
r�   )Úsegmentr   c                s   t ‡ fdd„dD ƒƒ S )	Nc             3   s   | ]}ˆ j |ƒV  qd S )N)Ú
startswith)Ú.0r‚   )rš   r   r   ú	<genexpr>h  s    z!_is_not_suffix.<locals>.<genexpr>ÚdevÚaÚbÚrcÚpost)rž   rŸ   r    r¡   r¢   )Úany)rš   r   )rš   r   r€   f  s    r€   )ÚleftÚrightr   c          	   C   sæ   g g  }}|j ttjdd„ | ƒƒƒ |j ttjdd„ |ƒƒƒ |j | t|d ƒd … ƒ |j |t|d ƒd … ƒ |jddgtdt|d ƒt|d ƒ ƒ ƒ |jddgtdt|d ƒt|d ƒ ƒ ƒ ttj|Ž ƒttj|Ž ƒfS )Nc             S   s   | j ƒ S )N)Úisdigit)Úxr   r   r   Ú<lambda>p  s    z_pad_version.<locals>.<lambda>c             S   s   | j ƒ S )N)r¦   )r§   r   r   r   r¨   q  s    r   r   Ú0)rO   r}   r~   r   rˆ   ÚinsertÚmaxÚchain)r¤   r¥   Ú
left_splitÚright_splitr   r   r   r‰   l  s    
,,r‰   c               @   s  e Zd Zd%eee ddœdd„Zedœdd„Zedœd	d
„Ze	dœdd„Z
ed ef d dœdd„Zeedœdd„Zeedœdd„Ze	dœdd„Zee dœdd„Zeee dœdd„ƒZejeddœdd„ƒZeedœdd„Zd&eee edœd d!„Zd'ee ee ee d"œd#d$„ZdS )(ÚSpecifierSetr2   N)Ú
specifiersr"   r   c             C   sr   dd„ |j dƒD ƒ}tƒ }xB|D ]:}y|jt|ƒƒ W q  tk
rX   |jt|ƒƒ Y q X q W t|ƒ| _|| _d S )Nc             S   s   g | ]}|j ƒ r|j ƒ ‘qS r   )r:   )rœ   Úsr   r   r   ú
<listcomp>…  s    z)SpecifierSet.__init__.<locals>.<listcomp>ú,)	r•   ÚsetÚaddrr   r   rX   Ú	frozensetÚ_specsr<   )r   r°   r"   Zsplit_specifiersÚparsedÚ	specifierr   r   r   r>     s    

zSpecifierSet.__init__)r   c             C   s*   | j d k	rd| j›�nd}djt| ƒ|ƒS )Nz, prereleases=r2   z<SpecifierSet({!r}{})>)r<   r"   r?   r*   )r   rA   r   r   r   rB   —  s    zSpecifierSet.__repr__c             C   s   dj tdd„ | jD ƒƒƒS )Nr³   c             s   s   | ]}t |ƒV  qd S )N)r*   )rœ   r±   r   r   r   r�   ¡  s    z'SpecifierSet.__str__.<locals>.<genexpr>)r|   Úsortedr·   )r   r   r   r   r      s    zSpecifierSet.__str__c             C   s
   t | jƒS )N)rD   r·   )r   r   r   r   r   £  s    zSpecifierSet.__hash__)r   r   c             C   s˜   t |tƒrt|ƒ}nt |tƒs"tS tƒ }t| j|jB ƒ|_| jd krX|jd k	rX|j|_n<| jd k	rv|jd krv| j|_n| j|jkrŒ| j|_ntdƒ‚|S )NzFCannot combine SpecifierSets with True and False prerelease overrides.)rE   r*   r¯   rF   r¶   r·   r<   Ú
ValueError)r   r   r¹   r   r   r   Ú__and__¦  s    





zSpecifierSet.__and__c             C   s6   t |ttfƒrtt|ƒƒ}nt |tƒs*tS | j|jkS )N)rE   r*   r1   r¯   rF   r·   )r   r   r   r   r   r    ½  s
    
zSpecifierSet.__eq__c             C   s6   t |ttfƒrtt|ƒƒ}nt |tƒs*tS | j|jkS )N)rE   r*   r1   r¯   rF   r·   )r   r   r   r   r   r!   Å  s
    
zSpecifierSet.__ne__c             C   s
   t | jƒS )N)rˆ   r·   )r   r   r   r   Ú__len__Í  s    zSpecifierSet.__len__c             C   s
   t | jƒS )N)Úiterr·   )r   r   r   r   Ú__iter__Ð  s    zSpecifierSet.__iter__c             C   s.   | j d k	r| j S | jsd S tdd„ | jD ƒƒS )Nc             s   s   | ]}|j V  qd S )N)r"   )rœ   r±   r   r   r   r�   ã  s    z+SpecifierSet.prereleases.<locals>.<genexpr>)r<   r·   r£   )r   r   r   r   r"   Ó  s
    
zSpecifierSet.prereleases)r#   r   c             C   s
   || _ d S )N)r<   )r   r#   r   r   r   r"   å  s    )r$   r   c             C   s
   | j |ƒS )N)r%   )r   r$   r   r   r   rM   é  s    zSpecifierSet.__contains__)r$   r"   r   c                sN   t ˆ ttfƒstˆ ƒ‰ ˆd kr$| j‰ˆ r4ˆ jr4dS t‡ ‡fdd„| jD ƒƒS )NFc             3   s   | ]}|j ˆ ˆd �V  qdS ))r"   N)r%   )rœ   r±   )r$   r"   r   r   r�     s    z(SpecifierSet.contains.<locals>.<genexpr>)rE   r   r   r   r"   rN   Úallr·   )r   r$   r"   r   )r$   r"   r   r%   ì  s    zSpecifierSet.contains)r&   r"   r   c             C   s¼   |d kr| j }| jr:x | jD ]}|j|t|ƒd�}qW |S g }g }xZ|D ]R}t|ttfƒsdt|ƒ}n|}t|tƒrtqH|jr�| r�|sš|j	|ƒ qH|j	|ƒ qHW | r´|r´|d kr´|S |S d S )N)r"   )
r"   r·   r'   r-   rE   r   r   r   rN   rO   )r   r&   r"   r3   ÚfilteredrQ   r$   rS   r   r   r   r'   	  s*    


zSpecifierSet.filter)r2   N)N)N)r   r   r   r*   r   r-   r>   rB   r   r+   r   r   r¼   r,   r    r!   r½   r   r1   r¿   rT   r"   r/   rV   rM   r%   r   r   r'   r   r   r   r   r¯   ~  s&   
	
r¯   )+r(   ru   r~   rm   rb   Útypingr   r   r   r   r   r   r   r	   r
   r   r   Úutilsr   r6   r   r   r   rW   r*   rV   r   r-   rU   r»   r   ÚABCMetar   r1   rX   rw   rr   rn   r–   r�   r€   r‰   r¯   r   r   r   r   Ú<module>   s4   4: =
  
*