Ë
    RPfÈ  ã                   ó&  — d Z ddlZddlZddlmZmZ ddlZddlZ ej                  d«      Z
dedefd„Z ej                  d«      Z ej                  d	«      Z ej                  d
«      Zddeeef   dedefd„ZdZdedefd„Zdeeef   defd„Zy)zIPv6 helper functions.é    N)ÚListÚUnionz0+([0-9a-f]+)ÚaddressÚreturnc                 óú  — t        | «      dk7  rt        d«      ‚t        j                  | «      }g }d}t        |«      }||k  rZ|||dz    j	                  «       }t
        j                  |«      }|�|j                  d«      }|j                  |«       |dz  }||k  rŒZd}d}d}	d}
t        d	«      D ]'  }||   d
k7  r|
sŒ|}||	z
  }||kD  r|	}|}d}
Œ!|
rŒ$|}	d}
Œ) |
rd	}||	z
  }||kD  r|	}|}|dkD  ry|dk(  rC|dk(  s|dk(  r9|d   dk(  r1|dk(  rd}nd}|t        j                  j                  | dd «      z   }|S dj                  |d| «      dz   dj                  |||z   d «      z   }|S dj                  |«      }|S )zÍConvert 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                  úB/var/www/fastapitest/venv/lib/python3.12/site-packages/dns/ipv6.pyr   r      sè  € ô ˆ7ƒ|�rÒÜÐ;Ó<Ð<Ü
×
Ñ
˜7Ó
#€CØ€FØ	€AÜˆC‹€AØ
ˆaŠ%Ø�A˜˜A™�×%Ñ%Ó'ˆô ×Ñ Ó&ˆØˆ=Ø—G‘G˜A“JˆEØ�‰�eÔØ	ˆQ‰ˆð ˆa‹%ð €JØ€HØ€EØ€MÜ�1‹Xò !ˆØ�!‰9˜ÒÚØ�Ø! E™k�Ø Ò)Ø!&�JØ*�HØ %‘ÚØˆEØ ‰Mð!ñ ØˆØ˜E‘kˆØ˜Ò!ØˆJØ"ˆHØ�!‚|Ø˜Š? ¨A¢°¸Q²À6È!Á9ÐPVÒCVà˜1Š}Ø‘à"�ØœCŸH™H×.Ñ.¨w°r°s¨|Ó<Ñ<ˆDð €Kð —‘˜  Ð,Ó-Øñà—(‘(˜6 *¨xÑ"7Ð"9Ð:Ó;ñ<ð ð €Kð �x‰x˜ÓˆØ€Kó    s   (.*):(\d+\.\d+\.\d+\.\d+)$s   ::.*s   .*::$ÚtextÚignore_scopec                 ó`  — t        | t        «      s| j                  «       }n| }|rF|j                  d«      }t	        |«      }|dk(  r|d   }n|dkD  rt
        j                  j                  ‚|dk(  rt
        j                  j                  ‚|j                  d«      r+|j                  d«      st
        j                  j                  ‚|j                  d«      r+|j                  d«      st
        j                  j                  ‚|dk(  rd}t        j                  |«      }|�zt
        j                  j                  |j                  d«      «      }d	j                  |j                  d
«      j!                  «       |d   |d
   |d   |d   «      j                  «       }t"        j                  |«      }|�|d
d }nt$        j                  |«      }|�|dd }|j                  d«      }t	        |«      }|dkD  rt
        j                  j                  ‚d}g }	|D ]™  }
|
dk(  rG|rt
        j                  j                  ‚d}t'        dd|z
  d
z   «      D ]  }|	j)                  d«       Œ ŒOt	        |
«      }|dkD  rt
        j                  j                  ‚|dk7  rdd|z
  z  |
z   }
|	j)                  |
«       Œ› |dk  r|st
        j                  j                  ‚dj+                  |	«      }	 t-        j.                  |«      S # t,        j0                  t2        f$ r t
        j                  j                  ‚w xY w)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::Nz{}:{:02x}{:02x}:{:02x}{:02x}r
   é   r   r   FTs   0000r	   ó   0)Ú
isinstanceÚbytesÚencodeÚsplitr   r   Ú	exceptionÚSyntaxErrorÚendswithÚ
startswithÚ
_v4_endingr   r   Ú	inet_atonr   Úformatr   Ú_colon_colon_startÚ_colon_colon_endr   r   r    r   Ú	unhexlifyÚErrorÚ	TypeError)r1   r2   ÚbtextÚpartsr$   r&   Úbr"   Ú
seen_emptyÚ	canonicalÚcÚ_Úlcs                r/   rB   rB   h   sÕ  € ô �dœEÔ"Ø—‘“‰àˆáØ—‘˜DÓ!ˆÜ�‹JˆØ�Š6Ø˜!‘H‰EØ�ŠUÜ—-‘-×+Ñ+Ð+à�‚|Ü�m‰m×'Ñ'Ð'Ø	�‰˜Ô	 e§n¡n°UÔ&;Ü�m‰m×'Ñ'Ð'Ø	×	Ñ	˜$Ô	¨×(8Ñ(8¸Ô(?Ü�m‰m×'Ñ'Ð'Ø	�%ŠØˆô 	×Ñ˜Ó€AØ€}Ü�H‰H×Ñ˜qŸw™w q›zÓ*ˆà*×1Ñ1Ø—‘˜“
×!Ñ!Ó# Q q¡T¨1¨Q©4°°1±°q¸±tó÷ ‰&‹(ð	 	ô 	× Ñ  Ó'€AØ€}Ø�a�b�	‰ä×"Ñ" 5Ó)ˆØˆ=Ø˜#˜2�JˆEð �[‰[˜Ó€FÜˆF‹€AØˆ1‚uÜ�m‰m×'Ñ'Ð'Ø€JØ€IØò  ˆØ�Š8ÙÜ—m‘m×/Ñ/Ð/ØˆJÜ˜1˜a !™e a™iÓ(ò *�Ø× Ñ  Õ)ñ*ô �Q“ˆBØ�AŠvÜ—m‘m×/Ñ/Ð/Ø�QŠwØ˜Q ™V‘_¨Ñ)�Ø×Ñ˜QÕð ð 	ˆ1‚u‘ZÜ�m‰m×'Ñ'Ð'Ø�H‰H�YÓ€Eð
(Ü×!Ñ! %Ó(Ð(øÜ�N‰NœIÐ&ò (Ü�m‰m×'Ñ'Ð'ð(ús   Ë$K9 Ë94L-s             ÿÿc                 ó,   — | j                  t        «      S )zŒIs the specified address a mapped IPv4 address?

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

    Returns a ``bool``.
    )r@   Ú_mapped_prefix)r   s    r/   Ú	is_mappedrS   È   s   € ð ×ÑœnÓ-Ð-r0   c                 óz   — t         j                  j                  t         j                  j                  | «      «      S )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   rB   )r1   s    r/   ÚcanonicalizerV   Ó   s(   € ô �8‰8×ÑœcŸh™h×0Ñ0°Ó6Ó7Ð7r0   )F)Ú__doc__r   ÚreÚtypingr   r   Údns.exceptionr   Údns.ipv4Úcompiler   r:   Ústrr   rA   rD   rE   ÚboolrB   rR   rS   rV   © r0   r/   ú<module>r`      sÔ   ðñ$ ã Û 	ß ã Û à�—
‘
Ð+Ó,€ðB�uð B ó BðJ ˆR�Z‰ZÐ6Ó7€
Ø�R—Z‘Z Ó)Ð Ø�2—:‘:˜iÓ(Ð ñZ(�E˜#˜u˜*Ñ%ð Z(°Tð Z(Àeó Z(ðz ,€ð.�uð . ó .ð8�u˜S %˜ZÑ(ð 8¨Sô 8r0   