
    dafR2                    F   	 d Z ddlZdZdZ G d de      Z G d de      Zd	 Zd1d
Zd Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Z G d d      Zdaej*                   G d de             Zej*                   G d de             Z G d d      Zee_         G d d      Z G d d ee      Z G d! d"e      Z G d# d$ee      Z G d% d&      Zee_        ee_         G d' d(      Z G d) d*ee      Z  G d+ d,e       Z! G d- d.ee      Z" G d/ d0      Z#e#e _        e#e"_        y)2z1.0    N       c                       e Zd Zy)AddressValueErrorN__name__
__module____qualname__     $/root/Python-3.12.4/Lib/ipaddress.pyr   r          /r   r   c                       e Zd Zy)NetmaskValueErrorNr   r   r   r   r   r      r   r   r   c                     	 	 t        |       S # t        t        f$ r Y nw xY w	 t        |       S # t        t        f$ r Y nw xY wt	        | d      )Nz. does not appear to be an IPv4 or IPv6 address)IPv4Addressr   r   IPv6Address
ValueErroraddresss    r   
ip_addressr      sl    7##01 7##01  {"PQ
RR   
   
/ A Ac                     	 	 t        | |      S # t        t        f$ r Y nw xY w	 t        | |      S # t        t        f$ r Y nw xY wt	        | d      )Nz. does not appear to be an IPv4 or IPv6 network)IPv4Networkr   r   IPv6Networkr   )r   stricts     r   
ip_networkr   9   sp    7F++01 7F++01  {"PQ
RRs    !!1 AAc                     	 	 t        |       S # t        t        f$ r Y nw xY w	 t        |       S # t        t        f$ r Y nw xY wt	        | d      )Nz0 does not appear to be an IPv4 or IPv6 interface)IPv4Interfacer   r   IPv6Interfacer   r   s    r   ip_interfacer!   V   sl    (W%%01 W%%01  {"RS
TTr   c                 X    	 	 | j                  d      S # t        $ r t        d      w xY w)N   z&Address negative or too large for IPv4to_bytesOverflowErrorr   r   s    r   v4_int_to_packedr'   x   s;    C"" CABBC    )c                 X    	 	 | j                  d      S # t        $ r t        d      w xY w)N   z&Address negative or too large for IPv6r$   r   s    r   v6_int_to_packedr+      s;    C## CABBCr(   c                 t    	 t        |       j                  d      }t        |      dkD  rt        d|       |S )N/   zOnly one '/' permitted in )strsplitlenr   )r   addrs     r   _split_optional_netmaskr3      s<    Kw<c"D
4y1}"<WK HIIKr   c              #      K   	 t        |       }t        |      x}}|D ](  }|j                  |j                  dz   k7  r||f |}|}* ||f y wN   )iternext_ip)	addressesitfirstlastips        r   _find_address_ranger?      sg      
iB8ED 66TXX\!+E	
 +s   AAc                 T    	 | dk(  r|S t        ||  | dz
  z  j                               S )Nr   r6   )min
bit_length)numberbitss     r   _count_righthand_zero_bitsrE      s6    	 {tvg*66899r   c              #   X  K   	 t        | t              rt        |t              st        d      | j                  |j                  k7  rt        | d|d      | |kD  rt	        d      | j                  dk(  rt
        }n!| j                  dk(  rt        }nt	        d      | j                  }| j                  }|j                  }||k  r`t        t        ||      ||z
  dz   j                         dz
        } ||||z
  f      }| |d|z  z  }|dz
  |j                  k(  ry ||k  r_y y w)	Nz1first and last must be IP addresses, not networks and  are not of the same versionz*last IP address must be greater than firstr#      zunknown IP versionr6   )
isinstance_BaseAddress	TypeErrorversionr   r   r   _max_prefixlenr9   rA   rE   rB   	_ALL_ONES)r<   r=   r>   ip_bits	first_intlast_intnbitsnets           r   summarize_address_rangerU      s-    2 |,l+KLL}}$& ' 	't|EFF}}	!	-..""G		IxxH
x
.y'B	)A-99;a?A)Wu_-.	Q%Z	q=BLL( x
s   D%D*(D*c              #   Z  K   	 t        |       }i }|rU|j                         }|j                         }|j                  |      }||||<   n||k7  r||= |j	                  |       |rUd }t        |j                               D ]$  }||j                  |j                  k\  r| |}& y wN)listpopsupernetgetappendsortedvaluesbroadcast_address)r:   to_mergesubnetsrT   rZ   existingr=   s          r   _collapse_addresses_internalrc      s     0 IHG
lln<<>;;x( #GH_!OOH%  Dgnn&'  %%)>)>>	s   A%B+(AB+c                    	 g }g }g }| D ]  }t        |t              rD|r0|d   j                  |j                  k7  rt        |d|d   d      |j	                  |       X|j
                  |j                  k(  rO|r0|d   j                  |j                  k7  rt        |d|d   d      	 |j	                  |j                         |r0|d   j                  |j                  k7  rt        |d|d   d      |j	                  |        t        t        |            }|r.t        |      D ]   \  }}|j                  t        ||             " t        ||z         S # t        $ r |j	                  |j                         Y w xY w)NrG   rH   )rJ   rK   _versionrL   r\   
_prefixlenrN   r>   AttributeErrornetwork_addressr]   setr?   extendrU   rc   )r:   addrsipsnetsr>   r<   r=   s          r   collapse_addressesro   0  s   " E
CD  b,'s2w''2;;6!#SW!. / /JJrN]]b///s2w''2;;6!#SW!. / //

255! R))R[[8!#T"X!/ 0 0KKO%* S
C .s3 	?KE4LL0=>	? (55! " /

2--./s   .E""$F
	F
c                     	 t        | t              r| j                         S t        | t              r| j	                         S t
        S rW   )rJ   _BaseNetwork_get_networks_keyrK   _get_address_keyNotImplemented)objs    r   get_mixed_type_keyrv   f  sA    " #|$$$&&	C	&##%%r   c                       e Zd Z	 dZed        Zed        Zed        Zed        Zd Z	d Z
ed        Zed	        Zed
        Zed        Zed        Zed        Zd Zy)_IPAddressBaser   c                 $    	 | j                         S rW   )_explode_shorthand_ip_stringselfs    r   explodedz_IPAddressBase.exploded  s    H0022r   c                     	 t        |       S rW   r/   r{   s    r   
compressedz_IPAddressBase.compressed  s    I4yr   c                 $    	 | j                         S rW   )_reverse_pointerr{   s    r   reverse_pointerz_IPAddressBase.reverse_pointer  s    	 $$&&r   c                 6    dt        |       fz  }t        |      )Nz%200s has no version specifiedtypeNotImplementedErrorr|   msgs     r   rM   z_IPAddressBase.version  s    .$t*>!#&&r   c                     |dk  rd}t        ||| j                  fz        || j                  kD  r'd}t        ||| j                  | j                  fz        y )Nr   z-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d address)r   rf   rO   rN   )r|   r   r   s      r   _check_int_addressz!_IPAddressBase._check_int_address  sg    Q;AC#C7DMM*B$BCCT^^#FC#C7D4G4G+/==+: %: ; ; $r   c                 `    t        |      }||k7  rd}t        ||||| j                  fz        y )Nz6%r (len %d != %d) is not permitted as an IPv%d address)r1   r   rf   )r|   r   expected_lenaddress_lenr   s        r   _check_packed_addressz$_IPAddressBase._check_packed_address  sG    'l,&JC#C7K+7+H %H I I 'r   c                 <    	 | j                   | j                   |z	  z  S rW   )rO   )cls	prefixlens     r   _ip_int_from_prefixz"_IPAddressBase._ip_int_from_prefix  s!    	 }} :;;r   c                     	 t        || j                        }| j                  |z
  }||z	  }d|z  dz
  }||k7  r1| j                  dz  }|j                  |d      }d}t        ||z        |S )Nr6      bigz&Netmask pattern %r mixes zeroes & ones)rE   rN   r%   r   )	r   ip_inttrailing_zeroesr   leading_onesall_onesbyteslendetailsr   s	            r   _prefix_from_ip_intz"_IPAddressBase._prefix_from_ip_int  s    
	 5V585G5GI&&8	0Na'8#))Q.Hooh6G:CS7]++r   c                 $    d|z  }t        |      d )Nz%r is not a valid netmask)r   )r   netmask_strr   s      r   _report_invalid_netmaskz&_IPAddressBase._report_invalid_netmask  s    )K7$$.r   c                    	 |j                         r|j                         s| j                  |       	 t        |      }dcxk  r| j
                  k  sn | j                  |       |S # t        $ r | j                  |       Y Fw xY wNr   )isasciiisdigitr   intr   rN   )r   prefixlen_strr   s      r   _prefix_from_prefix_stringz)_IPAddressBase._prefix_from_prefix_string  s    
	 %%'M,A,A,C''6	7M*I Y4#"4"44''6	  	7''6	7s   A) )BBc                 ,   	 	 | j                  |      }	 | j                        S # t        $ r | j                  |       Y .w xY w# t        $ r Y nw xY w| j
                  z  }	 | j                  |      S # t        $ r | j                  |       Y y w xY wrW   )_ip_int_from_stringr   r   r   r   rO   )r   ip_strr   s      r   _prefix_from_ip_stringz%_IPAddressBase._prefix_from_ip_string  s    
		0,,V4F	**622 ! 	0''/	0  		 	#--	0**622 	0''/	0s2   & A AA	AA%A6 6BBc                     	 t        |t        t        f      r|| j                  fS t        |t              st        |      }t        |      dkD  r|S |d   | j                  fS )Nr6   r   )rJ   bytesr   rN   tupler3   r1   )r   r   s     r   _split_addr_prefixz!_IPAddressBase._split_addr_prefix  sf    	 gs|,C....'5) .g6G w<!Nqz3----r   c                 2    | j                   t        |       ffS rW   	__class__r/   r{   s    r   
__reduce__z_IPAddressBase.__reduce__-  s    ~~D	|++r   N)r   r	   r
   	__slots__propertyr}   r   r   rM   r   r   classmethodr   r   r   r   r   r   r   r   r   r   rx   rx     s    I3 3   ' ' ' ';I 
< 
<  0 / /  0 0 0B . ..,r   rx   c                   `     e Zd Z	 dZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z fdZ xZS )rK   r   c                     | j                   S rW   r9   r{   s    r   __int__z_BaseAddress.__int__>  s    xxr   c                     	 | j                   |j                   k(  xr | j                  |j                  k(  S # t        $ r	 t        cY S w xY wrW   )r9   rf   rh   rt   r|   others     r   __eq__z_BaseAddress.__eq__A  sF    	"HH		) 879 	"!!	"s   36 AAc                     t        |t              st        S | j                  |j                  k7  rt	        | d|d      | j
                  |j
                  k7  r| j
                  |j
                  k  S yNrG   rH   F)rJ   rK   rt   rf   rL   r9   r   s     r   __lt__z_BaseAddress.__lt__H  s_    %.!!==ENN*!5* + +88uyy 88eii''r   c                 h    t        |t              st        S | j                  t        |       |z         S rW   rJ   r   rt   r   r   s     r   __add__z_BaseAddress.__add__T  *    %%!!~~c$i%/00r   c                 h    t        |t              st        S | j                  t        |       |z
        S rW   r   r   s     r   __sub__z_BaseAddress.__sub__Y  r   r   c                 L    | j                   j                  dt        |       dS N()r   r   r/   r{   s    r   __repr__z_BaseAddress.__repr__^      >>22CI>>r   c                 J    t        | j                  | j                              S rW   )r/   _string_from_ip_intr9   r{   s    r   __str__z_BaseAddress.__str__a  s    4++DHH566r   c                 P    t        t        t        | j                                    S rW   )hashhexr   r9   r{   s    r   __hash__z_BaseAddress.__hash__d  s    CDHH&''r   c                     | j                   | fS rW   rf   r{   s    r   rs   z_BaseAddress._get_address_keyg  s    t$$r   c                 4    | j                   | j                  ffS rW   )r   r9   r{   s    r   r   z_BaseAddress.__reduce__j  s    ~~{**r   c                    	 |r|d   dk(  rt        t        |       |      S t        dd l}|j	                  d      at        j                  |      }|st        |   |      S |j                         \  }}}|dk(  r| j                  dk(  rd}nd}|dk(  r| j                  }n| j                  dz  }|r||dz  d	z
  z  }|r|d
z  }t        t        |       | d| | |       S )Nre   sr   z(#?)(_?)([xbnX])nr#   bxr6   r.   0)formatr/   _address_fmt_rerecompile	fullmatchsuper
__format__groupsrf   rN   r   )	r|   fmtr   m	alternategroupingfmt_basepadlenr   s	           r   r   z_BaseAddress.__format__m  s    
	 c"gn#d)S)) " jj);<O%%c*7%c**()
%	8X s?}}!s?((F((A-FfkAo%FaKFc$iI;axz(!LMMr   )r   r	   r
   r   r   r   r   r   r   r   r   r   rs   r   r   __classcell__r   s   @r   rK   rK   3  sM     I"1
1
?7(%+/N /Nr   rK   c                      e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zej                  d        Zej                  d        Zed        Zed        Zed        Zed        Zed        Zed        Zd Zd Zd Zd#dZd#dZed        Zed        Zd Z d Z!ed        Z"ed        Z#ed        Z$ed         Z%ed!        Z&ed"        Z'y)$rq   c                 L    | j                   j                  dt        |       dS r   r   r{   s    r   r   z_BaseNetwork.__repr__  r   r   c                 8    d| j                   | j                  fz  S N%s/%d)ri   r   r{   s    r   r   z_BaseNetwork.__str__  s    $..???r   c              #      K   	 t        | j                        }t        | j                        }t        |dz   |      D ]  }| j	                  |        y wr5   r   ri   r_   range_address_classr|   network	broadcastr   s       r   hostsz_BaseNetwork.hosts  sX     	 d**+../	w{I. 	)A%%a((	)s   AAc              #      K   t        | j                        }t        | j                        }t        ||dz         D ]  }| j	                  |        y wr5   r   r   s       r   __iter__z_BaseNetwork.__iter__  sQ     d**+../	w	A. 	)A%%a((	)s   AAc                    t        | j                        }t        | j                        }|dk\  r'||z   |kD  rt        d      | j	                  ||z         S |dz  }||z   |k  rt        d      | j	                  ||z         S )Nr   zaddress out of ranger6   )r   ri   r_   
IndexErrorr   )r|   r   r   r   s       r   __getitem__z_BaseNetwork.__getitem__  s    d**+../	6{Y& !788&&w{33FA1}w& !788&&y1}55r   c                 L   t        |t              st        S | j                  |j                  k7  rt	        | d|d      | j
                  |j
                  k7  r| j
                  |j
                  k  S | j                  |j                  k7  r| j                  |j                  k  S yr   )rJ   rq   rt   rf   rL   ri   netmaskr   s     r   r   z_BaseNetwork.__lt__  s    %.!!==ENN*!5* + +5#8#88''%*?*???<<5==(<<%--//r   c                     	 | j                   |j                   k(  xrF | j                  |j                  k(  xr+ t        | j                        t        |j                        k(  S # t        $ r	 t
        cY S w xY wrW   )rf   ri   r   r  rh   rt   r   s     r   r   z_BaseNetwork.__eq__  sk    	"MMU^^3 <((E,A,AA<%U]]);;=  	"!!	"s   A A# #A54A5c                 j    t        t        | j                        t        | j                        z        S rW   )r   r   ri   r  r{   s    r   r   z_BaseNetwork.__hash__  s&    C,,-DLL0AABBr   c                     | j                   |j                   k7  ryt        |t              ry|j                  | j                  j                  z  | j
                  j                  k(  S NF)rf   rJ   rq   r9   r  ri   r   s     r   __contains__z_BaseNetwork.__contains__  sN    ==ENN*e\* 99t||///43G3G3K3KKKr   c                     	 | j                   |v xs. | j                  |v xs |j                   | v xs |j                  | v S rW   ri   r_   r   s     r   overlapsz_BaseNetwork.overlaps  sQ    8##u, 7""e+ 6%%- 5++t3	7r   c                 v    | j                  t        | j                        t        | j                        z        S rW   )r   r   ri   hostmaskr{   s    r   r_   z_BaseNetwork.broadcast_address  s3    ""3t';';#<#&t}}#5$6 7 	7r   c                 d    | j                  t        | j                        | j                  z        S rW   )r   r   r  rO   r{   s    r   r  z_BaseNetwork.hostmask  s%    ""3t||#4t~~#EFFr   c                 8    d| j                   | j                  fz  S r   )ri   rg   r{   s    r   with_prefixlenz_BaseNetwork.with_prefixlen  s    $..@@@r   c                 8    | j                   d| j                  S Nr-   )ri   r  r{   s    r   with_netmaskz_BaseNetwork.with_netmask  s    ..==r   c                 8    | j                   d| j                  S r  )ri   r  r{   s    r   with_hostmaskz_BaseNetwork.with_hostmask  s    ..>>r   c                 `    	 t        | j                        t        | j                        z
  dz   S r5   )r   r_   ri   r{   s    r   num_addressesz_BaseNetwork.num_addresses  s+    44))*S1E1E-FFJJr   c                 6    dt        |       fz  }t        |      )Nz%%200s has no associated address classr   r   s     r   r   z_BaseNetwork._address_class  s    
 6dE!#&&r   c                     | j                   S rW   )rg   r{   s    r   r   z_BaseNetwork.prefixlen  s    r   c              #     K   	 | j                   |j                   k(  st        | d|d      t        |t              st        d|z        |j	                  |       st        |d|       || k(  ry |j                  |j                  d|j                        }| j                         \  }}||k7  rv||k7  rq|j	                  |      r| |j                         \  }}n=|j	                  |      r| |j                         \  }}nt        d|d|d|      ||k7  r||k7  rq||k(  r| y ||k(  r| y t        d|d|d|      w)	NrG   rH   z%s is not a network objectz not contained in r-   z Error performing exclusion: s1: z s2: z other: )rf   rL   rJ   rq   	subnet_ofr   r   ri   r   ra   AssertionError)r|   r   s1s2s       r   address_excludez_BaseNetwork.address_exclude  sY    "	F }}.!5* + + %.85@AAt$EFFD= 5+@+@+0??!< = BEkbEkr"B$B %&("e&5 6 6 EkbEk ;H5[H !"$b%"1 2 2s   D(E+(Ec                 *   	 | j                   |j                   k7  rt        | d|d      | j                  |j                  k  ry| j                  |j                  kD  ry| j                  |j                  k  ry| j                  |j                  kD  ryy)NrG   z are not of the same typere   r6   r   )rf   rL   ri   r  r   s     r   compare_networksz_BaseNetwork.compare_networksg  s    	@ ==ENN*!5* + + %"7"77%"7"77<<%--'<<%--'r   c                 J    	 | j                   | j                  | j                  fS rW   )rf   ri   r  r{   s    r   rr   z_BaseNetwork._get_networks_key  s$    	 t33T\\BBr   Nc              #     K   	 | j                   | j                  k(  r|  y |9|| j                   k  rt        d      |dk7  rt        d      || j                   z
  }|dk  rt        d      | j                   |z   }|| j                  kD  rt        d|| fz        t        | j                        }t        | j
                        dz   }t        | j                        dz   |z	  }t        |||      D ]  }| j                  ||f      }|  y w)Nznew prefix must be longerr6   (cannot set prefixlen_diff and new_prefixr   zprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %s)	rg   rN   r   r   ri   r_   r  r   r   )	r|   prefixlen_diff
new_prefixnew_prefixlenstartendstepnew_addrcurrents	            r   ra   z_BaseNetwork.subnets  s&    	2 ??d111J!DOO+ !<==" !KLL'$//9NA=>>.84...B!4F) )* * D(()$(()A-DMM"Q&>9eS$/ 	Hnnh%>?GM	s   DDc                 v   	 | j                   dk(  r| S |9|| j                   kD  rt        d      |dk7  rt        d      | j                   |z
  }| j                  |z
  }|dk  rt        d| j                  |fz        | j                  t	        | j
                        t	        | j                        |z  z  |f      S )Nr   znew prefix must be shorterr6   r#  z;current prefixlen is %d, cannot have a prefixlen_diff of %d)rg   r   r   r   r   ri   r  )r|   r$  r%  r&  s       r   rZ   z_BaseNetwork.supernet  s    	( ??aK!DOO+ !=>>" !KLL!__z9N71M012 2 ~~$$%T\\):n)LM  	r   c                 `    	 | j                   j                  xr | j                  j                  S rW   )ri   is_multicastr_   r{   s    r   r.  z_BaseNetwork.is_multicast  s1    	 $$11 4&&33	5r   c                     	 | j                   |j                   k7  rt        |  d| d      |j                  | j                  k  xr |j                  | j                  k\  S # t        $ r t        d|  d|       w xY w)NrG   rH   z*Unable to test subnet containment between )rf   rL   ri   r_   rh   )ar   s     r   _is_subnet_ofz_BaseNetwork._is_subnet_of  s    	4zzQZZ'1#U1#-I JKK%%):):: ?''1+>+>>@ 	4 ''(cqc3 4 4	4s   AA   A;c                 (    	 | j                  | |      S rW   r1  r   s     r   r  z_BaseNetwork.subnet_of  s    ?!!$..r   c                 (    	 | j                  ||       S rW   r3  r   s     r   supernet_ofz_BaseNetwork.supernet_of  s    A!!%..r   c                 `    	 | j                   j                  xr | j                  j                  S rW   )ri   is_reservedr_   r{   s    r   r7  z_BaseNetwork.is_reserved  1    	 $$00 3&&22	4r   c                 `    	 | j                   j                  xr | j                  j                  S rW   )ri   is_link_localr_   r{   s    r   r:  z_BaseNetwork.is_link_local+  s1    	 $$22 5&&44	6r   c                      	 t         fd j                  j                  D              xr( t         fd j                  j                  D              S )Nc              3   Z   K   | ]"  }j                   |v xr j                  |v  $ y wrW   r	  ).0priv_networkr|   s     r   	<genexpr>z*_BaseNetwork.is_private.<locals>.<genexpr>?  s>      J# ''<7 :))\9: J   (+c              3   Z   K   | ]"  }j                   |vxr j                  |v $ y wrW   r	  )r=  r   r|   s     r   r?  z*_BaseNetwork.is_private.<locals>.<genexpr>A  s@      R   ((7 :**'9:Rr@  any
_constants_private_networksall_private_networks_exceptionsr{   s   `r   
is_privatez_BaseNetwork.is_private6  sZ    	  J'+'H'HJ J NQ R $(??#O#OR O	r   c                     	 | j                    S rW   rH  r{   s    r   	is_globalz_BaseNetwork.is_globalG  s    	 ??""r   c                 `    	 | j                   j                  xr | j                  j                  S rW   )ri   is_unspecifiedr_   r{   s    r   rM  z_BaseNetwork.is_unspecifiedR  s1    	 $$33 6&&55	7r   c                 `    	 | j                   j                  xr | j                  j                  S rW   )ri   is_loopbackr_   r{   s    r   rO  z_BaseNetwork.is_loopback^  r8  r   )r6   N)(r   r	   r
   r   r   r   r   r   r   r   r   r  r
  	functoolscached_propertyr_   r  r   r  r  r  r  r   r   r  r   rr   ra   rZ   r.  staticmethodr1  r  r5  r7  r:  rH  rK  rM  rO  r   r   r   rq   rq     s   ?@
))6
"C
L7 7 7 G G A A > > ? ? K K ' '  I2V.`C3j'R 	5 	5 	4 	4// 	4 	4 6 6    # # 	7 	7 	4 	4r   rq   c                       e Zd Zg Zy)_BaseConstantsN)r   r	   r
   rE  r   r   r   rT  rT  k  s    r   rT  c                       e Zd Z	 dZdZdez  dz
  ZeZi Zd Z	e
d        Ze
d        Ze
d        Ze
d	        Zd
 Zed        Zed        Zy)_BaseV4r   r#   r.   r6   c                     t        |       S rW   r   r{   s    r   rz   z$_BaseV4._explode_shorthand_ip_string  s    4yr   c                 n   	 || j                   vrxt        |t              r+|}d|cxk  r| j                  k  s&n | j	                  |       n	 | j                  |      }t        | j                  |            }||f| j                   |<   | j                   |   S # t        $ r | j                  |      }Y Vw xY wr   )
_netmask_cacherJ   r   rN   r   r   r   r   r   r   r   argr   r  s       r   _make_netmaskz_BaseV4._make_netmask  s    	 c(((#s#	Y<#*<*<<//	:@ # > >s CI
 "#"9"9)"DEG&-y&8Cs#!!#&& ) @ !$ : :3 ?I@s   B B43B4c                    	 |st        d      |j                  d      }t        |      dk7  rt        d|z        	 t        j	                  t        | j                  |      d      S # t        $ r}t        |d|      d d }~ww xY w)NAddress cannot be empty.r#   zExpected 4 octets in %rr    in )r   r0   r1   r   
from_bytesmap_parse_octetr   )r   r   octetsexcs       r   r   z_BaseV4._ip_int_from_string  s    	 #$=>>c"v;!#$=$FGG	J>>#c&6&6"?GG 	J##v$>?TI	Js   )A' '	B0BBc                 6   	 |st        d      |j                         r|j                         sd}t        ||z        t        |      dkD  rd}t        ||z        |dk7  r|d   dk(  rd}t        ||z        t	        |d      }|d	kD  rt        d
|z        |S )NzEmpty octet not permittedz#Only decimal digits permitted in %r   z$At most 3 characters permitted in %rr   r   z%Leading zeros are not permitted in %r
      zOctet %d (> 255) not permitted)r   r   r   r1   r   )r   	octet_strr   	octet_ints       r   rc  z_BaseV4._parse_octet  s    	 899!!#	(9(9(;7CS9_-- y>A8CS9_-- 	! 39CS9_--	2&	s?=	IJJr   c           	      b    	 dj                  t        t        |j                  dd                  S )Nr_  r#   r   )joinrb  r/   r%   )r   r   s     r   r   z_BaseV4._string_from_ip_int  s*    	 xxCE!:;<<r   c                 l    	 t        |       j                  d      d d d   }dj                  |      dz   S )Nr_  re   z.in-addr.arpa)r/   r0   rm  )r|   reverse_octetss     r   r   z_BaseV4._reverse_pointer  s8    	
 T-dd3xx'/99r   c                     | j                   S rW   rN   r{   s    r   max_prefixlenz_BaseV4.max_prefixlen      """r   c                     | j                   S rW   r   r{   s    r   rM   z_BaseV4.version      }}r   N)r   r	   r
   r   rf   
IPV4LENGTHrO   rN   rY  rz   r   r\  r   rc  r   r   r   rr  rM   r   r   r   rV  rV  s  s     IHJ!#IN N ' '2 J J2 ! !F 
= 
=: # #  r   rV  c                       e Zd Z	 dZd Zed        Zed        Ze ej                         d               Z
e ej                         d               Zed        Zed        Zed	        Zed
        Zy)r   )r9   __weakref__c                 8   	 t        |t              r| j                  |       || _        y t        |t              r-| j                  |d       t        j                  |      | _        y t        |      }d|v rt        d|      | j                  |      | _        y )Nr#   r-   Unexpected '/' in )
rJ   r   r   r9   r   r   ra  r/   r   r   r|   r   addr_strs      r   __init__zIPv4Address.__init__  s    	 gs###G,DH gu%&&w2~~g.DH w<(?#&8$DEE++H5r   c                 .    	 t        | j                        S rW   )r'   r9   r{   s    r   packedzIPv4Address.packed)      8))r   c                 4    	 | | j                   j                  v S rW   )rD  _reserved_networkr{   s    r   r7  zIPv4Address.is_reserved.  s    	 t8888r   c                      	 t         fd j                  j                  D              xr( t         fd j                  j                  D              S )Nc              3   &   K   | ]  }|v  
 y wrW   r   r=  rT   r|   s     r   r?  z)IPv4Address.is_private.<locals>.<genexpr>K       II   c              3   &   K   | ]  }|v 
 y wrW   r   r  s     r   r?  z)IPv4Address.is_private.<locals>.<genexpr>L       \DO\r  rB  r{   s   `r   rH  zIPv4Address.is_private9  sE    	 It'H'HII ]\t/[/[\\	
r   c                 R    	 | | j                   j                  vxr | j                   S rW   )rD  _public_networkrH  r{   s    r   rK  zIPv4Address.is_globalO  s*    	 4??:::R4???RRr   c                 4    	 | | j                   j                  v S rW   rD  _multicast_networkr{   s    r   r.  zIPv4Address.is_multicasta      	 t9999r   c                 6    	 | | j                   j                  k(  S rW   )rD  _unspecified_addressr{   s    r   rM  zIPv4Address.is_unspecifiedl  s    	 t;;;;r   c                 4    	 | | j                   j                  v S rW   )rD  _loopback_networkr{   s    r   rO  zIPv4Address.is_loopbackw  s    	 t8888r   c                 4    	 | | j                   j                  v S rW   rD  _linklocal_networkr{   s    r   r:  zIPv4Address.is_link_local      	 t9999r   N)r   r	   r
   r   r}  r   r  r7  rP  	lru_cacherH  rK  r.  rM  rO  r:  r   r   r   r   r      s    9&I!6F * * 9 9 Y
  
( YS  S  : : < < 9 9 : :r   r   c                       e Zd Zd Zej
                  d        Zd Zd Zd Z	d Z
ej                  Zed        Zed        Zed	        Zed
        Zy)r   c                     | j                  |      \  }}t        j                  | |       t        ||fd      | _        | j                  j
                  | _        | j                  j                  | _        y NF)r   )r   r   r}  r   r   r  rg   r|   r   r2   masks       r   r}  zIPv4Interface.__init__  Z    ,,W5
dT4("D$<>||++,,11r   c                 .    | j                   j                  S rW   r   r  r{   s    r   r  zIPv4Interface.hostmask      ||$$$r   c                 V    d| j                  | j                        | j                  fz  S r   r   r9   rg   r{   s    r   r   zIPv4Interface.__str__  s,    $22488<//+ + 	+r   c                     t         j                  | |      }|t        u s|s|S 	 | j                  |j                  k(  S # t        $ r Y yw xY wr  )r   r   rt   r   rh   r|   r   address_equals      r   r   zIPv4Interface.__eq__  P    #**47N*-  	<<5==00 	 		   = 	A	A	c                     t         j                  | |      }|t        u rt        S 	 | j                  |j                  k  xs | j                  |j                  k(  xr |S # t        $ r Y yw xY wr  )r   r   rt   r   rh   r|   r   address_lesss      r   r   zIPv4Interface.__lt__  sl    "))$6>)!!	LL5==0 CLLEMM1BlD 	 	s   7A 	A*)A*c                     t        | j                  | j                  t        | j                  j
                        f      S rW   r   r9   rg   r   r   ri   r{   s    r   r   zIPv4Interface.__hash__  +    TXXtDLL4P4P0QRSSr   c                 ,    t        | j                        S rW   )r   r9   r{   s    r   r>   zIPv4Interface.ip      488$$r   c                 V    | j                  | j                        d| j                  S r  r  r{   s    r   r  zIPv4Interface.with_prefixlen  %    22488<//+ 	+r   c                 V    | j                  | j                        d| j                  S r  r   r9   r  r{   s    r   r  zIPv4Interface.with_netmask  %    22488<,,( 	(r   c                 V    | j                  | j                        d| j                  S r  r   r9   r  r{   s    r   r  zIPv4Interface.with_hostmask  %    22488<--) 	)r   N)r   r	   r
   r}  rP  rQ  r  r   r   r   r   rx   r   r   r>   r  r  r  r   r   r   r   r     s    2 % %+

T  **J% % + + ( ( ) )r   r   c                   R    e Zd Z	 eZddZe ej                         d               Z	y)r   c                    	 | j                  |      \  }t              | _        | j                  |      \  | _        | _        t        | j                        }|t        | j                        z  |k7  r6|rt        d| z        t        |t        | j                        z        | _        | j
                  | j                  dz
  k(  r| j                  | _
        y | j
                  | j                  k(  rfd| _
        y y )N%s has host bits setr6   c                      t               gS rW   )r   r2   s   r   <lambda>z&IPv4Network.__init__.<locals>.<lambda>      +d"3!4 r   )r   r   ri   r\  r  rg   r   r   rN   r   r   r|   r   r   r  r  r2   s        @r   r}  zIPv4Network.__init__  s    !	D ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t22Q67DJ__!4!454DJ 6r   c                     	 | j                   t        d      v xr | j                  t        d      v  xr | j                   S )N100.64.0.0/10)ri   r   r_   rH  r{   s    r   rK  zIPv4Network.is_global  sO    	 ))[-II K**k/.JJL $OO#	%r   NT)
r   r	   r
   r   r   r}  r   rP  r  rK  r   r   r   r   r     s;    	 !N25h Y
%  
%r   r   c                   T   e Zd Z ed      Z ed      Z ed      Z ed      Z ed       ed       ed       ed       ed       ed       ed	       ed
       ed       ed       ed       ed       ed       ed      gZ ed       ed      gZ	 ed      Z
 ed      Zy)_IPv4Constantsz169.254.0.0/16z127.0.0.0/8z224.0.0.0/4r  z	0.0.0.0/8z
10.0.0.0/8z172.16.0.0/12z192.0.0.0/24z192.0.0.170/31z192.0.2.0/24z192.168.0.0/16z198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32z192.0.0.9/32z192.0.0.10/32z0.0.0.0N)r   r	   r
   r   r  r  r  r  rE  rG  r  r   r  r   r   r   r  r  !  s    $%56#M2$]3!/2O
 	K L!M"$%O$N#$%N#$%O$%&$%M"()
$ 	N#O$$ 
 $M2&y1r   r  c                       e Zd Z	 dZdZdez  dz
  ZdZ ed      Z	eZ
i Zed        Zed        Zed	        Zed
        Zedd       Zd Zd Zed        Zed        Zed        Zy)_BaseV6r   rI   r.   r6   r   0123456789ABCDEFabcdefc                 ,   	 || j                   vrwt        |t              r+|}d|cxk  r| j                  k  s%n | j	                  |       n| j                  |      }t        | j                  |            }||f| j                   |<   | j                   |   S r   )rY  rJ   r   rN   r   r   r   r   rZ  s       r   r\  z_BaseV6._make_netmask_  s    	 c(((#s#	Y<#*<*<<//	:::3?	!#"9"9)"DEG&-y&8Cs#!!#&&r   c                 H   	 |st        d      |j                  d      }d}t        |      |k  rd||fz  }t        |      d|d   v rU	 t        |j	                               j
                  }|j                  d|d	z	  d
z  z         |j                  d|d
z  z         | j                  dz   }t        |      |kD  rd|dz
  |fz  }t        |      d }t        dt        |      dz
        D ]  }	||	   r	|d|z  }t        |      |	} ||}
t        |      |z
  dz
  }|d   s|
dz  }
|
rd}t        ||z        |d   s|dz  }|rd}t        ||z        | j                  |
|z   z
  }|dk  rd}t        || j                  dz
  |fz        t        |      | j                  k7  rd}t        || j                  |fz        |d   sd}t        ||z        |d   sd}t        ||z        t        |      }
d}d}	 d}t        |
      D ]  }	|d	z  }|| j                  ||	         z  }  |d	|z  z  }t        | d      D ]  }	|d	z  }|| j                  ||	         z  }  |S # t         $ r}t        |d|      d d }~ww xY w# t        $ r}t        |d|      d d }~ww xY w)Nr^  :rg  z At least %d parts expected in %rr_  re   r`  %xr*     r6   z!At most %d colons permitted in %rz At most one '::' permitted in %rr   z0Leading ':' only permitted as part of '::' in %rz1Trailing ':' only permitted as part of '::' in %rz/Expected at most %d other parts with '::' in %rz,Exactly %d parts expected without '::' in %r)r   r0   r1   r   rY   r9   r\   _HEXTET_COUNTr   _parse_hextetr   )r   r   parts
_min_partsr   ipv4_intre  
_max_parts
skip_indexiparts_hiparts_loparts_skippedr   s                 r   r   z_BaseV6._ip_int_from_strings  sC   	 #$=>>S! 
u:
"4
F7KKC#C(( %)N&uyy{377 LL(b.F!:;<LLF!234
 &&*
u:
"5Av8NNC#C(( 
q#e*q.) 	A8)<vEC+C00
	 !!H5zJ.2H8ALC+C&L999AMC+C&L99--H1DEMq G's/@/@/BF.K(KLL
 5zS...D's/@/@&.I(IJJ8H'f559I'f555zHHM	JF8_ 62#++E!H556 rM))FH9a( 62#++E!H556 MO % N'c6(BCMNP  	J##v$>?TI	Js1   
#I  :A%J  	I?)I::I?	J!JJ!c                     	 | j                   j                  |      st        d|z        t        |      dkD  rd}t        ||z        t	        |d      S )NzOnly hex digits permitted in %rr#   z$At most 4 characters permitted in %rr*   )_HEX_DIGITS
issupersetr   r1   r   )r   
hextet_strr   s      r   r  z_BaseV6._parse_hextet  s\    	 ))*5>KLL z?Q8CS:-..:r""r   c                     	 d}d}d}d}t        |      D ]%  \  }}|dk(  r|dz  }|dk(  r|}||kD  s|}|}"d}d}' |dkD  r*||z   }|t        |      k(  r|dgz  }dg||| |dk(  rdg|z   }|S )Nre   r   r   r6    )	enumerater1   )	r   hextetsbest_doublecolon_startbest_doublecolon_lendoublecolon_startdoublecolon_lenindexhextetbest_doublecolon_ends	            r   _compress_hextetsz_BaseV6._compress_hextets  s    	 "$ &w/ 	'ME6}1$$*(-%"%99+:(->*"#$&!	'  !#$:$8%9  $s7|3B4DF4G*+?@%*$.r   Nc           
         	 |t        | j                        }|| j                  kD  rt        d      d|z  }t	        ddd      D cg c]  }dt        |||dz    d      z   }}| j                  |      }dj                  |      S c c}w )	NzIPv6 address is too large%032xr   r   r#   r  r*   r  )r   r9   rO   r   r   r  rm  )r   r   hex_strr   r  s        r   r   z_BaseV6._string_from_ip_int%  s    	 >\FCMM!899F";@B?Ka4#ga!nb11KK''0xx   Ls   Bc                    	 t        | t              rt        | j                        }n1t        | t              rt        | j
                        }nt        |       }| j                  |      }d|z  }t        ddd      D cg c]
  }|||dz     }}t        | t        t        f      r ddj                  |      | j                  fz  S dj                  |      S c c}w )Nr  r   r   r#   r   r  )rJ   r   r/   ri   r    r>   r   r   rq   rm  rg   )r|   r   r   r  r   r  s         r   rz   z$_BaseV6._explode_shorthand_ip_string?  s    	 dK(--.Fm,\FYF))&1F").q"a9A1Q399d\=9:chhuot???xx :s   >Cc                 p    	 | j                   d d d   j                  dd      }dj                  |      dz   S )Nre   r  r  r_  z	.ip6.arpa)r}   replacerm  )r|   reverse_charss     r   r   z_BaseV6._reverse_pointerT  s<    	
 dd+33C<xx&44r   c                 n    	 | j                  d      \  }}}|sd }||fS |rd|v rt        d| z        ||fS )N%zInvalid IPv6 address: "%r")	partitionr   )r   r2   sepscope_ids       r   _split_scope_idz_BaseV6._split_scope_id]  sZ    
	 %..s3c8H X~ SH_#$@6$IJJX~r   c                     | j                   S rW   rq  r{   s    r   rr  z_BaseV6.max_prefixlenq  rs  r   c                     | j                   S rW   r   r{   s    r   rM   z_BaseV6.versionu  ru  r   rW   )r   r	   r
   r   rf   
IPV6LENGTHrO   r  	frozensetr  rN   rY  r   r\  r   r  r  r   rz   r   rR  r  r   rr  rM   r   r   r   r  r  K  s     IHJ!#IM45KN N' '& eJ eJN # #2 - -^ ! !2*5  & # #  r   r  c                   8    e Zd Z	 dZd Z fdZd Z fdZd Ze	d        Z
e	d        Ze	d	        Ze	d
        Ze	d        Ze	d        Ze	 ej"                         d               Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Z xZS )r   )r9   	_scope_idrx  c                    	 t        |t              r | j                  |       || _        d | _        y t        |t
              r5| j                  |d       t        j                  |d      | _        d | _        y t        |      }d|v rt        d|      | j                  |      \  }| _        | j                  |      | _        y )Nr*   r   r-   rz  )rJ   r   r   r9   r  r   r   ra  r/   r   r  r   r{  s      r   r}  zIPv6Address.__init__  s    	" gs###G,DH!DN gu%&&w3~~gu5DH!DN w<(?#&8$DEE#'#7#7#A $.++H5r   c                 `    t         |          }| j                  r|dz   | j                  z   S |S )Nr  )r   r   r  )r|   r   r   s     r   r   zIPv6Address.__str__  s-    "04v|dnn,JFJr   c                 D    t        | j                  | j                  f      S rW   )r   r9   r  r{   s    r   r   zIPv6Address.__hash__  s    TXXt~~.//r   c                 x    t         |   |      }|t        u rt        S |sy| j                  t	        |dd       k(  S )NFr  )r   r   rt   r  getattr)r|   r   r  r   s      r   r   zIPv6Address.__eq__  s=    u-N*!!~~T!BBBr   c                 2    | j                   t        |       ffS rW   r   r{   s    r   r   zIPv6Address.__reduce__  s    T--r   c                     	 | j                   S rW   )r  r{   s    r   r  zIPv6Address.scope_id  s    	 ~~r   c                 .    	 t        | j                        S rW   )r+   r9   r{   s    r   r  zIPv6Address.packed  r  r   c                 4    	 | | j                   j                  v S rW   r  r{   s    r   r.  zIPv6Address.is_multicast  r  r   c                 V     	 t         fd j                  j                  D              S )Nc              3   &   K   | ]  }|v  
 y wrW   r   )r=  r   r|   s     r   r?  z*IPv6Address.is_reserved.<locals>.<genexpr>  s     I419Ir  )rC  rD  _reserved_networksr{   s   `r   r7  zIPv6Address.is_reserved  s%    	 Idoo&H&HIIIr   c                 4    	 | | j                   j                  v S rW   r  r{   s    r   r:  zIPv6Address.is_link_local  r  r   c                 4    	 | | j                   j                  v S rW   )rD  _sitelocal_networkr{   s    r   is_site_localzIPv6Address.is_site_local  s    		 t9999r   c                      	  j                   }||j                  S t         fd j                  j                  D              xr( t         fd j                  j                  D              S )Nc              3   &   K   | ]  }|v  
 y wrW   r   r  s     r   r?  z)IPv6Address.is_private.<locals>.<genexpr>  r  r  c              3   &   K   | ]  }|v 
 y wrW   r   r  s     r   r?  z)IPv6Address.is_private.<locals>.<genexpr>  r  r  )ipv4_mappedrH  rC  rD  rE  rF  rG  r|   r  s   ` r   rH  zIPv6Address.is_private  sb    	 &&")))It'H'HII ]\t/[/[\\	
r   c                     	 | j                    S rW   rJ  r{   s    r   rK  zIPv6Address.is_global  s    	 ??""r   c                 "    	 | j                   dk(  S r   r   r{   s    r   rM  zIPv6Address.is_unspecified#  s    	 xx1}r   c                 V    	 | j                   }||j                  S | j                  dk(  S r5   )r  rO  r9   r  s     r   rO  zIPv6Address.is_loopback.  s4    	 &&"***xx1}r   c                 Z    	 | j                   dz	  dk7  ry t        | j                   dz        S )Nr   r      r9   r   r{   s    r   r  zIPv6Address.ipv4_mapped<  s0    	 HHNv%488j011r   c                     	 | j                   dz	  dk7  ry t        | j                   dz	  dz        t        | j                    dz        fS )N`   i   @   r  r  r{   s    r   teredozIPv6Address.teredoI  sN    	 HHNz)TXX^z9:TXXI
235 	5r   c                 `    	 | j                   dz	  dk7  ry t        | j                   dz	  dz        S )Np   i   P   r  r  r{   s    r   	sixtofourzIPv6Address.sixtofourX  s4    	 HHO&DHHNj899r   )r   r	   r
   r   r}  r   r   r   r   r   r  r  r.  r7  r:  r  rP  r  rH  rK  rM  rO  r  r  r  r   r   s   @r   r   r   z  s@   93I&6PK0C. 	 	 * * : : J J : : : : Y
  
. # #      
2 
2 5 5 
: 
:r   r   c                        e Zd Zd Zej
                  d        Z fdZd Zd Z	d Z
ej                  Zed        Zed        Zed	        Zed
        Zed        Ze fd       Z xZS )r    c                     | j                  |      \  }}t        j                  | |       t        ||fd      | _        | j                  j
                  | _        | j                  j                  | _        y r  )r   r   r}  r   r   r  rg   r  s       r   r}  zIPv6Interface.__init__h  r  r   c                 .    | j                   j                  S rW   r  r{   s    r   r  zIPv6Interface.hostmaskp  r  r   c                 >    dt         |          | j                  fz  S r   )r   r   rg   r|   r   s    r   r   zIPv6Interface.__str__t  s%    %'/+//+ + 	+r   c                     t         j                  | |      }|t        u s|s|S 	 | j                  |j                  k(  S # t        $ r Y yw xY wr  )r   r   rt   r   rh   r  s      r   r   zIPv6Interface.__eq__x  r  r  c                     t         j                  | |      }|t        u r|S 	 | j                  |j                  k  xs | j                  |j                  k(  xr |S # t        $ r Y yw xY wr  )r   r   rt   r   rh   r  s      r   r   zIPv6Interface.__lt__  sl    "))$6>)	LL5==0 CLLEMM1BlD 	 	s   7A 	A&%A&c                     t        | j                  | j                  t        | j                  j
                        f      S rW   r  r{   s    r   r   zIPv6Interface.__hash__  r  r   c                 ,    t        | j                        S rW   )r   r9   r{   s    r   r>   zIPv6Interface.ip  r  r   c                 V    | j                  | j                        d| j                  S r  r  r{   s    r   r  zIPv6Interface.with_prefixlen  r  r   c                 V    | j                  | j                        d| j                  S r  r  r{   s    r   r  zIPv6Interface.with_netmask  r  r   c                 V    | j                  | j                        d| j                  S r  r  r{   s    r   r  zIPv6Interface.with_hostmask  r  r   c                 P    | j                   dk(  xr | j                  j                  S r   )r9   r   rM  r{   s    r   rM  zIPv6Interface.is_unspecified  s    xx1}<!<!<<r   c                 H    t         |   xr | j                  j                  S rW   )r   rO  r   r#  s    r   rO  zIPv6Interface.is_loopback  s    w"?t||'?'??r   )r   r	   r
   r}  rP  rQ  r  r   r   r   r   rx   r   r   r>   r  r  r  rM  rO  r   r   s   @r   r    r    f  s    2 % %+

T  **J% % + + ( ( ) ) = = @ @r   r    c                   0    e Zd Z	 eZddZd Zed        Zy)r   c                    	 | j                  |      \  }t              | _        | j                  |      \  | _        | _        t        | j                        }|t        | j                        z  |k7  r6|rt        d| z        t        |t        | j                        z        | _        | j
                  | j                  dz
  k(  r| j                  | _
        y | j
                  | j                  k(  rfd| _
        y y )Nr  r6   c                      t               gS rW   )r   r  s   r   r  z&IPv6Network.__init__.<locals>.<lambda>  r  r   )r   r   ri   r\  r  rg   r   r   rN   r   r   r  s        @r   r}  zIPv6Network.__init__  s    	< ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t22Q67DJ__ 3 334DJ 4r   c              #      K   	 t        | j                        }t        | j                        }t        |dz   |dz         D ]  }| j	                  |        y wr5   r   r   s       r   r   zIPv6Network.hosts  s\     	 d**+../	w{IM2 	)A%%a((	)s   AAc                 `    	 | j                   j                  xr | j                  j                  S rW   )ri   r  r_   r{   s    r   r  zIPv6Network.is_site_local  s1    		 $$22 5&&44	6r   Nr  )	r   r	   r
   r   r   r}  r   r   r  r   r   r   r   r     s-    	 !N.5`
) 6 6r   r   c                      e Zd Z ed      Z ed      Z ed       ed       ed       ed       ed       ed       ed	       ed
       ed       ed      g
Z ed       ed       ed       ed       ed       ed      gZ ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       gZ ed!      Z	y")#_IPv6Constantsz	fe80::/10zff00::/8z::1/128z::/128z::ffff:0:0/96z64:ff9b:1::/48z100::/64z	2001::/23z2001:db8::/32z	2002::/16zfc00::/7z2001:1::1/128z2001:1::2/128z2001:3::/32z2001:4:112::/48z2001:20::/28z2001:30::/28z::/8z100::/8z200::/7z400::/6z800::/5z1000::/4z4000::/3z6000::/3z8000::/3zA000::/3zC000::/3zE000::/4zF000::/5zF800::/6zFE00::/9z	fec0::/10N)
r   r	   r
   r   r  r  rE  rG  r  r
  r   r   r   r3  r3  	  s6   $[1$Z0
 	IHO$$%JK O$K JK 
 	O$O$M"%&N#N#$  	F[3II 6IJ 7JZ!8JZ!8JZ!8JZ!8J	 %[1r   r3  r  )$__version__rP  rv  r  r   r   r   r   r   r!   r'   r+   r3   r?   rE   rU   rc   ro   rv   rx   r   total_orderingrK   rq   rT  rD  rV  r   r   r   r  r  r   r    r   r3  r   r   r   <module>r6     s    

0
 00
 0S:S:UDC(C (: 4n.b36l2o, o,d 
hN> hN hNV H4> H4 H4V 
 ) J JZI:'< I:X@)K @)FO%'< O%d#2 #2L ( ' l l^	i:'< i:XH@K H@VY6'< Y6x*2 *2Z ( ' r   