HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //usr/lib/python3.9/site-packages/ipaclient/plugins/__pycache__/vault.cpython-39.pyc
a

�N(i��@s�ddlmZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZddl
mZddlmZddlmZddlmZddlmZmZmZzdd	lmZWney�dd	lmZYn0dd
lmZddlm Z m!Z!ddl"m#Z#dd
l$m%Z%ddl$m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,ddl$m-Z-m.Z.ddl$m/Z/m0Z0m1Z1ddl2m3Z3ddl$m4Z4ddl5m6Z6ddl7m8Z8e�9e:�Z;d<dd�Z<e3�Z=dZ>dd�Z?d=dd�Z@d>dd �ZAe=d!d"�Gd#d$�d$e*��ZBe=d!d"�Gd%d&�d&e)��ZCe=�Gd'd(�d(e(��ZDe=d!d"�Gd)d*�d*e)��ZEe=�Gd+d,�d,e(��ZFGd-d.�d.�ZGeGe-�ZHe=d!d!d/�Gd0d1�d1e#��ZIGd2d3�d3e(�ZJe=d!d"�Gd4d5�d5e)��ZKe=�Gd6d7�d7eJ��ZLe=d!d"�Gd8d9�d9e)��ZMe=�Gd:d;�d;eJ��ZNdS)?�)�print_functionN)�Fernet�InvalidToken)�default_backend)�hashes)�
PBKDF2HMAC)�padding)�Cipher�
algorithms�modes)�	TripleDES)�PKCS7)�load_pem_public_key�load_pem_private_key)�MethodOverride)�x509)�	constants)�Local�Method�Object)�
classproperty)�api�errors)�Bytes�Flag�Str)�Registry)�_)�ipautil)�DNSName�rc
Cs�z<tj|||d��}|��}Wd�n1s00YWn�ty�}z.tj|td�||jdd�d��WYd}~nHd}~0ty�}z(tj|td�||d�d��WYd}~n
d}~00|S)ztRead file and catch errors

    IOError and UnicodeError (for text files) are turned into a
    ValidationError
    )�mode�encodingN�(Cannot read file '%(filename)s': %(exc)s���filename�exc��name�errorz*Cannot decode file '%(filename)s': %(exc)s)	�io�open�read�IOErrorr�ValidationErrorr�args�UnicodeError)�argnamer&r!r"�f�datar'�r5�;/usr/lib/python3.9/site-packages/ipaclient/plugins/vault.py�validated_read>s$*
����r7icCs.tt��d|dt�d�}t�|�|�d���S)z9
    Generates symmetric key from password and salt.
    � i��)�	algorithm�length�saltZ
iterations�backend�utf-8)rr�SHA256r�base64�	b64encodeZderive�encode)�passwordr;Zkdfr5r5r6�generate_symmetric_key]s�rCcCst|dur*|durtd��t|�}|�|�S|durht|t�d�}|�|tjtjt�	�d�t�	�dd��Std��dS)z9
    Encrypts data with symmetric key or public key.
    Nz9Either a symmetric or a public key is required, not both.�r4r<�r9�Zmgfr9�labelz/Either a symmetric or a public key is required.)
�
ValueErrorr�encryptrrr�OAEP�MGF1rr>)r4�
symmetric_key�
public_key�fernetZpublic_key_objr5r5r6rIls*�
���	rIcCs�|durR|durtd��zt|�}|�|�WStyNtjtd�d��Yq�0np|dur�z:t|dt�d�}|�|t	j
t	jt�
�d�t�
�dd��WSty�tjtd�d��Yq�0ntd��dS)	z9
    Decrypts data with symmetric key or public key.
    Nz:Either a symmetric or a private key is required, not both.zInvalid credentials)�message)r4rBr<rErFz0Either a symmetric or a private key is required.)rHr�decryptrrZAuthenticationErrorrrrrrJrKrr>)r4rL�private_keyrNZprivate_key_objr5r5r6rP�s@������rPT)�no_failc@seZdZdZdS)�_fake_vault�vaultN)�__name__�
__module__�__qualname__r)r5r5r5r6rS�srSc@seZdZdZdZdS)�_fake_vault_add_internal�vault_add_internalTN�rUrVrWr)�NO_CLIr5r5r5r6rX�srXcs�eZdZed�Zedded�d�edded�d�ed	d
ed�d�fZedd
��Ze	e�Z
edd��Z�fdd�Z
�fdd�Z�fdd�Zdd�Zdd�Z�ZS)�	vault_addzCreate a new vault.�	password?rB�Vault password�Zcli_name�doc�password_file?�
password_file�"File containing the vault password�public_key_file?�public_key_filez$File containing the vault public keycCstj�d�tuS)NrY)r�Command�
get_pluginrX��clsr5r5r6�__NO_CLI_getter�s
�zvault_add.__NO_CLI_gettercCs|jjjjS�N)rrfrY�api_version��selfr5r5r6rl�szvault_add.api_versionc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfrYr0�superr\�get_args�rn�arg��	__class__r5r6rp�szvault_add.get_argsc#sB|jjj��D]}|jdvr|Vqtt|���D]
}|Vq2dS)N)�ipavaultsalt�version)rrfrY�optionsr)ror\�get_options�rn�optionrsr5r6rx�s

zvault_add.get_optionsc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfrY�
output_paramsror\�get_output_params�rnZparamrsr5r6r|�szvault_add.get_output_paramscCs|jjj��Srk)rrfrY�outputrmr5r5r6�_iter_output�szvault_add._iter_outputc

Os�|�d�}|dur&|jjj}|jjj}|�d�}|�d�}|�d�}|�d�}d|vr\|d=d|vrj|d=d|vrx|d=|dkr�|s�|r�tjt	d�d��|d	kr�|s�|r�tjt	d
�d��|jj
jr�|jjj
}	n
|jjj}	|	��s�|	��|dkr�n |dk�rd|�r|�rtjt	d�d��n8|�r$n0|�rDtd
|dd�}|�d�}n|jjj�d�}t�d�|d<n�|d	k�r|�r�|�r�tjt	d�d��n8|�r�n0|�r�td|dd�}||d<ntjdt	d�d��zt|t�d�Wn<t�y}
z"tjdt	d�|
d��WYd}
~
n
d}
~
00|jjj|i|��}|��}d|v�r@|d=d|v�rP|d=|dk�rj||d<|d=n|d	k�rz|d=|jjj|i|��|S)N�ipavaulttyperBrb�ipavaultpublickeyre�	symmetricz2Password can be specified only for symmetric vault��reason�
asymmetricz5Public key can be specified only for asymmetric vault�standard�!Password specified multiple times�
password-filer=�r"�
�New password�ruz#Public key specified multiple timeszpublic-key-file�rb�r!zMissing vault public keyr(rDz+Invalid or unsupported vault public key: %s�description)�getrrfrY�paramsr��defaultr�MutuallyExclusiveErrorr�env�	in_server�Backend�ldap2�	rpcclient�isconnected�connectr7�rstrip�textui�prompt_password�os�urandomr/rrrH�copy�
vault_archive)
rnr0rw�
vault_typeZinternal_cmdrBrbrMrer<�e�response�optsr5r5r6�forward�s�






��


��
�
��
��

�



zvault_add.forward)rUrVrWr�__doc__r�
takes_options�classmethodZ_vault_add__NO_CLI_getterrr[�propertyrlrprxr|rr��
__classcell__r5r5rsr6r\�s6����

r\c@seZdZdZdZdS)�_fake_vault_mod_internal�vault_mod_internalTNrZr5r5r5r6r�osr�cs�eZdZed�Zeded�d�edded�d�ed	d
ed�d�edd
ed�d�edded�d�edded�d�edded�d�edded�d�fZe	dd��Z
ee
�Ze
dd��Z�fdd �Z�fd!d"�Z�fd#d$�Zd%d&�Zd'd(�Z�ZS))�	vault_modzModify a vault.zchange_password?zChange password�r`z
old_password?�old_passwordzOld vault passwordr_zold_password_file?�old_password_filez&File containing the old vault passwordz
new_password?�new_passwordzNew vault passwordznew_password_file?�new_password_filez&File containing the new vault password�private_key?rQzOld vault private key�private_key_file?�private_key_filez)File containing the old vault private keyrdrez(File containing the new vault public keycCstj�d�tuS)Nr�)rrfrgr�rhr5r5r6rj�s
�zvault_mod.__NO_CLI_gettercCs|jjjjSrk)rrfr�rlrmr5r5r6rl�szvault_mod.api_versionc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfr�r0ror�rprqrsr5r6rp�szvault_mod.get_argsc#sB|jjj��D]}|jdkr|Vqtt|���D]
}|Vq2dS)Nrv)rrfr�rwr)ror�rxryrsr5r6rx�s

zvault_mod.get_optionsc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfr�r{ror�r|r}rsr5r6r|�szvault_mod.get_output_paramscCs|jjj��Srk)rrfr�r~rmr5r5r6r�szvault_mod._iter_outputcOsh|�dd�}|�dd�}|�dd�}|�dd�}|�dd�}|�dd�}|�dd�}	|�d	d�}
|�d
d�}|�dd�}|�dd�}
|jjjr�|jjj}n
|jjj}|��s�|��|r�n"|s�|s�|	s�|r�d
}n|s�|
r�d}|�r6|�	�}|�dd�||d<||d<|
|d	<||d
<|jj
j|i|��}|dd}|�	�}|�r||d<|dk�rhd|d<d|d<n�|d
k�r�|�r�||d<nt�
d�|d<d|d<nh|dk�r|�r�|
�r�tjtd�d��n0|�r�n(|
�r�td|
dd�}ntjdtd�d��d|d<||d<|jj
j|i|��}|�rd|�	�}|�dd�||d<||d<|	|d<d|d<|jj
j|i|��|S)Nr�Fru�change_passwordr�r�r�r�rQr�r�rer�r�r�rBrb�resultr4r�r�z'New public key specified multiple timesr�r�r�zMissing new vault public keyr(T�override_password)�poprr�r�r�r�r�r�r�r�rf�vault_retriever�r�rr�rr7r/r�r�)rnr0rwr�r;r�r�r�r�r�Zold_private_keyZold_private_key_fileZnew_public_keyZnew_public_key_filer<r�r�r4r5r5r6r��s�







���zvault_mod.forward)rUrVrWrr�rrrr�r�Z_vault_mod__NO_CLI_getterrr[r�rlrprxr|rr�r�r5r5rsr6r�usf���������*

r�c@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�_KraConfigCachez9The KRA config cache stores vaultconfig-show result.
    cCstj�|jjd�|_dS)Nz
kra-config)r��path�joinr�Z	cache_dir�_dirname)rnrr5r5r6�__init__/sz_KraConfigCache.__init__cCs t|���d}tj�|j|�S)Nz.json)rZToASCIIr�r�r�r�)rn�domain�basenamer5r5r6�
_get_filename2sz_KraConfigCache._get_filenamec
Cs�|�|�}zrz:t|��}t�|�Wd�WWS1s:0YWn2tyx}z|jtjkrd�WYd}~n
d}~00Wn"ty�tj	d|dd�Yn0dS)z`Load config from cache

        :param domain: IPA domain
        :return: dict or None
        NzFailed to load %sT��exc_info)
r�r,�json�load�OSError�errno�ENOENT�	Exception�logger�warning)rnr�r&r3r�r5r5r6r�6s

0z_KraConfigCache.loadc
Cs$|d��}t�|d�|d<|�|�}z�zt�|j�Wn2tyl}z|jtj	krX�WYd}~n
d}~00t
j|jddd��b}z0t�
||�t�|�|��t�|j|�Wn ty�t�|j��Yn0Wd�n1s�0YWn&t�ytjd|dd	�YdS0dSdS)
z�Store config in cache

        :param domain: IPA domain
        :param config: ipa vaultconfig-show response
        :return: True if config was stored successfully
        r��transport_certNF�w)�dir�deleter!zFailed to save %sTr�)r��sslZDER_cert_to_PEM_certr�r��makedirsr��EnvironmentErrorr�ZEEXIST�tempfileZNamedTemporaryFiler��dumprZ
flush_sync�close�renamer)r��unlinkr�r�)rnr�r��configr&r�r3r5r5r6�storeHs6�

�
*z_KraConfigCache.storec
Csd|�|�}zt�|�WnBtyZ}z*|jtjkrDtjd|dd�WYd}~dSd}~00dSdS)z�Remove a config from cache, ignores errors

        :param domain: IPA domain
        :return: True if cert was found and removed
        zFailed to remove %sTr�NF)r�r�r�r�r�r�r�r�)rnr�r&r�r5r5r6�removeks
z_KraConfigCache.removeN)	rUrVrWr�r�r�r�r�r�r5r5r5r6r�,s#r�)�overriderRcseZdZ�fdd�Z�ZS)�vaultconfig_showcs�|�d�}d|vr|d=tt|�j|i|��}t�|jjj|�|r�t	|d��"}|�
|dd�Wd�n1sv0Y|S)NZ
transport_out�wbr�r�)r�ror�r��_kra_config_cacher�rr�r�r,�write)rnr0rw�filer�r3rsr5r6r��s
0zvaultconfig_show.forward)rUrVrWr�r�r5r5rsr6r�sr�c@s0eZdZdd�Zddd�Zddd�Zdd	�Zd
S)
�ModVaultDatacCsf|tjvr(td�}t�|jt|�d���|tjkrBt�	t
�d��S|tjkrZt
t
�d��St|��dS)Nz2{algo} is not a supported vault wrapping algorithm)�algor��)r�VAULT_WRAPPING_SUPPORTED_ALGOSrrr/�format�reprZVAULT_WRAPPING_AES128_CBCr
ZAESr�r��VAULT_WRAPPING_3DESrrH)rnr)�msgr5r5r6�_generate_session_key�s


z"ModVaultData._generate_session_keyFcCs�d}|st�|jjj�}|durD|jj��}|d}t�|d�}nt�	|d�
d��}|�d�}|durrtj
}n:|tjvr�|}n*|dD]}|tjvr�|}q�q�t�d��||fS)Nr�r��asciiZwrapping_default_algorithmZwrapping_supported_algorithmsz<No overlapping wrapping algorithm between server and client.)r�r�rr�r�rfr�rZload_der_x509_certificateZload_pem_x509_certificaterAr�rr�r�rr/)rn�
force_refreshr�r�r�Zdefault_algo�
wrapping_algor�r5r5r6�_get_vaultconfig�s2��


�zModVaultData._get_vaultconfigc
Os�|��}|sbz|�|jt���}Wq�ty^|�|jtjtjt�	�d�t�	�dd��}Yq�0n*|�|jtjtjt�	�d�t�	�dd��}||d<|j
d}	z|jj|	|i|��WSt
jt
jt
jfy�t�|jjj�|r�|r�Yn0dS)NrErF�session_keyZ	_internal)rMrI�keyrZPKCS1v15rHrJrKrr>r)rrfrZ
InternalErrorZExecutionErrorZGenericErrorr�r�r�r�)
rnr�r�Zraise_unexpectedZuse_oaepr0rwrMZwrapped_session_keyr)r5r5r6�_do_internal�sH���	��	
�
zModVaultData._do_internalcOs�z"|j||ddg|�Ri|��}Wn2tjyT|j||ddg|�Ri|��}Yn0|durb|S|jdd�d}|j||ddg|�Ri|��}|dur�|S|j||ddg|�Ri|��S)z@
        Calls the internal counterpart of the command.
        FTN)r�r)r�rZ
EncodingErrorr�)rnr�r�r0rwr�r5r5r6�internal�sF
���

���
���
���zModVaultData.internalN)F)F)rUrVrWr�r�r�r�r5r5r5r6r��s

&�
0r�c@seZdZdZdZdS)�_fake_vault_archive_internal�vault_archive_internalTNrZr5r5r5r6r�sr�cs�eZdZed�Zeded�d�eded�d�edded	�d
�edded
�d
�eded�d�fZe	dd��Z
ee
�Ze
dd��Z�fdd�Z�fdd�Z�fdd�Zdd�Zdd�Zdd�Z�ZS) r�zArchive data into a vault.zdata?zBinary data to archiver�zin?zFile containing data to archiver]rBr^r_rarbrczoverride_password?zOverride existing passwordcCstj�d�tuS)Nr�)rrfrgr�rhr5r5r6rj7s
�zvault_archive.__NO_CLI_gettercCs|jjjjSrk)rrfr�rlrmr5r5r6rl>szvault_archive.api_versionc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfr�r0ror�rprqrsr5r6rpBszvault_archive.get_argsc#sB|jjj��D]}|jdvr|Vqtt|���D]
}|Vq2dS)N)�noncer��
vault_datarvr�)rrfr�rwr)ror�rxryrsr5r6rxHs

zvault_archive.get_optionsc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfr�r{ror�r|r}rsr5r6r|Sszvault_archive.get_output_paramscCs|jjj��Srk)rrfr�r~rmr5r5r6rYszvault_archive._iter_outputc	Cslt�|jd�}t|j���}|�|�}||��7}t|t�	|�t
�d�}|��}|�|�|��}||fS)z�Encrypt data with wrapped session key and transport cert

        :param algo: wrapping algorithm instance
        :param bytes json_vault_data: dumped vault data
        :return:
        ��r<)r�r��
block_sizer
�padder�update�finalizer	r�CBCr�	encryptor)	rnr��json_vault_datar�r��padded_data�cipherr��wrapped_vault_datar5r5r6�
_wrap_data\s
zvault_archive._wrap_datac
Os�|�d�}|�d�}|�d�}|�d�}|�dd�}d|vrB|d=d|vrP|d=d|vr^|d=d|vrl|d=|r�|r�tjtd�d��n�|r�t|�tkr�tjdtd	�d
tid��n�|�rFzt�	|�}WnHt
�y}	z.tjdtd�||	jd
d�d��WYd}	~	n
d}	~	00|jtk�r6tjdtd	�d
tid��t
d|dd�}nd}|jjj�rb|jjj}
n
|jjj}
|
���s~|
��|jjj|i|��d}|dd}|dk�r�d}
�n<|dk�r�|�r�|�r�tjtd�d��nT|�r�nL|�rt
d|dd�}|�d�}n,|�r|jjj�d�}n|jjjjddd�}|�sv|��}||d<z|jjj|i|��Wntj�ytYn0|dd}t||�}t||d �}d}
nR|d!k�r�|d"d}t �!t�"d#��}t||d �}t||d$�}
ntjd%td&�d��dt �!|��#d�i}|
�rt �!|
��#d�|d'<t$�%|��&d�}|�'�\}}|�d(|�}|t(j)k�rZ||d(<|�*|�}|�+||�\}}|j,||d)�|j-||g|�Ri|��S)*Nr4�inrBrbr�Fz#Input data specified multiple timesr�zLSize of data exceeds the limit. Current vault data size limit is %(limit)d B�limitr(r#r$r%r�r��r�r�rr�r�r�r�r=r�r�r��Password�Zconfirmru�rLr�r�r8)rMr��Invalid vault type�
encrypted_keyr�)r�r�).r�r�rr�r�len�MAX_VAULT_DATA_SIZEr/r��statr�r0�st_sizer7rr�r�r�r�r�r�r�rf�
vault_showr�r�r�r�r�ZNotFoundrCrIr?r@r��decoder��dumpsrAr�rr�r�rr�r�)rnr0rwr4Z
input_filerBrbr�rr'r<rTr�rr�r;�encryption_keyrMr�rr�r�r�r�rr5r5r6r�ps�



���
����



��
�
�

��
�
�zvault_archive.forward)rUrVrWrr�rrrr�r�Z_vault_archive__NO_CLI_getterrr[r�rlrprxr|rrr�r�r5r5rsr6r�sF������

r�c@seZdZdZdZdS)�_fake_vault_retrieve_internal�vault_retrieve_internalTNrZr5r5r5r6rsrc	s�eZdZed�Zeded�d�edded�d�ed	d
ed�d�edd
ed�d�edded�d�fZeded�d�fZe	dd��Z
ee
�Ze
dd��Z�fdd�Z�fdd�Z�fdd�Zdd �Zd!d"�Zd#d$�Z�ZS)%r�zRetrieve a data from a vault.zout?zFile to store retrieved datar�r]rBr^r_rarbrcr�rQzVault private keyr�r�z%File containing the vault private keyr4ZData)rGcCstj�d�tuS)Nr)rrfrgrrhr5r5r6rj7s
�zvault_retrieve.__NO_CLI_gettercCs|jjjjSrk)rrfrrlrmr5r5r6rl>szvault_retrieve.api_versionc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfrr0ror�rprqrsr5r6rpBszvault_retrieve.get_argsc#sB|jjj��D]}|jdvr|Vqtt|���D]
}|Vq2dS)N)r�rvr�)rrfrrwr)ror�rxryrsr5r6rxHs

zvault_retrieve.get_optionsc#s8|jjj��D]
}|Vqtt|���D]
}|Vq(dSrk)rrfrr{ror�r|r}rsr5r6r|Osz vault_retrieve.get_output_paramscCs|jjj��Srk)rrfrr~rmr5r5r6rUszvault_retrieve._iter_outputc	Csht|t�|�t�d�}|��}|�|�}||��7}t|j��	�}|�|�}||��7}t
�|�d��S)Nr�r=)
r	rr�r�	decryptorr�r�r
r��unpadderr��loadsr)	rnr�r�r�rrrrrr5r5r6�_unwrap_responseXs

zvault_retrieve._unwrap_responsecOs�|�d�}|�d�}|�d�}|�d�}|�d�}d|vr@|d=d|vrN|d=d|vr\|d=d|vrj|d=d|vrx|d=|jjjr�|jjj}n
|jjj}|��s�|��|jj	j
|i|��d}	|	dd}
|��\}}|�d	|�}|t
jkr�||d	<|�|�}
|j|
|g|�Ri|��}|�|
|dd
|dd�}~
t�|d�d
��}d}d|v�rpt�|d�d
��}|
dk�r~�n|
dk�r|	dd}|�r�|�r�tjtd�d��n<|�r�n4|�r�td|d
d�}|�d�}n|jjjjddd�}t||�}t||d�}n�|
dk�rx|�r.|�r.tjtd�d��n0|�r6n(|�rLtd|dd�}ntjdtd �d!��t||d"�}t||d�}ntjd#td$�d!��|�r�t|d%��}|� |�Wd�n1�s�0Ynd|i|d<|S)&N�outrBrbrQr�r�r�rr�r�r�r4r=rr�r�rur�r�r�r�r�rFr	r
r�z$Private key specified multiple timeszprivate-key-filer�r�zMissing vault private keyr()rQr�rr�)!r�rr�r�r�r�r�r�r�rfrr�r�rr�r�r�rr?Z	b64decoderArr�rr7r�r�r�rCrPr/r,r�)rnr0rwZoutput_filerBrbrQr�r<rTr�r�r�r�r�r�r4rr;rr3r5r5r6r�es�










�
�

��
�

����,zvault_retrieve.forward)rUrVrWrr�rrr�Zhas_output_paramsr�Z_vault_retrieve__NO_CLI_getterrr[r�rlrprxr|rrr�r�r5r5rsr6r�sT��������


r�)r N)NN)NN)OZ
__future__rr?r�r+r�Zloggingr�r�r�Zcryptography.fernetrrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrZ)cryptography.hazmat.primitives.kdf.pbkdf2rZ)cryptography.hazmat.primitives.asymmetricrZ&cryptography.hazmat.primitives.ciphersr	r
rZ/cryptography.hazmat.decrepit.ciphers.algorithmsr�ImportErrorZ1cryptography.hazmat.primitives.ciphers.algorithmsZ&cryptography.hazmat.primitives.paddingr
Z,cryptography.hazmat.primitives.serializationrrZipaclient.frontendrZipalibrrZipalib.frontendrrrZipalib.utilrrrrrrZipalib.plugablerrZ	ipapythonrZipapython.dnsutilrZ	getLoggerrUr�r7�registerrrCrIrPrSrXr\r�r�r�r�r�r�r�r�rr�r5r5r5r6�<module>s�



&57P
q