§
    ›Çj«©  ã                  ó\  — 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mZm	Z
mZmZ ddlmZmZmZmZ dZdZdZd	Zd
ZdZdQd„Z ej        dej        ej        z  ¦  «        Z ej        d¦  «        Z ej        d¦  «        Z dRd„Z! G d„ de¦  «        Z"dSd„Z#dTd„Z$dUd„Z% G d„ de¦  «        Z&d d!œdVd%„Z'dWd&„Z(dXd(„Z)dYd)„Z*dYd*„Z+dYd+„Z,dZd-„Z-d.Z.d/Z/dddd0œd[d6„Z0d\d8„Z1d]d:„Z2 e3d;¦  «        Z4d^d>„Z5 G d?„ d@e¦  «        Z6d_dC„Z7e7Z8 G dD„ dEe¦  «        Z9d`dF„Z:dGa;dadI„Z<ddJœdbdL„Z=dcdO„Z>ddJœdddP„Z?dS )ea¢  The core-pin comparison and the runtime repair, owned by the core and shared
by every consumer.

WHY IT LIVES HERE. Every distribution that consumes this package asks the same
question: is the invisible-core that is about to execute the one my own
metadata declares? Written when two did - the Playwright wrapper and the
profile manager, the latter deleted 2026-08-18 - and copies of that comparison
drift, so a diagnosis that differs between products is worse than no diagnosis
at all. One comparison, one message set, one requirement parser, parameterised
by the asking distribution's name.

WHY IT EXISTS AT RUNTIME AT ALL. Once a consumer's [project].dependencies
carries an exact `invisible-core==N.M.0`, pip refuses the obvious ways to get
this wrong and `pip check` reports the rest. Two paths still slip through, both
measured:

  * `pip install --no-deps <consumer>` and lockfile installers that resolve each
    distribution separately. Nothing at install time leaves a trace, and nobody
    runs `pip check` inside a built container.
  * a partial install: the files under site-packages/invisible_core were
    replaced but the .dist-info was not (a clobbering copy, a hand-patched image
    layer). pip and `pip check` both read the record, so both call that
    environment healthy. The files are what actually runs.

WHAT IS COMPARED, and why this pair rather than the obvious one.
  WANT     the `==` version parsed back out of the CONSUMER's metadata, i.e.
           out of its pyproject. One source, no constant in code to drift.
  HAVE     invisible_core._version.__version__, recomputed from the packaged
           seal.json on every import. This is the truth of the code that will
           execute, and it is read by importing this package's own sibling
           module, never through importlib.metadata.
  RECORDED importlib.metadata.version("invisible-core"), the installer's
           record. Diagnostics ONLY. It never triggers on its own: asserting on
           it gives a false green on both cases above, and a false red on any
           editable checkout whose dist-info was frozen at install time.

ONE PARSER. `invisible-core==X` is spelled several legal ways in a Requires-Dist
line, and every place that reads one used to carry its own regex with its own
acceptance set. That is this project's original bug in miniature: N copies of one
thing that must agree, and the weakest copy decides. parse_requirement() below is
the only implementation. pin_from_requirements() is the only place that decides
which requirement is the pin, and it takes the requirement strings from whatever
source the caller has (importlib.metadata, a doctor's own facts object, a
pyproject's [project].dependencies), so nothing has a reason to write a second
one.

WHAT THIS MODULE DOES AT IMPORT TIME, AND WHY IT IS ALLOWED TO. enforce_core_pin()
does not just report a mismatch, it repairs it: it installs the declared version
and picks it up in-process, so the user's script keeps running. The window that
makes that sound is narrow and the guards below are what keep it narrow:

  * it runs from the FIRST line of a consumer's package __init__, at which
    instant invisible_core has not been imported by anybody else. The consumer
    captures that fact before importing us and passes it in as
    core_preimported; when it is true the repair is refused, because swapping
    the core underneath objects somebody already holds is not a reload, it is
    two versions alive at once.
  * one attempt per environment, enforced by a module flag AND an env var, so a
    re-exec cannot turn a failing repair into a loop.
  * every failure degrades to the message that was printed before this existed.
    A missing network, a read-only site-packages or a locked-down image gets a
    remedy to run, never a traceback and never a retry.
  * it says what it is about to do before it does it, and what it did after. A
    package that silently mutates the environment it was imported into is worse
    than one that asks.

An EDITABLE core is repaired too, on purpose, and that is the one case where the
repair costs the user something: installing over `pip install -e` detaches the
environment from their working tree. The tree survives, but imports stop coming
from it. So the path is captured BEFORE the install and the exact command that
reattaches it is printed afterwards, prominently.

WHAT THIS MODULE CANNOT SEE, and who owns that. By the time anything in here
runs, invisible_core has already been imported successfully - this module is
part of it. So "the core is not installed", "the core is installed but its own
dependencies are missing" and "the core is installed but so damaged it cannot
derive its own version" are not states this module can ever report on. They
belong to the import floor in each consumer's package __init__, which catches
the failure of `from invisible_core._pin import ...` and classifies it. That
split is deliberate; it is why pin_problem() no longer takes a parameter
describing the health of the core, and why there is no probe of it here.

"NOT CHECKABLE" IS NOT "HEALTHY". A consumer that declares no `invisible-core==`
requirement, or whose install record is missing entirely, leaves nothing to
enforce. That is a graceful skip, not a pass: pin_report() returns
verdict="not-checkable" with the reason, exactly as `python -m invisible_core
doctor` prints it. Only verdict="violated" raises or repairs.

It never checks the seal DIGEST - the consumer has no independent expectation of
the core's bytes without hardcoding one, which is a second source of truth and
the original bug again. Content belongs to the publish gate, where the previous
release's digest is available to compare against.

Keep this module's imports to the standard library, and keep the two sibling
imports it needs inside the functions that need them. If it ever grows a
module-level import of anything heavier, a core that is broken in some other way
produces a traceback about an internal module instead of the remedy.
é    )ÚannotationsN)ÚPackageNotFoundErrorÚdistributionÚrequiresÚversion)ÚIterableÚ
NamedTupleÚOptionalÚSequencezinvisible-coreÚINVISIBLE_CORE_PINÚINVISIBLE_CORE_AUTOFIXÚ INVISIBLE_CORE_AUTOFIX_ATTEMPTEDÚINVISIBLE_CORE_AUTOFIX_TIMEOUTg     Àr@ÚreturnÚfloatc                 óÔ   — t           j                             t          d¦  «                             ¦   «         } | r)	 t          | ¦  «        }|dk    r|S n# t          $ r Y nw xY wt          S )aW  Seconds, from the env var when it parses to a positive number.

    A malformed or non-positive value falls back to the default rather than
    raising or disabling the bound: this is read on the import path, and there
    is no sensible reason for a typo in an env var to break someone's import,
    nor to silently turn the timeout off.
    Ú r   )ÚosÚenvironÚgetÚINSTALL_TIMEOUT_ENVÚstripr   Ú
ValueErrorÚ_INSTALL_TIMEOUT_DEFAULT)ÚrawÚvs     úCC:\Projects\Historical\venv\Lib\site-packages\invisible_core/pin.pyÚ_install_timeoutr   Š   sw   € õ Œ*�.Š.Õ,¨bÑ
1Ô
1×
7Ò
7Ñ
9Ô
9€CØ
ð ð	Ý�c‘
”
ˆAØ�1ŠuˆuØ�ð øåð 	ð 	ð 	ØˆDð	øøøå#Ð#s   »A Á
A ÁA zj^\s*(?P<name>[A-Za-z0-9][A-Za-z0-9._-]*)\s*
         (?:\[(?P<extras>[^\]]*)\])?\s*
         (?P<rest>.*)$z^==(?P<version>[^\s,;()\[\]]+)$z\bextra\s*==ÚmarkerÚstrúOptional[bool]c                ó´   — | sdS 	 ddl m} n# t          $ r Y dS w xY w	 t           || ¦  «                             ¦   «         ¦  «        S # t
          $ r Y dS w xY w)a/  True / False when the marker can be evaluated here, None when it cannot.

    A marker that is FALSE on this host means pip never installed that
    requirement, so there is no pin here to compare. Reading it as an active pin
    is a false RED on an environment `pip check` calls healthy, and because the
    guard runs at import time it makes the package refuse to load on exactly the
    platform the marker was written to exclude.

    The evaluation is `packaging`'s and never a parser of ours: marker syntax is
    a language, and a second implementation of it is the defect this module
    already carries a comment about. `packaging` is not one of our runtime
    dependencies, so when it is absent the honest answer is "cannot tell" - which
    is reported as nothing-to-compare, never as a violation.
    Tr   )ÚMarkerN)Úpackaging.markersr#   ÚImportErrorÚboolÚevaluateÚ	Exception)r   r#   s     r   Ú_marker_appliesr)   À   s–   € ð ð ØˆtðØ,Ð,Ð,Ð,Ð,Ð,Ð,øÝð ð ð ØˆtˆtðøøøðÝ�F�F˜6‘N”N×+Ò+Ñ-Ô-Ñ.Ô.Ð.øÝð ð ð Øˆtˆtðøøøs   † �
šŸ)A	 Á	
AÁAc                  óP   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   d	ed
<   dS )ÚRequirementaò  One requirement string, reduced to what it MEANS.

    name       PEP 503 normalised, so invisible_core, Invisible.Core and
               invisible-core are one name.
    extras     normalised and sorted, so [b,a] and [A, B] are one extras set.
    specifier  all whitespace removed and one layer of the parenthesised
               dialect stripped, so `(== 1.2.3)` and `==1.2.3` are one
               specifier. Empty for a bare requirement.
    marker     the environment marker, whitespace-collapsed. Empty when absent.
    pinned     the version when the specifier is exactly one `==`, else None.
               None is "declares no comparable version", which covers a bare
               name, a range, and a direct reference (`name @ url`).
    r    r   ÚnameÚtupleÚextrasÚ	specifierr   úOptional[str]ÚpinnedN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    r   r+   r+   Û   sW   € € € € € € ðð ð €H€H�HØ€I€I�IØ€M€M�MØ€N€N�NØ€K€K�KØÐÐÑÐÐr9   r+   r,   c                óR   — t          j        dd| ¦  «                             ¦   «         S )zHPEP 503: invisible_core, Invisible.Core and invisible-core are one name.z[-_.]+ú-)ÚreÚsubÚlower)r,   s    r   Únormalise_namer?   ñ   s"   € åŒ6�)˜S $Ñ'Ô'×-Ò-Ñ/Ô/Ð/r9   ÚreqúOptional[Requirement]c           
     ó  — t                                t          | ¦  «        ¦  «        }|€dS |                     d¦  «        pd                     d¦  «        \  }}}t          j        dd|¦  «        }|                     d¦  «        r|                     d¦  «        r
|dd	…         }|                     d
¦  «        pd}t          t          d„ |                     d¦  «        D ¦   «         ¦  «        ¦  «        }d                     |                     ¦   «         ¦  «        }t                               |¦  «        }	t          t          | ¦  «        t          |                     d¦  «        ¦  «        ||||	r|	                     d¦  «        nd¬¦  «        S )z‚Parse one requirement string. None when it does not even start with a
    distribution name, which is the only shape this refuses.NÚrestr   ú;z\s+ú(ú)é   éÿÿÿÿr.   c              3  ó€   K  — | ]9}|                      ¦   «         ¯t          |                      ¦   «         ¦  «        V — Œ:d S )N)r   r?   )Ú.0Úes     r   ú	<genexpr>z$parse_requirement.<locals>.<genexpr>  s\   è è € ð Oð OØ&'ÀAÇGÂGÁIÄIðOÝ�q—w’w‘y”yÑ!Ô!ðOð Oð Oð Oð Oð Or9   ú,ú r,   r   )r   r,   r.   r/   r   r1   )Ú_REQ_REÚmatchr    ÚgroupÚ	partitionr<   r=   Ú
startswithÚendswithr-   ÚsortedÚsplitÚjoinÚ
_PINNED_REr+   r?   )
r@   ÚmÚ	spec_partÚ_Úmarker_partr/   Ú
raw_extrasr.   r   r1   s
             r   Úparse_requirementr^   ö   s„  € õ 	�Š•c˜#‘h”hÑÔ€AØ€yØˆtØ!"§¢¨¡¤Ð!6°B× AÒ AÀ#Ñ FÔ FÑ€Iˆq�+Ý”�v˜r 9Ñ-Ô-€IØ×Ò˜CÑ Ô ð $ Y×%7Ò%7¸Ñ%<Ô%<ð $Ø˜a ˜d”Oˆ	Ø—’˜Ñ"Ô"Ð( b€JÝ•6ð Oð OØ+5×+;Ò+;¸CÑ+@Ô+@ðOñ Oô Oñ Oô Oñ Pô P€Fà�XŠX�k×'Ò'Ñ)Ô)Ñ*Ô*€FÝ×Ò˜iÑ(Ô(€FÝÝ�‰HŒHÝ˜AŸGšG F™OœOÑ,Ô,ØØØØ*0Ð:ˆv�|Š|˜IÑ&Ô&Ð&°dðñ ô ð r9   c                ó(  — t          | ¦  «        }|€4d                     t          | ¦  «                             ¦   «         ¦  «        S |j        rdd                     |j        ¦  «        › d�nd}|j        r
d|j        › �nd}|j        › |› |j        › |› �S )aU  A requirement reduced to a comparable string, so two spellings of the
    same requirement compare equal.

    A name spelled with an underscore, a space around the operator and the
    parenthesised dialect all describe the same requirement, and a gate that
    compares the raw literals refuses a push over a space and then reports that
    the pin "disagrees with the core", which is false. Anything
    parse_requirement cannot take apart falls back to whitespace
    collapsing, which can only ever make two requirements compare UNEQUAL, so a
    gate built on this keeps failing closed.
    NrN   ú[rM   ú]r   z; )r^   rW   r    rV   r.   r   r,   r/   )r@   Úparsedr.   r   s       r   Úcanonical_requirementrc     sŸ   € õ ˜sÑ#Ô#€FØ€~Ø�xŠx�˜C™œŸšÑ(Ô(Ñ)Ô)Ð)Ø/5¬}ÐDÐ+�—’˜&œ-Ñ(Ô(Ð+Ð+Ð+Ð+À"€FØ%+¤]Ð:Ð!�&”-Ð!Ð!Ð!¸€FØŒkÐ=˜6Ð= 6Ô#3Ð=°VÐ=Ð=Ð=r9   c                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )ÚPinDeclarationaÜ  What the asking distribution declares about invisible-core.

    status is one of:
      "pinned"    - exactly one `invisible-core==X` requirement. version is X.
      "no_record" - the distribution has no install record (a source checkout),
                    so it never declared anything.
      "no_pin"    - installed, but no comparable requirement: either no
                    invisible-core requirement at all, or one with no `==`
                    (a bare direct reference carries no version), or one hidden
                    behind an extra.
      "ambiguous" - more than one invisible-core `==` requirement, disagreeing.
    Only "pinned" is checkable. The other three are reported as such, never as
    a pass.
    r0   r   r    ÚstatusÚdetailNr2   r8   r9   r   re   re   #  s?   € € € € € € ðð ð ÐÐÑØ€K€K�KØÐÐÑÐÐr9   re   zthis distribution©Ú	dist_namer   úIterable[str]ri   c          
     ó  — g }d}d}d}d}| D ]Œ}t          |¦  «        }|�|j        t          k    rŒ$t                               |j        ¦  «        rd}ŒFt          |j        ¦  «        }	|	dur
|	du rd}nd}Œh|j        €d}Œr|                     |j        ¦  «         Œ�|s^|r|› dt          › d�}
n=|r|› dt          › d�}
n-|r|› dt          › d�}
n|r|› dt          › d	�}
n|› d
t          › d�}
t          dd|
¦  «        S t          t          |¦  «        ¦  «        }t          |¦  «        dk    rBt          dd|› dt          |¦  «        › dt          › d�d                     |¦  «        z   ¦  «        S t          |d         dd¦  «        S )a;  Pick the invisible-core pin out of a list of requirement strings.

    THE single implementation. Feed it importlib.metadata.requires(), a doctor's
    own DistFacts.requires, or a pyproject's [project].dependencies: the
    acceptance set is then the same everywhere by construction rather than by
    review.
    FNTú
 requires zC with no == version (a direct reference declares no version at all)z
 declares zG only behind an extra, so a default install resolves nothing to comparez~ only under an environment marker that is false on this host, so this install never resolved it and there is no pin to comparez} under an environment marker this environment cannot evaluate (packaging is not importable), so the pin is not checkable herez declares no z requirementÚno_pinrG   Ú	ambiguousz disagreeing z pins: z, r   r1   )r^   r,   Ú	CORE_NAMEÚ_EXTRA_MARKER_REÚsearchr   r)   r1   Úappendre   rU   ÚsetÚlenrW   )r   ri   ÚfoundÚsaw_core_without_pinÚsaw_core_under_extraÚsaw_core_under_false_markerÚ saw_core_under_unreadable_markerr   rb   Úappliesrg   Údistincts               r   Úpin_from_requirementsr|   7  sN  € ð €EØ ÐØ ÐØ"'ÐØ',Ð$Øð $ð $ˆÝ" 3Ñ'Ô'ˆØˆ>˜Vœ[­IÒ5Ð5ØÝ×"Ò" 6¤=Ñ1Ô1ð 	Ø#'Ð ØÝ! &¤-Ñ0Ô0ˆØ˜$ÐÐØ˜%ÐÐØ.2Ð+Ð+à37Ð0ØØŒ=Ð Ø#'Ð ØØ�Š�V”]Ñ#Ô#Ð#Ð#àð 6Øð 	HØ"ð Ið I­ið Ið Ið IˆFˆFà!ð 	HØ"ð Jð J­ið Jð Jð JˆFˆFà(ð 		HØ"ð Dð D­ið Dð Dð DˆFˆFð .ð 	HØ"ð Gð G­ið Gð Gð GˆFˆFð "ÐGÐGµ	ÐGÐGÐGˆFÝ˜d H¨fÑ5Ô5Ð5å•c˜%‘j”jÑ!Ô!€HÝ
ˆ8�}„}�qÒÐÝØ�+ØÐRÐR¥C¨¡M¤MÐRÐRÅ	ÐRÐRÐRØ�iŠi˜Ñ!Ô!ñ"ñ#ô #ð 	#õ ˜( 1œ+ x°Ñ6Ô6Ð6r9   c                óâ   — 	 t          | ¦  «        pg }nL# t          $ r t          dd| › d�¦  «        cY S t          $ r }t          dd| › d|› �¦  «        cY d}~S d}~ww xY wt	          || ¬¦  «        S )zEParse the `invisible-core==` requirement out of dist_name's metadata.NÚ	no_recordzO has no install record, so it declares nothing (running from a source checkout)z metadata unreadable: rh   )Ú	_requiresr   re   r(   r|   )ri   ÚreqsrK   s      r   Úpin_declarationr�   u  sÉ   € ðZÝ˜Ñ#Ô#Ð) rˆˆøÝð 1ð 1ð 1ÝØ�+Øð 0ð 0ð 0ñ1ô 1ð 	1ð 	1ð 	1õ ð Zð Zð ZÝ˜d K°IÐ1XÐ1XÐUVÐ1XÐ1XÑYÔYÐYÐYÐYÐYÐYÐYøøøøðZøøøå  °Ð;Ñ;Ô;Ð;s   ‚ ”A´	A½AÁAÁAr0   c                ó*   — t          | ¦  «        j        S )zÒThe `invisible-core==X` version dist_name declares, or None.

    None means "nothing to enforce", NOT "healthy". Callers that need to tell
    those apart use pin_declaration() or pin_report()["verdict"].
    )r�   r   rh   s    r   Údeclared_core_pinrƒ   ƒ  s   € õ ˜9Ñ%Ô%Ô-Ð-r9   c                 ó~   — 	 ddl m}  n# t          $ r Y dS w xY wt          | ¦  «                             ¦   «         }|pdS )aT  The version of the core code that will actually run, derived live.

    Read from the sibling _version module, which recomputes the version from the
    packaged seal.json (seal tag + CORE_REVISION) on every import.

    There is deliberately NO fallback to invisible_core.__version__: that
    attribute is importlib.metadata.version("invisible-core"), i.e. the
    installer's record, and falling back to it would hand back the record in the
    exact case this function exists to catch - a site-packages whose files were
    clobbered while the .dist-info stayed put. The old fallback made that
    environment report as healthy. None means "could not be determined", and it
    is rendered as such in the mismatch message rather than assumed healthy.

    The import is INSIDE the function on purpose, and it is what makes the
    in-process repair work: after repair_core() drops invisible_core.* from
    sys.modules and re-imports the package, this line resolves to the freshly
    installed _version module, so the same function object reports the new
    version without the process restarting.
    rG   )Ú__version__N)Ú_versionr…   r(   r    r   )ÚderivedÚtexts     r   Úinstalled_core_versionr‰   �  s_   € ð(Ø4Ð4Ð4Ð4Ð4Ð4Ð4øÝð ð ð Øˆtˆtðøøøåˆw‰<Œ<×ÒÑÔ€DØˆ<�4Ðs   ‚	 ‰
–c                 óf   — 	 t          t          ¦  «        S # t          $ r Y dS t          $ r Y dS w xY w)z0What the installer wrote down. Diagnostics only.N)Ú_pkg_versionro   r   r(   r8   r9   r   Úrecorded_core_versionrŒ   ¬  sP   € ðÝ�IÑ&Ô&Ð&øÝð ð ð ØˆtˆtÝð ð ð Øˆtˆtðøøøs   ‚ –
0£	0¯0c                 ó  — 	 t          t          ¦  «                             d¦  «        } n# t          $ r Y dS w xY w| sdS 	 ddl}|                     | ¦  «        }n# t          $ r Y dS w xY w|                     di ¦  «                             d¦  «        sdS t          |                     dd¦  «        ¦  «        }|                     d¦  «        r0dd	l	m
}m} dd
lm}  | | ||¦  «        j        ¦  «        ¦  «        S |pdS )a³  The source tree an editable core points at, or None.

    PEP 610: pip records direct_url.json for anything not installed from an
    index, and marks dir_info.editable for `pip install -e`. An install with no
    direct_url.json is by definition not editable.

    Read BEFORE any repair runs: the install replaces the .dist-info, so
    afterwards there is nothing left to read and the reattach command could not
    be printed.
    zdirect_url.jsonNr   Údir_infoÚeditableÚurlr   zfile:///)ÚunquoteÚurlparse)Úurl2pathname)Ú_distributionro   Ú	read_textr(   ÚjsonÚloadsr   r    rS   Úurllib.parser‘   r’   Úurllib.requestr“   Úpath)r   r–   Úinfor�   r‘   r’   r“   s          r   Úeditable_core_pathrœ   ¶  sF  € ðÝ�IÑ&Ô&×0Ò0Ð1BÑCÔCˆˆøÝð ð ð Øˆtˆtðøøøàð ØˆtðØˆˆˆà�zŠz˜#‰ŒˆˆøÝð ð ð Øˆtˆtðøøøà�8Š8�J Ñ#Ô#×'Ò'¨
Ñ3Ô3ð ØˆtÝ
ˆd�hŠh�u˜bÑ!Ô!Ñ
"Ô
"€CØ
‡~‚~�jÑ!Ô!ð 9Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø/Ð/Ð/Ð/Ð/Ð/àˆ|˜G˜G H H¨S¡M¤MÔ$6Ñ7Ô7Ñ8Ô8Ð8Øˆ;�$Ðs   ‚'* ª
8·8Á A Á
A(Á'A(r-   c                 ó|   — t          t          d„ t          t          j        ¦  «        D ¦   «         ¦  «        ¦  «        S )a  Every invisible_core module currently in sys.modules, sorted.

    The repair's soundness turns on this being empty before the consumer's
    import ran: nobody can be holding an object from the version we are about to
    replace if nothing imported it yet.
    c              3  óP   K  — | ]!}|d k    s|                      d¦  «        ¯|V — Œ"dS )Úinvisible_corezinvisible_core.N)rS   )rJ   rY   s     r   rL   z&core_modules_loaded.<locals>.<genexpr>ß  sP   è è € ð Eð EØØÐ Ò Ð  A§L¢LÐ1BÑ$CÔ$CÐ ð 	
Ø Ð Ð Ð ðEð Er9   )r-   rU   ÚlistÚsysÚmodulesr8   r9   r   Úcore_modules_loadedr£   Ø  sR   € õ •ð Eð EÝ�œÑ$Ô$ðEñ Eô Eñ Eô Eñ Fô Fð Fr9   z:invisible_core/_version.py, from seal.json + CORE_REVISIONzan undeterminable version)ÚrecordedÚeditable_pathÚdist_versionÚwantÚhaver¤   r¥   r¦   c                ó2  — |r| › d|› �n| }|rdt           › d|› d�nd| › �}|sdS ||k    rdS |pt          }|rht           › dt           › d|› d	t           › d|› d
|› dt           › d|› dt          › dt          dddt	          |¦  «        g¦  «        › d| › d|› d| › dt
          › d�S |�J||k    rDt           › d|› d	t           › d|› dt           › d|› dt          › dt           › d|› d|› dt           › d|› d�S t           › d|› d	t           › d|› dt           › d|› dt          › d|› �S )a1  Pure verdict. Returns the message to raise, or None when there is
    nothing to raise about.

    None covers two different situations on purpose, and the caller is expected
    to keep them apart: the pin holds, or there was no pin to check. Split out
    from pin_report so every branch is testable without building a broken
    environment - but note that the fact-gathering functions above are tested
    against real constructed site-packages layouts, not through this seam, since
    a pure verdict function proves nothing about what is fed into it.
    rN   zpip install "ú==ú"zpip install --force-reinstall Nz version mismatch, and z is an editable install.
  z requires  z
  editable source     z
  that tree builds    z   (zÎ)
Repairing this replaces the editable install with a copy from the index: the tree above stays on disk, but imports stop coming from it and edits in it stop having any effect. To reattach it afterwards:
  ÚpipÚinstallú-ez,
To keep this pair instead, move the pin in z's pyproject.toml to z., or roll the core's seal back to the release z1 was built against.
To run this pair anyway: set z=allowzJ version mismatch, and its install record disagrees with its own files.
  z
  the files on disk say  z)
  the install record says z«
pip and pip check read the record, so both report this environment as healthy. The files are what actually runs, and a plain install is a no-op here because pip believes z9 is already present.
Run: pip install --force-reinstall "z version mismatch.
  z
  installed           aa  )
This pair is not tested together. The prefs, the spoofed User-Agent and the protocol expectations are generated per engine release, so a core from another release describes a browser you are not running.
An install that skipped dependency resolution is the usual cause: pip install --no-deps, or a lockfile that pins the two packages separately.
Run: )ro   Ú_UNDETERMINEDÚ_DERIVED_FROMÚformat_commandr    ÚSKIP_ENV)	ri   r§   r¨   r¤   r¥   r¦   ÚconsumerÚwant_cmdÚshowns	            r   Úpin_problemr¶   ó  sÄ  € ð& 1=ÐK�)Ð,Ð,˜lÐ,Ð,Ð,À)€HØ8<ð BÐ4¥	Ð4Ð4¨TÐ4Ð4Ð4Ð4ØA°iÐAÐAð ð ð àˆtàˆt‚|€|ØˆtàÐ!•M€Eàð 
åð =ð =µð =ð =Øð=ð =Ý&/ð=ð =Ø37ð=ð =à%2ð=ð =õ &/ð=ð =ð 27ð=ð =õ =Jð=ð =õ   ¨	°4½¸]Ñ9KÔ9KÐ LÑMÔMð=ð =ð ;Dð=ð =ð ð=ð =ð ENð=ð =õ -5ð=ð =ð =ð	
ð Ð ¨DÒ 0Ð 0åð Hð HàðHð Hå&/ðHð Hà37ðHð Hõ )2ðHð Hð 5:ðHð Hõ @MðHð Hõ *3ð	Hð Hð 6>ð	Hð Hð 04ðHð Hõ 4=ðHð Hð AEðHð Hð Hð
	
õ ð 	ð 	Øð	ð 	Ý"+ð	ð 	Ø/3ð	ð 	å!*ð	ð 	à-2ð	ð 	å8Eð	ð 	ð ð	ð 	ð
r9   Údictc                ód  — t          | ¦  «        }|j        }t          ¦   «         }t          ¦   «         }t	          ¦   «         }	 t          | ¦  «        }n# t          $ r d}Y nw xY wt          | |||||¬¦  «        }|�d\  }}	n|r|rd\  }}	nd}|j        p	t          › d�}	| ||j
        |||||	|du |dœ
S )a  Non-raising form. What a doctor command prints.

    verdict is the field to read, and it has three values, not two:
      "holds"         - a pin was declared and the code that will run matches it;
      "violated"      - problem carries the message;
      "not-checkable" - nothing was declared, or the declaration cannot be
                        compared. reason says which. This is NOT a pass, and
                        collapsing it into one was how a wrapper with an
                        unparsed pin reported itself healthy.
    N)ri   r§   r¨   r¤   r¥   r¦   )ÚviolatedN)ÚholdsNznot-checkablez derives no version)
Údistr§   Údeclared_statusr¨   r¤   r�   ÚverdictÚreasonÚokÚproblem)r�   r   r‰   rŒ   rœ   r‹   r(   r¶   rg   ro   rf   )
ri   Údeclarationr§   r¨   r¤   r�   r¦   rÀ   r½   r¾   s
             r   Ú
pin_reportrÂ   =  s  € õ " )Ñ,Ô,€KØÔ€DÝ!Ñ#Ô#€DÝ$Ñ&Ô&€HÝ!Ñ#Ô#€HðÝ# IÑ.Ô.ˆˆøÝð ð ð Øˆˆˆðøøøõ Ø $¨T¸HØ¨\ðñ ô €Gð ÐØ*‰ˆ��Ø	ð I�$ð IØ'‰ˆ��à!ˆØÔ#ÐH­)Ð'HÐ'HÐ'Hˆð ØØ&Ô-ØØØØØð ˜ˆoØðð ð s   ÁA ÁA!Á A!ÚNonec                óî   — t          | ¦  «        }|d         €dS |d         }t          j                             t          ¦  «        dk    rt          j        |t          d¬¦  «         dS t          |¦  «        ‚)a\  Raise ImportError when the core that will run is not the one dist_name
    declares. A pin that cannot be checked is a silent pass here and a named
    "not checkable" in pin_report().

    This is the REPORTING form and it installs nothing. It is what the doctor
    and the tests use. The import-time form that repairs is enforce_core_pin().
    rÀ   NÚallowé   ©Ú
stacklevel)	rÂ   r   r   r   r²   ÚwarningsÚwarnÚRuntimeWarningr%   )ri   ÚreportÚmsgs      r   Úassert_core_pinrÎ   o  sn   € õ ˜	Ñ"Ô"€FØˆiÔÐ ØˆØ
�Ô
€CÝ	„z‡~‚~•hÑÔ 7Ò*Ð*ÝŒ�c�>°aÐ8Ñ8Ô8Ð8ØˆÝ
�cÑ
Ô
Ðr9   z=<>[]!;&|$`"'*? 	ÚcmdúSequence[str]c                ó@   — d                      d„ | D ¦   «         ¦  «        S )z5A command list rendered so a human can paste it back.rN   c              3  óT   K  — | ]#}t          |¦  «        t          z  rd |› d �n|V — Œ$dS )r«   N)rs   Ú_NEEDS_QUOTING)rJ   Útokens     r   rL   z!format_command.<locals>.<genexpr>‹  sW   è è € ð Qð QØCH�˜E™
œ
¥^Ñ3Ð>ˆˆEˆˆˆˆ¸ðQð Qð Qð Qð Qð Qr9   )rW   )rÏ   s    r   r±   r±   ‰  s<   € à�8Š8ð Qð QØLOðQñ Qô Qñ Qô Qð Qr9   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚInstallOutcomer&   r¿   r    Úcommandrg   N)r3   r4   r5   r7   r8   r9   r   rÖ   rÖ   �  s+   € € € € € € Ø€H€H�HØ€L€L�LØ€K€K�K€K€Kr9   rÖ   Úexecuter&   c          
     ó’  — t          | ¦  «        }|st          d|d¦  «        S ddl}	 |                     t	          | ¦  «        ddt          ¦   «         ¬¦  «        }ns# |j        $ r, t          d|dt          ¦   «         › dt          › d	�¦  «        cY S t          $ r2}t          d|t          |¦  «        j
        › d
|› �¦  «        cY d}~S d}~ww xY w|j        dk    rt          d|d¦  «        S d                     |j        pddz   |j        pdz                        ¦   «         ¦  «        }t          d|d|j        › d
|dd…         › �¦  «        S )a_  The single choke point every pip command in this module goes through.

    The seam is deliberately used for FORMATTING as well as for running:
    execute=False renders the command and runs nothing. If it only ever fired on
    execution it would be dead in normal operation, and dead code is exactly what
    lets an installer be wired into a module whose tests are still green.

    Nothing raises out of here. A locked-down environment, a read-only
    site-packages, no network and no pip at all are all the same answer: ok is
    False and detail says why, and the caller degrades to the message.
    Fznot executedr   NT)Úcapture_outputrˆ   Útimeoutzpip did not finish within z5s and was stopped. Run the command by hand, or raise ú.ú: zpip exited 0rN   r   zpip exited ipþÿÿ)r±   rÖ   Ú
subprocessÚrunr    r   ÚTimeoutExpiredr   r(   Útyper3   Ú
returncoderW   ÚstderrÚstdoutrV   )rÏ   rØ   rµ   rÞ   Ú	completedrK   Útails          r   Ú_run_piprç   •  s¿  € õ ˜3ÑÔ€EØð <Ý˜e U¨NÑ;Ô;Ð;ØÐÐÐð	HØ—N’N¥4¨¡9¤9¸TÈÝ+;Ñ+=Ô+=ð #ñ ?ô ?ˆ	ˆ	øàÔ$ð Ið Ið IÝØ�5ðHÕ)9Ñ);Ô);ð Hð HÝ1DðHð Hð HñIô Ið 	Ið 	Ið 	Iõ ð Hð Hð HÝ˜e U­t°A©w¬wÔ/?Ð,FÐ,FÀ1Ð,FÐ,FÑGÔGÐGÐGÐGÐGÐGÐGøøøøðHøøøàÔ˜qÒ Ð Ý˜d E¨>Ñ:Ô:Ð:Ø�8Š8�iÔ&Ð,¨"°Ñ3°yÔ7GÐ7MÈ2ÑN×UÒUÑWÔWÑXÔX€DÝ˜% Ð([°iÔ6JÐ([Ð([ÈdÐSWÐSXÐSXÌkÐ([Ð([Ñ\Ô\Ð\s#   ¨2A Á3CÂ	CÂ'CÃ CÃCc                  óP   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   ded
<   dS )ÚRepairResulta,  attempted says whether the installer was reached at all, repaired says
    whether the environment is now correct IN THIS PROCESS. They are separate
    because "we ran pip and it worked" is not the claim that matters; the claim
    that matters is that the import about to happen gets the new files.r&   Ú	attemptedÚrepairedr    r¾   r×   r0   r¥   ÚrecoveryNr2   r8   r9   r   ré   ré   Â  s\   € € € € € € ðKð Kð €O€O�OØ€N€N�NØ€K€K�KØ€L€L�LØ Ð Ð Ñ ØÐÐÑÐÐr9   ré   c                 ó˜   — t           j                             t          d¦  «                             ¦   «                              ¦   «         dvS )z>False only when the kill switch is set. Repair is the default.r   )ÚoffÚ0ÚnoÚfalse)r   r   r   ÚAUTOFIX_ENVr   r>   r8   r9   r   Úautofix_enabledró   Ï  s=   € åŒ:�>Š>�+ rÑ*Ô*×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:ð C#ð #ð #r9   Frˆ   c                ót   — 	 t          || ¬¦  «         |                      ¦   «          d S # t          $ r Y d S w xY w)N)Úfile)ÚprintÚflushr(   )Ústreamrˆ   s     r   Ú_sayrù   Ú  sM   € ðÝˆd˜Ð Ñ Ô Ð Ø�Š‰ŒˆˆˆøÝð ð ð Øˆˆðøøøs   ‚%) ©
7¶7)rø   Úcore_preimportedc                óÈ	  — |�|nt           j        }|st          dddddd¦  «        S t           j        ddddt          › d	|› �g}t          |¦  «        }t          ¦   «         st          ddd
t          › d�|dd¦  «        S |r;t          ddt          › dt          t          ¦   «         ¦  «        › d| › d�|dd¦  «        S t          s$t          j                             t          ¦  «        rt          ddd|dd¦  «        S 	 ddlm}m}  | |t          ¦  «        ¦  «        }	nT# t$          $ rG}
t          dddt          › dt'          |
¦  «        j        › d|
› dt          › d�	|dd¦  «        cY d}
~
S d}
~
ww xY w|	�v|	j        so|	j        r
d|	j        › �nd}|	j        rt          ddd|	j        g¦  «        n
dt          › d�}t          ddt          › d|› d|	j        › d|› dt          › d�
|dd¦  «        S da
d t          j        t          <   t1          ¦   «         }|r t          dddt3          |¦  «        g¦  «        nd}t5          ¦   «         pt6          }t9          |d!| › d"t          › d#|› d$| › d%t          › d	|› d&�¦  «         |rt9          |d!| › d't          › d(|› d)�¦  «         t9          |d!| › d*|› �¦  «         	 t;          t=          |¦  «        d¬+¦  «        }n?# t$          $ r2}t?          d|t'          |¦  «        j        › d|› �¦  «        }Y d}~nd}~ww xY w|j         s4t9          |d!| › d,|j!        › �¦  «         t          dd|j!        |||¦  «        S t          ¦   «         D ]"}t           j"         #                    |d¦  «         Œ#d-dl$}| %                    ¦   «          	 | &                    d.¦  «         nd# t$          $ rW}t9          |d!| › d/t          › d	|› d0t'          |¦  «        j        › d|› �
¦  «         t          ddd1|› �|||¦  «        cY d}~S d}~ww xY wt5          ¦   «         }||k    rBt9          |d!| › d2t          › d3|pt6          › d4|› d&�	¦  «         t          ddd5|pd6› �|||¦  «        S t9          |d!| › d7t          › d#|› d8�¦  «         |rRt9          |d¦  «         t9          |d!| › d"t          › d9|› d:�¦  «         t9          |d;|› �¦  «         t9          |d¦  «         t          ddd<|||¦  «        S )=au  Install `want` and pick it up in this process. Never raises.

    core_preimported is not computed here on purpose: by the time any line of
    this module runs, invisible_core IS imported, so a check made here would
    always say yes and the guard would be theatre. The consumer captures it at
    the top of its own __init__, before it imports us, and passes it in.
    NFznothing is declared to installr   z-mr¬   r­   z--force-reinstallrª   z&the automatic repair is switched off (rF   z- was already imported before this check ran (z| of its modules are live), so replacing it now would leave objects from two different versions alive in one process. Import z) first, or run the command above yourselfzPan automatic repair was already attempted in this environment and is not retriedrG   )Ú_dist_factsÚ_editable_ofzcould not determine whether z is an editable install (rÝ   zw), and this repair overwrites whatever is there. Refusing rather than guessing. Run the command above yourself, or set z=off for the sessionz at r®   zpip install -e <path-to-ú>z is an EDITABLE installz (z„), so the automatic repair would overwrite a working tree with a published wheel. Refusing. Fix the environment yourself - usually `z` - or set TÚ1r`   z] rN   z is installed, but rl   rÜ   z] NOTE: z$ is an EDITABLE install pointing at zi. Repairing it detaches this environment from that tree: the sources stay, imports stop coming from them.z] repairing it now: )rØ   z(] the automatic repair did not succeed: r   rŸ   z] the repair installed z! but the result does not import: z,the freshly installed core does not import: z] the repair ran but z still derives z, not z)after the install the core still derives Únothingz] repaired in place: z= is now the version this process will run. No restart needed.z3 is NO LONGER an editable install. Your sources at zD are untouched, but nothing imports them any more. To reattach them:z    rë   )'r¡   rã   ré   Ú
executablero   r±   ró   rò   rt   r£   Ú_REPAIR_ATTEMPTEDr   r   r   ÚAUTOFIX_ATTEMPTED_ENVÚ_envrü   rý   r(   rá   r3   Úsafe_to_reinstallrš   Úwhyrœ   r    r‰   r¯   rù   ÚINSTALL_RUNNERr    rÖ   r¿   rg   r¢   ÚpopÚ	importlibÚinvalidate_cachesÚimport_module)ri   r§   rú   rø   ÚoutrÏ   rµ   rü   rý   r½   ÚexcÚwhereÚremedyr�   rì   ÚbeforeÚoutcomerK   r,   r	  Únows                        r   Úrepair_corer  â  sµ  € ð Ð&ˆ&ˆ&­C¬J€Càð \Ý˜E 5Ð*JÈBÐPTÐVZÑ[Ô[Ð[åŒ>˜4 ¨	Ð3FÝÐ!Ð!˜4Ð!Ð!ð#€Cå˜3ÑÔ€EåÑÔð XÝØ�5ØCµ[ÐCÐCÐCÀUÈDÐRVñXô Xð 	Xð ð ÝØ�5Ýð Kð KÝÕ'Ñ)Ô)Ñ*Ô*ðKð Kð  ðKð Kð Kð �4˜ñô ð 	õ ð �BœJŸNšNÕ+@ÑAÔAð ÝØ�5ðà�4˜ñ	ô ð 	ðBØ3Ð3Ð3Ð3Ð3Ð3Ð3Ð3à�,˜{˜{­9Ñ5Ô5Ñ6Ô6ˆˆøÝð ð ð ÝØ�5ðB­9ð Bð BÝ�S‘	”	Ô"ðBð BØ&)ðBð Bõ !,ðBð Bð Bð �4˜ñô ð 	ð 	ð 	ð 	ð 	ð 	øøøøðøøøð Ð 7Ô#<ÐØ)0¬Ð=Ð%�w”|Ð%Ð%Ð%¸2ˆð ”\ðO•. %¨°D¸'¼,Ð!GÑHÔHÐHØ'NÅ)Ð'NÐ'NÐ'Nð 	åØ�5Ýð Eð E°ð Eð E¸'¼+ð Eð Eð ðEð Eõ $/ðEð Eð Eð �4˜ñô ð 	ð ÐØ(+…B„JÕ$Ñ%õ "Ñ#Ô#€Hð
 KSÐ\�~˜u i°µs¸8±}´}ÐEÑFÔFÐFÐX\€HÝ#Ñ%Ô%Ð6­€Fåˆð /�)ð /ð /�yð /ð /¨6ð /ð /Àið /ð /Ý#ð/ð /Ø'+ð/ð /ð /ñ 0ô 0ð 0àð GÝˆSð F�ið Fð F­ð Fð FØðFð Fð Fñ 	Gô 	Gð 	Gõ 	ˆÐ8�)Ð8Ð8°Ð8Ð8Ñ9Ô9Ð9ðKÝ ¥ c¡¤°DÐ9Ñ9Ô9ˆˆøÝð Kð Kð KÝ  ¨µ$°q±'´'Ô2BÐ/IÐ/IÀaÐ/IÐ/IÑJÔJˆˆˆˆˆˆøøøøðKøøøð Œ:ð TÝˆSÐY�iÐYÐYÈÌÐYÐYÑZÔZÐZÝ˜D %¨¬¸ÀÈ(ÑSÔSÐSõ $Ñ%Ô%ð $ð $ˆÝŒ�Š˜˜dÑ#Ô#Ð#Ð#ØÐÐÐà×ÒÑ!Ô!Ð!ð'Ø×ÒÐ 0Ñ1Ô1Ð1Ð1øÝð 'ð 'ð 'ÝˆSð >�ið >ð >½	ð >ð >ÀTð >ð >Ý&*¨1¡g¤gÔ&6ð>ð >Ø:;ð>ð >ñ 	?ô 	?ð 	?åØ�%ÐKÈÐKÐKØ�8˜Xñ'ô 'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøøð'øøøõ !Ñ
"Ô
"€CØ
ˆd‚{€{ÝˆSð 9�ið 9ð 9µið 9ð 9ØÐ)�Mð9ð 9Ø15ð9ð 9ð 9ñ 	:ô 	:ð 	:åØ�%ÐWÀSÐEUÈIÐWÐWØ�8˜Xñ'ô 'ð 	'õ 	ˆð ;�)ð ;ð ;µ)ð ;ð ;¸cð ;ð ;ð ;ñ <ô <ð <àð ÝˆS�"‰ŒˆÝˆSð -�ið -ð -¥9ð -ð -Ø (ð-ð -ð -ñ 	.ô 	.ð 	.õ 	ˆSÐ#˜Ð#Ð#Ñ$Ô$Ð$ÝˆS�"‰ŒˆÝ˜˜d J°°xÀÑJÔJÐJsU   Ã:!D Ä
E-Ä&<E(Å"E-Å(E-Ê*K	 Ë	
LË(L Ì LÎN# Î#
PÎ-AO?Ï9PÏ?PrÀ   Úresultc                óL   — |j         rd|j        › d�}nd|j        › d�}| › d|› �S )zwThe message the user gets when the repair could not fix it. The original
    diagnosis, unchanged, plus what was tried.z7An automatic repair was attempted and did not succeed: rÜ   z#No automatic repair was attempted: ú
)rê   r¾   )rÀ   r  Únotes      r   Ú_with_repair_noter  �  sJ   € ð Ôð FØYÈÌÐYÐYÐYˆˆàE°V´]ÐEÐEÐEˆØÐÐ˜ÐÐÐr9   c               ó¶  — t          | ¦  «        }|d         }|€dS t          j                             t          ¦  «        dk    rt          j        |t          d¬¦  «         dS t          | |d         ||¬¦  «        }|j	        r<t          | ¦  «        }|d         €dS t          t          |d         |¦  «        ¦  «        ‚t          t          ||¦  «        ¦  «        ‚)z”The import-time form: check, and REPAIR instead of only reporting.

    Raises ImportError only when the environment is still wrong afterwards.
    rÀ   NrÅ   rÆ   rÇ   r§   )ri   r§   rú   rø   )rÂ   r   r   r   r²   rÉ   rÊ   rË   r  rë   r%   r  )ri   rú   rø   rÌ   rÀ   r  Úafters          r   Úenforce_core_pinr  —  sß   € õ
 ˜	Ñ"Ô"€FØ�YÔ€GØ€Øˆå	„z‡~‚~•hÑÔ 7Ò*Ð*ÝŒ�g�~¸!Ð<Ñ<Ô<Ð<ØˆåØ &¨¤.Ø)°&ðñ ô €Fð „ð GÝ˜9Ñ%Ô%ˆØ�ÔÐ#ØˆFõ Õ+¨E°)Ô,<¸fÑEÔEÑFÔFÐFå
Õ'¨°Ñ8Ô8Ñ
9Ô
9Ð9r9   )r   r   )r   r    r   r!   )r,   r    r   r    )r@   r    r   rA   )r@   r    r   r    )r   rj   ri   r    r   re   )ri   r    r   re   )ri   r    r   r0   )r   r0   )r   r-   )ri   r    r§   r0   r¨   r0   r¤   r0   r¥   r0   r¦   r0   r   r0   )ri   r    r   r·   )ri   r    r   rÃ   )rÏ   rÐ   r   r    )rÏ   rÐ   rØ   r&   r   rÖ   )r   r&   )rˆ   r    r   rÃ   )ri   r    r§   r0   rú   r&   r   ré   )rÀ   r    r  ré   r   r    )ri   r    rú   r&   r   rÃ   )@r6   Ú
__future__r   r   r<   r¡   rÉ   Úimportlib.metadatar   r   r”   r   r   r   r‹   Útypingr   r	   r
   r   ro   r²   rò   r  r   r   r   ÚcompileÚVERBOSEÚDOTALLrO   rX   rp   r)   r+   r?   r^   rc   re   r|   r�   rƒ   r‰   rŒ   rœ   r£   r°   r¯   r¶   rÂ   rÎ   rs   rÓ   r±   rÖ   rç   r  ré   ró   r  rù   r  r  r  r8   r9   r   ú<module>r"     s)  ððað aðD #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à€	ð  €ð '€ð ;Ð ð 7Ð Ø Ð ð$ð $ð $ð $ðP ˆ"Œ*ðð „J�”Ññ	ô €ð ˆRŒZÐ:Ñ;Ô;€
ð
 �2”:˜oÑ.Ô.Ð ðð ð ð ð6ð ð ð ð �*ñ ô ð ð,0ð 0ð 0ð 0ð
ð ð ð ð2>ð >ð >ð >ð(ð ð ð ð �Zñ ô ð ð* 2Eð;7ð ;7ð ;7ð ;7ð ;7ð ;7ð|<ð <ð <ð <ð.ð .ð .ð .ðð ð ð ð8ð ð ð ðð ð ð ðD	Fð 	Fð 	Fð 	Fð" M€ð ,€ð #Ø#'Ø"&ðGð Gð Gð Gð Gð GðT/ð /ð /ð /ðdð ð ð ð. �Ð*Ñ+Ô+€ðQð Qð Qð Qðð ð ð ð �Zñ ô ð ð%]ð %]ð %]ð %]ðT €ð
ð 
ð 
ð 
ð 
�:ñ 
ô 
ð 
ð#ð #ð #ð #ð Ð ðð ð ð ð ðhKð hKð hKð hKð hKð hKðV ð  ð  ð  ð HLð :ð :ð :ð :ð :ð :ð :ð :r9   