§
    k•jZ ã                  óÊ  — U d Z ddlmZ ddlZddlZ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 ddlmZ ddlmZmZ ej        dk    rdd	l	mZ ne
rdd	lmZ g d
¢Zd]d„Zd^d„Zd_d„Z ed¦  «        Zeee f         Z! ede!¬¦  «        Z"eee ge#f         Z$ ed¦  «        Z%de&d<   d`d„Z' G d„ dej(        ¦  «        Z)ej*         G d „ d!¦  «        ¦   «         Z+ej*         G d"„ d#¦  «        ¦   «         Z,ej*         G d$„ d%¦  «        ¦   «         Z-e	j
        reee+df         Z.e/e,e-f         Z0 e,dd&¦  «        Z1 e-dd&¦  «        Z2e1e2ffZ3d'e&d(<   dad,„Z4dbd1„Z5dcd4„Z6dcd5„Z7ddd8„Z8dcd9„Z9dcd:„Z:dcd;„Z;ded>„Z< G d?„ d@e=¦  «        Z> G dA„ dBej?        ¬C¦  «        Z@ G dD„ dEe@¦  «        ZA ejB        dF¦  «        ZCdfdL„ZDdgdN„ZEdhdP„ZFdidR„ZGdjdU„ZHdkdW„ZIdldZ„ZJ G d[„ d\e@¦  «        ZKdS )mzŠ
.. testsetup::

    from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from packaging.version import Version
é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚCallableÚFinalÚIterableÚIteratorÚSequenceÚTypeVarÚUnioné   )Úcanonicalize_version)ÚInvalidVersionÚVersion)é   é
   )Ú	TypeGuard)ÚBaseSpecifierÚInvalidSpecifierÚ	SpecifierÚSpecifierSetÚreturnú	list[str]c                 ó   — t           S ©N)Ú__all__© ó    úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/packaging/specifiers.pyÚ__dir__r    0   s   € Ý€Nr   ÚspecÚobjectúTypeGuard[tuple[str, str]]c               ó¾   — t          | t          ¦  «        oHt          | ¦  «        dk    o5t          | d         t          ¦  «        ot          | d         t          ¦  «        S )Né   r   r   )Ú
isinstanceÚtupleÚlenÚstr)r!   s    r   Ú_validate_specr*   4   sT   € å�4�ÑÔð 	%Ý�‰IŒI˜ŠNð	%å�t˜A”w¥Ñ$Ô$ð	%õ �t˜A”w¥Ñ$Ô$ð	r   ÚpreúTypeGuard[bool | None]c               ó4   — | d u pt          | t          ¦  «        S r   )r&   Úbool)r+   s    r   Ú_validate_prer/   =   s   € Ø�$ˆ;Ð/�* S­$Ñ/Ô/Ð/r   ÚTÚUnparsedVersionVar)Úboundz0.dev0zFinal[Version]Ú_MIN_VERSIONÚreleaseútuple[int, ...]c                ó¼   — t          | ¦  «        }|dk    r)| |dz
           dk    r|dz  }|dk    r| |dz
           dk    °|t          | ¦  «        k    r| n	| d|…         S )zDStrip trailing zeros from a release tuple for normalized comparison.r   r   N)r(   )r4   Úends     r   Ú_trim_releaser8   J   sr   € å
ˆg‰,Œ,€CØ
�Š'ˆ'�g˜c A™gÔ&¨!Ò+Ð+Øˆq‰ˆð �Š'ˆ'�g˜c A™gÔ&¨!Ò+Ð+à�S ™\œ\Ò)Ð)ˆ7ˆ7¨w°t¸°t¬}Ð<r   c                  óN   — e Zd ZdZ ej        ¦   «         Z ej        ¦   «         ZdS )Ú_BoundaryKindz5Where a boundary marker sits in the version ordering.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautoÚAFTER_LOCALSÚAFTER_POSTSr   r   r   r:   r:   R   s.   € € € € € Ø?Ð?à�4”9‘;”;€LØ�$”)‘+”+€K€K€Kr   r:   c                  óF   — e Zd ZdZdZdd	„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dS )Ú_BoundaryVersiona  A point on the version line between two real PEP 440 versions.

    Some specifier semantics imply boundaries between real versions:
    ``<=1.0`` includes ``1.0+local`` and ``>1.0`` excludes
    ``1.0.post0``.  No real :class:`Version` falls on those boundaries,
    so this class creates values that sort between the real versions
    on either side.

    Two kinds exist, shown relative to a base version V::

        V < V+local < AFTER_LOCALS(V) < V.post0 < AFTER_POSTS(V)

    ``AFTER_LOCALS`` sits after V and every V+local, but before
    V.post0.  Upper bound of ``<=V``, ``==V``, ``!=V``.

    ``AFTER_POSTS`` sits after every V.postN, but before the next
    release segment.  Lower bound of ``>V`` (final or pre-release V)
    to exclude post-releases per PEP 440.
    )Ú_kindÚ_trimmed_releaseÚversionrG   r   Úkindr:   r   ÚNonec                óT   — || _         || _        t          |j        ¦  «        | _        d S r   )rG   rE   r8   r4   rF   )ÚselfrG   rH   s      r   Ú__init__z_BoundaryVersion.__init__q   s(   € ØˆŒØˆŒ
Ý -¨g¬oÑ >Ô >ˆÔÐÐr   Úotherr.   c                ó*  — | j         }|j        |j        k    r-t          |j        ¦  «        | j        k    r|j        |j        k    sdS | j        t          j        k    r |j	        |j	        k    o|j
        |j
        k    S |j
        |j
        k    p|j	        duS )z6Is ``other`` a version that this boundary sorts above?FN)rG   Úepochr8   r4   rF   r+   rE   r:   rA   ÚpostÚdev)rK   rM   Úvs      r   Ú
_is_familyz_BoundaryVersion._is_familyv   sŒ   € àŒLˆàŒK˜1œ7Ò"Ð"Ý˜eœmÑ,Ô,°Ô0EÒEÐEØ”	˜QœUÒ"Ð"à�5ØŒ:�Ô3Ò3Ð3à”: ¤Ò'Ð>¨E¬I¸¼Ò,>Ð>àŒy˜AœEÒ!Ð; U¤Z°tÐ%;Ð;r   r"   c                óz   — t          |t          ¦  «        r | j        |j        k    o| j        |j        k    S t          S r   )r&   rD   rG   rE   ÚNotImplemented©rK   rM   s     r   Ú__eq__z_BoundaryVersion.__eq__…   s9   € Ý�eÕ-Ñ.Ô.ð 	OØ”< 5¤=Ò0ÐN°T´ZÀ5Ä;Ò5NÐNÝÐr   ú_BoundaryVersion | Versionc                óâ   — t          |t          ¦  «        r:| j        |j        k    r| j        |j        k     S | j        j        |j        j        k     S |                      |¦  «         o
| j        |k     S r   )r&   rD   rG   rE   ÚvaluerS   rV   s     r   Ú__lt__z_BoundaryVersion.__lt__Š   si   € Ý�eÕ-Ñ.Ô.ð 	8ØŒ|˜uœ}Ò,Ð,Ø”| e¤mÒ3Ð3Ø”:Ô# e¤kÔ&7Ò7Ð7Ø—?’? 5Ñ)Ô)Ð)ÐB¨d¬l¸UÒ.BÐBr   Úintc                ó8   — t          | j        | j        f¦  «        S r   )ÚhashrG   rE   ©rK   s    r   Ú__hash__z_BoundaryVersion.__hash__‘   s   € Ý�T”\ 4¤:Ð.Ñ/Ô/Ð/r   r)   c                óJ   — | j         j        › d| j        ›d| j        j        › d�S )Nú(z, ú))Ú	__class__r;   rG   rE   Únamer_   s    r   Ú__repr__z_BoundaryVersion.__repr__”   s,   € Ø”.Ô)ÐPÐP¨D¬LÐPÐP¸d¼j¼oÐPÐPÐPÐPr   N)rG   r   rH   r:   r   rI   )rM   r   r   r.   ©rM   r"   r   r.   )rM   rX   r   r.   ©r   r\   ©r   r)   )r;   r<   r=   r>   Ú	__slots__rL   rS   rW   r[   r`   rf   r   r   r   rD   rD   Y   s§   € € € € € ðð ð( 9€Ið?ð ?ð ?ð ?ð
<ð <ð <ð <ðð ð ð ð
Cð Cð Cð Cð0ð 0ð 0ð 0ðQð Qð Qð Qð Qð Qr   rD   c                  ó>   — e Zd ZdZdZdd	„Zdd„Zdd„Zdd„Zdd„Z	dS )Ú_LowerBoundzÂLower bound of a version range.

    A version *v* of ``None`` means unbounded below (-inf).
    At equal versions, ``[v`` sorts before ``(v`` because an inclusive
    bound starts earlier.
    ©Ú	inclusiverG   rG   Ú_VersionOrBoundaryrn   r.   r   rI   c                ó"   — || _         || _        d S r   ©rG   rn   ©rK   rG   rn   s      r   rL   z_LowerBound.__init__£   ó   € ØˆŒØ"ˆŒˆˆr   rM   r"   c                óz   — t          |t          ¦  «        st          S | j        |j        k    o| j        |j        k    S r   ©r&   rl   rU   rG   rn   rV   s     r   rW   z_LowerBound.__eq__§   ó7   € Ý˜%¥Ñ-Ô-ð 	"Ý!Ð!ØŒ|˜uœ}Ò,ÐR°´À5Ä?Ò1RÐRr   c                óÊ   — t          |t          ¦  «        st          S | j        €	|j        d uS |j        €dS | j        |j        k    r| j        |j        k     S | j        o|j         S )NFru   rV   s     r   r[   z_LowerBound.__lt__¬   sl   € Ý˜%¥Ñ-Ô-ð 	"Ý!Ð!àŒ<ÐØ”=¨Ð,Ð,ØŒ=Ð Ø�5ØŒ<˜5œ=Ò(Ð(Ø”< %¤-Ò/Ð/àŒ~Ð5 e¤oÐ"5Ð5r   r\   c                ó8   — t          | j        | j        f¦  «        S r   ©r^   rG   rn   r_   s    r   r`   z_LowerBound.__hash__¹   ó   € Ý�T”\ 4¤>Ð2Ñ3Ô3Ð3r   r)   c                óL   — | j         rdnd}d| j        j        › d|› | j        ›d�S )Nú[rb   ú<ú ú>©rn   rd   r;   rG   ©rK   Úbrackets     r   rf   z_LowerBound.__repr__¼   s7   € ØœÐ0�#�#¨SˆØG�4”>Ô*ÐGÐG¨WÐG°d´lÐGÐGÐGÐGr   N©rG   ro   rn   r.   r   rI   rg   )rM   rl   r   r.   rh   ri   ©
r;   r<   r=   r>   rj   rL   rW   r[   r`   rf   r   r   r   rl   rl   ˜   ó“   € € € € € ðð ð )€Ið#ð #ð #ð #ðSð Sð Sð Sð
6ð 6ð 6ð 6ð4ð 4ð 4ð 4ðHð Hð Hð Hð Hð Hr   rl   c                  ó>   — e Zd ZdZdZdd	„Zdd„Zdd„Zdd„Zdd„Z	dS )Ú_UpperBoundzÀUpper bound of a version range.

    A version *v* of ``None`` means unbounded above (+inf).
    At equal versions, ``v)`` sorts before ``v]`` because an exclusive
    bound ends earlier.
    rm   rG   ro   rn   r.   r   rI   c                ó"   — || _         || _        d S r   rq   rr   s      r   rL   z_UpperBound.__init__Ì   rs   r   rM   r"   c                óz   — t          |t          ¦  «        st          S | j        |j        k    o| j        |j        k    S r   ©r&   r‡   rU   rG   rn   rV   s     r   rW   z_UpperBound.__eq__Ð   rv   r   c                ó¼   — t          |t          ¦  «        st          S | j        €dS |j        €dS | j        |j        k    r| j        |j        k     S | j         o|j        S ©NFTrŠ   rV   s     r   r[   z_UpperBound.__lt__Õ   sd   € Ý˜%¥Ñ-Ô-ð 	"Ý!Ð!àŒ<ÐØ�5ØŒ=Ð Ø�4ØŒ<˜5œ=Ò(Ð(Ø”< %¤-Ò/Ð/à”>Ð!Ð5 e¤oÐ5r   r\   c                ó8   — t          | j        | j        f¦  «        S r   ry   r_   s    r   r`   z_UpperBound.__hash__â   rz   r   r)   c                óL   — | j         rdnd}d| j        j        › d| j        ›|› d�S )Nú]rc   r}   r~   r   r€   r�   s     r   rf   z_UpperBound.__repr__å   s7   € ØœÐ0�#�#¨SˆØG�4”>Ô*ÐGÐG¨T¬\ÐG¸WÐGÐGÐGÐGr   Nrƒ   rg   )rM   r‡   r   r.   rh   ri   r„   r   r   r   r‡   r‡   Á   r…   r   r‡   Fztuple[_VersionRange]Ú_FULL_RANGEÚlowerÚupperr.   c                ó€   — | j         �|j         €dS | j         |j         k    r| j        o|j         S | j         |j         k    S )zHTrue when the range defined by *lower* and *upper* contains no versions.NFrq   )r‘   r’   s     r   Ú_range_is_emptyr”   ö   sF   € à„}Ð ¤Ð 5ØˆuØ„}˜œÒ%Ð%Ø”OÐ7¨¬Ð8Ð8ØŒ=˜5œ=Ò(Ð(r   ÚleftúSequence[_VersionRange]Úrightúlist[_VersionRange]c                ó†  — g }dx}}|t          | ¦  «        k     r§|t          |¦  «        k     r”| |         \  }}||         \  }}t          ||¦  «        }	t          ||¦  «        }
t          |	|
¦  «        s|                     |	|
f¦  «         ||k     r|dz  }n|dz  }|t          | ¦  «        k     r|t          |¦  «        k     °”|S )zFIntersect two sorted, non-overlapping range lists (two-pointer merge).r   r   )r(   ÚmaxÚminr”   Úappend)r•   r—   ÚresultÚ
left_indexÚright_indexÚ
left_lowerÚ
left_upperÚright_lowerÚright_upperr‘   r’   s              r   Ú_intersect_rangesr¤   ÿ   sä   € ð
 #%€FØ Ð €J�Ø
•s˜4‘y”yÒ
 Ð
  [µ3°u±:´:Ò%=Ð%=Ø!% jÔ!1Ñˆ
�JØ#(¨Ô#5Ñ ˆ�[å�J Ñ,Ô,ˆÝ�J Ñ,Ô,ˆå˜u eÑ,Ô,ð 	*Ø�MŠM˜5 %˜.Ñ)Ô)Ð)ð ˜Ò#Ð#Ø˜!‰OˆJˆJà˜1ÑˆKð •s˜4‘y”yÒ
 Ð
  [µ3°u±:´:Ò%=Ð%=ð  €Mr   rG   r   c                ó~   — g | j         dd…         ¢| j         d         dz   ‘R }t          j        | j        |d¬¦  «        S )z5Smallest version in the next prefix: 1.2 -> 1.3.dev0.Néÿÿÿÿr   r   ©rO   r4   rQ   )r4   r   Ú
from_partsrO   )rG   r4   s     r   Ú_next_prefix_dev0r©     sE   € à>�”   Ô$Ð> g¤o°bÔ&9¸AÑ&=Ð>Ð>€GÝÔ G¤M¸7ÈÐJÑJÔJÐJr   c                óD   — t          j        | j        | j        d¬¦  «        S )z7The .dev0 of a version's base release: 1.2 -> 1.2.dev0.r   r§   )r   r¨   rO   r4   ©rG   s    r   Ú
_base_dev0r¬     s   € åÔ G¤M¸7¼?ÐPQÐRÑRÔRÐRr   ÚUnparsedVersionúVersion | Nonec                ót   — t          | t          ¦  «        s"	 t          | ¦  «        } n# t          $ r Y d S w xY w| S r   )r&   r   r   r«   s    r   Ú_coerce_versionr°   $  sO   € Ý�g�wÑ'Ô'ð ð	Ý˜gÑ&Ô&ˆGˆGøÝð 	ð 	ð 	Ø�4�4ð	øøøà€Ns   —' §
5´5c                ó@   — | j         €| S |                      d ¬¦  «        S )N)Úlocal)r²   Ú__replace__r«   s    r   Ú_public_versionr´   -  s&   € Ø„}ÐØˆØ×Ò TÐÑ*Ô*Ð*r   c                ó2   — |                       ddd¬¦  «        S )zyThe version that *version* is a post-release of.

    1.0.post1 -> 1.0, 1.0a1.post0 -> 1.0a1, 1.0.post0.dev1 -> 1.0.
    N©rP   rQ   r²   ©r³   r«   s    r   Ú
_post_baser¸   3  s   € ð
 ×Ò D¨d¸$ÐÑ?Ô?Ð?r   c                ó0   — |                       dd¬¦  «        S )zZEarliest pre-release of *version*.

    1.2 -> 1.2.dev0, 1.2.post1 -> 1.2.post1.dev0.
    r   N©rQ   r²   r·   r«   s    r   Ú_earliest_prereleaser»   ;  s   € ð
 ×Ò 1¨DÐÑ1Ô1Ð1r   rR   ro   c                ó  — | €dS t          | t          ¦  «        rP| j        }|j        r|                     ddd¬¦  «        S |j        �
|j        dz   nd}|                     |d¬¦  «        S | j        s| S |                      ddd¬¦  «        S )z:Smallest non-pre-release version at or above *v*, or None.N)r+   rQ   r²   r   r   )rP   r²   )r&   rD   rG   Úis_prereleaser³   rP   )rR   ÚinnerÚks      r   Ú_nearest_non_prereleaserÀ   C  s§   € ð 	€yØˆtÝ�!Õ%Ñ&Ô&ð 5Ø”	ˆØÔð 	Eà×$Ò$¨°4¸tÐ$ÑDÔDÐDð !&¤
Ð 6ˆUŒZ˜!‰^ˆ^¸AˆØ× Ò  a¨tÐ Ñ4Ô4Ð4ØŒ?ð Øˆà�=Š=˜T t°4ˆ=Ñ8Ô8Ð8r   c                  ó   — e Zd ZdZdS )r   a  
    Raised when attempting to create a :class:`Specifier` with a specifier
    string that is invalid.

    >>> Specifier("lolwat")
    Traceback (most recent call last):
        ...
    packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat'
    N)r;   r<   r=   r>   r   r   r   r   r   X  s   € € € € € ðð ð ð r   r   c                  ó„  — e Zd ZdZdZed$d„¦   «         Zej        d$d„¦   «         Z	ej        d%d„¦   «         Z
ej        d&d„¦   «         Zeej        d'd„¦   «         ¦   «         Zej        d(d„¦   «         Zej        d)d*d„¦   «         Zej        	 	 d+d,d„¦   «         Zej        	 	 d+d-d„¦   «         Zej        	 	 d.d/d#„¦   «         ZdS )0r   r   )Ú_strr   r)   c                ó    — t          | ¦  «        S )z Internal property for match_args©r)   r_   s    r   rÃ   zBaseSpecifier._strh  s   € õ �4‰yŒyÐr   c                ó   — dS )zŽ
        Returns the str representation of this Specifier-like object. This
        should be representative of the Specifier itself.
        Nr   r_   s    r   Ú__str__zBaseSpecifier.__str__m  ó   € € € r   r\   c                ó   — dS )zF
        Returns a hash value for this Specifier-like object.
        Nr   r_   s    r   r`   zBaseSpecifier.__hash__t  rÈ   r   rM   r"   r.   c                ó   — dS )z«
        Returns a boolean representing whether or not the two Specifier-like
        objects are equal.

        :param other: The other object to check against.
        Nr   rV   s     r   rW   zBaseSpecifier.__eq__z  rÈ   r   úbool | Nonec                ó   — dS )zîWhether or not pre-releases as a whole are allowed.

        This can be set to either ``True`` or ``False`` to explicitly enable or disable
        prereleases or it can be set to ``None`` (the default) to use default semantics.
        Nr   r_   s    r   ÚprereleaseszBaseSpecifier.prereleasesƒ  rÈ   r   rZ   rI   c                ó   — dS )zQSetter for :attr:`prereleases`.

        :param value: The value to set.
        Nr   ©rK   rZ   s     r   rÍ   zBaseSpecifier.prereleasesŒ  rÈ   r   NÚitemrÍ   c                ó   — dS )zR
        Determines if the given item is contained within this specifier.
        Nr   ©rK   rÐ   rÍ   s      r   ÚcontainszBaseSpecifier.contains“  rÈ   r   .ÚiterableúIterable[UnparsedVersionVar]ÚkeyúIterator[UnparsedVersionVar]c                ó   — d S r   r   ©rK   rÔ   rÍ   rÖ   s       r   ÚfilterzBaseSpecifier.filter™  ó	   € ð (+ sr   úIterable[T]úCallable[[T], UnparsedVersion]úIterator[T]c                ó   — d S r   r   rÙ   s       r   rÚ   zBaseSpecifier.filter¡  ó	   € ð �cr   úIterable[Any]ú'Callable[[Any], UnparsedVersion] | NoneúIterator[Any]c                ó   — 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Ù   s       r   rÚ   zBaseSpecifier.filter©  rÈ   r   ri   rh   rg   ©r   rË   )rZ   r.   r   rI   r   )rÐ   r)   rÍ   rË   r   r.   ©N.©rÔ   rÕ   rÍ   rË   rÖ   rI   r   r×   ©rÔ   rÜ   rÍ   rË   rÖ   rÝ   r   rÞ   ©NN©rÔ   rá   rÍ   rË   rÖ   râ   r   rã   )r;   r<   r=   rj   Ú__match_args__ÚpropertyrÃ   ÚabcÚabstractmethodrÇ   r`   rW   rÍ   ÚsetterrÓ   ÚtypingÚoverloadrÚ   r   r   r   r   r   d  s²  € € € € € Ø€IØ€Nàðð ð ñ „Xðð 	Ôðð ð ñ Ôðð 	Ôðð ð ñ Ôðð
 	Ôðð ð ñ Ôðð ØÔðð ð ñ Ôñ „Xðð Ôðð ð ñ Ôðð 	Ôðð ð ð ñ Ôðð
 „_ð $(Øð	+ð +ð +ð +ñ „_ð+ð „_ð $(Ø.1ð	ð ð ð ñ „_ðð 	Ôð $(Ø7;ð		ð 	ð 	ð 	ñ Ôð	ð 	ð 	r   r   )Ú	metaclassc            	      ó(  — e Zd ZU dZdZdZ ej        dez   dz   ej        ej	        z  ¦  «        Z
ddddd	d
dddœZded<   dZd[d„Zd\d„Zd]d„Zd^d„Zd_d#„Zd_d$„Zed`d%„¦   «         Zej        dad'„¦   «         Zdbd)„Zdcd,„Zeddd-„¦   «         Zeddd.„¦   «         Zddd/„Zddd0„Zeded2„¦   «         Zdfd4„Zdgd7„Zdhd9„Zdid;„Z djd=„Z!did>„Z"did?„Z#did@„Z$didA„Z%dkdC„Z&dkdD„Z'dldF„Z(dmdI„Z)dndodK„Z*e+j,        	 	 dpdqdQ„¦   «         Z-e+j,        	 	 dpdrdU„¦   «         Z-	 	 dsdtdY„Z-dS )ur   aí  This class abstracts handling of version specifiers.

    .. tip::

        It is generally not required to instantiate this manually. You should instead
        prefer to work with :class:`SpecifierSet` instead, which can parse
        comma-separated version specifiers (which is what package metadata contains).

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with packaging 26.2+ can
        be unpickled with future releases.  Backward compatibility with pickles
        from packaging < 26.2 is supported but may be removed in a future
        release.
    )Ú_prereleasesÚ_rangesÚ_specÚ_spec_versionÚ_wildcard_splita  
        (?:
            (?:
                # 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;)]*  # The arbitrary version can be just about anything,
                          # we match everything except for whitespace, a
                          # semi-colon for marker support, and a closing paren
                          # since versions can be enclosed in them.
            )
            |
            (?:
                # 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

                # You cannot use a wild card and a pre-release, post-release, a dev or
                # local version together so group them with a | and make them optional.
                (?:
                    \.\*  # Wild card syntax of .*
                    |
                    (?a:                                  # pre release
                        [-_\.]?
                        (alpha|beta|preview|pre|a|b|c|rc)
                        [-_\.]?
                        [0-9]*
                    )?
                    (?a:                                  # post release
                        (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                    )?
                    (?a:[-_\.]?dev[-_\.]?[0-9]*)?         # dev release
                    (?a:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
                )?
            )
            |
            (?:
                # 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
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [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.
                (?:<=|>=|<|>)

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?a:                   # pre release
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [0-9]*
                )?
                (?a:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?a:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
        )
        z\s*Ú
compatibleÚequalÚ	not_equalÚless_than_equalÚgreater_than_equalÚ	less_thanÚgreater_thanÚ	arbitrary)ú~=ú==ú!=ú<=ú>=r}   r   ú===r   Ú
_operatorsÚ Nr!   r)   rÍ   rË   r   rI   c                ó  — | j                              |¦  «        st          d|›�¦  «        ‚|                     ¦   «         }|                     d¦  «        r'|dd…         |dd…                              ¦   «         }}nb|                     d¦  «        r'|dd…         |dd…                              ¦   «         }}n&|dd…         |dd…                              ¦   «         }}||f| _        || _        d| _        d| _        d| _	        dS )að  Initialize a Specifier instance.

        :param spec:
            The string representation of a specifier which will be parsed and
            normalized before use.
        :param prereleases:
            This tells the specifier if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.
        :raises InvalidSpecifier:
            If the given specifier is invalid (i.e. bad syntax).
        zInvalid specifier: r  Nr   )r  r  r  r  r  r%   r   )
Ú_regexÚ	fullmatchr   ÚstripÚ
startswithrö   rô   r÷   rø   rõ   )rK   r!   rÍ   ÚoperatorrG   s        r   rL   zSpecifier.__init__=  s  € ð Œ{×$Ò$ TÑ*Ô*ð 	CÝ"Ð#A¸Ð#AÐ#AÑBÔBÐBà�zŠz‰|Œ|ˆØ�?Š?˜5Ñ!Ô!ð 	;Ø $ R a R¤¨$¨q¨r¨r¬(¯.ª.Ñ*:Ô*:�gˆHˆHØ�_Š_Ð;Ñ<Ô<ð 	;Ø $ R a R¤¨$¨q¨r¨r¬(¯.ª.Ñ*:Ô*:�gˆHˆHà $ R a R¤¨$¨q¨r¨r¬(¯.ª.Ñ*:Ô*:�gˆHà'/°Ð&9ˆŒ
ð (ˆÔð :>ˆÔð >BˆÔð 8<ˆŒˆˆr   rG   r®   c                óˆ   — | j         �| j         d         |k    r| j         d         S t          |¦  «        }|€dS ||f| _         |S )zDOne element cache, as only one spec Version is needed per Specifier.Nr   r   )r÷   r°   )rK   rG   Úversion_specifiers      r   Ú_get_spec_versionzSpecifier._get_spec_versionc  sX   € àÔÐ)¨dÔ.@ÀÔ.CÀwÒ.NÐ.NØÔ% aÔ(Ð(å+¨GÑ4Ô4ÐØÐ$Ø�4à%Ð'8Ð9ˆÔØ Ð r   r   c                ó8   — |                       |¦  «        }|€J ‚|S )zÕGet spec version, asserting it's valid (not for === operator).

        This method should only be called for operators where version
        strings are guaranteed to be valid PEP 440 versions (not ===).
        )r  )rK   rG   Úspec_versions      r   Ú_require_spec_versionzSpecifier._require_spec_versiono  s)   € ð ×-Ò-¨gÑ6Ô6ˆØÐ'Ð'Ð'ØÐr   r–   c                ó  — | j         �| j         S | j        }| j        }|dk    rt          | _         t          S |                     d¦  «        r|                      ||¦  «        }n|                      ||¦  «        }|| _         |S )zØConvert this specifier to sorted, non-overlapping version ranges.

        Each standard operator maps to one or two ranges.  ``===`` is
        modeled as full range (actual check done separately).  Cached.
        Nr  ú.*)rõ   r  rG   r�   ÚendswithÚ_wildcard_rangesÚ_standard_ranges)rK   ÚopÚver_strr�   s       r   Ú
_to_rangeszSpecifier._to_rangesy  s†   € ð Œ<Ð#Ø”<ÐàŒ]ˆØ”,ˆà�Š;ˆ;Ý&ˆDŒLÝÐà×Ò˜DÑ!Ô!ð 	8Ø×*Ò*¨2¨wÑ7Ô7ˆFˆFà×*Ò*¨2¨wÑ7Ô7ˆFàˆŒØˆr   r  r  r˜   c                ó"  — |                       |d d…         ¦  «        }t          |¦  «        }t          |¦  «        }|dk    r!t          |d¦  «        t	          |d¦  «        fgS t
          t	          |d¦  «        ft          |d¦  «        t          fgS )Néþÿÿÿr  TF)r  r¬   r©   rl   r‡   Ú_NEG_INFÚ_POS_INF)rK   r  r  Úbaser‘   r’   s         r   r  zSpecifier._wildcard_ranges‘  s’   € à×)Ò)¨'°#°2°#¬,Ñ7Ô7ˆÝ˜4Ñ Ô ˆÝ! $Ñ'Ô'ˆØ�Š:ˆ:Ý  ¨Ñ-Ô-­{¸5À%Ñ/HÔ/HÐIÐJÐJõ •{ 5¨%Ñ0Ô0Ð1Ý˜ Ñ%Ô%¥xÐ0ð
ð 	
r   c                ó   — |                       |¦  «        }|dk    rt          |d¦  «        t          fgS |dk    r0t          t	          t          |t          j        ¦  «        d¦  «        fgS |dk    r­|j        �7| 	                    |j        dz   d ¬¦  «        }t          |d¦  «        t          fgS |j
        �8| 	                    |j
        dz   dd ¬¦  «        }t          |d¦  «        t          fgS t          t          |t          j        ¦  «        d	¦  «        t          fgS |d
k    rE|j        r|n| 	                    dd ¬¦  «        }|t          k    rg S t          t	          |d	¦  «        fgS d|v }t          |t          j        ¦  «        }|r|n|}|dk    r!t          |d¦  «        t	          |d¦  «        fgS |dk    r.t          t	          |d	¦  «        ft          |d	¦  «        t          fgS |dk    rQ| 	                    |j        d d…         ¬¦  «        }	t          |d¦  «        t	          t          |	¦  «        d	¦  «        fgS t!          d|›�¦  «        ‚)Nr  Tr  r   r   rº   r   r¶   Fr}   ú+r  r  r  r¦   )r4   úUnknown operator: )r  rl   r   r  r‡   rD   r:   rA   rQ   r³   rP   rB   r½   r3   r4   r©   Ú
ValueError)
rK   r  r  rR   Ú	lower_verr2   Ú	has_localÚafter_localsr’   Úprefixs
             r   r  zSpecifier._standard_rangesž  sv  € Ø×&Ò& wÑ/Ô/ˆà�Š:ˆ:Ý   DÑ)Ô)­8Ð4Ð5Ð5à�Š:ˆ:õ ÝÕ 0°µMÔ4NÑ OÔ OÐQUÑVÔVððð ð �Š9ˆ9ØŒuÐ ð ŸMšM¨a¬e°a©i¸t˜MÑDÔD�	Ý$ Y°Ñ5Ô5µxÐ@ÐAÐAØŒvÐ!àŸMšM¨q¬v¸©z¸qÈ˜MÑMÔM�	Ý$ Y°Ñ5Ô5µxÐ@ÐAÐAõ  Õ 0°µMÔ4MÑ NÔ NÐPUÑVÔVÝððð ð �Š9ˆ9ð œÐN�A�A¨a¯mªmÀÈ¨mÑ.NÔ.NˆEØ�Ò$Ð$Ø�	Ý�{¨5°%Ñ8Ô8Ð9Ð:Ð:ð ˜7�Nˆ	Ý'¨­=Ô+EÑFÔFˆØÐ0�� Lˆà�Š:ˆ:Ý   DÑ)Ô)­;°u¸dÑ+CÔ+CÐDÐEÐEà�Š:ˆ:å�; q¨%Ñ0Ô0Ð1Ý˜U EÑ*Ô*­HÐ5ðð ð
 �Š:ˆ:Ø—]’]¨1¬9°S°b°S¬>�]Ñ:Ô:ˆFå˜Q Ñ%Ô%¥{Õ3DÀVÑ3LÔ3LÈeÑ'TÔ'TÐUðð õ Ð4¨bÐ4Ð4Ñ5Ô5Ð5r   c                ó¼   — | j         �| j         S | j        \  }}|dk    rdS |dk    r|                     d¦  «        rdS |                      |¦  «        }|€d S |j        S )Nr  Fr  r  )rô   rö   r  r  r½   )rK   r  Úversion_strrG   s       r   rÍ   zSpecifier.prereleasesÜ  sƒ   € ð ÔÐ(ØÔ$Ð$ð !%¤
Ñˆ�+Ø�tÒÐØ�5ð �tÒÐ × 4Ò 4°TÑ :Ô :ÐØ�5ð ×(Ò(¨Ñ5Ô5ˆØˆ?Ø�4ð Ô$Ð$r   rZ   c                ó   — || _         d S r   )rô   rÏ   s     r   rÍ   zSpecifier.prereleasesø  s   € à!ˆÔÐÐr   ú#tuple[tuple[str, str], bool | None]c                ó   — | j         | j        fS r   )rö   rô   r_   s    r   Ú__getstate__zSpecifier.__getstate__ü  s   € ð ”
˜DÔ-Ð.Ð.r   Ústater"   c                óú  — d | _         d | _        d | _        t          |t          ¦  «        rÒt          |¦  «        dk    r3|\  }}t          |¦  «        rt          |¦  «        r|| _        || _	        d S t          |¦  «        dk    ryt          |d         t          ¦  «        r^|\  }}|                     d¦  «        }|                     dd¦  «        }t          |¦  «        rt          |¦  «        r|| _        || _	        d S t          |t          ¦  «        rY|                     d¦  «        }|                     dd¦  «        }t          |¦  «        rt          |¦  «        r|| _        || _	        d S t          d|›�¦  «        ‚)Nr%   r   rö   rô   ÚinvalidzCannot restore Specifier from )r÷   rø   rõ   r&   r'   r(   r*   r/   rö   rô   ÚdictÚgetÚ	TypeError)rK   r0  r!   rÍ   Ú_Ú	slot_dicts         r   Ú__setstate__zSpecifier.__setstate__  sx  € à!ˆÔØ#ˆÔØˆŒå�e�UÑ#Ô#ð 	Ý�5‰zŒz˜QŠˆà$)Ñ!��kÝ! $Ñ'Ô'ð ­M¸+Ñ,FÔ,Fð Ø!%�D”JØ(3�DÔ%Ø�FÝ�5‰zŒz˜QŠˆ¥:¨e°A¬h½Ñ#=Ô#=ˆà$‘��9Ø —}’} WÑ-Ô-�Ø'Ÿmšm¨N¸IÑFÔF�Ý! $Ñ'Ô'ð ­M¸+Ñ,FÔ,Fð Ø!%�D”JØ(3�DÔ%Ø�FÝ�e�TÑ"Ô"ð 	à—9’9˜WÑ%Ô%ˆDØŸ)š) N°IÑ>Ô>ˆKÝ˜dÑ#Ô#ð ­°kÑ(BÔ(Bð Ø!�”
Ø$/�Ô!Ø�åÐB¸ÐBÐBÑCÔCÐCr   c                ó   — | j         d         S )z`The operator of this specifier.

        >>> Specifier("==1.2.3").operator
        '=='
        r   ©rö   r_   s    r   r  zSpecifier.operator$  ó   € ð Œz˜!Œ}Ðr   c                ó   — | j         d         S )zaThe version of this specifier.

        >>> Specifier("==1.2.3").version
        '1.2.3'
        r   r:  r_   s    r   rG   zSpecifier.version-  r;  r   c                ól   — | j         �
d| j        ›�nd}d| j        j        › dt	          | ¦  «        ›|› d�S )aT  A representation of the Specifier that shows all internal state.

        >>> Specifier('>=1.0.0')
        <Specifier('>=1.0.0')>
        >>> Specifier('>=1.0.0', prereleases=False)
        <Specifier('>=1.0.0', prereleases=False)>
        >>> Specifier('>=1.0.0', prereleases=True)
        <Specifier('>=1.0.0', prereleases=True)>
        Nú, prereleases=r  r}   rb   ú)>©rô   rÍ   rd   r;   r)   ©rK   r+   s     r   rf   zSpecifier.__repr__6  sT   € ð Ô Ð,ð 2˜TÔ-Ð1Ð1Ð1àð 	ð B�4”>Ô*ÐAÐA­S°©Y¬YÐA¸#ÐAÐAÐAÐAr   c                ó    —  dj         | j        Ž S )zÐA string representation of the Specifier that can be round-tripped.

        >>> str(Specifier('>=1.0.0'))
        '>=1.0.0'
        >>> str(Specifier('>=1.0.0', prereleases=False))
        '>=1.0.0'
        z{}{})Úformatrö   r_   s    r   rÇ   zSpecifier.__str__H  s   € ð ˆvŒ}˜dœjÐ)Ð)r   útuple[str, str]c                ó°   — | j         \  }}|dk    s|                     d¦  «        r||fS |                      |¦  «        }t          ||dk    ¬¦  «        }||fS )Nr  r  r  ©Ústrip_trailing_zero)rö   r  r  r   )rK   r  rG   r  Úcanonical_versions        r   Ú_canonical_speczSpecifier._canonical_specR  sw   € à œJÑˆ�'Ø�uÒÐ × 0Ò 0°Ñ 6Ô 6ÐØ˜WÐ$Ð$à×1Ò1°'Ñ:Ô:ˆå0Ø¨x¸4Ò/?ð
ñ 
ô 
Ðð Ð*Ð*Ð*r   r\   c                ó*   — t          | j        ¦  «        S r   )r^   rI  r_   s    r   r`   zSpecifier.__hash__`  s   € Ý�DÔ(Ñ)Ô)Ð)r   rM   r.   c                óú   — t          |t          ¦  «        r;	 |                      t          |¦  «        ¦  «        }n3# t          $ r
 t          cY S w xY wt          || j        ¦  «        st          S | j        |j        k    S )a>  Whether or not the two Specifier-like objects are equal.

        :param other: The other object to check against.

        The value of :attr:`prereleases` is ignored.

        >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0")
        True
        >>> (Specifier("==1.2.3", prereleases=False) ==
        ...  Specifier("==1.2.3", prereleases=True))
        True
        >>> Specifier("==1.2.3") == "==1.2.3"
        True
        >>> Specifier("==1.2.3") == Specifier("==1.2.4")
        False
        >>> Specifier("==1.2.3") == Specifier("~=1.2.3")
        False
        )r&   r)   rd   r   rU   rI  rV   s     r   rW   zSpecifier.__eq__c  s†   € õ& �e�SÑ!Ô!ð 	"ð&ØŸš¥s¨5¡z¤zÑ2Ô2��øÝ#ð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøå˜E 4¤>Ñ2Ô2ð 	"Ý!Ð!àÔ# uÔ'<Ò<Ð<s   —": ºAÁAÚCallableOperatorc                óB   — t          | d| j        |         › �¦  «        }|S )NÚ	_compare_)Úgetattrr  )rK   r  Úoperator_callables      r   Ú_get_operatorzSpecifier._get_operator€  s/   € Ý.5ØÐ3˜dœo¨bÔ1Ð3Ð3ñ/
ô /
Ðð !Ð r   Úprospectivec           
     óö   — t          t          t          j        t          t          |¦  «        ¦  «        ¦  «        d d…         ¦  «        }|dz  }|                      ||¦  «        o|                      ||¦  «        S )Nr¦   r  )Ú_version_joinÚlistÚ	itertoolsÚ	takewhileÚ_is_not_suffixÚ_version_splitÚ_compare_greater_than_equalÚ_compare_equal)rK   rR  r!   r)  s       r   Ú_compare_compatiblezSpecifier._compare_compatible†  sw   € õ Ý•Ô$¥^µ^ÀDÑ5IÔ5IÑJÔJÑKÔKÈCÈRÈCÔPñ
ô 
ˆð
 	�$‰ˆà×0Ò0°¸dÑCÔCð 
Ø×Ò ¨VÑ4Ô4ð	
r   útuple[list[str], int]c                ó˜   — | j         }|€@t          |dd…         d¬¦  «        }t          |¦  «        }|t          |¦  «        f}|| _         |S )zýCached split of a wildcard spec into components and numeric length.

        >>> Specifier("==1.*")._get_wildcard_split("1.*")
        (['0', '1'], 2)
        >>> Specifier("==3.10.*")._get_wildcard_split("3.10.*")
        (['0', '3', '10'], 3)
        Nr  FrF  )rø   r   rY  Ú_numeric_prefix_len)rK   r!   Úwildcard_splitÚ
normalizedÚ
split_specs        r   Ú_get_wildcard_splitzSpecifier._get_wildcard_splitš  sZ   € ð Ô-ˆØÐ!Ý-¨d°3°B°3¬iÈUÐSÑSÔSˆJÝ'¨
Ñ3Ô3ˆJØ(Õ*=¸jÑ*IÔ*IÐJˆNØ#1ˆDÔ ØÐr   c                ór  — |                      d¦  «        rr|                      |¦  «        \  }}t          t          |¦  «        d¬¦  «        }t	          |¦  «        }t          ||¦  «        }|d t          |¦  «        …         }||k    S |                      |¦  «        }	|	j        st          |¦  «        }||	k    S )Nr  FrF  )	r  rc  r   r´   rY  Ú	_left_padr(   r  r²   )
rK   rR  r!   rb  Úspec_numeric_lenÚnormalized_prospectiveÚsplit_prospectiveÚpadded_prospectiveÚshortened_prospectiver  s
             r   r[  zSpecifier._compare_equalª  sÖ   € à�=Š=˜ÑÔð  	/Ø+/×+CÒ+CÀDÑ+IÔ+IÑ(ˆJÐ(õ &:Ý Ñ,Ô,À%ð&ñ &ô &Ð"õ !/Ð/EÑ FÔ FÐõ "+Ð+<Ð>NÑ!OÔ!OÐð
 %7Ð7H½¸Z¹¼Ð7HÔ$IÐ!à(¨JÒ6Ð6ð  ×5Ò5°dÑ;Ô;ˆLð
  Ô%ð ;Ý-¨kÑ:Ô:�à ,Ò.Ð.r   c                ó0   — |                       ||¦  «         S r   )r[  ©rK   rR  r!   s      r   Ú_compare_not_equalzSpecifier._compare_not_equalÎ  s   € Ø×&Ò& {°DÑ9Ô9Ð9Ð9r   c                óN   — t          |¦  «        |                      |¦  «        k    S r   ©r´   r  rl  s      r   Ú_compare_less_than_equalz"Specifier._compare_less_than_equalÑ  ó%   € õ ˜{Ñ+Ô+¨t×/IÒ/IÈ$Ñ/OÔ/OÒOÐOr   c                óN   — t          |¦  «        |                      |¦  «        k    S r   ro  rl  s      r   rZ  z%Specifier._compare_greater_than_equal×  rq  r   Úspec_strc                ó†   — |                       |¦  «        }||k     sdS |j        s|j        r|t          |¦  «        k    rdS dS rŒ   )r  r½   r»   ©rK   rR  rs  r!   s       r   Ú_compare_less_thanzSpecifier._compare_less_thanÝ  sc   € ð ×)Ò)¨(Ñ3Ô3ˆð
 ˜TÒ!Ð!Ø�5ð
 Ô"ð	àÔ)ð	ð Õ3°DÑ9Ô9Ò9Ð9à�5ð
 ˆtr   c                ó¾   — |                       |¦  «        }||k    sdS |j        s|j        rt          |¦  «        |k    rdS |j        �t	          |¦  «        |k    rdS dS rŒ   )r  Úis_postreleaser¸   r²   r´   ru  s       r   Ú_compare_greater_thanzSpecifier._compare_greater_thanö  s„   € ð ×)Ò)¨(Ñ3Ô3ˆð
 ˜TÒ!Ð!Ø�5ð
 Ô#ð	àÔ*ð	õ ˜;Ñ'Ô'¨4Ò/Ð/à�5ð ÔÐ(­_¸[Ñ-IÔ-IÈTÒ-QÐ-QØ�5ð
 ˆtr   úVersion | strc                óŠ   — t          |¦  «                             ¦   «         t          |¦  «                             ¦   «         k    S r   ©r)   r‘   rl  s      r   Ú_compare_arbitraryzSpecifier._compare_arbitrary  s1   € Ý�;ÑÔ×%Ò%Ñ'Ô'­3¨t©9¬9¯?ª?Ñ+<Ô+<Ò<Ð<r   rÐ   ústr | Versionc                ó,   — |                       |¦  «        S )a:  Return whether or not the item is contained in this specifier.

        :param item: The item to check for.

        This is used for the ``in`` operator and behaves the same as
        :meth:`contains` with no ``prereleases`` argument passed.

        >>> "1.2.3" in Specifier(">=1.2.3")
        True
        >>> Version("1.2.3") in Specifier(">=1.2.3")
        True
        >>> "1.0.0" in Specifier(">=1.2.3")
        False
        >>> "1.3.0a1" in Specifier(">=1.2.3")
        True
        >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True)
        True
        ©rÓ   ©rK   rÐ   s     r   Ú__contains__zSpecifier.__contains__  ó   € ð& �}Š}˜TÑ"Ô"Ð"r   r­   c                óf   — t          t          |                      |g|¬¦  «        ¦  «        ¦  «        S )as  Return whether or not the item is contained in this specifier.

        :param item:
            The item to check for, which can be a version string or a
            :class:`Version` instance.
        :param prereleases:
            Whether or not to match prereleases with this Specifier. If set to
            ``None`` (the default), it will follow the recommendation from
            :pep:`440` and match prereleases, as there are no other versions.

        >>> Specifier(">=1.2.3").contains("1.2.3")
        True
        >>> Specifier(">=1.2.3").contains(Version("1.2.3"))
        True
        >>> Specifier(">=1.2.3").contains("1.0.0")
        False
        >>> Specifier(">=1.2.3").contains("1.3.0a1")
        True
        >>> Specifier(">=1.2.3", prereleases=False).contains("1.3.0a1")
        False
        >>> Specifier(">=1.2.3").contains("1.3.0a1")
        True
        ©rÍ   )r.   rU  rÚ   rÒ   s      r   rÓ   zSpecifier.contains.  s,   € õ2 •D˜Ÿš d V¸˜ÑEÔEÑFÔFÑGÔGÐGr   .rÔ   rÕ   rÖ   r×   c                ó   — d S r   r   rÙ   s       r   rÚ   zSpecifier.filterI  rÛ   r   rÜ   rÝ   rÞ   c                ó   — d S r   r   rÙ   s       r   rÚ   zSpecifier.filterQ  rà   r   rá   râ   rã   c              #  ó$  K  — g }d}|�|n| j         }|                      | j        ¦  «        }|D ]Æ}t          |€|n
 ||¦  «        ¦  «        }	d}
|	€+| j        dk    r|                      || j        ¦  «        r|V — nE| j        dk    r)|                      |€|n
 ||¦  «        | j        ¦  «        }
n ||	| j        ¦  «        }
|
r2|	�0|	j        r|rd}|V — Œ¦|€| j        dur|                     |¦  «         ŒÇ|s|€| j        dur|E d{V —† dS dS dS dS )a€  Filter items in the given iterable, that match the specifier.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases if there are no other versions.
        :param key:
            A callable that takes a single argument (an item from the iterable) and
            returns a version string or :class:`Version` instance to be used for
            filtering.

        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
        ['1.3']
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")]))
        ['1.2.3', '1.3', <Version('1.4')>]
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"]))
        ['1.5a1']
        >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        >>> list(Specifier(">=1.2.3").filter(
        ... [{"ver": "1.2"}, {"ver": "1.3"}],
        ... key=lambda x: x["ver"]))
        [{'ver': '1.3'}]
        FNr  T)	rÍ   rQ  r  r°   r}  rG   r½   rô   rœ   )rK   rÔ   rÍ   rÖ   Úprereleases_versionsÚfound_non_prereleasesÚinclude_prereleasesrP  rG   Úparsed_versionÚmatchs              r   rÚ   zSpecifier.filterY  s­  è è € ðF  "ÐØ %Ðð 'Ð2ˆKˆK¸Ô8Hð 	ð
 !×.Ò.¨t¬}Ñ=Ô=Ðð  ð 	9ð 	9ˆGÝ,¸¸¨W¨WÈÈÈWÉÌÑVÔVˆNØˆEØÐ%à”= EÒ)Ð)¨d×.EÒ.EØ˜Tœ\ñ/ô /Ð)ð "�M�M�MøØ” %Ò'Ð'Ø×/Ò/Ø"˜{�G�G°°°G±´¸d¼lñô ��ð *Ð)¨.¸$¼,ÑGÔG�àð 9˜Ð3à%Ô3ð 9Ð7Jð 9Ø,0Ð)Ø!�M�M�M�Mà Ð(¨TÔ->ÀeÐ-KÐ-KØ(×/Ò/°Ñ8Ô8Ð8øð
 &ð	,àÐ#ØÔ!¨Ð.Ð.à+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ð	,ð 	,à#Ð#Ø.Ð.r   ©r  N)r!   r)   rÍ   rË   r   rI   )rG   r)   r   r®   )rG   r)   r   r   ©r   r–   )r  r)   r  r)   r   r˜   rå   ©rZ   rË   r   rI   )r   r-  ©r0  r"   r   rI   ri   )r   rD  rh   rg   )r  r)   r   rL  )rR  r   r!   r)   r   r.   )r!   r)   r   r]  )rR  r   rs  r)   r   r.   )rR  rz  r!   r)   r   r.   )rÐ   r~  r   r.   r   )rÐ   r­   rÍ   rË   r   r.   ræ   rç   rè   ré   rê   ).r;   r<   r=   r>   rj   Ú_specifier_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASEr
  r  Ú__annotations__rL   r  r  r  r  r  rì   rÍ   rï   r/  r8  r  rG   rf   rÇ   rI  r`   rW   rQ  r\  rc  r[  rm  rp  rZ  rv  ry  r}  r‚  rÓ   rð   rñ   rÚ   r   r   r   r   r   ¶  sÇ  € € € € € € ðð ð&€IðZÐðx ˆRŒZØÐ%Ñ%¨Ñ.°´
¸R¼]Ñ0Jñô €Fð
 ØØØØ"ØØØð	ð 	€Jð 	ð 	ð 	ñ 	ð$<ð $<ð $<ð $<ð $<ðL
!ð 
!ð 
!ð 
!ðð ð ð ðð ð ð ð0
ð 
ð 
ð 
ð<6ð <6ð <6ð <6ð| ð%ð %ð %ñ „Xð%ð6 Ôð"ð "ð "ñ Ôð"ð/ð /ð /ð /ð Dð  Dð  Dð  DðD ðð ð ñ „Xðð ðð ð ñ „XððBð Bð Bð Bð$*ð *ð *ð *ð ð+ð +ð +ñ „Xð+ð*ð *ð *ð *ð=ð =ð =ð =ð:!ð !ð !ð !ð
ð 
ð 
ð 
ð(ð ð ð ð "/ð "/ð "/ð "/ðH:ð :ð :ð :ðPð Pð Pð PðPð Pð Pð Pðð ð ð ð2ð ð ð ð@=ð =ð =ð =ð#ð #ð #ð #ð*Hð Hð Hð Hð Hð6 „_ð $(Øð	+ð +ð +ð +ñ „_ð+ð „_ð $(Ø.1ð	ð ð ð ñ „_ðð $(Ø7;ð	O,ð O,ð O,ð O,ð O,ð O,ð O,r   r   z([0-9]+)((?:a|b|c|rc)[0-9]+)rÔ   rá   rÖ   râ   rã   c              #  ó6  K  — g }g }d}| D ]�}t          |€|n
 ||¦  «        ¦  «        }|€2|r|V — n*|                     |¦  «         |                     |¦  «         ŒR|j        s|s
|E d{V —† d}|V — Œj|s|                     |¦  «         Œ‚|s
|E d{V —† dS dS )z?Filter per PEP 440: exclude prereleases unless no finals exist.FNT)r°   rœ   r½   )rÔ   rÖ   Úall_nonfinalÚarbitrary_stringsÚfound_finalrÐ   Úparseds          r   Ú_pep440_filter_prereleasesr�  ®  s  è è € ð !€LØ#%Ðà€KØð &ð &ˆÝ ¨¨  ¸#¸#¸d¹)¼)ÑDÔDˆàˆ>ð ð *Ø�
�
�
�
à!×(Ò(¨Ñ.Ô.Ð.Ø×#Ò# DÑ)Ô)Ð)ØàÔ#ð 	àð #Ø,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø"�ØˆJˆJˆJØð ð 	&Ø×Ò Ñ%Ô%Ð%øð ð  ØÐÐÐÐÐÐÐÐÐð ð  r   r)   c                óL  — g }|                       d¦  «        \  }}}|                     |pd¦  «         |                     d¦  «        D ][}t                               |¦  «        }|r(|                     |                     ¦   «         ¦  «         ŒF|                     |¦  «         Œ\|S )a  Split version into components.

    The split components are intended for version comparison. The logic does
    not attempt to retain the original version string, so joining the
    components back with :func:`_version_join` may not produce the original
    version string.
    ú!Ú0ú.)Ú
rpartitionrœ   ÚsplitÚ_prefix_regexr  ÚextendÚgroups)rG   r�   rO   r6  ÚrestrÐ   r�  s          r   rY  rY  Ø  s£   € ð €Fà×'Ò'¨Ñ,Ô,�N€Eˆ1ˆdØ
‡M‚M�%�,˜3ÑÔÐà—
’
˜3‘”ð  ð  ˆÝ×'Ò'¨Ñ-Ô-ˆØð 	 Ø�MŠM˜%Ÿ,š,™.œ.Ñ)Ô)Ð)Ð)à�MŠM˜$ÑÔÐÐØ€Mr   Ú
componentsc                ó>   — | ^}}|› dd                      |¦  «        › �S )zñJoin split version components into a version string.

    This function assumes the input came from :func:`_version_split`, where the
    first component must be the epoch (either empty or numeric), and all other
    components numeric.
    rŸ  r¡  )Újoin)r¨  rO   r§  s      r   rT  rT  î  s+   € ð €L€EˆDØÐ&Ð&�c—h’h˜t‘n”nÐ&Ð&Ð&r   Úsegmentc                ó<   ‡ — t          ˆ fd„dD ¦   «         ¦  «         S )Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r   )r  )Ú.0r)  r«  s     €r   ú	<genexpr>z!_is_not_suffix.<locals>.<genexpr>ú  sB   øè è € ð ð Ø'-ˆ×Ò˜6Ñ"Ô"ðð ð ð ð ð r   )rQ   ÚaÚbÚrcrP   )Úany)r«  s   `r   rX  rX  ù  s@   ø€ Ýð ð ð ð Ø1Pðñ ô ñ ô ð ð r   r£  r\   c                óJ   — d}| D ]}|                      ¦   «         s n|dz  }Œ|S )zƒCount leading numeric components in a :func:`_version_split` result.

    >>> _numeric_prefix_len(["0", "1", "2", "a1"])
    3
    r   r   )Úisdigit)r£  Úcountr«  s      r   r_  r_  ÿ  s?   € ð €EØð ð ˆØ�ŠÑ Ô ð 	ØˆEØ�‰
ˆˆØ€Lr   Útarget_numeric_lenc                ór   — t          | ¦  «        }||z
  }|dk    r| S g | d|…         ¢dg|z  ¢| |d…         ¢S )zÝPad a :func:`_version_split` result with ``"0"`` segments to reach
    ``target_numeric_len`` numeric components.  Suffix segments are preserved.

    >>> _left_pad(["0", "1", "a1"], 4)
    ['0', '1', '0', '0', 'a1']
    r   Nr   )r_  )r£  r·  Únumeric_lenÚ
pad_neededs       r   re  re    sW   € õ & eÑ,Ô,€KØ# kÑ1€JØ�Q‚€ØˆØNˆU�<�K�<Ô ÐN S E¨JÑ$6ÐN¸%ÀÀÀÔ:MÐNÐNr   Úop_entryú!tuple[CallableOperator, str, str]c                óÚ   — | \  }}}|dk    r|                      d¦  «        sdndS |dv rdS |dk    rdS |dk    r|                      d¦  «        sd	nd
S |dk    rdS t          d|›�¦  «        ‚)aL  Sort key for Cost Based Ordering of specifier operators in _filter_versions.

    Operators run sequentially on a shrinking candidate set, so operators that
    reject the most versions should run first to minimize work for later ones.

    Tier 0: Exact equality (==, ===), likely to narrow candidates to one version
    Tier 1: Range checks (>=, <=, >, <), cheap and usually reject a large portion
    Tier 2: Wildcard equality (==.*) and compatible release (~=), more expensive
    Tier 3: Exact !=, cheap but rarely rejects
    Tier 4: Wildcard !=.*, expensive and rarely rejects
    r  r  r   r%   )r  r  r   r}   r   r  r  r   é   r  r$  )r  r%  )r»  r6  Úverr  s       r   Ú_operator_costrÀ    s›   € ð �J€A€sˆBØ	ˆT‚z€zØŸš TÑ*Ô*Ð1ˆqˆq°Ð1Ø	Ð#Ð#Ð#ØˆqØ	ˆT‚z€zØˆqØ	ˆT‚z€zØŸš TÑ*Ô*Ð1ˆqˆq°Ð1Ø	ˆU‚{€{Øˆqå
Ð0¨"Ð0Ð0Ñ
1Ô
1Ð1r   c                  óN  — e Zd ZdZdZ	 	 d<d=d„Zd>d„Zed?d„¦   «         Zej	        d@d„¦   «         ZdAd„Z
dBd„ZdCd„ZdCd„ZdDd„ZdEd„ZdFd„ZdDd „ZdGd"„ZdHd$„ZdId%„ZdId&„ZdId'„ZdJd*„Z	 	 dKdLd,„Zej        	 	 dMdNd2„¦   «         Zej        	 	 dMdOd6„¦   «         Z	 	 dKdPd:„Z	 dQdRd;„ZdS )Sr   a…  This class abstracts handling of a set of version specifiers.

    It can be passed a single specifier (``>=3.0``), a comma-separated list of
    specifiers (``>=3.0,!=3.1``), or no specifier at all.

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging
    releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with
        packaging 26.2+ can be unpickled with future releases.
        Backward compatibility with pickles from
        packaging < 26.2 is supported but may be removed in a future
        release.
    )Ú_canonicalizedÚ_has_arbitraryÚ_is_unsatisfiablerô   Ú_resolved_opsÚ_specsr  NÚ
specifiersústr | Iterable[Specifier]rÍ   rË   r   rI   c                ó¢  — t          |t          ¦  «        rPd„ |                     d¦  «        D ¦   «         }t          t	          t
          |¦  «        ¦  «        | _        d|v | _        n7t          |¦  «        | _        t          d„ | j        D ¦   «         ¦  «        | _        t          | j        ¦  «        dk    | _
        d| _        || _        d| _        dS )a´  Initialize a SpecifierSet instance.

        :param specifiers:
            The string representation of a specifier or a comma-separated list of
            specifiers which will be parsed and normalized before use.
            May also be an iterable of ``Specifier`` instances, which will be used
            as is.
        :param prereleases:
            This tells the SpecifierSet if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.

        :raises InvalidSpecifier:
            If the given ``specifiers`` are not parseable than this exception will be
            raised.
        c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r   )r  ©r®  Úss     r   ú
<listcomp>z)SpecifierSet.__init__.<locals>.<listcomp>k  s-   € ÐVÐVÐV¨aÈAÏGÊGÉIÌIÐV §¢¡	¤	ÐVÐVÐVr   ú,r  c              3  ó8   K  — | ]}d t          |¦  «        v V — ŒdS ©r  NrÅ   rË  s     r   r¯  z(SpecifierSet.__init__.<locals>.<genexpr>t  s,   è è € Ð%KÐ%K¸! e­s°1©v¬v oÐ%KÐ%KÐ%KÐ%KÐ%KÐ%Kr   r   N)r&   r)   r£  r'   Úmapr   rÆ  rÃ  r³  r(   rÂ  rÅ  rô   rÄ  )rK   rÇ  rÍ   Úsplit_specifierss       r   rL   zSpecifierSet.__init__R  sÏ   € õ, �j¥#Ñ&Ô&ð 	Lð  WÐV°:×3CÒ3CÀCÑ3HÔ3HÐVÑVÔVÐå16µs½9ÐFVÑ7WÔ7WÑ1XÔ1XˆDŒKà"'¨:Ð"5ˆDÔÐå 
Ñ+Ô+ˆDŒKõ #&Ð%KÐ%K¸t¼{Ð%KÑ%KÔ%KÑ"KÔ"KˆDÔå! $¤+Ñ.Ô.°!Ò3ˆÔØMQˆÔð (ˆÔà.2ˆÔÐÐr   útuple[Specifier, ...]c                óÒ   — | j         sZt          t                               t	          | j        t          ¬¦  «        ¦  «        ¦  «        | _        d| _         d| _        d| _        | j        S )zBDeduplicate, sort, and cache specs for order-sensitive operations.©rÖ   TN)	rÂ  r'   r3  ÚfromkeysÚsortedrÆ  r)   rÅ  rÄ  r_   s    r   Ú_canonical_specszSpecifierSet._canonical_specs  sW   € àÔ"ð 	*Ý¥§¢­f°T´[ÅcÐ.JÑ.JÔ.JÑ KÔ KÑLÔLˆDŒKØ"&ˆDÔØ!%ˆDÔØ%)ˆDÔ"ØŒ{Ðr   c                ót   — | j         �| j         S | j        sd S t          d„ | j        D ¦   «         ¦  «        rdS d S )Nc              3  ó$   K  — | ]}|j         V — Œd S r   r…  rË  s     r   r¯  z+SpecifierSet.prereleases.<locals>.<genexpr>—  s$   è è € Ð2Ð2 ˆqŒ}Ð2Ð2Ð2Ð2Ð2Ð2r   T)rô   rÆ  r³  r_   s    r   rÍ   zSpecifierSet.prereleasesˆ  sT   € ð ÔÐ(ØÔ$Ð$ð
 Œ{ð 	Ø�4õ Ð2Ð2 d¤kÐ2Ñ2Ô2Ñ2Ô2ð 	Ø�4àˆtr   rZ   c                ó"   — || _         d | _        d S r   )rô   rÄ  rÏ   s     r   rÍ   zSpecifierSet.prereleasesœ  s   € à!ˆÔØ!%ˆÔÐÐr   ú)tuple[tuple[Specifier, ...], bool | None]c                ó   — | j         | j        fS r   )rÆ  rô   r_   s    r   r/  zSpecifierSet.__getstate__¡  s   € ð ”˜TÔ.Ð/Ð/r   r0  r"   c                óö  — d | _         d | _        t          |t          ¦  «        �r¿t	          |¦  «        dk    rˆ|\  }}t          |t          ¦  «        rnt          d„ |D ¦   «         ¦  «        rUt          |¦  «        rF|| _        || _        t	          |¦  «        dk    | _	        t          d„ |D ¦   «         ¦  «        | _        d S t	          |¦  «        dk    �rt          |d         t          ¦  «        rõ|\  }}|                     dd¦  «        }|                     d¦  «        }t          |t          ¦  «        r#t          t          |t           ¬¦  «        ¦  «        }t          |t          ¦  «        rxt          d	„ |D ¦   «         ¦  «        r_t          |¦  «        rP|| _        || _        t	          | j        ¦  «        dk    | _	        t          d
„ | j        D ¦   «         ¦  «        | _        d S t          |t          ¦  «        rð|                     dd¦  «        }|                     d¦  «        }t          |t          ¦  «        r#t          t          |t           ¬¦  «        ¦  «        }t          |t          ¦  «        rxt          d„ |D ¦   «         ¦  «        r_t          |¦  «        rP|| _        || _        t	          | j        ¦  «        dk    | _	        t          d„ | j        D ¦   «         ¦  «        | _        d S t#          d|›�¦  «        ‚)Nr%   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r   ©r&   r   rË  s     r   r¯  z,SpecifierSet.__setstate__.<locals>.<genexpr>²  ó,   è è € ÐDÐD¸�J q­)Ñ4Ô4ÐDÐDÐDÐDÐDÐDr   r   c              3  ó8   K  — | ]}d t          |¦  «        v V — ŒdS rÐ  rÅ   rË  s     r   r¯  z,SpecifierSet.__setstate__.<locals>.<genexpr>¸  s,   è è € Ð-MÐ-MÀ!¨eµs¸1±v´v¨oÐ-MÐ-MÐ-MÐ-MÐ-MÐ-Mr   rÆ  r   rô   rÕ  c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r   rà  rË  s     r   r¯  z,SpecifierSet.__setstate__.<locals>.<genexpr>Ä  rá  r   c              3  ó8   K  — | ]}d t          |¦  «        v V — ŒdS rÐ  rÅ   rË  s     r   r¯  z,SpecifierSet.__setstate__.<locals>.<genexpr>Ê  s,   è è € Ð-SÐ-SÀ!¨eµs¸1±v´v¨oÐ-SÐ-SÐ-SÐ-SÐ-SÐ-Sr   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r   rà  rË  s     r   r¯  z,SpecifierSet.__setstate__.<locals>.<genexpr>Õ  s,   è è € Ð@Ð@°Q�
 1¥iÑ0Ô0Ð@Ð@Ð@Ð@Ð@Ð@r   c              3  ó8   K  — | ]}d t          |¦  «        v V — ŒdS rÐ  rÅ   rË  s     r   r¯  z,SpecifierSet.__setstate__.<locals>.<genexpr>Û  s,   è è € Ð)OÐ)O¸a¨%µ3°q±6´6¨/Ð)OÐ)OÐ)OÐ)OÐ)OÐ)Or   z!Cannot restore SpecifierSet from )rÅ  rÄ  r&   r'   r(   Úallr/   rÆ  rô   rÂ  r³  rÃ  r3  r4  Ú	frozensetr×  r)   r5  )rK   r0  ÚspecsrÍ   r6  r7  s         r   r8  zSpecifierSet.__setstate__§  sÜ  € à!ˆÔØ!%ˆÔå�e�UÑ#Ô#ñ 	Ý�5‰zŒz˜QŠˆà%*Ñ"��{å˜u¥eÑ,Ô,ð	åÐDÐD¸eÐDÑDÔDÑDÔDð	õ & kÑ2Ô2ð	ð
 #(�D”KØ(3�DÔ%Ý*-¨e©*¬*¸ª/�DÔ'Ý*-Ð-MÐ-MÀuÐ-MÑ-MÔ-MÑ*MÔ*M�DÔ'Ø�FÝ�5‰zŒz˜QŠ‰¥:¨e°A¬h½Ñ#=Ô#=ˆà$‘��9Ø!Ÿš h°Ñ3Ô3�Ø'Ÿmšm¨NÑ;Ô;�å˜e¥YÑ/Ô/ð :Ý!¥&¨µCÐ"8Ñ"8Ô"8Ñ9Ô9�Eå˜u¥eÑ,Ô,ð	åÐDÐD¸eÐDÑDÔDÑDÔDð	õ & kÑ2Ô2ð	ð
 #(�D”KØ(3�DÔ%Ý*-¨d¬kÑ*:Ô*:¸aÒ*?�DÔ'Ý*-Ð-SÐ-SÀtÄ{Ð-SÑ-SÔ-SÑ*SÔ*S�DÔ'Ø�FÝ�e�TÑ"Ô"ð 	à—I’I˜h¨Ñ+Ô+ˆEØŸ)š) NÑ3Ô3ˆKå˜%¥Ñ+Ô+ð 6Ý�f UµÐ4Ñ4Ô4Ñ5Ô5�å˜5¥%Ñ(Ô(ð	åÐ@Ð@¸%Ð@Ñ@Ô@Ñ@Ô@ð	õ " +Ñ.Ô.ð	ð
 $�”Ø$/�Ô!Ý&)¨$¬+Ñ&6Ô&6¸!Ò&;�Ô#Ý&)Ð)OÐ)OÀ4Ä;Ð)OÑ)OÔ)OÑ&OÔ&O�Ô#Ø�åÐE¸EÐEÐEÑFÔFÐFr   r)   c                ól   — | j         �
d| j        ›�nd}d| j        j        › dt	          | ¦  «        ›|› d�S )a  A representation of the specifier set that shows all internal state.

        Note that the ordering of the individual specifiers within the set may not
        match the input string.

        >>> SpecifierSet('>=1.0.0,!=2.0.0')
        <SpecifierSet('!=2.0.0,>=1.0.0')>
        >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False)
        <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=False)>
        >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True)
        <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=True)>
        Nr>  r  r}   rb   r?  r@  rA  s     r   rf   zSpecifierSet.__repr__à  sT   € ð Ô Ð,ð 2˜TÔ-Ð1Ð1Ð1àð 	ð B�4”>Ô*ÐAÐA­S°©Y¬YÐA¸#ÐAÐAÐAÐAr   c                ód   — d                      d„ |                      ¦   «         D ¦   «         ¦  «        S )an  A string representation of the specifier set that can be round-tripped.

        Note that the ordering of the individual specifiers within the set may not
        match the input string.

        >>> str(SpecifierSet(">=1.0.0,!=1.0.1"))
        '!=1.0.1,>=1.0.0'
        >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False))
        '!=1.0.1,>=1.0.0'
        rÎ  c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r   rÅ   rË  s     r   r¯  z'SpecifierSet.__str__.<locals>.<genexpr>   s(   è è € Ð@Ð@ 1�˜A™œÐ@Ð@Ð@Ð@Ð@Ð@r   )rª  rØ  r_   s    r   rÇ   zSpecifierSet.__str__õ  s1   € ð �xŠxÐ@Ð@¨×(=Ò(=Ñ(?Ô(?Ð@Ñ@Ô@Ñ@Ô@Ð@r   r\   c                óD   — t          |                      ¦   «         ¦  «        S r   )r^   rØ  r_   s    r   r`   zSpecifierSet.__hash__  s   € Ý�D×)Ò)Ñ+Ô+Ñ,Ô,Ð,r   rM   úSpecifierSet | strc                óÈ  — t          |t          ¦  «        rt          |¦  «        }nt          |t          ¦  «        st          S t          ¦   «         }| j        |j        z   |_        t          |j        ¦  «        dk    |_        | j        p|j        |_        d|_        | j	        �| j	        |j	        k    r|j	        |_	        n#|j	        €| j	        |_	        nt          d¦  «        ‚|S )a‚  Return a SpecifierSet which is a combination of the two sets.

        :param other: The other object to combine with.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1'
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1')
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        r   NzFCannot combine SpecifierSets with True and False prerelease overrides.)r&   r)   r   rU   rÆ  r(   rÂ  rÃ  rÅ  rô   r%  )rK   rM   Ú	specifiers      r   Ú__and__zSpecifierSet.__and__  sç   € õ �e�SÑ!Ô!ð 	"Ý  Ñ'Ô'ˆEˆEÝ˜E¥<Ñ0Ô0ð 	"Ý!Ð!å ‘N”Nˆ	Øœ;¨¬Ñ5ˆ	ÔÝ#& yÔ'7Ñ#8Ô#8¸AÒ#=ˆ	Ô Ø#'Ô#6Ð#N¸%Ô:Nˆ	Ô Ø"&ˆ	Ôð ÔÐ$¨Ô(9¸UÔ=OÒ(OÐ(OØ%*Ô%7ˆIÔ"Ð"ØÔÐ'Ø%)Ô%6ˆIÔ"Ð"åØXñô ð ð Ðr   r.   c                ó   — t          |t          t          f¦  «        rt          t          |¦  «        ¦  «        }nt          |t          ¦  «        st          S |                      ¦   «         |                     ¦   «         k    S )a¡  Whether or not the two SpecifierSet-like objects are equal.

        :param other: The other object to check against.

        The value of :attr:`prereleases` is ignored.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) ==
        ...  SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True))
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1"
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2")
        False
        )r&   r)   r   r   rU   rØ  rV   s     r   rW   zSpecifierSet.__eq__&  sk   € õ& �e�c¥9Ð-Ñ.Ô.ð 	"Ý ¥ U¡¤Ñ,Ô,ˆEˆEÝ˜E¥<Ñ0Ô0ð 	"Ý!Ð!à×$Ò$Ñ&Ô&¨%×*@Ò*@Ñ*BÔ*BÒBÐBr   c                ó*   — t          | j        ¦  «        S )z7Returns the number of specifiers in this specifier set.)r(   rÆ  r_   s    r   Ú__len__zSpecifierSet.__len__@  s   € å�4”;ÑÔÐr   úIterator[Specifier]c                ó*   — t          | j        ¦  «        S )zð
        Returns an iterator over all the underlying :class:`Specifier` instances
        in this specifier set.

        >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str)
        [<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>]
        )ÚiterrÆ  r_   s    r   Ú__iter__zSpecifierSet.__iter__D  s   € õ �D”KÑ Ô Ð r   r–   c                ó¾   — | j         }d}|D ]?}|€|                     ¦   «         }Œt          ||                     ¦   «         ¦  «        }|s nŒ@|€t          d¦  «        ‚|S )a  Intersect all specifiers into a single list of version ranges.

        Returns an empty list when unsatisfiable.  ``===`` specs are
        modeled as full range; string matching is checked separately
        by :meth:`_check_arbitrary_unsatisfiable`.
        Nz _get_ranges called with no specs)rÆ  r  r¤   ÚRuntimeError)rK   ré  r�   rÌ  s       r   Ú_get_rangeszSpecifierSet._get_rangesN  sw   € ð ”ˆà15ˆØð 	ð 	ˆAØˆ~ØŸš™œ��å*¨6°1·<²<±>´>ÑBÔB�Øð Ø�Eðð ˆ>ÝÐAÑBÔBÐBØˆr   c                óÞ   — | j         }|�|S | j        s	d| _         dS |                      ¦   «          }|s|                      ¦   «         }|s| j        du r|                      ¦   «         }|| _         |S )a¦  Check whether this specifier set can never be satisfied.

        Returns True if no version can satisfy all specifiers simultaneously.

        >>> SpecifierSet(">=2.0,<1.0").is_unsatisfiable()
        True
        >>> SpecifierSet(">=1.0,<2.0").is_unsatisfiable()
        False
        >>> SpecifierSet("").is_unsatisfiable()
        False
        >>> SpecifierSet("==1.0,!=1.0").is_unsatisfiable()
        True
        NF)rÄ  rÆ  rû  Ú_check_arbitrary_unsatisfiablerÍ   Ú_check_prerelease_only_ranges)rK   Úcachedr�   s      r   Úis_unsatisfiablezSpecifierSet.is_unsatisfiabled  sŽ   € ð Ô'ˆØÐØˆMàŒ{ð 	Ø%*ˆDÔ"Ø�5à×%Ò%Ñ'Ô'Ð'ˆàð 	;Ø×8Ò8Ñ:Ô:ˆFàð 	:˜$Ô*¨eÐ3Ð3Ø×7Ò7Ñ9Ô9ˆFà!'ˆÔØˆr   c                óÀ   — |                       ¦   «         D ]H\  }}t          |j        ¦  «        }|€ dS |j        �||j        k     r dS ||j        k    r
|j        r dS ŒIdS )z€With prereleases=False, check if every range contains only
        pre-release versions (which would be excluded from matching).NFT)rû  rÀ   rG   rn   )rK   r‘   r’   Únearests       r   rþ  z*SpecifierSet._check_prerelease_only_ranges…  sz   € ð !×,Ò,Ñ.Ô.ð 	ð 	‰LˆE�5Ý-¨e¬mÑ<Ô<ˆGØˆØ�u�uØŒ}Ð$¨°%´-Ò(?Ð(?Ø�u�uØ˜%œ-Ò'Ð'¨E¬OÐ'Ø�u�uøØˆtr   c                ó~  ‡‡— d„ | j         D ¦   «         }|sdS |d         j                             ¦   «         Št          ˆfd„|dd…         D ¦   «         ¦  «        rdS t	          |d         j        ¦  «        Š| j        du r‰�	‰j        rdS d„ | j         D ¦   «         }|sdS ‰€dS t          ˆfd	„|D ¦   «         ¦  «         S )
a  Check === (arbitrary equality) specs for unsatisfiability.

        === uses case-insensitive string comparison, so the only candidate
        that can match ``===V`` is the literal string V.  This method
        checks whether that candidate is excluded by other specifiers.
        c                ó(   — g | ]}|j         d k    ¯|‘ŒS ©r  ©r  rË  s     r   rÍ  z?SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<listcomp>™  s$   € ÐCÐCÐC˜1¨q¬z¸UÒ/BÐ/B�QÐ/BÐ/BÐ/Br   Fr   c              3  óR   •K  — | ]!}|j                              ¦   «         ‰k    V — Œ"d S r   )rG   r‘   )r®  rÌ  Úfirsts     €r   r¯  z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>Ÿ  s4   øè è € ÐAÐA¨aˆqŒy�ŠÑ Ô  EÒ)ÐAÐAÐAÐAÐAÐAr   r   NTc                ó(   — g | ]}|j         d k    ¯|‘ŒS r  r  rË  s     r   rÍ  z?SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<listcomp>¯  s$   € ÐBÐBÐB˜!¨a¬j¸EÒ.AÐ.A�AÐ.AÐ.AÐ.Ar   c              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S r   r€  )r®  rÌ  Ú	candidates     €r   r¯  z>SpecifierSet._check_arbitrary_unsatisfiable.<locals>.<genexpr>·  s/   øè è € Ð?Ð?°�q—z’z )Ñ,Ô,Ð?Ð?Ð?Ð?Ð?Ð?r   )rÆ  rG   r‘   r³  r°   rÍ   r½   rç  )rK   r   Ústandardr  r  s      @@r   rý  z+SpecifierSet._check_arbitrary_unsatisfiable’  s  øø€ ð DÐC ¤ÐCÑCÔCˆ	Øð 	Ø�5ð ˜!”Ô$×*Ò*Ñ,Ô,ˆÝÐAÐAÐAÐA°9¸Q¸R¸R´=ÐAÑAÔAÑAÔAð 	Ø�4õ $ I¨a¤LÔ$8Ñ9Ô9ˆ	ð
 Ô Ð%Ð%ØÐ%ØÔ'ð &ð �4àBÐB˜tœ{ÐBÑBÔBˆØð 	Ø�5àÐà�4åÐ?Ð?Ð?Ð?°hÐ?Ñ?Ô?Ñ?Ô?Ð?Ð?r   rÐ   r­   c                ó,   — |                       |¦  «        S )aq  Return whether or not the item is contained in this specifier.

        :param item: The item to check for.

        This is used for the ``in`` operator and behaves the same as
        :meth:`contains` with no ``prereleases`` argument passed.

        >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1")
        False
        >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)
        True
        r€  r�  s     r   r‚  zSpecifierSet.__contains__¹  rƒ  r   Ú	installedc                óä   — t          |¦  «        }|�|r	|j        rd}|�| j        rt          |t          ¦  «        s|}n|}t          t          |                      |g|¬¦  «        ¦  «        ¦  «        S )a‡  Return whether or not the item is contained in this SpecifierSet.

        :param item:
            The item to check for, which can be a version string or a
            :class:`Version` instance.
        :param prereleases:
            Whether or not to match prereleases with this SpecifierSet. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases, as there are no other versions.
        :param installed:
            Whether or not the item is installed. If set to ``True``, it will
            accept prerelease versions even if the specifier does not allow them.

        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3")
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3"))
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1")
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False).contains("1.3.0a1")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True)
        True
        NTr…  )r°   r½   rÃ  r&   r   r.   rU  rÚ   )rK   rÐ   rÍ   r  rG   Ú
check_items         r   rÓ   zSpecifierSet.containsÎ  sz   € õ@ " $Ñ'Ô'ˆàÐ 9Ð°Ô1FÐØˆKð ˆ?˜tÔ2ˆ?½:ÀdÍGÑ;TÔ;Tˆ?ØˆJˆJà ˆJÝ•D˜Ÿš j \¸{˜ÑKÔKÑLÔLÑMÔMÐMr   .rÔ   rÕ   rÖ   r×   c                ó   — d S r   r   rÙ   s       r   rÚ   zSpecifierSet.filterû  rÛ   r   rÜ   rÝ   rÞ   c                ó   — d S r   r   rÙ   s       r   rÚ   zSpecifierSet.filter  rà   r   rá   râ   rã   c                ó€  ‡‡— |€| j         �| j         }| j        rpt          | j        ¦  «        dk    r(| j        d                              ||€dn|‰¬¦  «        }n|                      |‰|€dn|¬¦  «        }|�|S t          |‰¦  «        S |du rt          |¦  «        S |du rˆˆfd„|D ¦   «         S t          |‰¦  «        S )	ac  Filter items in the given iterable, that match the specifiers in this set.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases if there are no other versions.
        :param key:
            A callable that takes a single argument (an item from the iterable) and
            returns a version string or :class:`Version` instance to be used for
            filtering.

        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
        ['1.3']
        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")]))
        ['1.3', <Version('1.4')>]
        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"]))
        ['1.5a1']
        >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet(">=1.2.3").filter(
        ... [{"ver": "1.2"}, {"ver": "1.3"}],
        ... key=lambda x: x["ver"]))
        [{'ver': '1.3'}]

        An "empty" SpecifierSet will filter items based on the presence of prerelease
        versions in the set.

        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"]))
        ['1.3']
        >>> list(SpecifierSet("").filter(["1.5a1"]))
        ['1.5a1']
        >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        Nr   r   T)rÍ   rÖ   r…  Fc              3  óh   •K  — | ],}t          ‰€|n
 ‰|¦  «        ¦  «        xŠ	 �‰j        °(|V — Œ-d S r   )r°   r½   )r®  rÐ   rÖ   rG   s     €€r   r¯  z&SpecifierSet.filter.<locals>.<genexpr>^  sj   øè è € ð ð àå /¸¸°°ÈÈÈTÉÌÑ SÔ SÐS�WØðà"Ô0ðð ðð ð ð ð	ð r   )rÍ   rÆ  r(   rÚ   Ú_filter_versionsr�  r÷  )rK   rÔ   rÍ   rÖ   ÚfilteredrG   s      ` @r   rÚ   zSpecifierSet.filter  s%  øø€ ðd Ð 4Ô#3Ð#?ØÔ*ˆKð Œ;ð 	=õ �4”;ÑÔ 1Ò$Ð$Øœ; qœ>×0Ò0ØØ(3Ð(;  ÀØð 1ñ ô ��ð  ×0Ò0ØØØ(3Ð(;  Àð 1ñ ô �ð Ð&Ø�å-¨h¸Ñ<Ô<Ð<ð ˜$ÐÐÝ˜‘>”>Ð!à˜%ÐÐðð ð ð ð à$ðñ ô ð õ *¨(°CÑ8Ô8Ð8r   c              #  ód  ‡‡‡K  — | j         €*t          d„ | j        D ¦   «         t          ¬¦  «        | _         | j         }|du }|D ]kŠt	          ‰€‰n
 ‰‰¦  «        ¦  «        Š‰€ t          ˆfd„|D ¦   «         ¦  «        r‰V — Œ@|r‰j        rŒJt          ˆˆˆfd„|D ¦   «         ¦  «        r‰V — ŒldS )a?  Filter versions against all specifiers in a single pass.

        Uses Cost Based Ordering: specifiers are sorted by _operator_cost so
        that cheap range operators reject versions early, avoiding expensive
        wildcard or compatible operators on versions that would have been
        rejected anyway.
        Nc              3  ód   K  — | ]+}|                      |j        ¦  «        |j        |j        fV — Œ,d S r   )rQ  r  rG   )r®  r!   s     r   r¯  z0SpecifierSet._filter_versions.<locals>.<genexpr>{  sQ   è è € ð ð àð ×'Ò'¨¬Ñ6Ô6¸¼ÀdÄmÐTðð ð ð ð ð r   rÕ  Fc              3  óš   •K  — | ]E\  }}}|d k    o6t          ‰¦  «                             ¦   «         |                     ¦   «         k    V — ŒFdS rÐ  r|  )r®  r6  r¿  r  rÐ   s       €r   r¯  z0SpecifierSet._filter_versions.<locals>.<genexpr>‰  sc   øè è € ð ð á"˜˜3 ð ˜%’KÐD¥C¨¡I¤I§O¢OÑ$5Ô$5¸¿º¹¼Ò$Dðð ð ð ð ð r   c              3  óÌ   •K  — | ]^\  }}}|d k    rDt          ‰€‰n
 ‰‰¦  «        ¦  «                             ¦   «         |                     ¦   «         k    n |‰|¦  «        V — Œ_dS rÐ  r|  )r®  Úop_fnr¿  r  rÐ   rÖ   rœ  s       €€€r   r¯  z0SpecifierSet._filter_versions.<locals>.<genexpr>�  s�   øè è € ð ð ñ #�E˜3 ð ˜’;�;õ ˜C˜K�D�D¨S¨S°©Y¬YÑ7Ô7×=Ò=Ñ?Ô?À3Ç9Â9Á;Ä;ÒNÐNà�U˜6 3Ñ'Ô'ðð ð ð ð ð r   )rÅ  r×  rÆ  rÀ  r°   rç  r½   )rK   rÔ   rÖ   rÍ   ÚopsÚexclude_prereleasesrÐ   rœ  s     `   @@r   r  zSpecifierSet._filter_versionsk  sG  øøøè è € ð ÔÐ%Ý!'ðð à $¤ðñ ô õ #ð"ñ "ô "ˆDÔð Ô ˆØ)¨UÐ2Ðàð 	ð 	ˆDÝ$¨S¨[ T T¸c¸cÀ$¹i¼iÑHÔHˆFàˆ~åð ð ð ð à&)ðñ ô ñ ô ð ð �J�J�JøØ$ð 	¨Ô)=ð 	ØÝð ð ð ð ð ð ð '*ð	ñ ô ñ ô ð ð �
�
�
øð'	ð 	r   rŽ  )rÇ  rÈ  rÍ   rË   r   rI   )r   rÓ  rå   r�  )r   rÜ  r‘  ri   rh   )rM   rî  r   r   rg   )r   rõ  r�  )r   r.   )rÐ   r­   r   r.   ré   )rÐ   r­   rÍ   rË   r  rË   r   r.   ræ   rç   rè   rê   r   )rÔ   rá   rÖ   râ   rÍ   rË   r   rã   )r;   r<   r=   r>   rj   rL   rØ  rì   rÍ   rï   r/  r8  rf   rÇ   r`   rñ  rW   rô  rø  rû  r   rþ  rý  r‚  rÓ   rð   rñ   rÚ   r  r   r   r   r   r   6  s™  € € € € € ðð ð$€Ið 13Ø#'ð+3ð +3ð +3ð +3ð +3ðZð ð ð ð ðð ð ñ „Xðð& Ôð&ð &ð &ñ Ôð&ð0ð 0ð 0ð 0ð7Gð 7Gð 7Gð 7GðrBð Bð Bð Bð*Að Að Að Að-ð -ð -ð -ðð ð ð ðBCð Cð Cð Cð4 ð  ð  ð  ð!ð !ð !ð !ðð ð ð ð,ð ð ð ðBð ð ð ð%@ð %@ð %@ð %@ðN#ð #ð #ð #ð0 $(Ø!%ð	+Nð +Nð +Nð +Nð +NðZ „_ð $(Øð	+ð +ð +ð +ñ „_ð+ð „_ð $(Ø.1ð	ð ð ð ñ „_ðð $(Ø7;ð	^9ð ^9ð ^9ð ^9ð ^9ðH $(ð	,ð ,ð ,ð ,ð ,ð ,ð ,r   r   )r   r   )r!   r"   r   r#   )r+   r"   r   r,   )r4   r5   r   r5   )r‘   rl   r’   r‡   r   r.   )r•   r–   r—   r–   r   r˜   )rG   r   r   r   )rG   r­   r   r®   )rR   ro   r   r®   )rÔ   rá   rÖ   râ   r   rã   )rG   r)   r   r   )r¨  r   r   r)   )r«  r)   r   r.   )r£  r   r   r\   )r£  r   r·  r\   r   r   )r»  r¼  r   r\   )Lr>   Ú
__future__r   rí   r?   Ú	functoolsrV  r“  Úsysrð   r   r   r   r   r   r	   r
   r   r   Úutilsr   rG   r   r   Úversion_infor   Útyping_extensionsr   r    r*   r/   r0   r)   r­   r1   r.   rL  r3   r—  r8   ÚEnumr:   Útotal_orderingrD   rl   r‡   ro   r'   Ú_VersionRanger  r   r�   r”   r¤   r©   r¬   r°   r´   r¸   r»   rÀ   r%  r   ÚABCMetar   r   r”  r¤  r�  rY  rT  rX  r_  re  rÀ  r   r   r   r   ú<module>r(     sŸ  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø €€€ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,àÔ�wÒÐØ Ð Ð Ð Ð Ð Ð Øð ,Ø+Ð+Ð+Ð+Ð+Ð+ðð ð €ðð ð ð ðð ð ð ð0ð 0ð 0ð 0ð €GˆC�L„L€Ø˜ ˜Ô%€Ø�WÐ1¸ÐIÑIÔIÐ Ø˜W c˜N¨DÐ0Ô1Ð ð  '˜w xÑ0Ô0€Ð 0Ð 0Ð 0Ñ 0ð=ð =ð =ð =ðð ð ð ð �D”Iñ ô ð ð Ôð;Qð ;Qð ;Qð ;Qð ;Qñ ;Qô ;Qñ Ôð;Qð| Ôð%Hð %Hð %Hð %Hð %Hñ %Hô %Hñ Ôð%HðP Ôð%Hð %Hð %Hð %Hð %Hñ %Hô %Hñ Ôð%HðP 
Ôð 4Ø˜wÐ(8¸$Ð>Ô?Ðð ˜+ {Ð2Ô3€Màˆ;�t˜UÑ#Ô#€Øˆ;�t˜UÑ#Ô#€Ø&.°Ð%9Ð$;€Ð ;Ð ;Ð ;Ñ ;ð)ð )ð )ð )ðð ð ð ð4Kð Kð Kð KðSð Sð Sð Sð
ð ð ð ð+ð +ð +ð +ð@ð @ð @ð @ð2ð 2ð 2ð 2ð9ð 9ð 9ð 9ð*	ð 	ð 	ð 	ð 	�zñ 	ô 	ð 	ðOð Oð Oð Oð O˜cœkð Oñ Oô Oð Oðdr,ð r,ð r,ð r,ð r,�ñ r,ô r,ð r,ðj �”
Ð:Ñ;Ô;€ð' ð ' ð ' ð ' ðTð ð ð ð,'ð 'ð 'ð 'ðð ð ð ðð ð ð ðOð Oð Oð Oð2ð 2ð 2ð 2ð6a	ð a	ð a	ð a	ð a	�=ñ a	ô a	ð a	ð a	ð a	r   