403Webshell
Server IP : 162.144.4.212  /  Your IP : 216.73.216.108
Web Server : Apache
System : Linux gator2125.hostgator.com 5.14.0-162.23.1.9991722448259.nf.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jul 31 18:11:45 UTC 2024 x86_64
User : cozeellc ( 2980)
PHP Version : 8.3.31
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /usr/libexec/oracle-cloud-agent/plugins/osms/grpc/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /usr/libexec/oracle-cloud-agent/plugins/osms/grpc/_channel.pyc
a

K��f�=�	@sxdZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZm
Z
mZmZmZmZmZmZddlZddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lm Z ddlm!Z!ddlm"Z"ddlm#Z#ddl$Ze�%e&�Z'd�(ej)�Z*dZ+e�,d�duZ-ej.j/ej.j0ej.j1ej.j2ej.j3ej.j4fZ5ej.j/ej.j0ej.j1ej.j2ej.j4fZ6ej.j/ej.j2ej.j3ej.j4fZ7ej.j/ej.j2ej.j4fZ8dZ9dZ:dZ;ee<ee<d�dd�Z=eej>ee?e?d�dd�Z@Gdd�deA�ZBeBej>e?dd�dd �ZCejDeBeeee d!�d"d#�ZEeBeee#d$�d%d&�ZFe
eBeejGejHfe"ee#dd'�d(d)�ZIe?eBe?d*�d+d,�ZJGd-d.�d.ejKejLejM�ZNGd/d0�d0ejKejO�ZPGd1d2�d2ePejLejM�ZQGd3d4�d4ePejLejM�ZRe
ee<e"eee<eeSeejKfd5�d6d7�ZTeBejHeUee<ee!ee!ejLffd8�d9d:�ZVeeeWeeejXd;�d<d=�ZYeeeWeeeejXee#fd;�d>d?�ZZee<ee<d@�dAdB�Z[GdCdD�dDej\�Z]GdEdF�dFej^�Z_GdGdH�dHej^�Z`GdIdJ�dJeja�ZbGdKdL�dLejc�ZdGdMdN�dNeW�ZeGdOdP�dPeA�ZfefddQ�dRdS�ZgefdT�dUdV�ZhGdWdX�dXeA�ZieieeejjgdfdQ�dYdZ�Zkeiejjeeejjgdfdd[�d\d]�Zleieeejjgdfdd^�d_d`�ZmeiejneUdda�dbdc�ZoeieejjgdfeUddd�dedf�Zpeieejjgdfddg�dhdi�Zqeeeejreedj�dkdl�Zseeeeeeefdm�dndo�ZtGdpdq�dqejn�ZndS)rz.Invocation-side implementation of gRPC Python.�N)
�Any�Callable�Dict�Iterator�List�Optional�Sequence�Set�Tuple�Union)�_common)�_compression)�_grpcio_metadata)�_observability)�cygrpc)�ChannelArgumentType)�DeserializingFunction)�IntegratedCallFactory)�MetadataType)�NullaryCallbackType)�ResponseType)�SerializingFunction)�UserTagzgrpc-python/{}�!GRPC_SINGLE_THREADED_UNARY_STREAMz0Exception calling channel subscription callback!z?<{} of RPC that terminated with:
	status = {}
	details = "{}"
>zZ<{} of RPC that terminated with:
	status = {}
	details = "{}"
	debug_error_string = "{}"
>��timeout�returncCs|durdSt��|S�N)�time�r�r �q/sparta/input/_build_configuration/image_build+validate/lib/bmcenv/lib64/python3.9/site-packages/grpc/_channel.py�	_deadlinemsr")�unknown_cygrpc_code�detailsrcCsd�||�S)Nz,Server sent unknown code {} and details "{}")�format)r#r$r r r!�_unknown_code_detailsqs�r&c@s�eZdZUejed<eejed<e	e
ed<eed<e	e
ed<e	ej
ed<e	eed<e	eed<eed	<eeed
<e	eed<e	eed<e	eed
<e	eed<e	eed<eeje	e
e	e
e	ej
e	ed�dd�Zdd�ZdS)�	_RPCState�	condition�due�initial_metadata�response�trailing_metadata�coder$�debug_error_string�	cancelled�	callbacks�
fork_epoch�rpc_start_time�rpc_end_time�method�target)r)r*r,r-r$cCsjt��|_t|�|_||_d|_||_||_||_	d|_
d|_d|_d|_
d|_d|_g|_t��|_dS�NF)�	threading�	Conditionr(�setr)r*r+r,r-r$r.r2r3r4r5r/r0r�get_fork_epochr1)�selfr)r*r,r-r$r r r!�__init__�s


z_RPCState.__init__cCst��|_dSr)r7r8r(�r;r r r!�reset_postfork_child�sz_RPCState.reset_postfork_childN)�__name__�
__module__�__qualname__r7r8�__annotations__r	r�
OperationTyperrr�grpc�
StatusCode�str�boolrr�int�floatrr<r>r r r r!r'ys,

�(r')�stater-r$rcCs0|jdur,||_||_|jdur&d|_d|_dS�Nr )r-r$r*r,)rJr-r$r r r!�_abort�s

rL)�eventrJ�response_deserializerrc
Cs$g}|jD�]}|��}|j�|�|tjjkr<|��|_q
|tjjkr�|�	�}|dur�t
�||�}|dur�d}t|t
jj|�n||_q
|tjjkr
|��|_|jdur�t
j�|���}	|	dur�t
jj|_t|	|���|_n|	|_|��|_|��|_t��|_t�|�|� |j!�d|_!q
|S)Nz!Exception deserializing response!)"�batch_operations�typer)�removerrC�receive_initial_metadatar*�receive_message�messager�deserializerLrDrE�INTERNALr+�receive_status_on_clientr,r-�!CYGRPC_STATUS_CODE_TO_STATUS_CODE�get�UNKNOWNr&r$�error_stringr.r�perf_counterr3r�maybe_record_rpc_latency�extendr0)
rMrJrNr0�batch_operation�operation_type�serialized_responser+r$r-r r r!�
_handle_event�sF�

�
�



rb)rJrNrcs��fdd�}|S)Ncs��j�.t|���}�j���j}Wd�n1s:0Y|D]L}z
|�WqHty�}z$t�dt|j�t|��WYd}~qHd}~00qH|o��j	t
��kS)NzException in callback %s: %s)r(rb�
notify_allr)�	Exception�logging�error�repr�funcr1rr:)rMr0�done�callback�e�rNrJr r!�handle_event�s
&
�z$_event_handler.<locals>.handle_eventr )rJrNrmr rlr!�_event_handler�srn)�request_iteratorrJ�call�request_serializer�
event_handlerrcs6�����fdd�}tj|d�}|�d�|��dS)z'Consume a request supplied by the user.csnd}z�zt��t��}Wn�ty@YW|s8t���q�Ynbty�t��d}tjj}d}t	�
|���tj
||�t�||�YW|s�t��dS0W|s�t��n|s�t��0t�|��}�j���jdu�rƈj�s�|du�r.tjj}d}��tj
||�t�||�Wd�dS�j�tjj�t�|t�f}��|��}|�s~�j�tjj�Wd�dS�fdd�}tj�jj|t�tj��d��jdu�r�Wd�dSnWd�dSWd�q1�s�0Yq�j�Z�jdu�rJ�j�tjj �t�!t�f}��|��}|�sJ�j�tjj �Wd�n1�s`0YdS)NFTzException iterating requests!�Exception serializing request!cs�jduptjj�jvSr)r-rrC�send_messager)r �rJr r!�_done=s

��zJ_consume_request_iterator.<locals>.consume_request_iterator.<locals>._done)�spin_cb)"r�enter_user_request_generator�next�
StopIteration�"return_from_user_request_generatorrdrDrErZ�_LOGGER�	exception�cancelr�!STATUS_CODE_TO_CYGRPC_STATUS_CODErL�	serializer(r-r/rVr)�addrCrt�SendMessageOperation�_EMPTY_FLAGS�operaterQ�wait�	functools�partial�block_if_fork_in_progress�send_close_from_client�SendCloseFromClientOperation)�*return_from_user_request_generator_invoked�requestr-r$�serialized_request�
operations�	operatingrv�rprrrorqrJr r!�consume_request_iterators�
�

��
�


�����2��z;_consume_request_iterator.<locals>.consume_request_iterator�r5TN�r�ForkManagedThread�	setDaemon�start)rorJrprqrrr��consumption_threadr r�r!�_consume_request_iterators	O�
r�)�
class_name�	rpc_statercCs�|j��|jdur*d�|�Wd�S|jtjjurXt�||j|j�Wd�St�||j|j|j	�Wd�SWd�n1s�0YdS)z Calculates error string for RPC.Nz<{} object>)
r(r-r%rDrE�OK�_OK_RENDEZVOUS_REPR_FORMATr$�_NON_OK_RENDEZVOUS_REPR_FORMATr.)r�r�r r r!�_rpc_state_stringbs

��r�c@sVeZdZUdZeed<ed�dd�Zeed�dd�Z	eed�d	d
�Z
eejd�dd�Z
eed�d
d�Zeed�dd�Zed�dd�Zed�dd�Zed�dd�Zed�dd�Zed�dd�Zed�dd�Zed�dd�Zd*eeed �d!d"�Zd+eeeed �d#d$�Zd,eeeejd �d%d&�Z d-e!ej"gdfeedd'�d(d)�Z#dS).�_InactiveRpcErrorz�An RPC error not tied to the execution of a particular RPC.

    The RPC represented by the state object must not be in-progress or
    cancelled.

    Attributes:
      _state: An instance of _RPCState.
    �_stateruc	Csv|j�\tdt�|j�t�|j�|jt�|j��|_t�|j	�|j_	t�|j
�|j_
Wd�n1sh0YdSrK)r(r'�copy�deepcopyr*r,r-r$r�r+r.�r;rJr r r!r<�s


�z_InactiveRpcError.__init__�rcCs|jjSr�r�r*r=r r r!r*�sz"_InactiveRpcError.initial_metadatacCs|jjSr�r�r,r=r r r!r,�sz#_InactiveRpcError.trailing_metadatacCs|jjSr�r�r-r=r r r!r-�sz_InactiveRpcError.codecCst�|jj�Sr)r�decoder�r$r=r r r!r$�sz_InactiveRpcError.detailscCst�|jj�Sr)rr�r�r.r=r r r!r.�sz$_InactiveRpcError.debug_error_stringcCst|jj|j�Sr�r��	__class__r?r�r=r r r!�_repr�sz_InactiveRpcError._reprcCs|��Sr�r�r=r r r!�__repr__�sz_InactiveRpcError.__repr__cCs|��Srr�r=r r r!�__str__�sz_InactiveRpcError.__str__cCsdS)zSee grpc.Future.cancel.Fr r=r r r!r~�sz_InactiveRpcError.cancelcCsdS)zSee grpc.Future.cancelled.Fr r=r r r!r/�sz_InactiveRpcError.cancelledcCsdS)zSee grpc.Future.running.Fr r=r r r!�running�sz_InactiveRpcError.runningcCsdS)zSee grpc.Future.done.Tr r=r r r!ri�sz_InactiveRpcError.doneNrcCs|�dS)zSee grpc.Future.result.Nr �r;rr r r!�result�sz_InactiveRpcError.resultcCs|S)zSee grpc.Future.exception.r r�r r r!r}�sz_InactiveRpcError.exceptioncCs.z|�Wn tjy(t��dYS0dS)zSee grpc.Future.traceback.�N)rD�RpcError�sys�exc_infor�r r r!�	traceback�sz_InactiveRpcError.traceback)�fnrrcCs||�dS)z"See grpc.Future.add_done_callback.Nr )r;r�rr r r!�add_done_callback�sz#_InactiveRpcError.add_done_callback)N)N)N)N)$r?r@rA�__doc__r'rBr<rrr*r,rDrEr-rFr$r.r�r�r�rGr~r/r�rirIrr�rdr}�types�
TracebackTyper�r�Futurer�r r r r!r�tsH
	��������r�cseZdZUdZeed<eejej	fed<e
eed<e
eed<eeejej	fe
ee
ed��fdd�Z
ed	�d
d�Ze
ed	�dd
�Zed	�dd�Zeed�dd�Zdd�Zdd�Zdd�Zdd�Ze
ed	�dd�Zed	�dd�Zed	�dd �Zed	�d!d"�Zd#d	�d$d%�Z�ZS)&�_Rendezvousa�An RPC iterator.

    Attributes:
      _state: An instance of _RPCState.
      _call: An instance of SegregatedCall or IntegratedCall.
        In either case, the _call object is expected to have operate, cancel,
        and next_event methods.
      _response_deserializer: A callable taking bytes and return a Python
        object.
      _deadline: A float representing the deadline of the RPC in seconds. Or
        possibly None, to represent an RPC with no deadline at all.
    r��_call�_response_deserializerr")rJrprN�deadlinecs*tt|���||_||_||_||_dSr)�superr�r<r�r�r�r")r;rJrprNr��r�r r!r<�s
z_Rendezvous.__init__r�cCs8|jj�|jjduWd�S1s*0YdS)zSee grpc.RpcContext.is_activeN�r�r(r-r=r r r!�	is_active�s
z_Rendezvous.is_activecCsh|jj�L|jdur$Wd�dSt|jt��d�Wd�SWd�n1sZ0YdS)z"See grpc.RpcContext.time_remainingNr)r�r(r"�maxrr=r r r!�time_remaining�s

z_Rendezvous.time_remainingcCs�|jj�~|jjdurhtjj}d}|j�tj	||�d|j_
t|j||�|jj��Wd�dSWd�dSWd�n1s�0YdS)zSee grpc.RpcContext.cancelNz!Locally cancelled by application!TF)
r�r(r-rDrE�	CANCELLEDr�r~rrr/rLrc)r;r-r$r r r!r~�s

�z_Rendezvous.cancel�rjrcCsf|jj�J|jjdur&Wd�dS|jj�|�Wd�dSWd�n1sX0YdS)z See grpc.RpcContext.add_callbackNFT)r�r(r0�append�r;rjr r r!�add_callbacks

z_Rendezvous.add_callbackcCs|Srr r=r r r!�__iter__sz_Rendezvous.__iter__cCs|��Sr��_nextr=r r r!rysz_Rendezvous.nextcCs|��Srr�r=r r r!�__next__sz_Rendezvous.__next__cCs
t��dSr��NotImplementedErrorr=r r r!r�!sz_Rendezvous._nextcCs
t��dSrr�r=r r r!r.$sz_Rendezvous.debug_error_stringcCst|jj|j�Srr�r=r r r!r�'sz_Rendezvous._reprcCs|��Srr�r=r r r!r�*sz_Rendezvous.__repr__cCs|��Srr�r=r r r!r�-sz_Rendezvous.__str__NcCs||jj�`|jjdurZtjj|j_d|j_d|j_|j�	t
j|jj|jj�|jj��Wd�n1sn0YdS)Nz"Cancelled upon garbage collection!T)
r�r(r-rDrEr�r$r/r�r~rrrcr=r r r!�__del__0s
�z_Rendezvous.__del__)r?r@rAr�r'rBrr�SegregatedCall�IntegratedCallrrrIr<rGr�r�r~rr�r�ryr�r�rFr.r�r�r�r��
__classcell__r r r�r!r��s.

�
	r�c@sFeZdZUdZeed<ed�dd�Zed�dd�Zed�dd	�Z	ed�d
d�Z
d'eee
d
�dd�Zd(eeeed
�dd�Zd)eeeejd
�dd�Zeejgdfdd�dd�Zeed�dd�Zeed�dd�Zeejd�dd�Zeed�dd�Zeej d�dd �Z!e
d�d!d"�Z"e
d�d#d$�Z#eed�d%d&�Z$dS)*�_SingleThreadedRendezvousaNAn RPC iterator operating entirely on a single thread.

    The __next__ method of _SingleThreadedRendezvous does not depend on the
    existence of any other thread, including the "channel spin thread".
    However, this means that its interface is entirely synchronous. So this
    class cannot completely fulfill the grpc.Future interface. The result,
    exception, and traceback methods will never block and will instead raise
    an exception if calling the method would result in blocking.

    This means that these methods are safe to call from add_done_callback
    handlers.
    r�r�cCs|jjduSrr�r=r r r!�_is_completeOsz&_SingleThreadedRendezvous._is_completecCs4|jj�|jjWd�S1s&0YdSr�r�r(r/r=r r r!r/Rs
z#_SingleThreadedRendezvous.cancelledcCs8|jj�|jjduWd�S1s*0YdSrr�r=r r r!r�Vs
z!_SingleThreadedRendezvous.runningcCs8|jj�|jjduWd�S1s*0YdSrr�r=r r r!riZs
z_SingleThreadedRendezvous.doneNrcCs~~|jj�`|��s tj�d��|jjtjjurF|jj	Wd�S|jj
rXt���n|�Wd�n1sp0YdS)a9Returns the result of the computation or raises its exception.

        This method will never block. Instead, it will raise an exception
        if calling this method would otherwise result in blocking.

        Since this method will never block, any `timeout` argument passed will
        be ignored.
        zJ_SingleThreadedRendezvous only supports result() when the RPC is complete.N)r�r(r�rD�experimental�
UsageErrorr-rEr�r+r/�FutureCancelledErrorr�r r r!r�^s	
�
z _SingleThreadedRendezvous.resultcCs�~|jj�h|��s tj�d��|jjtjjur@Wd�dS|jj	rRt�
��n|Wd�SWd�n1sx0YdS)a*Return the exception raised by the computation.

        This method will never block. Instead, it will raise an exception
        if calling this method would otherwise result in blocking.

        Since this method will never block, any `timeout` argument passed will
        be ignored.
        zM_SingleThreadedRendezvous only supports exception() when the RPC is complete.N)r�r(r�rDr�r�r-rEr�r/r�r�r r r!r}us	
�
z#_SingleThreadedRendezvous.exceptionc	Cs�~|jj��|��s tj�d��|jjtjjur@Wd�dS|jj	rRt�
��n8z|�Wn.tjy�t�
�dYWd�S0Wd�n1s�0YdS)a;Access the traceback of the exception raised by the computation.

        This method will never block. Instead, it will raise an exception
        if calling this method would otherwise result in blocking.

        Since this method will never block, any `timeout` argument passed will
        be ignored.
        zM_SingleThreadedRendezvous only supports traceback() when the RPC is complete.Nr�)r�r(r�rDr�r�r-rEr�r/r�r�r�r�r�r r r!r��s
�
z#_SingleThreadedRendezvous.traceback�r�rcCsf|jj�B|jjdur<|jj�t�||��Wd�dSWd�n1sP0Y||�dSr�r�r(r-r0r�r�r��r;r�r r r!r��s

.z+_SingleThreadedRendezvous.add_done_callbackcCsJ|jj�.|jjdur |��q
|jjWd�S1s<0YdS)�See grpc.Call.initial_metadataN)r�r(r*�_consume_next_eventr=r r r!r*�s

z*_SingleThreadedRendezvous.initial_metadatacCsL|jj�0|jjdur"tj�d��|jjWd�S1s>0YdS)�See grpc.Call.trailing_metadataNz4Cannot get trailing metadata until RPC is completed.)r�r(r,rDr�r�r=r r r!r,�s
�z+_SingleThreadedRendezvous.trailing_metadatacCsL|jj�0|jjdur"tj�d��|jjWd�S1s>0YdS)�See grpc.Call.codeNz'Cannot get code until RPC is completed.)r�r(r-rDr�r�r=r r r!r-�s
�z_SingleThreadedRendezvous.codecCsR|jj�6|jjdur"tj�d��t�|jj�Wd�S1sD0YdS)�See grpc.Call.detailsNz*Cannot get details until RPC is completed.)r�r(r$rDr�r�rr�r=r r r!r$�s
�z!_SingleThreadedRendezvous.detailscCsV|j��}|jj�0t||j|j�}|D]
}|�q(Wd�n1sH0Y|Sr)r��
next_eventr�r(rbr�)r;rMr0rjr r r!r��s


�&z-_SingleThreadedRendezvous._consume_next_eventcCs�|��|jj�v|jjdur@|jj}d|j_|Wd�Stjj|jjvrx|jjt	j
jurht��n|jjdurx|�Wd�q1s�0YqdSr)
r�r�r(r+rrCrSr)r-rDrEr�rz)r;r+r r r!�_next_response�s
�z(_SingleThreadedRendezvous._next_responsecCs�|jj�x|jjdurV|jj�tjj�|j�	t�
t�fd�}|sr|jj�tjj�n|jjt
jjurnt��n|�Wd�n1s�0Y|��Sr)r�r(r-r)r�rrCrSr�r��ReceiveMessageOperationr�rQrDrEr�rzr�)r;r�r r r!r��s
�"z_SingleThreadedRendezvous._nextcCsR|jj�6|jjdur"tj�d��t�|jj�Wd�S1sD0YdS)Nz5Cannot get debug error string until RPC is completed.)r�r(r.rDr�r�rr�r=r r r!r.
s
�z,_SingleThreadedRendezvous.debug_error_string)N)N)N)%r?r@rAr�r'rBrGr�r/r�rirrIrr�rdr}r�r�r�rrDr�r�rr*r,rEr-rFr$r�	BaseEventr�r�r�r.r r r r!r�=s,

��				r�c@s$eZdZUdZeed<eed�dd�Zeed�dd�Z	ee
jd�dd	�Zee
d�d
d�Zee
d�dd
�Zed�dd�Zed�dd�Zed�dd�Zed�dd�Zd#eeed�dd�Zd$eeeed�dd�Zd%eeeejd�dd�Zee
jgdfdd�dd �Zed�d!d"�Z dS)&�_MultiThreadedRendezvousa�An RPC iterator that depends on a channel spin thread.

    This iterator relies upon a per-channel thread running in the background,
    dequeueing events from the completion queue, and notifying threads waiting
    on the threading.Condition object in the _RPCState object.

    This extra thread allows _MultiThreadedRendezvous to fulfill the grpc.Future interface
    and to mediate a bidirection streaming RPC.
    r�r�csR�jj�6�fdd�}t��jjj|��jjWd�S1sD0YdS)r�cs�jjduSrr�r r=r r!rv&sz8_MultiThreadedRendezvous.initial_metadata.<locals>._doneN)r�r(rr�r*�r;rvr r=r!r*"s
z)_MultiThreadedRendezvous.initial_metadatacsR�jj�6�fdd�}t��jjj|��jjWd�S1sD0YdS)r�cs�jjduSrr�r r=r r!rv0sz9_MultiThreadedRendezvous.trailing_metadata.<locals>._doneN)r�r(rr�r,r�r r=r!r,,s
z*_MultiThreadedRendezvous.trailing_metadatacsR�jj�6�fdd�}t��jjj|��jjWd�S1sD0YdS)r�cs�jjduSrr�r r=r r!rv:sz,_MultiThreadedRendezvous.code.<locals>._doneN)r�r(rr�r-r�r r=r!r-6s
z_MultiThreadedRendezvous.codecsX�jj�<�fdd�}t��jjj|�t��jj�Wd�S1sJ0YdS)r�cs�jjduSr)r�r$r r=r r!rvDsz/_MultiThreadedRendezvous.details.<locals>._doneN)r�r(rr�r�r$r�r r=r!r$@s
z _MultiThreadedRendezvous.detailscsX�jj�<�fdd�}t��jjj|�t��jj�Wd�S1sJ0YdS)Ncs�jjduSr)r�r.r r=r r!rvMsz:_MultiThreadedRendezvous.debug_error_string.<locals>._done)r�r(rr�r�r.r�r r=r!r.Js
z+_MultiThreadedRendezvous.debug_error_stringcCs4|jj�|jjWd�S1s&0YdSrr�r=r r r!r/Ss
z"_MultiThreadedRendezvous.cancelledcCs8|jj�|jjduWd�S1s*0YdSrr�r=r r r!r�Ws
z _MultiThreadedRendezvous.runningcCs8|jj�|jjduWd�S1s*0YdSrr�r=r r r!ri[s
z_MultiThreadedRendezvous.donecCs|jjduSrr�r=r r r!r�_sz%_MultiThreadedRendezvous._is_completeNrcCs�|jj�rtj|jjj|j|d�}|r0t���n<|jjtjj	urV|jj
Wd�S|jjrht���n|�Wd�n1s�0YdS)z�Returns the result of the computation or raises its exception.

        See grpc.Future.result for the full API contract.
        rN)
r�r(rr�r�rD�FutureTimeoutErrorr-rEr�r+r/r��r;r�	timed_outr r r!r�bs
�

z_MultiThreadedRendezvous.resultcCs�|jj�ztj|jjj|j|d�}|r0t���nD|jjtjj	urPWd�dS|jj
rbt���n|Wd�SWd�n1s�0YdS)zvReturn the exception raised by the computation.

        See grpc.Future.exception for the full API contract.
        rN)r�r(rr�r�rDr�r-rEr�r/r�r�r r r!r}us
�

z"_MultiThreadedRendezvous.exceptionc	Cs�|jj��tj|jjj|j|d�}|r0t���nj|jjtjj	urPWd�dS|jj
rbt���n8z|�Wn.tjy�t
��dYWd�S0Wd�n1s�0YdS)z�Access the traceback of the exception raised by the computation.

        See grpc.future.traceback for the full API contract.
        rNr�)r�r(rr�r�rDr�r-rEr�r/r�r�r�r�r�r r r!r��s
�

z"_MultiThreadedRendezvous.tracebackr�cCsf|jj�B|jjdur<|jj�t�||��Wd�dSWd�n1sP0Y||�dSrr�r�r r r!r��s

.z*_MultiThreadedRendezvous.add_done_callbackcs.�jj���jjdurft�j�j�}�jj�tjj	��j
�t�t
�f|�}|s��jj�tjj	�n�jjtjjur~t��n���fdd�}t��jjj|��jjdurΈjj}d�j_|Wd�Stjj	�jjv�r
�jjtjjur�t��n�jjdu�r
��Wd�n1�s 0YdS)Ncs(�jjdup&tjj�jjvo&�jjduSr)r�r+rrCrSr)r-r r=r r!�_response_ready�s
�z7_MultiThreadedRendezvous._next.<locals>._response_ready)r�r(r-rnr�r)r�rrCrSr�r�r�r�rQrDrEr�rzrr�r+)r;rrr�r�r+r r=r!r��s4�
�z_MultiThreadedRendezvous._next)N)N)N)!r?r@rAr�r'rBrrr*r,rDrEr-rFr$r.rGr/r�rir�rIrr�rdr}r�r�r�rr�r�r�r r r r!r�s(





	��r�)r�rrqrcCsPt|�}t�||�}|durBtdddtjjd�}t|�}|d|fS||dfSdS)Nr rs)r"rr�r'rDrErVr�)r�rrqr�r�rJrfr r r!�_start_unary_request�s�
r�)rJrp�	with_callr�rcCs>|jtjjur2|r*t||d|�}|j|fS|jSnt|��dSr)r-rDrEr�r�r+r�)rJrpr�r��
rendezvousr r r!�_end_unary_response_blocking�s
r�)�metadata�initial_metadata_flagsrcCs*t�||�t�t�t�t�ft�t�ffSr)r�SendInitialMetadataOperationr�r��ReceiveStatusOnClientOperation�ReceiveInitialMetadataOperation�r�r�r r r!�#_stream_unary_invocation_operations�s��
�r�cCstdd�t||�D��S)Ncss|]}|dfVqdSrr )�.0r�r r r!�	<genexpr>s��z?_stream_unary_invocation_operations_and_tags.<locals>.<genexpr>)�tupler�r�r r r!�,_stream_unary_invocation_operations_and_tagss
��r�)�
user_deadlinercCsRt��}|dur|durdS|dur0|dur0|S|durD|durD|St||�SdSr)r�get_deadline_from_context�min)r��parent_deadliner r r!�_determine_deadlinesrc@s�eZdZUejed<eed<eed<eed<ee	ed<ee
ed<eed<eeed<gd	�Z
ejeeeee	ee
eed
�dd�Zeeeeeeeeejeeeeeejeeeejfd
�dd�Zdeeeeeeejeeeejeeejfd�dd�Zdeeeeeeejeeeejed�dd�Zdeeeeeeejeeeejeeejfd�dd�Zdeeeeeeejeeeeje d�dd�Z!dS)�_UnaryUnaryMultiCallable�_channel�
_managed_call�_method�_target�_request_serializerr��_context�_registered_call_handle�rrrrrr�r��channel�managed_callr4r5rqrNr	cCs8||_||_||_||_||_||_t��|_||_	dSr�
rrrrrr�r�build_census_contextrr	�r;rr
r4r5rqrNr	r r r!r</s

z!_UnaryUnaryMultiCallable.__init__)r�rr��wait_for_ready�compressionrc
Cs�t|||j�\}}}t��|�}	t�||�}
|dur@ddd|fSttdddd�}t�	|
|	�t�
|t�t�t�t�
t�t�t�t�t�f}|||dfSdSr)r�r�_InitialMetadataFlags�with_wait_for_readyr
�augment_metadatar'�_UNARY_UNARY_INITIAL_DUErr�r�r�r�r�r�r�)
r;r�rr�rrr�r�r�r��augmented_metadatarJr�r r r!�_prepareBs,
�
���
�
z!_UnaryUnaryMultiCallable._prepareN�r�rr��credentialsrrrc
Cs�|�|||||�\}}}	}
|dur(|
�n�t��|_t�|j�|_t�|j�|_	|j
�tj
j|jdt|	�||durtdn|j|dff|j|j�	}|��}t|||j�||fSdSr)rrr\r2rr�rr4rr5r�segregated_callr�PropagationConstants�GRPC_PROPAGATE_DEFAULTSr�_credentialsrr	r�rbr�)
r;r�rr�rrrrJr�r�r�rprMr r r!�	_blockinghs2	
�
���z"_UnaryUnaryMultiCallable._blockingc	Cs&|�||||||�\}}t||dd�Sr6�rr��	r;r�rr�rrrrJrpr r r!�__call__�s��z!_UnaryUnaryMultiCallable.__call__c	Cs&|�||||||�\}}t||dd�S�NTr r!r r r!r��s��z"_UnaryUnaryMultiCallable.with_callc
Cs�|�|||||�\}}}	}
|dur(|
�nxt||j�}t��|_t�|j�|_	t�|j
�|_|�t
jj|jd|	||durzdn|j|f||j|j�
}t|||j|	�SdSr)rrnr�rr\r2rr�rr4rr5rrrrrrr	r�)
r;r�rr�rrrrJr�r�r�rrrpr r r!�future�s0	
�
�
�z_UnaryUnaryMultiCallable.future)NNNNN)NNNNN)NNNNN)NNNNN)"r?r@rAr�ChannelrBr�bytesrrrrrH�	__slots__r<rIrrGrD�Compressionr
r'r�	Operationr�r�CallCredentialsr�rr"�Callr�r�r$r r r r!rs�


����)��)������rc	@s�eZdZUejed<eed<eed<eeed<ee	ed<e
ed<eeed<gd�Zejeeee	eed	�d
d�Z
de
eeeeeejeeeejed
�dd�ZdS)�'_SingleThreadedUnaryStreamMultiCallablerrrrr�rr	)rrrrr�r)rr4r5rqrNr	cCs2||_||_||_||_||_t��|_||_dSr)	rrrrr�rrrr	)r;rr4r5rqrNr	r r r!r<�s	
z0_SingleThreadedUnaryStreamMultiCallable.__init__NrcCst|�}t�||j�}|dur:tdddtjjd�}	t|	��tt	dddd�}	|durVdn|j
}
t��|�}t
�||�}t�||�t�|t�t�t�ft�t�ft�t�ff}
tdd�|
D��}t��|	_t�|j�|	_t�|j�|	_|j� tj!j"|jdt#|�||
||j$|j%�	}t&|	||j'|�S)Nr rscss|]}|dfVqdSrr )r��opsr r r!r�$�zC_SingleThreadedUnaryStreamMultiCallable.__call__.<locals>.<genexpr>)(r"rr�rr'rDrErVr��_UNARY_STREAM_INITIAL_DUErrrr
rrr�r�r�r�r�r�r�rr\r2r�rr4rr5rrrrrrr	r�r�)r;r�rr�rrrr�r�rJ�call_credentialsr�rr��operations_and_tagsrpr r r!r"�sb	������
�

�
�
�z0_SingleThreadedUnaryStreamMultiCallable.__call__)NNNNN)r?r@rArr%rBr&rrrrrHr'r<rIrrDr*rGr(r�r"r r r r!r,�s:

���r,c	@s�eZdZUejed<eed<eed<eed<ee	ed<ee
ed<eed<eeed<gd	�Z
ejeeee	e
eed
�dd�Zdeeeeeeejeeeejed�dd�Zd
S)�_UnaryStreamMultiCallablerrrrrr�rr	r
rcCs8||_||_||_||_||_||_t��|_||_	dSrrrr r r!r<Ms

z"_UnaryStreamMultiCallable.__init__NrcCs�t|||j�\}}}	t��|�}
|dur.|	�n�t�||�}ttdddd�}t�	||
�t�
|t�t�t�t�
t�ft�t�ff}
t��|_t�|j�|_t�|j�|_|�tjj|jdt|�||dur�dn|j|
t||j�|j|j �
}t!|||j|�SdSr)"r�rrrr
rr'r/rr�r�r�r�r�r�rr\r2rr�rr4rr5rrrrrrnr�rr	r�)r;r�rr�rrrr�r�r�r�rrJr�rpr r r!r"`sR	�
�����

�

�
�z"_UnaryStreamMultiCallable.__call__)NNNNN)r?r@rArr%rBrr&rrrrrHr'r<rIrrDr*rGr(r�r"r r r r!r28s>


���r2c
@sneZdZUejed<eed<eed<eed<ee	ed<ee
ed<eed<eeed<gd	�Z
ejeeeee	ee
eed
�dd�Zeeeeeeejeeeejeeejfd
�dd�Zdeeeeeeejeeeejed
�dd�Zdeeeeeeejeeeejeeejfd
�dd�Zdeeeeeeejeeeejed
�dd�ZdS)�_StreamUnaryMultiCallablerrrrrr�rr	r
rcCs8||_||_||_||_||_||_t��|_||_	dSrrrr r r!r<�s

z"_StreamUnaryMultiCallable.__init__�rorr�rrrrc
Cst|�}ttdddd�}t��|�}	t�||�}
t��|_	t
�|j�|_
t
�|j�|_|j�tjj|jdt|�|
|dur|dn|jt|
|	�|j|j�	}t||||jd�|��}|j�>t|||j�|j� �|j!s�Wd��qWd�q�1s�0Yq�||fSr)"r"r'�_STREAM_UNARY_INITIAL_DUErrr
rrr\r2rr�rr4rr5rrrrrrrr�rr	r�rr�r(rbr�rcr))
r;rorr�rrrr�rJr�rrprMr r r!r�sD	��
��
�
0z#_StreamUnaryMultiCallable._blockingNc	Cs&|�||||||�\}}t||dd�Sr6r �	r;rorr�rrrrJrpr r r!r"�s��	z"_StreamUnaryMultiCallable.__call__c	Cs&|�||||||�\}}t||dd�Sr#r r6r r r!r�s��	z#_StreamUnaryMultiCallable.with_callc
Cs�t|�}ttdddd�}t||j�}	t��|�}
t�||�}t	�
�|_t�
|j�|_t�
|j�|_|�tjj|jd|||dur�dn|jt||
�|	|j|j�
}t||||j|	�t|||j|�Sr)r"r'r5rnr�rrr
rrr\r2rr�rr4rr5rrrrrr�rr	r�rr�)
r;rorr�rrrr�rJrrr�rrpr r r!r$sH	��
���
�z _StreamUnaryMultiCallable.future)NNNNN)NNNNN)NNNNN)r?r@rArr%rBrr&rrrrrHr'r<rrIrrDr*rGr(r
r'r�rr"r+r�r�r$r r r r!r3�s�


��0������r3c	@s�eZdZUejed<eed<eed<eed<ee	ed<ee
ed<eed<eeed<gd	�Z
ejeeeee	ee
eed
�dd�Zdeeeeeeejeeeejed�dd�Zd
S)�_StreamStreamMultiCallablerrrrrr�rr	r
rcCs8||_||_||_||_||_||_t��|_||_	dSrrrr r r!r<\s

z#_StreamStreamMultiCallable.__init__Nr4cCs�t|�}ttdddd�}t��|�}	t�||�}
t�|
|	�t�	t
�ft�t
�ff}t||j
�}t��|_t�|j�|_t�|j�|_|�tjj|jdt|�|
|dur�dn|j|||j|j�
}
t|||
|j|�t ||
|j
|�Sr)!r"r'�_STREAM_STREAM_INITIAL_DUErrr
rrr�r�r�r�rnr�rr\r2rr�rr4rr5rrrrrrr	r�rr�)r;rorr�rrrr�rJr�rr�rrrpr r r!r"osR	����
�	
��
�z#_StreamStreamMultiCallable.__call__)NNNNN)r?r@rArr%rBrr&rrrrrHr'r<rrIrrDr*rGr(r�r"r r r r!r7Gs>


���r7cs>eZdZdZefed��fdd�
Zeeed�dd�Z	�Z
S)rz'Stores immutable initial metadata flags)�valuecs|tjjM}tt|��||�Sr)r�InitialMetadataFlags�	used_maskr�r�__new__)�clsr9r�r r!r<�sz_InitialMetadataFlags.__new__)rrcCsJ|durF|r&|�|tjjBtjjB�S|sF|�|tjj@tjjB�S|Sr)r�rr:r�wait_for_ready_explicitly_set)r;rr r r!r�s �����z)_InitialMetadataFlags.with_wait_for_ready)r?r@rAr�r�rHr<rrGrr�r r r�r!r�src@sNeZdZUejed<eed<eed<ejd�dd�Zdd�d	d
�Z	dd�Z
dS)
�_ChannelCallStater�
managed_callsr7�rcCs t��|_||_d|_d|_dS)NrF)r7�Lock�lockrr@�r;rr r r!r<�s
z_ChannelCallState.__init__Nr�cCs
d|_dS)Nr)r@r=r r r!r>�sz&_ChannelCallState.reset_postfork_childc	Cs2z|j�tjjd�Wnttfy,Yn0dS)NzChannel deallocated!)r�closerrEr/�	TypeError�AttributeErrorr=r r r!r��s�z_ChannelCallState.__del__)r?r@rArr%rBrHrGr<r>r�r r r r!r?�s

r?)rJrcs.�fdd�}tj|d�}|�d�|��dS)Ncs�t����j��}|jtjjkr$q|�|�}|r�j�8�j	d8_	�j	dkrbWd�dSWd�q1sv0YqdS)N�r)
rr�r�next_call_event�completion_type�CompletionType�
queue_timeout�tagrCr@)rM�call_completedrur r!�channel_spin�s



z._run_channel_spin_thread.<locals>.channel_spinr�Tr�)rJrO�channel_spin_threadr rur!�_run_channel_spin_thread�s

rQrucsLttttttttttjtttj	t
ttttjd��fdd�}|S)N)�flagsr4�hostr�r�rr�rr�contextr	rc
s�t�fdd�|D��}
�j�X�j�|||||||
||	�	}�jdkrTd�_t��n�jd7_|Wd�S1sz0YdS)a�Creates a cygrpc.IntegratedCall.

        Args:
          flags: An integer bitfield of call flags.
          method: The RPC method.
          host: A host string for the created call.
          deadline: A float to be the deadline of the created call or None if
            the call is to have an infinite deadline.
          metadata: The metadata for the call or None.
          credentials: A cygrpc.CallCredentials or None.
          operations: A sequence of sequences of cygrpc.Operations to be
            started on the call.
          event_handler: A behavior to call to handle the events resultant from
            the operations on the call.
          context: Context object for distributed tracing.
          _registered_call_handle: An int representing the call handle of the
            method, or None if the method is not registered.
        Returns:
          A cygrpc.IntegratedCall with which to conduct an RPC.
        c3s|]}|�fVqdSrr )r��	operation�rrr r!r�s��zC_channel_managed_call_management.<locals>.create.<locals>.<genexpr>rrHN)r�rCr�integrated_callr@rQ)rRr4rSr�r�rr�rrrTr	r1rprurVr!�create�s( ��

z0_channel_managed_call_management.<locals>.create)
rHr&rrFrIrrr*rr)rrr�)rJrXr rur!� _channel_managed_call_management�s�:rYc@s�eZdZUejed<ejed<eed<ej	ed<eed<e
eee
ej	gdfeej	fed<eed<ejd	�d
d�Zdd�d
d�ZdS)�_ChannelConnectivityStaterCr�polling�connectivity�try_to_connectN�callbacks_and_connectivities�
deliveringrAcCs2t��|_||_d|_d|_d|_g|_d|_dSr6)	r7�RLockrCrr[r\r]r^r_rDr r r!r<6s
z"_ChannelConnectivityState.__init__r�cCs"d|_d|_d|_g|_d|_dSr6)r[r\r]r^r_r=r r r!r>?s
z._ChannelConnectivityState.reset_postfork_child)r?r@rAr7r`rBrDr%rG�ChannelConnectivityrrrrrr<r>r r r r!rZ%s"



����	rZcCs:g}|jD]*}|\}}||jur
|�|�|j|d<q
|S)NrH)r^r\r�)rJ�callbacks_needing_update�callback_and_connectivityrj�callback_connectivityr r r!�_deliveriesGs
�

re)rJ�initial_connectivity�initial_callbacksrc	Cs�|}|}|D]8}t�|�z||�WqtyBt�t�Yq0q|j�:t|�}|rb|j}nd|_	Wd�dSWd�q1s�0YqdSr6)
rr�rdr|r}�0_CHANNEL_SUBSCRIPTION_CALLBACK_ERROR_LOG_MESSAGErCrer\r_)rJrfrgr\r0rjr r r!�_deliverVs 
�ri)rJr0rcCs2tjt||j|fd�}|�d�|��d|_dS�N)r5�argsT)rr�rir\r�r�r_)rJr0�delivering_threadr r r!�_spawn_deliveryos��
rm)rJr�initial_try_to_connectrcCs^|}|�|�}|j�Ttj||_tdd�|jD��}|jD]}|j|d<q<|rZt||�Wd�n1sn0Y|�|t	�	�d�}t
�|�|j�D|js�|js�d|_
d|_Wd��qZ|j}d|_Wd�n1s�0Y|js�|rx|�|�}|j�<tj||_|j�s8t|�}|�r8t||�Wd�qx1�sN0YqxdS)Ncss|]\}}|VqdSrr )r�rj�_r r r!r��sz%_poll_connectivity.<locals>.<genexpr>rHg�������?F)�check_connectivity_staterCr�1CYGRPC_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITYr\r�r^rm�watch_connectivity_staterrr�r]r[�successr_re)rJrrnr]r\r0rcrMr r r!�_poll_connectivity�sN
���
(�
��$

��rt)rJrjr]rcCs�|j��|jsX|jsXtjt||jt|�fd�}|�d�|�	�d|_|j�
|dg�nd|js�|jdur�t
||f�|jt|�O_|j�
||jg�n"|jt|�O_|j�
|dg�Wd�n1s�0YdSrj)rCr^r[rr�rtrrGr�r�r�r_r\rmr])rJrjr]�polling_threadr r r!�
_subscribe�s$�
�rv)rJrjrcCsZ|j�@t|j�D]$\}\}}||kr|j�|�q8qWd�n1sL0YdSr)rC�	enumerater^�pop)rJrj�index�subscribed_callback�unused_connectivityr r r!�_unsubscribe�s�r|)�base_optionsrrcCs$t�|�}t|�|tjjtffSr)r
�create_channel_optionr�r�
ChannelArgKey�primary_user_agent_string�_USER_AGENT)r}r�compression_optionr r r!�_augment_options�s
�����r�)�optionsrcCsBg}g}|D],}|dtjjjkr.|�|�q|�|�q||fS)z;Separates core channel options from Python channel options.r)rDr��ChannelOptions�SingleThreadedUnaryStreamr�)r��core_options�python_options�pairr r r!�_separate_channel_options�s��r�c@s�eZdZUdZeed<ejed<eed<e	ed<e
ed<ee
efed<e
e
eeejeejd�d	d
�Ze
ed�dd
�Ze
edd�dd�Zd1eejgdfeedd�dd�Zeejgdfdd�dd�Zd2e
eeeeeeejd�dd�Zd3e
eeeeeeejd�dd�Zd4e
eeeeeeej d�dd�Z!d5e
eeeeeeej"d�d d!�Z#dd"�d#d$�Z$dd"�d%d&�Z%dd"�d'd(�Z&d)d*�Z'd+d,�Z(dd"�d-d.�Z)d/d0�Z*dS)6r%z7A cygrpc.Channel-backed implementation of grpc.Channel.�_single_threaded_unary_streamr�_call_state�_connectivity_stater�_registered_call_handles)r5r�rrcCsrt|�\}}t|_|�|�t�t�|�t||�|�|_	||_
t|j	�|_t
|j	�|_t�|�tjrnt��dS)aPConstructor.

        Args:
          target: The target to which to connect.
          options: Configuration options for the channel.
          credentials: A cygrpc.ChannelCredentials or None.
          compression: An optional value indicating the compression method to be
            used over the lifetime of the channel.
        N)r��%_DEFAULT_SINGLE_THREADED_UNARY_STREAMr��_process_python_optionsrr%r�encoder�rrr?r�rZr��fork_register_channel�g_gevent_activated�gevent_increment_channel_count)r;r5r�rrr�r�r r r!r<s�
�
zChannel.__init__)r4rcCs|j�t�|��S)ah
        Get the registered call handle for a method.

        This is a semi-private method. It is intended for use only by gRPC generated code.

        This method is not thread-safe.

        Args:
          method: Required, the method name for the RPC.

        Returns:
          The registered call handle pointer in the form of a Python Long.
        )r�get_registered_call_handlerr�)r;r4r r r!�_get_registered_call_handle&sz#Channel._get_registered_call_handleN)r�rcCs&|D]}|dtjjjkrd|_qdS)zASets channel attributes according to python-only channel options.rTN)rDr�r�r�r�)r;r�r�r r r!r�6s��zChannel._process_python_options)rjr]rcCst|j||�dSr)rvr�)r;rjr]r r r!�	subscribeAszChannel.subscriber�cCst|j|�dSr)r|r�r�r r r!�unsubscribeHszChannel.unsubscribeF)r4rqrN�_registered_methodrcCs<d}|r|�|�}t|jt|j�t�|�t�|j�|||�Sr)r�rrrYr�rr�r�r;r4rqrNr�r	r r r!�unary_unaryNs

�zChannel.unary_unarycCshd}|r|�|�}|jr:t|jt�|�t�|j�|||�St|jt|j	�t�|�t�|j�|||�SdSr)
r�r�r,rrr�rr2rYr�r�r r r!�unary_streamcs*

�	
�zChannel.unary_streamcCs<d}|r|�|�}t|jt|j�t�|�t�|j�|||�Sr)r�r3rrYr�rr�rr�r r r!�stream_unary�s

�zChannel.stream_unarycCs<d}|r|�|�}t|jt|j�t�|�t�|j�|||�Sr)r�r7rrYr�rr�rr�r r r!�
stream_stream�s

�zChannel.stream_streamr�cCs@|j}|r<|j�|jdd�=Wd�n1s20YdSr)r�rCr^r�r r r!�_unsubscribe_all�szChannel._unsubscribe_allcCs6|��|j�tjjd�t�|�tjr2t��dS)NzChannel closed!)	r�rrErrEr/�fork_unregister_channelr��gevent_decrement_channel_countr=r r r!�_close�s

zChannel._closecCs|��|j�tjjd�dS)NzChannel closed due to fork)r�r�
close_on_forkrrEr/r=r r r!�_close_on_fork�s�zChannel._close_on_forkcCs|Srr r=r r r!�	__enter__�szChannel.__enter__cCs|��dSr6�r�)r;�exc_type�exc_val�exc_tbr r r!�__exit__�szChannel.__exit__cCs|��dSrr�r=r r r!rE�sz
Channel.closecCsz|��WnYn0dSr)r�r=r r r!r��s
zChannel.__del__)N)NNF)NNF)NNF)NNF)+r?r@rAr�rGrBrr%r?rZrFrrHrrrrD�ChannelCredentialsr(r<r�r�rrar�r�rr�UnaryUnaryMultiCallabler��UnaryStreamMultiCallabler��StreamUnaryMultiCallabler��StreamStreamMultiCallabler�r�r�r�r�r�rEr�r r r r!r%�s�

�!����	����&����r%)ur�r�r�re�osr�r7rr��typingrrrrrrrr	r
rrDrr
rr�grpc._cythonr�grpc._typingrrrrrrrr�grpc.experimental�	getLoggerr?r|r%�__version__r�r��getenvr�rC�send_initial_metadatartr�rRrSrWrr/r5r8rhr�r�rIr"rErFr&�objectr'rLr�rbrnr�r�r�r�r�r+r�r��
RpcContextr�r�r�r&r�rGr�rHr)r�r�rr�rr�r,r2r�r3r�r7rr?rQrYrZrarerirmr%rtrvr|r(r�r�r r r r!�<module>s20

��	������	�=
�-��_^k

�W

�;����;d_1^?#����2����

Youez - 2016 - github.com/yon3zu
LinuXploit