§
    öyIf<H  ã                  óð  — 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 ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZ ddlZddlZdd
lmZ  edee¦  «        Zg d¢Z G d„ de¦  «        Z eddddd¦  «         eddddd¦  «         eddddd¦  «         eddd d!d"¦  «         ed#d$d%d&d'¦  «         ed(d)d*d+d,¦  «        gZd-„ eD ¦   «         ZdVd3„Z	 dWdXd:„Z ej!        ej"        ej#        ej$        ej%        ej&        ej'        d;œZ( ed<„ d=D ¦   «         ¦  «        Z) ej*        d>ej+        ¬?¦  «        Z,dYd@„Z-dZdD„Z.d[dF„Z/d\dG„Z0 edH¬I¦  «        d[dJ„¦   «         Z1d]dM„Z2d^dO„Z3 G dP„ dQej4        ¦  «        Z5d_dU„Z6dS )`a2  Unicode and some other ASCII characters can be used to create programs that run
much different compared to what a human reader would expect from them.

PEP 672 lists some examples.
See: https://www.python.org/dev/peps/pep-0672/

The following checkers are intended to make users are aware of these issues.
é    )ÚannotationsN)ÚOrderedDict)ÚIterable)Ú	lru_cache)Údetect_encoding)Ú
NamedTupleÚTypeVar)Únodes)ÚcheckersÚ_StrLike)
u   â€ªu   â€«u   â€¬u   â€­u   â€®u   â�¦u   â�§u   â�¨u   â�©u   â€�c                  óV   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   dd	„Zdd
„ZdS )Ú_BadCharz/Representation of an ASCII char considered bad.ÚstrÚnameÚ	unescapedÚescapedÚcodeÚ	help_textÚreturnc                ó(   — d| j         › d| j        › d�S )z0Used for the detailed error message description.zInvalid unescaped character z, use "z
" instead.)r   r   ©Úselfs    úK/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/unicode.pyÚdescriptionz_BadChar.descriptionC   s.   € ð-¨4¬9ð -ð -Ø”Lð-ð -ð -ð	
ó    c                ó   — d| j         › �S )z2Used to generate the human readable error message.zinvalid-character-)r   r   s    r   Ú
human_codez_BadChar.human_codeJ   s   € à/ D¤IÐ/Ð/Ð/r   N)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r   © r   r   r   r   :   sq   € € € € € € Ø9Ð9à€I€I�IØ€N€N�NØ€L€L�LØ€I€I�IØ€N€N�Nð
ð 
ð 
ð 
ð0ð 0ð 0ð 0ð 0ð 0r   r   Ú	backspaceúz\bÚE2510zUMoves the cursor back, so the character after it will overwrite the character before.zcarriage-returnúz\rÚE2511z]Moves the cursor to the start of line, subsequent characters overwrite the start of the line.Úsubúz\x1AÚE2512zcCtrl+Z "End of text" on Windows. Some programs (such as type) ignore the rest of the file after it.Úescúz\x1BÚE2513zNCommonly initiates escape codes which allow arbitrary control of the terminal.Únulú z\0ÚE2514zMostly end of input for python.zzero-width-spaceu   â€‹z\u200BÚE2515z9Invisible space character could hide real code execution.c                ó   — i | ]
}|j         |“ŒS r#   )r   )Ú.0Úchars     r   ú
<dictcomp>r6   Š   s   € ÐDÐDÐD°$˜œ¨ÐDÐDÐDr   ÚlineÚcodecr   r   Úintc                óø   — t          | t          ¦  «        r%t          | |¦  «                             |d¦  «        }n| }|                     d¦  «        }||k    r|                     d¦  «        }t          |¦  «        S )z?Get the length of a string like line as displayed in an editor.Úreplaceú
r'   )Ú
isinstanceÚbytesÚ_remove_bomÚdecodeÚrstripÚlen)r7   r8   ÚdecodedÚstrippeds       r   Ú_line_lengthrE   �   ss   € å�$�ÑÔð Ý˜d EÑ*Ô*×1Ò1°%¸ÑCÔCˆˆàˆà�~Š~˜dÑ#Ô#€Hà�7ÒÐØ—?’? 4Ñ(Ô(ˆåˆx‰=Œ=Ðr   é   Úsearch_dictúdict[_StrLike, _BadChar]Únew_lineÚbyte_str_lengthúdict[int, _BadChar]c                óp  — i }|                      ¦   «         D ]ž\  }}|| vrŒ
|j        dk    r+|                      |¦  «        rt          | ¦  «        d|z  z
  }nd}d}|                      ||¦  «        }	|	dk    r>|	|k    rt          |	|z  ¦  «        }
|||
<   |	dz   }|                      ||¦  «        }	|	dk    °>ŒŸ|S )zðGet all occurrences of search dict keys within line.

    Ignores Windows end of line and can handle bytes as well as string.
    Also takes care of encodings for which the length of an encoded code point does not
    default to 8 Bit.
    r'   é   Nr   rF   )Úitemsr   ÚendswithrB   Úfindr9   )r7   rG   rI   rJ   ÚresultÚ
search_forr5   Ú
ignore_posÚstartÚposÚcols              r   Ú_map_positions_to_resultrW   œ   sé   € ð #%€Fà'×-Ò-Ñ/Ô/ð /ð /Ñˆ
�DØ˜TÐ!Ð!Øð Œ>˜TÒ!Ð! d§m¢m°HÑ&=Ô&=Ð!Ý˜T™œ Q¨Ñ%8Ñ8ˆJˆJàˆJàˆØ�iŠi˜
 EÑ*Ô*ˆØ�AŠgˆgØ�jÒ Ð å˜# Ñ/Ñ0Ô0�Ø"��s‘Ø˜!‘GˆEØ—)’)˜J¨Ñ.Ô.ˆCð �AŠgˆgøð €Mr   )úutf-8úutf-16úutf-32úutf-16leúutf-16beúutf-32leúutf-32bec              #  ó4   K  — | ]}t           |         |fV — Œd S ©N)ÚUNICODE_BOMS)r4   r8   s     r   ú	<genexpr>rb   Ë   sB   è è € ð "ð "ð 	õ �%Ô˜%Ð ð"ð "ð "ð "ð "ð "r   )r]   r^   rX   r[   r\   z%utf[ -]?(8|16|32)[ -]?(le|be|)?(sig)?)Úflagsc                ó\   — t                                d| ¦  «                             ¦   «         S )zDMake sure the codec name is always given as defined in the BOM dict.zutf-\1\2)ÚUTF_NAME_REGEX_COMPILEDr)   Úlower©r8   s    r   Ú_normalize_codec_namerh   Ö   s$   € å"×&Ò& {°EÑ:Ô:×@Ò@ÑBÔBÐBr   Úencodedr>   Úencodingc                óŽ   — |t           vr| S t           |         }|                      |¦  «        r| t          |¦  «        d…         S | S )z$Remove the bom if given from a line.N)ra   Ú
startswithrB   )ri   rj   Úboms      r   r?   r?   Û   sL   € à•|Ð#Ð#ØˆÝ
�xÔ
 €CØ×Ò˜#ÑÔð #Ø•s˜3‘x”x�z�zÔ"Ð"Ø€Nr   Ústringc                óH   — t          |                      |¦  «        |¦  «        S )z#Encode a string but remove the BOM.)r?   Úencode©rn   rj   s     r   Ú_encode_without_bomrr   å   s   € å�v—}’} XÑ.Ô.°Ñ9Ô9Ð9r   c                ób   — |                       d¦  «        rdS |                       d¦  «        rdS dS )z6Return how many byte are usually(!) a character point.rZ   é   rY   rM   rF   ©rl   rg   s    r   Ú_byte_to_str_lengthrv   ê   s=   € à×Ò˜Ñ!Ô!ð ØˆqØ×Ò˜Ñ!Ô!ð Øˆqàˆ1r   iè  )Úmaxsizec                ó"   — t          | |¦  «        S )z3A cached version of encode used for search pattern.)rr   rq   s     r   Ú_cached_encode_searchry   ô   s   € õ ˜v xÑ0Ô0Ð0r   ÚsteamúIterable[bytes]c              #  óš  K  — |                      d¦  «        s|                      d¦  «        s
| E d{V —† dS d                     d„ | D ¦   «         ¦  «        }t          d|¦  «        }d}	 |                     ||¦  «        }|dk    r|||t	          |¦  «        z   …         V — n||d…         r||d…         V — dS |t	          |¦  «        z   }Œd)zÁHandle line ending for UTF16 and UTF32 correctly.

    Currently, Python simply strips the required zeros after 
 after the
    line ending. Leading to lines that can't be decoded properly
    rY   rZ   Nr   c              3  ó   K  — | ]}|V — Œd S r`   r#   )r4   r7   s     r   rb   z,_fix_utf16_32_line_stream.<locals>.<genexpr>  s"   è è € Ð2Ð2 D˜4Ð2Ð2Ð2Ð2Ð2Ð2r   r<   r   )rl   Újoinry   rP   rB   )rz   r8   ÚcontentrI   rT   rU   s         r   Ú_fix_utf16_32_line_streamr€   ú   s  è è € ð ×Ò˜HÑ%Ô%ð (¨e×.>Ò.>¸xÑ.HÔ.Hð (ØÐÐÐÐÐÐÐÐÐð —(’(Ð2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ˆå(¨¨uÑ5Ô5ˆð ˆð
	(Ø—,’,˜x¨Ñ/Ô/ˆCØ�aŠxˆxØ˜e c­C°©M¬MÑ&9Ð9Ô:Ð:Ð:Ð:Ð:ð ˜5˜6˜6”?ð *Ø! % & &œ/Ð)Ð)Ð)Ø�à�#˜h™-œ-Ñ'ˆEð
	(r   Ú
first_linec                ó�   — t                                ¦   «         D ]\  }}|                      |¦  «        r|c S Œt          d¦  «        ‚)a  Try to extract the codec (unicode only) by checking for the BOM.

    For details about BOM see https://unicode.org/faq/utf_bom.html#BOM

    Args:
        first_line: the first line of a file

    Returns:
        a codec name

    Raises:
        ValueError: if no codec was found
    z-No BOM found. Could not detect Unicode codec.)ÚBOM_SORTED_TO_CODECrN   rl   Ú
ValueError)r�   rm   r8   s      r   Úextract_codec_from_bomr…     sX   € õ *×/Ò/Ñ1Ô1ð ð ‰
ˆˆUØ× Ò  Ñ%Ô%ð 	ØˆLˆLˆLð	õ ÐDÑ
EÔ
EÐEr   c                  óº   — e Zd ZdZdZddddœd„ eD ¦   «         ¥Zed!d„¦   «         Zed!d„¦   «         Z	e
d"d„¦   «         Zed#d„¦   «         Zd$d„Zd%d„Zd%d„Zd&d„Zd S )'ÚUnicodeCheckeraƒ  Check characters that could be used to hide bad code to humans.

    This includes:

    - Bidirectional Unicode (see https://trojansource.codes/)

    - Bad ASCII characters (see PEP672)

        If a programmer requires to use such a character they should use the escaped
        version, that is also much easier to read and does not depend on the editor used.

    The Checker also includes a check that UTF-16 and UTF-32 are not used to encode
    Python files.

    At the time of writing Python supported only UTF-8. See
    https://stackoverflow.com/questions/69897842/ and https://bugs.python.org/issue1503789
    for background.
    Úunicode_checker)z?UTF-16 and UTF-32 aren't backward compatible. Use UTF-8 insteadúinvalid-unicode-codeczÿFor compatibility use UTF-8 instead of UTF-16/UTF-32. See also https://bugs.python.org/issue1503789 for a history of this issue. And https://softwareengineering.stackexchange.com/questions/102205/ for some possible problems when using UTF-16 for instance.)z_Contains control characters that can permit obfuscated code executed differently than displayedúbidirectional-unicodea  bidirectional unicode are typically not displayed characters required to display right-to-left (RTL) script (i.e. Chinese, Japanese, Arabic, Hebrew, ...) correctly. So can you trust this code? Are you sure it displayed correctly in all editors? If you did not write it or your language is not RTL, remove the special characters, as they could be used to trick you into executing code, that does something else than what it looks like.
More Information:
https://en.wikipedia.org/wiki/Bidirectional_text
https://trojansource.codes/)z2PEP8 recommends UTF-8 as encoding for Python filesúbad-file-encodingzsPEP8 recommends UTF-8 default encoding for Python files. See https://peps.python.org/pep-0008/#source-file-encoding)ÚE2501ÚE2502ÚC2503c                óv   — i | ]6}|j         |                     ¦   «         |                     ¦   «         |j        f“Œ7S r#   )r   r   r   r   )r4   Úbad_chars     r   r6   zUnicodeChecker.<dictcomp>n  sU   € ð 
ð 
ð 
ð ð ŒMØ×$Ò$Ñ&Ô&Ø×#Ò#Ñ%Ô%ØÔ"ðð
ð 
ð 
r   r8   r   r   Úboolc                óV   — |                       d¦  «        p|                       d¦  «        S )NrY   rZ   ru   rg   s    r   Ú_is_invalid_codecz UnicodeChecker._is_invalid_codecx  s)   € à×Ò Ñ)Ô)ÐG¨U×-=Ò-=¸hÑ-GÔ-GÐGr   c                ó,   — |                       d¦  «        S )NÚutfru   rg   s    r   Ú_is_unicodezUnicodeChecker._is_unicode|  s   € à×Ò Ñ&Ô&Ð&r   r7   r>   rK   c           	     óŒ  — 	 |                      |d¬¦  «        }t          }t          ||d¦  «        S # t          $ rˆ |}i }t          D ]K}t          j        t          ¦  «        5  ||t          |j        |¦  «        <   ddd¦  «         n# 1 swxY w Y   ŒLt          ||t          d|¦  «        t          |¦  «        ¬¦  «        cY S w xY w)zÿFind all matches of BAD_CHARS within line.

        Args:
            line: the input
            codec: that will be used to convert line/or search string into

        Return:
            A dictionary with the column offset and the BadASCIIChar
        Ústrict)Úerrorsr<   N)rJ   )
r@   ÚBAD_ASCII_SEARCH_DICTrW   ÚUnicodeDecodeErrorÚ	BAD_CHARSÚ
contextlibÚsuppressry   r   rv   )Úclsr7   r8   Úline_searchrG   Úline_search_byteÚsearch_dict_byter5   s           r   Ú_find_line_matchesz!UnicodeChecker._find_line_matches€  s.  € ð	ØŸ+š+ e°H˜+Ñ=Ô=ˆKÝ/ˆKÝ+¨K¸ÀdÑKÔKÐKøÝ!ð 	ð 	ð 	ð  $ÐØ68ÐÝ!ð ð �åÔ(Õ);Ñ<Ô<ð ð àð %Õ%:¸4¼>È5Ñ%QÔ%QÑRðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øõ
 ,Ø Ø Ý% d¨EÑ2Ô2Ý 3°EÑ :Ô :ð	ñ ô ð ð ð ð	øøøs3   ‚.1 ±0CÁ!BÁ:CÂB
Â
CÂB
Â2CÃCÚstreamú
io.BytesIOútuple[str, int]c                óD  — 	 t          | j        ¦  «        \  }}t          |¦  «        pd}nf# t          $ rY}|                      d¦  «         	 t          |                      ¦   «         ¦  «        }d}n# t          $ r}||‚d}~ww xY wY d}~nd}~ww xY wt          |¦  «        |fS )aâ  Determine the codec from the given stream.

        first tries https://www.python.org/dev/peps/pep-0263/
        and if this fails also checks for BOMs of UTF-16 and UTF-32
        to be future-proof.

        Args:
            stream: The byte stream to analyse

        Returns: A tuple consisting of:
                  - normalized codec name
                  - the line in which the codec was found

        Raises:
            SyntaxError: if failing to detect codec
        rF   r   N)r   ÚreadlinerB   ÚSyntaxErrorÚseekr…   r„   rh   )r¤   r8   ÚlinesÚcodec_definition_lineÚeÚves         r   Ú_determine_codeczUnicodeChecker._determine_codec¤  sÕ   € ð$	 õ +¨6¬?Ñ;Ô;‰LˆE�5õ %(¨¡J¤J O°!Ð!Ð!øÝð 	 ð 	 ð 	 ð �KŠK˜‰NŒNˆNð Ý.¨v¯ªÑ/@Ô/@ÑAÔA�Ø()Ð%Ð%øÝð  ð  ð  ð ˜R�øøøøð øøøð &Ð%Ð%Ð%Ð%øøøøð	 øøøõ % UÑ+Ô+Ð-BÐBÐBs8   ‚(+ «
BµB	Á#A/Á.B	Á/
BÁ9A<Á<BÂB	Â	Br¬   r9   ÚNonec                óœ   — |dk    rEd}|                       |¦  «        rd}|                      |||t          j        j        dd¬¦  «         dS dS )zCheck validity of the codec.rX   r‹   r‰   N©r7   Ú
end_linenoÚ
confidenceÚ
col_offsetÚend_col_offset)r“   Úadd_messageÚpylintÚ
interfacesÚHIGH)r   r8   r¬   Úmsgs       r   Ú_check_codeczUnicodeChecker._check_codecÍ  sv   € à�GÒÐØ%ˆCØ×%Ò% eÑ,Ô,ð .Ø-�Ø×ÒØð +Ø0Ý!Ô,Ô1ØØ#ð ñ 	ô 	ð 	ð 	ð 	ð	 Ðr   Úlinenoc                ó  — |                       ||¦  «        }|                     ¦   «         D ]\\  }}|                      |                     ¦   «         ||t          j        j        |dz   |t          |j        ¦  «        z   dz   ¬¦  «         Œ]dS )zLook for chars considered bad.rF   r²   N)	r£   rN   r·   r   r¸   r¹   rº   rB   r   )r   r7   r½   r8   ÚmatchesrV   r5   s          r   Ú_check_invalid_charsz#UnicodeChecker._check_invalid_charsÞ  sš   € à×)Ò)¨$°Ñ6Ô6ˆØ Ÿš™œð 
	ð 
	‰IˆC�Ø×ÒØ—’Ñ!Ô!ð Ø!Ý!Ô,Ô1Ø ™7Ø"¥S¨¬Ñ%8Ô%8Ñ8¸1Ñ<ð ñ 	ô 	ð 	ð 	ð
	ð 
	r   c                óâ   — |                       |¦  «        sdS t          D ]O}t          ||¦  «        |v r;|                      d||dt	          ||¦  «        t
          j        j        ¬¦  «          dS ŒPdS )z2Look for Bidirectional Unicode, if we use unicode.NrŠ   r   )r7   r³   rµ   r¶   r´   )r–   ÚBIDI_UNICODEry   r·   rE   r¸   r¹   rº   )r   r7   r½   r8   Ú	dangerouss        r   Ú_check_bidi_charsz UnicodeChecker._check_bidi_charsí  sž   € à×Ò Ñ&Ô&ð 	ØˆFÝ%ð 	ð 	ˆIÝ$ Y°Ñ6Ô6¸$Ð>Ð>ð
 × Ò Ø+ð  Ø%ð  !Ý#/°°eÑ#<Ô#<Ý%Ô0Ô5ð !ñ ô ð ð ��ð' ?ð	ð 	r   Únodeúnodes.Modulec                óº  — |                      ¦   «         5 }|                      |¦  «        \  }}|                      ||¦  «         |                     d¦  «         t	          t          ||¦  «        d¬¦  «        D ]I\  }}|dk    rt          ||¦  «        }|                      |||¦  «         |                      |||¦  «         ŒJ	 ddd¦  «         dS # 1 swxY w Y   dS )z3Perform the actual check by checking module stream.r   rF   )rT   N)	r¤   r¯   r¼   rª   Ú	enumerater€   r?   rÄ   rÀ   )r   rÅ   r¤   r8   Ú
codec_liner½   r7   s          r   Úprocess_modulezUnicodeChecker.process_module  s3  € à�[Š[‰]Œ]ð 	?˜fØ $× 5Ò 5°fÑ =Ô =ÑˆE�:Ø×Ò˜e ZÑ0Ô0Ð0à�KŠK˜‰NŒNˆNõ !*Ý)¨&°%Ñ8Ô8Àð!ñ !ô !ð ?ð ?‘�˜ð ˜Q’;�;Ý& t¨UÑ3Ô3�DØ×&Ò& t¨V°UÑ;Ô;Ð;Ø×)Ò)¨$°¸Ñ>Ô>Ð>Ð>ð?ð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?s   •B-CÃCÃCN)r8   r   r   r‘   )r7   r>   r8   r   r   rK   )r¤   r¥   r   r¦   )r8   r   r¬   r9   r   r°   )r7   r>   r½   r9   r8   r   r   r°   )rÅ   rÆ   r   r°   )r   r   r    r!   r   rœ   ÚmsgsÚstaticmethodr“   r–   Úclassmethodr£   r¯   r¼   rÀ   rÄ   rÊ   r#   r   r   r‡   r‡   -  sA  € € € € € ðð ð& €Dð
ð
ð*
ðG3ð 3ðV
ð 
ð &ð
ñ 
ô 
ðW3€Dðj ðHð Hð Hñ „\ðHð ð'ð 'ð 'ñ „\ð'ð ð!ð !ð !ñ „[ð!ðF ð&Cð &Cð &Cñ „\ð&CðPð ð ð ð"ð ð ð ðð ð ð ð4?ð ?ð ?ð ?ð ?ð ?r   r‡   Úlinterúpylint.lint.PyLinterr°   c                óJ   — |                       t          | ¦  «        ¦  «         d S r`   )Úregister_checkerr‡   )rÎ   s    r   ÚregisterrÒ     s$   € Ø
×Ò�N¨6Ñ2Ô2Ñ3Ô3Ð3Ð3Ð3r   )r7   r   r8   r   r   r9   )rF   )
r7   r   rG   rH   rI   r   rJ   r9   r   rK   )r8   r   r   r   )ri   r>   rj   r   r   r>   )rn   r   rj   r   r   r>   )r8   r   r   r9   )rz   r{   r8   r   r   r{   )r�   r>   r   r   )rÎ   rÏ   r   r°   )7r!   Ú
__future__r   Úcodecsr�   ÚioÚreÚcollectionsr   Úcollections.abcr   Ú	functoolsr   Útokenizer   Útypingr   r	   Úastroidr
   Úpylint.interfacesr¸   Úpylint.lintr   r   r>   r   rÂ   r   rœ   rš   rE   rW   ÚBOM_UTF8Ú	BOM_UTF16Ú	BOM_UTF32ÚBOM_UTF16_LEÚBOM_UTF16_BEÚBOM_UTF32_LEÚBOM_UTF32_BEra   rƒ   ÚcompileÚ
IGNORECASEre   rh   r?   rr   rv   ry   r€   r…   ÚBaseRawFileCheckerr‡   rÒ   r#   r   r   ú<module>ré      sß  ðð
ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ð Ð à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð àˆ7�:˜s EÑ*Ô*€ð
ð ð €ð*0ð 0ð 0ð 0ð 0ˆzñ 0ô 0ð 0ð. €HØØØØð ñ	ô 	ð €HØØØØð%ñ	ô 	ð €HØØØØð-ñ	ô 	ð €HØØØØðñ	ô 	ð €HØØØØØ)ñô ð €Hð 	ØØØØCñô ða9€	ðt EÐD¸)ÐDÑDÔDÐ ðð ð ð ð& ð	#ð #ð #ð #ð #ðN Œ_ØÔØÔØÔ#ØÔ#ØÔ#ØÔ#ðð €ð "�kð "ð "ð Kð"ñ "ô "ñ ô Ð ð %˜"œ*Ø+°2´=ðñ ô Ð ð
Cð Cð Cð Cð
ð ð ð ð:ð :ð :ð :ð
ð ð ð ð €�4ÐÑÔð1ð 1ð 1ñ Ôð1ð
(ð (ð (ð (ð<Fð Fð Fð Fð*i?ð i?ð i?ð i?ð i?�XÔ0ñ i?ô i?ð i?ðX4ð 4ð 4ð 4ð 4ð 4r   