Ë
    ÓŠð^Ð  ã            
       ój  — d Z ddlZdZ	 ddlZej                  s ed«      ‚ej                   ej                   ddlmZ
mZm	Z	 dZddlmZ ddlmZmZmZmZmZmZmZmZ m!Z" d	Z#d
Z$dZ%e	Z&dZ'dZ(d
Z)de#z  dz
  Z*e#e$z  Z+de$z  dz
  Z, e- e.de#dz   «      D � cg c]  } | e*de#| z
  z  dz
  z  f‘Œ c} «      Z/ e- e.de#dz   «      D � cg c]  } e*de#| z
  z  dz
  z  | f‘Œ c} «      Z0 e- e.de#dz   «      D � cg c]  } | de#| z
  z  dz
  f‘Œ c} «      Z1 e- e.de#dz   «      D � cg c]  } de#| z
  z  dz
  | f‘Œ c} «      Z2 G d„ de3«      Z4 G d„ de4«      Z5 G d„ de4«      Z6d%d„Z7d%d„Z8d&d„Z9d„ Z:d„ Z;d„ Z<d„ Zd'd„Zd„ Zd„ Zd „ Zd&d!„Zd"„ Zd#„ Zd$„ Z!y# e$ r ddlmZ
mZm	Z	 Y �ŒWw xY wc c} w c c} w c c} w c c} w )(z
IPv6 address logic.
é    NFzIPv6 disabled)Ú	inet_ptonÚ	inet_ntopÚAF_INET6T)ÚAddrFormatError)	Úvalid_wordsÚint_to_wordsÚwords_to_intÚ
valid_bitsÚbits_to_intÚint_to_bitsÚ	valid_binÚ
int_to_binÚ
bin_to_inté€   é   ú:ÚIPv6é   é   é   c                   ó   — e Zd ZdZdZdZy)Úipv6_compactz%An IPv6 dialect class - compact form.z%xTN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úword_fmtÚcompact© ó    ú7/usr/lib/python3/dist-packages/netaddr/strategy/ipv6.pyr   r   V   s   „ Ù/à€Hð �Gr!   r   c                   ó   — e Zd ZdZdZy)Ú	ipv6_fullz*An IPv6 dialect class - 'all zeroes' form.FN)r   r   r   r   r   r    r!   r"   r$   r$   ^   s   „ Ù4ð �Gr!   r$   c                   ó   — e Zd ZdZdZdZy)Úipv6_verbosez5An IPv6 dialect class - extra wide 'all zeroes' form.z%.4xFNr   r    r!   r"   r&   r&   d   s   „ Ù?ð €Hð �Gr!   r&   c                 óT   — | dk(  rt        d«      ‚	 t        t        | «       y#  Y yxY w)a  
    :param addr: An IPv6 address in presentation (string) format.

    :param flags: decides which rules are applied to the interpretation of the
        addr value. Future use - currently has no effect.

    :return: ``True`` if IPv6 address is valid, ``False`` otherwise.
    Ú z Empty strings are not supported!FT)r   Ú
_inet_ptonr   )ÚaddrÚflagss     r"   Ú	valid_strr,   n   s5   € ð ˆr‚zÜÐ@ÓAÐAðÜ”8˜TÔ"ð øðÙús   ’# £'c                 óp   — 	 t        t        | «      }t        |«      S # t        $ r t	        | ›d�«      ‚w xY w)a  
    :param addr: An IPv6 address in string form.

    :param flags: decides which rules are applied to the interpretation of the
        addr value. Future use - currently has no effect.

    :return: The equivalent unsigned integer for a given IPv6 address.
    z$ is not a valid IPv6 address string!)r)   r   Úpacked_to_intÚ	Exceptionr   )r*   r+   Ú
packed_ints      r"   Ú
str_to_intr1   �   s>   € ðRÜ¤¨$Ó/ˆ
Ü˜ZÓ(Ð(øÜò RÜÊ$ÐPÓQÐQðRús   ‚ �5c                 óP  — |€t         }d}	 t        | «      }|j                  rt        t        |«      }|S t        t        j                  d|«      «      }|D �cg c]  }|j                  |z  ‘Œ }}t        j                  |«      }	 |S c c}w # t        $ r t        | ›d�«      ‚w xY w)zë
    :param int_val: An unsigned integer.

    :param dialect: (optional) a Python class defining formatting options.

    :return: The IPv6 presentation (string) format address equivalent to the
        unsigned integer provided.
    Nz>8Hz) is not a valid 128-bit unsigned integer!)r   Úint_to_packedr   Ú
_inet_ntopr   ÚlistÚ_structÚunpackr   Úword_sepÚjoinr/   Ú
ValueError)Úint_valÚdialectr*   r0   ÚwordsÚwordÚtokenss          r"   Ú
int_to_strr@   ‘   s¬   € ð €Üˆà€DðUÜ" 7Ó+ˆ
Ø�?Š?äœh¨
Ó3ˆDð €Kô œŸ™¨¨zÓ:Ó;ˆEØ:?Ö@°$�g×&Ñ&¨Ó-Ð@ˆFÐ@Ü—=‘= Ó(‰Dð €Kùò Aøäò UÜÊ'ÐSÓTÐTðUús"   Œ'B µ#B ÁBÁ.B ÂB ÂB%c                 ó¨   — t        | t        «      }t        |j                  dd«      «      }|j	                  «        |g d¢z   }dj                  |«      S )z“
    :param int_val: An unsigned integer.

    :return: The reverse DNS lookup for an IPv6 address in network byte
        order integer form.
    r   r(   )Úip6Úarpar(   ú.)r@   r&   r5   ÚreplaceÚreverser9   )r;   r*   r?   s      r"   Úint_to_arparG   ¯   sI   € ô �gœ|Ó,€DÜ�$—,‘,˜s BÓ'Ó(€FØ
‡N�NÔàÒ)Ñ)€FØ�8‰8�FÓÐr!   c                 óH   — t        | dd«      }t        j                  dg|¢­Ž S )z•
    :param int_val: the integer to be packed.

    :return: a packed string that is equivalent to value represented by an
    unsigned integer.
    é   é    ú>4I)r   r6   Úpack)r;   r=   s     r"   r3   r3   ¾   s&   € ô ˜ ! RÓ(€EÜ�<‰<˜Ð& Ò&Ð&r!   c                 óž   — t        t        j                  d| «      «      }d}t        t	        |«      «      D ]  \  }}|}|d|z  z  }||z  }Œ |S )a  
    :param packed_int: a packed string containing an unsigned integer.
        It is assumed that string is packed in network byte order.

    :return: An unsigned integer equivalent to value of network address
        represented by packed binary string.
    rK   r   rJ   )r5   r6   r7   Ú	enumerateÚreversed)r0   r=   r;   ÚiÚnumr>   s         r"   r.   r.   É   s\   € ô ”—‘  zÓ2Ó3€Eà€GÜœH U›OÓ,ò !‰ˆˆ3ØˆØ�r˜A‘v‰~ˆØ˜D‘.‰ð!ð
 €Nr!   c                 ó,   — t        | t        t        «      S ©N)Ú_valid_wordsÚ	word_sizeÚ	num_words©r=   s    r"   r   r   Ü   s   € Ü˜œy¬)Ó4Ð4r!   c                 óX   — |€t        «       d   }|€t        «       d   }t        | ||«      S )NrV   rU   )ÚglobalsÚ_int_to_words)r;   rV   rU   s      r"   r   r   à   s5   € ØÐÜ“I˜kÑ*ˆ	ØÐÜ“I˜kÑ*ˆ	Ü˜ )¨YÓ7Ð7r!   c                 ó,   — t        | t        t        «      S rS   )Ú_words_to_intrU   rV   rW   s    r"   r	   r	   è   s   € Ü˜¤	¬9Ó5Ð5r!   c                 ó,   — t        | t        t        «      S rS   )Ú_valid_bitsÚwidthr8   ©Úbitss    r"   r
   r
   ì   s   € Ü�tœU¤HÓ-Ð-r!   c                 ó,   — t        | t        t        «      S rS   )Ú_bits_to_intr_   r8   r`   s    r"   r   r   ð   s   € Ü˜œe¤XÓ.Ð.r!   c                 óL   — |€t        «       d   }t        | t        t        |«      S )Nr8   )rY   Ú_int_to_bitsrU   rV   )r;   r8   s     r"   r   r   ô   s%   € ØÐÜ“9˜ZÑ(ˆÜ˜¤¬I°xÓ@Ð@r!   c                 ó"   — t        | t        «      S rS   )Ú
_valid_binr_   ©Úbin_vals    r"   r   r   ú   s   € Ü�gœuÓ%Ð%r!   c                 ó"   — t        | t        «      S rS   )Ú_int_to_binr_   )r;   s    r"   r   r   þ   ó   € Ü�w¤Ó&Ð&r!   c                 ó"   — t        | t        «      S rS   )Ú_bin_to_intr_   rh   s    r"   r   r     rl   r!   )r   rS   )NN)=r   Ústructr6   ÚOPT_IMPORTSÚsocketÚ_socketÚhas_ipv6r/   r   r   r)   r   r4   Únetaddr.fbsocketÚnetaddr.corer   Únetaddr.strategyr   rT   r   rZ   r	   r\   r
   r^   r   rc   r   re   r   rg   r   rk   r   rn   r_   rU   r8   ÚfamilyÚfamily_nameÚversionÚ	word_baseÚmax_intrV   Úmax_wordÚdictÚrangeÚprefix_to_netmaskÚnetmask_to_prefixÚprefix_to_hostmaskÚhostmask_to_prefixÚobjectr   r$   r&   r,   r1   r@   rG   r3   r.   )rP   s   0r"   ú<module>r„      sT  ðñó à€ð+Ûà×ÒÙ˜Ó(Ð(Ø×ÒØ×Ò÷#ñ #à€Kõ
 )÷÷ õ ð 	€ð €	ð €ð 
€ð €ð €ð €	ð ˆu‰*�q‰.€ð �YÑ€	ð �	‰>˜AÑ€ñ Ù49¸!¸UÀ1¹WÓ4EÖF¨q€aˆ�A˜% !™)Ñ$ qÑ(Ñ	)Ò*ÒFóHÐ ñ Ù49¸!¸UÀ1¹WÓ4EÖF¨q€g��u˜q‘yÑ! AÑ%Ñ&¨Ò*ÒFóHÐ ñ Ù*/°°5¸±7Ó*;Ö< Q€aˆ!�˜‘	Ñ
˜QÑ
Ò Ò<ó>Ð ñ Ù*/°°5¸±7Ó*;Ö< Q€qˆU�Q‰YÑ˜!Ñ˜aÒ Ò<ó>Ð ô�6ô ô�ô ô�<ô óó&Ró ò<ò'òò&5ó8ò6ò.ò/óAò&ò'ó'øðU ò +÷+ô +ð+üòX Gùò Gùò =ùò =s)   Š<F ÂF!ÃF&Ã1F+ÄF0ÆFÆF