File: //home/arjun/projects/env/lib/python3.10/site-packages/dns/__pycache__/ipv6.cpython-310.pyc
o
!we0 � @ s� d Z ddlZddlZddlmZmZ ddlZddlZe� d�Z
dedefdd�Z
e� d �Ze� d
�Ze� d�Zdd
eeef dedefdd�ZdZdedefdd�ZdS )zIPv6 helper functions.� N)�List�Unionz
0+([0-9a-f]+)�address�returnc C s� t | �dkr
td��t�| �}g }d}t |�}||k r@|||d � �� }t�|�}|dur3|�d�}|�|� |d7 }||k sd}d}d} d}
t d �D ]!}|| d
krg|
rf|}|| }||krd| }|}d}
qL|
sm|} d}
qL|
r~d }|| }||kr~| }|}|dkr�|dkr�|dks�|d
kr�|d
dkr�|dkr�d}
nd}
|
t
j�| dd� � }|S d�
|d|� �d d�
||| d� � }|S d�
|�}|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�thex� r- �A/home/arjun/projects/env/lib/python3.10/site-packages/dns/ipv6.pyr sl
�
��$ ����
�r s (.*):(\d+\.\d+\.\d+\.\d+)$s ::.*s .*::$F�text�ignore_scopec
C s* t | t�s
| �� }n| }|r(|�d�}t|�}|dkr |d }n|dkr(tjj�|dkr0tjj�|�d�r>|�d�s>tjj�|� d�rL|� d�sLtjj�|dkrRd}t
�|�}|dur|tj�
|�d��}d �|�d
��� |d |d
|d |d ��� }t�|�}|dur�|d
d� }nt�|�}|dur�|dd� }|�d�}t|�}|d
kr�tjj�d}g } |D ]=}
|
dkr�|r�tjj�d}tdd
| d
�D ]}| �d� q�q�t|
�}|dkr�tjj�|dkr�dd| |
}
| �|
� q�|d
k r�|s�tjj�d�| �}zt�|�W S tjtf�y tjj�w )a Convert an IPv6 address in text form to binary form.
*text*, a ``str``, 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 � � :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)
r/ r0 �btext�partsr"