§
    Ä[6gªN  ã            
       ó4  — d dl mZ d dlmZ d dlmZmZ ddlmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  G d„ d¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z! G d„ de¦  «        Z" G d„ de¦  «        Z# G d„ de¦  «        Z$ G d„ de¦  «        Z% G d„ de¦  «        Z& ed¬¦  «        dee'         dee'         de(fd „¦   «         Z) ed!¬¦  «        	 d)d$e'd%e*d&e(de*fd'„¦   «         Z+d(S )*é    )Ú	lru_cache)Ú	getLogger)ÚListÚOptionalé   )ÚCOMMON_SAFE_ASCII_CHARACTERSÚTRACEÚUNICODE_SECONDARY_RANGE_KEYWORD)Úis_accentuatedÚ	is_arabicÚis_arabic_isolated_formÚis_case_variableÚis_cjkÚis_emoticonÚ	is_hangulÚis_hiraganaÚis_katakanaÚis_latinÚis_punctuationÚis_separatorÚ	is_symbolÚis_thaiÚis_unprintableÚremove_accentÚunicode_rangec                   óV   — e Zd ZdZdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚMessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    Ú	characterÚreturnc                 ó   — t           ‚)z@
        Determine if given character should be fed in.
        ©ÚNotImplementedError©Úselfr   s     úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/charset_normalizer/md.pyÚeligiblezMessDetectorPlugin.eligible%   ó
   € õ "Ð!ó    Nc                 ó   — t           ‚)z‰
        The main routine to be executed upon character.
        Insert the logic in witch the text would be considered chaotic.
        r!   r#   s     r%   ÚfeedzMessDetectorPlugin.feed+   s
   € õ
 "Ð!r(   c                 ó   — t           ‚)zB
        Permit to reset the plugin to the initial state.
        r!   ©r$   s    r%   ÚresetzMessDetectorPlugin.reset2   r'   r(   c                 ó   — t           ‚)z…
        Compute the chaos ratio based on what your feed() has seen.
        Must NOT be lower than 0.; No restriction gt 0.
        r!   r,   s    r%   ÚratiozMessDetectorPlugin.ratio8   s
   € õ "Ð!r(   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚboolr&   r*   r-   ÚpropertyÚfloatr/   © r(   r%   r   r      s�   € € € € € ðð ð
" #ð "¨$ð "ð "ð "ð "ð"˜cð " dð "ð "ð "ð "ð"ð "ð "ð "ð ð"�uð "ð "ð "ñ „Xð"ð "ð "r(   r   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
Ú TooManySymbolOrPunctuationPluginr   Nc                 óL   — d| _         d| _        d| _        d | _        d| _        d S )Nr   F)Ú_punctuation_countÚ_symbol_countÚ_character_countÚ_last_printable_charÚ_frenzy_symbol_in_wordr,   s    r%   Ú__init__z)TooManySymbolOrPunctuationPlugin.__init__B   s0   € Ø'(ˆÔØ"#ˆÔØ%&ˆÔà37ˆÔ!Ø,1ˆÔ#Ð#Ð#r(   r   c                 ó*   — |                      ¦   «         S ©N©Úisprintabler#   s     r%   r&   z)TooManySymbolOrPunctuationPlugin.eligibleJ   ó   € Ø×$Ò$Ñ&Ô&Ð&r(   c                 ó(  — | xj         dz  c_         || j        k    ro|t          vrft          |¦  «        r| xj        dz  c_        nF|                     ¦   «         du r0t          |¦  «        r!t          |¦  «        du r| xj        dz  c_        || _        d S )Nr   Fé   )	r?   r@   r   r   r=   Úisdigitr   r   r>   r#   s     r%   r*   z%TooManySymbolOrPunctuationPlugin.feedM   sµ   € ØÐÔ Ñ"ÐÔð ˜Ô2Ò2Ð2ØÕ!=Ð=Ð=å˜iÑ(Ô(ð (ØÐ'Ô'¨1Ñ,Ð'Ô'Ð'à×!Ò!Ñ#Ô# uÐ,Ð,Ý˜iÑ(Ô(ð -å 	Ñ*Ô*¨eÐ3Ð3àÐ"Ô" aÑ'Ð"Ô"à$-ˆÔ!Ð!Ð!r(   c                 ó0   — d| _         d| _        d| _        d S ©Nr   )r=   r?   r>   r,   s    r%   r-   z&TooManySymbolOrPunctuationPlugin.reset_   s    € Ø"#ˆÔØ !ˆÔØˆÔÐÐr(   c                 ó^   — | j         dk    rdS | j        | j        z   | j         z  }|dk    r|ndS )Nr   ç        ç333333Ó?)r?   r=   r>   )r$   Úratio_of_punctuations     r%   r/   z&TooManySymbolOrPunctuationPlugin.ratiod   sK   € àÔ  AÒ%Ð%Ø�3ð Ô# dÔ&8Ñ8ØÔ!ñ'"Ðð (<¸sÒ'BÐ'BÐ#Ð#ÈÐKr(   r0   ©r1   r2   r3   rB   r5   r6   r&   r*   r-   r7   r8   r/   r9   r(   r%   r;   r;   A   s®   € € € € € ð2ð 2ð 2ð 2ð' #ð '¨$ð 'ð 'ð 'ð 'ð.˜cð . dð .ð .ð .ð .ð$ð ð ð ð
 ðL�uð Lð Lð Lñ „XðLð Lð Lr(   r;   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚTooManyAccentuatedPluginr   Nc                 ó"   — d| _         d| _        d S rL   ©r?   Ú_accentuated_countr,   s    r%   rB   z!TooManyAccentuatedPlugin.__init__q   s   € Ø%&ˆÔØ'(ˆÔÐÐr(   r   c                 ó*   — |                      ¦   «         S rD   )Úisalphar#   s     r%   r&   z!TooManyAccentuatedPlugin.eligibleu   s   € Ø× Ò Ñ"Ô"Ð"r(   c                 óh   — | xj         dz  c_         t          |¦  «        r| xj        dz  c_        d S d S ©Nr   )r?   r   rV   r#   s     r%   r*   zTooManyAccentuatedPlugin.feedx   sJ   € ØÐÔ Ñ"ÐÔå˜)Ñ$Ô$ð 	)ØÐ#Ô# qÑ(Ð#Ô#Ð#Ð#ð	)ð 	)r(   c                 ó"   — d| _         d| _        d S rL   rU   r,   s    r%   r-   zTooManyAccentuatedPlugin.reset~   s   € Ø !ˆÔØ"#ˆÔÐÐr(   c                 óN   — | j         dk     rdS | j        | j         z  }|dk    r|ndS )Né   rN   gffffffÖ?rU   )r$   Úratio_of_accentuations     r%   r/   zTooManyAccentuatedPlugin.ratio‚   s<   € àÔ  1Ò$Ð$Ø�3à'+Ô'>ÀÔAVÑ'VÐØ(=ÀÒ(EÐ(EÐ$Ð$È3ÐNr(   r0   rQ   r9   r(   r%   rS   rS   p   s®   € € € € € ð)ð )ð )ð )ð# #ð #¨$ð #ð #ð #ð #ð)˜cð ) dð )ð )ð )ð )ð$ð $ð $ð $ð ðO�uð Oð Oð Oñ „XðOð Oð Or(   rS   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚUnprintablePluginr   Nc                 ó"   — d| _         d| _        d S rL   )Ú_unprintable_countr?   r,   s    r%   rB   zUnprintablePlugin.__init__Œ   s   € Ø'(ˆÔØ%&ˆÔÐÐr(   r   c                 ó   — dS ©NTr9   r#   s     r%   r&   zUnprintablePlugin.eligible�   ó   € Øˆtr(   c                 ód   — t          |¦  «        r| xj        dz  c_        | xj        dz  c_        d S rZ   )r   rb   r?   r#   s     r%   r*   zUnprintablePlugin.feed“   s@   € Ý˜)Ñ$Ô$ð 	)ØÐ#Ô# qÑ(Ð#Ô#ØÐÔ Ñ"ÐÔÐÐr(   c                 ó   — d| _         d S rL   )rb   r,   s    r%   r-   zUnprintablePlugin.reset˜   s   € Ø"#ˆÔÐÐr(   c                 ó@   — | j         dk    rdS | j        dz  | j         z  S )Nr   rN   r]   )r?   rb   r,   s    r%   r/   zUnprintablePlugin.ratio›   s+   € àÔ  AÒ%Ð%Ø�3àÔ'¨!Ñ+¨tÔ/DÑDÐDr(   r0   rQ   r9   r(   r%   r`   r`   ‹   s®   € € € € € ð'ð 'ð 'ð 'ð #ð ¨$ð ð ð ð ð#˜cð # dð #ð #ð #ð #ð
$ð $ð $ð $ð ðE�uð Eð Eð Eñ „XðEð Eð Er(   r`   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚSuspiciousDuplicateAccentPluginr   Nc                 ó0   — d| _         d| _        d | _        d S rL   ©Ú_successive_countr?   Ú_last_latin_characterr,   s    r%   rB   z(SuspiciousDuplicateAccentPlugin.__init__¤   s    € Ø&'ˆÔØ%&ˆÔà48ˆÔ"Ð"Ð"r(   r   c                 óH   — |                      ¦   «         ot          |¦  «        S rD   )rX   r   r#   s     r%   r&   z(SuspiciousDuplicateAccentPlugin.eligibleª   s!   € Ø× Ò Ñ"Ô"Ð:¥x°	Ñ':Ô':Ð:r(   c                 ól  — | xj         dz  c_         | j        �•t          |¦  «        r†t          | j        ¦  «        rr|                     ¦   «         r)| j                             ¦   «         r| xj        dz  c_        t          |¦  «        t          | j        ¦  «        k    r| xj        dz  c_        || _        d S rZ   )r?   rn   r   Úisupperrm   r   r#   s     r%   r*   z$SuspiciousDuplicateAccentPlugin.feed­   sÂ   € ØÐÔ Ñ"ÐÔàÔ&Ð2Ý˜yÑ)Ô)ð 3å˜tÔ9Ñ:Ô:ð 3ð × Ò Ñ"Ô"ð , tÔ'A×'IÒ'IÑ'KÔ'Kð ,ØÐ&Ô&¨!Ñ+Ð&Ô&å˜YÑ'Ô'­=¸Ô9SÑ+TÔ+TÒTÐTØÐ&Ô&¨!Ñ+Ð&Ô&Ø%.ˆÔ"Ð"Ð"r(   c                 ó0   — d| _         d| _        d | _        d S rL   rl   r,   s    r%   r-   z%SuspiciousDuplicateAccentPlugin.reset»   s    € Ø!"ˆÔØ !ˆÔØ%)ˆÔ"Ð"Ð"r(   c                 ó@   — | j         dk    rdS | j        dz  | j         z  S )Nr   rN   rI   )r?   rm   r,   s    r%   r/   z%SuspiciousDuplicateAccentPlugin.ratioÀ   s+   € àÔ  AÒ%Ð%Ø�3àÔ&¨Ñ*¨dÔ.CÑCÐCr(   r0   rQ   r9   r(   r%   rj   rj   £   s®   € € € € € ð9ð 9ð 9ð 9ð; #ð ;¨$ð ;ð ;ð ;ð ;ð/˜cð / dð /ð /ð /ð /ð*ð *ð *ð *ð
 ðD�uð Dð Dð Dñ „XðDð Dð Dr(   rj   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚSuspiciousRanger   Nc                 ó0   — d| _         d| _        d | _        d S rL   )Ú"_suspicious_successive_range_countr?   Ú_last_printable_seenr,   s    r%   rB   zSuspiciousRange.__init__É   s    € Ø78ˆÔ/Ø%&ˆÔØ37ˆÔ!Ð!Ð!r(   r   c                 ó*   — |                      ¦   «         S rD   rE   r#   s     r%   r&   zSuspiciousRange.eligibleÎ   rG   r(   c                 óD  — | xj         dz  c_         |                     ¦   «         st          |¦  «        s	|t          v r	d | _        d S | j        €	|| _        d S t          | j        ¦  «        }t          |¦  «        }t          ||¦  «        r| xj        dz  c_        || _        d S rZ   )r?   Úisspacer   r   rx   r   Ú is_suspiciously_successive_rangerw   )r$   r   Úunicode_range_aÚunicode_range_bs       r%   r*   zSuspiciousRange.feedÑ   s¾   € ØÐÔ Ñ"ÐÔð ×ÒÑÔð	å˜iÑ(Ô(ð	ð Õ8Ð8Ð8à(,ˆDÔ%ØˆFàÔ$Ð,Ø(1ˆDÔ%ØˆFå)6°tÔ7PÑ)QÔ)QˆÝ)6°yÑ)AÔ)Aˆå+¨O¸_ÑMÔMð 	9ØÐ3Ô3°qÑ8Ð3Ô3à$-ˆÔ!Ð!Ð!r(   c                 ó0   — d| _         d| _        d | _        d S rL   )r?   rw   rx   r,   s    r%   r-   zSuspiciousRange.resetè   s    € Ø !ˆÔØ23ˆÔ/Ø$(ˆÔ!Ð!Ð!r(   c                 óD   — | j         dk    rdS | j        dz  | j         z  }|S )Né   rN   rI   )r?   rw   )r$   Úratio_of_suspicious_range_usages     r%   r/   zSuspiciousRange.ratioí   s8   € àÔ  BÒ&Ð&Ø�3ð Ô3°aÑ7ØÔ!ñ2"Ð'ð /Ð.r(   r0   rQ   r9   r(   r%   ru   ru   È   s§   € € € € € ð8ð 8ð 8ð 8ð
' #ð '¨$ð 'ð 'ð 'ð 'ð.˜cð . dð .ð .ð .ð .ð.)ð )ð )ð )ð
 ð/�uð /ð /ð /ñ „Xð/ð /ð /r(   ru   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚSuperWeirdWordPluginr   Nc                 ó’   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d S )Nr   FÚ )
Ú_word_countÚ_bad_word_countÚ_foreign_long_countÚ_is_current_word_badÚ_foreign_long_watchr?   Ú_bad_character_countÚ_bufferÚ_buffer_accent_countÚ_buffer_glyph_countr,   s    r%   rB   zSuperWeirdWordPlugin.__init__ú   sW   € Ø !ˆÔØ$%ˆÔØ()ˆÔ à*/ˆÔ!Ø).ˆÔ à%&ˆÔØ)*ˆÔ!àˆŒØ)*ˆÔ!Ø()ˆÔ Ð Ð r(   r   c                 ó   — dS rd   r9   r#   s     r%   r&   zSuperWeirdWordPlugin.eligible	  re   r(   c                 óÆ  — |                      ¦   «         �r| xj        |z  c_        t          |¦  «        r| xj        dz  c_        | j        du r|t          |¦  «        du st          |¦  «        r\t          |¦  «        du rKt          |¦  «        du r:t          |¦  «        du r)t          |¦  «        du rt          |¦  «        du rd| _        t          |¦  «        s<t          |¦  «        s-t          |¦  «        st          |¦  «        st          |¦  «        r| xj        dz  c_        d S | j        sd S |                     ¦   «         st          |¦  «        st          |¦  «        �r¸| j        �r°| xj        dz  c_        t!          | j        ¦  «        }| xj        |z  c_        |dk    r©| j        |z  dk    rd| _        n“t          | j        d         ¦  «        rW| j        d                              ¦   «         r8t)          d„ | j        D ¦   «         ¦  «        du r| xj        dz  c_        d| _        n"| j        dk    rd| _        | xj        dz  c_        |dk    ri| j        rbd	„ t-          | j        t/          d
|¦  «        ¦  «        D ¦   «         }d}|rt!          |¦  «        |z  dk    rd}|s| xj        dz  c_        d| _        | j        r9| xj        dz  c_        | xj        t!          | j        ¦  «        z  c_        d| _        d| _        d| _        d
| _        d
| _        d S |dvr>|                     ¦   «         du r*t7          |¦  «        rd| _        | xj        |z  c_        d S d S d S d S )Nr   FTé   g      à?éÿÿÿÿc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rD   ©rq   )Ú.0Ú_s     r%   ú	<genexpr>z,SuperWeirdWordPlugin.feed.<locals>.<genexpr>6  s*   è è € Ð>Ð>¨A˜AŸIšI™KœKÐ>Ð>Ð>Ð>Ð>Ð>r(   é   c                 ó@   — g | ]\  }}|                      ¦   «         ¯|‘ŒS r9   r•   )r–   ÚcÚis      r%   ú
<listcomp>z-SuperWeirdWordPlugin.feed.<locals>.<listcomp>>  s:   € ð "ð "ð "á˜˜1Ø—y’y‘{”{ð"Øð"ð "ð "r(   r   rO   r†   >   r—   ú-ú<ú=ú>ú|ú~)rX   r�   r   rŽ   r‹   r   r   r   r   r   r   r�   r{   r   r   r‡   Úlenr?   rŠ   rq   Úallr‰   ÚzipÚrangerˆ   rŒ   rJ   r   )r$   r   Úbuffer_lengthÚcamel_case_dstÚprobable_camel_caseds        r%   r*   zSuperWeirdWordPlugin.feed  s
  € Ø×ÒÑÔñ 	ØˆLŒL˜IÑ%ˆLŒLÝ˜iÑ(Ô(ð /ØÐ)Ô)¨QÑ.Ð)Ô)àÔ(¨EÐ1Ð1Ý˜iÑ(Ô(¨EÐ1Ð1µ^ÀIÑ5NÔ5NÐ1Ý˜9Ñ%Ô%¨Ð.Ð.Ý˜iÑ(Ô(¨EÐ1Ð1Ý 	Ñ*Ô*¨eÐ3Ð3Ý 	Ñ*Ô*¨eÐ3Ð3Ý˜IÑ&Ô&¨%Ð/Ð/à+/�Ô(å�yÑ!Ô!ð.å˜YÑ'Ô'ð.õ ˜yÑ)Ô)ð.õ ˜yÑ)Ô)ð	.õ
 ˜9Ñ%Ô%ð.ð Ð(Ô(¨AÑ-Ð(Ô(ØˆFØŒ|ð 	ØˆFà×ÒÑÔð5	&Ý#1°)Ñ#<Ô#<ð5	&Ý@LÈYÑ@WÔ@Wñ5	&àŒlñ5	&ð ÐÔ Ñ!ÐÔÝ!$ T¤\Ñ!2Ô!2ˆMàÐ!Ô! ]Ñ2Ð!Ô!à Ò!Ð!ØÔ,¨}Ñ<ÀÒCÐCØ04�DÔ-Ð-õ # 4¤<°Ô#3Ñ4Ô4ð	2àœ RÔ(×0Ò0Ñ2Ô2ð	2õ Ð>Ð>°´Ð>Ñ>Ô>Ñ>Ô>À%ÐGÐGàÐ,Ô,°Ñ1Ð,Ô,Ø04�DÔ-Ð-ØÔ-°Ò2Ð2Ø04�DÔ-ØÐ,Ô,°Ñ1Ð,Ô,Ø Ò"Ð" tÔ'?Ð"ð"ð "å # D¤Lµ%¸¸=Ñ2IÔ2IÑ JÔ Jð"ñ "ô "�ð
 .3Ð$à!ð 0¥s¨>Ñ':Ô':¸]Ñ'JÈcÒ'QÐ'QØ+/Ð(à+ð 5ØÐ,Ô,°Ñ1Ð,Ô,Ø04�DÔ-àÔ(ð 2ØÐ$Ô$¨Ñ)Ð$Ô$ØÐ)Ô)­S°´Ñ->Ô->Ñ>Ð)Ô)Ø,1�Ô)à',ˆDÔ$ØˆDŒLØ()ˆDÔ%Ø'(ˆDÔ$Ð$Ð$àÐ@Ð@Ð@Ø×!Ò!Ñ#Ô# uÐ,Ð,Ý˜)Ñ$Ô$ð -ð )-ˆDÔ%ØˆLŒL˜IÑ%ˆLŒLˆLˆLð AÐ@Ø,Ð,Ð,Ð,r(   c                 óv   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nr†   Fr   )r�   rŠ   r‹   rˆ   r‡   r?   rŒ   r‰   r,   s    r%   r-   zSuperWeirdWordPlugin.reset]  sG   € ØˆŒØ$)ˆÔ!Ø#(ˆÔ Ø ˆÔØˆÔØ !ˆÔØ$%ˆÔ!Ø#$ˆÔ Ð Ð r(   c                 óP   — | j         dk    r| j        dk    rdS | j        | j        z  S )Né
   r   rN   )r‡   r‰   rŒ   r?   r,   s    r%   r/   zSuperWeirdWordPlugin.ratiog  s3   € àÔ˜rÒ!Ð! dÔ&>À!Ò&CÐ&CØ�3àÔ(¨4Ô+@Ñ@Ð@r(   r0   rQ   r9   r(   r%   r„   r„   ù   sµ   € € € € € ð*ð *ð *ð *ð #ð ¨$ð ð ð ð ðO&˜cð O& dð O&ð O&ð O&ð O&ðb%ð %ð %ð %ð ðA�uð Að Að Añ „XðAð Að Ar(   r„   c                   ó^   — e Zd ZdZd
d„Zdedefd„Zdeddfd„Zd
d„Z	e
defd	„¦   «         ZdS )ÚCjkInvalidStopPluginu²   
    GB(Chinese) based encoding often render the stop incorrectly when the content does not fit and
    can be easily detected. Searching for the overuse of 'ä¸…' and 'ä¸„'.
    r   Nc                 ó"   — d| _         d| _        d S rL   ©Ú_wrong_stop_countÚ_cjk_character_countr,   s    r%   rB   zCjkInvalidStopPlugin.__init__u  s   € Ø&'ˆÔØ)*ˆÔ!Ð!Ð!r(   r   c                 ó   — dS rd   r9   r#   s     r%   r&   zCjkInvalidStopPlugin.eligibley  re   r(   c                 ót   — |dv r| xj         dz  c_         d S t          |¦  «        r| xj        dz  c_        d S d S )N>   õ   ä¸„õ   ä¸…r   )r²   r   r³   r#   s     r%   r*   zCjkInvalidStopPlugin.feed|  sZ   € Ø˜Ð&Ð&ØÐ"Ô" aÑ'Ð"Ô"ØˆFÝ�)ÑÔð 	+ØÐ%Ô%¨Ñ*Ð%Ô%Ð%Ð%ð	+ð 	+r(   c                 ó"   — d| _         d| _        d S rL   r±   r,   s    r%   r-   zCjkInvalidStopPlugin.resetƒ  s   € Ø!"ˆÔØ$%ˆÔ!Ð!Ð!r(   c                 ó:   — | j         dk     rdS | j        | j         z  S )Né   rN   )r³   r²   r,   s    r%   r/   zCjkInvalidStopPlugin.ratio‡  s&   € àÔ$ rÒ)Ð)Ø�3ØÔ%¨Ô(AÑAÐAr(   r0   )r1   r2   r3   r4   rB   r5   r6   r&   r*   r-   r7   r8   r/   r9   r(   r%   r¯   r¯   o  s¸   € € € € € ðð ð
+ð +ð +ð +ð #ð ¨$ð ð ð ð ð+˜cð + dð +ð +ð +ð +ð&ð &ð &ð &ð ðB�uð Bð Bð Bñ „XðBð Bð Br(   r¯   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚArchaicUpperLowerPluginr   Nc                 óh   — d| _         d| _        d| _        d| _        d| _        d | _        d| _        d S )NFr   T)Ú_bufÚ_character_count_since_last_sepÚ_successive_upper_lower_countÚ#_successive_upper_lower_count_finalr?   Ú_last_alpha_seenÚ_current_ascii_onlyr,   s    r%   rB   z ArchaicUpperLowerPlugin.__init__�  s?   € ØˆŒ	à45ˆÔ,à23ˆÔ*Ø89ˆÔ0à%&ˆÔà/3ˆÔØ)-ˆÔ Ð Ð r(   r   c                 ó   — dS rd   r9   r#   s     r%   r&   z ArchaicUpperLowerPlugin.eligibleœ  re   r(   c                 ó  — |                      ¦   «         ot          |¦  «        }|du }|r| j        dk    rt| j        dk    r4|                     ¦   «         du r| j        du r| xj        | j        z  c_        d| _        d| _        d | _        d| _        | xj	        dz  c_	        d| _        d S | j        du r| 
                    ¦   «         du rd| _        | j        �Š|                     ¦   «         r| j                             ¦   «         s-|                     ¦   «         rB| j                             ¦   «         r)| j        du r| xj        dz  c_        d| _        nd| _        nd| _        | xj	        dz  c_	        | xj        dz  c_        || _        d S )NFr   é@   r   TrI   )rX   r   r¿   rJ   rÃ   rÁ   rÀ   rÂ   r¾   r?   Úisasciirq   Úislower)r$   r   Úis_concernedÚ	chunk_seps       r%   r*   zArchaicUpperLowerPlugin.feedŸ  sË  € Ø ×(Ò(Ñ*Ô*ÐJÕ/?À	Ñ/JÔ/JˆØ  EÐ)ˆ	àð 	˜Ô=ÀÒAÐAàÔ4¸Ò:Ð:Ø×%Ò%Ñ'Ô'¨5Ð0Ð0ØÔ,°Ð5Ð5àÐ8Ô8ØÔ6ñÐ8Ô8ð 23ˆDÔ.Ø34ˆDÔ0Ø$(ˆDÔ!ØˆDŒIØÐ!Ô! QÑ&Ð!Ô!Ø'+ˆDÔ$àˆFàÔ# tÐ+Ð+°	×0AÒ0AÑ0CÔ0CÀuÐ0LÐ0LØ',ˆDÔ$àÔ Ð,Ø×!Ò!Ñ#Ô#ð 	"¨Ô(=×(EÒ(EÑ(GÔ(Gð 	"Ø×!Ò!Ñ#Ô#ð	"Ø(,Ô(=×(EÒ(EÑ(GÔ(Gð	"ð ”9 Ð$Ð$ØÐ6Ô6¸!Ñ;Ð6Ô6Ø %�D”I�Ià $�D”I�Ià!�”	àÐÔ Ñ"ÐÔØÐ,Ô,°Ñ1Ð,Ô,Ø )ˆÔÐÐr(   c                 óh   — d| _         d| _        d| _        d| _        d | _        d| _        d| _        d S )Nr   FT)r?   r¿   rÀ   rÁ   rÂ   r¾   rÃ   r,   s    r%   r-   zArchaicUpperLowerPlugin.resetÉ  s?   € Ø !ˆÔØ/0ˆÔ,Ø-.ˆÔ*Ø34ˆÔ0Ø $ˆÔØˆŒ	Ø#'ˆÔ Ð Ð r(   c                 ó:   — | j         dk    rdS | j        | j         z  S )Nr   rN   )r?   rÁ   r,   s    r%   r/   zArchaicUpperLowerPlugin.ratioÒ  s&   € àÔ  AÒ%Ð%Ø�3àÔ7¸$Ô:OÑOÐOr(   r0   rQ   r9   r(   r%   r¼   r¼   Ž  s¯   € € € € € ð.ð .ð .ð .ð #ð ¨$ð ð ð ð ð(*˜cð (* dð (*ð (*ð (*ð (*ðT(ð (ð (ð (ð ðP�uð Pð Pð Pñ „XðPð Pð Pr(   r¼   c                   óZ   — e Zd Zd	d„Zd	d„Zdedefd„Zdeddfd„Ze	de
fd„¦   «         ZdS )
ÚArabicIsolatedFormPluginr   Nc                 ó"   — d| _         d| _        d S rL   ©r?   Ú_isolated_form_countr,   s    r%   rB   z!ArabicIsolatedFormPlugin.__init__Û  s   € Ø%&ˆÔØ)*ˆÔ!Ð!Ð!r(   c                 ó"   — d| _         d| _        d S rL   rÐ   r,   s    r%   r-   zArabicIsolatedFormPlugin.resetß  s   € Ø !ˆÔØ$%ˆÔ!Ð!Ð!r(   r   c                 ó    — t          |¦  «        S rD   )r   r#   s     r%   r&   z!ArabicIsolatedFormPlugin.eligibleã  s   € Ý˜Ñ#Ô#Ð#r(   c                 óh   — | xj         dz  c_         t          |¦  «        r| xj        dz  c_        d S d S rZ   )r?   r   rÑ   r#   s     r%   r*   zArabicIsolatedFormPlugin.feedæ  sJ   € ØÐÔ Ñ"ÐÔå" 9Ñ-Ô-ð 	+ØÐ%Ô%¨Ñ*Ð%Ô%Ð%Ð%ð	+ð 	+r(   c                 ó>   — | j         dk     rdS | j        | j         z  }|S )Nr]   rN   rÐ   )r$   Úisolated_form_usages     r%   r/   zArabicIsolatedFormPlugin.ratioì  s,   € àÔ  1Ò$Ð$Ø�3à%)Ô%>ÀÔAVÑ%VÐà"Ð"r(   r0   )r1   r2   r3   rB   r-   r5   r6   r&   r*   r7   r8   r/   r9   r(   r%   rÎ   rÎ   Ú  s§   € € € € € ð+ð +ð +ð +ð&ð &ð &ð &ð$ #ð $¨$ð $ð $ð $ð $ð+˜cð + dð +ð +ð +ð +ð ð#�uð #ð #ð #ñ „Xð#ð #ð #r(   rÎ   é   )Úmaxsizer}   r~   r   c                 óÊ  — | �|€dS | |k    rdS d| v rd|v rdS d| v sd|v rdS d| v sd|v r
d| v sd|v rdS |                       d¦  «        |                      d¦  «        }}|D ]}|t          v rŒ||v r dS Œ| dv |dv }}|s|r
d	| v sd	|v rdS |r|rdS d
| v sd
|v rd	| v sd	|v rdS | dk    s|dk    rdS d	| v sd	|v s| dv r&|dv r"d| v sd|v rdS d| v sd|v rdS | dk    s|dk    rdS dS )za
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    NTFÚLatinÚ	EmoticonsÚ	Combiningú )ÚHiraganaÚKatakanaÚCJKÚHangulzBasic Latin)rß   rÞ   ÚPunctuationÚForms)Úsplitr
   )r}   r~   Úkeywords_range_aÚkeywords_range_bÚelÚrange_a_jp_charsÚrange_b_jp_charss          r%   r|   r|   ö  s  € ð Ð /Ð"9Øˆtà˜/Ò)Ð)Øˆuà�/Ð!Ð! g°Ð&@Ð&@Øˆuà�oÐ%Ð%¨¸Ð)GÐ)GØˆuð 	�?Ð"Ð" g°Ð&@Ð&@Ø�Ð&Ð&¨+¸Ð*HÐ*Hàˆuà)8×)>Ò)>Øñ*ô *à×Ò˜SÑ!Ô!ð 'Ðð ð ð ˆØÕ0Ð0Ð0ØØÐ!Ð!Ð!Ø�5�5ð "ð
 	ð
ð	
ð
 	Ð3Ð3ð 'Ðð 	ð Ð,ð Ø�Ð Ð  E¨_Ð$<Ð$<àˆuØð Ð,ð Øˆuà�?Ð"Ð" h°/Ð&AÐ&AØ�OÐ#Ð# u°Ð'?Ð'?Ø�5Ø˜mÒ+Ð+¨À-Ò/OÐ/OØ�5ð 	�Ð Ð  E¨_Ð$<Ð$<ØÐ3Ð3Ð3ØÐ7Ð7Ð7à˜OÐ+Ð+¨}ÀÐ/OÐ/OØ�5Ø�oÐ%Ð%¨°OÐ)CÐ)CØ�5Ø˜mÒ+Ð+¨À-Ò/OÐ/OØ�5àˆ4r(   i   çš™™™™™É?FÚdecoded_sequenceÚmaximum_thresholdÚdebugc           	      óZ  — d„ t                                ¦   «         D ¦   «         }t          | ¦  «        dz   }d}|dk     rd}n|dk    rd}nd}t          | d	z   t	          |¦  «        ¦  «        D ]m\  }}|D ],}	|	                     |¦  «        r|	                     |¦  «         Œ-|d
k    r	||z  d
k    s	||dz
  k    r!t          d„ |D ¦   «         ¦  «        }||k    r nŒn|rÁt          d¦  «        }
|
 	                    t          d|› d|› d|› �¦  «         t          | ¦  «        dk    rL|
 	                    t          d| dd…         › �¦  «         |
 	                    t          d| dd…         › �¦  «         |D ],}|
 	                    t          |j        › d|j        › �¦  «         Œ-t          |d¦  «        S )zw
    Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
    c                 ó"   — g | ]} |¦   «         ‘ŒS r9   r9   )r–   Úmd_classs     r%   r�   zmess_ratio.<locals>.<listcomp>G  s+   € ð +ð +ð +Øˆˆ‰
Œ
ð+ð +ð +r(   r   rN   i   é    r×   rÆ   é€   ú
r   c              3   ó$   K  — | ]}|j         V — Œd S rD   )r/   )r–   Údts     r%   r˜   zmess_ratio.<locals>.<genexpr>^  s$   è è € Ð!?Ð!?¨r "¤(Ð!?Ð!?Ð!?Ð!?Ð!?Ð!?r(   Úcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=rº   zStarting with: NzEnding with: iðÿÿÿz: é   )r   Ú__subclasses__r¤   r¦   r§   r&   r*   Úsumr   Úlogr	   Ú	__class__r/   Úround)rë   rì   rí   Ú	detectorsÚlengthÚmean_mess_ratioÚ!intermediary_mean_mess_ratio_calcr   ÚindexÚdetectorÚloggerrõ   s               r%   Ú
mess_ratior  ?  s1  € ð+ð +Ý#5×#DÒ#DÑ#FÔ#Fð+ñ +ô +€Iõ Ð&Ñ'Ô'¨!Ñ+€Fà €Oà�‚|€|Ø13Ð)Ð)Ø	�4ŠˆØ,.Ð)Ð)à,/Ð)åÐ 0°4Ñ 7½¸v¹¼ÑGÔGð ð Ñˆ	�5Ø!ð 	)ð 	)ˆHØ× Ò  Ñ+Ô+ð )Ø—’˜iÑ(Ô(Ð(øð �AŠIˆI˜%Ð"CÑCÀqÒHÐHØ�f˜q‘jÒ Ð Ý!Ð!?Ð!?°YÐ!?Ñ!?Ô!?Ñ?Ô?ˆOàÐ"3Ò3Ð3Ø�øàð =ÝÐ/Ñ0Ô0ˆà�
Š
Ýð5Ø1Rð5ð 5Øetð5ð 5à!2ð5ð 5ñ	
ô 	
ð 	
õ ÐÑ Ô  2Ò%Ð%Ø�JŠJ•uÐGÐ0@ÀÀ"ÀÔ0EÐGÐGÑHÔHÐHØ�JŠJ•uÐGÐ.>¸s¸u¸uÔ.EÐGÐGÑHÔHÐHàð 	=ð 	=ˆBØ�JŠJ•u ¤Ð;Ð;°´Ð;Ð;Ñ<Ô<Ð<Ð<å� !Ñ$Ô$Ð$r(   N)rê   F),Ú	functoolsr   Úloggingr   Útypingr   r   Úconstantr   r	   r
   Úutilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   rS   r`   rj   ru   r„   r¯   r¼   rÎ   r5   r6   r|   r8   r  r9   r(   r%   ú<module>r
     sà  ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð*"ð "ð "ð "ð "ñ "ô "ð "ðD,Lð ,Lð ,Lð ,Lð ,LÐ'9ñ ,Lô ,Lð ,Lð^Oð Oð Oð Oð OÐ1ñ Oô Oð Oð6Eð Eð Eð Eð EÐ*ñ Eô Eð Eð0"Dð "Dð "Dð "Dð "DÐ&8ñ "Dô "Dð "DðJ./ð ./ð ./ð ./ð ./Ð(ñ ./ô ./ð ./ðbsAð sAð sAð sAð sAÐ-ñ sAô sAð sAðlBð Bð Bð Bð BÐ-ñ Bô Bð Bð>IPð IPð IPð IPð IPÐ0ñ IPô IPð IPðX#ð #ð #ð #ð #Ð1ñ #ô #ð #ð8 €�4ÐÑÔðEØ˜c”]ðEØ5=¸c´]ðEà	ðEð Eð Eñ ÔðEðP €�4ÐÑÔàINð4%ð 4%Øð4%Ø.3ð4%ØBFð4%à
ð4%ð 4%ð 4%ñ Ôð4%ð 4%ð 4%r(   