
    g                     0   S r SSKrSSKrSSKJrJr  SSKrSSKr\R                  " S5      r
S\S\4S jr\R                  " S5      r\R                  " S	5      r\R                  " S
5      rSS\\\4   S\S\4S jjrSrS\S\4S jrS\\\4   S\4S jrg)zIPv6 helper functions.    N)ListUnionz0+([0-9a-f]+)addressreturnc                 0   [        U 5      S:w  a  [        S5      e[        R                  " U 5      n/ nSn[        U5      nX4:  a[  XUS-    R	                  5       n[
        R                  U5      nUb  UR                  S5      nUR                  U5        US-  nX4:  a  M[  SnSnSn	Sn
[        S	5       H4  nX#   S
:w  a  U
(       a  UnX-
  nX:  a  U	nUnSn
M%  M'  U
(       a  M0  Un	Sn
M6     U
(       a  S	nX-
  nX:  a  U	nUnUS:  a~  US:X  aG  US:X  d  US:X  a;  US   S:X  a2  US:X  a  SnOSnU[        R                  R                  U SS 5      -   nU$ SR                  USU 5      S-   SR                  X'U-   S 5      -   n U$ SR                  U5      nU$ )zConvert an IPv6 address in binary form to text form.

*address*, a ``bytes``, the IPv6 address in binary form.

Raises ``ValueError`` if the address isn't 16 bytes long.
Returns a ``str``.
   z IPv6 addresses are 16 bytes longr      N   F   0T      ffffz::z::ffff:   :)len
ValueErrorbinasciihexlifydecode_leading_zeromatchgroupappendrangednsipv4	inet_ntoajoin)r   hexchunksilchunkm
best_startbest_lenstartlast_was_zeroendcurrent_lenprefixthexs                  A/home/matz/Project1/venv/lib/python3.13/site-packages/dns/ipv6.pyr   r      s    7|r;<<


7
#CF	ACA
%A%%' &=GGAJEe	Q % JHEM1X9!k)!&J*H %  E M  k!J"H!|?AQ6!9PVCV1}"CHH..wrs|<<D K ,-((6x"7"9:;<  K xxK    s   (.*):(\d+\.\d+\.\d+\.\d+)$s   ::.*s   .*::$textignore_scopec                    [        U [        5      (       d  U R                  5       nOU nU(       aH  UR                  S5      n[	        U5      nUS:X  a  US   nO US:  a  [
        R                  R                  eUS:X  a  [
        R                  R                  eUR                  S5      (       a0  UR                  S5      (       d  [
        R                  R                  eUR                  S5      (       a0  UR                  S5      (       d  [
        R                  R                  eUS:X  a  Sn[        R                  U5      nUbw  [
        R                  R                  UR                  S5      5      nUR                  S	5      R                  5        S
US   S US	   S S
US   S US   S 3R                  5       n[         R                  U5      nUb  US	S nO["        R                  U5      nUb  USS nUR                  S5      n[	        U5      nUS:  a  [
        R                  R                  eSn/ n	U H  n
U
S:X  aO  U(       a  [
        R                  R                  eSn[%        SSU-
  S	-   5       H  nU	R'                  S5        M     MX  [	        U
5      nUS:  a  [
        R                  R                  eUS:w  a  SSU-
  -  U
-   n
U	R'                  U
5        M     US:  a!  U(       d  [
        R                  R                  eSR)                  U	5      n [*        R,                  " U5      $ ! [*        R.                  [0        4 a    [
        R                  R                  ef = f)a  Convert an IPv6 address in text form to binary form.

*text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

*ignore_scope*, a ``bool``.  If ``True``, a scope will be ignored.
If ``False``, the default, it is an error for a scope to be present.

Returns a ``bytes``.
   %   r   r0      :s   ::s   0::Nr
   r   02x   r   r   FTs   0000r	      0)
isinstancebytesencodesplitr   r   	exceptionSyntaxErrorendswith
startswith
_v4_endingr   r   	inet_atonr   r   _colon_colon_start_colon_colon_endr   r   r    r   	unhexlifyError	TypeError)r1   r2   btextpartsr$   r&   br"   
seen_empty	canonicalc_lcs                r/   rC   rC   h   s    dE""D!J6!HEU--+++|mm'''			ennU&;&;mm'''			$		(8(8(?(?mm'''	% 	A}HHqwwqz*wwqz  "#1QqT#JqtCj!A$sAaD:N
&( 	 	  'A}ab	""5)=#2JE [[FFA1umm'''JI8mm///J1a!eai(  ) ) QBAvmm///QwQV_)Q  	1uZmm'''HHYE
(!!%((NNI& (mm'''(s   L0 05M%s             c                 ,    U R                  [        5      $ )zIs the specified address a mapped IPv4 address?

*address*, a ``bytes`` is an IPv6 address in binary form.

Returns a ``bool``.
)rA   _mapped_prefix)r   s    r/   	is_mappedrS      s     n--r0   c                 z    [         R                  R                  [         R                  R                  U 5      5      $ )a  Verify that *address* is a valid text form IPv6 address and return its
canonical text form.  Addresses with scopes are rejected.

*text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

Raises ``dns.exception.SyntaxError`` if the text is not valid.
)r   ipv6r   rC   )r1   s    r/   canonicalizerV      s(     88chh00677r0   )F)__doc__r   retypingr   r   dns.exceptionr   dns.ipv4compiler   r;   strr   rB   rD   rE   boolrC   rR   rS   rV    r0   r/   <module>r`      s   $   	   

+,Bu B BJ ZZ67
ZZ) ::i( X(E#u*% X(T X(e X(v ,.u . .8uS%Z( 8S 8r0   