+
    VjM                    2   ^ RI Ht ^ RIHt ^ RIHtHtHt ^ RIH	t	H
t
 ^ RIHt ^ RIHtHt ^ RIHt ^ RIHtHtHt ^ R	IHtHt ^ R
IHt ^ RIHt ^ RIHt ^ RI H!t! ^ RI"H#t#H$t$H%t%H&t&H't'H(t( ^ RI)H*t* ^ RI+H,t, ]'       d   ^ RIH-t- ]! R]R7      t. ! R R]].,          4      t/ ! R R]/].,          ]P`                  ].,          4      t1]! R]R7      t2]! R]R7      t3 ! R R]/]2,          ]]2]33,          4      t4 ! R R]4]2]33,          ]Pj                  ]2]33,          4      t6 ! R R]4]2]33,          ]Pn                  ]2]33,          4      t8 ! R  R!]4]2]33,          ]4      t9 ! R" R#]4]2]33,          ]4      t: ! R$ R%]1].,          4      t; ! R& R']1].,          4      t<];t=R(# ))    )annotations)deepcopy)AnyTypeVarTYPE_CHECKING)IterableSequence)forms)FieldModel)admin)BaseModelAdminInlineModelAdminflatten_fieldsets)GenericStackedInlineGenericTabularInline)BaseInlineFormSet)HttpRequest)settings)
translator)build_css_classbuild_localized_fieldnameget_languageget_language_bidiget_translation_fieldsunique)ClearableWidgetWrapper)_ListOrTuple)_FieldsetSpec_ModelT)boundc                     a  ] tR t^$t$ / tR]R&   RtR V 3R lltRR R lltR R lt	R	 V 3R
 llt
R R ltR R ltRR R lltR R ltR R ltR R ltRR R lltRR R lltRR R lltRtV ;t# ) TranslationBaseModelAdminzdict[str, bool]_orig_was_requiredc               $    V ^8  d   QhRRRRRR/#    argsr   kwargsreturnNone )formats   "K/var/www/idalgo/venv/lib/python3.14/site-packages/modeltranslation/admin.py__annotate__&TranslationBaseModelAdmin.__annotate__(   s!     * *c *S *T *    c                	   < \         SV `  ! V/ VB  \        P                  ! V P                  4      V n        V P                  4        R # N)super__init__r   get_options_for_modelmodel
trans_opts_patch_prepopulated_fieldsselfr(   r)   	__class__s   &*,r.   r5   "TranslationBaseModelAdmin.__init__(   s7    $)&)$::4::F'')r1   c               $    V ^8  d   QhRRRRRR/# r'   requestr   obj_ModelT | Noner*   z_FieldsetSpec | Noner,   )r-   s   "r.   r/   r0   -   s$      ")7	r1   c                	   V P                   '       gh   \        V P                  R 4      '       dL   V P                  P                  P                   '       d&   V P                  P                  P                   V n         \	        V RR4      '       d   Vf   V P
                  MV P                  pV'       d   V P                  V4      # V P                   '       d&   RRV P                  V P                  W4      4      /3.# R# )_metaadd_fieldsetsNfields)
rF   hasattrformrD   getattrrE   	fieldsets_patch_fieldsetsreplace_orig_field
get_fields)r;   r@   rA   rJ   s   &&& r.   _get_declared_fieldsets1TranslationBaseModelAdmin._get_declared_fieldsets-   s     {{{wtyy'::tyy?U?U?U))//00DK t_d33  	
 ((33[[[Hd&=&=doog>[&\]^__r1   c                    V ^8  d   QhRRRR/# )r'   rJ   r   r*   r,   )r-   s   "r.   r/   r0   ?   s      - M r1   c                	z    \        V4      pV F)  w  r4R V9   g   K  V P                  VR ,          4      VR &   K+  	  V# rF   )listrL   )r;   rJ   fieldsets_newnamedcts   &&   r.   rK   *TranslationBaseModelAdmin._patch_fieldsets?   s>    Y"ID3 $ 7 7H FH # r1   c               (    V ^8  d   QhRRRRRRRR/# )	r'   db_fieldr   r@   r   r)   r   r*   zforms.Field | Noner,   )r-   s   "r.   r/   r0   F   s,      (3?B	r1   c                	b   < \         SV `  ! W3/ VB ;p'       d   V P                  ! WV3/ VB  V# r3   )r4   formfield_for_dbfieldpatch_translation_field)r;   rY   r@   r)   fieldr<   s   &&&, r.   r[   /TranslationBaseModelAdmin.formfield_for_dbfieldF   s9     G1(NvNN5N(('LVLr1   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r'   rY   r   r]   forms.Fieldr@   r   r)   r   r*   r+   r,   )r-   s   "r.   r/   r0   M   sB     DV DVDV&1DV<GDVSVDV	DVr1   c                	  a VP                   V P                  P                  9   d^   VP                  '       dL   R Vn        RVn        RV P
                  RP                  VP                  P                  VP                   4      &    VP                  pV P                  ! WS3/ VB pVf   R# \        VP                  4      Vn        VP                  P                  p \        V P                  P                  P                  VP                   ,          4      Vn        \!        VP                  \"        4      '       d   VP                  V4      Vn        TP                   T P*                  9   d   ^ RIHpHo TP2                  p	\5        T	S4      '       dL   \6        ;QJ d!    . T3R lT	P8                   4       F  NK  	  5M! T3R lT	P8                   4       4      T	n        \#        RT	P:                  ,          Y3/ 4      Tn        TP<                  R8X  g   TP                   T P*                  9   dU   \!        TP                  \>        P@                  \>        PB                  34      '       d   \E        TP                  4      Tn        T PG                  T4      P                  PI                  RR	4      PK                  R
4      p
T
PM                  R4       T
PM                  \O        TP                   R4      4       \Q        TPR                  4      '       d   T
PM                  R4       TPR                  \T        PV                  8X  d   T
PM                  R4       TP                  '       gP   T P
                  PI                  RP                  TP                  P                  TP                   4      4      '       dX   R Tn        RTn        RTn        R Tn        \!        TP                  \D        4      '       d   TP                  P                  Tn        R
PY                  T
4      T PG                  T4      P                  R&   R#   \$        \&        \(        3 d     ELi ; i  \$         d     R# i ; i)FTz{}.{}N)NullableFieldNullCharFieldc              3  8   <"   T F  qS8w  g   K  Vx  K  	  R # 5ir3   r,   ).0brc   s   & r.   	<genexpr>DTranslationBaseModelAdmin.patch_translation_field.<locals>.<genexpr>q   s      1#7a;M#7s   
z
Nullable%sbothclass  mtzmt-fieldzmt-bidiz
mt-default)-rU   r8   
all_fieldsrequiredblankr$   r-   r7   rD   translated_fieldr[   r   widgetattrsrH   widgets
isinstancetypeAttributeError	TypeErrorKeyErrorboth_empty_values_fieldsmodeltranslation.formsrb   rc   r<   
issubclasstuple	__bases____name__empty_valuer
   	TextInputTextarear   _get_widget_from_fieldgetsplitappendr   r   languagemt_settingsDEFAULT_LANGUAGEjoin)r;   rY   r]   r@   r)   
orig_fieldorig_formfieldrs   rb   
form_classcss_classesrc   s   &&&&,      @r.   r\   1TranslationBaseModelAdmin.patch_translation_fieldM   s?    ==DOO666~~~!&"_c''x~~7K7KX]]([\9	V!22J "77
VvVN%#N$9$9:ELLL&&E'		(?(?
(PQellD11#(<<#6EL $"?"??O"__
j-88+05 1#-#7#7155 1#-#7#71 ,J( #' :#6#668SUW# $$.*//TEbEb2bU\\EOOU^^+LMM5ellC55e<BBFFwPRSYYZ]^Kt$x}}jIJ !2!233""9-  K$@$@@""<0!***d.E.E.I.INN:#3#3#9#9:??K/ /
 /4N++/N(%)EN"'EK!%,,0FGG',||':':@C@UD''.44W=S #Ix8   		s%   Q A5P3 3QQQQc                    V ^8  d   QhRRRR/# )r'   r]   r`   r*   r   r,   )r-   s   "r.   r/   r0      s        K  C  r1   c                	    \        VP                  \        P                  P                  4      '       d   VP                  P                  # VP                  # r3   )ru   rr   r   rt   RelatedFieldWidgetWrapper)r;   r]   s   &&r.   r   0TranslationBaseModelAdmin._get_widget_from_field   s7    ellEMM$K$KLL<<&&&<<r1   c                    V ^8  d   QhRRRR/# )r'   excludez_ListOrTuple[str] | Noner*   tuple[str, ...]r,   )r-   s   "r.   r/   r0      s     8 80H 8Tc 8r1   c                	   Vf   \        4       pV'       d@   \        V4      pV\        V P                  P                  P                  4       4      ,           # \        V P                  P                  P                  4       4      # r3   )r}   r8   rn   keys)r;   r   exclude_news   && r.   _exclude_original_fields2TranslationBaseModelAdmin._exclude_original_fields   s[    ?gG.Kt'A'A'F'F'H!IIIT__//44677r1   c                    V ^8  d   QhRRRR/# )r'   optionzIterable[str | Sequence[str]]r*   _ListOrTuple[str]r,   )r-   s   "r.   r/   r0      s     % %)F %K\ %r1   c                   V'       d   \        V4      pV F  pW0P                  P                  9   d(   VP                  V4      p\	        V4      W$V^,           % KD  \        V\        \         34      '       g   Kb  V Uu. uF!  qUV P                  P                  9   g   K  VNK#  	  up'       g   K  VP                  V4      pV P                  V4      W$V^,           % K  	  TpV# u upi )al  
Replaces each original field in `option` that is registered for
translation by its translation fields.

Returns a new list with replaced fields. If `option` contains no
registered fields, it is returned unmodified.

>>> self = TranslationAdmin()  # PyFlakes
>>> print(self.trans_opts.fields.keys())
['title',]
>>> get_translation_fields(self.trans_opts.fields.keys()[0])
['title_de', 'title_en']
>>> self.replace_orig_field(['title', 'url'])
['title_de', 'title_en', 'url']

Note that grouped fields are flattened. We do this because:

    1. They are hard to handle in the jquery-ui tabs implementation
    2. They don't scale well with more than a few languages
    3. It's better than not handling them at all (okay that's weak)

>>> self.replace_orig_field((('title', 'url'), 'email', 'text'))
['title_de', 'title_en', 'url_de', 'url_en', 'email_de', 'email_en', 'text']
)rS   r8   rn   indexr   ru   r}   rL   )r;   r   
option_newoptr   os   &&    r.   rL   ,TranslationBaseModelAdmin.replace_orig_field   s    2 fJ//444&,,S1E4J34OJuqy1eT]33 #G1DOO,F,F'FQQGG&,,S1E484K4KC4PJuqy1   F Hs   <C!C!c                   V ^8  d   QhRR/# r'   r*   r+   r,   )r-   s   "r.   r/   r0      s     7 7D 7r1   c                	\  a  R  V 3R llp/ pS P                   P                  4        Fz  w  r4VS P                  P                  9   d/   \        P
                   F  p\        W54      pV! WE4      W&&   K  	  KN  \        P                  ;'       g    \        4       pV! WE4      W#&   K|  	  VS n         R# )c               $    V ^8  d   QhRRRRRR/# )r'   sourceszSequence[str]langstrr*   r   r,   )r-   s   "r.   r/   JTranslationBaseModelAdmin._patch_prepopulated_fields.<locals>.__annotate__   s!     	4 	4m 	43 	4? 	4r1   c                B   <a R VV3R llp\        \        W 4      4      # )z0Append lang suffix (if applicable) to field listc                    V ^8  d   QhRRRR/# )r'   sourcer   r*   r,   )r-   s   "r.   r/   \TranslationBaseModelAdmin._patch_prepopulated_fields.<locals>.localize.<locals>.__annotate__   s      C C r1   c                V   < V SP                   P                  9   d   \        V S4      # V # r3   )r8   rn   r   )r   r   r;   s   &r.   append_lang[TranslationBaseModelAdmin._patch_prepopulated_fields.<locals>.localize.<locals>.append_lang   s'    T__7774VTBBr1   )r}   map)r   r   r   r;   s   &f r.   localizeFTranslationBaseModelAdmin._patch_prepopulated_fields.<locals>.localize   s     
 [233r1   N)	prepopulated_fieldsitemsr8   rn   r   AVAILABLE_LANGUAGESr   PREPOPULATE_LANGUAGEr   )r;   r   r   destr   r   keys   f      r.   r9   4TranslationBaseModelAdmin._patch_prepopulated_fields   s    	4 	4 9;!55;;=MDt111';;D3D?C/7/F', < #77II<>,4W,C#) > $7 r1   c               (    V ^8  d   QhRRRRRRRR/# )	r'   r@   r   rA   zModel | Noner)   r   r*   zdict[str, Any]r,   )r-   s   "r.   r/   r0      s,      ")5AD	r1   c                   V P                  W4      pVf   . pM\        V4      pVP                  V P                  W4      4       V'       gr   \	        V P
                  R4      '       dV   V P
                  P                  P                  '       d0   VP                  V P
                  P                  P                  4       V P                  V4      ;'       g    RpV P                  V4      pVP                  RV/4       V# )z2
Generic code shared by get_form and get_formset.
NrD   r   )get_excluderS   extendget_readonly_fieldsrG   rH   rD   r   rL   r   update)r;   r@   rA   r)   r   s   &&&, r.   _get_form_or_formset.TranslationBaseModelAdmin._get_form_or_formset   s     ""70?G7mGt//=>7499g66499??;R;R;R NN499??223 ))'2::d//8y'*+r1   c               $    V ^8  d   QhRRRRRR/# r?   r,   )r-   s   "r.   r/   r0      s$     : :":)7:	:r1   c                $    V P                  W4      # )Y
Generic get_fieldsets code, shared by
TranslationAdmin and TranslationInlineModelAdmin.
)rN   r;   r@   rA   s   &&&r.   "_get_fieldsets_pre_form_or_formset<TranslationBaseModelAdmin._get_fieldsets_pre_form_or_formset   s     ++G99r1   c               (    V ^8  d   QhRRRRRRRR/# )	r'   r@   r   rH   type[forms.ModelForm]rA   rB   r*   rS   r,   )r-   s   "r.   r/   r0      s2     	E 	E"	E*?	EFT	E		Er1   c                    V P                  VP                  P                  4       4      p\        V4      \        V P	                  W4      4      ,           pRRV P                  V4      /3.# )r   NrF   )rL   base_fieldsr   rS   r   )r;   r@   rH   rA   r   rF   s   &&&&  r.   #_get_fieldsets_post_form_or_formset=TranslationBaseModelAdmin._get_fieldsets_post_form_or_formset   s`     --d.>.>.C.C.EFk"T$*B*B7*P%QQ$"9"9&"ABCDDr1   c               $    V ^8  d   QhRRRRRR/# )r'   r@   r   rA   rB   r*   r   r,   )r-   s   "r.   r/   r0     s$     = ="=)7=	=r1   c                8    V P                  V P                  4      # )z)
Hook to specify custom readonly fields.
)rL   readonly_fieldsr   s   &&&r.   r   -TranslationBaseModelAdmin.get_readonly_fields  s     &&t';';<<r1   )rF   r   r8   r,   r3   )r   
__module____qualname____firstlineno__r$   __annotations__rz   r5   rN   rK   r[   r\   r   r   rL   r9   r   r   r   r   __static_attributes____classcell__r<   s   @r.   r#   r#   $   si    *,,!* *
$ DVL 8%N7,0:	E= =r1   r#   c                  p   a  ] tR tRtRtR V 3R lltR R ltR R ltRR	 V 3R
 llltRR R llt	Rt
V ;t# )TranslationAdmini  Fc               $    V ^8  d   QhRRRRRR/# r&   r,   )r-   s   "r.   r/   TranslationAdmin.__annotate__  s!     $ $c $S $T $r1   c                	H   < \         SV `  ! V/ VB  V P                  4        R # r3   )r4   r5   _patch_list_editabler:   s   &*,r.   r5   TranslationAdmin.__init__  s!    $)&)!!#r1   c                   V ^8  d   QhRR/# r   r,   )r-   s   "r.   r/   r     s     , ,d ,r1   c                	z   V P                   '       d   \        V P                   4      p\        V P                  4      pV P                    F`  pW0P                  P                  9   g   K  VP                  V4      pVP                  V4      p\        V4      pWaWD^,           % WbWU^,           % Kb  	  Wn         W n        R# R# )   N)list_editablerS   list_displayr8   rn   r   r   )r;   editable_newdisplay_newr]   r   display_indextranslation_fieldss   &      r.   r   %TranslationAdmin._patch_list_editable  s     2 23Lt001K++OO666(..u5E$/$5$5e$<M)?)F&6H3EW0AB , ". + r1   c                    V ^8  d   QhRRRR/# )r'   rJ   rS   r*   r,   )r-   s   "r.   r/   r   *  s     < <$ <4 <r1   c                	$  aa V P                   R J Ed   \        V4      o\        R V P                  P	                  4        4       4      pV Uu. uFe  pW0P                  P
                  Jg   K  VP                  '       g   K2  \        VR4      '       d   KF  VP                  S9   g   KY  VP                  NKg  	  ppV'       d   RRV/3.M. p/ pV P                  P                  P                  4        F  w  rg\        VR R7       Uu. uF  q3P                  NK  	  upo\        ;QJ d    V3R lS 4       F  '       g   K   R M	  RM! V3R lS 4       4      '       g   Kn  V P                  P                  P                  V4      P                   P#                  4       pVRSR	R/3WV&   K  	  \%        V3R
 lV P                  P&                   4       4      p	V	 F#  p
VP)                  VP+                  V
4      4       K%  	  V'       d   Q hV# u upi u upi )Tc              3  L   "   T F  qP                   '       g   K  Vx  K  	  R # 5ir3   )concrete)re   fs   & r.   rg   4TranslationAdmin._group_fieldsets.<locals>.<genexpr>3  s     L'=!AA'=s   $
$rq   rk   rF   c                    V P                   # r3   )rU   )xs   &r.   <lambda>3TranslationAdmin._group_fieldsets.<locals>.<lambda>R  s    WXW]W]r1   )r   c              3  ,   <"   T F	  qS9   x  K  	  R # 5ir3   r,   )re   r   trans_fieldnamess   & r.   rg   r   S  s     J6I,,6Is   Fclassesc              3     <"   T FB  p\        VR 4      '       g   K  VP                  S9   g   K*  VP                  P                  x  KD  	  R# 5i)rq   N)rG   rU   rq   )re   r   flattened_fieldsetss   & r.   rg   r   ]  sC      ")A101 (67ff@S6S (""'')s   AAA)zmt-fieldset)group_fieldsetsr   sortedoptsrM   
auto_fieldeditablerG   rU   r8   rn   r   anyr7   rD   	get_fieldverbose_name
capitalizer   rF   r   pop)r;   rJ   rF   r   untranslated_fieldstemp_fieldsetsr   trans_fieldslabelfields_order
field_namer   r   s   &&         @@r.   _group_fieldsets!TranslationAdmin._group_fieldsets*  s   
 4'"3I"> Ltyy';';'=LLF  #A YY111	  

  $A'9:  "55    #0 '	 !#67    N,0OO,F,F,L,L,N(
4:<M]4^#_4^qFF4^#_ 3J6IJ333J6IJJJ !JJ,,66zBOOZZ\E!#3Y@PQ2N. -O " "))" L
 +
  !3!3J!?@ +%%%e#< $`s$   H-HHH(HHc               (    V ^8  d   QhRRRRRRRR/# )	r'   r@   r   rA   rB   r)   r   r*   r   r,   )r-   s   "r.   r/   r   h  s,     8 8"8)78JM8	8r1   c                	L   < V P                   ! W3/ VB p\        SV `  ! W3/ VB # r3   )r   r4   get_formr;   r@   rA   r)   r<   s   &&&,r.   r  TranslationAdmin.get_formh  s/     **7B6Bw777r1   c               $    V ^8  d   QhRRRRRR/# )r'   r@   r   rA   rB   r*   r   r,   )r-   s   "r.   r/   r   n  s"     
 
[ 
~ 
Q^ 
r1   c                	    V P                  W4      ;'       g3    V P                  V P                  WP                  WR R7      V4      4      # NrR   )r   r  r   r  r   s   &&&r.   get_fieldsetsTranslationAdmin.get_fieldsetsn  sM    66wD 
 
H]H]44wDA3I
 	
r1   )r   r   r3   )r   r   r   r   r   r5   r   r  r  r  r   r   r   s   @r.   r   r     s1    O$ $,<|8 8
 
r1   r   _ChildModelT_ParentModelTc                  B   a  ] tR tRtRR V 3R llltRR R lltRtV ;t# )TranslationInlineModelAdminiz  c               (    V ^8  d   QhRRRRRRRR/# )	r'   r@   r   rA   z_ParentModelT | Noner)   r   r*   ztype[BaseInlineFormSet]r,   )r-   s   "r.   r/   (TranslationInlineModelAdmin.__annotate__}  s,     ; ;";)=;PS;	 ;r1   c                	L   < V P                   ! W3/ VB p\        SV `  ! W3/ VB # r3   )r   r4   get_formsetr  s   &&&,r.   r   'TranslationInlineModelAdmin.get_formset}  s/     **7B6Bw"7:6::r1   c                    V ^8  d   QhRRRR/# )r'   r@   r   rA   z_ChildModelT | Noner,   )r-   s   "r.   r/   r    s     L L[ L7J Lr1   c                	    V P                  W4      pV'       d   V# V P                  WR R7      P                  pV P                  WV4      # r  )r   r   rH   r   )r;   r@   rA   declared_fieldsetsrH   s   &&&  r.   r  )TranslationInlineModelAdmin.get_fieldsets  sL     "DDWR%%T:??77sKKr1   r,   r3   )r   r   r   r   r   r  r   r   r   s   @r.   r  r  z  s    ; ;L Lr1   r  c                      ] tR tRtRtR# )TranslationTabularInlinei  r,   Nr   r   r   r   r   r,   r1   r.   r'  r'         	r1   r'  c                      ] tR tRtRtR# )TranslationStackedInlinei  r,   Nr(  r,   r1   r.   r+  r+    r)  r1   r+  c                      ] tR tRtRtR# )TranslationGenericTabularInlinei  r,   Nr(  r,   r1   r.   r-  r-         	r1   r-  c                      ] tR tRtRtR# )TranslationGenericStackedInlinei  r,   Nr(  r,   r1   r.   r0  r0    r.  r1   r0  c                  .    ] tR tRtRt ! R R4      tRtR# )"TabbedDjangoJqueryTranslationAdmini  z
Convenience class which includes the necessary media files for tabbed
translation fields. Reuses Django's internal jquery version.
c                  >    ] tR tRtRR]P
                  R3tRR/tRtR# )	(TabbedDjangoJqueryTranslationAdmin.Mediai  zadmin/js/jquery.init.jsz#modeltranslation/js/force_jquery.js0modeltranslation/js/tabbed_translation_fields.jsallr,   Nz2modeltranslation/css/tabbed_translation_fields.css)	r   r   r   r   r   JQUERY_UI_URLjscssr   r,   r1   r.   Mediar4    s*    %1%%>	
 J
r1   r;  r,   Nr   r   r   r   __doc__r;  r   r,   r1   r.   r2  r2    s    
	
 	
r1   r2  c                  .    ] tR tRtRt ! R R4      tRtR# )$TabbedExternalJqueryTranslationAdmini  z
Convenience class which includes the necessary media files for tabbed
translation fields. Loads recent jquery version from a cdn.
c                  P    ] tR tRt]P
                  ]P                  R3tRR/tRt	R# )*TabbedExternalJqueryTranslationAdmin.Mediai  r5  screenr,   Nr7  )
r   r   r   r   r   
JQUERY_URLr8  r9  r:  r   r,   r1   r.   r;  rA    s-    ""%%>
 M
r1   r;  r,   Nr<  r,   r1   r.   r?  r?    s    

 
r1   r?  N)>
__future__r   copyr   typingr   r   r   collections.abcr   r	   djangor
   django.db.modelsr   r   django.contribr   django.contrib.admin.optionsr   r   r   !django.contrib.contenttypes.adminr   r   django.forms.modelsr   django.http.requestr   modeltranslationr   r   modeltranslation.translatorr   modeltranslation.utilsr   r   r   r   r   r   modeltranslation.widgetsr   modeltranslation._typingr   r   r    r#   
ModelAdminr   r  r  r  TabularInliner'  StackedInliner+  r-  r0  r2  r?  TabbedTranslationAdminr,   r1   r.   <module>rX     s}   "  . . .  )   \ \ X 1 + 4 2  < 1 ;
)5
)m=w 7 m=`_
095;K;KG;T _
D ~U3u5Ll+-=lM>Y-ZL(	m ;<	m34		m ;<	m34		m ;<>R		m ;<>R	
)9')B 
$
+;G+D 
" < r1   