o
    <‘ði>4  ã                   @   sn  d dl Z d dlZd dlZd dlZd dlmZmZ ddlmZ ddl	m
Z
 dZdZe d¡ZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdedefdd„Zdededefdd„Zdedefdd„Zdedefdd„Zdeeef defdd„Zdeeef d edefd!d"„ZdEded$edefd%d&„Zdedefd'd(„Zdedefd)d*„Z deddfd+d,„Z!ded-edefd.d/„Z"dEded-ed0edefd1d2„Z#deeee$f ddfd3d4„Z%dedefd5d6„Z&deeee$f defd7d8„Z'dFd:ed;ed<edefd=d>„Z(	#	#	#	#dGdeeee$f d?ed@ed;ed<edefdAdB„Z)	#	#	#dHdeeee$f d?ed@ed;edef
dCdD„Z*dS )Ié    N)ÚOptionalÚUnioné   )Úidnadata)Úintranges_containé	   s   xn--u   [.ã€‚ï¼Žï½¡]c                   @   ó   e Zd ZdZdS )Ú	IDNAErrorz5Base exception for all IDNA-encoding related problemsN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úH/root/parts/websockify/install/lib/python3.10/site-packages/idna/core.pyr	      ó    r	   c                   @   r   )ÚIDNABidiErrorz;Exception when bidirectional requirements are not satisfiedNr
   r   r   r   r   r      r   r   c                   @   r   )ÚInvalidCodepointz<Exception when a disallowed or unallocated codepoint is usedNr
   r   r   r   r   r      r   r   c                   @   r   )ÚInvalidCodepointContextzCException when the codepoint is not valid in the context it is usedNr
   r   r   r   r   r   !   r   r   ÚcpÚreturnc                 C   s0   t  t| ƒ¡}|dkrt  t| ƒ¡stdƒ‚|S )Nr   z Unknown character in unicodedata)ÚunicodedataÚ	combiningÚchrÚnameÚ
ValueError)r   Úvr   r   r   Ú_combining_class'   s
   r   Úscriptc                 C   s   t t| ƒtj| ƒS )N)r   Úordr   Úscripts)r   r   r   r   r   Ú
_is_script/   s   r!   Úsc                 C   s
   |   d¡S )NÚpunycode)Úencode©r"   r   r   r   Ú	_punycode3   ó   
r&   c                 C   s
   d  | ¡S )NzU+{:04X})Úformatr%   r   r   r   Ú_unot7   r'   r)   Úlabelc                 C   s   t | ƒdkrdS dS )Né?   FT©Úlen©r*   r   r   r   Úvalid_label_length;   s   r/   Útrailing_dotc                 C   s   t | ƒ|rdndkrdS dS )Néþ   éý   FTr,   )r*   r0   r   r   r   Úvalid_string_lengthA   s   r3   FÚ	check_ltrc           	      C   sP  d}t | dƒD ]\}}t |¡}|dkrtd t| ƒ|¡ƒ‚|dv r$d}q|s+|s+dS t | d ¡}|dv r9d}n|d	kr@d}n	td
 t| ƒ¡ƒ‚d}d }t | dƒD ]M\}}t |¡}|r‡|dvrhtd |¡ƒ‚|dv rod}n|dkrud}|dv r†|s~|}qR||kr†tdƒ‚qR|dvr’td |¡ƒ‚|dv r™d}qR|dkrŸd}qR|s¦tdƒ‚dS )NFr   Ú z1Unknown directionality in label {} at position {})ÚRÚALÚANTr   )r6   r7   ÚLz=First codepoint in label {} must be directionality L, R or AL)
r6   r7   r8   ÚENÚESÚCSÚETÚONÚBNÚNSMzGInvalid direction for codepoint at position {} in a right-to-left label)r6   r7   r:   r8   r@   )r8   r:   z2Can not mix numeral types in a right-to-left label)r9   r:   r;   r<   r=   r>   r?   r@   zGInvalid direction for codepoint at position {} in a left-to-right label)r9   r:   z0Label ends with illegal codepoint directionality)Ú	enumerater   Úbidirectionalr   r(   Úrepr)	r*   r4   Ú
bidi_labelÚidxr   Ú	directionÚrtlÚvalid_endingÚnumber_typer   r   r   Ú
check_bidiG   sV   
€
€€rJ   c                 C   s"   t  | d ¡d dkrtdƒ‚dS )Nr   ÚMz0Label begins with an illegal combining characterT)r   Úcategoryr	   r.   r   r   r   Úcheck_initial_combiner�   s   rM   c                 C   s<   | dd… dkrt dƒ‚| d dks| d dkrt dƒ‚d	S )
Né   é   z--z4Label has disallowed hyphens in 3rd and 4th positionr   ú-éÿÿÿÿz)Label must not start or end with a hyphenT)r	   r.   r   r   r   Úcheck_hyphen_ok“   s
   rR   c                 C   s   t  d| ¡| krtdƒ‚d S )NÚNFCz%Label must be in Normalization Form C)r   Ú	normalizer	   r.   r   r   r   Ú	check_nfc›   s   ÿrU   Úposc                 C   s4  t | | ƒ}|dkr€|dkrtt | |d  ƒƒtkrdS d}t|d ddƒD ]"}t ¡  t | | ƒ¡}|t dƒkr:q&|t dƒt d	ƒfv rHd} n |sMdS d}t|d t| ƒƒD ]%}t ¡  t | | ƒ¡}|t dƒkrlqX|t d
ƒt d	ƒfv r{d} |S  |S |S |dkr˜|dkr–tt | |d  ƒƒtkr–dS dS dS )Ni   r   r   TFrQ   ÚTr9   ÚDr6   i   )r   r   Ú_virama_combining_classÚranger   Újoining_typesÚgetr-   )r*   rV   Úcp_valueÚokÚiÚjoining_typer   r   r   Úvalid_contextj    sB   ÿra   Ú	exceptionc                 C   s¤  t | | ƒ}|dkr3d|  k rt| ƒd k r1n dS t | |d  ƒdkr1t | |d  ƒdkr1dS dS |dkrP|t| ƒd k rNt| ƒdkrNt| |d  dƒS dS |d	ksX|d
krg|dkret| |d  dƒS dS |dkr‰| D ]}|dkrtqmt|dƒsƒt|dƒsƒt|dƒr† dS qmdS d|  kr“dkr¬n n| D ]}dt |ƒ  kr§dkr© dS  q—q—dS d|  kr¶dkrÐn dS | D ]}dt |ƒ  krËdkrÍ dS  q»q»dS dS )Né·   r   r   él   TFiu  ÚGreekió  iô  ÚHebrewiû0  u   ãƒ»ÚHiraganaÚKatakanaÚHani`  ii  ið  iù  )r   r-   r!   )r*   rV   rb   r]   r   r   r   r   Úvalid_contextoÌ   sJ   (þÿÿûÿrj   c                 C   s<  t | ttfƒr|  d¡} t| ƒdkrtdƒ‚t| ƒ t| ƒ t| ƒ t	| ƒD ]q\}}t
|ƒ}t|tjd ƒr7q&t|tjd ƒrlzt| |ƒsTtd t|ƒ|d t| ƒ¡ƒ‚W q& tyk   td t|ƒ|d t| ƒ¡ƒ‚w t|tjd	 ƒr‰t| |ƒsˆtd
 t|ƒ|d t| ƒ¡ƒ‚q&td t|ƒ|d t| ƒ¡ƒ‚t| ƒ d S )Nzutf-8r   zEmpty LabelÚPVALIDÚCONTEXTJz*Joiner {} not allowed at position {} in {}r   z<Unknown codepoint adjacent to joiner {} at position {} in {}ÚCONTEXTOú-Codepoint {} not allowed at position {} in {}z-Codepoint {} at position {} of {} not allowed)Ú
isinstanceÚbytesÚ	bytearrayÚdecoder-   r	   rU   rR   rM   rA   r   r   r   Úcodepoint_classesra   r   r(   r)   rC   r   rj   r   rJ   )r*   rV   r   r]   r   r   r   Úcheck_labelö   sF   

ÿÿÿÿÿ
ÿÿÿrt   c                 C   sd   z|   d¡}t|ƒ t|ƒstdƒ‚|W S  ty   Y nw t| ƒ tt| ƒ }t|ƒs0tdƒ‚|S )NÚasciizLabel too long)r$   Úulabelr/   r	   ÚUnicodeEncodeErrorrt   Ú_alabel_prefixr&   ©r*   Úlabel_bytesr   r   r   Úalabel  s   
ÿr{   c                 C   sÒ   t | ttfƒsz|  d¡}W n ty   t| ƒ |  Y S w t| ƒ}| ¡ }| t¡rG|t	tƒd … }|s9t
dƒ‚| d¡d dkrFt
dƒ‚n	t|ƒ | d¡S z| d¡} W n tyb   t
dƒ‚w t| ƒ | S )Nru   z5Malformed A-label, no Punycode eligible content foundrQ   rP   z"A-label must not end with a hyphenr#   zInvalid A-label)ro   rp   rq   r$   rw   rt   ÚlowerÚ
startswithrx   r-   r	   rr   ÚUnicodeErrorry   r   r   r   rv   0  s2   þ
ÿ
ÿrv   TÚdomainÚ
std3_rulesÚtransitionalc                 C   s  ddl m } d}t| ƒD ]o\}}t|ƒ}||dk r|n	t ||df¡d  }|d }	d}
t|ƒdkr6|d }
|	d	ksJ|	d
kr@|rJ|	dkrO|sO|
du rO||7 }q|
durh|	dksc|	dkr]|rc|	d
krh|rh||
7 }q|	dkrmqtd t|ƒ|d t	| ƒ¡ƒ‚t
 d|¡S )zBRe-map the characters in the string according to UTS46 processing.r   )Ú	uts46datar5   é   ÚZNé   rN   ÚVrX   Ú3rK   ÚIrn   rS   )r‚   rA   r   ÚbisectÚbisect_leftr-   r   r(   r)   rC   r   rT   )r   r€   r�   r‚   ÚoutputrV   ÚcharÚ
code_pointÚuts46rowÚstatusÚreplacementr   r   r   Úuts46_remapM  s(   $(
 
ÿr‘   ÚstrictÚuts46c           	      C   sø   |r
t jdtdd� t| tƒs"zt| dƒ} W n ty!   tdƒ‚w |r*t| ||ƒ} d}g }|r6|  d¡}nt	 | ¡}|rB|dgkrFtd	ƒ‚|d
 dkrQ|d
= d}|D ]}t
|ƒ} | ra| | ¡ qStdƒ‚|rl| d¡ d |¡} t| |ƒsztdƒ‚| S )NzuTransitional processing has been removed from UTS #46. The transitional argument will be removed in a future version.rN   )Ú
stacklevelru   zGshould pass a unicode string to the function rather than a byte string.FÚ.r5   úEmpty domainrQ   TúEmpty labeló    ó   .zDomain too long)ÚwarningsÚwarnÚDeprecationWarningro   ÚstrÚUnicodeDecodeErrorr	   r‘   ÚsplitÚ_unicode_dots_rer{   ÚappendÚjoinr3   )	r"   r’   r“   r€   r�   r0   ÚresultÚlabelsr*   r   r   r   r$   j  sF   ü
ÿ



r$   c                 C   sÊ   zt | tƒst| dƒ} W n ty   tdƒ‚w |r t| |dƒ} d}g }|s,t | ¡}n|  d¡}|r8|dgkr<tdƒ‚|d sE|d= d}|D ]}t|ƒ} | rU| | ¡ qGtd	ƒ‚|r`| d¡ d 	|¡S )
Nru   zInvalid ASCII in A-labelFr•   r5   r–   rQ   Tr—   )
ro   r�   rž   r	   r‘   r    rŸ   rv   r¡   r¢   )r"   r’   r“   r€   r0   r£   r¤   r*   r   r   r   rr   ˜  s6   

€ÿ


rr   )F)TF)FFFF)FFF)+r‰   Úrer   rš   Útypingr   r   r5   r   Ú	intrangesr   rY   rx   Úcompiler    r~   r	   r   r   r   Úintr   r�   Úboolr!   rp   r&   r)   r/   r3   rJ   rM   rR   rU   ra   rj   rq   rt   r{   rv   r‘   r$   rr   r   r   r   r   Ú<module>   sz    
F,*'ûÿþýüû
ú0üÿþýüû