
    NhU                     0   d dl mZ ddlT d dlmZmZ d dlZd dlZddlT d dl	m
Z
mZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZ  G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z  G d dej                  Z! G d dej                  Z" G d  d!ej                  Z# G d" d#ej                  Z$ G d$ d%ej                  Z% G d& d'ej                  Z& G d( d)ej                  Z' G d* d+ej                  Z( G d, d-ej                  Z) G d. d/ej                  Z* G d0 d1ej                  Z+ G d2 d3ej                  Z, G d4 d5ej                  Z- G d6 d7ej                  Z. G d8 d9ej                  Z/ G d: d;ej                  Z0 G d< d=ej                  Z1 G d> d?ej                  Z2 G d@ dAej                  Z3 G dB dCej                  Z4 G dD dEej                  Z5 G dF dGej                  Z6 G dH dIej                  Z7dS )J    )serializers   )*)Group
PermissionN)	subscribePlan)extend_schema_field)MainCategoryPlanPurchase)Cart)	timedeltadatetime)UniqueValidatorc                   .    e Zd Z G d d          Zd ZdS )AdminRegisterserc                   &    e Zd ZeZg dZdddiiZdS )AdminRegisterser.Meta)idemailpassword	full_name
created_atr   	read_onlyTN__name__
__module____qualname__Usermodelfieldsextra_kwargs     2/var/www/html/e360mart/login_signup/serializers.pyMetar      s-        GGG"[$$78r$   r&   c                 .    t          j        j        di |S )Nr#   )r   objectscreate_superuser)selfvalidated_datas     r%   createzAdminRegisterser.create   s    |,>>~>>>r$   Nr   r   r   r&   r,   r#   r$   r%   r   r      sK        9 9 9 9 9 9 9 9
? ? ? ? ?r$   r   c                   F    e Zd Z ej                    Z G d d          ZdS )AdminLoginSerc                       e Zd ZeZg dZdS )AdminLoginSer.Metar   r   r   Nr   r   r   r   r    r!   r#   r$   r%   r&   r1      s        ,,,r$   r&   Nr   r   r   r   
EmailFieldr   r&   r#   r$   r%   r/   r/      sL        "K"$$E- - - - - - - - - -r$   r/   c                   L    e Zd Z ej                    Z G d d          Zd ZdS )AdminPasswordResetRequestSerc                       e Zd ZeZddgZdS )!AdminPasswordResetRequestSer.Metar   r   Nr3   r#   r$   r%   r&   r9   &   s        r$   r&   c                     t           j                            |                                          st	          j        d          |S N)r   z%No user is associated with this emailr   r(   filterexistsr   ValidationErrorr*   values     r%   validate_emailz+AdminPasswordResetRequestSer.validate_email*   A    |"""//6688 	W-.UVVVr$   Nr   r   r   r   r5   r   r&   rB   r#   r$   r%   r7   r7   #   s[        "K"$$E! ! ! ! ! ! ! !    r$   r7   c                   h    e Zd Z ej                    Z ej                    Z ej                    ZdS )AdminPasswordResetSerN)	r   r   r   r   r5   r   	CharFieldr   confirm_passwordr#   r$   r%   rF   rF   0   sA        "K"$$E${$&&H,{,..r$   rF   c                       e Zd Z ej        ej                            d                    Z ej        e	j        
                                d          Zd ZdS )UserPermissionSerT)	is_vendor)queryset)rL   manyc                 Z    |d         }|d         }|j                             |           |S )Nuser
permission)user_permissionsset)r*   r+   rO   permissionss       r%   r,   zUserPermissionSer.create?   s6    f%$\2
 	!!+... r$   N)r   r   r   r   PrimaryKeyRelatedFieldr   r(   r=   rO   r   allrP   r,   r#   r$   r%   rJ   rJ   7   s        -;-$$t$44  D 43#''))  J
 
 
 
 
r$   rJ   c                   (    e Zd Z G d d          ZdS )PermissionSerializerc                       e Zd ZeZg dZdS )PermissionSerializer.Meta)r   namecodenameN)r   r   r   r   r    r!   r#   r$   r%   r&   rY   M   s        +++r$   r&   Nr   r   r   r&   r#   r$   r%   rW   rW   L   s<        , , , , , , , , , ,r$   rW   c                   (    e Zd Z G d d          ZdS )GroupSerializerc                       e Zd ZeZg dZdS )GroupSerializer.Meta)r   rZ   rS   N)r   r   r   r   r    r!   r#   r$   r%   r&   r`   S   s        ...r$   r&   Nr\   r#   r$   r%   r^   r^   R   s<        / / / / / / / / / /r$   r^   c                   r    e Zd Z ej        dd          Z ej        dd          Z ej        dd          Z ej        d          Z	 ej
                    Z ej
                    Z eej                  d             Z eej                  d             Z G d d          Zd Zd	 Z fd
Z xZS )VendorRegisterSerT
write_onlyrequiredr   c                     t           j                            |                              d                                          }|r|j        r|j        j        S d S N)vendorz-idr   r(   r=   order_byfirstcategories_planrZ   r*   objsubscriptions      r%   get_plan_namezVendorRegisterSer.get_plan_namea   X    #+22#2>>GGNNTTVV 	5L8 	5/44tr$   c                 |    t           j                            |                                          }|r|j        S d S N)rO   r   r(   r=   rl   
is_expiredrn   s      r%   get_is_expiredz VendorRegisterSer.get_is_expiredm   =     (//S/99??AA 	+**tr$   c                       e Zd ZeZg dZdS )VendorRegisterSer.Meta)"r   r   count	plan_namerv   r   	is_activeis_staffphoneaddressapartment_numberstreet_namecitystatezip_codet_and_clocationlatlongrK   main_categoryis_buyerr   	password2	shop_namedoc1doc2doc3doc4imageis_documentdesignstatusr   Nr3   r#   r$   r%   r&   rz   t   s$        #
 #
 #
r$   r&   c                     |                     d          }|                     d          }|s|r||k    rt          j        ddi          |                    dd            |S )Nr   r   Password fields didn't match.)getr   r?   pop)r*   attrsr   r   s       r%   validatezVendorRegisterSer.validate   sw    99Z((IIk**	 	y 	9$$!1!@A   			+t$$$r$   c                    |                     dd           }|                     dd           }|r#t          j                            |          |d<   t	          di |}|r|                    |           |                                 |S )Nr   r   )r   r#   )r   r   r(   r   r   set_passwordsave)r*   r+   r   main_category_idrO   s        r%   r,   zVendorRegisterSer.create   s    !%%j$77)--otDD 	\.:.B.F.FJZ.F.[.[N?+%%n%% 	(h'''		r$   c                     t                                          |          }|j        |d<   |                     |          |d<   |                     |          |d<   |S )Notpr|   rv   )superto_representationr   rq   rw   )r*   instancerepresentation	__class__s      r%   r   z#VendorRegisterSer.to_representation   s\    228<< (u&*&8&8&B&B{#'+':':8'D'D|$r$   )r   r   r   r   rG   r   r   r   IntegerFieldr{   SerializerMethodFieldr|   rv   r
   rq   BooleanFieldrw   r&   r   r,   r   __classcell__r   s   @r%   rb   rb   Y   sK       ${$tDDDH%%EEEI)K)TDIIIM$K$t444E1133I2244J.//  0/ 122  32%
 %
 %
 %
 %
 %
 %
 %
N
 
 
	 	 	        r$   rb   c                   F    e Zd Z ej                    Z G d d          ZdS )VendorRegisterOTPVerifySerc                       e Zd ZeZg dZdS )VendorRegisterOTPVerifySer.Metar   r   r   Nr3   r#   r$   r%   r&   r              '''r$   r&   Nr4   r#   r$   r%   r   r      L        "K"$$E( ( ( ( ( ( ( ( ( (r$   r   c                   L    e Zd Z ej                    Z G d d          Zd ZdS )VendorPasswordResetRequestSerc                       e Zd ZeZg dZdS )"VendorPasswordResetRequestSer.Metar   r   r   Nr3   r#   r$   r%   r&   r              )))r$   r&   c                     t           j                            |                                          st	          j        d          |S r;   r<   r@   s     r%   rB   z,VendorPasswordResetRequestSer.validate_email   rC   r$   NrD   r#   r$   r%   r   r      [        "K"$$E* * * * * * * *    r$   r   c                   N    e Zd Z ej                    Z ej        d          ZdS )VendorPasswordResetOTPVerifySer   
max_lengthNr   r   r   r   r5   r   rG   r   r#   r$   r%   r   r      3        "K"$$E
+
1
-
-
-CCCr$   r   c                       e Zd Z ej                    Z ej        dd          Z ej        dd          Z G d d          Z	d Z
dS )VendorPasswordResetSerTrc   c                       e Zd ZeZg dZdS )VendorPasswordResetSer.Metar   r   r   rH   Nr3   r#   r$   r%   r&   r              @@@r$   r&   c                     |d         |d         k    rt          j        ddi          |                    d           |S )Nr   rH   r   r   r?   r   r*   r   s     r%   r   zVendorPasswordResetSer.validate   sP    &8 999-<=   			$%%%r$   Nr   r   r   r   r5   r   rG   r   rH   r&   r   r#   r$   r%   r   r      s        "K"$$E${$tDDDH,{,tLLLA A A A A A A A    r$   r   c                       e Zd Z ej        d          Z ej                    Z G d d          Z e	ej
                  d             ZdS )VendorLoginSerTrf   c                   &    e Zd ZeZg dZdddiiZdS )VendorLoginSer.Meta)r   r   r   doc1_urlr   r   rd   TNr   r#   r$   r%   r&   r      s-        @@@t 45r$   r&   c                     | j                             d          }|j        r|                    |j        j                  S dS )Nrequest )contextr   r   build_absolute_uriurlr*   ro   r   s      r%   get_doc1_urlzVendorLoginSer.get_doc1_url   s>    ,""9--8 	<--chl;;;rr$   N)r   r   r   r   r   r   r5   r   r&   r
   URLFieldr   r#   r$   r%   r   r      s        0{04@@@H"K"$$E6 6 6 6 6 6 6 6
 -..  /.  r$   r   c                   J    e Zd Z ej        d          Z G d d          ZdS )VendorProfileSerTrf   c                       e Zd ZeZdZdS )VendorProfileSer.Meta__all__Nr3   r#   r$   r%   r&   r   
          r$   r&   Nr   r   r   r   r   r{   r&   r#   r$   r%   r   r     Q        $K$t444E         r$   r   c                        e Zd Z ej        dddd          Z ej        dddd          Z ej        ddd          Z ej        dd          Z G d d          Z	d	 Z
d
 Z fdZd Z fdZ xZS )BuyerRegisterSerTF)rd   re   allow_blank
allow_nulld   )r   r   r   rc   c                       e Zd ZeZg dZdS )BuyerRegisterSer.Meta)r   r   r   r   r   r   r   r   r   r   r   r   rK   r   r   r   invited_by_codereferral_coder   r   total_pointsr   Nr3   r#   r$   r%   r&   r     s$        
 
 
r$   r&   c                    |                     d          }|                     d          }|                     d          }|s|r||k    rt          j        ddi          |r^t          j                            d|                                          }|r|j        s|j        st          j        ddi          ||d	<   |	                    dd            |S )
Nr   r   r   r   T)r   r   r   z+Invalid referral code or user not verified.referral_user_obj)
r   r   r?   r   r(   r=   rl   sso_idotp_verifiedr   )r*   r   r   r   r   referral_users         r%   r   zBuyerRegisterSer.validate;  s
   99Z((IIk**	))$566 	y 	9$$!1!@A    	7 L//- 0   egg	  ! )= mF` !1$&ST   *7E%&		+t$$$r$   c                 V   |                     dd           }|                     dd            |                     dd           }|r||d<   t          di |}d|_        d|_        |j        st                      |_        |r|                    |           |                                 |S )Nr   r   r   referred_byTr#   )r   r   r}   r~   r   generate_unique_referral_coder   r   )r*   r+   r   r   rO   s        r%   r,   zBuyerRegisterSer.createa  s    !%%j$77,d333&**+>EE 	:,9N=)%%n%%! 	A!>!@!@D 	(h'''		r$   c                     |                     dd           }|r|                    |           t                                          ||          S )Nr   )r   r   r   update)r*   r   r+   r   r   s       r%   r   zBuyerRegisterSer.update~  sL    !%%j$77 	,!!(+++ww~~h777r$   c                 F    |D ]}| j                             |d           dS )z,Remove specified fields from the serializer.N)r!   r   )r*   fields_to_removefields      r%   remove_fieldszBuyerRegisterSer.remove_fields  s4    % 	) 	)EKOOE4((((	) 	)r$   c                     t                                          |          }|                    d          }|                    d          }|r#|r!t          |          t          |          g|d<   |S )Nr   r   r   )r   r   r   float)r*   r   r   r   r   r   s        r%   r   z"BuyerRegisterSer.to_representation  sr    228<<  ''!!&)) 	C4 	C*/**eDkk)BN:&r$   )r   r   r   r   rG   r   r   r   r   r&   r   r,   r   r   r   r   r   s   @r%   r   r     s!       ${$%Td  H &%%Td  I %{$RVWWWH+k+teLLLO
 
 
 
 
 
 
 
B$ $ $L  :8 8 8 8 8) ) )
        r$   r   c                   F    e Zd Z ej                    Z G d d          ZdS )BuyerRegisterOTPVerifySerc                       e Zd ZeZg dZdS )BuyerRegisterOTPVerifySer.Metar   Nr3   r#   r$   r%   r&   r     r   r$   r&   Nr4   r#   r$   r%   r   r     r   r$   r   c                   L    e Zd Z ej                    Z G d d          Zd ZdS )BuyerPasswordResetRequestSerc                       e Zd ZeZg dZdS )!BuyerPasswordResetRequestSer.Metar   Nr3   r#   r$   r%   r&   r    r   r$   r&   c                     t           j                            |                                          st	          j        d          |S r;   r<   r@   s     r%   rB   z+BuyerPasswordResetRequestSer.validate_email  rC   r$   NrD   r#   r$   r%   r  r    r   r$   r  c                   N    e Zd Z ej                    Z ej        d          ZdS )BuyerPasswordResetOTPVerifySerr   r   Nr   r#   r$   r%   r  r    r   r$   r  c                       e Zd Z ej                    Z ej        dd          Z ej        dd          Z G d d          Z	d Z
dS )BuyerPasswordResetSerTrc   c                       e Zd ZeZg dZdS )BuyerPasswordResetSer.Metar   Nr3   r#   r$   r%   r&   r
    r   r$   r&   c                     |d         |d         k    rt          j        ddi          |                    d           |S )Nr   rH   zPasswords do not match.r   r   s     r%   r   zBuyerPasswordResetSer.validate  sG    &8 999-z;T.UVVV		$%%%r$   Nr   r#   r$   r%   r  r    s        "K"$$E${$tDDDH,{,tLLLA A A A A A A A    r$   r  c                   F    e Zd Z ej                    Z G d d          ZdS )BuyerLoginSerc                       e Zd ZeZg dZdS )BuyerLoginSer.Metar2   Nr3   r#   r$   r%   r&   r    s        ,,,r$   r&   Nr4   r#   r$   r%   r  r    sL        "K"$$E- - - - - - - - - -r$   r  c                   J    e Zd Z ej        d          Z G d d          ZdS )BuyerProfileSerTrf   c                       e Zd ZeZdZdS )BuyerProfileSer.Metar   Nr3   r#   r$   r%   r&   r    r   r$   r&   Nr   r#   r$   r%   r  r    r   r$   r  c                   t    e Zd Z ej        d          Z ej                    Z ej                    Z ej	        d e
ej                                        d          g          Z G d d          Z eej                  d             Z eej                  d	             Zd
 Z fdZ fdZ xZS )UserProfileSerializerTrf   u9   Another account is already registered with this e‑mail.)rL   message)re   
validatorsc                       e Zd ZeZdZdS )UserProfileSerializer.Metar   Nr3   r#   r$   r%   r&   r    r   r$   r&   c                     t           j                            |                              d                                          }|r|j        r|j        j        S d S rh   rj   rn   s      r%   rq   z#UserProfileSerializer.get_plan_name  rr   r$   c                 |    t           j                            |                                          }|r|j        S d S rt   ru   rn   s      r%   rw   z$UserProfileSerializer.get_is_expired  rx   r$   c                 t    | j                             d          }|                    |j        j                  S )Nr   )r   r   r   r   r   r   s      r%   r   z"UserProfileSerializer.get_doc1_url  s/    ,""9--))#(,777r$   c                    t                                          |          }|                    dd            |                    dg           }t          j                            |          }t          |d          j        }||d<   |                    d          }|                    d          }|r#|r!t          |          t          |          g|d<   | 
                    |          |d	<   |                     |          |d
<   |S )Nr   rQ   )id__inT)rM   r   r   r   r|   rv   )r   r   r   r   r   r(   r=   rW   datar   rq   rw   )	r*   r   r   permission_idsrS   serialized_permissionsr   r   r   s	           r%   r   z'UserProfileSerializer.to_representation  s   228<<	
 	
 	
 (++,>CC (//~/FF!5k!M!M!M!R-C)*  ''!!&)) 	C4 	C*/**eDkk)BN:&&*&8&8&B&B{#'+':':8'D'D|$r$   c                    | j                             d          }|r|j        nd }|                    dd          }|                    dd           }t                                          ||          }|rd|j        |j        d}t          |           |rd|z   }d||j        d	}t          |           |sl|rj|j	        rc|j
                            d
d          }	|	rEt          j                            |	                              t          j                               t                                          ||          S )Nr   r}   Freasonze360 Mart: Account approved!)subjectrZ   to_emailzReason is : zVendor account blockr$  bodyr%  r   T)flat)product__in)
deleted_at)r   r   rO   r   r   r   r   send_approval_emailsend_email_to_clientis_superuserproductsvalues_listr   r(   r=   r   now)r*   r   r+   r   rO   active_status
new_reasonr  r'  product_idsr   s             r%   r   zUserProfileSerializer.update  sf   ,""9--&0w||D '**;>>#''$77
77>>(N;; 	&9 *$N D
  %%% 	'!J.D1$N D !&&& 	_ 	_$*; 	_"+7747HHK _###<<CCx|~~C^^^ww~~
 
 	
r$   )r   r   r   r   r   r{   r   r|   rv   r5   r   r   r(   rU   r   r&   r
   rG   rq   r   rw   r   r   r   r   r   s   @r%   r  r    sZ       $K$t444E1133I2244J"K"O))++S  
  E        .//  0/ 122  328 8 8    &#
 #
 #
 #
 #
 #
 #
 #
 #
r$   r  c                   (    e Zd Z G d d          ZdS )VendorCategoryDeleteSerializerc                       e Zd ZeZddgZdS )#VendorCategoryDeleteSerializer.MetarO   categoryNr3   r#   r$   r%   r&   r7  5  s        *%r$   r&   Nr\   r#   r$   r%   r5  r5  4  s<        & & & & & & & & & &r$   r5  c                   .    e Zd Z G d d          Zd ZdS )UserCreateSerializerc                       e Zd ZeZg dZdS )UserCreateSerializer.Meta)r   r}   r~   r   r   r   rK   r   r   r   r   r   r   r   r   r{   r   r   Nr3   r#   r$   r%   r&   r<  <  s$        
 
 
r$   r&   c                    |                     dd          }|                     dd          }|rd|d<   d|d<   d|d<   d|d<   n|rd|d<   d|d<   d|d<   d                    t          j        t          j        t          j        z   d	
                    }t          di |}|                    |           |	                                 |j
        }d}d| d| d}d}	| d|	 }
||
|d}t          |           |S )NrK   Fr   Tr}   r~   r   r      )kzYour  account credentialsz
            <p>Welcome to e360!</p>
            <p>Your login details are below. Please login and submit your documents:</p>
            <p>
                <strong>Email:</strong> z0<br>
                <strong>Password:</strong> z
            </p>
            zL<a href="https://vendor.e360mart.com/sign-in/" target="_blank">Login URL</a>z
</br></br>r&  r#   )r   joinrandomchoicesstringascii_lettersdigitsr   r   r   r   
send_email)r*   r+   rK   r   r   rO   r   r$  r'  html_contentfull_messager  s               r%   r,   zUserCreateSerializer.createS  sY   "&&{E::	!%%j%88 	2*.N;')-N:&*.N;'-1N>** 	2*.N;')-N:&-1N>* 776>&*>*NRSTTTUU%%n%%(###		
- */	 
 -5   f88,88"LeLL4r$   Nr-   r#   r$   r%   r:  r:  :  sK        
 
 
 
 
 
 
 
.% % % % %r$   r:  c                       e Zd Z ej                    Z ej        d          Z ej        d          Z ej        d          Z	dS )ChangePasswordSer   r   N)
r   r   r   r   r5   r   rG   old_passwordr   rH   r#   r$   r%   rJ  rJ  {  s`        "K"$$E(;(C888L${$444H,{,<<<r$   rJ  c                   J    e Zd Z ej        d          Z G d d          ZdS )VendorProductSerTrf   c                       e Zd ZeZdZdS )VendorProductSer.Metar   Nr3   r#   r$   r%   r&   rP    r   r$   r&   Nr   r#   r$   r%   rN  rN    r   r$   rN  c                   (    e Zd Z G d d          ZdS )UserdataSerc                       e Zd ZeZg dZdS )UserdataSer.Meta)r   r   r   r   r   r   Nr3   r#   r$   r%   r&   rT    s        JJJr$   r&   Nr\   r#   r$   r%   rR  rR    sF        K K K K K K K K K Kr$   rR  c                   (    e Zd Z G d d          ZdS )UserSerc                       e Zd ZeZg dZdS )UserSer.Meta)r   r   r   r{   r-  r   rK   r   r   r   r   r   r   r   r   Nr3   r#   r$   r%   r&   rX    s$        
 
 
r$   r&   Nr\   r#   r$   r%   rV  rV    s<        
 
 
 
 
 
 
 
 
 
r$   rV  c                   ,    e Zd Z ej                    ZdS )UserDeletionSerializerN)r   r   r   r   r5   r   r#   r$   r%   rZ  rZ    s        "K"$$EEEr$   rZ  c                   (    e Zd Z G d d          ZdS )UserSerProductc                       e Zd ZeZg dZdS )UserSerProduct.Meta)r   r   r   Nr3   r#   r$   r%   r&   r^    s        &&&r$   r&   Nr\   r#   r$   r%   r\  r\    s<        ' ' ' ' ' ' ' ' ' 'r$   r\  c                       e Zd Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z	 G d d          Z
d ZdS )RegisterSerializerT)re   c                       e Zd ZeZg dZdS )RegisterSerializer.Meta)	usernamer   r   r   r   r   rK   r   r   Nr3   r#   r$   r%   r&   rb    s$        

 

 

r$   r&   c                 T    t          di |}d|_        |                                 |S )NTr#   )r   
sso_statusr   )r*   r+   rO   s      r%   r,   zRegisterSerializer.create  s.    %%n%%		r$   N)r   r   r   r   r5   r   rG   r   r   r   r&   r,   r#   r$   r%   r`  r`    s        "K"D111E!K!4000E%%t444I"["D111F
 
 
 
 
 
 
 
    r$   r`  )8rest_frameworkr   modelsdjango.contrib.auth.modelsr   r   rA  rC  utilssuscription.modelsr   r	   drf_spectacular.utilsr
   product.modelsr   r   order.modelsr   r   r   rest_framework.validatorsr   ModelSerializerr   r/   r7   
SerializerrF   rJ   rW   r^   rb   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r5  r:  rJ  rN  rR  rV  rZ  r\  r`  r#   r$   r%   <module>rq     sx   & & & & & &     8 8 8 8 8 8 8 8       . . . . . . . . 5 5 5 5 5 5 5 5 5 5 5 5 5 5       ( ( ( ( ( ( ( ( 5 5 5 5 5 5
? ? ? ? ?{2 ? ? ?- - - - -K/ - - -
 
 
 
 
;#> 
 
 
/ / / / /K2 / / /    .   *, , , , ,;6 , , ,/ / / / /k1 / / /` ` ` ` `3 ` ` `F( ( ( ( (!< ( ( (
 
 
 
 
K$? 
 
 
. . . . .k&< . . .
    [8   $    [0   >    {2   B B B B B{2 B B BJ( ( ( ( ( ; ( ( (
 
 
 
 
;#> 
 
 
. . . . .[%; . . .
    K7   "- - - - -K/ - - -    k1   `
 `
 `
 `
 `
K7 `
 `
 `
F& & & & &[%@ & & &> > > > >;6 > > >B= = = = =. = = =    {-   K K K K K+- K K K
 
 
 
 
k) 
 
 
,% % % % %[3 % % %' ' ' ' '[0 ' ' '    4     r$   