HEX
Server: Apache/2.4.62 (Unix) OpenSSL/1.1.1k
System: Linux ns565604.ip-54-39-133.net 4.18.0-553.50.1.el8_10.x86_64 #1 SMP Tue Apr 15 08:09:22 EDT 2025 x86_64
User: greer489 (1034)
PHP: 8.3.19
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/DNS/__pycache__/Lib.cpython-36.pyc
3

V[�c�@s�dZddlZddlZddlmZddlmZddlmZddlmZddlZddl	m
Z
yddlZWnek
r�ddl
ZYnXd	Zd
ZGdd�de
�ZGd
d�de
�ZddlmZddlmZddlmZmZmZmZdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z dd�Z!d d!�Z"Gd"d#�d#�Z#Gd$d%�d%�Z$d&d'�Z%Gd(d)�d)e#�Z&d*d+�Z'Gd,d-�d-e$�Z(Gd.d/�d/e(�Z)Gd0d1�d1e)�Z*Gd2d3�d3e)�Z+Gd4d5�d5e$�Z,Gd6d7�d7e#�Z-Gd8d9�d9e$�Z.Gd:d;�d;e#�Z/Gd<d=�d=e$�Z0Gd>d?�d?e&e/e-�Z1Gd@dA�dAe(e0e.�Z2GdBdC�dCe)e0e.�Z3GdDdE�dEe*e0e.�Z4GdFdG�dGe,e0e.�Z5GdHdI�dIe+e0e.�Z6dJdK�Z7GdLdM�dM�Z8dNdO�Z9dPdQ�Z:e;dRk�r�e%�dS)Su@
 $Id$

 This file is part of the py3dns project.
 Homepage: https://launchpad.net/py3dns

 This code is covered by the standard Python License. See LICENSE for details.

Changes for Python3 port © 2011-13 Scott Kitterman <scott@kitterman.com>

 Library code. Largely this is packers and unpackers for various types.
�N�)�Type)�Class)�Opcode)�Status)�DNSErrorFZidnac@seZdZdS)�UnpackErrorN)�__name__�
__module__�__qualname__�rr�/usr/lib/python3.6/Lib.pyr/src@seZdZdS)�	PackErrorN)r	r
rrrrr
r0sr)�pack)�unpack)�	inet_ntoa�	inet_aton�	inet_ntop�AF_INET6cCs
td|�S)Nz!H)�struct_pack)�nrrr
�	pack16bit8srcCs
td|�S)Nz!L)r)rrrr
�	pack32bit;srcCstd|�dS)Nz!Hr)�
struct_unpack)�srrr
�unpack16bit>srcCstd|�dS)Nz!Lr)r)rrrr
�unpack32bitAsrcCstdt|��dS)aDConvert a string IPv4 address into an unsigned integer.

    Examples::
    >>> addr2bin('127.0.0.1')
    2130706433

    >>> addr2bin('127.0.0.1') == socket.INADDR_LOOPBACK
    1

    >>> addr2bin('255.255.255.254')
    4294967294L

    >>> addr2bin('192.168.0.1')
    3232235521L

    Unlike old DNS.addr2bin, the n, n.n, and n.n.n forms for IP addresses
    are handled as well::
    >>> addr2bin('10.65536')
    167837696
    >>> 10 * (2 ** 24) + 65536
    167837696

    >>> addr2bin('10.93.512')
    173867520
    >>> 10 * (2 ** 24) + 93 * (2 ** 16) + 512
    173867520
    z!Lr)rr)�addrrrr
�addr2binDsrcCsttd|��S)Nz!L)rr)rrrr
�bin2addrcsrcCs
tt|�S)N)rr)rrrr
�	bin2addr6fsr cCstd|�\}}|d>|BS)Nz!QQ�@)r)�str�h�lrrr
�	bin2long6isr%c@s`eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�PackerzE packer base class. supports basic byte/16bit/32bit/addr/string/name cCs(tjrd}ntj}td|�|_i|_dS)N�utf8�)�DNS�
LABEL_UTF8�LABEL_ENCODING�bytes�buf�index)�self�encrrr
�__init__rs
zPacker.__init__cCs|jS)N)r-)r/rrr
�getbufysz
Packer.getbufcCs<t|�dkrtd��tjr d}ntj}|jt||�|_dS)Nrzone character expectedr')�len�	TypeErrorr)r*r+r-r,)r/�cr0rrr
�addbyte{szPacker.addbytecCs(tjrd}ntj}|jt||�|_dS)Nr')r)r*r+r-r,)r/Zabytesr0rrr
�addbytes�szPacker.addbytescCs|jtt|��|_dS)N)r-r,r)r/rrrr
�add16bit�szPacker.add16bitcCs|jtt|��|_dS)N)r-r,r)r/rrrr
�add32bit�szPacker.add32bitcCs t|�}|jtt|��|_dS)N)rr-r,r)r/rrrrr
�addaddr�szPacker.addaddrcCs@t|�dkr tddt|���|jtt|���|j|�dS)N�zCan't encode string of length z
%s (> 255))r3�
ValueErrorr6�chrr7)r/rrrr
�	addstring�s
zPacker.addstringcCs�g}x"|jd�D]}|sq|j|�qWg}xZtt|��D]>}dj||d��}|j�}|j|�||jkr:|j|}Pq:Wt|�}d}t|j�}g}	tj	r�d}
ntj
}
td|
�}x�t|�D]�}||}y|j|
�}Wn<t
k
�rtj	s�|jd��sd|}|j|
�}YnXt|�}
|
dk�r.td��|t|�dk�r\|	j|||t|�f�ntd�td	�|t|
g�|}q�W|�r�|t|d
B�}n|td|
�}|j||_x|	D]\}}||j|<�q�WdS)N�.r'r(u�?zlabel too longi�?zDNS.Lib.Packer.addname:zwarning: pointer too bigi��)�split�append�ranger3�join�upperr.r-r)r*r+r,�encode�UnicodeEncodeError�
startswithr�printr)r/�nameZnlistZlabel�keys�i�key�pointer�offsetr.r0r-�jr�valuerrr
�addname�sZ





zPacker.addnamecCst|jj��}|j�tdd�x"|D]}td||j|f�q(Wtdd�d}x�tdt|j�dd�D]�}|j||d�dkr�|s�t�d}qnd}td|�xP|j||d�D]:}d	|ko�d
knr�td|�q�tdt|��q�Wt�qnWtdd�dS)
N�-�(z%20s %3drr�z**z%4d� �z %cz%2d)	�listr.rL�sortrJrDr3r-�ord)r/rLrNZspacerMr5rrr
�dump�s*

zPacker.dumpN)r	r
r�__doc__r1r2r6r7r8r9r:r>rSr\rrrr
r&ps8r&c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�UnpackercCs||_d|_dS)Nr)r-rP)r/r-rrr
r1�szUnpacker.__init__cCs4|jt|j�krtd��|j|j}|jd|_|S)NzRan off end of datar)rPr3r-r)r/r5rrr
�getbyte�s
zUnpacker.getbytecCs:|j|j|j|�}t|�|kr*td��|j||_|S)Nznot enough data left)r-rPr3r)r/rrrrr
�getbytes�s
zUnpacker.getbytescCst|jd��S)NrV)rr`)r/rrr
�get16bit�szUnpacker.get16bitcCst|jd��S)N�)rr`)r/rrr
�get32bit�szUnpacker.get32bitcCs$tjrd}ntj}tt|j��|�S)Nr')r)r*r+r,rrc)r/r0rrr
�getaddr�szUnpacker.getaddrcCs
|jd�S)N�)r`)r/rrr
�getaddr6szUnpacker.getaddr6cCs|j|j��S)N)r`r_)r/rrr
�	getstringszUnpacker.getstringc	Cs�|j�}|rZ|d@dkrZ|j�}|}|d>|Bd@}|j}z||_|j�}Wd||_X|S|dkrfdStjrrd}ntj}t|j|�|�}|j�}|s�|S|d|SdS)	N��i�rr(r'r?i�?��)r_rP�getnamer)r*r+r"r`)	r/rM�drQrOZsave_offsetZdomainr0Zremainsrrr
rjs*zUnpacker.getnameN)r	r
rr1r_r`rarcrdrfrgrjrrrr
r^�sr^c
Cs�d}tt|��}ddl}|j�xp|D]h}t�}|jd�|jd�|jd�|jd�|jd�|jd�|jd
�|jdd�|jd�q&W|j�t	|j
�d
�t	t|j
�|d�d�t|j
�}|j�|jd�|j�|jd�|j�|jd	�|j�|jd�|j�|j�xZ|D]R}t|j
�}|j�|jd�|j�|jd�|j�|jd	�|j�|jd�|j�f	}�q(W|j�t	|j
�d�t	t|j
�|d�d�dS)Ni�	rz192.168.0.1�*�z
f.ISI.ARPArizFoo.F.isi.arpa�Zarpa�r(zms total for packingrbzms per packingzms total for unpackingzms per unpackingz********************z********z******************)rYrD�timing�startr&r:r7rSZfinishrJZmilli�roundr^r-rdr`rj)�N�RrprM�p�u�resrrr
�
testpacker$sV














rxc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!S)"�RRpackercCstj|�d|_dS)N)r&r1�rdstart)r/rrr
r1Ys
zRRpacker.__init__cGsh|j|�|j|�|j|�|j|�|rJ|dd�r@td��|d}nd}|j|�t|j�|_dS)Nrz
too many argsr)rSr8r9r4r3r-rz)r/rKZRRtype�klass�ttl�rest�rdlengthrrr
�addRRheader\s





zRRpacker.addRRheadercCs�t|j|jd|j��}|t|j�|jkr2dS|j|jd�}|j}d}z8|jd|jd�|_|jt|��|j||_d}Wd|s�||_XdS)NrVrr)rr-rzr3r8)r/r~ZrdataZsave_buf�okrrr
�
patchrdlengthhszRRpacker.patchrdlengthcCs|jdk	r|j�d|_dS)N)rzr�)r/rrr
�endRRvs
zRRpacker.endRRcCs|jdk	r|j�tj|�S)N)rzr�r&r2)r/rrr
r2zs
zRRpacker.getbufcCs(|j|tj||�|j|�|j�dS)N)rrZCNAMErSr�)r/rKr{r|Zcnamerrr
�addCNAME~s
zRRpacker.addCNAMEcCs2|j|tj||�|j|�|j|�|j�dS)N)rrZHINFOr>r�)r/rKr{r|Zcpu�osrrr
�addHINFO�s

zRRpacker.addHINFOcCs2|j|tj||�|j|�|j|�|j�dS)N)rrZMXr8rSr�)r/rKr{r|Z
preferenceZexchangerrr
�addMX�s

zRRpacker.addMXcCs(|j|tj||�|j|�|j�dS)N)rrZNSrSr�)r/rKr{r|Znsdnamerrr
�addNS�s
zRRpacker.addNScCs(|j|tj||�|j|�|j�dS)N)rrZPTRrSr�)r/rKr{r|Zptrdnamerrr
�addPTR�s
zRRpacker.addPTRcCsd|j|tj||�|j|�|j|�|j|�|j|�|j|�|j|	�|j|
�|j�dS)N)rrZSOArSr9r�)r/rKr{r|�mnameZrname�serialZrefresh�retry�expire�minimumrrr
�addSOA�s






zRRpacker.addSOAcCsT|j|tj||�t|�tks*t|�tkr0|g}x|D]}|j|�q6W|j�dS)N)rr�TXT�typer,r"r>r�)r/rKr{r|�tlist�txtdatarrr
�addTXT�s
zRRpacker.addTXTcCsT|j|tj||�t|�tks*t|�tkr0|g}x|D]}|j|�q6W|j�dS)N)rrr�r�r,r"r>r�)r/rKr{r|r�r�rrr
�addSPF�s
zRRpacker.addSPFcCs(|j|tj||�|j|�|j�dS)N)rr�Ar:r�)r/rKr{r|�addressrrr
�addA�s
z
RRpacker.addAcCsB|j|tjtj|�|j|�|jt|��|j|�|j	�dS)N)
rrZWKSr�INr:r6r=r7r�)r/rKr|r��protocol�bitmaprrr
�addWKS�s


zRRpacker.addWKScCst�dS)N)�NotImplementedError)r/rrr
�addSRV�szRRpacker.addSRVN)r	r
rr1rr�r�r2r�r�r�r�r�r�r�r�r�r�r�rrrr
ryXs rycCsp|dkr|d|fS|dkr,|d|dfS|dkrD|d|dfS|dkr\|d|dfS|d	|dfSdS)
N�<z
%d secondsiz
%d minutesi�Qz%d hoursi�:	z%d daysz%d weeksr)Zsecondsrrr
�
prettyTime�sr�c@sxeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZeZ
dd�Zdd�Zdd�ZdS)�
RRunpackercCstj||�d|_dS)N)r^r1�rdend)r/r-rrr
r1�szRRunpacker.__init__cCsB|j�}|j�}|j�}|j�}|j�}|j||_|||||fS)N)rjrarcrPr�)r/rK�rrtyper{r|r~rrr
�getRRheader�szRRunpacker.getRRheadercCs|j|jkrtd��dS)Nzend of RR not reached)rPr�r)r/rrr
r��szRRunpacker.endRRcCs|j�S)N)rj)r/rrr
�getCNAMEdata�szRRunpacker.getCNAMEdatacCs.tjrd}ntj}t|j�|�t|j�|�fS)Nr')r)r*r+r"rg)r/r0rrr
�getHINFOdata�szRRunpacker.getHINFOdatacCs|j�|j�fS)N)rarj)r/rrr
�	getMXdata�szRRunpacker.getMXdatacCs|j�S)N)rj)r/rrr
�	getNSdata�szRRunpacker.getNSdatacCs|j�S)N)rj)r/rrr
�
getPTRdata�szRRunpacker.getPTRdatac	CsT|j�|j�d|j�fdt|j��dt|j��d	t|j��d
t|j��fS)Nr��refresh r�r�r�)r�)r�)r�)r�)r�)rjrcr�)r/rrr
�
getSOAdata�szRRunpacker.getSOAdatacCs,g}x"|j|jkr&|jt|j���qW|S)N)rPr�rCr,rg)r/r�rrr
�
getTXTdata�szRRunpacker.getTXTdatacCs tjrd}ntj}|j�j|�S)Nr')r)r*r+rd�decode)r/r0rrr
�getAdata�szRRunpacker.getAdatacCs0|j�}t|j��}|j|j|j�}|||fS)N)rdr[r_r`r�rP)r/r�r�r�rrr
�
getWKSdata�szRRunpacker.getWKSdatacCs,|j�}|j�}|j�}|j�}||||fS)zP
        _Service._Proto.Name TTL Class SRV Priority Weight Port Target
        )rarj)r/ZpriorityZweightZport�targetrrr
�
getSRVdata�s
zRRunpacker.getSRVdataN)r	r
rr1r�r�r�r�r�r�r�r�r��
getSPFdatar�r�r�rrrr
r��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�RRunpackerDefaultcCstj||�d|_dS)N)r�r1r�)r/r-rrr
r1
szRRunpackerDefault.__init__cCs:tjrd}ntj}tj|j�j|��}tjt	d|�d�S)Nr'z!Ir)
r)r*r+�socketrrdr��	ipaddressZIPv4Addressr)r/r0�xrrr
r�
s
zRRunpackerDefault.getAdatacCstjt|j���S)N)r�ZIPv6Addressr rf)r/rrr
�getAAAAdataszRRunpackerDefault.getAAAAdataN)r	r
rr1r�r�rrrr
r�sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�RRunpackerTextcCstj||�dS)N)r�r1)r/r-rrr
r1szRRunpackerText.__init__cCs tjrd}ntj}|j�j|�S)Nr')r)r*r+rdr�)r/r0rrr
r�szRRunpackerText.getAdatacCst|j��S)N)r rf)r/rrr
r� szRRunpackerText.getAAAAdatacCs@tjrd}ntj}g}x$|j|jkr:|jt|j�|��qW|S)Nr')r)r*r+rPr�rCr"rg)r/r0r�rrr
r�"szRRunpackerText.getTXTdataN)r	r
rr1r�r�r�rrrr
r�sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�RRunpackerIntegercCstj||�dS)N)r�r1)r/r-rrr
r1-szRRunpackerInteger.__init__cCs4tjrd}ntj}tj|j�j|��}td|�dS)Nr'z!Ir)r)r*r+r�rrdr�r)r/r0r�rrr
r�/s
zRRunpackerInteger.getAdatacCst|j��S)N)r%rf)r/rrr
r�6szRRunpackerInteger.getAAAAdataN)r	r
rr1r�r�rrrr
r�,sr�c@s0eZdZdd�Zdd�Zdd�Zdd�ZeZd	S)
�RRunpackerBinarycCstj||�d|_dS)N)r^r1r�)r/r-rrr
r1:szRRunpackerBinary.__init__cCsH|j�}|j�}|j�}|j�}|j�}||_|j||_|||||fS)N)rjrarcr~rPr�)r/rKr�r{r|r~rrr
r�=szRRunpackerBinary.getRRheadercCs|j|jkrtd��dS)Nzend of RR not reached)rPr�r)r/rrr
r�FszRRunpackerBinary.endRRcCs,g}x"|j|jkr&|j|j|j��qW|S)N)rPr�rCr`r~)r/r�rrr
r�IszRRunpackerBinary.getTXTdataN)r	r
rr1r�r�r�r�rrrr
r�9s
	r�c@seZdZdd�ZdS)�HpackercCs�|j|�|j|d@d>|d@d>B|d@d>B|d@d>B|d@d>B|d@d>B|d@d>B|	d@B�|j|
�|j|�|j|�|j|
�dS)	Nr���
�	ri�rb)r8)r/�id�qr�opcode�aa�tc�rd�ra�z�rcode�qdcount�ancount�nscount�arcountrrr
�	addHeaderSs
^


zHpacker.addHeaderN)r	r
rr�rrrr
r�Rsr�c@seZdZdd�ZdS)�	Hunpackerc
Cs�|j�}|j�}|d?d@|d?d@|d?d@|d?d@|d?d@|d?d@|d?d@|d	?d@f\}}}}}}}	}
|j�}|j�}|j�}
|j�}||||||||	|
|||
|f
S)
Nr�rr�r�r�rir�rbr)ra)r/r��flagsr�r�r�r�r�r�r�r�r�r�r�r�rrr
�	getHeader_s 






zHunpacker.getHeaderN)r	r
rr�rrrr
r�^sr�c@seZdZdd�ZdS)�QpackercCs"|j|�|j|�|j|�dS)N)rSr8)r/�qname�qtype�qclassrrr
�addQuestionvs

zQpacker.addQuestionN)r	r
rr�rrrr
r�usr�c@seZdZdd�ZdS)�	QunpackercCs|j�|j�|j�fS)N)rjra)r/rrr
�getQuestion|szQunpacker.getQuestionN)r	r
rr�rrrr
r�{sr�c@seZdZdS)�MpackerN)r	r
rrrrr
r��sr�c@seZdZdS)�	MunpackerN)r	r
rrrrr
r��sr�c@seZdZdS)�MunpackerDefaultN)r	r
rrrrr
r��sr�c@seZdZdS)�
MunpackerTextN)r	r
rrrrr
r��sr�c@seZdZdS)�MunpackerBinaryN)r	r
rrrrr
r��sr�c@seZdZdS)�MunpackerIntegerN)r	r
rrrrr
r��sr�c
Cstd�|j�\
}}}}}}}}}	}
}}}
td|�td||||||||	f�|r^td�|	rntd|	�td|
|||
f�x$t|
�D]}td|�t|�q�Wx$t|�D]}td|�t|�q�Wx$t|�D]}td	|�t|�q�Wx$t|
�D]}td
|�t|�q�WdS)NzHEADER:zid=%d,z=qr=%d, opcode=%d, aa=%d, tc=%d, rd=%d, ra=%d, z=%d, rcode=%d,z*** response truncated! ***z *** nonzero error code! (%d) ***z0  qdcount=%d, ancount=%d, nscount=%d, arcount=%dzQUESTION %d:z
ANSWER %d:zAUTHORITY RECORD %d:zADDITIONAL RECORD %d:)rJr�rD�dumpQ�dumpRR)rvr�r�r�r�r�r�r�r�r�r�r�r�r�rMrrr
�dumpM�s."r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�	DnsResultcCs2i|_g|_g|_g|_g|_||_|j|�dS)N)�header�	questions�answers�	authority�
additional�args�storeM)r/rvr�rrr
r1�szDnsResult.__init__cCsddl}td|jd|jdf�d}|jdr:|d}|j}td|�td	�td
|d|d|d
f�tt|fdd�d+��}tddj|�|d|d|d|df�td�x,|jD]"}td|d|d|df�q�Wt�td�x8|jD].}td |dt	|d!�|d"|d#f��qWt�td$�x8|j
D].}td |dt	|d!�|d"|d#f��qHWt�td%�x8|jD].}td |dt	|d!�|d"|d#f��q�Wt�d&|jk�r�td'|jd&�td(|jd)�td*|j|j���dS),Nrz; <<>> PDG.py 1.0 <<>> %s %srKr�r(r�zrecurs z;; options: z;; got answer:z+;; ->>HEADER<<- opcode %s, status %s, id %dr��statusr�cSs||S)Nr)r�r#rrr
�<lambda>�sz DnsResult.show.<locals>.<lambda>r�r�r�r�z4;; flags: %s; Ques: %d, Ans: %d, Auth: %d, Addit: %drWr�r�r�r�z
;; QUESTIONS:z!;;      %s, type = %s, class = %sr��qtypestr�	qclassstrz;; ANSWERS:z%-20s    %-6s  %-6s  %sr|�typename�dataz;; AUTHORITY RECORDS:z;; ADDITIONAL RECORDS:�elapsedz;; Total query time: %d msecz;; To SERVER: %sZserverz;; WHEN: %s)r�r�r�r�r�)
�timerJr�r�rY�filterrEr�r��reprr�r�Zctime)r/r��optr#r��q�arrr
�show�sN
zDnsResult.showcCsL|j�\
|jd<|jd<|jd<|jd<|jd<|jd<|jd<|jd<|jd	<|jd
<|jd<|jd<|jd
<tj|jd�|jd<tj|jd	�|jd<x(t|jd
�D]}|jj|j	|��q�Wx(t|jd�D]}|j
j|j|��q�Wx*t|jd�D]}|jj|j|���qWx*t|jd
�D]}|j
j|j|���q,WdS)Nr�r�r�r�r�r�r�r�r�r�r�r�r��	opcodestrr�)r�r�rr�rZ	statusstrrDr�rC�storeQr��storeRRr�r�)r/rvrMrrr
r��spzDnsResult.storeMcCsFi}|j�\|d<|d<|d<tj|d�|d<tj|d�|d<|S)Nr�r�r�r�r�)r�r�typestrr�classstr)r/rvr�rrr
r��s
zDnsResult.storeQcCs�i}|j�\|d<|d<|d<|d<|d<tj|d�|d<tj|d�|d<d|d}t||�rvt||��|d	<n|j|d�|d	<|S)
NrKr��classr|r~r�r�z	get%sdatar�)r�rr�rr��hasattr�getattrr`)r/rv�rr�rrr
r�s&
zDnsResult.storeRRN)r	r
rr1r�r�r�r�rrrr
r��s
	)r�cCs4|j�\}}}td||tj|�|tj|�f�dS)Nz%qname=%s, qtype=%d(%s), qclass=%d(%s))r�rJrr�rr�)rvr�r�r�rrr
r�s

r�cCst|j�\}}}}}tj|�}td||||tj|�|f�d|}t||�r`tdt||���ntd|j|��dS)Nz*name=%s, type=%d(%s), class=%d(%s), ttl=%dz	get%sdataz  formatted rdata:z  binary rdata:)	r�rr�rJrr�r�r�r`)rvrKr�r{r|r~r�r�rrr
r�s



r��__main__)<r]�typesr�r(rrrrr)ZBaserr��ImportErrorZipaddrr*r+rr�structrrrrrrrrrrrrrrr r%r&r^rxryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	rrrr
�<module>
sjx<4cA
a