a
    g                     @   s.  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	 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mZ d dlmZmZmZmZmZmZ d dlmZmZmZm Z m!Z!m"Z" e"rd 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 ded ed e	d ed Z-e-e-j._/dS )    )CreateableAPIResource)DeletableAPIResource)ExpandableField)
ListObject)ListableAPIResource)RequestOptions)StripeObject)APIResourceTestHelpers)UpdateableAPIResource)class_method_variantsanitize_id)ClassVarDictListOptionalcastoverload)LiteralNotRequiredType	TypedDictUnpackTYPE_CHECKING)Charge)PaymentIntent)Refund)SetupIntent)Locationc                   @   s
  e Zd ZU dZdZeed  ed< G dd deZ	G dd de
ZG dd	 d	e
ZG d
d de
ZG dd de
ZG dd de
ZG dd de
ZG dd deZG dd deZG dd de
ZG dd deZG dd deZG dd de
ZG dd deZG d d! d!e
ZG d"d# d#eZG d$d% d%e
ZG d&d' d'e
ZG d(d) d)eZG d*d+ d+eZee	 ed,< ee  ed-< ed. ed/< e ed0< ee  ed1< e ed2< e!ed3< ee"d4  ed5< e#e e f ed6< ed ed7< e ed8< eed9  ed:< eed;  ed<< e$e e%d= d d>d?d@Z&e'e(e e%d= d d>dAdBZ)e'e%d= d dCdDdBZ)e*dEe%d= d dCdFdBZ)e$e e%d= d d>dGdHZ+e'e(e e%d= d d>dIdJZ,e'e%d= d dCdKdJZ,e*dLe%d= d dCdMdJZ,e$e%dN d dCdOdPZ-e$e%dN d dCdQdRZ.e$e e%dS d dTdUdVZ/e'e(e e%dS d dTdWdXZ0e'e%dS d dCdYdXZ0e*dZe%dS d dCd[dXZ0e$e e%dS d dTd\d]Z1e'e(e e%dS d dTd^d_Z2e'e%dS d dCd`d_Z2e*dae%dS d dCdbd_Z2e$e%dc e3d  dCdddeZ4e$e%dc e3d  dCdfdgZ5e$e e%dh d didjdkZ6e$e e%dh d didldmZ7e$e e%dn d d>dodpZ8e'e(e e%dn d d>dqdrZ9e'e%dn d dCdsdrZ9e*dte%dn d dCdudrZ9e$e e%dn d d>dvdwZ:e'e(e e%dn d d>dxdyZ;e'e%dn d dCdzdyZ;e*d{e%dn d dCd|dyZ;e$e e%d} d d>d~dZ<e'e(e e%d} d d>ddZ=e'e%d} d dCddZ=e*de%d} d dCddZ=e$e e%d} d d>ddZ>e'e(e e%d} d d>ddZ?e'e%d} d dCddZ?e*de%d} d dCddZ?e$e e%d d d>ddZ@e'e(e e%d d d>ddZAe'e%d d dCddZAe*de%d d dCddZAe$e e%d d d>ddZBe'e(e e%d d d>ddZCe'e%d d dCddZCe*de%d d dCddZCe$e e%d d diddZDe$e e%d d diddZEe$e e%d d d>ddZFe'e(e e%d d d>ddZGe'e%d d dCddZGe*de%d d dCddZGe$e e%d d d>ddZHe'e(e e%d d d>ddZIe'e%d d dCddZIe*de%d d dCddZIG dd deJd  ZKeLdd ZMd,e	iZNdS )Readerz
    A Reader represents a physical device for accepting payment details.

    Related guide: [Connecting to a reader](https://stripe.com/docs/terminal/payments/connect-reader)
    zterminal.readerOBJECT_NAMEc                   @   s   e Zd ZU G dd deZG dd deZG dd deZG dd deZee	 e
d	< ee	 e
d
< ee e
d< ee e
d< ee e
d< ee e
d< ed e
d< ed e
d< eeeedZdS )zReader.Actionc                   @   s>   e Zd ZU G dd deZed ed< ee ed< deiZdS )z"Reader.Action.ProcessPaymentIntentc                   @   sJ   e Zd ZU G dd deZee ed< ee ed< ee ed< deiZdS )z0Reader.Action.ProcessPaymentIntent.ProcessConfigc                   @   s   e Zd ZU ee ed< dS )z8Reader.Action.ProcessPaymentIntent.ProcessConfig.Tippingamount_eligibleN)__name__
__module____qualname__r   int__annotations__ r&   r&   e/var/www/staging/api/virtual_environments/venv/lib/python3.9/site-packages/stripe/terminal/_reader.pyTipping0   s   
r(   enable_customer_cancellationskip_tippingtippingN)	r!   r"   r#   r   r(   r   boolr%   _inner_class_typesr&   r&   r&   r'   ProcessConfig/   s
   
r.   r   payment_intentprocess_configN)	r!   r"   r#   r   r.   r   r%   r   r-   r&   r&   r&   r'   ProcessPaymentIntent.   s   
r1   c                   @   sJ   e Zd ZU G dd deZee ed< ee ed< ed ed< deiZ	dS )z Reader.Action.ProcessSetupIntentc                   @   s   e Zd ZU ee ed< dS )z.Reader.Action.ProcessSetupIntent.ProcessConfigr)   Nr!   r"   r#   r   r,   r%   r&   r&   r&   r'   r.   O   s   
r.   Zgenerated_cardr0   r   setup_intentN)
r!   r"   r#   r   r.   r   strr%   r   r-   r&   r&   r&   r'   ProcessSetupIntentN   s
   
r5   c                   @   s   e Zd ZU G dd deZee ed< eed  ed< ee	e
e
f  ed< eed  ed< eed	  ed
< eed  ed< ee ed< ee ed< ee ed< deiZdS )zReader.Action.RefundPaymentc                   @   s   e Zd ZU ee ed< dS )z/Reader.Action.RefundPayment.RefundPaymentConfigr)   Nr2   r&   r&   r&   r'   RefundPaymentConfigd   s   
r6   amountr   chargemetadatar   r/   )Z	duplicateZ
fraudulentZrequested_by_customerreasonr   Zrefundrefund_application_feerefund_payment_configreverse_transferN)r!   r"   r#   r   r6   r   r$   r%   r   r   r4   r   r,   r-   r&   r&   r&   r'   RefundPaymentc   s   
r>   c                   @   s>   e Zd ZU G dd deZee ed< ed ed< deiZdS )zReader.Action.SetReaderDisplayc                   @   sN   e Zd ZU G dd deZeed< ee ed< ee	 ed< e	ed< deiZ
dS )z#Reader.Action.SetReaderDisplay.Cartc                   @   s&   e Zd ZU eed< eed< eed< dS )z,Reader.Action.SetReaderDisplay.Cart.LineItemr7   descriptionquantityNr!   r"   r#   r$   r%   r4   r&   r&   r&   r'   LineItem   s   
rB   currency
line_itemstaxtotalN)r!   r"   r#   r   rB   r4   r%   r   r   r$   r-   r&   r&   r&   r'   Cart   s   
rG   carttypeN)	r!   r"   r#   r   rG   r   r%   r   r-   r&   r&   r&   r'   SetReaderDisplay   s   
!rJ   Zfailure_codeZfailure_messageprocess_payment_intentprocess_setup_intentrefund_paymentset_reader_display)failedZin_progressZ	succeededstatus)rK   rL   rM   rN   rI   N)r!   r"   r#   r   r1   r5   r>   rJ   r   r4   r%   r   r-   r&   r&   r&   r'   Action-   s&   
 /,
rQ   c                   @   s   e Zd ZU eee  ed< dS )Reader.CancelActionParamsexpandNr!   r"   r#   r   r   r4   r%   r&   r&   r&   r'   CancelActionParams   s   
rU   c                   @   sJ   e Zd ZU eee  ed< ee ed< ee ed< ed ed< eed< dS )Reader.CreateParamsrS   labellocationLiteral['']|Dict[str, str]r9   Zregistration_codeNrT   r&   r&   r&   r'   CreateParams   s   
rZ   c                   @   s   e Zd ZdS )Reader.DeleteParamsN)r!   r"   r#   r&   r&   r&   r'   DeleteParams  s   r\   c                   @   sz   e Zd ZU eed  ed< ee ed< eee  ed< ee ed< ee ed< ee ed< ee ed< eed	  ed
< dS )Reader.ListParamsZbbpos_chipper2xZbbpos_wisepad3Zbbpos_wisepos_eZmobile_phone_readerZsimulated_wisepos_eZ	stripe_m2Zstripe_s700Zverifone_P400device_typeZending_beforerS   limitrX   serial_numberZstarting_afterZofflineZonlinerP   N)	r!   r"   r#   r   r   r%   r4   r   r$   r&   r&   r&   r'   
ListParams	  s   
rc   c                   @   s6   e Zd ZU eee  ed< ed ed< ed ed< dS )Reader.ModifyParamsrS   zLiteral['']|strrW   rY   r9   NrT   r&   r&   r&   r'   ModifyParams6  s   
re   c                   @   sR   e Zd ZU ee ed< ed ed< eee  ed< ed ed< eed  ed< d	S )
!Reader.PresentPaymentMethodParamsZ
amount_tip,Reader.PresentPaymentMethodParamsCardPresentcard_presentrS   /Reader.PresentPaymentMethodParamsInteracPresentinterac_present)rh   rj   rI   N)	r!   r"   r#   r   r$   r%   r   r4   r   r&   r&   r&   r'   PresentPaymentMethodParamsD  s   
rk   c                   @   s   e Zd ZU ee ed< dS )rg   numberNr!   r"   r#   r   r4   r%   r&   r&   r&   r'   %PresentPaymentMethodParamsCardPresent^  s   
rn   c                   @   s   e Zd ZU ee ed< dS )ri   rl   Nrm   r&   r&   r&   r'   (PresentPaymentMethodParamsInteracPresentd  s   
ro   c                   @   s2   e Zd ZU eee  ed< eed< ed ed< dS )!Reader.ProcessPaymentIntentParamsrS   r/   .Reader.ProcessPaymentIntentParamsProcessConfigr0   NrT   r&   r&   r&   r'   ProcessPaymentIntentParamsj  s   
rr   c                   @   sB   e Zd ZU eed  ed< ee ed< ee ed< ed ed< dS )rq   alwaysZlimitedunspecifiedallow_redisplayr)   r*   5Reader.ProcessPaymentIntentParamsProcessConfigTippingr+   N)r!   r"   r#   r   r   r%   r,   r&   r&   r&   r'   'ProcessPaymentIntentParamsProcessConfigz  s   
rx   c                   @   s   e Zd ZU ee ed< dS )rw   r    N)r!   r"   r#   r   r$   r%   r&   r&   r&   r'   .ProcessPaymentIntentParamsProcessConfigTipping  s   
ry   c                   @   s>   e Zd ZU ed ed< eee  ed< ed ed< eed< dS )Reader.ProcessSetupIntentParamsrs   rv   rS   ,Reader.ProcessSetupIntentParamsProcessConfigr0   r3   N)r!   r"   r#   r   r%   r   r   r4   r&   r&   r&   r'   ProcessSetupIntentParams  s   
r|   c                   @   s   e Zd ZU ee ed< dS )r{   r)   Nr!   r"   r#   r   r,   r%   r&   r&   r&   r'   %ProcessSetupIntentParamsProcessConfig  s   
r~   c                   @   sz   e Zd ZU ee ed< ee ed< eee  ed< eeeef  ed< ee ed< ee	 ed< ed ed< ee	 ed	< d
S )Reader.RefundPaymentParamsr7   r8   rS   r9   r/   r;   -Reader.RefundPaymentParamsRefundPaymentConfigr<   r=   N)
r!   r"   r#   r   r$   r%   r4   r   r   r,   r&   r&   r&   r'   RefundPaymentParams  s   
r   c                   @   s   e Zd ZU ee ed< dS )r   r)   Nr}   r&   r&   r&   r'   &RefundPaymentParamsRefundPaymentConfig  s   
r   c                   @   s   e Zd ZU eee  ed< dS )Reader.RetrieveParamsrS   NrT   r&   r&   r&   r'   RetrieveParams  s   
r   c                   @   s6   e Zd ZU ed ed< eee  ed< ed ed< dS )Reader.SetReaderDisplayParams!Reader.SetReaderDisplayParamsCartrH   rS   rI   N)r!   r"   r#   r   r%   r   r4   r   r&   r&   r&   r'   SetReaderDisplayParams  s   
r   c                   @   s6   e Zd ZU eed< ed ed< ee ed< eed< dS )r   rC   )Reader.SetReaderDisplayParamsCartLineItemrD   rE   rF   N)r!   r"   r#   r4   r%   r   r   r$   r&   r&   r&   r'   SetReaderDisplayParamsCart  s
   
r   c                   @   s&   e Zd ZU eed< eed< eed< dS )r   r7   r?   r@   NrA   r&   r&   r&   r'   "SetReaderDisplayParamsCartLineItem   s   
r   actionZdevice_sw_versionr^   r_   id
ip_addressrW   Zlivemoder   rX   r9   objectra   rb   rP   TZdeletedrR   readerparamsreturnc                 K   s"   t d| jddjt|d|dS )4
        Cancels the current reader action.
        r   post+/v1/terminal/readers/{reader}/cancel_actionr   r   r   _static_requestformatr   clsr   r   r&   r&   r'   _cls_cancel_actionL  s    zReader._cls_cancel_actionc                 K   s   dS r   Nr&   r   r   r&   r&   r'   cancel_action^  s    zReader.cancel_actionr   r   c                 K   s   dS r   r&   selfr   r&   r&   r'   r   h  s    r   c              	   K   s(   t d| jddjt| dd|dS )r   r   r   r   r   r   r   r   _requestr   r   getr   r&   r&   r'   r   q  s    c                    s(   t d| jddjt|d|dI dH S )r   r   r   r   r   r   Nr   _static_request_asyncr   r   r   r&   r&   r'   _cls_cancel_action_async  s    
zReader._cls_cancel_action_asyncc                    s   dS r   r&   r   r&   r&   r'   cancel_action_async  s    zReader.cancel_action_asyncc                    s   dS r   r&   r   r&   r&   r'   r     s    r   c              	      s.   t d| jddjt| dd|dI dH S )r   r   r   r   r   r   r   Nr   _request_asyncr   r   r   r   r&   r&   r'   r     s    
rV   c                 K   s   t d| jd|  |dS ).
        Creates a new Reader object.
        r   r   r   )r   r   	class_urlr   r   r&   r&   r'   create  s    zReader.createc                    s    t d| jd|  |dI dH S )r   r   r   r   N)r   r   r   r   r&   r&   r'   create_async  s    
zReader.create_asyncr[   )sidr   r   c                 K   s*   d|   t|f }td| jd||dS )*
        Deletes a Reader object.
        %s/%sr   deleter   r   r   r   r   r   r   r   urlr&   r&   r'   _cls_delete  s    zReader._cls_deletec                 K   s   dS r   Nr&   r   r   r&   r&   r'   r     s    zReader.deletec                 K   s   dS r   r&   r   r&   r&   r'   r     s    r   c                 K   s   | j d|  |dS )r   r   r   )Z_request_and_refreshinstance_urlr   r&   r&   r'   r     s
    c                    s0   d|   t|f }td| jd||dI dH S )r   r   r   r   r   Nr   r   r   r   r   r&   r&   r'   _cls_delete_async  s    
zReader._cls_delete_asyncc                    s   dS r   r&   r   r&   r&   r'   delete_async  s    zReader.delete_asyncc                    s   dS r   r&   r   r&   r&   r'   r      s    r   c                    s   | j d|  |dI dH S )r   r   r   N)Z_request_and_refresh_asyncr   r   r&   r&   r'   r   )  s
    r]   c                 K   s4   | j d|  |d}t|ts0tdt|j |S )3
        Returns a list of Reader objects.
        r   r   %Expected list object from API, got %s)r   r   
isinstancer   	TypeErrorrI   r!   r   r   resultr&   r&   r'   list6  s    
zReader.listc                    s:   | j d|  |dI dH }t|ts6tdt|j |S )r   r   r   Nr   )r   r   r   r   r   rI   r!   r   r&   r&   r'   
list_asyncJ  s    
zReader.list_asyncrd   )r   r   r   c                 K   s*   d|   t|f }td| jd||dS )
        Updates a Reader object by setting the values of the parameters passed. Any parameters not provided will be left unchanged.
        r   r   r   r   r   r   r   r   r   r&   r&   r'   modify^  s    zReader.modifyc                    s0   d|   t|f }td| jd||dI dH S )r   r   r   r   r   Nr   r   r&   r&   r'   modify_asynco  s    
zReader.modify_asyncrp   c                 K   s"   t d| jddjt|d|dS )7
        Initiates a payment flow on a Reader.
        r   r   4/v1/terminal/readers/{reader}/process_payment_intentr   r   r   r   r&   r&   r'   _cls_process_payment_intent  s    z"Reader._cls_process_payment_intentc                 K   s   dS r   Nr&   r   r&   r&   r'   rK     s    zReader.process_payment_intentc                 K   s   dS r   r&   r   r&   r&   r'   rK     s    r   c              	   K   s(   t d| jddjt| dd|dS )r   r   r   r   r   r   r   r   r   r&   r&   r'   rK     s    c                    s(   t d| jddjt|d|dI dH S )r   r   r   r   r   r   Nr   r   r&   r&   r'   !_cls_process_payment_intent_async  s    
z(Reader._cls_process_payment_intent_asyncc                    s   dS r   r&   r   r&   r&   r'   process_payment_intent_async  s    z#Reader.process_payment_intent_asyncc                    s   dS r   r&   r   r&   r&   r'   r     s    r   c              	      s.   t d| jddjt| dd|dI dH S )r   r   r   r   r   r   r   Nr   r   r&   r&   r'   r     s    
rz   c                 K   s"   t d| jddjt|d|dS )<
        Initiates a setup intent flow on a Reader.
        r   r   2/v1/terminal/readers/{reader}/process_setup_intentr   r   r   r   r&   r&   r'   _cls_process_setup_intent  s    z Reader._cls_process_setup_intentc                 K   s   dS r   Nr&   r   r&   r&   r'   rL      s    zReader.process_setup_intentc                 K   s   dS r   r&   r   r&   r&   r'   rL   
  s    r   c              	   K   s(   t d| jddjt| dd|dS )r   r   r   r   r   r   r   r   r   r&   r&   r'   rL     s    c                    s(   t d| jddjt|d|dI dH S )r   r   r   r   r   r   Nr   r   r&   r&   r'   _cls_process_setup_intent_async%  s    
z&Reader._cls_process_setup_intent_asyncc                    s   dS r   r&   r   r&   r&   r'   process_setup_intent_async7  s    z!Reader.process_setup_intent_asyncc                    s   dS r   r&   r   r&   r&   r'   r   A  s    r   c              	      s.   t d| jddjt| dd|dI dH S )r   r   r   r   r   r   r   Nr   r   r&   r&   r'   r   J  s    
r   c                 K   s"   t d| jddjt|d|dS )0
        Initiates a refund on a Reader
        r   r   ,/v1/terminal/readers/{reader}/refund_paymentr   r   r   r   r&   r&   r'   _cls_refund_payment\  s    zReader._cls_refund_paymentc                 K   s   dS r   Nr&   r   r&   r&   r'   rM   n  s    zReader.refund_paymentc                 K   s   dS r   r&   r   r&   r&   r'   rM   x  s    r   c              	   K   s(   t d| jddjt| dd|dS )r   r   r   r   r   r   r   r   r   r&   r&   r'   rM     s    c                    s(   t d| jddjt|d|dI dH S )r   r   r   r   r   r   Nr   r   r&   r&   r'   _cls_refund_payment_async  s    
z Reader._cls_refund_payment_asyncc                    s   dS r   r&   r   r&   r&   r'   refund_payment_async  s    zReader.refund_payment_asyncc                    s   dS r   r&   r   r&   r&   r'   r     s    r   c              	      s.   t d| jddjt| dd|dI dH S )r   r   r   r   r   r   r   Nr   r   r&   r&   r'   r     s    
r   c                 K   s   | |fi |}|   |S ),
        Retrieves a Reader object.
        )refreshr   r   r   instancer&   r&   r'   retrieve  s    zReader.retrievec                    s"   | |fi |}|  I dH  |S )r   N)Zrefresh_asyncr   r&   r&   r'   retrieve_async  s    zReader.retrieve_asyncr   c                 K   s"   t d| jddjt|d|dS );
        Sets reader display to show cart details.
        r   r   0/v1/terminal/readers/{reader}/set_reader_displayr   r   r   r   r&   r&   r'   _cls_set_reader_display  s    zReader._cls_set_reader_displayc                 K   s   dS r   Nr&   r   r&   r&   r'   rN     s    zReader.set_reader_displayc                 K   s   dS r   r&   r   r&   r&   r'   rN     s    r   c              	   K   s(   t d| jddjt| dd|dS )r   r   r   r   r   r   r   r   r   r&   r&   r'   rN     s    c                    s(   t d| jddjt|d|dI dH S )r   r   r   r   r   r   Nr   r   r&   r&   r'   _cls_set_reader_display_async  s    
z$Reader._cls_set_reader_display_asyncc                    s   dS r   r&   r   r&   r&   r'   set_reader_display_async)  s    zReader.set_reader_display_asyncc                    s   dS r   r&   r   r&   r&   r'   r   3  s    r   c              	      s.   t d| jddjt| dd|dI dH S )r   r   r   r   r   r   r   Nr   r   r&   r&   r'   r   <  s    
c                   @   s   e Zd ZU ed ed< eeed ddddZe	e
eed ddddZe	ed dd	d
dZeded dd	ddZeeed ddddZe	e
eed ddddZe	ed dd	ddZeded dd	ddZdS )zReader.TestHelpersr   _resource_clsrf   r   c                 K   s"   t d| jddjt|d|dS )
            Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction.
            r   r   A/v1/test_helpers/terminal/readers/{reader}/present_payment_methodr   r   r   r   r&   r&   r'   _cls_present_payment_methodQ  s    	z.Reader.TestHelpers._cls_present_payment_methodc                 K   s   dS r   Nr&   r   r&   r&   r'   present_payment_methode  s    z)Reader.TestHelpers.present_payment_methodr   c                 K   s   dS r   r&   r   r&   r&   r'   r   o  s    r   c              	   K   s,   t d| jjddjt| jdd|dS )r   r   r   r   r   r   r   )r   resourcer   r   r   r   r   r&   r&   r'   r   x  s    c                    s(   t d| jddjt|d|dI dH S )r   r   r   r   r   r   Nr   r   r&   r&   r'   !_cls_present_payment_method_async  s    	
z4Reader.TestHelpers._cls_present_payment_method_asyncc                    s   dS r   r&   r   r&   r&   r'   present_payment_method_async  s    z/Reader.TestHelpers.present_payment_method_asyncc                    s   dS r   r&   r   r&   r&   r'   r     s    r   c              	      s2   t d| jjddjt| jdd|dI dH S )r   r   r   r   r   r   r   N)r   r   r   r   r   r   r   r&   r&   r'   r     s    
N)r!   r"   r#   r   r%   classmethodr4   r   r   r   staticmethodr   r   r   r   r&   r&   r&   r'   TestHelpersN  sJ   
r   c                 C   s
   |  | S )N)r   )r   r&   r&   r'   test_helpers  s    zReader.test_helpersN)Or!   r"   r#   __doc__r   r   r   r%   r   rQ   r   rU   rZ   r\   rc   re   rk   r   rn   ro   rr   rx   ry   r|   r~   r   r   r   r   r   r   r   r4   r,   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rK   r   r   r   rL   r   r   r   rM   r   r   r   r   r   rN   r   r   r	   r   propertyr   r-   r&   r&   r&   r'   r      s   
 >-$

u
r   N)0Zstripe._createable_api_resourcer   Zstripe._deletable_api_resourcer   Zstripe._expandable_fieldr   Zstripe._list_objectr   Zstripe._listable_api_resourcer   Zstripe._request_optionsr   Zstripe._stripe_objectr   Zstripe._test_helpersr	   Zstripe._updateable_api_resourcer
   Zstripe._utilr   r   typingr   r   r   r   r   r   Ztyping_extensionsr   r   r   r   r   r   Zstripe._charger   Zstripe._payment_intentr   Zstripe._refundr   Zstripe._setup_intentr   Zstripe.terminal._locationr   r   r   r   r&   r&   r&   r'   <module>   sF     	
           6