3 �L�j�]�@s dZddlZdZddddg\ZZZZeZe Z Gdd �d e �Z d d �Z d d �Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdZZy�ddlZddlZddlZdgZejjd�s�ejd�xLeD]DZyej ej!j"e��Z#Wne$k r�w�YnXe%e#d�r�e#j&ZPq�W[ejd k�r@eej'�j(j)d!�d�d"k�r@dZy ej*j+Z#WndZ#YnXe,e#d#e,e#d$d��ZWn YnXd%d&�Z-d'd(�Z.d)d*�Z/da0e.eegZ1e-eeeeegZ2d+d,�Z3da4d9d-d.�Z5d/d0�Z6d1d2�Z7d3d4�Z8e d5�Z9e d6�Z:e d7�Z;e d8�Z>> import uuid # make a UUID based on the host ID and current time >>> uuid.uuid1() # doctest: +SKIP UUID('a8098c1a-f86e-11da-bd1a-00112444be1e') # make a UUID using an MD5 hash of a namespace UUID and a name >>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e') # make a random UUID >>> uuid.uuid4() # doctest: +SKIP UUID('16fd2706-8baf-433b-82eb-8c7fada847da') # make a UUID using a SHA-1 hash of a namespace UUID and a name >>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d') # make a UUID from a string of hex digits (braces and hyphens ignored) >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}') # convert a UUID to a string of hex digits in standard form >>> str(x) '00010203-0405-0607-0809-0a0b0c0d0e0f' # get the raw 16 bytes of the UUID >>> x.bytes b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' # make a UUID from a 16-byte string >>> uuid.UUID(bytes=x.bytes) UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') �NzKa-Ping Yee zreserved for NCS compatibilityzspecified in RFC 4122z$reserved for Microsoft compatibilityzreserved for future definitionc@seZdZdZd7dd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zedd��Zedd��Zedd��Zedd ��Zed!d"��Zed#d$��Zed%d&��Zed'd(��Zed)d*��Zed+d,��Zed-d.��Zed/d0��Zed1d2��Zed3d4��Zed5d6��ZdS)8�UUIDa�Instances of the UUID class represent UUIDs as specified in RFC 4122. UUID objects are immutable, hashable, and usable as dictionary keys. Converting a UUID to a string with str() yields something in the form '12345678-1234-1234-1234-123456789abc'. The UUID constructor accepts five possible forms: a similar string of hexadecimal digits, or a tuple of six integer fields (with 32-bit, 16-bit, 16-bit, 8-bit, 8-bit, and 48-bit values respectively) as an argument named 'fields', or a string of 16 bytes (with all the integer fields in big-endian order) as an argument named 'bytes', or a string of 16 bytes (with the first three fields in little-endian order) as an argument named 'bytes_le', or a single 128-bit integer as an argument named 'int'. UUIDs have these read-only attributes: bytes the UUID as a 16-byte string (containing the six integer fields in big-endian byte order) bytes_le the UUID as a 16-byte string (with time_low, time_mid, and time_hi_version in little-endian byte order) fields a tuple of the six integer fields of the UUID, which are also available as six individual attributes and two derived attributes: time_low the first 32 bits of the UUID time_mid the next 16 bits of the UUID time_hi_version the next 16 bits of the UUID clock_seq_hi_variant the next 8 bits of the UUID clock_seq_low the next 8 bits of the UUID node the last 48 bits of the UUID time the 60-bit timestamp clock_seq the 14-bit sequence number hex the UUID as a 32-character hexadecimal string int the UUID as a 128-bit integer urn the UUID as a URN as specified in RFC 4122 variant the UUID variant (one of the constants RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, or RESERVED_FUTURE) version the UUID version number (1 through 5, meaningful only when the variant is RFC_4122) NcCs�|||||gjd�dkr td��|dk rl|jdd�jdd�}|jd�jdd�}t|�d krbtd ��t|d �}|dk r�t|�d kr�td ��|d(dd)�|d*d+d,�|d-d.d/�|dd�}|dk �r�t|�d kr�td��tj|dd�}|dk �r"t|�dk�r td��|\}}} } } } d|k�o.d0kn�s>td��d|k�oRd1kn�sbtd��d| k�ovd2kn�s�td��d| k�o�d3kn�s�td��d| k�o�d4kn�s�td��d| k�o�d5kn�s�td��| d>| B} |d>|d>B| d>B| d>B| B}|dk �rTd|k�oDd d>kn�sTtd ��|dk �r�d |k�ord!kn�s�td"��|d7M}|d8O}|d:M}||d&>O}||jd'<dS);amCreate a UUID from either a string of 32 hexadecimal digits, a string of 16 bytes as the 'bytes' argument, a string of 16 bytes in little-endian order as the 'bytes_le' argument, a tuple of six integers (32-bit time_low, 16-bit time_mid, 16-bit time_hi_version, 8-bit clock_seq_hi_variant, 8-bit clock_seq_low, 48-bit node) as the 'fields' argument, or a single 128-bit integer as the 'int' argument. When a string of hex digits is given, curly braces, hyphens, and a URN prefix are all optional. For example, these expressions all yield the same UUID: UUID('{12345678-1234-5678-1234-567812345678}') UUID('12345678123456781234567812345678') UUID('urn:uuid:12345678-1234-5678-1234-567812345678') UUID(bytes='\x12\x34\x56\x78'*4) UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' + '\x12\x34\x56\x78\x12\x34\x56\x78') UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678)) UUID(int=0x12345678123456781234567812345678) Exactly one of 'hex', 'bytes', 'bytes_le', 'fields', or 'int' must be given. The 'version' argument is optional; if given, the resulting UUID will have its variant and version set according to RFC 4122, overriding the given 'hex', 'bytes', 'bytes_le', 'fields', or 'int'. N�zGone of the hex, bytes, bytes_le, fields, or int arguments must be givenzurn:�zuuid:z{}�-� z$badly formed hexadecimal UUID string�z bytes_le is not a 16-char string���zbytes is not a 16-char string�big)� byteorderzfields is not a 6-tuplerz*field 1 out of range (need a 32-bit value)z*field 2 out of range (need a 16-bit value)z*field 3 out of range (need a 16-bit value)z*field 4 out of range (need an 8-bit value)z*field 5 out of range (need an 8-bit value)�0z*field 6 out of range (need a 48-bit value)�`�P�@�z*int is out of range (need a 128-bit value)�zillegal version numberi�i�i��L�int������rrr�rrlii�rll l���� lll����) �count� TypeError�replace�strip�len� ValueError�int_� from_bytes�__dict__)�self�hex�bytes�bytes_le�fieldsr�version�time_low�time_mid�time_hi_version�clock_seq_hi_variant� clock_seq_low�node� clock_seq�r/�/usr/lib64/python3.6/uuid.py�__init__jsZ   6    $    z UUID.__init__cCst|t�r|j|jkStS)N)� isinstancerr�NotImplemented)r"�otherr/r/r0�__eq__�s  z UUID.__eq__cCst|t�r|j|jkStS)N)r2rrr3)r"r4r/r/r0�__lt__�s  z UUID.__lt__cCst|t�r|j|jkStS)N)r2rrr3)r"r4r/r/r0�__gt__�s  z UUID.__gt__cCst|t�r|j|jkStS)N)r2rrr3)r"r4r/r/r0�__le__�s  z UUID.__le__cCst|t�r|j|jkStS)N)r2rrr3)r"r4r/r/r0�__ge__�s  z UUID.__ge__cCs t|j�S)N)�hashr)r"r/r/r0�__hash__�sz UUID.__hash__cCs|jS)N)r)r"r/r/r0�__int__�sz UUID.__int__cCsd|jjt|�fS)Nz%s(%r))� __class__�__name__�str)r"r/r/r0�__repr__�sz UUID.__repr__cCs td��dS)NzUUID objects are immutable)r)r"�name�valuer/r/r0� __setattr__�szUUID.__setattr__cCsDd|j}d|dd�|dd�|dd�|dd�|dd�fS)Nz%032xz%s-%s-%s-%s-%sr � r�)r)r"r#r/r/r0�__str__�s z UUID.__str__cCs|jjdd�S)Nrr )r�to_bytes)r"r/r/r0r$�sz UUID.bytescCs<|j}|ddd�|ddd �|d d d �|dd�S) Nrrr r rrrrrrrr)r$)r"r$r/r/r0r%�s(z UUID.bytes_lecCs|j|j|j|j|j|jfS)N)r(r)r*r+r,r-)r"r/r/r0r&�s z UUID.fieldscCs |jd?S)Nr)r)r"r/r/r0r(�sz UUID.time_lowcCs|jd?d@S)Nri��)r)r"r/r/r0r)�sz UUID.time_midcCs|jd?d@S)Nri��)r)r"r/r/r0r*�szUUID.time_hi_versioncCs|jd?d@S)N�8��)r)r"r/r/r0r+szUUID.clock_seq_hi_variantcCs|jd?d@S)Nr rI)r)r"r/r/r0r,szUUID.clock_seq_lowcCs|jd@d>|jd>B|jBS)Ni�r r)r*r)r()r"r/r/r0�time sz UUID.timecCs|jd@d>|jBS)N�?r )r+r,)r"r/r/r0r.s zUUID.clock_seqcCs |jd@S)Nl���)r)r"r/r/r0r-sz UUID.nodecCs d|jS)Nz%032x)r)r"r/r/r0r#szUUID.hexcCs dt|�S)Nz urn:uuid:)r?)r"r/r/r0�urnszUUID.urncCs2|jd@stS|jd@stS|jd@s*tStSdS)Ni�r i@i lll)r� RESERVED_NCS�RFC_4122�RESERVED_MICROSOFT�RESERVED_FUTURE)r"r/r/r0�variant s   z UUID.variantcCs |jtkrt|jd?d@�SdS)Nr�)rQrNr)r"r/r/r0r'+s z UUID.version)NNNNNN)r>� __module__� __qualname__�__doc__r1r5r6r7r8r9r;r<r@rCrF�propertyr$r%r&r(r)r*r+r,rJr.r-r#rLrQr'r/r/r/r0r:s8. O              rc Gs�ddl}ddl}ddl}|j|�}|dkrP|jjd�}|j||d�}|dkrPdSt|j�}d|d<|j|f||j |j |d�}|S) Nr�/sbin� /usr/sbin)�path�C�LC_ALL)�stdout�stderr�env)rWrX) �os�shutil� subprocessZwhich�pathsep�join�dict�environ�Popen�PIPEZDEVNULL) �command�argsr_r`ra� executablerYr^�procr/r/r0�_popen1s    rlc Cs�y�t|f|j���}|sdS|��x�|jD]z}|j�j�j�}xdtt|��D]T}|||krLy*|||�}t|jdd�d�} | r�| SWqLt t fk r�YqLXqLWq*WWdQRXWnt k r�YnXdS)N�:�r) rl�splitr\�lower�rstrip�rangerrrr� IndexError�OSError) rhriZhw_identifiersZ get_indexrk�line�words�i�word�macr/r/r0� _find_macDs$   rzcCs0d }x&d D]}td||d d ��}|r |Sq Wd S)z5Get the hardware address on Unix by running ifconfig.�hwaddr�ether�address:�lladdrr�-a�-avZifconfigcSs|dS)Nrr/)rwr/r/r0�bsz#_ifconfig_getnode..N)r{r|r}r~)rrr�)rz)�keywordsriryr/r/r0�_ifconfig_getnode]s  r�cCs tdddgdd��}|r|SdS)z/Get the hardware address on Unix by running ip.Zip�links link/ethercSs|dS)Nrr/)rwr/r/r0r�isz_ip_getnode..N)rz)ryr/r/r0� _ip_getnodefsr�cCs�ddl}ddl}y|j|j��}Wntk r6dSXtdd|j|�gdd��}|rZ|Stdd|j|�gdd��}|r||Stdd|jd|�gd d��}|r�|SdS) z0Get the hardware address on Unix by running arp.rNZarpz-ancSsdS)Nrrr/)rwr/r/r0r�vsz_arp_getnode..cSs|dS)Nrr/)rwr/r/r0r�{sz(%s)cSs|dS)N�r/)rwr/r/r0r��s)r_�socketZ gethostbynameZ gethostnamertrz�fsencode)r_r�Zip_addrryr/r/r0� _arp_getnodems r�cCstdddgdd��S)z4Get the hardware address on Unix by running lanscan.Zlanscanz-aislan0cSsdS)Nrr/)rwr/r/r0r��sz"_lanscan_getnode..)rzr/r/r/r0�_lanscan_getnode�sr�c"Cs�y�tdd�}|sdS|��|jj�j�j�}y|jd�}Wntk rNdSXxt|jD]j}yL|j�j�}||}t|�dkr�|jd�dkr�t |j dd�d �}|r�|SWqXtt fk r�YqXXqXWWdQRXWnt k r�YnXdS) z4Get the hardware address on Unix by running netstat.Znetstatz-iaNsAddress�rmrrnr) rlr\�readlinerqro�indexrrrrrrsrt)rkrvrwrurxryr/r/r0�_netstat_getnode�s,   r�c Cs ddl}ddl}ddl}dddg}y:ddl}|jd�}|jjj|d�|jd|j j d��Wn YnXx�|D]�}y$|j |j j |d�d g|jd d �}Wntk r�wpYnX|�JxB|jD]8}|jd �dj�j�} |jd| �r�t| jdd�d�Sq�WWdQRXqpWdS)z||kodknr>tjd�}t|�tt|j�d�Sddl}t|j�d�}t|d�d}tdk r~|tkr~td}|a|dkr�ddl }|j d �}|d @}|d ?d @}|d ?d@} |d@} |d?d@} |dkr�t �}t||| | | |fdd�S)aGenerate a UUID from a host ID, sequence number, and the current time. If 'node' is not given, getnode() is used to obtain the hardware address. If 'clock_seq' is given, it is used as the sequence number; otherwise a random 14-bit sequence number is chosen.Nr)r$rge��A�dl@'Hw� r�l��ri��r i�rIr rK)r&r') r�r�r�rr�r�rJr�_last_timestampr�r�r�) r-r.r�rJZ nanosecondsZ timestampr�r(r)r*r,r+r/r/r0�uuid1Ds,     r�cCs<ddlm}||jt|d�dd�j�}t|dd�dd �S) zAGenerate a UUID from the MD5 hash of a namespace UUID and a name.r)�md5zutf-8F)ZusedforsecurityNrr)r$r')�hashlibr�r$�digestr)� namespacerAr�r�r/r/r0�uuid3gs   r�cCsttjd�dd�S)zGenerate a random UUID.rr)r$r')rr_�urandomr/r/r/r0�uuid4psr�cCs8ddlm}||jt|d��j�}t|dd�dd�S)zCGenerate a UUID from the SHA-1 hash of a namespace UUID and a name.r)�sha1zutf-8Nrr)r$r')r�r�r$r�r)r�rAr�r:r/r/r0�uuid5ts r�z$6ba7b810-9dad-11d1-80b4-00c04fd430c8z$6ba7b811-9dad-11d1-80b4-00c04fd430c8z$6ba7b812-9dad-11d1-80b4-00c04fd430c8z$6ba7b814-9dad-11d1-80b4-00c04fd430c8)NN)=rUr_� __author__rMrNrOrPrrr$r��objectrrlrzr�r�r�r�r�r�r�r�r�r�Z ctypes.utilr�Z _libnamesr�� startswith�appendZlibnameZCDLL�utilZ find_library�lib� Exception�hasattrr��uname�releaseror�Zrpcrt4�getattrr�r�r�r�r�r�r�r�r�r�r�r�Z NAMESPACE_DNSZ NAMESPACE_URLZ NAMESPACE_OIDZNAMESPACE_X500r/r/r/r0�-szx "           #