
0Gc           @   s   d  d k  Z  d  d k Td  d k l Z l Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k	 Z	 d  d k
 Z
 d  d k Z d d d     YZ d e f d     YZ d S(	   iN(   t   *(   t   Treet
   WidgetTreet   FileDirDialogc           B   sJ   e  Z d  Z e d  e d  d d d  Z d   Z d   Z d   Z RS(	   s       Custom class which displays a FileDialog or a DirDialog, according to the
    value of the codegen_opt of its parent (instance of Application)
    s   All Files|*s   Choose a filei    c         C   se   | |  _  t i i |  _ | |  _ | |  _ | |  _ | |  _ t	 i
 t	 i B|  _ | |  _ d  |  _ d  S(   N(   t   ownert   configt   preferencest   codegen_patht   prev_dirt   wildcardt   file_messaget   dir_messaget
   file_stylet   wxt   DD_DEFAULT_STYLEt   DD_NEW_DIR_BUTTONt	   dir_stylet   parentt   Nonet   value(   t   selfR   R   R	   R
   R   t   style(    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   __init__   s    						c         C   s   |  i  i d j o8 t i |  i |  i p d d |  i d |  i |  _ n, t i	 |  i
 |  i p d d |  i |  _ |  i oI |  i |  _ t i i |  i  p t i i |  i  |  _ n t i Sn t i S(   Ni    t    R	   t   flagsR   (   R   t   codegen_optt   misct   FileSelectorR
   R   R	   R   R   t   DirSelectorR   R   t   ost   patht   isdirt   dirnameR   t   ID_OKt	   ID_CANCEL(   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt	   ShowModal    s    %
c         C   s   |  i  S(   N(   R   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt	   get_value/   s    c         C   s   | |  _  d  S(   N(   R	   (   R   R	   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   set_wildcard2   s    N(	   t   __name__t
   __module__t   __doc__t   _R   R   R#   R$   R%   (    (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR      s   			t   Applicationc           B   s[  e  Z d  Z d   Z d   Z e i d  Z d   Z e i d  Z	 d   Z
 d   Z d   Z d	   Z d
   Z d   Z d   Z e e e  Z d   Z d   Z e e e  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d  g d  Z$ d   Z% d   Z& d  d  d  Z' RS(!   s4       properties of the application being created
    c            s  |   _  t i   i  d    _ t i d d d  p" t i   i  } |   i _ n d    i _   i i	 t
    i i   t i   i d d t i t i B} d   _ t
   _ d    _ d   _ d   _   f d   } d	   _ d
   _   f d   }   f d   } t   _ t   _   f d   } t i d    _   f d   } h    f d     i f d <  f d     i f d <  f d   | f d <| | f d <  i   i f d <  i   i  f d <  f d   | f d <  f d   | f d <  _! t"   d | t
    _# t"   d | t
    _$   i%     _& t"   d |    _' t(   d | t) d     _* t i+   }	 t i, | |	 d g  d d>   _- d	   _. t/   d | t) d!  t) d"  g d# t) d$    _0 t1 t2 i3 i4 d
  d% g   }
 g  } x( |
 D]  } | i5 d& d' | | f  qW| i5 d(  t6   | d) i7 |  t) d*  t) d+  t i8 t i9 B } t2 i3 i:   } d } t/   d | | d, |   _;   i; i< d
  t/   d | d- d. d/ g d, d d# t) d0    _=   i= i<   i    i>   i? f   i! d1 <t(   d1 | t) d2     _@ t   _A   f d3   }   f d4   } | | f   i! d5 <t(   d5 | t) d6     _B tC   d | | d# t) d7    _D t i+   } t iE | | t) d8   } t iF t iG  } | iH   i# iI d t iJ  | iH   i$ iI d t iJ  | iH   i' iI d t iJ  | iH   i* iI d t iJ  t iF t iK  } d d9 kL lM } t iN | d t) d:  d | d f } | iO t iP t) d:    | iH | d t iQ t iR Bd  | iH   i- d t iQ t iR Bd  | iH | d t iJ  | iH   i0 iI d t iQ t iJ Bd;  | iH   i; iI d t iQ t iJ Bd;  | iH   i= iI d t iQ t iJ Bd;  | iH   i@ iI d t iJ  | iH   iB iI d t iJ  | iH   iD iI d t iJ  | iH | d t iQ t iJ Bd  | i	 t
  | iS |  | iT   | iU |  | iV   d  }   i iW | t) d<   d d  kX } | iY d  d d  tZ | i[ | d=    t i\ | |   i]  t i^   i- |	   i_  d    _` d  S(?   Nii   i   R   t   appt   MyAppi    c            s3   y t  |   } Wn t j
 o n X|   _ d  S(   N(   t   intt
   ValueErrorR   (   R   t   opt(   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   set_codegen_optN   s    R   t   pythonc              s   t  i i   i  S(   N(   R   R   t
   expandusert   output_path(    (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   get_output_pathT   s    c            s   |    _  d  S(   N(   R3   (   R   (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   set_output_pathU   s    c            s   t  t |      _ d  S(   N(   t   boolR-   t   use_gettext(   R   (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   set_use_gettextX   s    i   c            s     i  i     _ d  S(   N(   t   for_version_propt   get_str_valuet   for_version(   R   (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   set_for_versionZ   s    c              s     i  S(    (   t   name(    (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   <lambda>]   s    R=   c              s     i  S(    (   t   klass(    (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR>   ^   s    t   classc              s     i  S(    (   R   (    (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR>   _   s    t   code_generationR3   t   languaget   encodingc              s     i  S(    (   R7   (    (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR>   c   s    R7   c              s     i  S(    (   R;   (    (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR>   d   s    R;   s   Enable gettext supportt   choicest   sizei   s   Single files   Separate file for each classt   labels   Code Generationt   default_extensionss   %s files (*.%s)|*.%st   Pythons   All files|*t   |s   Select output files   Select output directoryt   columnss   2.4s   2.6s   2.8s   wxWidgets compatibilityt   use_new_namespaces6   Use old "from wxPython.wx"
import (python output only)c              s     i  S(   N(   t	   overwrite(    (   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   get_overwrite   s    c            s   t  t |      _ d  S(   N(   R6   R-   RL   (   t   val(   R   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   set_overwrite   s    RL   s   Overwrite existing sourcess   Output paths   Generate code(   t   _label_initial_widths
   Top windowi   R*   g      @(   i   i(a   t   property_windowR   t   Notebookt   notebookR   t   check_wx_versiont   NotebookSizert   sizerR   t   SetAutoLayoutt   Truet   Hidet   ScrolledWindowt   TAB_TRAVERSALt   FULL_REPAINT_ON_RESIZER=   t   _Application__savedt   _Application__filenameR?   R   R3   RB   t   Falset   is_templateR7   t   VERSION_STRINGR;   t   set_namet	   set_klasst   get_languaget   set_languaget   get_encodingt   set_encodingt   access_functionst   TextPropertyt	   name_propt
   klass_propt   _get_default_encodingRC   t   encoding_propt   CheckBoxPropertyR)   t   use_gettext_propt   NewIdt   Choicet   top_win_propt
   top_windowt   RadioPropertyt   codegen_propt   getattrt   commont   code_writerst   gett   appendR   t   joint   SAVEt   OVERWRITE_PROMPTt   keyst   codewriters_propt   set_str_valueR9   t   get_use_old_namespacet   set_use_old_namespacet   use_old_namespace_propRL   t   overwrite_propt   DialogPropertyt   outpath_propt   Buttont   BoxSizert   VERTICALt   Addt   panelt   EXPANDt
   HORIZONTALt   widget_propertiesRP   t
   StaticTextt
   SetToolTipt   ToolTipt   ALLt   ALIGN_CENTERt   SetSizert   Layoutt   Fitt   GetSizet   AddPaget   matht   SetScrollbarsR-   t   ceilt
   EVT_BUTTONt   generate_codet
   EVT_CHOICEt   set_top_windowt   widget(   R   RQ   t   nb_sizerR   R0   R4   R5   R8   R<   t
   TOP_WIN_IDt   extR	   t   et   dialogt   _writersRJ   RM   RO   t   BTN_IDt   btnRV   t   szrt   _wRF   t   hR   (    (   R   sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR   <   s    												 	' #&&& 
)c         C   sD   d | } t  i |  i |  p |  i i |  i  n
 | |  _ d  S(   Ns   %s(   t   ret   matcht   set_name_patternRj   t	   set_valueR=   (   R   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRb      s    
s   ^[a-zA-Z]+[\w0-9-]*$c         C   sD   d | } t  i |  i |  p |  i i |  i  n
 | |  _ d  S(   Ns   %s(   R   R   t   set_klass_patternRk   R   R?   (   R   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRc      s    
s   ^[a-zA-Z]+[\w:.0-9-]*$c         C   sN   d d k  } | i | i  y | i | i  SWn t j
 o d Sn Xd S(   sS           Returns the name of the default character encoding of this machine
        iNs   ISO-8859-15(   t   localet	   setlocalet   LC_ALLt   nl_langinfot   CODESETt   AttributeError(   R   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRl      s    c         C   s   |  i  S(   N(   RC   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRf      s    c         C   sy   y t  d |  WnX t j
 oL } t i t |  t d  t i t i Bt i B |  i	 i
 |  i  n X| |  _ d  S(   Nt   at   Error(   t   unicodet   LookupErrorR   t
   MessageBoxt   strR)   t   OKt   CENTREt
   ICON_ERRORRm   R   RC   (   R   R   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRg      s
    0c         C   s   |  i  i   } t t i | d g   } g  } x4 | D], } | i t d  | i   | | f  q5 W| i t d   |  i i	 i
 d i |   |  i | j o | |  _ |  i   n d  S(   NRG   s   %s files (*.%s)|*.%ss   All files|*RI   (   R   R:   Rv   Rw   Rx   Rz   R)   t
   capitalizeR   R   R%   R{   RB   t   check_codegen(   R   R   RB   R   R	   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRe      s     	c         C   s   |  i  S(   N(   RB   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRd      s    c         C   s   |  i  S(   N(   R]   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt
   _get_saved   s    c         C   s   |  i  | j op | |  _  t i i   i   } | p t i i d |  q | d d j o t i i | d i    q n d  S(   Ns   * i    R    i   (   R]   Rw   t   app_treet	   get_titlet   stript	   set_title(   R   R   t   t(    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt
   _set_saved   s
    	c         C   s   |  i  S(   N(   R^   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   _get_filename	  s    c         C   s   t  i |  i |  ph | |  _ |  i o
 d } n d } |  i d  j	 o! t i i d | |  i f  q~ t i i |  n d  S(   Nt    s   * s   %s(%s)(   R   t   streqR^   R]   R   Rw   R   R   (   R   R   t   flag(    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   _set_filename
  s    	!c         C   s   |  i  S(   N(   Rs   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   get_top_window  s    c         G   s   |  i  i   |  _ d  S(   N(   Rr   t   GetStringSelectionRs   (   R   t   args(    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR     s    c         C   sM   |  i  i d |  |  i p+ |  i  i |  i  i   d  |  i   n d  S(   Ns   %si   (   Rr   t   AppendRs   t   SetSelectiont   GetCountR   (   R   R=   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   add_top_window  s    
c         C   s   |  i  i d |  } | d j o t i d j o g  } t |  i  i    D]* } | | j o | |  i  i |  qM qM ~ } |  i  i   x2 | D] } |  i  i |  q Wq |  i  i	 |  n d  S(   Ns   %sit	   __WXGTK__(
   Rr   t
   FindStringR   t   Platformt   rangeR   t	   GetStringt   ClearR   t   Delete(   R   R=   t   indext   _[1]t   iRD   t   c(    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   remove_top_window   s    F c   	      C   s   |  i  i |  } | d j o |  i | j o | |  _ n t i d j o |  i  i   } g  } t |  i  i    D] } | |  i  i |  qu ~ } | | | <|  i  i	   x | D] } |  i  i
 |  q W|  i  i |  q |  i  i | |  n d  S(   NiR   (   Rr   R   Rs   R   R   t   GetSelectionR   R   R   R   R   R   t	   SetString(	   R   t   oldnamet   newnameR   t	   sel_indexR   R   RD   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   update_top_window_name,  s    5
 c         C   s   d |  _  |  i i d  |  i i t  d |  _ |  i i d  |  i i t  d |  _ |  i i d  d |  _	 |  i
 i d  |  i |  i    d |  _ |  i i   |  i t  |  i i t  d S(   sG           resets the default values of the attributes of the app
        R,   R+   i    R   N(   R?   Rk   R   t   toggle_activeR_   R=   Rj   R   Ru   R3   R   Re   Rd   Rs   Rr   R   R   R   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   reset=  s    	c         G   s   |  i  i   } | i   d } | i   } | |  i j o d  Sn | i   |  i i |  i   | i |  i  | i t i	  |  i i
 t  |  i  i   |  i  i t d  |  i  y t i i |  i  Wn t j
 o n Xd  S(   Ni    s   Properties - <%s>(   RQ   t   GetSizert   GetChildrent	   GetWindowRS   RY   t   Reparentt	   SetWindowR   t   hidden_property_panelt   ShowRX   R   t   SetTitleR)   R=   Rw   R   t   select_itemt   nodeR   (   R   R   t	   sizer_tmpt   childt   w(    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   show_propertiesR  s    
c         C   s   |  i  | S(   N(   Rh   (   R   R=   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   __getitem__c  s    c         O   s
  | i  d t  } |  i p: t i t d  t d  t i t i Bt i B|  i	  Sn | op |  i
 i   p |  i i   oP |  i i   d j  o: t i t d  t d  t i t i Bt i B|  i	  Sn d d k l } |   } d d k l } y$|  i   } | oC | d	 j o6 t i | i } t t i | _ |  i }	 t |  _ n t i i |  }
 t i i |  i  o; |  i d  j	 o+ t i i  t i i! |  i  |  i  } n d  } | t i | | i"   t d | d
 | d |
 | o* | d	 j o | t i | _ |	 |  _ n Wn t# t$ f j
 o= } t i t d  | t d  t i t i Bt i% B n t& j
 oS } d d  k' } | i(   t i t d  | t d  t i t i Bt i% B n= X| p4 t i t d  t d  t i t i Bt i) B n d  S(   Nt   previews:   You must specify an output file
before generating any codeR   i    s.   Please select a top window for the applicationi(   t   StringIO(   t
   CodeWriterR1   t   out_patht   class_namess   Error generating code:
%ss   An exception occurred while generating the code for the application.
This is the error message associated with it:
        %s
For more details, look at the full traceback on the console.
If you think this is a wxGlade bug, please report it.s&   Code generation completed successfullyt   Information(*   Ry   R_   R3   R   R   R)   R   R   t   ICON_EXCLAMATIONRS   Rj   t	   is_activeRk   Rr   R   t	   cStringIOR   t	   xml_parseR   Rd   Rw   Rx   RK   RX   RL   R   t   writeR   R   t   isabst   filenameR   R{   R    t   getvaluet   IOErrort   OSErrorR   t	   Exceptiont	   tracebackt	   print_exct   ICON_INFORMATION(   R   R   t   kwdsR   R   t   outR   t   cwt   oldRL   R   R   t   msgR	  (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR   f  sZ    
	 	"		c         C   s   |  i  i   o |  i Sn d S(   NR   (   Rj   R   R=   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   get_name  s    c         C   s   |  i  i   o |  i Sn d S(   NR   (   Rk   R   R?   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt	   get_class  s    c         G   s   d  S(   N(    (   R   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   update_view  s    c         C   s   t  S(   N(   RX   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt
   is_visible  s    c            s  | d d  j o@ d d  k } | i d d t d  t i d  d  d | d <n  i }  i  i i d  d	  _  i  i i d
  d	  _ d d  k } d | i	 d d   i f  _ |  i
 |  _ | d |  _
 |  i } |  i } |  i } t |  _ d |  _ d |  _ |  i }	 d |  _ d    y.|  i d t  t i |  i
  i  }
 t |
 t i  oo t i d  d d    |
   d d  } | i d | i    | i   \ } }   i | d | d f  n t |
 t i  p t |
 t i  p t i d  d |    t |
 t i  o |
   }   i  |  nC t |
 t i!  o  |
   d  }   i" |  n |
   d  }   i#   n4 |
 d  d d      i$   }   i% | t i& @    f d   } t i'   |    i t( d    i      i)     i*   x? d D]7 } |  i
 | } t i+ i, |  o t i- |  q!q!WWnn t. j
 ob } d   _/  i0 i1 t( d   t i2 t( d  t3 |  t( d  t i4 t i5 Bt i6 B n X|  _ |  i |  _
 |  ` | |  _ | |  _ | |  _ |	 |  _   S(   Ni    it   ignoret   tempnamt   applicationt   wxgs   .pyt   .i   t   :s   _%d_%si
   i   i	   R1   R   R   s   <Preview> - i   c            s-    i    d    _   i i t d   d  S(   Nt   Preview(   t   DestroyR   t   preview_widgett   preview_buttont   SetLabelR)   (   t   event(   R   t   frame(    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyt   on_close  s    
	s   <Preview> - %sR   t   ot   ~R  s   Problem previewing gui: %sR   i i ʚ;(   R   R   R#  R$  (7   R   t   warningst   filterwarningst   RuntimeWarningR   R  R?   t   rfindt   randomt	   randrangeR3   t   real_output_pathR   RB   R7   R_   RL   R   RX   R   t   import_namet
   issubclassR   t   MDIChildFramet   MDIParentFrameR   t   GetTitleR   t   SetClientSizet   Framet   Dialogt   MenuBart
   SetMenuBart   ToolBart
   SetToolBarR   t   GetWindowStyleFlagt   SetWindowStyleFlagt   DIALOG_MODALt	   EVT_CLOSER)   t   CenterOnScreenR   R   t   isfilet   unlinkR  R  R  R  R   R   R   R   R   (   R   R   t   out_nameR%  t   widget_class_nameR)  t   real_codegen_optt   real_languaget   real_use_gettextRL   t
   FrameClassR   R   R   t   menubart   toolbarR   t   sR"  R   R=   R   (    (   R!  R   sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR     s    	  									

 	"					c         C   s%   y t  i d i SWn t Sn Xd  S(   NR1   (   Rw   Rx   RK   R_   (   R   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR     s    c         C   s/   y! t  t |   t i d _ Wn n Xd  S(   NR1   (   R6   R-   Rw   Rx   RK   (   R   RN   (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR     s    !c            s  | d j o   i } n | d j	 o t i | i i } | d j o | t i | i j } n, t i d } | i i | d  | i	 j	 } | p2 t i
 t d  t d  | i   | i |  qnK    f d    t i i i o( x% t i i i D] }  |  q Wn d S(   s           Checks whether widget has a suitable code generator for the given
        language (default: the current active language). If not, the user is
        informed with a message.
        t   XRCt   WARNINGs2   No %s code generator for %s (of type %s) availablec            sT   |  i  d  j	 o  i |  i   n |  i o" x |  i D] }   |  q8 Wn d  S(   N(   R   R   R   t   children(   R   R   (   t	   check_recR   (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyRK  )  s    

 N(   R   RB   Rw   R   t	   __class__R&   Rx   t   obj_buildersRy   t   NotImplementedXrcObjectt   messageR)   R   R=   R   t   rootRJ  (   R   R   RB   t   cnamet   okt   xrcgenR   (    (   R   RK  sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR     s"    	 N((   R&   R'   R(   R   Rb   R   t   compileR   Rc   R   Rl   Rf   Rg   Re   Rd   R   R   t   propertyt   savedR   R   R  R   R   R   R   R   R   R   R   R   R  R  R  R  R   R   R   R   R   (    (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pyR*   8   sD   																							:				[		(    (   R   R   t   treeR   R   Rw   R   R   R   R   R	  R   R   t   objectR*   (    (    (    sA   C:\Python25\Lib\site-packages\_spe\plugins\wxGlade\application.pys   <module>	   s   
<)