
    U}bgm                         d Z ddlmZ ddlmZmZmZmZmZmZm	Z	 ddl
mZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ  G d
 de          Z G d de          Z G d de          Z G d de          ZdS )a  
    This code was generated by
   ___ _ _ _ _ _    _ ____    ____ ____ _    ____ ____ _  _ ____ ____ ____ ___ __   __
    |  | | | | |    | |  | __ |  | |__| | __ | __ |___ |\ | |___ |__/ |__|  | |  | |__/
    |  |_|_| | |___ | |__|    |__| |  | |    |__] |___ | \| |___ |  \ |  |  | |__| |  \

    Twilio - Notify
    This is the public Twilio REST API.

    NOTE: This class is auto generated by OpenAPI Generator.
    https://openapi-generator.tech
    Do not edit the class manually.
    )datetime)AnyDictListOptionalUnionIteratorAsyncIterator)deserialize	serializevalues)InstanceContext)InstanceResource)ListResource)Version)Pagec                   R    e Zd Z G d de          Z	 	 ddedeeef         de	e         f fdZ
edd
            ZdefdZdefdZddZddZej        ej        ej        ej        ej        ej        fdeeef         deeef         deeef         deeef         deeef         deeef         dd fdZej        ej        ej        ej        ej        ej        fdeeef         deeef         deeef         deeef         deeef         deeef         dd fdZdefdZ xZS )CredentialInstancec                       e Zd ZdZdZdZdS )CredentialInstance.PushServicegcmapnfcmN)__name__
__module____qualname__GCMAPNFCM     s/home/e360mart.nyusoft.in/public_html/e360mart_env/lib/python3.11/site-packages/twilio/rest/notify/v1/credential.pyPushServicer      s        r!   r#   Nversionpayloadsidc                 `   t                                          |           |                    d          | _        |                    d          | _        |                    d          | _        |                    d          | _        |                    d          | _        t          j	        |                    d                    | _
        t          j	        |                    d                    | _        |                    d          | _        d|p| j        i| _        d | _        d S )	Nr&   account_sidfriendly_nametypesandboxdate_createddate_updatedurl)super__init__getr&   r(   r)   r*   r+   r   iso8601_datetimer,   r-   r.   	_solution_context)selfr$   r%   r&   	__class__s       r"   r0   zCredentialInstance.__init__+   s     	!!!")++e"4"4*1++m*D*D,3KK,H,H@GF@S@S	&-kk)&<&<0;0LKK''1
 1
 1<0LKK''1
 1
 #*++e"4"4 3?$(
 6:r!   returnCredentialContextc                 j    | j         &t          | j        | j        d                   | _         | j         S )z
        Generate an instance context for the instance, the context is capable of
        performing various actions. All instance actions are proxied to the context

        :returns: CredentialContext for this CredentialInstance
        Nr&   r&   )r4   r8   _versionr3   r5   s    r"   _proxyzCredentialInstance._proxyB   s;     = -N5)  DM }r!   c                 4    | j                                         S )m
        Deletes the CredentialInstance


        :returns: True if delete succeeds, False otherwise
        )r=   deleter<   s    r"   r@   zCredentialInstance.deleteQ   s     {!!###r!   c                 D   K   | j                                          d{V S )
        Asynchronous coroutine that deletes the CredentialInstance


        :returns: True if delete succeeds, False otherwise
        N)r=   delete_asyncr<   s    r"   rC   zCredentialInstance.delete_asyncZ   s.       [--/////////r!   c                 4    | j                                         S )a
        Fetch the CredentialInstance


        :returns: The fetched CredentialInstance
        )r=   fetchr<   s    r"   rF   zCredentialInstance.fetchc   s     {  """r!   c                 D   K   | j                                          d{V S ){
        Asynchronous coroutine to fetch the CredentialInstance


        :returns: The fetched CredentialInstance
        N)r=   fetch_asyncr<   s    r"   rI   zCredentialInstance.fetch_asyncl   s.       [,,.........r!   r)   certificateprivate_keyr+   api_keysecretc                 B    | j                             ||||||          S )  
        Update the CredentialInstance

        :param friendly_name: A descriptive string that you create to describe the resource. It can be up to 64 characters long.
        :param certificate: [APN only] The URL-encoded representation of the certificate. Strip everything outside of the headers, e.g. `-----BEGIN CERTIFICATE-----MIIFnTCCBIWgAwIBAgIIAjy9H849+E8wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV.....A==-----END CERTIFICATE-----`
        :param private_key: [APN only] The URL-encoded representation of the private key. Strip everything outside of the headers, e.g. `-----BEGIN RSA PRIVATE KEY-----MIIEpQIBAAKCAQEAuyf/lNrH9ck8DmNyo3fGgvCI1l9s+cmBY3WIz+cUDqmxiieR\\n.-----END RSA PRIVATE KEY-----`
        :param sandbox: [APN only] Whether to send the credential to sandbox APNs. Can be `true` to send to sandbox APNs or `false` to send to production.
        :param api_key: [GCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.
        :param secret: [FCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.

        :returns: The updated CredentialInstance
        r)   rJ   rK   r+   rL   rM   )r=   updater5   r)   rJ   rK   r+   rL   rM   s          r"   rQ   zCredentialInstance.updateu   s5    * {!!'## " 
 
 	
r!   c                 R   K   | j                             ||||||           d{V S )  
        Asynchronous coroutine to update the CredentialInstance

        :param friendly_name: A descriptive string that you create to describe the resource. It can be up to 64 characters long.
        :param certificate: [APN only] The URL-encoded representation of the certificate. Strip everything outside of the headers, e.g. `-----BEGIN CERTIFICATE-----MIIFnTCCBIWgAwIBAgIIAjy9H849+E8wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV.....A==-----END CERTIFICATE-----`
        :param private_key: [APN only] The URL-encoded representation of the private key. Strip everything outside of the headers, e.g. `-----BEGIN RSA PRIVATE KEY-----MIIEpQIBAAKCAQEAuyf/lNrH9ck8DmNyo3fGgvCI1l9s+cmBY3WIz+cUDqmxiieR\\n.-----END RSA PRIVATE KEY-----`
        :param sandbox: [APN only] Whether to send the credential to sandbox APNs. Can be `true` to send to sandbox APNs or `false` to send to production.
        :param api_key: [GCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.
        :param secret: [FCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.

        :returns: The updated CredentialInstance
        rP   N)r=   update_asyncrR   s          r"   rU   zCredentialInstance.update_async   sW      * [--'## . 
 
 
 
 
 
 
 
 	
r!   c                     d                     d | j                                        D                       }d                    |          S )f
        Provide a friendly representation

        :returns: Machine friendly representation
         c              3   H   K   | ]\  }}d                      ||          V  dS z{}={}Nformat.0kvs      r"   	<genexpr>z.CredentialInstance.__repr__.<locals>.<genexpr>   4      SSDAq7>>!Q//SSSSSSr!   z(<Twilio.Notify.V1.CredentialInstance {}>joinr3   itemsr\   r5   contexts     r"   __repr__zCredentialInstance.__repr__   sF     ((SSDN<P<P<R<RSSSSS9@@IIIr!   N)r7   r8   )r7   r   )r   r   r   objectr#   r   r   strr   r   r0   propertyr=   boolr@   rC   rF   rI   r   unsetr   rQ   rU   rh   __classcell__r6   s   @r"   r   r      s           f   
	 OS: ::)-c3h:>Fsm: : : : : :.    X$ $ $ $ $0D 0 0 0 0# # # #/ / / / -3L*0,*0,'-|&,l%+\
 
S&[)
 3;'
 3;'	

 tV|$
 sF{#
 c6k"
 

 
 
 
@ -3L*0,*0,'-|&,l%+\
 
S&[)
 3;'
 3;'	

 tV|$
 sF{#
 c6k"
 

 
 
 
<J# J J J J J J J Jr!   r   c                        e Zd Zdedef fdZdefdZdefdZde	fdZ
de	fdZej        ej        ej        ej        ej        ej        fd	eeef         d
eeef         deeef         deeef         deeef         deeef         de	fdZej        ej        ej        ej        ej        ej        fd	eeef         d
eeef         deeef         deeef         deeef         deeef         de	fdZdefdZ xZS )r8   r$   r&   c                     t                                          |           d|i| _         dj        di | j        | _        dS )z
        Initialize the CredentialContext

        :param version: Version that contains the resource
        :param sid: The Twilio-provided string that uniquely identifies the Credential resource to update.
        r&   z/Credentials/{sid}Nr    )r/   r0   r3   r\   _uri)r5   r$   r&   r6   s      r"   r0   zCredentialContext.__init__   sP     	!!! 3
 0(/AA$.AA			r!   r7   c                 D    | j                             d| j                  S )r?   DELETEmethoduri)r;   r@   rs   r<   s    r"   r@   zCredentialContext.delete   s+     }##	 $ 
 
 	
r!   c                 T   K   | j                             d| j                   d{V S )rB   ru   rv   N)r;   rC   rs   r<   s    r"   rC   zCredentialContext.delete_async   sM       ]//	 0 
 
 
 
 
 
 
 
 	
r!   c                     | j                             d| j                  }t          | j         || j        d                   S )rE   GETrv   r&   r:   )r;   rF   rs   r   r3   r5   r%   s     r"   rF   zCredentialContext.fetch   sS     -%%	 & 
 

 "Mu%
 
 
 	
r!   c                    K   | j                             d| j                   d{V }t          | j         || j        d                   S )rH   r{   rv   Nr&   r:   )r;   rI   rs   r   r3   r|   s     r"   rI   zCredentialContext.fetch_async   su       11	 2 
 
 
 
 
 
 
 

 "Mu%
 
 
 	
r!   r)   rJ   rK   r+   rL   rM   c           	          t          j        |||t          j        |          ||d          }| j                            d| j        |          }t          | j        || j        d                   S )rO   FriendlyNameCertificate
PrivateKeySandboxApiKeySecretPOSTrw   rx   datar&   r:   )	r   ofr   boolean_to_stringr;   rQ   rs   r   r3   	r5   r)   rJ   rK   r+   rL   rM   r   r%   s	            r"   rQ   zCredentialContext.update
  s    * y -*)$6w??!  	
 	
 -&&	 ' 
 
 "$-dnU>STTTTr!   c           	         K   t          j        |||t          j        |          ||d          }| j                            d| j        |           d{V }t          | j        || j        d                   S )rT   r   r   r   Nr&   r:   )	r   r   r   r   r;   rU   rs   r   r3   r   s	            r"   rU   zCredentialContext.update_async2  s      * y -*)$6w??!  	
 	
 22	 3 
 
 
 
 
 
 
 
 "$-dnU>STTTTr!   c                     d                     d | j                                        D                       }d                    |          S )rW   rX   c              3   H   K   | ]\  }}d                      ||          V  dS rZ   r[   r]   s      r"   ra   z-CredentialContext.__repr__.<locals>.<genexpr>`  rb   r!   z'<Twilio.Notify.V1.CredentialContext {}>rc   rf   s     r"   rh   zCredentialContext.__repr__Z  sF     ((SSDN<P<P<R<RSSSSS8??HHHr!   )r   r   r   r   rk   r0   rm   r@   rC   r   rF   rI   r   rn   r   rj   rQ   rU   rh   ro   rp   s   @r"   r8   r8      se       B Bc B B B B B B

 

 

 

 



D 

 

 

 


) 
 
 
 
&
#5 
 
 
 
* -3L*0,*0,'-|&,l%+\&U &US&[)&U 3;'&U 3;'	&U
 tV|$&U sF{#&U c6k"&U 
&U &U &U &UT -3L*0,*0,'-|&,l%+\&U &US&[)&U 3;'&U 3;'	&U
 tV|$&U sF{#&U c6k"&U 
&U &U &U &UPI# I I I I I I I Ir!   r8   c                   :    e Zd Zdeeef         defdZdefdZdS )CredentialPager%   r7   c                 ,    t          | j        |          S )zp
        Build an instance of CredentialInstance

        :param payload: Payload response from the API
        )r   r;   r|   s     r"   get_instancezCredentialPage.get_instancef  s     "$-999r!   c                     dS )rW   z!<Twilio.Notify.V1.CredentialPage>r    r<   s    r"   rh   zCredentialPage.__repr__n  
     32r!   N)	r   r   r   r   rk   r   r   r   rh   r    r!   r"   r   r   d  sZ        :DcN :7I : : : :3# 3 3 3 3 3 3r!   r   c                       e Zd Zdef fdZej        ej        ej        ej        ej        ej        fdddeee	f         deee	f         deee	f         dee
e	f         d	eee	f         d
eee	f         defdZej        ej        ej        ej        ej        ej        fdddeee	f         deee	f         deee	f         dee
e	f         d	eee	f         d
eee	f         defdZ	 	 d dee         dee         dee         fdZ	 	 d dee         dee         dee         fdZ	 	 d dee         dee         dee         fdZ	 	 d dee         dee         dee         fdZej        ej        ej        fdeee	f         deee	f         deee	f         defdZej        ej        ej        fdeee	f         deee	f         deee	f         defdZdedefdZdedefdZdedefdZdedefdZdefdZ xZ S )!CredentialListr$   c                 X    t                                          |           d| _        dS )zl
        Initialize the CredentialList

        :param version: Version that contains the resource

        z/CredentialsN)r/   r0   rs   )r5   r$   r6   s     r"   r0   zCredentialList.__init__y  s(     	!!!"			r!   r*   r   r)   rJ   rK   r+   rL   rM   r7   c           
          t          j        ||||t          j        |          ||d          }| j                            d| j        |          }	t          | j        |	          S )a  
        Create the CredentialInstance

        :param type:
        :param friendly_name: A descriptive string that you create to describe the resource. It can be up to 64 characters long.
        :param certificate: [APN only] The URL-encoded representation of the certificate. Strip everything outside of the headers, e.g. `-----BEGIN CERTIFICATE-----MIIFnTCCBIWgAwIBAgIIAjy9H849+E8wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV.....A==-----END CERTIFICATE-----`
        :param private_key: [APN only] The URL-encoded representation of the private key. Strip everything outside of the headers, e.g. `-----BEGIN RSA PRIVATE KEY-----MIIEpQIBAAKCAQEAuyf/lNrH9ck8DmNyo3fGgvCI1l9s+cmBY3WIz+cUDqmxiieR\\n.-----END RSA PRIVATE KEY-----`
        :param sandbox: [APN only] Whether to send the credential to sandbox APNs. Can be `true` to send to sandbox APNs or `false` to send to production.
        :param api_key: [GCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.
        :param secret: [FCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.

        :returns: The created CredentialInstance
        Typer   r   r   r   r   r   r   r   )r   r   r   r   r;   creaters   r   
r5   r*   r)   rJ   rK   r+   rL   rM   r   r%   s
             r"   r   zCredentialList.create  s|    0 y -*)$6w??!  

 

 -&&	 ' 
 
 "$-999r!   c           
         K   t          j        ||||t          j        |          ||d          }| j                            d| j        |           d{V }	t          | j        |	          S )a  
        Asynchronously create the CredentialInstance

        :param type:
        :param friendly_name: A descriptive string that you create to describe the resource. It can be up to 64 characters long.
        :param certificate: [APN only] The URL-encoded representation of the certificate. Strip everything outside of the headers, e.g. `-----BEGIN CERTIFICATE-----MIIFnTCCBIWgAwIBAgIIAjy9H849+E8wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV.....A==-----END CERTIFICATE-----`
        :param private_key: [APN only] The URL-encoded representation of the private key. Strip everything outside of the headers, e.g. `-----BEGIN RSA PRIVATE KEY-----MIIEpQIBAAKCAQEAuyf/lNrH9ck8DmNyo3fGgvCI1l9s+cmBY3WIz+cUDqmxiieR\\n.-----END RSA PRIVATE KEY-----`
        :param sandbox: [APN only] Whether to send the credential to sandbox APNs. Can be `true` to send to sandbox APNs or `false` to send to production.
        :param api_key: [GCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.
        :param secret: [FCM only] The `Server key` of your project from Firebase console under Settings / Cloud messaging.

        :returns: The created CredentialInstance
        r   r   r   N)r   r   r   r   r;   create_asyncrs   r   r   s
             r"   r   zCredentialList.create_async  s      0 y -*)$6w??!  

 

 22	 3 
 
 
 
 
 
 
 
 "$-999r!   Nlimit	page_sizec                     | j                             ||          }|                     |d                   }| j                             ||d                   S )a`  
        Streams CredentialInstance records from the API as a generator stream.
        This operation lazily loads records as efficiently as possible until the limit
        is reached.
        The results are returned as a generator, so this operation is memory efficient.

        :param limit: Upper limit for the number of records to return. stream()
                      guarantees to never return more than limit.  Default is no limit
        :param page_size: Number of records to fetch per request, when not set will use
                          the default value of 50 records.  If no page_size is defined
                          but a limit is defined, stream() will attempt to read the
                          limit with the most efficient page size, i.e. min(limit, 1000)

        :returns: Generator that will yield up to limit results
        r   r   r   )r;   read_limitspagestreamr5   r   r   limitsr   s        r"   r   zCredentialList.stream  sO    ( **5)<<yy6+#6y77}##D&/:::r!   c                    K   | j                             ||          }|                     |d                    d{V }| j                             ||d                   S )ao  
        Asynchronously streams CredentialInstance records from the API as a generator stream.
        This operation lazily loads records as efficiently as possible until the limit
        is reached.
        The results are returned as a generator, so this operation is memory efficient.

        :param limit: Upper limit for the number of records to return. stream()
                      guarantees to never return more than limit.  Default is no limit
        :param page_size: Number of records to fetch per request, when not set will use
                          the default value of 50 records.  If no page_size is defined
                          but a limit is defined, stream() will attempt to read the
                          limit with the most efficient page size, i.e. min(limit, 1000)

        :returns: Generator that will yield up to limit results
        r   r   Nr   )r;   r   
page_asyncstream_asyncr   s        r"   r   zCredentialList.stream_async  se      ( **5)<<__vk/B_CCCCCCCC}))$w@@@r!   c                 J    t          |                     ||                    S )a  
        Lists CredentialInstance records from the API as a list.
        Unlike stream(), this operation is eager and will load `limit` records into
        memory before returning.

        :param limit: Upper limit for the number of records to return. list() guarantees
                      never to return more than limit.  Default is no limit
        :param page_size: Number of records to fetch per request, when not set will use
                          the default value of 50 records.  If no page_size is defined
                          but a limit is defined, list() will attempt to read the limit
                          with the most efficient page size, i.e. min(limit, 1000)

        :returns: list that will contain up to limit results
        r   r   )listr   r5   r   r   s      r"   r   zCredentialList.list  s2    & KK#   
 
 	
r!   c                 `   K   d |                      ||           d{V 2              d{V S )a  
        Asynchronously lists CredentialInstance records from the API as a list.
        Unlike stream(), this operation is eager and will load `limit` records into
        memory before returning.

        :param limit: Upper limit for the number of records to return. list() guarantees
                      never to return more than limit.  Default is no limit
        :param page_size: Number of records to fetch per request, when not set will use
                          the default value of 50 records.  If no page_size is defined
                          but a limit is defined, list() will attempt to read the limit
                          with the most efficient page size, i.e. min(limit, 1000)

        :returns: list that will contain up to limit results
        c                 $   K   g | 3 d {V 	 }|6 S ri   r    )r^   records     r"   
<listcomp>z-CredentialList.list_async.<locals>.<listcomp>;  sO       
 
 
 
 
 
 
 
 
 
 
 
 
s   r   N)r   r   s      r"   
list_asynczCredentialList.list_async(  s~      &
 
&*&7&7# '8 ' ' ! ! ! ! ! !
 
 
 
 
 
 
 
 
 	
r!   
page_tokenpage_numberc                     t          j        |||d          }| j                            d| j        |          }t          | j        |          S )ay  
        Retrieve a single page of CredentialInstance records from the API.
        Request is executed immediately

        :param page_token: PageToken provided by the API
        :param page_number: Page Number, this value is simply for client state
        :param page_size: Number of records to return, defaults to 50

        :returns: Page of CredentialInstance
        	PageTokenr   PageSizer{   rw   rx   params)r   r   r;   r   rs   r   r5   r   r   r   r   responses         r"   r   zCredentialList.pageC  sZ      y'#% 
 
 =%%U	$%OOdmX666r!   c                    K   t          j        |||d          }| j                            d| j        |           d{V }t          | j        |          S )a  
        Asynchronously retrieve a single page of CredentialInstance records from the API.
        Request is executed immediately

        :param page_token: PageToken provided by the API
        :param page_number: Page Number, this value is simply for client state
        :param page_size: Number of records to return, defaults to 50

        :returns: Page of CredentialInstance
        r   r{   r   N)r   r   r;   r   rs   r   r   s         r"   r   zCredentialList.page_async^  s        y'#% 
 
 11di 2 
 
 
 
 
 
 
 
 dmX666r!   
target_urlc                 v    | j         j        j                            d|          }t	          | j         |          S )z
        Retrieve a specific page of CredentialInstance records from the API.
        Request is executed immediately

        :param target_url: API-generated URL for the requested results page

        :returns: Page of CredentialInstance
        r{   )r;   domaintwiliorequestr   r5   r   r   s      r"   get_pagezCredentialList.get_page{  s3     ='.66ujIIdmX666r!   c                    K   | j         j        j                            d|           d{V }t	          | j         |          S )a  
        Asynchronously retrieve a specific page of CredentialInstance records from the API.
        Request is executed immediately

        :param target_url: API-generated URL for the requested results page

        :returns: Page of CredentialInstance
        r{   N)r;   r   r   request_asyncr   r   s      r"   get_page_asynczCredentialList.get_page_async  sI       -4BB5*UUUUUUUUdmX666r!   r&   c                 .    t          | j        |          S z
        Constructs a CredentialContext

        :param sid: The Twilio-provided string that uniquely identifies the Credential resource to update.
        r:   r8   r;   r5   r&   s     r"   r1   zCredentialList.get       !C8888r!   c                 .    t          | j        |          S r   r   r   s     r"   __call__zCredentialList.__call__  r   r!   c                     dS )rW   z!<Twilio.Notify.V1.CredentialList>r    r<   s    r"   rh   zCredentialList.__repr__  r   r!   )NN)!r   r   r   r   r0   r   rn   r   rk   rj   rm   r   r   r   r   intr	   r   r
   r   r   r   r   r   r   r   r   r   r8   r1   r   rh   ro   rp   s   @r"   r   r   w  so       	# 	# 	# 	# 	# 	# 	# -3L*0,*0,'-|&,l%+\*: *:.*: S&[)*: 3;'	*:
 3;'*: tV|$*: sF{#*: c6k"*: 
*: *: *: *:^ -3L*0,*0,'-|&,l%+\*: *:.*: S&[)*: 3;'	*:
 3;'*: tV|$*: sF{#*: c6k"*: 
*: *: *: *:\  $#'; ;}; C=; 
$	%	; ; ; ;6  $#'A A}A C=A 
)	*	A A A A6  $#'
 
}
 C=
 
 	!	
 
 
 
8  $#'
 
}
 C=
 
 	!	
 
 
 
: *0*0,(.	7 7#v+&7 3;'7 f%	7
 
7 7 7 7: *0*0,(.	7 7#v+&7 3;'7 f%	7
 
7 7 7 7:
73 
7> 
7 
7 
7 
7
7s 
7~ 
7 
7 
7 
79s 90 9 9 9 99C 9$5 9 9 9 93# 3 3 3 3 3 3 3 3r!   r   N)__doc__r   typingr   r   r   r   r   r	   r
   twilio.baser   r   r   twilio.base.instance_contextr   twilio.base.instance_resourcer   twilio.base.list_resourcer   twilio.base.versionr   twilio.base.pager   r   r8   r   r   r    r!   r"   <module>r      s          L L L L L L L L L L L L L L L L L L 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 : : : : : : 2 2 2 2 2 2 ' ' ' ' ' ' ! ! ! ! ! !_J _J _J _J _J) _J _J _JDfI fI fI fI fI fI fI fIR3 3 3 3 3T 3 3 3&r3 r3 r3 r3 r3\ r3 r3 r3 r3 r3r!   