52. File Comparison Report

Produced on Mon May 12 13:04:35 2008 UTC. This report uses XHTML and CSS2, and is best viewed with a reasonably standards compliant browser such as the latest version of Firefox or Internet Explorer. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

52.1 Files compared

# Location File Last Modified
1 Dolphin-v.6.0.5\admin menu_compose.js Wed Oct 17 08:48:24 2007 UTC
2 Dolphin-v.6.1.0\admin menu_compose.js Thu Mar 27 04:18:18 2008 UTC

52.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 9 666
Changed 8 16
Inserted 0 0
Removed 0 0

52.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

52.4 Active regular expressions

No regular expressions were active.

52.5 Comparison detail

1   addEvent(  window, 'l oad', init Menu );   1   addEvent(  window, 'l oad', init Menu );
2     2  
3   function i nitMenu( e  )   3   function i nitMenu( e  )
4   {   4   {
5       if( ty peof( sNew ItemTitle  ) == 'unde fined' )   5       if( ty peof( sNew ItemTitle  ) == 'unde fined' )
6           sN ewItemTitl e = 'NEW I TEM';   6           sN ewItemTitl e = 'NEW I TEM';
7          7       
8       oMenu  = new BxDo lMenu( top ParentID,  parserUrl,  aTopItems , aCustomI tems, aSys temItems,  aAllItems,  aCoords,  e )   8       oMenu  = new BxDo lMenu( top ParentID,  parserUrl,  aTopItems , aCustomI tems, aSys temItems,  aAllItems,  aCoords,  e )
9   }   9   }
10     10  
11   function c reateNewIt em( type,  source )   11   function c reateNewIt em( type,  source )
12   {   12   {
13       if( so urce )   13       if( so urce )
14           va r urlSourc e = '&sour ce=' + sou rce;   14           va r urlSourc e = '&sour ce=' + sou rce;
15       else   15       else
16           va r urlSourc e = '&sour ce=0';   16           va r urlSourc e = '&sour ce=0';
17          17       
18       var ob jXmlHttp =  createXml HttpObj();   18       var ob jXmlHttp =  createXml HttpObj();
19       if( !o bjXmlHttp  )   19       if( !o bjXmlHttp  )
20           re turn false ;   20           re turn false ;
21          21       
22        var   url   =   parserUrl   +   ' ? action=cre ate_item&t ype='   +   type   +   urlSource;   22        var   url   =   parserUrl   +   ' & action=cre ate_item&t ype='   +   type   +   urlSource;
23       url +=  '&r=' + M ath.random ();   23       url +=  '&r=' + M ath.random ();
24       var iN ewID = 0;   24       var iN ewID = 0;
25          25       
26          26       
27       var ha ndler = fu nction()   27       var ha ndler = fu nction()
28       {   28       {
29                //alert(  objXmlHtt p.response Text );   29                //alert(  objXmlHtt p.response Text );
30                iNewID =  parseInt(  objXmlHtt p.response Text );   30                iNewID =  parseInt(  objXmlHtt p.response Text );
31       }   31       }
32          32       
33       objXml Http.open(  "GET", ur l, false ) ;   33       objXml Http.open(  "GET", ur l, false ) ;
34          34       
35       if( wi ndow.Activ eXObject )   35       if( wi ndow.Activ eXObject )
36       {   36       {
37           ob jXmlHttp.o nreadystat echange =  function()   37           ob jXmlHttp.o nreadystat echange =  function()
38           {   38           {
39                if ( obj XmlHttp.re adyState = = 4 && obj XmlHttp.st atus == 20 0 )   39                if ( obj XmlHttp.re adyState = = 4 && obj XmlHttp.st atus == 20 0 )
40                {   40                {
41                    hand ler();   41                    hand ler();
42                }   42                }
43           }   43           }
44       }   44       }
45       else i f( window. XMLHttpReq uest )   45       else i f( window. XMLHttpReq uest )
46           ob jXmlHttp.o nload = ha ndler;   46           ob jXmlHttp.o nload = ha ndler;
47          47       
48       objXml Http.send(  null );   48       objXml Http.send(  null );
49          49       
50       return  iNewID;   50       return  iNewID;
51   }   51   }
52     52  
53     53  
54   function d eactivateI tem( id )   54   function d eactivateI tem( id )
55   {   55   {
56       var ob jXmlHttp =  createXml HttpObj();   56       var ob jXmlHttp =  createXml HttpObj();
57       if( !o bjXmlHttp  )   57       if( !o bjXmlHttp  )
58           re turn false ;   58           re turn false ;
59          59       
60        var   url   =   parserUrl   +   ' ? action=dea ctivate_it em&id='   +   id;   60        var   url   =   parserUrl   +   ' & action=dea ctivate_it em&id='   +   id;
61       url +=  '&r=' + M ath.random ();   61       url +=  '&r=' + M ath.random ();
62          62       
63       objXml Http.open(  "GET", ur l );   63       objXml Http.open(  "GET", ur l );
64       objXml Http.onrea dystatecha nge = func tion()   64       objXml Http.onrea dystatecha nge = func tion()
65       {   65       {
66           if  ( objXmlH ttp.readyS tate == 4  && objXmlH ttp.status  == 200 )   66           if  ( objXmlH ttp.readyS tate == 4  && objXmlH ttp.status  == 200 )
67           {   67           {
68                //alert(  objXmlHtt p.response Text );   68                //alert(  objXmlHtt p.response Text );
69           }   69           }
70       }   70       }
71       objXml Http.send(  null );   71       objXml Http.send(  null );
72   }   72   }
73     73  
74   function s howItemEdi tForm( id  )   74   function s howItemEdi tForm( id  )
75   {   75   {
76       var ed itFormWrap  = documen t.getEleme ntById( 'e dit_form_w rapper' );   76       var ed itFormWrap  = documen t.getEleme ntById( 'e dit_form_w rapper' );
77          77       
78       editFo rmWrap.sty le.width    = documen t.body.cli entWidth +  30 + "px" ;   78       editFo rmWrap.sty le.width    = documen t.body.cli entWidth +  30 + "px" ;
79       editFo rmWrap.sty le.height   = (window .innerHeig ht ? (wind ow.innerHe ight + 30)  : screen. height) +  "px";               79       editFo rmWrap.sty le.height   = (window .innerHeig ht ? (wind ow.innerHe ight + 30)  : screen. height) +  "px";            
80       editFo rmWrap.sty le.left     = getHori zScroll()  - 30 + "px ";   80       editFo rmWrap.sty le.left     = getHori zScroll()  - 30 + "px ";
81       editFo rmWrap.sty le.top      = getVert Scroll() -  30 + "px" ;   81       editFo rmWrap.sty le.top      = getVert Scroll() -  30 + "px" ;
82       editFo rmWrap.sty le.display  = 'block' ;   82       editFo rmWrap.sty le.display  = 'block' ;
83          83       
84        getHtmlDat a(   'edit_form _cont',   parserUrl   +   ' ? action=edi t_form&id= '   +   id   );   84        getHtmlDat a(   'edit_form _cont',   parserUrl   +   ' & action=edi t_form&id= '   +   id   );
85   }   85   }
86     86  
87   function g etHorizScr oll()   87   function g etHorizScr oll()
88   {   88   {
89       if (na vigator.ap pName == " Microsoft  Internet E xplorer")   89       if (na vigator.ap pName == " Microsoft  Internet E xplorer")
90           re turn docum ent.docume ntElement. scrollLeft ;   90           re turn docum ent.docume ntElement. scrollLeft ;
91       else   91       else
92           re turn windo w.pageXOff set;   92           re turn windo w.pageXOff set;
93   }   93   }
94     94  
95   function g etVertScro ll()   95   function g etVertScro ll()
96   {   96   {
97       if (na vigator.ap pName == " Microsoft  Internet E xplorer")   97       if (na vigator.ap pName == " Microsoft  Internet E xplorer")
98           re turn docum ent.docume ntElement. scrollTop;   98           re turn docum ent.docume ntElement. scrollTop;
99       else   99       else
100           re turn windo w.pageYOff set;   100           re turn windo w.pageYOff set;
101   }   101   }
102     102  
103     103  
104   function h ideEditFor m()   104   function h ideEditFor m()
105   {   105   {
106       editFo rmWrap = d ocument.ge tElementBy Id( 'edit_ form_wrapp er' );   106       editFo rmWrap = d ocument.ge tElementBy Id( 'edit_ form_wrapp er' );
107       editFo rmWrap.sty le.display  = 'none';   107       editFo rmWrap.sty le.display  = 'none';
108   }   108   }
109     109  
110   function s aveItem( i d )   110   function s aveItem( i d )
111   {   111   {
112       _form  = document .forms.for mItemEdit;   112       _form  = document .forms.for mItemEdit;
113       if( !_ form )   113       if( !_ form )
114           re turn false ;   114           re turn false ;
115          115       
116       if( _f orm.Captio n )   116       if( _f orm.Captio n )
117       {   117       {
118           if ( !_form.C aption.val ue.length  )   118           if ( !_form.C aption.val ue.length  )
119           {   119           {
120                alert( ' Please ent er Languag e Key' );   120                alert( ' Please ent er Languag e Key' );
121                _form.Ca ption.focu s();   121                _form.Ca ption.focu s();
122                return f alse;   122                return f alse;
123           }   123           }
124       }   124       }
125          125       
126       if( _f orm.LangCa ption )   126       if( _f orm.LangCa ption )
127       {   127       {
128           if ( !_form.L angCaption .value.len gth )   128           if ( !_form.L angCaption .value.len gth )
129           {   129           {
130                alert( ' Please ent er Default  Name' );   130                alert( ' Please ent er Default  Name' );
131                _form.La ngCaption. focus();   131                _form.La ngCaption. focus();
132                return f alse;   132                return f alse;
133           }   133           }
134       }   134       }
135          135       
136       var sR equest = ' ';   136       var sR equest = ' ';
137       for( i nd = 0; in d < _form. elements.l ength; ind  ++ )   137       for( i nd = 0; in d < _form. elements.l ength; ind  ++ )
138       {   138       {
139           va r _el = _f orm.elemen ts[ind];   139           va r _el = _f orm.elemen ts[ind];
140           sw itch( _el. type )   140           sw itch( _el. type )
141           {   141           {
142                case 'te xt':   142                case 'te xt':
143                case 'te xtarea':   143                case 'te xtarea':
144                case 'se lect-one':   144                case 'se lect-one':
145                    sReq uest += '& ' + _el.na me + '=' +  encodeURI Component(  _el.value  );   145                    sReq uest += '& ' + _el.na me + '=' +  encodeURI Component(  _el.value  );
146           }   146           }
147       }   147       }
148          148       
149       if( _f orm.Target  )   149       if( _f orm.Target  )
150       {   150       {
151           fo r( i = 0;  i < _form. Target.len gth; i++ )   151           fo r( i = 0;  i < _form. Target.len gth; i++ )
152                if( _for m.Target[i ].checked  )   152                if( _for m.Target[i ].checked  )
153                    sTar get = _for m.Target[i ].value;   153                    sTar get = _for m.Target[i ].value;
154       }   154       }
155       else   155       else
156           sT arget = '' ;   156           sT arget = '' ;
157          157       
158       var sV isible_non   = ( ( _f orm.Visibl e_non  &&  _form.Visi ble_non.ch ecked  ) ?  '1' : '0'  );   158       var sV isible_non   = ( ( _f orm.Visibl e_non  &&  _form.Visi ble_non.ch ecked  ) ?  '1' : '0'  );
159       var sV isible_mem b = ( ( _f orm.Visibl e_memb &&  _form.Visi ble_memb.c hecked ) ?  '1' : '0'  );   159       var sV isible_mem b = ( ( _f orm.Visibl e_memb &&  _form.Visi ble_memb.c hecked ) ?  '1' : '0'  );
160          160       
161        var   sRequestUr l   =   parserUrl   +   ' ? action=sav e_item&id= '   +   id   +   sRequest   +   161        var   sRequestUr l   =   parserUrl   +   ' & action=sav e_item&id= '   +   id   +   sRequest   +
162           '& Target=' +  sTarget +   162           '& Target=' +  sTarget +
163           '& Visible_no n=' + sVis ible_non +   163           '& Visible_no n=' + sVis ible_non +
164           '& Visible_me mb=' + sVi sible_memb ;   164           '& Visible_me mb=' + sVi sible_memb ;
165          165       
166       getHtm lData( 'ed it_form_co nt', sRequ estUrl );   166       getHtm lData( 'ed it_form_co nt', sRequ estUrl );
167   }   167   }
168     168  
169     169  
170   function s aveItemByP ost( id )   170   function s aveItemByP ost( id )
171   {   171   {
172       _form  = document .forms.for mItemEdit;   172       _form  = document .forms.for mItemEdit;
173       var oX MLHttpReq  = createXm lHttpObj() ;   173       var oX MLHttpReq  = createXm lHttpObj() ;
174       var el emCont = d ocument.ge tElementBy Id( 'edit_ form_cont'  );   174       var el emCont = d ocument.ge tElementBy Id( 'edit_ form_cont'  );
175          175       
176       if( !_ form )   176       if( !_ form )
177           re turn false ;   177           re turn false ;
178          178       
179       if( !o XMLHttpReq  )   179       if( !o XMLHttpReq  )
180           re turn false ;   180           re turn false ;
181          181       
182       if( !e lemCont )   182       if( !e lemCont )
183           re turn false ;   183           re turn false ;
184          184       
185       if( _f orm.Captio n )   185       if( _f orm.Captio n )
186       {   186       {
187           if ( !_form.C aption.val ue.length  )   187           if ( !_form.C aption.val ue.length  )
188           {   188           {
189                alert( ' Please ent er Languag e Key' );   189                alert( ' Please ent er Languag e Key' );
190                _form.Ca ption.focu s();   190                _form.Ca ption.focu s();
191                return f alse;   191                return f alse;
192           }   192           }
193       }   193       }
194          194       
195       if( _f orm.LangCa ption )   195       if( _f orm.LangCa ption )
196       {   196       {
197           if ( !_form.L angCaption .value.len gth )   197           if ( !_form.L angCaption .value.len gth )
198           {   198           {
199                alert( ' Please ent er Default  Name' );   199                alert( ' Please ent er Default  Name' );
200                _form.La ngCaption. focus();   200                _form.La ngCaption. focus();
201                return f alse;   201                return f alse;
202           }   202           }
203       }   203       }
204          204       
205       var sR equest = ' ';   205       var sR equest = ' ';
206          206       
207       for( i nd = 0; in d < _form. elements.l ength; ind  ++ )   207       for( i nd = 0; in d < _form. elements.l ength; ind  ++ )
208       {   208       {
209           va r _el = _f orm.elemen ts[ind];   209           va r _el = _f orm.elemen ts[ind];
210           sw itch( _el. type )   210           sw itch( _el. type )
211           {   211           {
212                case 'te xt':   212                case 'te xt':
213                case 'te xtarea':   213                case 'te xtarea':
214                case 'se lect-one':   214                case 'se lect-one':
215                    sReq uest += '& ' + _el.na me + '=' +  encodeURI Component(  _el.value  );   215                    sReq uest += '& ' + _el.na me + '=' +  encodeURI Component(  _el.value  );
216           }   216           }
217       }   217       }
218          218       
219       if( _f orm.Target  )   219       if( _f orm.Target  )
220       {   220       {
221           fo r( i = 0;  i < _form. Target.len gth; i++ )   221           fo r( i = 0;  i < _form. Target.len gth; i++ )
222                if( _for m.Target[i ].checked  )   222                if( _for m.Target[i ].checked  )
223                    sTar get = _for m.Target[i ].value;   223                    sTar get = _for m.Target[i ].value;
224       }   224       }
225       else   225       else
226           sT arget = '' ;   226           sT arget = '' ;
227          227       
228       var sV isible_non   = ( ( _f orm.Visibl e_non  &&  _form.Visi ble_non.ch ecked  ) ?  '1' : '0'  );   228       var sV isible_non   = ( ( _f orm.Visibl e_non  &&  _form.Visi ble_non.ch ecked  ) ?  '1' : '0'  );
229       var sV isible_mem b = ( ( _f orm.Visibl e_memb &&  _form.Visi ble_memb.c hecked ) ?  '1' : '0'  );   229       var sV isible_mem b = ( ( _f orm.Visibl e_memb &&  _form.Visi ble_memb.c hecked ) ?  '1' : '0'  );
230          230       
231       var sR equestUrl  = 'action= save_item& id=' + id  + sRequest  +   231       var sR equestUrl  = 'action= save_item& id=' + id  + sRequest  +
232           '& Target=' +  sTarget +   232           '& Target=' +  sTarget +
233           '& Visible_no n=' + sVis ible_non +   233           '& Visible_no n=' + sVis ible_non +
234           '& Visible_me mb=' + sVi sible_memb ;   234           '& Visible_me mb=' + sVi sible_memb ;
235          235       
236          236       
237       elemCo nt.innerHT ML = '<div  class="lo ading"><im g src="'+u rlIconLoad ing+'"></d iv>';   237       elemCo nt.innerHT ML = '<div  class="lo ading"><im g src="'+u rlIconLoad ing+'"></d iv>';
238          238       
239        oXMLHttpRe q.open("PO ST",   parserUrl   +   ' ? r='   +   Math.rando m()   );   239        oXMLHttpRe q.open("PO ST",   parserUrl   +   ' & r='   +   Math.rando m()   );
240       oXMLHt tpReq.setR equestHead er('Conten t-Type', ' applicatio n/x-www-fo rm-urlenco ded');   240       oXMLHt tpReq.setR equestHead er('Conten t-Type', ' applicatio n/x-www-fo rm-urlenco ded');
241          241       
242       oXMLHt tpReq.onre adystatech ange = fun ction()    242       oXMLHt tpReq.onre adystatech ange = fun ction() 
243       {   243       {
244           if  (oXMLHttp Req.readyS tate == 4  && oXMLHtt pReq.statu s == 200)  {   244           if  (oXMLHttp Req.readyS tate == 4  && oXMLHtt pReq.statu s == 200)  {
245                sNewText  = oXMLHtt pReq.respo nseText;   245                sNewText  = oXMLHtt pReq.respo nseText;
246                elemCont .innerHTML  = sNewTex t;   246                elemCont .innerHTML  = sNewTex t;
247                   247                
248                // parse  javascrip ts and run  them   248                // parse  javascrip ts and run  them
249                aScrMatc hes = sNew Text.match (/<script[ ^>]*javasc ript[^>]*> ([^<]*)<\/ script>/ig );   249                aScrMatc hes = sNew Text.match (/<script[ ^>]*javasc ript[^>]*> ([^<]*)<\/ script>/ig );
250                if( aScr Matches )   250                if( aScr Matches )
251                {   251                {
252                    for(  ind = 0;  ind < aScr Matches.le ngth; ind  ++ )   252                    for(  ind = 0;  ind < aScr Matches.le ngth; ind  ++ )
253                    {   253                    {
254                         sScr = aSc rMatches[i nd];   254                         sScr = aSc rMatches[i nd];
255                         iOffset =  sScr.match (/<script[ ^>]*javasc ript[^>]*> /i)[0].len gth;   255                         iOffset =  sScr.match (/<script[ ^>]*javasc ript[^>]*> /i)[0].len gth;
256                         sScript =  sScr.subst ring( iOff set, sScr. length - 9  );   256                         sScript =  sScr.subst ring( iOff set, sScr. length - 9  );
257                           257                        
258                         eval( sScr ipt );   258                         eval( sScr ipt );
259                    }   259                    }
260                }   260                }
261           }   261           }
262       }   262       }
263          263       
264       oXMLHt tpReq.send ( sRequest Url );   264       oXMLHt tpReq.send ( sRequest Url );
265   }   265   }
266     266  
267   function u pdateItem(  id, title  )   267   function u pdateItem(  id, title  )
268   {   268   {
269       oMenu. updateItem ( id, titl e );   269       oMenu. updateItem ( id, titl e );
270   }   270   }
271     271  
272   function d eleteItem(  id )   272   function d eleteItem(  id )
273   {   273   {
274       if( co nfirm( 'Ar e you sure  want dele te this it em?' ) )   274       if( co nfirm( 'Ar e you sure  want dele te this it em?' ) )
275       {   275       {
276           va r objXmlHt tp = creat eXmlHttpOb j();   276           va r objXmlHt tp = creat eXmlHttpOb j();
277           if ( !objXmlH ttp )   277           if ( !objXmlH ttp )
278                return f alse;   278                return f alse;
279              279           
280            var   url   =   parserUrl   +   ' ? action=del ete_item&i d='   +   id;   280            var   url   =   parserUrl   +   ' & action=del ete_item&i d='   +   id;
281           ur l += '&r='  + Math.ra ndom();   281           ur l += '&r='  + Math.ra ndom();
282              282           
283           ob jXmlHttp.o pen( "GET" , url );   283           ob jXmlHttp.o pen( "GET" , url );
284           ob jXmlHttp.o nreadystat echange =  function()   284           ob jXmlHttp.o nreadystat echange =  function()
285           {   285           {
286                if ( obj XmlHttp.re adyState = = 4 && obj XmlHttp.st atus == 20 0 )   286                if ( obj XmlHttp.re adyState = = 4 && obj XmlHttp.st atus == 20 0 )
287                {   287                {
288                    if(  objXmlHttp .responseT ext == 'OK ' )   288                    if(  objXmlHttp .responseT ext == 'OK ' )
289                    {   289                    {
290                         oMenu.dele teItem( id  );   290                         oMenu.dele teItem( id  );
291                         hideEditFo rm();   291                         hideEditFo rm();
292                    }   292                    }
293                    else   293                    else
294                    {   294                    {
295                         alert( obj XmlHttp.re sponseText  );   295                         alert( obj XmlHttp.re sponseText  );
296                    }   296                    }
297                }   297                }
298           }   298           }
299           ob jXmlHttp.s end( null  );   299           ob jXmlHttp.s end( null  );
300           re turn true;   300           re turn true;
301       }   301       }
302       else   302       else
303           re turn false ;   303           re turn false ;
304   }   304   }
305     305  
306   function s aveItemsOr ders( sTop Items, aCu stomItems  )   306   function s aveItemsOr ders( sTop Items, aCu stomItems  )
307   {   307   {
308       var ob jXmlHttp =  createXml HttpObj();   308       var ob jXmlHttp =  createXml HttpObj();
309       if( !o bjXmlHttp  )   309       if( !o bjXmlHttp  )
310           re turn false ;   310           re turn false ;
311          311       
312        var   url   =   parserUrl   +   ' ? action=sav e_orders&t op='   +   sTopItems;   312        var   url   =   parserUrl   +   ' & action=sav e_orders&t op='   +   sTopItems;
313          313       
314       for( i d in aCust omItems )   314       for( i d in aCust omItems )
315       {   315       {
316           va r sCustomS tr = aCust omItems[id ];   316           va r sCustomS tr = aCust omItems[id ];
317           if ( sCustomS tr.length  == 0)   317           if ( sCustomS tr.length  == 0)
318                continue ;   318                continue ;
319              319           
320           ur l += '&cus tom[' + id  + ']=' +  sCustomStr ;   320           ur l += '&cus tom[' + id  + ']=' +  sCustomStr ;
321       }   321       }
322          322       
323       url +=  '&r=' + M ath.random ();   323       url +=  '&r=' + M ath.random ();
324          324       
325       objXml Http.open(  "GET", ur l );   325       objXml Http.open(  "GET", ur l );
326       objXml Http.onrea dystatecha nge = func tion()   326       objXml Http.onrea dystatecha nge = func tion()
327       {   327       {
328           if  ( objXmlH ttp.readyS tate == 4  && objXmlH ttp.status  == 200 )   328           if  ( objXmlH ttp.readyS tate == 4  && objXmlH ttp.status  == 200 )
329           {   329           {
330                if( objX mlHttp.res ponseText  != 'OK' )   330                if( objX mlHttp.res ponseText  != 'OK' )
331                    aler t( objXmlH ttp.respon seText );   331                    aler t( objXmlH ttp.respon seText );
332           }   332           }
333       }   333       }
334       objXml Http.send(  null );   334       objXml Http.send(  null );
335   }   335   }
336     336  
337   function r esetItems( )   337   function r esetItems( )
338   {   338   {
339       if( co nfirm( 'Re set Will R estore The  Builder T o Factory  Settings : ). Are You  Sure?' )  )   339       if( co nfirm( 'Re set Will R estore The  Builder T o Factory  Settings : ). Are You  Sure?' )  )
340            location   =   parserUrl   +   ' ? action=res et';   340            location   =   parserUrl   +   ' & action=res et';
341   }   341   }