+
     Bi<                    H   R t ^ RIt^ t^t ! R R]4      t ! R R]4      tR tR.R ltR t	R	 t
R
 tR tR tR tR tR tR tR t ! R R4      tRs]P*                   ! R R]4      4       t]P*                   ! R R]4      4       t ! R R4      t]]n         ! R R4      t ! R R]]4      t ! R R]4      t ! R  R!]]4      t ! R" R#4      t]]n        ]]n         ! R$ R%4      t ! R& R']]4      t  ! R( R)] 4      t! ! R* R+]]4      t" ! R, R-4      t#]#] n        ]#]"n        R# )/z1.0Nc                       ] tR t^tRtR# )AddressValueError N__name__
__module____qualname____firstlineno____static_attributes__r        /usr/lib/python3.14/ipaddress.pyr   r          r   r   c                       ] tR t^tRtR# )NetmaskValueErrorr   Nr   r   r   r   r   r      r   r   r   c                      \        V 4      #   \        \        3 d     Mi ; i \        T 4      #   \        \        3 d     Mi ; i\	        T : R 24      h)z. does not appear to be an IPv4 or IPv6 address)IPv4Addressr   r   IPv6Address
ValueErroraddresss   &r   
ip_addressr      sg     7##01 7##01  {"PQ
RR   
 !!
0 AAc                      \        W4      #   \        \        3 d     Mi ; i \        Y4      #   \        \        3 d     Mi ; i\	        T : R 24      h)z. does not appear to be an IPv4 or IPv6 network)IPv4Networkr   r   IPv6Networkr   )r   stricts   &&r   
ip_networkr   9   sg     7++01 7++01  {"PQ
RRr   c                      \        V 4      #   \        \        3 d     Mi ; i \        T 4      #   \        \        3 d     Mi ; i\	        T : R 24      h)z0 does not appear to be an IPv4 or IPv6 interface)IPv4Interfacer   r   IPv6Interfacer   r   s   &r   ip_interfacer    V   sg    *W%%01 W%%01  {"RS
TTr   c                 Z     V P                  ^4      #   \         d    \        R4      hi ; i)   z&Address negative or too large for IPv4to_bytesOverflowErrorr   r   s   &r   v4_int_to_packedr&   x   s6    C"" CABBC    *c                 Z     V P                  ^4      #   \         d    \        R4      hi ; i)   z&Address negative or too large for IPv6r#   r   s   &r   v6_int_to_packedr*      s6    C## CABBCr'   c                 x    \        V 4      P                  R 4      p\        V4      ^8  d   \        RV : 24      hV# )/zOnly one '/' permitted in )strsplitlenr   )r   addrs   & r   _split_optional_netmaskr1      s9    w<c"D
4y1}"<WK HIIKr   c              #      "   \        V 4      p\        V4      ;r#V F.  pVP                  VP                  ^,           8w  d   W#3x  TpTpK0  	  W#3x  R# 5i   N)iternext_ip)	addressesitfirstlastips   &    r   _find_address_ranger=      sV      
iB8E66TXX\!+E	 
 +s   AAc                 d    V ^ 8X  d   V# \        W( V ^,
          ,          P                  4       4      #     )min
bit_length)numberbitss   &&r   _count_righthand_zero_bitsrE      s/     {tg*66899r   c              #     "   \        V \        4      '       d   \        V\        4      '       g   \        R 4      hV P                  VP                  8w  d   \        V : RV: R24      hW8  d   \	        R4      hV P                  ^8X  d   \
        pM#V P                  ^8X  d   \        pM\	        R4      hV P                  pV P                  pVP                  pWE8:  dx   \        \        WC4      WT,
          ^,           P                  4       ^,
          4      pV! WCV,
          34      pVx  V^V,          ,          pV^,
          VP                  8X  g   K{  R# R# 5i)z1first and last must be IP addresses, not networks and  are not of the same versionz*last IP address must be greater than firstzunknown IP versionN)
isinstance_BaseAddress	TypeErrorversionr   r   r   max_prefixlenr7   rA   rE   rB   	_ALL_ONES)r:   r;   r<   ip_bits	first_intlast_intnbitsnets   &&      r   summarize_address_rangerT      s    4 |,,l++KLL}}$& ' 	'|EFF}}	!	-..!!G		IxxH

.yB)A-99;a?A)u_-.	Q%Z	q=BLL(  s   EEEc              #   z  "   \        V 4      p/ pV'       dY   VP                  4       pVP                  4       pVP                  V4      pVf   W2V&   KC  WS8w  g   KK  W$ VP	                  V4       K`  R p\        VP                  4       4       F*  pVe   VP                  VP                  8  d   K$  Vx  TpK,  	  R # 5iN)listpopsupernetgetappendsortedvaluesbroadcast_address)r8   to_mergesubnetsrS   rY   existingr;   s   &      r   _collapse_addresses_internalrb      s     2 IHG
lln<<>;;x( #H_!OOH%Dgnn&' %%)>)>>	 (s   B;>B;A B;c                    . p. p. pV  EFC  p\        V\        4      '       dX   V'       d=   VR,          P                  VP                  8w  d   \        V: RVR,          : R24      hVP	                  V4       Kq  VP
                  VP                  8X  dc   V'       d=   VR,          P                  VP                  8w  d   \        V: RVR,          : R24      h VP	                  VP                  4       K  V'       d=   VR,          P                  VP                  8w  d   \        V: RVR,          : R24      hVP	                  V4       EKF  	  \        \        V4      4      pV'       d/   \        V4       F  w  rVVP                  \        WV4      4       K!  	  \        W,           4      #   \         d!    TP	                  TP                  4        EK  i ; i)r4   rG   rH   )rI   rJ   rL   rK   r[   
_prefixlenrM   r<   AttributeErrornetwork_addressr\   setr=   extendrT   rb   )r8   addrsipsnetsr<   r:   r;   s   &      r   collapse_addressesrm   0  ss   $ E
CD b,''s2w"**4!#SWW!. / /JJrN]]b...s2w"**4!#SWW!. / //

255! R((BJJ6!#T"XX!/ 0 0KKO% * S
C .s3KELL0=> 4 (55! " /

2--../s   F,,&GGc                     \        V \        4      '       d   V P                  4       # \        V \        4      '       d   V P	                  4       # \
        # rV   )rI   _BaseNetwork_get_networks_keyrJ   _get_address_keyNotImplemented)objs   &r   get_mixed_type_keyrt   f  sB    $ #|$$$$&&	C	&	&##%%r   c                      a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       tR t	R t
]R 4       t]R 4       t]R	 4       t]R
 4       t]R 4       t]R 4       tR tRtV tR# )_IPAddressBasei  c                "    V P                  4       # rV   )_explode_shorthand_ip_stringselfs   &r   exploded_IPAddressBase.exploded  s     0022r   c                    \        V 4      # rV   r-   ry   s   &r   
compressed_IPAddressBase.compressed  s     4yr   c                "    V P                  4       # rV   )_reverse_pointerry   s   &r   reverse_pointer_IPAddressBase.reverse_pointer  s     $$&&r   c                    V^ 8  d    Rp\        W!V P                  3,          4      hWP                  8  d+   Rp\        W!V P                  V P                  3,          4      hR# )r@   z-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d addressN)r   rL   rN   rM   )rz   r   msgs   && r   _check_int_address!_IPAddressBase._check_int_address  sa    Q;AC#CDLL*A$ABB^^#FC#CD4F4F+/<<+9 %9 : : $r   c                h    \        V4      pW28w  d!   R p\        WAVW P                  3,          4      hR# )z6%r (len %d != %d) is not permitted as an IPv%d addressN)r/   r   rL   )rz   r   expected_lenaddress_lenr   s   &&&  r   _check_packed_address$_IPAddressBase._check_packed_address  sA    'l&JC#CK+7+G %G H H 'r   c                J    V P                   V P                   V,	          ,          # rV   )rN   )cls	prefixlens   &&r   _ip_int_from_prefix"_IPAddressBase._ip_int_from_prefix  s     }} :;;r   c                   \        VV P                  4      pV P                  V,
          pW,	          p^V,          ^,
          pWE8w  d9   V P                  ^,          pVP                  VR4      pRp\        W,          4      hV# )r4   bigz&Netmask pattern %r mixes zeroes & ones)rE   rM   r$   r   )	r   ip_inttrailing_zeroesr   leading_onesall_onesbyteslendetailsr   s	   &&       r   _prefix_from_ip_int"_IPAddressBase._prefix_from_ip_int  s~     5V585F5FH%%7	0Na'#((A-Hooh6G:CS]++r   c                ,    R V,          p\        V4      Rh)z%r is not a valid netmaskN)r   )r   netmask_strr   s   && r   _report_invalid_netmask&_IPAddressBase._report_invalid_netmask  s    )K7$$.r   c                4   VP                  4       '       d   VP                  4       '       g   V P                  V4        \        V4      p^ Xu;8:  d   V P
                  8:  g   M V P                  V4       V#   \         d    T P                  T4        LLi ; ir?   )isasciiisdigitr   intr   rM   )r   prefixlen_strr   s   && r   _prefix_from_prefix_string)_IPAddressBase._prefix_from_prefix_string  s     %%''M,A,A,C,C''6	7M*I Y3#"3"33''6	  	7''6	7s   A8 8BBc                @    V P                  V4      p V P                  X4      #   \         d    T P                  T4        L0i ; i  \         d     Mi ; iXT P
                  ,          p T P                  T4      #   \         d    T P                  T4        R # i ; irV   )_ip_int_from_stringr   r   r   r   rN   )r   ip_strr   s   && r   _prefix_from_ip_string%_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,A= =BBc                    \        V\        \        34      '       d   WP                  3# \        V\        4      '       g   \        V4      p\        V4      ^8  d   V# V^ ,          V P                  3# r4   )rI   bytesr   rM   tupler1   r/   )r   r   s   &&r   _split_addr_prefix!_IPAddressBase._split_addr_prefix  se     gs|,,----'5)) .g6G w<!Nqz3,,,,r   c                2    V P                   \        V 4      33# rV   	__class__r-   ry   s   &r   
__reduce___IPAddressBase.__reduce__(  s    ~~D	|++r   r   N)r   r   r   r	   	__slots__propertyr{   r   r   r   r   classmethodr   r   r   r   r   r   r   r
   __classdictcell____classdict__s   @r   rv   rv     s      I3 3   ' ':H 
< 
<  0 / /  0 0 0B - -., ,r   rv   c                   r   a a ] tR tRt oRtR tR tR tR tR t	R t
R tR	 tR
 tR tV 3R ltRtVtV ;t# )rJ   i.  c                    V P                   # rV   r7   ry   s   &r   __int___BaseAddress.__int__9  s    xxr   c                     V P                   VP                   8H  ;'       d    V P                  VP                  8H  #   \         d
    \        u # i ; irV   )r7   rL   rf   rr   rz   others   &&r   __eq___BaseAddress.__eq__<  sK    	"HH		) 6 657 	"!!	"s   < < AAc                   \        V\        4      '       g   \        # V P                  VP                  8w  d   \	        V : R V: R24      hV P
                  VP
                  8w  d   V P
                  VP
                  8  # R# rG   rH   F)rI   rJ   rr   rL   rK   r7   r   s   &&r   __lt___BaseAddress.__lt__C  sb    %..!!<<5==(!5* + +88uyy 88eii''r   c                |    \        V\        4      '       g   \        # V P                  \        V 4      V,           4      # rV   rI   r   rr   r   r   s   &&r   __add___BaseAddress.__add__O  -    %%%!!~~c$i%/00r   c                |    \        V\        4      '       g   \        # V P                  \        V 4      V,
          4      # rV   r   r   s   &&r   __sub___BaseAddress.__sub__T  r   r   c                P    V P                   P                  : R \        V 4      : R2# ()r   r   r-   ry   s   &r   __repr___BaseAddress.__repr__Y      >>22CI>>r   c                J    \        V P                  V P                  4      4      # rV   )r-   _string_from_ip_intr7   ry   s   &r   __str___BaseAddress.__str__\  s    4++DHH566r   c                P    \        \        \        V P                  4      4      4      # rV   )hashhexr   r7   ry   s   &r   __hash___BaseAddress.__hash___  s    CDHH&''r   c                    V P                   V 3# rV   )rL   ry   s   &r   rq   _BaseAddress._get_address_keyb  s    d##r   c                4    V P                   V P                  33# rV   )r   r7   ry   s   &r   r   _BaseAddress.__reduce__e  s    ~~{**r   c                4  < V'       d   VR,          R8X  d   \        \        V 4      V4      # \        f   ^ RIpVP	                  R4      s\        P                  V4      pV'       g   \        SV `  V4      # VP                  4       w  rEpVR8X  d   V P                  ^8X  d   RpMRpVR8X  d   V P                  pMV P                  ^,          pV'       d   Ww^,          ^,
          ,          pV'       d
   V^,          p\        \        V 4      V RV V V 24      # )	r4   sNz(#?)(_?)([xbnX])nbx0rd   )formatr-   _address_fmt_rerecompile	fullmatchsuper
__format__groupsrL   rM   r   )	rz   fmtr   m	alternategroupingfmt_basepadlenr   s	   &&      r   r   _BaseAddress.__format__h  s     c"gn#d)S)) " jj);<O%%c*7%c**()
%	X s?||q s?''F''1,FkAo%FaKFc$iI;axz(!LMMr   r   )r   r   r   r	   r   r   r   r   r   r   r   r   r   rq   r   r   r
   r   __classcell__r   r   s   @@r   rJ   rJ   .  sJ      I"1
1
?7($+/N /Nr   rJ   c                     a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tR t]P                  R 4       t]P                  R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       tR tR tR tR%R ltR%R lt]R 4       t]R 4       t R t!R t"]R 4       t#]R 4       t$]R  4       t%]R! 4       t&]R" 4       t']R# 4       t(R$t)V t*R# )&ro   i  c                P    V P                   P                  : R \        V 4      : R2# r   r   ry   s   &r   r   _BaseNetwork.__repr__  r   r   c                @    R V P                   V P                  3,          # %s/%d)rg   r   ry   s   &r   r   _BaseNetwork.__str__  s    $..???r   c              #     "   \        V P                  4      p\        V P                  4      p\        V^,           V4       F  pV P	                  V4      x  K  	  R# 5ir3   r   rg   r^   range_address_classrz   network	broadcastr   s   &   r   hosts_BaseNetwork.hosts  sM      d**+../	w{I.A%%a(( /s   AAc              #     "   \        V P                  4      p\        V P                  4      p\        W^,           4       F  pV P	                  V4      x  K  	  R# 5ir3   r  r  s   &   r   __iter___BaseNetwork.__iter__  sI     d**+../	wA.A%%a(( /s   AAc                2   \        V P                  4      p\        V P                  4      pV^ 8  d0   W!,           V8  d   \        R4      hV P	                  W!,           4      # V^,          pW1,           V8  d   \        R4      hV P	                  W1,           4      # )r@   zaddress out of range)r   rg   r^   
IndexErrorr
  )rz   r   r  r  s   &&  r   __getitem___BaseNetwork.__getitem__  s    d**+../	6{Y& !788&&w{33FA}w& !788&&y}55r   c                j   \        V\        4      '       g   \        # V P                  VP                  8w  d   \	        V : R V: R24      hV P
                  VP
                  8w  d   V P
                  VP
                  8  # V P                  VP                  8w  d   V P                  VP                  8  # R# r   )rI   ro   rr   rL   rK   rg   netmaskr   s   &&r   r   _BaseNetwork.__lt__  s    %..!!<<5==(!5* + +5#8#88''%*?*???<<5==(<<%--//r   c                    V P                   VP                   8H  ;'       dM    V P                  VP                  8H  ;'       d,    \        V P                  4      \        VP                  4      8H  #   \         d
    \
        u # i ; irV   )rL   rg   r   r  rf   rr   r   s   &&r   r   _BaseNetwork.__eq__  su    	"LLEMM1 < <((E,A,AA< <%U]]);;=  	"!!	"s   A/  A/ +A/ /BBc                h    \        \        V P                  4      \        V P                  4      34      # rV   )r   r   rg   r  ry   s   &r   r   _BaseNetwork.__hash__  s&    S--.DLL0ABCCr   c                    V P                   VP                   8w  d   R # \        V\        4      '       d   R # VP                  V P                  P                  ,          V P
                  P                  8H  # F)rL   rI   ro   r7   r  rg   r   s   &&r   __contains___BaseNetwork.__contains__  sQ    <<5==(e\** 99t||///43G3G3K3KKKr   c                    V P                   V9   ;'       g>    V P                  V9   ;'       g'    VP                   V 9   ;'       g    VP                  V 9   # rV   rg   r^   r   s   &&r   overlaps_BaseNetwork.overlaps  s]    ##u, 7 7""e+ 6 6%%- 5 5++t3	7r   c                ~    V P                  \        V P                  4      \        V P                  4      ,          4      # rV   )r
  r   rg   hostmaskry   s   &r   r^   _BaseNetwork.broadcast_address  s3    ""3t';';#<#&t}}#5$6 7 	7r   c                l    V P                  \        V P                  4      V P                  ,          4      # rV   )r
  r   r  rN   ry   s   &r   r'  _BaseNetwork.hostmask  s%    ""3t||#4t~~#EFFr   c                @    R V P                   V P                  3,          # r  )rg   re   ry   s   &r   with_prefixlen_BaseNetwork.with_prefixlen  s    $..@@@r   c                <    V P                   : R V P                  : 2# r,   )rg   r  ry   s   &r   with_netmask_BaseNetwork.with_netmask  s    ..==r   c                <    V P                   : R V P                  : 2# r/  )rg   r'  ry   s   &r   with_hostmask_BaseNetwork.with_hostmask  s    ..>>r   c                n    \        V P                  4      \        V P                  4      ,
          ^,           # r   )r   r^   rg   ry   s   &r   num_addresses_BaseNetwork.num_addresses  s*     4))*S1E1E-FFJJr   c                >    R \        V 4      3,          p\        V4      h)z%%200s has no associated address class)typeNotImplementedError)rz   r   s   & r   r
  _BaseNetwork._address_class  s    
 6dE!#&&r   c                    V P                   # rV   )re   ry   s   &r   r   _BaseNetwork.prefixlen  s    r   c              #    "   V P                   VP                   8X  g   \        V : R V: R24      h\        V\        4      '       g   \        RV,          4      hVP	                  V 4      '       g   \        V: RV : 24      hW8X  d   R# VP                  VP                  : RVP                  : 24      pV P                  4       w  r#W!8w  d|   W18w  dv   VP	                  V4      '       d   Vx  VP                  4       w  r#K;  VP	                  V4      '       d   Vx  VP                  4       w  r#Kj  \        RV: RV: RV: 24      hW!8X  d   Vx  R# W18X  d   Vx  R# \        RV: RV: RV: 24      h5i)	rG   rH   z%s is not a network objectz not contained in Nr,   z Error performing exclusion: s1: z s2: z other: )rL   rK   rI   ro   	subnet_ofr   r   rg   r   r`   AssertionError)rz   r   s1s2s   &&  r   address_exclude_BaseNetwork.address_exclude  sD    H ||u}},!5* + + %..85@AAt$$EFF= 5+@+@+0??!< = kbkr""B$$B %&("e&5 6 6 ;H[H !"$b%"1 2 2s   A-E80A:E8+.E8AE8c                J   V P                   VP                   8w  d   \        V : R V: R24      hV P                  VP                  8  d   R# V P                  VP                  8  d   ^# V P                  VP                  8  d   R# V P                  VP                  8  d   ^# ^ # )rG   z are not of the same typerd   )rL   rK   rg   r  r   s   &&r   compare_networks_BaseNetwork.compare_networksb  s    B <<5==(!5* + + %"7"77I%"7"77<<%--'I<<%--'r   c                H    V P                   V P                  V P                  3# rV   )rL   rg   r  ry   s   &r   rp   _BaseNetwork._get_networks_key  s     d22DLLAAr   Nc              #  `  "   V P                   V P                  8X  d   V x  R # Ve@   W P                   8  d   \        R4      hV^8w  d   \        R4      hW P                   ,
          pV^ 8  d   \        R4      hV P                   V,           pW0P                  8  d   \        RW03,          4      h\        V P                  4      p\        V P
                  4      ^,           p\        V P                  4      ^,           V,	          p\        WEV4       F  pV P                  Ws34      pVx  K  	  R # 5i)Nznew prefix must be longer(cannot set prefixlen_diff and new_prefixzprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %s)	re   rM   r   r   rg   r^   r'  r	  r   )	rz   prefixlen_diff
new_prefixnew_prefixlenstartendstepnew_addrcurrents	   &&&      r   r`   _BaseNetwork.subnets  s    4 ??d000J!OO+ !<==" !KLL'//9NA=>>.8---B!F) )* * D(()$(()A-DMM"Q&>9e$/Hnnh%>?GM 0s   D,D.c                   V P                   ^ 8X  d   V # VeA   W P                   8  d   \        R4      hV^8w  d   \        R4      hV P                   V,
          pV P                  V,
          pV^ 8  d   \        RV P                  V3,          4      hV P                  \	        V P
                  4      \	        V P                  4      V,          ,          V34      # )r@   znew prefix must be shorterrK  z;current prefixlen is %d, cannot have a prefixlen_diff of %d)re   r   r   r   r   rg   r  )rz   rL  rM  rN  s   &&& r   rY   _BaseNetwork.supernet  s    * ??aK!OO+ !=>>" !KLL!__z9N71M012 2 ~~$$%T\\):n)LM  	r   c                j    V P                   P                  ;'       d    V P                  P                  # rV   )rg   is_multicastr^   ry   s   &r   rX  _BaseNetwork.is_multicast  s1     $$11 4 4&&33	5r   c                    V P                   VP                   8w  d   \        V  R V R24      hVP                  V P                  8*  ;'       d    VP                  V P                  8  #   \         d    \        RT  R T 24      hi ; i)rG   rH   z*Unable to test subnet containment between )rL   rK   rg   r^   rf   )ar   s   &&r   _is_subnet_of_BaseNetwork._is_subnet_of  s    	4yyAII%1#U1#-I JKK%%):):: ? ?''1+>+>>@ 	4 ''(cqc3 4 4	4s   AA( A( (Bc                $    V P                  W4      # rV   r\  r   s   &&r   r?  _BaseNetwork.subnet_of  s    !!$..r   c                $    V P                  W4      # rV   r_  r   s   &&r   supernet_of_BaseNetwork.supernet_of  s    !!%..r   c                j    V P                   P                  ;'       d    V P                  P                  # rV   )rg   is_reservedr^   ry   s   &r   re  _BaseNetwork.is_reserved  1     $$00 3 3&&22	4r   c                j    V P                   P                  ;'       d    V P                  P                  # rV   )rg   is_link_localr^   ry   s   &r   ri  _BaseNetwork.is_link_local&  s1     $$22 5 5&&44	6r   c                  a  \         ;QJ d3    V 3R  lS P                  P                   4       F  '       g   K   RM(	  RM$! V 3R  lS P                  P                   4       4      ;'       dc    \        ;QJ d3    V 3R lS P                  P                   4       F  '       d   K   R# 	  R# ! V 3R lS P                  P                   4       4      # )c              3   p   <"   T F+  pSP                   V9   ;'       d    SP                  V9   x  K-  	  R # 5irV   r#  ).0priv_networkrz   s   & r   	<genexpr>*_BaseNetwork.is_private.<locals>.<genexpr>:  sA      J'H| ''<7 : :))\9:'H   66TFc              3   p   <"   T F+  pSP                   V9  ;'       d    SP                  V9  x  K-  	  R # 5irV   r#  )rm  r  rz   s   & r   ro  rp  <  sD      R $P ((7 : :**'9:#Orq  any
_constants_private_networksall_private_networks_exceptionsry   s   fr   
is_private_BaseNetwork.is_private1  s     s J'+'H'HJsss J'+'H'HJ J  NQc R $(??#O#ORcc	NQ	NQ R $(??#O#OR O	r   c                $    V P                   '       * # rV   )ry  ry   s   &r   	is_global_BaseNetwork.is_globalB  s     ??""r   c                j    V P                   P                  ;'       d    V P                  P                  # rV   )rg   is_unspecifiedr^   ry   s   &r   r  _BaseNetwork.is_unspecifiedM  s1     $$33 6 6&&55	7r   c                j    V P                   P                  ;'       d    V P                  P                  # rV   )rg   is_loopbackr^   ry   s   &r   r  _BaseNetwork.is_loopbackY  rg  r   r   r3   )+r   r   r   r	   r   r   r  r  r  r   r   r   r   r$  	functoolscached_propertyr^   r'  r   r,  r0  r3  r6  r
  r   rC  rF  rp   r`   rY   rX  staticmethodr\  r?  rb  re  ri  ry  r|  r  r  r
   r   r   s   @r   ro   ro     s    ?@
))6
"D
L7 7 7 G G A A > > ? ? K K ' '  I2V.`B3j'R 	5 	5 	4 	4// 	4 	4 6 6    # # 	7 	7 	4 	4r   ro   c                       ] tR tRt. tRtR# )_BaseConstantsif  r   N)r   r   r   r	   rv  r
   r   r   r   r  r  f  s    r   r  c                      a  ] tR tRt o Rt^t^],          ^,
          t]t/ t	R t
]R 4       t]R 4       t]R 4       t]R 4       tR tRtV tR	# )
_BaseV4in  c                    \        V 4      # rV   r~   ry   s   &r   rx   $_BaseV4._explode_shorthand_ip_string  s    4yr   c                   WP                   9  d   \        V\        4      '       d0   Tp^ Tu;8:  d   V P                  8:  g   M V P	                  V4       M V P                  V4      p\        V P                  V4      4      pW23V P                   V&   V P                   V,          #   \         d    T P                  T4      p L[i ; ir?   )
_netmask_cacherI   r   rM   r   r   r   r   r   r   r   argr   r  s   &&  r   _make_netmask_BaseV4._make_netmask  s     (((#s##	Y;#*;*;;//	:@ # > >s CI
 "#"9"9)"DEG&-&8Cs#!!#&& ) @ !$ : :3 ?I@s   B% %CCc                0   V'       g   \        R 4      hVP                  R4      p\        V4      ^8w  d   \        RV,          4      h \        P	                  \        V P                  V4      R4      #   \         d   p\        T: RT: 24      RhRp?ii ; i)Address cannot be empty.zExpected 4 octets in %rr    in N)r   r.   r/   r   
from_bytesmap_parse_octetr   )r   r   octetsexcs   &&  r   r   _BaseV4._ip_int_from_string  s     #$=>>c"v;!#$=$FGG	J>>#c&6&6"?GG 	J##v$>?TI	Js   )A2 2B=BBc                   V'       g   \        R 4      hVP                  4       '       d   VP                  4       '       g   Rp\        W!,          4      h\        V4      ^8  d   Rp\        W!,          4      hVR8w  d"   V^ ,          R8X  d   Rp\        W!,          4      h\	        V^
4      pV^8  d   \        RV,          4      hV# )zEmpty octet not permittedz#Only decimal digits permitted in %rz$At most 3 characters permitted in %rr   z%Leading zeros are not permitted in %rzOctet %d (> 255) not permitted)r   r   r   r/   r   )r   	octet_strr   	octet_ints   &&  r   r  _BaseV4._parse_octet  s     899!!##	(9(9(;(;7CS_-- y>A8CS_-- 	! 39CS_--	2&	s?=	IJJr   c           	     `    R P                  \        \        VP                  ^R4      4      4      # )r  r   )joinr  r-   r$   )r   r   s   &&r   r   _BaseV4._string_from_ip_int  s%     xxCE!:;<<r   c                z    \        V 4      P                  R 4      RRR1,          pR P                  V4      R,           # )r  Nz.in-addr.arpard   )r-   r.   r  )rz   reverse_octetss   & r   r   _BaseV4._reverse_pointer  s3     T-dd3xx'/99r   r   N)r   r   r   r	   r   rL   
IPV4LENGTHrN   rM   r  rx   r   r  r   r  r   r   r
   r   r   s   @r   r  r  n  s      IGJ!#IM N ' '2 J J2 ! !F 
= 
=: :r   r  c                   
  a  ] tR tRt o RtR t]R 4       t]R 4       t]]	P                  ! 4       R 4       4       t]]	P                  ! 4       R 4       4       t]R 4       t]R 4       t]R	 4       t]R
 4       t]R 4       tRtV tR# )r   i  c                Z   \        V\        4      '       d   V P                  V4       Wn        R # \        V\        4      '       d/   V P                  V^4       \        P                  V4      V n        R # \        V4      pRV9   d   \        RV: 24      hV P                  V4      V n        R # )Nr,   Unexpected '/' in )
rI   r   r   r7   r   r   r  r-   r   r   rz   r   addr_strs   && r   __init__IPv4Address.__init__  s    " gs####G,H gu%%&&w2~~g.DH w<(?#&8$DEE++H5r   c                ,    \        V P                  4      # rV   )r&   r7   ry   s   &r   packedIPv4Address.packed        ))r   c                2    W P                   P                  9   # rV   )ru  _reserved_networkry   s   &r   re  IPv4Address.is_reserved   s     8888r   c                  a  \         ;QJ d3    V 3R  lS P                  P                   4       F  '       g   K   RM(	  RM$! V 3R  lS P                  P                   4       4      ;'       dc    \        ;QJ d3    V 3R lS P                  P                   4       F  '       d   K   R# 	  R# ! V 3R lS P                  P                   4       4      # )c              3   .   <"   T F
  pSV9   x  K  	  R # 5irV   r   rm  rS   rz   s   & r   ro  )IPv4Address.is_private.<locals>.<genexpr>=       I'H'H   TFc              3   .   <"   T F
  pSV9  x  K  	  R # 5irV   r   r  s   & r   ro  r  >       \/[DO/[r  rs  ry   s   fr   ry  IPv4Address.is_private+  s    $ CIt'H'HICCCIt'H'HII ] ]\t/[/[\	
	
\t/[/[\\	
r   c                d    W P                   P                  9  ;'       d    V P                  '       * # rV   )ru  _public_networkry  ry   s   &r   r|  IPv4Address.is_globalA  s&      ??:::RR4???RRr   c                2    W P                   P                  9   # rV   )ru  _multicast_networkry   s   &r   rX  IPv4Address.is_multicastS  s     9999r   c                2    W P                   P                  8H  # rV   )ru  _unspecified_addressry   s   &r   r  IPv4Address.is_unspecified^  s     ;;;;r   c                2    W P                   P                  9   # rV   )ru  _loopback_networkry   s   &r   r  IPv4Address.is_loopbacki  s     8888r   c                2    W P                   P                  9   # rV   )ru  _linklocal_networkry   s   &r   ri  IPv4Address.is_link_locals  s     9999r   c                    \        R V  24      # )z::ffff:r   ry   s   &r   ipv6_mappedIPv4Address.ipv6_mapped}  s     WTF+,,r   r   N)r7   __weakref__)r   r   r   r	   r   r  r   r  re  r  	lru_cachery  r|  rX  r  r  ri  r  r
   r   r   s   @r   r   r     s      'I!6F * * 9 9 
  
( S  S  : : < < 9 9 : : - -r   r   c                      a  ] tR tRt o R t]P                  R 4       tR tR t	R t
R t]P                  t]R 4       t]R	 4       t]R
 4       t]R 4       tRtV tR# )r   i  c                    V P                  V4      w  r#\        P                  W4       \        W#3R R7      V n        V P                  P
                  V n        V P                  P                  V n        R# F)r   N)r   r   r  r   r  r  re   rz   r   r0   masks   &&  r   r  IPv4Interface.__init__  T    ,,W5
T("D<>||++,,11r   c                .    V P                   P                  # rV   r  r'  ry   s   &r   r'  IPv4Interface.hostmask      ||$$$r   c                ^    R V P                  V P                  4      V P                  3,          # r  r   r7   re   ry   s   &r   r   IPv4Interface.__str__  s,    $22488<//+ + 	+r   c                    \         P                  W4      pV\        J g	   V'       g   V#  V P                  VP                  8H  #   \         d     R # i ; ir  )r   r   rr   r  rf   rz   r   address_equals   && r   r   IPv4Interface.__eq__  N    #**47N*-  	<<5==00 	 		   A AAc                    \         P                  W4      pV\        J d   \        #  V P                  VP                  8  ;'       g$    V P                  VP                  8H  ;'       d    T#   \         d     R # i ; ir  )r   r   rr   r  rf   rz   r   address_lesss   && r   r   IPv4Interface.__lt__  ss    "))$6>)!!	LL5==0 C CLLEMM1BBlD 	 	s   A+  A+ (A+ +A:9A:c                    \        V P                  V P                  \        V P                  P
                  4      34      # rV   r   r7   re   r   r  rg   ry   s   &r   r   IPv4Interface.__hash__  +    TXXtDLL4P4P0QRSSr   c                ,    \        V P                  4      # rV   )r   r7   ry   s   &r   r<   IPv4Interface.ip      488$$r   c                Z    V P                  V P                  4      : R V P                  : 2# r/  r  ry   s   &r   r,  IPv4Interface.with_prefixlen  %    22488<//+ 	+r   c                Z    V P                  V P                  4      : R V P                  : 2# r/  r   r7   r  ry   s   &r   r0  IPv4Interface.with_netmask  %    22488<,,( 	(r   c                Z    V P                  V P                  4      : R V P                  : 2# r/  r   r7   r'  ry   s   &r   r3  IPv4Interface.with_hostmask  %    22488<--) 	)r   re   r  r  N)r   r   r   r	   r  r  r  r'  r   r   r   r   rv   r   r   r<   r,  r0  r3  r
   r   r   s   @r   r   r     s     2 % %+

T  **J% % + + ( ( ) )r   r   c                   f   a  ] tR tRt o ]tRR lt]]P                  ! 4       R 4       4       t
RtV tR# )r   i  c                :  a V P                  V4      w  op\        S4      V n        V P                  V4      w  V n        V n        \        V P                  4      pV\        V P                  4      ,          V8w  dE   V'       d   \        R V ,          4      h\        V\        V P                  4      ,          4      V n        V P
                  V P                  ^,
          8X  d   V P                  V n
        R# V P
                  V P                  8X  d   V3R lV n
        R# R# )%s has host bits setc                     < \        S 4      .# rV   )r   r0   s   r   <lambda>&IPv4Network.__init__.<locals>.<lambda>      +d"3!4r   N)r   r   rg   r  r  re   r   r   rM   r  r  rz   r   r   r  r  r0   s   &&&  @r   r  IPv4Network.__init__  s    F ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t11A56DJ__!3!344DJ 5r   c                    V P                   \        R 4      9   ;'       d    V P                  \        R 4      9   '       * ;'       d    V P                  '       * # )100.64.0.0/10)rg   r   r^   ry  ry   s   &r   r|  IPv4Network.is_global  sU     ))[-II K K**k/.JJL $ $OO#	%r   re   r  r  rg   NT)r   r   r   r	   r   r
  r  r   r  r  r|  r
   r   r   s   @r   r   r     s7      !N25h 
%  
%r   r   c                   ^   ] tR tRt]! R4      t]! R4      t]! R4      t]! R4      t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R	4      ]! R
4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      .t	]! R4      ]! R4      .t
]! R4      t]! R4      tRtR# )_IPv4Constantsi  z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.0r   N)r   r   r   r	   r   r  r  r  r  rv  rx  r  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                      a  ] tR tRt o Rt^t^],          ^,
          t^t]	! R4      t
]t/ t]R 4       t]R 4       t]R 4       t]R 4       t]RR l4       tR	 tR
 t]R 4       tRtV tR# )_BaseV6iG  0123456789ABCDEFabcdefc                H   WP                   9  d   \        V\        4      '       d0   Tp^ Tu;8:  d   V P                  8:  g   M V P	                  V4       MV P                  V4      p\        V P                  V4      4      pW23V P                   V&   V P                   V,          # r?   )r  rI   r   rM   r   r   r   r   r  s   &&  r   r  _BaseV6._make_netmask[  s     (((#s##	Y;#*;*;;//	:::3?	!#"9"9)"DEG&-&8Cs#!!#&&r   c                   V'       g   \        R 4      h\        V4      ^-8  dF   Tp\        V4      ^d8  d%   VR,           R\        V4      ^Z,
           RVRR  2p\        RV: 24      hV P                  ^,           pVP                  RVR7      p^p\        V4      V8  d   RWQ3,          p\        V4      hR	VR,          9   dj    \	        VP                  4       4      P                  pTP                  RT^,	          R,          ,          4       TP                  RTR,          ,          4       \        V4      V8  d   RV^,
          V3,          p\        V4      hRp	\        ^\        V4      ^,
          4       F-  p
WJ,          '       d   K  V	e   RV,          p\        V4      hT
p	K/  	  V	e   T	p\        V4      V	,
          ^,
          pV^ ,          '       g%   V^,          pV'       d   Rp\        Wa,          4      hVR,          '       g%   V^,          pV'       d   Rp\        Wa,          4      hV P                  W,           ,
          pV^8  d'   Rp\        W`P                  ^,
          V3,          4      hM\        V4      V P                  8w  d    Rp\        W`P                  V3,          4      hV^ ,          '       g   Rp\        Wa,          4      hVR,          '       g   Rp\        Wa,          4      h\        V4      p^ p^ p ^ p\        V4       F)  p
V^,          pWP                  WJ,          4      ,          pK+  	  V^V,          ,          p\        V) ^ 4       F)  p
V^,          pWP                  WJ,          4      ,          pK+  	  V#   \          d   p\        T: R
T: 24      RhRp?ii ; i  \         d   p\        T: R
T: 24      RhRp?ii ; i)r  :N-   Nr   z chars elided)Nz"At most 45 characters expected in :)maxsplitz At least %d parts expected in %rr  r  %x  z!At most %d colons permitted in %rz At most one '::' permitted in %rz0Leading ':' 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 %rird   )r   r/   _HEXTET_COUNTr.   r   rX   r7   r[   r	  _parse_hextetr   )r   r   shorten
_max_partsparts
_min_partsr   ipv4_intr  
skip_indexiparts_hiparts_loparts_skippedr   s   &&             r   r   _BaseV6._ip_int_from_stringo  s    #$=>>v;G7|c!#C[M3v;r>*:.PSPTW#&H'.k%3 4 4 &&*
S:6 
u:
"4
7K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88)<vEC+C00
 * !!H5zJ.2H88ALC+CL9999AMC+CL99--1DEMq G'/@/@/BF.K(KLL ! 5zS...D'/@/@&.I(IJJ88H'5599I'555zHHM	JF8_2++EH55 % rM))FH9a(2++EH55 ) MM % N'c6(BCMNN  	J##v$>?TI	Js1   #N BN. N+N&&N+.O9OOc                    V P                   P                  V4      '       g   \        R V,          4      h\        V4      ^8  d   Rp\        W!,          4      h\	        V^4      # )zOnly hex digits permitted in %rz$At most 4 characters permitted in %r)_HEX_DIGITS
issupersetr   r/   r   )r   
hextet_strr   s   && r   r  _BaseV6._parse_hextet  sX      ))*55>KLL z?Q8CS-..:r""r   c                   Rp^ pRp^ p\        V4       F0  w  rgVR8X  d!   V^,          pVR8X  d   TpWS8  d   TpTpK*  K,  ^ pRpK2  	  V^8  d:   VV,           pV\        V4      8X  d   VR.,          pR.WV% V^ 8X  d   R.V,           pV# )r4   r    rd   )	enumerater/   )	r   hextetsbest_doublecolon_startbest_doublecolon_lendoublecolon_startdoublecolon_lenindexhextetbest_doublecolon_ends	   &&       r   _compress_hextets_BaseV6._compress_hextets  s    " "$ &w/ME}1$$*(-%"9+:(->* :
 #$$&! 0  !#$:$8%9  $s7|3B4DF4G+?@%*$.r   Nc           
     6   Vf   \        V P                  4      pWP                  8  d   \        R4      hRV,          p\	        ^ ^ ^4       Uu. uF  pR\        W#V^,            ^4      ,          NK!  	  ppV P                  V4      pRP                  V4      # u upi )NzIPv6 address is too large%032xr  r  )r   r7   rN   r   r	  r8  r  )r   r   hex_strr   r0  s   &&   r   r   _BaseV6._string_from_ip_int*  s     >\FMM!899F";@B?K?a4#g!nb111?K''0xx   Ls   %Bc                   \        V \        4      '       d   \        V P                  4      pM7\        V \        4      '       d   \        V P
                  4      pM\        V 4      pV P                  V4      pR V,          p\        ^ ^ ^4       Uu. uF  qCWD^,            NK  	  pp\        V \        \        34      '       d%   RRP                  V4      V P                  3,          # RP                  V4      # u upi )r;  r  r  )rI   r   r-   rg   r   r<   r   r	  ro   r  re   )rz   r   r   r<  r   r  s   &     r   rx   $_BaseV6._explode_shorthand_ip_stringD  s     dK((--.Fm,,\FYF))&1F").q"a9AQ39d\=9::chhuot???xx :s   C3c                ~    V P                   R R R1,          P                  RR4      pRP                  V4      R,           # )Nr  r.  r  	.ip6.arpard   )r{   replacer  )rz   reverse_charss   & r   r   _BaseV6._reverse_pointerY  s7     dd+33C<xx&44r   c                    V P                  R 4      w  rpV'       g   RpW3# V'       d   R V9   d   \        RV ,          4      hW3# )%NzInvalid IPv6 address: "%r")	partitionr   )r   r0   sepscope_ids   &   r   _split_scope_id_BaseV6._split_scope_idb  sO     %..s38H ~ SH_#$@6$IJJ~r   r   rV   )r   r   r   r	   r   rL   
IPV6LENGTHrN   r  	frozensetr)  rM   r  r   r  r   r  r8  r   rx   r   r  rJ  r
   r   r   s   @r   r  r  G  s      IGJ!#IM45KM N' '& nJ nJ` # #2 - -^ ! !2*5  r   r  c                   j  a a ] tR tRt oRtR tV 3R ltV 3R ltR tV 3R lt	R t
V 3R ltR	 t]R
 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]]P*                  ! 4       R 4       4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       tRtVtV ;t# )r   iv  c                   \        V\        4      '       d!   V P                  V4       Wn        R V n        R # \        V\
        4      '       d7   V P                  V^4       \        P                  VR4      V n        R V n        R # \        V4      pRV9   d   \        RV: 24      hV P                  V4      w  q n        V P                  V4      V n        R # )Nr   r,   r  )rI   r   r   r7   	_scope_idr   r   r  r-   r   rJ  r   r  s   && r   r  IPv6Address.__init__|  s    $ gs####G,H!DN gu%%&&w3~~gu5DH!DN w<(?#&8$DEE#'#7#7#A .++H5r   c                t   < V P                   pVf   \        SV `	  4       # ^p\        SV `	  4       pVR V  V: 2# rV   )ipv4_mappedr   rx   )rz   rS  
prefix_lenraw_exploded_strr   s   &   r   rx   (IPv6Address._explode_shorthand_ip_string  sL    &&7799
 7?A";J/0@@r   c                   < V P                   pVf   \        SV `	  4       # ^p\        SV `  4       R V pVP                  pV VR 2R R R1,          P                  RR4      pRP                  V4      R,           # )N008xr  r.  r  rA  rd   )rS  r   r   rx   r7   rB  r  )rz   rS  rT  rU  r!  rC  r   s   &     r   r   IPv6Address._reverse_pointer  s    &&7+--
 7?A+:N??+,XdO<TrTBJJ3PRSxx&44r   c                    V P                   pVf   \        R\        V 4      ,          4      hV P                  ^ ,	          pV P	                  V4      : R\        V4      : 2# )Nz0Can not apply to non-IPv4-mapped IPv6 address %sr  )rS  r   r-   r7   r   )rz   rS  high_order_bitss   &  r   _ipv4_mapped_ipv6_to_str$IPv6Address._ipv4_mapped_ipv6_to_str  sU     &&#$VY\]aYb$bcc((b.22?CSEUVVr   c                   < V P                   pVf   \        SV `	  4       pMV P                  4       pV P                  '       d   VR,           V P                  ,           # T# )NrF  )rS  r   r   r\  rP  )rz   rS  r   r   s   &  r   r   IPv6Address.__str__  sN    &&W_&F224F04v|dnn,JFJr   c                D    \        V P                  V P                  34      # rV   )r   r7   rP  ry   s   &r   r   IPv6Address.__hash__  s    TXXt~~.//r   c                   < \         SV `  V4      pV\        J d   \        # V'       g   R # V P                  \	        VRR4      8H  # )FrP  N)r   r   rr   rP  getattr)rz   r   r  r   s   && r   r   IPv6Address.__eq__  s=    u-N*!!~~T!BBBr   c                2    V P                   \        V 4      33# rV   r   ry   s   &r   r   IPv6Address.__reduce__  s    T--r   c                    V P                   # rV   )rP  ry   s   &r   rI  IPv6Address.scope_id  s     ~~r   c                ,    \        V P                  4      # rV   )r*   r7   ry   s   &r   r  IPv6Address.packed  r  r   c                j    V P                   pVe   VP                  # W P                  P                  9   # rV   )rS  rX  ru  r  rz   rS  s   & r   rX  IPv6Address.is_multicast  s4     &&"+++9999r   c                   a  S P                   pVe   VP                  # \        ;QJ d3    V 3R lS P                  P                   4       F  '       g   K   R# 	  R# ! V 3R lS P                  P                   4       4      # )Nc              3   .   <"   T F
  pSV9   x  K  	  R # 5irV   r   )rm  r   rz   s   & r   ro  *IPv6Address.is_reserved.<locals>.<genexpr>
  s     I&H419&Hr  TF)rS  re  rt  ru  _reserved_networksrl  s   f r   re  IPv6Address.is_reserved  s_     &&"***sIdoo&H&HIssIsIsIdoo&H&HIIIr   c                j    V P                   pVe   VP                  # W P                  P                  9   # rV   )rS  ri  ru  r  rl  s   & r   ri  IPv6Address.is_link_local  s4     &&",,,9999r   c                2    W P                   P                  9   # rV   )ru  _sitelocal_networkry   s   &r   is_site_localIPv6Address.is_site_local  s     9999r   c                  a  S P                   pVe   VP                  # \        ;QJ d3    V 3R lS P                  P                   4       F  '       g   K   RM(	  RM$! V 3R lS P                  P                   4       4      ;'       dc    \
        ;QJ d3    V 3R lS P                  P                   4       F  '       d   K   R# 	  R# ! V 3R lS P                  P                   4       4      # )Nc              3   .   <"   T F
  pSV9   x  K  	  R # 5irV   r   r  s   & r   ro  )IPv6Address.is_private.<locals>.<genexpr><  r  r  TFc              3   .   <"   T F
  pSV9  x  K  	  R # 5irV   r   r  s   & r   ro  r{  =  r  r  )rS  ry  rt  ru  rv  rw  rx  rl  s   f r   ry  IPv6Address.is_private'  s    " &&")))CIt'H'HICCCIt'H'HII ] ]\t/[/[\	
	
\t/[/[\\	
r   c                \    V P                   pVe   VP                  # V P                  '       * # rV   )rS  r|  ry  rl  s   & r   r|  IPv6Address.is_global@  s.     &&"(((??""r   c                X    V P                   pVe   VP                  # V P                  ^ 8H  # rV   )rS  r  r7   rl  s   & r   r  IPv6Address.is_unspecifiedT  s/     &&"---xx1}r   c                X    V P                   pVe   VP                  # V P                  ^8H  # rV   )rS  r  r7   rl  s   & r   r  IPv6Address.is_loopbackb  s/     &&"***xx1}r   c                n    V P                   ^ ,	          R8w  d   R# \        V P                   R,          4      # )    r  N    r7   r   ry   s   &r   rS  IPv6Address.ipv4_mappedp  s+     HHNv%488j011r   c                    V P                   ^`,	          R8w  d   R# \        V P                   ^@,	          R,          4      \        V P                   ( R,          4      3# )`   i   Nr  r  ry   s   &r   teredoIPv6Address.teredo}  sI     HHNz)TXX^z9:TXXI
235 	5r   c                |    V P                   ^p,	          R8w  d   R# \        V P                   ^P,	          R,          4      # )p   i   Nr  r  ry   s   &r   	sixtofourIPv6Address.sixtofour  s/     HHO&DHHNj899r   )r7   rP  )r7   rP  r  ) r   r   r   r	   r   r  rx   r   r\  r   r   r   r   r   rI  r  rX  re  ri  rw  r  r  ry  r|  r  r  rS  r  r  r
   r   r   r   s   @@r   r   r   v  sU     4I&6PA	5W$K0C. 	 	 * * : : J J 
: 
: : : 
  
. # #&     
2 
2 5 5 
: 
: 
:r   r   c                      a a ] tR tRt oR t]P                  R 4       tV 3R ltR t	R t
R t]P                  t]R 4       t]R	 4       t]R
 4       t]R 4       t]R 4       t]V 3R l4       tRtVtV ;t# )r   i  c                    V P                  V4      w  r#\        P                  W4       \        W#3R R7      V n        V P                  P
                  V n        V P                  P                  V n        R# r  )r   r   r  r   r  r  re   r  s   &&  r   r  IPv6Interface.__init__  r  r   c                .    V P                   P                  # rV   r  ry   s   &r   r'  IPv6Interface.hostmask  r  r   c                F   < R \         SV `  4       V P                  3,          # r  )r   r   re   rz   r   s   &r   r   IPv6Interface.__str__  s%    %'/+//+ + 	+r   c                    \         P                  W4      pV\        J g	   V'       g   V#  V P                  VP                  8H  #   \         d     R # i ; ir  )r   r   rr   r  rf   r  s   && r   r   IPv6Interface.__eq__  r  r  c                    \         P                  W4      pV\        J d   V#  V P                  VP                  8  ;'       g$    V P                  VP                  8H  ;'       d    T#   \         d     R # i ; ir  )r   r   rr   r  rf   r  s   && r   r   IPv6Interface.__lt__  ss    "))$6>)	LL5==0 C CLLEMM1BBlD 	 	s   A'  A' $A' 'A65A6c                    \        V P                  V P                  \        V P                  P
                  4      34      # rV   r  ry   s   &r   r   IPv6Interface.__hash__  r  r   c                ,    \        V P                  4      # rV   )r   r7   ry   s   &r   r<   IPv6Interface.ip  r  r   c                Z    V P                  V P                  4      : R V P                  : 2# r/  r  ry   s   &r   r,  IPv6Interface.with_prefixlen  r  r   c                Z    V P                  V P                  4      : R V P                  : 2# r/  r  ry   s   &r   r0  IPv6Interface.with_netmask  r  r   c                Z    V P                  V P                  4      : R V P                  : 2# r/  r  ry   s   &r   r3  IPv6Interface.with_hostmask  r  r   c                \    V P                   ^ 8H  ;'       d    V P                  P                  # r?   )r7   r  r  ry   s   &r   r  IPv6Interface.is_unspecified  s"    xx1}<<!<!<<r   c                T   < \         SV `  ;'       d    V P                  P                  # rV   )r   r  r  r  s   &r   r  IPv6Interface.is_loopback  s     w"??t||'?'??r   r  )r   r   r   r	   r  r  r  r'  r   r   r   r   rv   r   r   r<   r,  r0  r3  r  r  r
   r   r   r   s   @@r   r   r     s     2 % %+

T  **J% % + + ( ( ) ) = = @ @ @r   r   c                   D   a  ] tR tRt o ]tRR ltR t]R 4       t	Rt
V tR# )r   i  c                :  a V P                  V4      w  op\        S4      V n        V P                  V4      w  V n        V n        \        V P                  4      pV\        V P                  4      ,          V8w  dE   V'       d   \        R V ,          4      h\        V\        V P                  4      ,          4      V n        V P
                  V P                  ^,
          8X  d   V P                  V n
        R# V P
                  V P                  8X  d   V3R lV n
        R# R# )r  c                     < \        S 4      .# rV   r  r  s   r   r  &IPv6Network.__init__.<locals>.<lambda>#	  r  r   N)r   r   rg   r  r  re   r   r   rM   r  r  r  s   &&&  @r   r  IPv6Network.__init__  s    > ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t11A56DJ__ 2 224DJ 3r   c              #     "   \        V P                  4      p\        V P                  4      p\        V^,           V^,           4       F  pV P	                  V4      x  K  	  R# 5ir3   r  r  s   &   r   r  IPv6Network.hosts%	  sQ      d**+../	w{IM2A%%a(( 3s   A!A#c                j    V P                   P                  ;'       d    V P                  P                  # rV   )rg   rw  r^   ry   s   &r   rw  IPv6Network.is_site_local1	  s1     $$22 5 5&&44	6r   r  Nr  )r   r   r   r	   r   r
  r  r  r   rw  r
   r   r   s   @r   r   r     s+      !N.5`
) 6 6r   r   c                      ] tR tRt]! R4      t]! R4      t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R	4      ]! R
4      ]! R4      ]! R4      ]! R4      ]! R4      .t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      .t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R 4      ]! R!4      ]! R"4      .t	]! R#4      t
R$tR%# )&_IPv6ConstantsiA	  z	fe80::/10zff00::/8z::1/128z::/128z::ffff:0:0/96z64:ff9b:1::/48z100::/64z	2001::/23z2001:db8::/32z	2002::/16z	3fff::/20z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::/10r   N)r   r   r   r	   r   r  r  rv  rx  rq  rv  r
   r   r   r   r  r  A	  s>   $[1$Z0
 	IHO$$%JK O$K 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   r  r  )$__version__r  r  rL  r   r   r   r   r   r    r&   r*   r1   r=   rE   rT   rb   rm   rt   rv   r   total_orderingrJ   ro   r  ru  r  r   r   r   r  r  r   r   r   r  r   r   r   <module>r     s    

0
 00
 0S:S:UDC(C (: 4n.b36l2j, j,Z 
hN> hN hNV H4> H4 H4V 
 ) B: B:HS-'< S-l@)K @)FO%'< O%d#2 #2L ( ' m m^	a:'< a:H	H@K H@VY6'< Y6x,2 ,2^ ( ' r   