python (3.11.7)

(root)/
lib/
python3.11/
test/
__pycache__/
test_ipaddress.cpython-311.pyc

eTdZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZGddejZ
GddZGdd	eZGd
deZGdd
e
eZGdde
eZGddeZGdde
eZGdde
eZGddeZGdde
eZGdde
eZGdde
ZGddejZGd d!ejZed"krejdSdS)#zUnittest for ipaddress module.N)LARGESTSMALLESTcVeZdZedZejdZdZdZ	dZ
dS)BaseTestCasectN)NotImplementedErrorselfs G/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/test/test_ipaddress.pyfactoryzBaseTestCase.factory%s!!c'K|r||z}|||}|5}|Vdddn#1swxYwY|jj!||jjdSdS)z{
        Ensure exception does not display a context by default

        Wraps unittest.TestCase.assertRaisesRegex
        N)assertRaisesRegex	exception__context__
assertTrue__suppress_context__)rexc_typedetailsargscmexcs      rassertCleanErrorzBaseTestCase.assertCleanError)s	%nG

#
#Hg
6
6
	3III															=$0OOCM>?????10s377c4|jtj|g|RS)z Ensure a clean AddressValueError)r	ipaddressAddressValueErrorrrrs   rassertAddressErrorzBaseTestCase.assertAddressError9.$t$Y%@%,5/3555	5rc4|jtj|g|RS)z Ensure a clean NetmaskValueError)rrNetmaskValueErrorrs   rassertNetmaskErrorzBaseTestCase.assertNetmaskError>r rc~|||||dS)z8Check constructor arguments produce equivalent instancesN)assertEqualr
rlhsrhss   rassertInstancesEqualz!BaseTestCase.assertInstancesEqualCs6c**DLL,=,=>>>>>rN)__name__
__module____qualname__propertyr

contextlibcontextmanagerrrr#r)rrrrs~&""X"
@
@
@555
555
?????rrc&eZdZdZdZdZdZdS)CommonTestMixinc|d5|dddddS#1swxYwYdS)NAddress cannot be emptyrr
r
s rtest_empty_addressz"CommonTestMixin.test_empty_addressJs

$
$%>
?
?		LL																		s
9==c|tjtd5|dddddS#1swxYwYdS)Nz1.0g?)rreescapereprr
r
s rtest_floats_rejectedz$CommonTestMixin.test_floats_rejectedNs

$
$RYtE{{%;%;
<
<		LL																		AAAcH|ttj|d|tt
|d|tt|ddS)N)assertRaises	TypeErroroperatorindexr
hexbytesr
s rtest_not_an_index_issue15559z,CommonTestMixin.test_not_an_index_issue15559Rsr	
)X^T\\!__EEE)S$,,q//:::)UDLLOO<<<<<rcDttjdzD]}||5||}tjtj||}|||dddn#1swxYwYdS)Nr?)proto)rangepickleHIGHEST_PROTOCOLsubTestr
loadsdumpsr%)raddrrHxys     rpickle_testzCommonTestMixin.pickle_testYs62Q677	'	'EE**
'
'LL&&La!7!788  A&&&
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'	'	'sABB	B	N)r*r+r,r7r<rFrRr0rrr2r2HsP==='''''rr2c2eZdZdZdZdZdZdZdZdS)CommonTestMixin_v4cd}gd}|D]r}||5||5||dddn#1swxYwYdddn#1swxYwYsdS)Nz(Leading zeros are not permitted in '\d+')z000.000.000.000z192.168.000.001z016.016.016.016z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)address)rLrr
)rmsg	addressesrVs    rtest_leading_zerosz%CommonTestMixin_v4.test_leading_zeroscs9	
	
	
	!	*	*Gg..
*
*,,S11**LL)))***************
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*	*	*s4A0A
A0AA0 A!A00A4	7A4	c^|dd|dddS)Nr0.0.0.0P192.168.0.1r)r
s rtest_intzCommonTestMixin_v4.test_intus4!!!Y///!!*m<<<<<rc|tdd|tdddS)N00000000r[c0a80001r])r)rEfromhexr
s rtest_packedzCommonTestMixin_v4.test_packedysL!!%--
";";YGGG!!%--
";";]KKKKKrcd}|tj|5|dddddS#1swxYwYdS)Nz,-1 (< 0) is not permitted as an IPv4 addressrr9r:r
rrWs  rtest_negative_ints_rejectedz.CommonTestMixin_v4.test_negative_ints_rejected}<

$
$RYs^^
4
4		LL																		A

AAcd}|tj|dz5|dddddS#1swxYwYdS)Nz1%d (>= 2**32) is not permitted as an IPv4 addresslrgrhs  rtest_large_ints_rejectedz+CommonTestMixin_v4.test_large_ints_rejectedsA

$
$RYsU{%;%;
<
<	 	 LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 sAAAc>fd}|d|ddS)Ncd|z}d}tj|||fz5|ddddS#1swxYwYdS)Nz4%r (len %d != 4) is not permitted as an IPv4 addressrglengthrOrWrs   rassertBadLengthzBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLengths6>DHC((3$3G)H)HII
#
#T"""
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#r=r0rrss` rtest_bad_packed_lengthz)CommonTestMixin_v4.test_bad_packed_lengthsD	#	#	#	#	#	rN)	r*r+r,rYr_rdrirmrwr0rrrTrTasq***$===LLL
   
rrTc>eZdZdZdZdZdZdZdZdZ	dZ
d	S)
CommonTestMixin_v6c^|dd|dddS)Nz
0000::0000::z000::c0a8:0001::c0a8:1r^r
s rrYz%CommonTestMixin_v6.test_leading_zeross5!!,555!!"2J?????rc^|dd|dddS)Nrr{r\r|r^r
s rr_zCommonTestMixin_v6.test_ints4!!!T***!!*j99999rc8dtdz}||ddtdz}||dtddz}||ddS)Nsrar{rbr|zc0a8:1::)rErcr)rrOs  rrdzCommonTestMixin_v6.test_packeds%--
333!!$---%--
333!!$
333}}Z((83!!$
33333rcd}|tj|5|dddddS#1swxYwYdS)Nz,-1 (< 0) is not permitted as an IPv6 addressrfrgrhs  rriz.CommonTestMixin_v6.test_negative_ints_rejectedrjrkcd}|tj|ddzz5|ddzddddS#1swxYwYdS)Nz2%d (>= 2**128) is not permitted as an IPv6 addressrgrhs  rrmz+CommonTestMixin_v6.test_large_ints_rejectedsB

$
$RYsQV|%<%<
=
=	!	!LLC   	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!sAAAc>fd}|d|ddS)Ncd|z}d}tj|||fz5||ddddS#1swxYwYdS)Nrpz5%r (len %d != 16) is not permitted as an IPv6 addressrgrqs   rrszBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLengths6>DIC((3$3G)H)HII
#
#T"""T"""
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#s+A--A14A1r0rvs` rrwz)CommonTestMixin_v6.test_bad_packed_lengthsD	#	#	#	#	#	rcd}|d|5||ddddS#1swxYwYdS)Nz::1%Invalid IPv6 address: "%r"r6rrVs  rtest_blank_scope_idz&CommonTestMixin_v6.test_blank_scope_ids

$
$%A7
K
K	"	"LL!!!	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"<AAcd}|d|5||ddddS#1swxYwYdS)Nz
::1%scope%rr6rs  r"test_invalid_scope_id_with_percentz5CommonTestMixin_v6.test_invalid_scope_id_with_percents

$
$%A7
K
K	"	"LL!!!	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"rN)r*r+r,rYr_rdrirmrwrrr0rrryrys@@@:::444
!!!
			"""
"""""rrycReZdZejZdZdZdZdZ	dZ
dZdZdZ
d	Zd
S)AddressTestCase_v4ctjd}gd}|D])\}}||t||*dS)N1.2.3.42))b 00000001000000100000001100101010)nr)rP0102032a)X0102032A)_b'0000_0001_0000_0010_0000_0011_0010_1010)_nr)_x	0102_032a)_X	0102_032A)#b"0b00000001000000100000001100101010)#nr)#x
0x0102032a)#X
0X0102032A)#_b)0b0000_0001_0000_0010_0000_0011_0010_1010)#_nr)#_x0x0102_032a)#_X0X0102_032A)sr)r5r)rIPv4Addressr%format)rv4v4_pairsfmttxts     rtest_formatzAddressTestCase_v4.test_formatsc

":
.
.


(#	3	3JS#S&S//2222	3	3rcd}|d|5tj|ddddS#1swxYwYdS)Nz127.0.0.1/24Unexpected '/' in %rrrrrs  rtest_network_passed_as_addressz1AddressTestCase_v4.test_network_passed_as_addresss

$
$%;T
B
B	(	(!$'''	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(s
;??cfd}|d|d|d|d|d|d|d|d	|d
|d|d|d
|d|d|d|d|d|d|d|d|d|d|ddS)Ncd|5tj|ddddS#1swxYwYdS)NzExpected 4 octets in %rrrOrs rassertBadSplitzAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplits(()BDII
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
:>>z127.0.1z42.42.42.42.42z42.42.42z42.4242z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016016000z0x0a.0x0a.0x0az	0x0a.0x0a0x0a.bogusz	bogus.com10001000000000000000z192.168.0.1.comr0rrs` rtest_bad_address_splitz)AddressTestCase_v4.test_bad_address_splits	,	,	,	,	,	y!!!'(((z"""wt~&&&~&&&'(((~&&&'(((}%%%y!!!uu'((({###vsw{###v)***()))))rc>fd}|d|ddS)Ncd|5tj|ddddS#1swxYwYdS)NzEmpty octet not permitted in %rrrs rassertBadOctetz;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctets(()J)-//
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,rz	42..42.42z...r0rrs` rtest_empty_octetz#AddressTestCase_v4.test_empty_octetsD	,	,	,	,	,
	{###urcfd}|dd|dd|dd|dd	|d
d|dd
|dd|dd|dddS)Ncd|d|}tj|5tj|ddddS#1swxYwYdS)Nz!Only decimal digits permitted in  in rr9r:rrrOoctetrWrs   rrzBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctetsAFMC((388
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,sAAAz0x0a.0x0a.0x0a.0x0arz0xa.0x0a.0x0a.0x0a0xaz42.42.42.-0-0z42.42.42.+0+0z42.42.42.-42z-42z
+1.+2.+3.4+1z	1.2.3.4e04e0	1.2.3.4::z4::1.a.2.3ar0rs` rtest_invalid_charactersz*AddressTestCase_v4.test_invalid_characters
s	,	,	,	,	,
	,f555+U333}d+++}d+++~u---|T***{E***{E***y#&&&&&rcBfd}|dd|dddS)Ncd}tj|||fz5tj|ddddS#1swxYwYdS)Nz*At most 3 characters permitted in %r in %rrrs   rrz<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctets>C((3%3F)G)GHH
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,AAAz0000.000.000.0000000z12345.67899.-54321.-9876512345r0rs` rtest_octet_lengthz$AddressTestCase_v4.test_octet_lengthsJ	,	,	,	,	,
	)62222G<<<<<rcBfd}|dd|dddS)Ncd||fz}tj|5tj|ddddS#1swxYwYdS)Nz$Octet %d (> 255) not permitted in %rrrs   rrz;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet$s8E4=HC((388
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,rz	257.0.0.0iz
192.168.0.999ir0rs` rtest_octet_limitz#AddressTestCase_v4.test_octet_limit#sH	,	,	,	,	,
	{C(((,,,,,rc0|ddSN	192.0.2.1rRr
s rtest_picklezAddressTestCase_v4.test_pickle,s%%%%%rcTtj|ddSrweakrefrefr
r
s rtest_weakrefzAddressTestCase_v4.test_weakref/s$DLL--.....rN)r*r+r,rrr
rrrrrrrrrr0rrrrs#G3332(((
***:''' ===---&&&/////rrcveZdZejZdZdZdZdZ	dZ
dZdZdZ
d	Zd
ZdZdZd
ZdZdZdS)AddressTestCase_v6ctjd}gd}|D])\}}||t||*dS)Nz
::1.2.3.42))rڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r 0000000000000000000000000102032a)rPr)r 0000000000000000000000000102032A)rڟ0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r'0000_0000_0000_0000_0000_0000_0102_032a)rr)r'0000_0000_0000_0000_0000_0000_0102_032A)rڂ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r"0x0000000000000000000000000102032a)rr)r"0X0000000000000000000000000102032A)rڡ0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r)0x0000_0000_0000_0000_0000_0000_0102_032a)rr)r)0X0000_0000_0000_0000_0000_0000_0102_032A)r	::102:32a)r5r)rIPv6Addressr%r)rv6v6_pairsrrs     rrzAddressTestCase_v6.test_format6sd

"<
0
0!
!
!
F#	3	3JS#S&S//2222	3	3rc>fd}|d|ddS)Ncd}||5tj|ddddS#1swxYwYdS)Nr)rrrrOrWrs  rrzIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplit`s(C((d33
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,s<AAz::1/24z::1%scope_id/24r0rs` rrz1AddressTestCase_v6.test_network_passed_as_address_sE	,	,	,	,	,	x   ()))))rcfd}|d|d|d|d|d|ddS)Ncd}||dd5tj|ddddS#1swxYwYdS)NzAt least 3 parts expected in %r%rrsplitrrrs  rrzUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSpliths3C((djjooa.@AA
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,AAA:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0rs` r*test_bad_address_split_v6_not_enough_partsz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsgs	,	,	,	,	,
	st{###y!!!z"""()))))rcfd}|d|d|d|d|d|d|d|d	|d
|ddS)Ncd}||dd5tj|ddddS#1swxYwYdS)Nz At most 8 colons permitted in %rrrr	rs  rrzTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplitu4C((djjooa.@AA
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,rz9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper0rs` r)test_bad_address_split_v6_too_many_colonsz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonsts	,	,	,	,	,
	+,,,-...*+++*+++56661222344401110111;<<<<<rcfd}|d|d|d|d|d|d|d|d	|d
|ddS)Ncd}||dd5tj|ddddS#1swxYwYdS)Nz+Exactly 8 parts expected without '::' in %rrrr	rs  rrzSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplits?C((djjooa.@AA
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,rz3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z
7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper0rs` r(test_bad_address_split_v6_too_many_partsz;AddressTestCase_v6.test_bad_address_split_v6_too_many_partss	,	,	,	,	,
	-...*+++'''2333.///34440111,---8999455555rc>fd}|d|ddS)Ncd}||dd5tj|ddddS#1swxYwYdS)Nz.Expected at most 7 other parts with '::' in %rrrr	rs  rrzeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplitsBC((djjooa.@AA
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,rz1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper0rs` r:test_bad_address_split_v6_too_many_parts_with_double_colonzMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colonsF	,	,	,	,	,
	)***/00000rcfd}|d|d|d|d|d|d|d|d	|d
|d|d|d
|d|d|d|d|d|d|d|ddS)Ncd}||dd5tj|ddddS#1swxYwYdS)Nz At most one '::' permitted in %rrrr	rs  rrzZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplitrrz
3ffe::1::1z1::2::3::4:5z2001::db:::1z	3ffe::1::z	::3ffe::1z:3ffe::1::1z3ffe::1::1:z:3ffe::1::1:z:::z2001:db8:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez	:::%scopez2001:db8:::1%scoper0rs` r/test_bad_address_split_v6_repeated_double_colonzBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colonsm	,	,	,	,	,
	|$$$~&&&~&&&{###{###}%%%}%%%~&&&u~&&&)***+,,,+,,,()))()))*+++*++++,,,{###+,,,,,rcfd}|d|d|d|d|d|d|d|d	dS)
Ncd}||dd5tj|ddddS#1swxYwYdS)Nz0Leading ':' only permitted as part of '::' in %rrrr	rs  rrzRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplitsDC((djjooa.@AA
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,rz:2001:db8::1z:1:2:3:4:5:6:7z
:1:2:3:4:5:6:z:6:5:4:3:2:1::z:2001:db8::1%scopez:1:2:3:4:5:6:7%scopez:1:2:3:4:5:6:%scopez:6:5:4:3:2:1::%scoper0rs` r'test_bad_address_split_v6_leading_colonz:AddressTestCase_v6.test_bad_address_split_v6_leading_colons	,	,	,	,	,
	~&&&'(((''''(((+,,,-...,----.....rcfd}|d|d|d|d|d|d|d|d	dS)
Ncd}||dd5tj|ddddS#1swxYwYdS)Nz1Trailing ':' only permitted as part of '::' in %rrrr	rs  rrzSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplitsEC((djjooa.@AA
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,rz2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper0rs` r(test_bad_address_split_v6_trailing_colonz;AddressTestCase_v6.test_bad_address_split_v6_trailing_colons	,	,	,	,	,
	~&&&'(((|$$$'(((+,,,-...)***-.....rcfd}|dd|dd|dd|dd	|d
d|dd|d
d|dd|dd	|dddS)Ncd||dd5tj|ddddS#1swxYwYdS)Nz%s in %rrrr	)rOv4_errorrs  rassertBadAddressPartzDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressParts((Xtzz#q?QRR
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,sAAAz3ffe::1.netzExpected 4 octets in '1.net'z
3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez
::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper0)rr$s` rtest_bad_v4_part_inz&AddressTestCase_v6.test_bad_v4_part_ins1	,	,	,	,	,	],JKKK_=	?	?	?Y;	=	=	=]?	A	A	A..	/	/	/	02PQQQ2=	?	?	?_;	=	=	=0?	A	A	A4.	/	/	/	/	/rc2fd}|dd|dd|dd|dd	|d
d|dd
|dd|dd|dd|dd	|dd|dd
dS)Ncd|d|dd}tj|5t	j|ddddS#1swxYwYdS)NzOnly hex digits permitted in rrr)r
rr9r:rrrOpartrWrs   r
assertBadPartzAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadParts=ATT4::c??STCUCUVC((388
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,s
A,,A03A0z
3ffe::googgoogz3ffe::-0rz3ffe::+0rz3ffe::-1-1r1.2.3.41234:axy::baxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope1234:axy::b%scoper0rr*s` rrz*AddressTestCase_v6.test_invalid_characterss	,	,	,	,	,
	
lF+++
j$'''
j$'''
j$'''
k9---
mU+++
(&111
&---
&---
&---
'333
)511111rcfd}|dd|dd|dd|dd	|d
d|dd|dd|d
d	dS)Ncd}|||dd5tj|ddddS#1swxYwYdS)Nz*At most 4 characters permitted in %r in %rrrr	r(s   rr*z:AddressTestCase_v6.test_part_length.<locals>.assertBadParts>C((dDJJsOOA4FGG
,
,%d+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,sAAAz::0000000000z3ffe::1000010000z02001:db8::02001z2001:888888::1888888z
::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper0r1s` rtest_part_lengthz#AddressTestCase_v6.test_part_lengths	,	,	,	,	,
	
i)))
mW---
mW---
&111
ow///
)7333
)7333
,h77777rcZ|d|ddSN
2001:db8::2001:db8::%scoperr
s rrzAddressTestCase_v6.test_pickle s1&&&+,,,,,rctj|dtj|ddSr:rr
s rrzAddressTestCase_v6.test_weakref$sADLL..///DLL!34455555rc|d}||tj|||tj|dS)Nr<)r
r%copydeepcopyrs  r	test_copyzAddressTestCase_v6.test_copy(sX||.//ty///t}T2233333rN)r*r+r,rrr
rrr
rrrrrr r%rr8rrrAr0rrrr3s#G'3'3'3R******===(666(111---8/// /// ///6222(888 ---66644444rrc<eZdZdZdZdZdZdZdZdZ	dZ
d	S)
NetmaskTestMixin_v4;Input validation on interfaces and networks is very similarc dD]}||}|t|d|t|jd|t|jddS)N)r-
1.2.3.4/32255.255.255.255r[r
r%strnetmaskhostmask)rrVnets   rtest_no_maskz NetmaskTestMixin_v4.test_no_mask1sC	;	;G,,w''CSXX|444S--/@AAAS..	::::		;	;rcd}|d|z5||ddddS#1swxYwYdS)Nz
1.2.3.4/32/24Only one '/' permitted in %rr6rs  rtest_split_netmaskz&NetmaskTestMixin_v4.test_split_netmask:s

$
$%Cd%J
K
K		LL																		s>AAcfd}|dd|dd|dd|dd|dd|d	d
|dtjddS)
Nc|5|ddddS#1swxYwYdSrr6rOrrs  rassertBadAddresszANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress@((11
#
#T"""
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
:>>/r4/8rzExpected 4 octets
google.com10/8	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r9r:rrVs` rtest_address_errorsz'NetmaskTestMixin_v4.test_address_errors?s	#	#	#	#	#	78888999"5666':;;;!4555&;<<<bi
&>&>?????rc	|t|dd|t|dd|t|dd|t|ddtddD]}d|z}||}|t|||t|d	|jz||t|d
|z||dvrdd|z
z}|t|d	|jz|dS)
N	192.0.2.0192.0.2.0/24)rb24rb
255.255.255.0z192.0.2.0/255.255.255.0r!z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%d) rri)r%rKr
rIrLrM)rinet_strrNs    rtest_valid_netmaskz&NetmaskTestMixin_v4.test_valid_netmaskLsT\\*;<<==~NNNT\\*=>>??PPPT\\*HIIJJ'	)	)	)T\\*CDDEE'	)	)	)q"	I	IA"Q&G,,w''CSXXw///DLL!;<<==w
H
H
H
Sma.?!@!@AA7KKKG||&"q&1DLL!<==>>
I
I
I
I	I	Ircbfd}|dd|dd|dd|dd|dd|dd|dd	|dd
|dd|dd
|dd|dd|dd|dddS)Ncd|z}tj|5|d|ddddS#1swxYwYdSN%r is not a valid netmaskrYr#r9r:r
rOrLrWrs   rassertBadNetmaskzANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaske-7C((388
8
8gg6777
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8AAAr-r5r,r 1 0x133z254.254.255.256r1.1.1.1z254.xyz.2.3z240.255.0.0z
255.254.128.0z0.1.127.255puddingr{r0rrss` rtest_netmask_errorsz'NetmaskTestMixin_v4.test_netmask_errorsds/	8	8	8	8	8
	B'''D)))D)))E***E***D)))$5666I...M222M222O444M222I...D)))))rcBfd}|dd|dddS)Ncd|z}tj|5||fddddS#1swxYwYdSNrprqrrs   rrszJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskz-7C((388
.
.dG_---
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.AAAryrfrhr0r{s` rtest_netmask_in_tuple_errorsz0NetmaskTestMixin_v4.test_netmask_in_tuple_errorsysJ	.	.	.	.	.	B'''B'''''rc|d|d|ddS)Nz192.0.2.0/27z192.0.2.0/31rbrr
s rrzNetmaskTestMixin_v4.test_picklesD((((((%%%%%rNr*r+r,__doc__rOrRr_rlr|rrr0rrrCrC.sEE;;;
@@@III0****(((&&&&&rrCceZdZejZdS)InterfaceTestCase_v4N)r*r+r,r
IPv4Interfacer
r0rrrr%GGGrrc.eZdZejZdZdZdZdS)NetworkTestCase_v4cv||d|d||d|d||d|d||d|ddSN10.0.0.0/30z10.0.1.0/24z10.0.0.0/24assertFalser
	subnet_ofrr
s rtest_subnet_ofz!NetworkTestCase_v4.test_subnet_ofs(LL''11]++
-
-	.	.	.	
LL''11]++
-
-	.	.	.	
LL''11]++
-
-	.	.	.	
LL''11]++
-
-	.	.	.	.	.rcv||d|d||d|d||d|d||d|ddSrrr
supernet_ofrr
s rtest_supernet_ofz#NetworkTestCase_v4.test_supernet_ofs(LL''33]++
-
-	.	.	.	
LL''33]++
-
-	.	.	.	
LL''33]++
-
-	.	.	.	
LL''33]++
-
-	.	.	.	.	.rc`|t5tjdtjddddn#1swxYwY|t5tjdtjddddn#1swxYwY|t5tjdtjddddn#1swxYwY|t5tjdtjdddddS#1swxYwYdS)Nr::1/128)r@rArIPv4NetworkrIPv6Networkrr
s rtest_subnet_of_mixed_typesz-NetworkTestCase_v4.test_subnet_of_mixed_typess


y
)
)	2	2!-00<<%i00
2
2
2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2

y
)
)	6	6!),,88%m44
6
6
6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6

y
)
)	2	2!-00::%i00
2
2
2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2

y
)
)	6	6!),,66%m44
6
6
6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6sG:A!!A%(A%:CCC1:D77D;>D;:F##F'*F'N)	r*r+r,rrr
rrrr0rrrrsI#G...$...$66666rrc<eZdZdZdZdZdZdZdZdZ	dZ
d	S)
NetmaskTestMixin_v6rDc0dD]}||}|t|d|t|jd|t|jd|d}|t|d|t|jd|t|jddS)N)::1r?srz'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr{	::1%scope
::1%scope/128rJ)rrVrN
scoped_nets    rrOz NetmaskTestMixin_v6.test_no_masks7	6	6G,,w''CSXXy111S--/XYYYS..5555\\+..
Z/:::Z/002[\\\Z011488888rc$d}|d|z5||dddn#1swxYwYd}|d|z5||ddddS#1swxYwYdS)Nzcafe:cafe::/128/190rQzcafe:cafe::%scope/128/190r6)rrOscoped_addrs   rrRz&NetmaskTestMixin_v6.test_split_netmasks$

$
$%Cd%J
K
K		LL															2

$
$%Ck%Q
R
R	&	&LL%%%	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&s!=AA"BB	B	c2fd}|dd|dd|dd|dd|dd|d	d
|dd|dd|d
d|dd|dd|dd
dS)Nc|5|ddddS#1swxYwYdSrr6rUs  rrVzANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddressrWrXrYr4rZr[zAt least 3 partsr-r\r.zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez
1.2.3.4%scopez
10%scope/8r0r0r^s` rr_z'NetmaskTestMixin_v6.test_address_errorss	#	#	#	#	#	78888999'9:::$6777!3444(9:::$=>>>%>???+-?@@@*<==='9:::,.?@@@@@rc	|t|dd|t|dd|t|ddtddD]v}d|z}|t||||t|d|z|w|t|ddtddD]v}d|z}|t||||t|d|z|wdS)	N)r;ri
2001:db8::/32)r;32rz::/%dz::/0%dz2001:db8::%scope/32)r%rKr
rI)rrjrks   rrlz&NetmaskTestMixin_v6.test_valid_netmasks	
T\\*<==>>(	*	*	*T\\*>??@@(	*	*	*T\\/::;;_MMMq#	G	GAkGSg!6!677AAAShl!;!;<<gFFFFT\\*?@@AACXYYYq#	G	GAkGSg!6!677AAAShl!;!;<<gFFFF	G	Grc2fd}|dd|dd|dd|dd|dd|dd|dd|dd	|dd
|dd|dd|d
ddS)Ncd|z}tj|5|d|ddddS#1swxYwYdSrorqrrs   rrszANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskrtrurr51::r,rrvrw129r-rzr{rr0r{s` rr|z'NetmaskTestMixin_v6.test_netmask_errorss	8	8	8	8	8
	###&&&&&&%%%%%%&&&&&&&&&	***	***t$$$i00000rcZfd}|dd|dd|dddS)Ncd|z}tj|5||fddddS#1swxYwYdSrrqrrs   rrszJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskrrrrfrrr0r{s` rrz0NetmaskTestMixin_v6.test_netmask_in_tuple_errorss]	.	.	.	.	.	###$$$c*****rc|d|d|d|ddS)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoperr
s rrzNetmaskTestMixin_v6.test_pickle"s\-...-...)***/00000rNrr0rrrrsEE999&&&AAA&GGG.111(+++11111rrceZdZejZdS)InterfaceTestCase_v6N)r*r+r,r
IPv6Interfacer
r0rrrr*rrrc(eZdZejZdZdZdS)NetworkTestCase_v6c||d|d||d|d||d|d||d|d||d|d||d|ddS)N
2000:999::/56
2000:aaa::/48
2000:aaa::/56
2000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56rr
s rrz!NetworkTestCase_v6.test_subnet_of1sLL))33_--
/
/	0	0	0	
LL))33_--
/
/	0	0	0	
LL))33_--
/
/	0	0	0	
LL))33_--
/
/	0	0	0	
LL.//99233
5
5	6	6	6	
LL.//99233
5
5	6	6	6	6	6rcv||d|d||d|d||d|d||d|ddS)Nrrrrrr
s rrz#NetworkTestCase_v6.test_supernet_ofJs(LL))55_--
/
/	0	0	0	
LL))55_--
/
/	0	0	0	
LL))55_--
/
/	0	0	0	
LL))55_--
/
/	0	0	0	0	0rN)r*r+r,rrr
rrr0rrrr.s:#G666200000rrc&eZdZdZdZdZdZdS)FactoryFunctionErrorscd}d}|t|||5||ddddS#1swxYwYdS)z3Ensure a clean ValueError with the expected messagecamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r
ValueError)rr
kindrOrWs     rassertFactoryErrorz(FactoryFunctionErrors.assertFactoryError_s;

"
":sD$
?
?		GDMMM																		s
;??cF|tjddS)NrV)rr
ip_addressr
s rtest_ip_addressz%FactoryFunctionErrors.test_ip_addressf!	 4i@@@@@rcF|tjddS)N	interface)rrip_interfacer
s rtest_ip_interfacez'FactoryFunctionErrors.test_ip_interfaceis!	 6DDDDDrcF|tjddS)Nnetwork)rr
ip_networkr
s rtest_ip_networkz%FactoryFunctionErrors.test_ip_networklrrN)r*r+r,rrrrr0rrrr]s[AAAEEEAAAAArrceZdZejdZejdZejdZ	ej
dZejdZ
ejdZej
dZejdZejdZee	gZeegzZeegZee
gzZeegZeegzZeezZeezZejdZejdZejdZej
dZejdZejdZ ej
dZ!ejdZ"ejdZ#dZ$dZ%dZ&dZ'd	Z(d
Z)dZ*dZ+d
Z,dZ-dZ.dS)ComparisonTestsr?rr	::2%scopecLt}|jD]}||||||k|||t|||tdSr)objectobjects_with_scopedassertNotEqualrr%__eq__NotImplemented__ne__rotherobjs   rtest_foreign_type_equalityz*ComparisonTests.test_foreign_type_equalitys+	@	@CU+++SE\***SZZ..???SZZ..????		@	@rcd|jD]'}|jD]}||ur|||(dSr)objectsrr&s   rtest_mixed_type_equalityz(ComparisonTests.test_mixed_type_equalitysZ<	.	.C|
.
.#::##C----
.	.	.rcrt|j|jD]\}}|||dSr)zip
v6_objectsv6_scoped_objectsrr&s   rtest_scoped_ipv6_equalityz)ComparisonTests.test_scoped_ipv6_equalitysGDOT-CDD	*	*HCS))))	*	*rcZ|jD]"}|jD]}|||#dSr)
v4_objectsrrr&s   rtest_v4_with_v6_scoped_equalityz/ComparisonTests.test_v4_with_v6_scoped_equalitysM?	.	.C-
.
.##C----
.	.	.rc|jD]D}|||||||||EdSr)rr%assertLessEqualassertGreaterEqualrrs  rtest_same_type_equalityz'ComparisonTests.test_same_type_equalitysc+	.	.CS#&&&  c***##C----	.	.rc
|j|jf|j|jf|j|jf|j|jf|j|j	f|j
|jf|j|j
f|j|jf|j|jff	D]\}}||||||||||||||||||k|||k|||k|||kdSr)v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2
v6addr_scopedv6addr2_scopedv6net_scoped
v6net2_scoped
v6intf_scopedv6intf2_scopedr
assertLessr
assertGreaterrrr&s   rtest_same_type_orderingz'ComparisonTests.test_same_type_orderingsd
[$,'
Z%
[$,'
[$,'
Z%
[$,'

!45

 23

!45

	)	)HC
S)))OOC%%%  c***sC(((##C---S3Y'''S3Y'''SCZ(((SCZ(((('	)	)rc@|jD]}|||j|j|jzD]}|||j|j|jzD]}|||j|j|j|jgzD]}|||j|j|j|jgzD]}|||j|j	|j
z|jgzD]}|||jdSr)v4_addressesassertInrv6_addressesv6_scoped_addressesrrrassertNotInrrrs  rtest_containmentz ComparisonTests.test_containmentsR$	+	+CMM#tz****$t'??	+	+CMM#tz****$t'??	2	2CMM#t01111?dj$2C%DD	.	.CS$*----?dj$2C%DD	5	5CS$"34444?T%;;tzlJ	.	.CS$*----	.	.rc|jD]Ê|jD]ttsttr=|tfd|tfd|tfd|tfddS)NckSrr0r'r(sr<lambda>z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>S3YrckSrr0r
srrz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>rrckSrr0r
srrz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>SCZrckSrr0r
srrz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>rr)r
isinstancetyper@rAr&s @@rtest_mixed_type_orderingz(ComparisonTests.test_mixed_type_orderings+	A	AC/
A
Ac499--Cc1K1K!!)->->->->->???!!)->->->->->???!!)-?-?-?-?-?@@@!!)-?-?-?-?-?@@@@

A	A	Arct}|jD]}|t5||kdddn#1swxYwY|t5||kdddn#1swxYwY|t5||kdddn#1swxYwY|t5||kdddn#1swxYwY||t
k||t
k||t
k||t
k||tk||tk||tk||tkdSr)rrr@rArrrrrs   rtest_foreign_type_orderingz*ComparisonTests.test_foreign_type_orderings+	-	-C""9--

e














""9--

e














""9--

u














""9--

u














OOC'M***S7]+++OOC7N+++SG^,,,S8^,,,OOC(N+++SH_---OOC8O,,,,!	-	-sGAA
	
A
	+A>>B	B	#B66B:	=B:	C..C2	5C2	c|j|j|jg}|j|j|jg}|j|j|jg}|	|t|jtj
|	|t|jtj
|	|t|jtj
|	||zt|j|jztj
|	t tj
t"dS)N)key)rrrrrrrrrr%sortedrrget_mixed_type_keyrrrr)r
v4_ordered
v6_orderedv6_scoped_ordereds    rtest_mixed_type_keyz#ComparisonTests.test_mixed_type_keyskk4:t{;
k4:t{;
!/1BDDVW$-$@BBB	C	C	C	
$-$@BBB	C	C	C	
* 6$-$@BBB	C	C	C	
&77$2H H$-$@BBB	C	C	C	
)Ef)M)MNNNNNrctjd}tjd}tjd}tjd}tjd}tjd}|t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j||t|j|dS)Nryrr)rrrr@rA__lt____gt__)rrrrrrrs       rtest_incompatible_versionsz*ComparisonTests.test_incompatible_versionss%i00$Y//%e,,$U++!,[99
 +K88)V]F;;;)V]F;;;)U\5999)U\5999)V]F;;;)V]F;;;)U\5999)U\5999)V]MBBB)V]MBBB)U\<@@@)U\<@@@)]%96BBB)]%96BBB)\%8%@@@)\%8%@@@@@rN)/r*r+r,rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrr r$r0rrrrpse
"Y
"1
%
%F!I!!$$E
$Y
$Q
'
'F
"Y
"1
%
%F!I!!$$E
$Y
$Q
'
'F)I)+66M')'44L*9*;77MF#L'JF#L'J(-8+|n<:%G!$55#i#A&&G
"Y
"1
%
%F%i%a((G#i#A&&G
"Y
"1
%
%F%i%a((G*Y*;77N)I)+66M,Y,[99N@@@...***...
...))),
.
.
.AAA---(OOO&AAAAArrceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d 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.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKS)LIpaddrUnitTestctjd|_tjd|_tjd|_tjd|_tjd|_	tj
d|_tjd|_tjd|_
tj
d	|_dS)
Nr-
1.2.3.4/24
1.2.3.0/242001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/642001:658:22a:cafe::/64!2001:658:22a:cafe:200:0:0:1%scopez$2001:658:22a:cafe:200:0:0:1%scope/64z2001:658:22a:cafe::%scope/64)rripv4_addressripv4_interfaceripv4_networkripv6_addressipv6_interfaceripv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkr
s rsetUpzIpaddrUnitTest.setUp's%1)<<'5lCC%1,??%3)++'5,..%12JKK#,#:/$1$1 %.%<2&4&4"#,#89W#X#X   rcD|dttjd|dttjd|dttjddS)NzIPv4Interface('1.2.3.4/32')r-zIPv6Interface('::1/128')rzIPv6Interface('::1%scope/128')r)r%r;rrrr
s rtestReprzIpaddrUnitTest.testRepr7s6i5i@@AA	C	C	C3i5e<<==	?	?	?9i5kBBCC	E	E	E	E	Erctjd}tjd}|tjd||tj|df||tjd||tjd||tj|df||tjd||t
5tjd	dddn#1swxYwY|t
5tj|d
fdddn#1swxYwY|t
5tjddddn#1swxYwY|t
5tjddddn#1swxYwY|t
5tj|d
fdddn#1swxYwY|t
5tjddddn#1swxYwYtjd}|tjd	d||tj|d
fd||tjdd||tjdd||tj|d
fd||tjdd|tjd}tjd}|tjd||tj|d
f||tjd||tjd||tj|d
f||tjd||tjd	tjd|tjdtjd|t
5tjddddn#1swxYwY|t
5tjdddddS#1swxYwYdS)Nrz192.0.2.1/32)rriri)ri)rrIrI)r:rI)rrcrc)r:rc)rrgrg)r:rgrdFstrictrbrf)rgra)r=rcz192.0.2.1/24)rz255.255.255.255.0)rrrr%r@rrr)riprNs   r
testIPv4TuplezIpaddrUnitTest.testIPv4Tuple@s~

";
/
/#N33./@AA3GGG.Bx88#>>>./?@@#FFF.0CDDEH	J	J	J.0A0CDDEH	J	J	J.0CDDEH	J	J	J

z
*
*	5	5!"3444	5	5	5	5	5	5	5	5	5	5	5	5	5	5	5


z
*
*	,	,!2r(+++	,	,	,	,	,	,	,	,	,	,	,	,	,	,	,


z
*
*	4	4!"2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4


z
*
*	B	B!"@AAA	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B


z
*
*	9	9!2"7888	9	9	9	9	9	9	9	9	9	9	9	9	9	9	9


z
*
*	A	A!"?@@@	A	A	A	A	A	A	A	A	A	A	A	A	A	A	A#N33./@6;===>A	C	C	C.Bx6;===>A	C	C	C./?6;===>A	C	C	C.0A6;===>A	C	C	C	
.0?0A6;===>A	C	C	C	
.0A6;===>A	C	C	C

";
/
/#N33.0ABBCF	H	H	H.0?0ABBCF	H	H	H.0ABBCF	H	H	H./@AA3GGG.Bx88#>>>./?@@#FFF01BCC"0@@	B	B	B01ABB"0@@	B	B	B

z
*
*	F	F!"DEEE	F	F	F	F	F	F	F	F	F	F	F	F	F	F	F

z
*
*	E	E !CDDD	E	E	E	E	E	E	E	E	E	E	E	E	E	E	E	E	E	Es7EEE=F  F$'F$G&&G*-G*H,,H03H0I44I8;I8J::J>J>V$$V(+V(	W++W/2W/ctjd}tjd}|tjd||tjd||tj|df|tjd}tjd}|tjd||tjd||tj|d	f|tjd
}tjd}|t
5tjddddn#1swxYwY|t
5tjd
dddn#1swxYwY|t
5tj|dfdddn#1swxYwYtjd}|tjdd||tjd
d||tj|dfd||tjdtjd|tjdtjdtjd}|t
5tjddddn#1swxYwY|t
5tj|dfdddn#1swxYwY|t
5tjddddn#1swxYwY|t
5tjdddddS#1swxYwYdS)Nr;z2001:db8::/128)r;128)	n rrAz
2001:db8::/96)r;96)rB`rCr<2001:db8::1)rErD)	n rDrDFr;)rErCz2001:db8::1/96)rFrC2001:db8::1%scope)rGrD)rErg)rrrr%r@rrr)rr>rN	ip_scopeds    r
testIPv6TuplezIpaddrUnitTest.testIPv6TuplesS

"<
0
0#$455./DEE			.=??				
.E{;;			

"<
0
0#O44./CDD			.<>>				
.Dz::			)*<==	
"=
1
1


z
*
*	7	7!"5666	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7


z
*
*	=	=!#<
=
=
=	=	=	=	=	=	=	=	=	=	=	=	=	=	=	=

z
*
*	,	,!2r(+++	,	,	,	,	,	,	,	,	,	,	,	,	,	,	,#O44./B6;===				
.I$)+++				
.BxFFF				
01FGG"01ABB	D	D	D0>@@"01ABB	D	D	D)*=>>	


z
*
*	=	=!";<<<	=	=	=	=	=	=	=	=	=	=	=	=	=	=	=


z
*
*	3	3!9b/222	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3


z
*
*	D	D!"BCCC	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D

z
*
*	C	C !ABBB	C	C	C	C	C	C	C	C	C	C	C	C	C	C	C	C	C	Cs~F((F,/F,
G..G25G2H66H:=H:7NNN=O  O$'O$P&&P*-P*Q--Q14Q1c|tjddztjd|tjddz
tjd|tjddztjd|tjddz
tjd|tjd	dztjd
|tjd
dz
tjd	dS)Nryz1.1.2.0z1.1.0.1riz::ffffrz::ffff%scope)r%rrrrr
s rtestAddressIntMathz!IpaddrUnitTest.testAddressIntMathsd.y99C?".y99	;	;	;.y99C?".y99	;	;	;.u55C".x88	:	:	:.x88IF".u55	7	7	7I1+>>)L%1.AA	C	C	CI1.AAYO%1+>>	@	@	@	@	@rcj|ttjd|ttjdtjz|ttjd|ttjdtjzdS)Nrfr)r@rrv4_int_to_packed
IPV4LENGTHv6_int_to_packed
IPV6LENGTHr
s rtestInvalidIntToBytesz$IpaddrUnitTest.testInvalidIntToBytess*i&@"EEE*i&@y33	5	5	5*i&@"EEE*i&@y33	5	5	5	5	5rc	tjd}tjd}tjd}|ttj|g||fg|ttj||g||f||fg|ttj|||g||fg|dtjdd|dt
|jdS)Nz10.10.10.10z10.10.10.11z10.10.10.12rrzIPv4Network('1.2.3.0/24'))rrr%list_find_address_range_count_righthand_zero_bitsr;r/)rip1ip2ip3s    r
testInternalszIpaddrUnitTest.testInternalss2#M22#M22#M22i;SEBBCC*	'	'	'i;S#JGGHH*sCj1	3	3	3i;S#sOLLMM*	'	'	'iB1cJJKKK4d4;L6M6MNNNNNrc|t|jjd|t	|jjd|t|jjd|t	|jjd|t	|jjd|t|jjd|t	|jjd|t	|jjddS)Ni1.2.3.0l	/YE 2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r%intr/network_addressrKr2rMr5r
s rtestGetNetworkzIpaddrUnitTest.testGetNetworks\T.>??JJJT.>??KKKT.>???	A	A	AT.>??.	0	0	0T.7880	2	2	2T5EFF?	A	A	AT5EFF4	6	6	6T5>??0	2	2	2	2	2rcr||jjtjdjtjd}tjd}tjd}||tjt
|j||tjt
|j||tjt
|jd}||j	jtj
|j||jjtj
|j|tj|jjj
d|tj|jjj
d|tj|jjj
ddS)NrFr-r*r,	/YE )r%r._iprrrr`rarr1rr4r-versionr0r3)ripv4ipv6ipv6_scopedv6_ints     r
testIpFromIntzIpaddrUnitTest.testIpFromInts,0"0::>	@	@	@#I..#$ABB*+NOOy3C8L4M4MNNOOOy3C8L4M4MNNOOOK)=c+B]>^>^)_)_```7,0"088<	>	>	>37"088<	>	>	>	
-d.?.CDDL			-d.?.CDDL			-d.F.JKKS					rctj}||jjtjdj||d|d||jjtjdj||d|d||d|ddS)	NrG255.254.253.252 X*ffff:2:3:4:ffff::r{s)rrr%r.rgrr1r>rs  rtestIpFromPackedzIpaddrUnitTest.testIpFromPackeds &,0"/0CDDH	J	J	J!233 !455	7	7	7,/"/8999;	=	=	=	
!455 "677	8	8	8	
 ..	0	0	0	0	0rc"|t|jjd|t	|jjd|t|jjd|t	|jjd|t|jjd|t	|jjddS)NrFr-rd2001:658:22a:cafe:200::1)r%r`r.r>rKr1r4r
s r	testGetIpzIpaddrUnitTest.testGetIp&sT0344h???T0344i@@@T0344?	A	A	AT03443	5	5	5T7:;;?	A	A	AT7:;;3	5	5	5	5	5rc||jjd|t|jjd||jjd|t|jjd||jjjd|t|j	jjddS)Nscope)
r%r0scope_idrKr3r1r4r2rar5r
s rtestGetScopeIdzIpaddrUnitTest.testGetScopeId3s*3			T5>?? 	"	"	",5			T7@AA 	"	"	"*:C			T5ENOO 	"	"	"	"	"rc|t|jjd|t	|jjd|t|jjd||jjd|t|jjd||jjddS)Nlrgl	@)r%r`r/rLrKr2	prefixlenr5r
s rtestGetNetmaskzIpaddrUnitTest.testGetNetmaskAsT.677DDDT.677IIIT.677@	B	B	B*4b999T5=>>@	B	B	B1;R@@@@@rctjd}|t|jjd||ddtjd}|t|jjd||ddtjd}|t|jjd||dddS)N	1.2.3.4/0r0z::1/0z::1%scope/0)rrr%r`rrL_prefix_from_prefix_stringr)ripv4_zero_netmaskipv6_zero_netmaskipv6_scoped_zero_netmasks    rtestZeroNetmaskzIpaddrUnitTest.testZeroNetmaskKs%3K@@.6>??CCC*EEcJJANNN%3G<<.6>??CCC*EEcJJANNN#,#:=#I#I 5=EFFJJJ1LLSQQSTUUUUUrcdtjd}||jddS)Nz127.0.0.0/0.0.0.255rc)rrr%r~rrNs  rtestIPv4NetzIpaddrUnitTest.testIPv4NetXs1#$9::+++++rc"|t|jjd|t	|jjd|t|jjd|t	|jjd|t|jjd|t	|jjddS)Ni	1.2.3.255l	/YE %2001:658:22a:cafe:ffff:ffff:ffff:ffff)r%r`r/broadcast_addressrKr2r5r
s rtestGetBroadcastzIpaddrUnitTest.testGetBroadcast\sT.@AA8LLLT.@AA;OOOT.@AA?	A	A	AT.@AA@	B	B	B	
T5GHH?	A	A	AT5GHH@	B	B	B	B	Brc||jjjd||jjjd||jjjddS)Nrcr})r%r.rr~r1r4r
s rtestGetPrefixlenzIpaddrUnitTest.testGetPrefixlenjse,4>CCC,4>CCC3;ErJJJJJrc||jjd|t	|jjd|t
jdjt
j	d||j
jd|t	|j
jd|t
jdjt
jd||j
jd|t	|j
jddS)Nz1.2.2.0	0.0.0.0/0?r^z::0/0)r%r/supernetr~rKrarrrrr2rrr5r
s rtestGetSupernetzIpaddrUnitTest.testGetSupernetos*3355?DDDT.7799IJJ"	$	$	$#K008AACC!+..	0	0	0	
*3355?DDDT.7799IJJ.	0	0	0099AJJLL".w77	9	9	91::<<FKKKT5>>@@PQQ.	0	0	0	0	0rc||jdjd|t	|jdjd||jdjd|t	|jdjd||jdjd|t	|jdjddS)Nrtz1.2.0.0=z2001:658:22a:caf8::)r%r/rr~rKrar2r5r
s rtestGetSupernet3zIpaddrUnitTest.testGetSupernet3s7*33A66@"EEET.77::JKK"	$	$	$	
*33A66@"EEET.77::JKK.	0	0	01::1==GLLLT5>>qAAQRR.	0	0	0	0	0rc|t|jjdd|t|jjd||jd|jd|t|jjdd|t|jjd||jd|jd	|t|jjdd|t|jjd||jd|jd	dS)
Nrr?prefixlen_diff
new_prefixrrA>)r@rr/rr%r2r5r
s rtestGetSupernet4zIpaddrUnitTest.testGetSupernet4s*d&7&@)*q		:	:	:*d&7&@%'		)	)	)*3313EE*33r3BB	D	D	D	
*d&7&@)*q		:	:	:*d&7&@%'		)	)	)*3313EE*33r3BB	D	D	D*d&>&G)*q		:	:	:*d&>&G%'		)	)	)1::!:LL1::b:II	K	K	K	K	Krcd
t|j}|dt	||tjd|d|tjd|dtjd}t|}|dt	||tjd|d|tjd	|dtjd
}t|}|dt	||tjd|d|tjd	|dtjdtjdg}d
}d}||ttj	|||ttj	||ttj	|ttj	|tjdg}d}d}||ttj	|||ttj	||ttj	|ttj	|tjdtjdg}d}d}||ttj	|||ttj	||ttj	|ttj	|tjdg}d}d}||ttj	|||ttj	||ttj	|ttj	|dS)Nz1.2.3.1rz	1.2.3.254rf2001:658:22a:cafe::/120rK2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/1202.0.0.0z2.0.0.1z
2.0.0.0/31)rr-rH)r-rir^z2001:658:22a:cafe::/127)r^2001:658:22a:cafe::1/128)rr)
rUr/hostsr%lenrrrrr)rrr2r5addrsstr_argstpl_argss       r	testHostszIpaddrUnitTest.testHostssvT&,,..//c%jj))).y9958DDD.{;;U2YGGG ,-FGG\''))**c%jj)))./EFFaQQQ./FGGrSSS'34STT(..0011c%jj)))./EFFaQQQ./FGGrSSS&y11&y113"Y%9(%C%C%I%I%K%K L LMMMY%9(%C%C%I%I%K%K L LMMMi28<<BBDDEEi28<<BBDDEE	G	G	G&y112"Y%9(%C%C%I%I%K%K L LMMMY%9(%C%C%I%I%K%K L LMMMi28<<BBDDEEi28<<BBDDEE	G	G	G&'<==&'=>>@,/Y%9(%C%C%I%I%K%K L LMMMY%9(%C%C%I%I%K%K L LMMMi28<<BBDDEEi28<<BBDDEE	G	G	G&'=>>A-0Y%9(%C%C%I%I%K%K L LMMMY%9(%C%C%I%I%K%K L LMMMi28<<BBDDEEi28<<BBDDEE	G	G	G	G	Grc|t|jdt|jd|t
t|jd|t
t|jdd|t|jdt|jd|t
t|jd	|t
t|jdd|t|jdt|jd|t
t|jd	|t
t|jdddS)
NrtrrrrreDr)	r%rr/subnetsr@rrUr2r5r
s rtestFancySubnettingz"IpaddrUnitTest.testFancySubnettings 1 9 9 9 K KLL 1 9 9R 9 H HII	K	K	K*d+33r3BB	D	D	D*d+331>@4BB	C	C	C	
 1 9 9 9 K KLL 1 9 9R 9 H HII	K	K	K*d+33r3BB	D	D	D*d+331>@4BB	C	C	C	
 8 @ @PQ @ R RSS 8 @ @B @ O OPP	R	R	R*d2::b:II	K	K	K*d2::!FH;JJ	K	K	K	K	Krc|t|jdjd|tt|jdjd|tt|jdjd|t|jdjd|t|jdjddS)Nrrr]r?z	1.2.3.128r)	r%rUr/rr~rKrar2r5r
s rtestGetSubnetszIpaddrUnitTest.testGetSubnetssPd/7799::1=GLLLT%--//111244CEE"	$	$	$	
T%--//111244CEE$	&	&	&	
d/7799::1=GLLLd6>>@@AA!DNPRSSSSSrctjd}d|D}d|dD}||dg|||dS)NrHc,g|]}t|Sr0rK.0rPs  r
<listcomp>z;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>111qCFF111rc,g|]}t|Sr0rrs  rrz;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>222qCFF222rr)rrrr%)rr>subnets1subnets2s    rtestGetSubnetForSingle32z'IpaddrUnitTest.testGetSubnetForSingle32s~

"<
0
011BJJLL11122BJJqMM222L>2228,,,,,rctjd}d|D}d|dD}||dg|||tjd}d|D}d|dD}||dg|||dS)Nrc,g|]}t|Sr0rrs  rrz<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>rrc,g|]}t|Sr0rrs  rrz<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>rrrrc,g|]}t|Sr0rrs  rrz<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>	s888qCFF888rc,g|]}t|Sr0rrs  rrz<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>
s999qCFF999r)rrrr%)rr>rrrHs     rtestGetSubnetForSingle128z(IpaddrUnitTest.testGetSubnetForSingle128s

"9
-
-11BJJLL11122BJJqMM222I;///8,,,)/::	88I$5$5$7$788899I$5$5a$8$8999O#45558,,,,,rcd|jdD}||gdd|jdD}||gddS)Nc,g|]}t|Sr0rrs  rrz.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>s<<<!s1vv<<<rr)z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26c,g|]}t|Sr0rrs  rrz.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>s>>>AQ>>>r)2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r/rr%r2)ripsipsv6s   rtestSubnet2zIpaddrUnitTest.testSubnet2s<<t088;;<<<III	K	K	K?>!2!:!:1!=!=>>>
,
,
,	-	-	-	-	-rc@d|jdD}||ddgd||ddgd|t|dt	jd}d	|dD}||ddgd
||ddgd|t|ddS)Nc,g|]}t|Sr0rrs  rrz2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>s@@@a3q66@@@rrt)z
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32)z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32rLrc,g|]}t|Sr0rrs  rrz2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>%s;;;a3q66;;;r)z2001:658:22a:cafe::/128rz2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)r/rr%rrr)rrr2s   rtestGetSubnets3zIpaddrUnitTest.testGetSubnets3sR@@4#4#<#<Q#?#?@@@!666	8	8	8<<<	>	>	>Ws+++ ,-FGG;;<#7#7#:#:;;;!
)
)
)	*	*	*	

*
*
*	+	+	+	
Ws+++++rc|tt|jjd|tt|jd|tt|jjd|tt|jd|tt|j	jd|tt|j
ddS)N	rr@rrUr.rrr/r1r2r4r5r
s rtestSubnetFailsForLargeCidrDiffz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiff0sC*d-5==a@@	B	B	B*d+33A66	8	8	8*d-5==bAA	C	C	C*d+33B77	9	9	9*d4<DDRHH	J	J	J*d2::2>>	@	@	@	@	@rc|t|jjjd|t|jjjd|t|jjjddS)Nrr)r@rr.rrr1r4r
s r!testSupernetFailsForLargeCidrDiffz0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff>s*-5>	D	D	D*-5>	D	D	D*4<Er	K	K	K	K	Krc|tt|jjd|tt|jd|tt|jjd|tt|jd|tt|j	jd|tt|j
ddS)Nrfrr
s r"testSubnetFailsForNegativeCidrDiffz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffFsC*d-5==bAA	C	C	C*d+33B77	9	9	9*d-5==bAA	C	C	C*d+33B77	9	9	9*d4<DDRHH	J	J	J*d2::2>>	@	@	@	@	@rc||jjd|t|jdjd||jjd||jjd|t|jdjd||jjd||jjd|t|jdjd||jjddS)NrLrrill )r%r/
num_addressesrUrrr2r5r
s rtestGetNum_Addressesz#IpaddrUnitTest.testGetNum_AddressesTs*8#>>>d/7799::1=K			*3355CSIII*8:NOOOd/7799::1=K,	.	.	.*3355C-	/	/	/1?AUVVVd6>>@@AA!DR,	.	.	.1::<<J-	/	/	/	/	/rc|tjd|j|tjd|jtjd}|||j|tjdtjddS)Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	rrrr/r	rrr__contains__)raddr1s  rtestContainszIpaddrUnitTest.testContainses

i-n=='	)	)	)0>>*	,	,	,%j11

eT.///	
.|<<II%l3355	6	6	6	6	6rc|t|jdd|t|jjd|t|jdd|t|jjd|t|jdd|t|jjddS)Nru1.2.3.5rLz2001:658:22a:cafe::5r)r%rKr/r@
IndexError__getitem__r2r5r
s rtestNthzIpaddrUnitTest.testNthrsT.q122I>>>*d&7&CSIIIT.q122/	1	1	1*d&7&CWMMMT5a899/	1	1	1*d&>&JGTTTTTrctjd}|d|jt	|}|dt|d|dt|d|dt|d|dt|d||d|ddS)Nz172.31.255.128/255.255.255.240z172.31.255.128rz172.31.255.143rf)rrr%r~rUrK)rrO	addr_lists   rtestGetitemzIpaddrUnitTest.testGetitem}s$%EFFT^,,,JJ	)3y|+<+<===)3tAw<<888)3y}+=+=>>>)3tBx==9992R11111rc||jtjdk||jtjdk||jtjdk||jtjdk||jdk||jgk||jdk||jtjdk||jtjdk||jtjdk||jdk||jgk||jdk||jtjd	k||jtjd
k||jtjdk||jtjdk||jtjdk||jdk||jgk||jdkdS)Nr(
1.2.3.4/23::1.2.3.4/24::1.2.3.4%scope/24r5r2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64!2001:658:22a:cafe:200::1%scope/63)rr.rrrrr1r4r
s r	testEqualzIpaddrUnitTest.testEqualsn+!/==>	?	?	?,"0>>?	@	@	@,"0@@A	B	B	B,"01EFFG	H	H	H,2333,2333,1222+#$ABBC	D	D	D,#$ABBC	D	D	D,"0>>?	@	@	@,2333,2333,12222#$GHHI	J	J	J3#$GHHI	J	J	J3#$ABBC	D	D	D3#$ABBC	D	D	D3"0>>?	@	@	@3r9:::3r9:::3q899999rc	||jtjdk||jtjdk||jtjdk||jtjdk||jdk||jgk||jdk||jtjdk||jdk||jgk||jdk||jtjdk||jtjd	k||jtjdk||jdk||jgk||jdk||j	tjd
k||j	dk||j	gk||j	dk||j
tjdk||j
tjdk||j
tjdk||j
tjd	k||j
tjdk||j
dk||j
gk||j
dk||jtjd
k||jdk||jgk||jdkdS)
Nr(rrrr5rrrrr-rr)rr.rrrrr-rr1r0r4r3r
s rtestNotEqualzIpaddrUnitTest.testNotEquals,"0>>?	@	@	@+!/==>	?	?	?+!/??@	A	A	A+!/0DEEF	G	G	G+r1222+r1222+q0111)".y99:	;	;	;)R/000)R/000)Q.///,#$ABBC	D	D	D+#$ABBC	D	D	D+!/==>	?	?	?+r1222+r1222+q0111)!-i889	:	:	:)R/000)R/000)Q.///3#$GHHI	J	J	J2#$GHHI	J	J	J2#$ABBC	D	D	D2#$ABBC	D	D	D2!/==>	?	?	?2b89992b89992a78880!-i889	:	:	:0B67770B67770A566666rcp|ttjdddS)Nz1.2.3.4/255.255.255.255rHr%rKrrr
s rtestSlash32Constructorz%IpaddrUnitTest.testSlash32ConstructorsEY4-//001=	?	?	?	?	?rc|ttjdd|ttjdddS)Nrr)r%rKrrr
s rtestSlash128Constructorz&IpaddrUnitTest.testSlash128ConstructorslY4Y??@@"+	-	-	-Y4_EEFF"1	3	3	3	3	3rcp|ttjdddS)Nz1.2.3.4/0.0.0.0rrr
s rtestSlash0Constructorz$IpaddrUnitTest.testSlash0Constructors=Y45FGGHH%	'	'	'	'	'rctjd}tjd}tjd}tjd}tjd}tjd}tj||||||g}|t	|tjdtjdgtjd}tjd}tjd}tjd}tj||||g}|t	|tjdgtjd}tjd	}tjd
}tjd}tjd}tjd
}tj||||||g}|t	|tjd
tjdgtj||g}|t	|tjdgtjdx}}	|t	tj||	g|gtjdx}}	|t	tj||	gtjdgtjd}tjd}tjd}tj|||g}|t	||gtjd}tjd}tjd}tj|||g}|t	||gtjdtjdftjdtjdftjdtjdfg}
|
D]-\}}|	ttj||g.tjdtjdftjdtjdftjdtjdfg}
|
D]-\}}|	ttj||g.dS)N1.1.1.0ry1.1.1.2z1.1.1.3z1.1.1.4z
1.1.1.0/30z
1.1.1.4/32z
1.1.0.0/24
1.1.1.0/24
1.1.2.0/24z
1.1.3.0/24z
1.1.4.0/24z
1.1.0.0/22z
1.1.0.0/23z
1.1.1.1/32z
2001::/100z
2001::/120	2001::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96rz
1.1.0.0/32z
2001::/128rz2001::%scope/128)rrcollapse_addressesr%rUrrrrr@rA)rrXrYrZip4ip5ip6	collapsedip_same1ip_same2addr_tupless           rtestCollapsingzIpaddrUnitTest.testCollapsingsW#I..#I..#I..#I..#I..#I..0
#sCc*,,	i&|44&|446	7	7	7
#I..#I..#I..#I..0#sC1EFF	i#/==>	@	@	@#L11#L11#L11#L11#L11#L110#sCc582:;;	i#/==#/==?	@	@	@
0#s<<	i#/==>	@	@	@(3LAAA8i:x(**++"	%	%	%
(3I>>>8i:x(**++#.|<<=	?	?	?#L11#L11#K000#sCAA	i3%000#$677#$677#$5660#sCAA	i3%000%i00%e,,.&|44&|446&|44&|446
$	*	*HCi)E"Cj
*
*
*
*%i00%k224&|44&'9::<&|44&'9::<
$	*	*HCi)E"Cj
*
*
*
*	*	*rc
"
tj}tjd}tjd}Gddtj}|d}|d}|t
t||||tt||tjd|tt||tjd|t
|||dtj	dtjd	}|t
|||tj	d
tj	d	gtj
d}tj
tj
j}|tjdgt
|||tjd}tjd
}|t
|||dtj	dtjd}|t
|||tj	dtj	dgtjd}tjd}|t
|||dtj	dtjd}|t
|||tj	dtj	dg|t
t|tjdtjd|tt|tj	dtj	d|tt|tj	dtj	d|tt|tjdtj	ddS)Nrz	1.1.1.255c$eZdZedZdS)3IpaddrUnitTest.testSummarizing.<locals>.IPv7AddresscdS)Nr0r
s rrhz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.version]sqrN)r*r+r,r-rhr0rrIPv7Addressr\s-


X


rrrrrr	z1.1.1.8z
1.1.1.0/29rrz$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z	1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez	2::%scopez1.1.0.0r{)
rsummarize_address_rangerrr@rrUrAr%rr	_ALL_ONESr)r	summarizerXrYrip_invalid1ip_invalid2s       rtestSummarizingzIpaddrUnitTest.testSummarizingTs5	"9--";//					)/			"k%((!k%((*d#)K==	?	?	?	
)T#)C)>u)E)EFF	H	H	H)T#)C)>{)K)KLL	N	N	N	
iiS112215"-l;;	=	=	="9--iiS1122#.|<<#.y99;	<	<	<#A&&#I$9$CDD)/<<=iiS1122	4	4	4"5))"#IJJiiS112215"-h77	9	9	9"5))iiS1122#.x88#.y99;	<	<	<";//"#OPPiiS112215"-h77	9	9	9";//iiS1122#.x88#.y99;	<	<	<
	
*d#)I$8$C$C$-$8$C$CEE	F	F	F	
)T#)I$8$C$C$-$8$C$CEE	F	F	F	
)T#)I$8$C$C$-$8$C$CEE	F	F	F	
)T#)I$8$>$>$-$8$C$CEE	F	F	F	F	Frc|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdkdS)Nryrr::2rr)rrrr
s rtestAddressComparisonz$IpaddrUnitTest.testAddressComparisonsP	,Y77!,Y778	9	9	9	,Y77!,Y778	9	9	9	,U33!,U334	5	5	5	,U33!,U334	5	5	5	,[99!,[99:	;	;	;	,[99!,[99:	;	;	;	;	;rc|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjd	tjd	k|tjd	tjd
k|tjd	tjdk|tjdtjd	k|tjd
tjd	k|tjdtjd	k|tjd	tjdk|tjd	tjdk|tjd	tjdk|tjd	tjdk|tjdtjdk|tjd
tjdk|tjdtjdk|tjd	tjdk|tjdtjd	k|tjdtjd
k|tjdtjdk|tjdtjd	k|tjdtjd	k|tjdtjd	k|tjdtjdkdS)
Nz
1.1.1.1/24z
1.1.1.1/16z
1.1.1.2/24z
1.1.1.2/16z::1/64z::1/80z::2/64z::2/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)rrrrr
s rtestInterfaceComparisonz&IpaddrUnitTest.testInterfaceComparisons	.|<<!.|<<=	>	>	>	.|<<!.|<<=	>	>	>	.|<<!.|<<=	>	>	>	.|<<!.|<<=	>	>	>	.|<<!.|<<=	>	>	>	.|<<!.|<<=	>	>	>	.|<<!.|<<=	>	>	>	
	.x88!.x889	:	:	:	.x88!.x889	:	:	:	.x88!.x889	:	:	:	.x88!.x889	:	:	:	.x88!.x889	:	:	:	.x88!.x889	:	:	:	.x88!.x889	:	:	:	
	.~>>!.~>>?	@	@	@	.~>>!.~>>?	@	@	@	.~>>!.~>>?	@	@	@	.~>>!.~>>?	@	@	@	.~>>!.~>>?	@	@	@	.~>>!.~>>?	@	@	@	.~>>!.~>>?	@	@	@	
/??!.x889	:	:	:	.~>>!.x889	:	:	:	.~>>!.x889	:	:	:	.~>>!.x889	:	:	:	.~>>!.x889	:	:	:	.~>>!.x889	:	:	:	.~>>!.x889	:	:	:	
/99!.~>>?	@	@	@	.x88!.~>>?	@	@	@	.x88!.~>>?	@	@	@	.x88!.~>>?	@	@	@	.x88!.~>>?	@	@	@	.x88!.~>>?	@	@	@	.x88!.~>>?	@	@	@	@	@rctjd}tjd}tjd}|||k|||k|||d|||d|||d|||d|||d|||ktjd}tjd}tjd	}|||k|||k|||d|||k|t|j	j|j
tjd
}tjd}|t|j
||t|j||t|j
||t|j|tjd}|||k|||ktjd
}|||k|||k|||k|||ktjd}|||k|||k|||k|||ktjd}tjd}tjd}tjd}||||g}||||g}||||||||g}||||||
tjdt(||
tjdt(|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdk|tjdtjdkdS)Nr	z
1.1.1.0/32r
rrfr?z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0rz
10.1.2.128/25z10.1.3.0/24z10.1.3.0/25z
10.10.10.0/31z
10.10.10.0z
10.10.10.2/31z
10.10.10.2ryrrr")rrrr%compare_networks_get_networks_keyrr@rAr/r2rrr"r#rrsortassertIsrr)	rrXrYrZrjrir
runsorteds	         rtestNetworkComparisonz$IpaddrUnitTest.testNetworkComparisons0#L11#L11#L11c	"""c	"""--c22A666	
--c22B777--c22A666--c22B777--c22A666--//#2G2G2I2IIJJJ#$455#$455#$9::c	"""c	"""--c22B777--//#2G2G2I2IIJJJ	
)+<+	-	-	-&v..&{33)T[$777)T[$777)T[$777)T[$777"?33s###s###"=11c	"""s###s###c	""""=11c	"""s###s###c	""""?33"<00"?33"<00sC%c3'

***c3'

***

cjj!5l!C!CDD$	&	&	&

cjj!5l!C!CDD$	&	&	&	
	,Y77!,Y778	9	9	9	,Y77!,Y778	9	9	9-i88!,Y778	9	9	9	
	,U33!,U334	5	5	5	,U33!,U334	5	5	5-e44"-e445	6	6	6	6	6rc|ttjd|ttjd|ttjddS)Nz192.168.1.1/24z::1/120z
::1%scope/120)r@rrrr
s rtestStrictNetworksz!IpaddrUnitTest.testStrictNetworksOsZ*i&:<LMMM*i&:IFFF*i&:OLLLLLrctjd}tjd}tjd}||j|||j||||dS)Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)rrrr/overlapsr)rrother2other3s    rtestOverlapszIpaddrUnitTest.testOverlapsTs%l33&|44&}55)22599:::*33F;;<<<//00000rcd}tj|}tjd|z}|t	|jt	|jtjd|z}||j|j|tjtjddS)Nr]z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	rrrr%r`r>rr@r)ripv4_stringri
v4compat_ipv6
v4mapped_ipv6s     rtestEmbeddedIpv4zIpaddrUnitTest.testEmbeddedIpv4\s#&{33!/0DEE
]-..DG===!/k0IJJ
M,dg666)5y7N0	2	2	2	2	2rc|tjdtjd|tjdtjd|tjdtjd|tjdtjd|tjdtjd|tjdtjd|tjdtjd|tjdtjddS)	Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scope)r%rrrr
s rtestIPv6AddressTooLargez&IpaddrUnitTest.testIPv6AddressTooLargegs-.@AA#./@AA	C	C	C	
-.?@@#./?@@	B	B	B	
-.FGG#./FGG	I	I	I-.EFF#./EFF	H	H	HI01IJJ%01BCC	E	E	EI01HII%01ABB	D	D	DI01CDD#./FGG	I	I	II01BCC#./EFF	H	H	H	H	Hrc||jjd||jjd||jjddS)Nrerf)r%r-rhr0r3r
s r
testIPVersionzIpaddrUnitTest.testIPVersion|s\*2A666*2A666191=====rc||jjd||jjd||jjddS)Nrir)r%r.
max_prefixlenr1r4r
s rtestMaxPrefixLengthz"IpaddrUnitTest.testMaxPrefixLengths\,:B???,:C@@@3A3GGGGGrc||jjd|tjdjd||jjd|tjdjd|tjdjd||jjd|tjd	jd|tjd
jddS)NrGrorprqrrrsz::1:0:0:0:0szffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r%r-packedrrr0rr3r
s r
testPackedzIpaddrUnitTest.testPackedsh*1,	.	.	.01BCCJ,	.	.	.*1=	>	>	>	
01DEEL*	+	+	+	
0??F@	B	B	B18=	>	>	>	
01JKKR*	+	+	+	
01DEEL@	B	B	B	B	Brctjd}tjd}tjd}tjd}|tjt||tjt||tjt||tjt|dS)Nr-r])	rrrr%rrrrr)ripv4netipv4addripv6netipv6addrs     r
testIpTypezIpaddrUnitTest.testIpTypes&y11'	22&{33'44.W

>>>.X???.W

>>>.X?????rc
|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjd	j|dtjd
j|dtjdj|dtjdj|dtjd
j|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj	|dtjdj|dtjdj	|dtj
dj|dtj
dj|dtj
dj|dtj
dj|dtj
dj|dtj
dj|dtj
dj|dtj
dj|dtj
dj|dtj
d	j|dtj
d
j|dtj
dj|dtj
dj|tj
dj	|
tj
dj	|dtj
dj|dtj
dj|dtj
dj|dtjdjdS)NTz224.1.1.1/31Fz	240.0.0.0z192.168.1.1/17z192.169.0.0z10.255.255.255z11.0.0.0z172.31.255.255z
172.32.0.0z169.254.1.0/24z169.254.100.200/24z169.255.100.200/24z127.100.200.254/32z
127.42.0.0/16z	128.0.0.0z
100.64.0.0/10z192.0.2.128/25z192.0.3.0/24r[z	224.1.1.1z	240.0.0.1z239.255.255.255192.168.1.1z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r%rris_multicastris_reserved
is_private
is_link_localis_loopback	is_globalris_unspecifiedrrr
s rtestReservedIpv4zIpaddrUnitTest.testReservedIpv4s\y5     ,	.	.	.	 4[ A A NOOOy3K@@LMMMy5  " "",	.	.	.	 4] C C NOOOy3  " "",	.	.	.	 4Z @ @ KLLL	 4Z @ @ LMMMy3  " "",	.	.	.	 4\ B B MNNN"-.>??M	O	O	O	
#02444A	C	C	C	
#02444A	C	C	C	
#.2444?	A	A	A	
y3 ! !!,	.	.	.	 4[ A A MNNN"-o>>I	K	K	K	 4_ E E OPPP"-.>??J	L	L	L"-n==G	I	I	I	
y3I>>MNNNy3K@@MNNN	 4[ A A NOOOy3K@@LMMM"-.?@@L	N	N	N	
y3MBBMNNN	 4] C C NOOOy3  " "",	.	.	.	 4Z @ @ KLLLy3  " "",	.	.	.	 4\ B B MNNN"-.?@@N	P	P	P"-.?@@N	P	P	P	
	,[99CDDD-m<<FGGG#./@AAM	O	O	Oy3LAAMNNN	 4[ A A MNNNy3I>>MNNNNNrc	|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjd	j|dtjd
j|dtjdj|dtjdj|dtjd
j|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdjdS)NFrz	1.0.0.0/8Tz	0.0.0.0/8z
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z
172.16.0.0/12z192.0.0.0/29z192.0.0.170/31rdz192.168.0.0/16z
198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32r'z::ff/128r::/128z
::ffff:0:0/96z100::/64z	2001::/23z2001:2::/48rz2001:10::/28zfc00::/7z	fe80::/10)r%rrrNr
s rtestPrivateNetworksz"IpaddrUnitTest.testPrivateNetworkss	 4[ A A LMMM	 4[ A A LMMMy3K@@KLLLy3LAALMMMy3MBBMNNNy34DEEPQQQy3ODDOPPPy3NCCNOOOy34DEEPQQQy3NCCNOOOy34DEEPQQQy3ODDOPPPy34EFFQRRRy34DEEPQQQy3MBBMNNNy34HIITUUU	 4V < < GHHH	 4Z @ @ KLLLy3I>>IJJJy3H==HIIIy3ODDOPPPy3J??JKKKy3K@@KLLLy3MBBMNNNy3ODDOPPPy3NCCNOOOy3J??JKKKy3K@@KLLLLLrc|dtjdj|dtjddzdz
j|dtjdj|dtjdj|dtjd	j|dtjd
j|dtjdj|dtjdj|dtjdj|dtjd
j|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj	|dtjdj	|dtjdj	|dtjdj|dtjdj
|dtjdj|dtjddzdz
j|dtjdj|dtjdj|dtjd	j|dtjd
j|dtjdj|dtjdj|dtjdj|dtjd
j|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj|dtjdj	|dtjdj	|dtjdj|dtjdjdS)NTzffff::rrr?zff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z
fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::zfbff:ffff::zfe00::zfea0::zfebf:ffff::zfe7f:ffff::zfec0::z	0:0::0:01z::1/127r{r"z0::0rz::/127z2001::1/128z
200::1/128z100::z4000::1/128)
r%rrrL
is_site_localrNrOrrPrRrQrrMr
s rtestReservedIpv6zIpaddrUnitTest.testReservedIpv6	s^y3H==JKKKy3AsFQJ??LMMMy3H==JKKK	 4X > > KLLLy3H==KLLLy3' ) ))6	8	8	8	 4!!+	-	-	-	 4X > > LMMMy3H==HIIIy3' ) ))3	5	5	5	 4] C C NOOO	 4X > > IJJJy3H==KLLLy3  ,	.	.	.	 4!!,	.	.	.	 4X > > LMMMy5kBBNOOO	 6y A A MNNN	 4T : : FGGG	 4U ; ; GHHHy3F;;JKKK	 4U ; ; JKKK	 4X > > MNNN"-m<<G	I	I	I"-l;;E	G	G	G	
y3H==JKKKy3AsFQJ??LMMMy3H==JKKK	 4X > > KLLLy3H==KLLLy3' ) ))6	8	8	8	 4!!+	-	-	-	 4X > > LMMMy3H==HIIIy3' ) ))3	5	5	5	 4] C C NOOO	 4X > > IJJJy3H==KLLLy3  ,	.	.	.	 4!!,	.	.	.	 4X > > LMMMy3K@@LMMMy3E::FGGG	 4U ; ; GHHHy3F;;JKKK	 4U ; ; JKKK	
y3G<<HIIIy3MBBNOOOOOrc\|tjdjtjd|tjdjd|tjdjtjddS)N::ffff:192.168.1.1rKz
::c0a8:101z::ffff:c0a8:101)r%rripv4_mappedr
s rtestIpv4MappedzIpaddrUnitTest.testIpv4Mapped]	s$%9::F$]33	5	5	5	
-l;;GNNN-.?@@L"-m<<	>	>	>	>	>rc|dtjdj|dtjdjdS)NTr[Fz::ffff:172.32.0.0)r%rrrNr
s rtestIpv4MappedPrivateCheckz)IpaddrUnitTest.testIpv4MappedPrivateChecke	sli*+?@@K	M	M	My+,?@@K	M	M	M	M	Mrc
"tjd}tjd}tjd}tjd}tjd}tjd}|t	t||tjdtjdg|tt
|||tt
|||tt
|||t||g|t	t||tjd	tjd
tjdtjdtjd
tjdtjdtjdgdS)N10.1.1.0/24z10.1.1.0/26z10.2.1.0/2410.1.1.0z2001:db8::0/32z10.1.1.5/32z10.1.1.64/26z
10.1.1.128/25z10.1.1.0/30z10.1.1.4/32z10.1.1.6/31z10.1.1.8/29z10.1.1.16/28z10.1.1.32/27)
rrrr%rrUaddress_excluder@rrArraddr2addr3addr4addr5addr6s       rtestAddrExcludezIpaddrUnitTest.testAddrExcludek	s$]33$]33$]33$Z00$%566$]33U%:%:5%A%A B BCC#.~>>#.??A	B	B	B	
*dE,A,A%,H,HIII)T5+@+@+G+GHHH)T5+@+@+G+GHHHe33E::;;R@@@U%:%:5%A%A B BCC#.}==#.}==#.}==#.}==#.~>>#.~>>#.~>>#.??A	B	B	B	B	Brc|ttjdttjd|ttjdttjd|ttjdttjd|ttjdttjt
tjdjtjd}tjd}i}d||j<d||j	<d||<d||<|
|j||
||dS)Nrarbr-r)r%hashrrrrr`rgr-r0r)rrXrYdummys    rtestHashzIpaddrUnitTest.testHash	si4]CCDDi4]CCDD	F	F	Fi2=AABBi2=AABB	D	D	Di2:>>??i2:>>??	A	A	A	
i29==>>i2	,Y77;<<>>??	@	@	@":.."5))#'d #'d c
c


d'///

c5!!!!!rc|j}|d|j|j}|t
|jddzdzdS)Nr)rrr?)r/r%
compressedr2r@r_string_from_ip_intrs  rtestIPBaseszIpaddrUnitTest.testIPBases	sSs~666*c&=q#vzJJJJJrc|j}|d|j|d|j|d|j|dt|dS)Nr+z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)r2r%with_prefixlenwith_netmask
with_hostmaskrKrs  rtestIPv6NetworkHelpersz%IpaddrUnitTest.testIPv6NetworkHelpers	s133EFFFD)	+	+	+D*	,	,	,13s88<<<<<rc|j}|d|j|d|j|d|j|dt|dS)Nr)z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r/r%rtrurvrKrs  rtestIPv4NetworkHelpersz%IpaddrUnitTest.testIPv4NetworkHelpers	sys'9:::0#2BCCC,c.?@@@s3xx00000rctjd}tj|}tjd}tj|}tjd}tjd}||||||||tj|||tj|dS)Nrarryrv)rrrrrr%rds       rtestCopyConstructorz"IpaddrUnitTest.testCopyConstructor	s$]33$U++&'DEE&u--%i00%&@AA&&&&&&	 5e < <===	 5e < <=====rc	0iddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$i}t|D]:\}}||tt	j|;dS)%Nz1:2:3:4:5:6:7:8z1:2:3:4:5:6:7:8/128z2001:0:0:4:0:0:0:8z2001:0:0:4::8/128z2001:0:0:4:5:6:7:8z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8z2001:0:3:4:5:6:7:8/128z0:0:3:0:0:0:0:ffffz0:0:3::ffff/128z0:0:0:4:0:0:0:ffffz::4:0:0:0:ffff/128z0:0:0:0:5:0:0:ffffz::5:0:0:ffff/128z1:0:0:4:0:0:7:8z1::4:0:0:7:8/128z0:0:0:0:0:0:0:0rUz0:0:0:0:0:0:0:0/0r'z0:0:0:0:0:0:0:1rz*2001:0658:022a:cafe:0000:0000:0000:0000/66rr]z
::102:304/128z1:2:3:4:5:ffff:1.2.3.4z1:2:3:4:5:ffff:102:304/128z::7:6:5:4:3:2:1z0:7:6:5:4:3:2:1/128z::7:6:5:4:3:2:0z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1::z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1::z0:6:5:4:3:2:1:0/128)rUitemsr%rKrr)rtest_addressesuncompressedrps    rtestCompressIPv6Addressz&IpaddrUnitTest.testCompressIPv6Address	sa4 "5
!"7
!":	

!"3
!"6

!"4
1
x
 
y
9$

%&B 
4!"
4#$
4%&
4'*)-^-A-A-C-C(D(D	 	 $L*ZY-D..**
 
 
 
 	 	 rctjd}tjd}tjd}tjd}|d|j|dtjdj|d|j|d	|j|d|jdS)
Nz2001::12001:0:5ef5:79fd:0:59d:a0e5:ba1rz
192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128rz'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)rrrrrr%exploded)rrrerfrgs     rtestExplodeShortHandIpStrz(IpaddrUnitTest.testExplodeShortHandIpStr	s'	22%&GHH%k22%o66F	)	)	)F"0;;D	F	F	F	
B	)	)	)E	)	)	)%.99999rctjd}tjd}|d|j|d|jdS)Nz	127.0.0.1rEz1.0.0.127.in-addr.arpazH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)rrrr%reverse_pointer)rrres   rtestReversePointerz!IpaddrUnitTest.testReversePointer	si%k22%m44153HIII2.	0	0	0	0	0rc|dt|j|dt|jdS)NrFrd)r%r`r-r0r
s rtestIntRepresentationz$IpaddrUnitTest.testIntRepresentation	sV3t'8#9#9:::?T.//	1	1	1	1	1rc|tjdjd|tjdjddS)Nr?rerf)r%rrrhrr
s rtestForceVersionzIpaddrUnitTest.testForceVersion	sP-a008!<<<.q1191=====rc||jjd||jjd||jjd||jjd||jjd||jjddS)Nr(z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255rz.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)r%r.rtrurvr1r
s rtestWithStarzIpaddrUnitTest.testWithStar	s,;\JJJ,90	2	2	2,:,	.	.	.	
,;6	8	8	8,9I	K	K	K	
,:I	K	K	K	K	Krc|d|jj|d|jj||jjtjd||jjtjd|d|jj|d|jj|d|j	j|d|j	j||j	j
tjd||jj
j
tjd||j	jtjd||j	jtjd||jj
jtjd||jj
jtjd|d|j	j|d|j	j|d|jj
j|d|jj
jdS)NrrMrz	0.0.0.255r^rr_)r	r/__dict__r%rrrrMrr2rarr1rr
s rtestNetworkElementCachingz(IpaddrUnitTest.testNetworkElementCaching
s,d.?.HIIIT%6%?@@@	
*<".{;;	=	=	=*3".{;;	=	=	=	


)4+<+EFFF

j$"3"<===	
,d.?.HIIIT%6%?@@@	
*:"./DEE	G	G	G,4D"./DEE	G	G	G	
/!"IJJ	L	L	L	
*3"./FGG	I	I	I'9!"IJJ	L	L	L	
,4="./FGG	I	I	I	


)4+<+EFFF

j$"3"<===

)4+>+F+OPPP

j$"5"="FGGGGGrctjd}tjd}d}|||ftj|jd}|tj|jd}|tj|jtjd}|tjdtjdf|jdS)	Nz
65.54.227.120z
192.0.2.45z'2001:0000:4136:e378:8000:63bf:3fff:fdd2z#2000::4136:e378:8000:63bf:3fff:fdd2z'2001:0001:4136:e378:8000:63bf:3fff:fdd2rz94.245.121.253z95.26.244.94)rrr%rteredorr)rserverclientteredo_addrbad_addrs     r
testTeredozIpaddrUnitTest.testTeredo0
s&77&|44?&&)"-k::A	C	C	C8-h77>???<-h77>??? +,MNN)/0@AA#/??A$+	-	-	-	-	-rctjd}tjd}|tjd|j||jdS)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)rrr%r	sixtofourr)r
sixtofouraddrrs   r
testsixtofourzIpaddrUnitTest.testsixtofourB
sl!,-@AA
'(;<<.??&0	2	2	2+,,,,,rctjd}tjd}|||dS)Nr-z2.3.4.5)rrr__hash__)r
ipv4_address1
ipv4_address2s   rtestV4HashIsNotConstantz&IpaddrUnitTest.testV4HashIsNotConstantJ
sV!/	::
!/	::
M2244m6L6L6N6NOOOOOrctjd}tjd}|||dS)Nr*z2001:658:22a:cafe:200:0:0:2)rrrr)r
ipv6_address1
ipv6_address2s   rtestV6HashIsNotConstantz&IpaddrUnitTest.testV6HashIsNotConstantP
sX!/0MNN
!/0MNN
M2244m6L6L6N6NOOOOOrN)Mr*r+r,r6r8r?rIrMrSr[rbrmrtrwr{rrrrrrrrrrrrrrrrrrrrrrrrrrrrr r#r%r-r/r4r9r;r=r@rCrIrSrVrYr]r_rjrnrrrwryr{rrrrrrrrrrrr0rrr&r&%sYYY EEEDEDEDEN@C@C@CF@@@555OOO222"0000 555"""AAAVVV,,,BBBKKK
000"
0
0
0KKK*4G4G4GlKKK.
T
T
T---------,,,(@@@KKK@@@///"666	U	U	U	2	2	2#:#:#:J575757n???333'''`*`*`*DGFGFGFR;;;K@K@K@ZU6U6U6nMMM
111222HHH*>>>
HHH
BBB,@@@GOGOGORMMMBKPKPKPZ>>>MMMBBB0"""*KKK===111>>>   4::: 000111
>>>KKK (H(H(HT---$---PPPPPPPPrr&__main__)rr?unittestr9r.rBrJrrtest.supportrrTestCaserr2rTryrrrCrrrrrrrr&r*mainr0rr<module>rs%$				



********3?3?3?3?3?8$3?3?3?l''''''''2........b/"/"/"/"/"/"/"/"bm/m/m/m/m/'9m/m/m/`x4x4x4x4x4'9x4x4x4vV&V&V&V&V&,V&V&V&r&&&&&<)<&&&3636363636':363636lf1f1f1f1f1,f1f1f1R&&&&&<)<&&&,0,0,0,0,0':,0,0,0^AAAAALAAA&rArArArArAh'rArArAjnPnPnPnPnPX&nPnPnPb1zHMOOOOOr