From 4a7616d5a0a4995fbecc74dad7146bd50d28e384 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 11 Mar 2002 13:49:50 +0000 Subject: [PATCH 001/217] This commit was generated by cvs2svn to compensate for changes in r2155, which included commits to RCS files with non-trunk default branches. --- Application/functions.js | 35 ++++ Application/head.skin | 10 ++ Application/macros.js | 172 +++++++++++++++++++ Application/main.hac | 10 ++ Application/main.skin | 42 +++++ Application/mrtg.hac | 23 +++ Application/navig_active.skin | 15 ++ Application/navig_disabled.skin | 10 ++ Application/redirectpublic.hac | 10 ++ DocApplication/functions.js | 14 ++ DocApplication/head.skin | 8 + DocApplication/index.skin | 11 ++ DocApplication/macros.js | 74 +++++++++ DocApplication/main.hac | 23 +++ DocApplication/main.skin | 11 ++ DocApplication/navig.skin | 14 ++ DocFunction/functions.js | 20 +++ DocFunction/indexList.skin | 5 + DocFunction/indexListSeparator.skin | 3 + DocFunction/listElementAction.skin | 7 + DocFunction/listElementFunction.skin | 7 + DocFunction/listElementMacro.skin | 9 + DocFunction/listElementSkin.skin | 7 + DocFunction/listElementTemplate.skin | 7 + DocFunction/macros.js | 136 +++++++++++++++ DocFunction/main.hac | 8 + DocFunction/main.skin | 14 ++ DocPrototype/appList.skin | 10 ++ DocPrototype/functions.js | 14 ++ DocPrototype/listFooter.skin | 3 + DocPrototype/listHeader.skin | 7 + DocPrototype/macros.js | 90 ++++++++++ DocPrototype/main.hac | 8 + DocPrototype/main.skin | 9 + DocPrototype/navig.skin | 2 + DocTag/renderfunctions.js | 46 +++++ Global/api.skin | 17 ++ Global/functions.js | 155 +++++++++++++++++ Global/global.skin | 14 ++ Global/head.skin | 53 ++++++ Global/macros.js | 97 +++++++++++ Global/md5.js | 178 ++++++++++++++++++++ Global/navig.skin | 17 ++ Root/functions.js | 36 ++++ Root/image.hac | 11 ++ Root/macros.js | 240 +++++++++++++++++++++++++++ Root/main.hac | 46 +++++ Root/main.skin | 101 +++++++++++ Root/makekey.hac | 10 ++ app.properties | 5 + class.properties | 11 ++ 51 files changed, 1885 insertions(+) create mode 100644 Application/functions.js create mode 100644 Application/head.skin create mode 100644 Application/macros.js create mode 100644 Application/main.hac create mode 100644 Application/main.skin create mode 100644 Application/mrtg.hac create mode 100644 Application/navig_active.skin create mode 100644 Application/navig_disabled.skin create mode 100644 Application/redirectpublic.hac create mode 100644 DocApplication/functions.js create mode 100644 DocApplication/head.skin create mode 100644 DocApplication/index.skin create mode 100644 DocApplication/macros.js create mode 100644 DocApplication/main.hac create mode 100644 DocApplication/main.skin create mode 100644 DocApplication/navig.skin create mode 100644 DocFunction/functions.js create mode 100644 DocFunction/indexList.skin create mode 100644 DocFunction/indexListSeparator.skin create mode 100644 DocFunction/listElementAction.skin create mode 100644 DocFunction/listElementFunction.skin create mode 100644 DocFunction/listElementMacro.skin create mode 100644 DocFunction/listElementSkin.skin create mode 100644 DocFunction/listElementTemplate.skin create mode 100644 DocFunction/macros.js create mode 100644 DocFunction/main.hac create mode 100644 DocFunction/main.skin create mode 100644 DocPrototype/appList.skin create mode 100644 DocPrototype/functions.js create mode 100644 DocPrototype/listFooter.skin create mode 100644 DocPrototype/listHeader.skin create mode 100644 DocPrototype/macros.js create mode 100644 DocPrototype/main.hac create mode 100644 DocPrototype/main.skin create mode 100644 DocPrototype/navig.skin create mode 100644 DocTag/renderfunctions.js create mode 100644 Global/api.skin create mode 100644 Global/functions.js create mode 100644 Global/global.skin create mode 100644 Global/head.skin create mode 100644 Global/macros.js create mode 100644 Global/md5.js create mode 100644 Global/navig.skin create mode 100644 Root/functions.js create mode 100644 Root/image.hac create mode 100644 Root/macros.js create mode 100644 Root/main.hac create mode 100644 Root/main.skin create mode 100644 Root/makekey.hac create mode 100644 app.properties create mode 100644 class.properties diff --git a/Application/functions.js b/Application/functions.js new file mode 100644 index 00000000..04cda7fa --- /dev/null +++ b/Application/functions.js @@ -0,0 +1,35 @@ +/** + * construct an application object so that we can use + * skins for non-active applications too + * @arg name + */ +function constructor(name) { + this.name = name; +} + + +/** + * overrides the internal href-function, as + * helma.framework.core.Application.getNodeHref(Object,String) + * isn't able to compute correct urls for non-node objects. + * @arg action of application + */ +function href(action) { + var url = getProperty("baseURI"); + url = (url==null || url=="null") ? "" : url; + url += this.name + "/" + ( (action!=null && action!="") ? action : "main" ); + return url; +} + + +/** + * return true/false to determine if application is running + */ +function isActive() { + if ( root.getApplication(this.name)==null ) + return false; + else + return true; +} + + diff --git a/Application/head.skin b/Application/head.skin new file mode 100644 index 00000000..a52e6407 --- /dev/null +++ b/Application/head.skin @@ -0,0 +1,10 @@ +

AppManager <% this.title %> +<% this.description prefix="
" %> +
+ -> + /main">AppDoc | + public | + ?app=<% this.title %>&action=flush">flush | + ?app=<% this.title %>&action=restart">restart | + ?app=<% this.title %>&action=stop">stop +

diff --git a/Application/macros.js b/Application/macros.js new file mode 100644 index 00000000..9eec3fe5 --- /dev/null +++ b/Application/macros.js @@ -0,0 +1,172 @@ +/** + * macro rendering a skin + * @param name name of skin + */ +function skin_macro(par) { + if ( par && par.name ) { + this.renderSkin(par.name); + } +} + + +/** + * macro-wrapper for href-function + * @param action name of action to call on this prototype, default main + */ +function href_macro(par) { + return this.href( (par&&par.action)?par.action:"main" ); +} + + +/** + * Macro returning the URL of an application. + * using absoluteURI if set in app.properties, otherwise we go for the href calculated by + * the application (which is using baseURI if set) + */ +function url_macro() { + var str = this.getProperty("absoluteuri"); + if ( str!=null && str!="" ) { + return str; + } else { + return this.getRootHref(); + } +} + + +/** + * Macro returning the title of an application + */ +function title_macro() { + var title = this.name; + return(title); +} + + +/** + * Macro rendering a description of an application from a + * file called description.txt or doc.html located in the + * app's root. Limits description to 200 chars. + * @param Object Macro parameter object + */ +function description_macro(param) { + var str = ""; + var appHome = this.getAppDir(); + var f = new File(this.getAppDir().toString(), "description.txt"); + if (!f.exists()) + f = new File(this.getAppDir().toString(), "doc.html"); + if (f.exists()) { + str = f.readAll(); + if (str.length > 200) + str = str.substring(0, 200) + "..."; + } + return(str); +} + + +/** + * Macro returning the server's uptime nicely formatted + */ +function uptime_macro() { + return formatAge( (java.lang.System.currentTimeMillis()-this.starttime) / 1000 ); +} + + +/** + * Macro returning the number of active sessions. + * parameter used by global.formatCount + * @see global.formatCount + */ +function countSessions_macro(par) { + if ( this.isActive()==true ) + return this.sessions.size() + formatCount(this.sessions.size(),par); + else + return 0; +} + + +/** + * Macro returning the number of logged-in users or the list + * of logged-in users if http-parameter showusers is set to true. + * Makes use of this.countUsers_macro and this.listUsers_macro + * @see application.countUsers_macro + * @see application.listUsers_macro + */ +function users_macro(par) { + if ( req.data.showusers=="true" ) { + this.listUsers_macro(par); + } else { + this.countUsers_macro(par); + } +} + + +/** + * Macro returning the number of logged-in users if application + * is active + * parameter used by global.formatCount + * @see global.formatCount + */ +function countUsers_macro(par) { + if ( this.isActive()==true ) + return this.activeUsers.size() + formatCount(this.activeUsers.size(),par); + else + return 0; +} + + +/** + * Macro rendering the list of logged-in users if application is active + * @param separator html-code written between elements + */ +function listUsers_macro(par) { + var separator = (par && par.separator) ? par.separator : ", "; + if ( this.activeUsers.size()==0 ) + return ""; + var e = this.activeUsers.keys(); + while ( e.hasMoreElements() ) { + res.write ( e.nextElement() ); + if ( e.hasMoreElements() ) { + res.write ( separator ); + } + } +} + + +/** + * Macro returning the number of active evaluators (=threads) + */ +function countActiveEvaluators_macro() { + return this.countActiveEvaluators(); +} + + +/** + * Macro returning the number of free evaluators (=threads) + */ +function countFreeEvaluators_macro() { + return this.countFreeEvaluators(); +} + + +/** + * Macro formatting the 5min average of requests. + */ +function getRequestAvg_macro(par) { + if ( app.requestStat==null || app.requestStat.get(this.name)==null ) + return 0; + if ( this.isActive() ) { + var obj = app.requestStat.get(this.name); + return obj.last5Min + formatCount(obj.last5Min,par); + } else { + return 0 + formatCount(0,par); + } +} + + +/** + * Macro formatting app.properties + */ +function properties_macro(par) { + formatProperties( this.getProperties(), par ); +} + diff --git a/Application/main.hac b/Application/main.hac new file mode 100644 index 00000000..40a43c35 --- /dev/null +++ b/Application/main.hac @@ -0,0 +1,10 @@ +/** + * renders AppManager + */ + +if ( checkAddress()==false ) return; +if ( checkAuth(this)==false ) return; + +res.skin="global"; +res.body = this.renderSkinAsString("main"); + diff --git a/Application/main.skin b/Application/main.skin new file mode 100644 index 00000000..0b05f12d --- /dev/null +++ b/Application/main.skin @@ -0,0 +1,42 @@ +<% this.skin name="head" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<% this.properties prefix="" %> +
application
active sessions: <% this.countSessions %>
?showusers=true">logged-in users: <% this.users %> 
active evaluators: <% this.countActiveEvaluators %>
free evaluators: <% this.countFreeEvaluators %>
5min-request-avg: <% this.getRequestAvg %>
uptime: <% this.uptime %>
app.properties
" separator=" " suffix="
+ diff --git a/Application/mrtg.hac b/Application/mrtg.hac new file mode 100644 index 00000000..fb324794 --- /dev/null +++ b/Application/mrtg.hac @@ -0,0 +1,23 @@ +/** + * prints session- and thread-stats for mrtg-tool + * doesn't check username or password, so that we don't have + * to write them cleartext in a mrtg-configfile + */ + +if ( checkAddress()==false ) return; + +if ( this.isActive()==false ) { + res.write ( "0\n0\n0\n0\n"); + return; +} + +if ( req.data.action=="sessions" ) { + res.write ( this.sessions.size() + "\n0\n0\n0\n" ); + return; +} + +if ( req.data.action=="threads" ) { + res.write ( this.countActiveEvaluators() + "\n" + this.countFreeEvaluators() + "\n0\n0\n"); + return; +} + diff --git a/Application/navig_active.skin b/Application/navig_active.skin new file mode 100644 index 00000000..afd05311 --- /dev/null +++ b/Application/navig_active.skin @@ -0,0 +1,15 @@ +
+ "><% this.title %>
+ <% this.countSessions singular=" Session" plural=" Sessions" %>, <% this.getRequestAvg singular=" Request" plural=" Requests" %>/5min +
+ +
+
diff --git a/Application/navig_disabled.skin b/Application/navig_disabled.skin new file mode 100644 index 00000000..c49223d1 --- /dev/null +++ b/Application/navig_disabled.skin @@ -0,0 +1,10 @@ +
+ + + + +
+ ?app=<% this.title %>&action=start">start +
+ <% this.title %> +
diff --git a/Application/redirectpublic.hac b/Application/redirectpublic.hac new file mode 100644 index 00000000..7ead5169 --- /dev/null +++ b/Application/redirectpublic.hac @@ -0,0 +1,10 @@ +/** + * performs a redirect to the public site + * (workaround, we can't access application object from docapplication for some reason) + * @see application.url_macro + */ + +if ( checkAddress()==false ) return; +if ( checkAuth(this)==false ) return; + +res.redirect ( this.url_macro() ); diff --git a/DocApplication/functions.js b/DocApplication/functions.js new file mode 100644 index 00000000..fbbd7872 --- /dev/null +++ b/DocApplication/functions.js @@ -0,0 +1,14 @@ +/** + * overrides the internal href-function, as + * helma.framework.core.Application.getNodeHref(Object,String) + * isn't able to compute correct urls for non-node objects. + * @arg action of application + */ +function href(action) { + var url = getProperty("baseURI"); + url = (url==null || url=="null") ? "" : url; + url += this.name + "/api/" + ( (action!=null && action!="") ? action : "main" ); + return url; +} + + diff --git a/DocApplication/head.skin b/DocApplication/head.skin new file mode 100644 index 00000000..1bd8e6a2 --- /dev/null +++ b/DocApplication/head.skin @@ -0,0 +1,8 @@ +

AppDoc <% this.name %> +
+ -> + AppManager | + ">public +

+ + diff --git a/DocApplication/index.skin b/DocApplication/index.skin new file mode 100644 index 00000000..51fc7746 --- /dev/null +++ b/DocApplication/index.skin @@ -0,0 +1,11 @@ + +

AppDoc <% this.name %>

+ + + + +<% this.index skin="indexList" %> +
+ +
+ diff --git a/DocApplication/macros.js b/DocApplication/macros.js new file mode 100644 index 00000000..a18e1142 --- /dev/null +++ b/DocApplication/macros.js @@ -0,0 +1,74 @@ +/** + * macro rendering a skin + * @param name name of skin + */ +function skin_macro(par) { + if ( par && par.name ) { + this.renderSkin(par.name); + } +} + + +/** + * macro-wrapper for href-function + * @param action name of action to call on this prototype, default main + */ +function href_macro(par) { + return this.href( (par&&par.action)?par.action:"main" ); +} + + +/** + * link to the "real" application object (ie not the DocApplication) + */ +function parentlink_macro(par) { + var url = getProperty("baseURI"); + url = (url==null || url=="null") ? "" : url; + url += this.name + "/"; + url += (par&&par.action)?par.action:"main"; + return url; +} + + +/** + * list all prototypes of this application + * @param skin name of skin to render on prototype + */ +function prototypes_macro(par) { + var skin = (par && par.skin&&par.skin!="")?par.skin:"appList"; + var arr = this.listPrototypes(); + for ( var i=0; i + + + + + + <% this.prototypes skin="appList" %> +
Prototypes
+ +
+ diff --git a/DocApplication/navig.skin b/DocApplication/navig.skin new file mode 100644 index 00000000..f639e52a --- /dev/null +++ b/DocApplication/navig.skin @@ -0,0 +1,14 @@ +<% this.name %> + + + +

+

+ Prototypes:
+ <% this.prototypes skin="navig" %> +

+ diff --git a/DocFunction/functions.js b/DocFunction/functions.js new file mode 100644 index 00000000..4fac6021 --- /dev/null +++ b/DocFunction/functions.js @@ -0,0 +1,20 @@ + +/** + * overrides the internal href-function, as + * helma.framework.core.Application.getNodeHref(Object,String) + * isn't able to compute correct urls for non-node objects. + * @arg action of prototype + */ +function href(action) { + var url = getProperty("baseURI"); + url = (url==null || url=="null") ? "" : url; + url += this.getParentElement().getParentElement().getName() + "/api/" + this.getParentElement().getName() + "/" + this.getTypeName().toLowerCase()+"_"+this.name + "/" + ( (action!=null && action!="") ? action : "main" ); + return url; +} + + +function getApplication() { + return this.getParentElement().getParentElement(); +} + + diff --git a/DocFunction/indexList.skin b/DocFunction/indexList.skin new file mode 100644 index 00000000..3c0bc71f --- /dev/null +++ b/DocFunction/indexList.skin @@ -0,0 +1,5 @@ + + <% this.name %> + <% this.typename %> in <% this.prototypename %> + ("><% this.prototypename %>/<% this.location %>) + diff --git a/DocFunction/indexListSeparator.skin b/DocFunction/indexListSeparator.skin new file mode 100644 index 00000000..f8d0edd0 --- /dev/null +++ b/DocFunction/indexListSeparator.skin @@ -0,0 +1,3 @@ + +  <% param.letter %> + diff --git a/DocFunction/listElementAction.skin b/DocFunction/listElementAction.skin new file mode 100644 index 00000000..67c5da69 --- /dev/null +++ b/DocFunction/listElementAction.skin @@ -0,0 +1,7 @@ + + +  <% param.group %> +
+ "><% this.name %>
<% this.comment %>
<% this.tags %>
+ + diff --git a/DocFunction/listElementFunction.skin b/DocFunction/listElementFunction.skin new file mode 100644 index 00000000..b692f1ca --- /dev/null +++ b/DocFunction/listElementFunction.skin @@ -0,0 +1,7 @@ + + +  <% param.group %> +
+ "><% this.name %>(<% this.args %>) in <% docprototype.name %>/<% this.location %>
<% this.comment %>
<% this.tags %>
+ + diff --git a/DocFunction/listElementMacro.skin b/DocFunction/listElementMacro.skin new file mode 100644 index 00000000..52a10dbd --- /dev/null +++ b/DocFunction/listElementMacro.skin @@ -0,0 +1,9 @@ + + +  <% param.group %> +
+ "><% docprototype.name %>.<% this.name %> + in <% docprototype.name %>/<% this.location %> +
<% this.comment %>
<% this.tags %>
+ + diff --git a/DocFunction/listElementSkin.skin b/DocFunction/listElementSkin.skin new file mode 100644 index 00000000..71185419 --- /dev/null +++ b/DocFunction/listElementSkin.skin @@ -0,0 +1,7 @@ + + +  <% param.group %> +
+ "><% docprototype.name %>.<% this.name %>
<% this.comment %>
<% this.tags %>
+ + diff --git a/DocFunction/listElementTemplate.skin b/DocFunction/listElementTemplate.skin new file mode 100644 index 00000000..81893dd8 --- /dev/null +++ b/DocFunction/listElementTemplate.skin @@ -0,0 +1,7 @@ + + +  <% param.group %> +
+ "><% this.name %>()
<% this.comment %>
<% this.tags %>
+ + diff --git a/DocFunction/macros.js b/DocFunction/macros.js new file mode 100644 index 00000000..2f58e1ce --- /dev/null +++ b/DocFunction/macros.js @@ -0,0 +1,136 @@ +/** + * macro rendering a skin + * @param name name of skin + */ +function skin_macro(par) { + if ( par && par.name ) { + this.renderSkin(par.name); + } +} + + +/** + * macro-wrapper for href-function + * @param action name of action to call on this prototype, default main + */ +function href_macro(par) { + return this.href( (par&&par.action)?par.action:"main" ); +} + + +/** + * macro returning name of file this method resides in + */ +function location_macro(par) { + var f = new File ( this.getLocation() ); + return f.getName(); +} + + +/** + * macro returning the type of this method (Action, Template, Skin, Macro, Function) + */ +function typename_macro(par) { + return this.getTypeName(); +} + + +/** + * macro returning a link to the prototype page + * @param action name of action to call on this prototype, default main + */ +function prototypehref_macro(par) { + return this.getDocPrototype().href( (par&&par.action)?par.action:"main" ) +} + + +/** + * macro returning the name of the prototype this method belongs to + */ +function prototypename_macro(par) { + return this.getDocPrototype().getName(); +} + + +/** + * macro returning the comment text of this method + * (excluding the tags!) + * @param size (optional) text is cutoff after a number of chars + */ +function comment_macro(par) { + var str = this.getComment(); + if ( par && par.length && str.length > par.size ) { + return ( str.substring(0,par.size) ); + } else { + return ( str ); + } +} + + +/** + * macro rendering the list of tags + */ +function tags_macro() { + var arr = this.listTags(); + var argCt = 0; + for ( var i in arr ) { + if ( arr[i].getKind()==Packages.helma.doc.DocTag.ARG ) + argCt++; + res.write( arr[i].render(argCt,this) ); + } +} + + +/** + * macro rendering sequence of arg1, arg2 etc + * according to number of arguments in doctags. + */ +function args_macro() { + var ct = this.countTags(Packages.helma.doc.DocTag.ARG); + for ( var i=0; i"); + var str4 = ""; + for ( var i=0; i ' + if ( i<100 ) str4+=' '; + str4 += arr[i] + "
"; + } + return ( str4 ); +} + + +/** + * macro returning the fullname of this method + */ +function fullname_macro(par) { + return this.getFullName(); +} + + diff --git a/DocFunction/main.hac b/DocFunction/main.hac new file mode 100644 index 00000000..ef413f29 --- /dev/null +++ b/DocFunction/main.hac @@ -0,0 +1,8 @@ +if ( checkAddress()==false ) return; +if ( checkAuth(this)==false ) return; + +res.body = this.renderSkinAsString("main"); +res.skin = "api"; +res.title = "Application " + this.name; + + diff --git a/DocFunction/main.skin b/DocFunction/main.skin new file mode 100644 index 00000000..29a7bc8f --- /dev/null +++ b/DocFunction/main.skin @@ -0,0 +1,14 @@ + + +

+ ">Prototype <% docprototype.name %>
+ <% this.fullname %> +

+ +
+ in <% docprototype.name%>/<% this.location %>: +
+ + +
<% this.source %>
+ diff --git a/DocPrototype/appList.skin b/DocPrototype/appList.skin new file mode 100644 index 00000000..e132ca63 --- /dev/null +++ b/DocPrototype/appList.skin @@ -0,0 +1,10 @@ + + +  Prototype +
+ "><% this.name %>
+ <% this.comment %> +
+ + + diff --git a/DocPrototype/functions.js b/DocPrototype/functions.js new file mode 100644 index 00000000..053c0541 --- /dev/null +++ b/DocPrototype/functions.js @@ -0,0 +1,14 @@ + +/** + * overrides the internal href-function, as + * helma.framework.core.Application.getNodeHref(Object,String) + * isn't able to compute correct urls for non-node objects. + * @arg action of prototype + */ +function href(action) { + var url = getProperty("baseURI"); + url = (url==null || url=="null") ? "" : url; + url += this.getParentElement().getName() + "/api/" + this.name + "/" + ( (action!=null && action!="") ? action : "main" ); + return url; +} + diff --git a/DocPrototype/listFooter.skin b/DocPrototype/listFooter.skin new file mode 100644 index 00000000..d3f6097b --- /dev/null +++ b/DocPrototype/listFooter.skin @@ -0,0 +1,3 @@ + +
+ diff --git a/DocPrototype/listHeader.skin b/DocPrototype/listHeader.skin new file mode 100644 index 00000000..bbe57421 --- /dev/null +++ b/DocPrototype/listHeader.skin @@ -0,0 +1,7 @@ + + + + + + + diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js new file mode 100644 index 00000000..3db36027 --- /dev/null +++ b/DocPrototype/macros.js @@ -0,0 +1,90 @@ +/** + * macro rendering a skin + * @param name name of skin + */ +function skin_macro(par) { + if ( par && par.name ) { + this.renderSkin(par.name); + } +} + + +/** + * macro-wrapper for href-function + * @param action name of action to call on this prototype, default main + */ +function href_macro(par) { + return this.href( (par&&par.action)?par.action:"main" ); +} + + +/** + * macro returning the comment for this prototype + */ +function comment_macro(par) { + return this.getComment(); +} + + +/** + * macro formatting list of actions of this prototype + */ +function actions_macro(par) { + this.printMethods( Packages.helma.doc.DocElement.ACTION, "listElementAction","Actions" ); +} + + +/** + * macro formatting list of templates of this prototype + */ +function templates_macro(par) { + this.printMethods( Packages.helma.doc.DocElement.TEMPLATE, "listElementTemplate","Templates" ); +} + + +/** + * macro formatting list of functions of this prototype + */ +function functions_macro(par) { + this.printMethods( Packages.helma.doc.DocElement.FUNCTION, "listElementFunction","Functions" ); +} + + +/** + * macro formatting list of skins of this prototype + */ +function skins_macro(par) { + this.printMethods( Packages.helma.doc.DocElement.SKIN, "listElementSkin","Skins" ); +} + + +/** + * macro formatting list of macros of this prototype + */ +function macros_macro(par) { + this.printMethods( Packages.helma.doc.DocElement.MACRO, "listElementMacro","Macros" ); +} + + +/** + * macro-utility: renders a list of methods of this prototype + * usage of docprototype.listHeader/listFooter skin is hardcoded + * @arg type integer - which type of methods are listed + * @arg skin skin to be called on method + * @arg desc string describing the type of method (ie "Skins", "Actions") + */ +function printMethods(type,skin,desc) { + var arr = this.listFunctions(type); + if ( arr.length > 0 ) { + var obj = new Object(); + obj.desc = desc; + this.renderSkin("listHeader",obj); + for ( var i in arr ) { + arr[i].renderSkin(skin,obj); + } + this.renderSkin("listFooter",obj); + } +} + + + diff --git a/DocPrototype/main.hac b/DocPrototype/main.hac new file mode 100644 index 00000000..ef413f29 --- /dev/null +++ b/DocPrototype/main.hac @@ -0,0 +1,8 @@ +if ( checkAddress()==false ) return; +if ( checkAuth(this)==false ) return; + +res.body = this.renderSkinAsString("main"); +res.skin = "api"; +res.title = "Application " + this.name; + + diff --git a/DocPrototype/main.skin b/DocPrototype/main.skin new file mode 100644 index 00000000..71821440 --- /dev/null +++ b/DocPrototype/main.skin @@ -0,0 +1,9 @@ + +

Prototype <% this.name %>

+ +<% this.actions %> +<% this.skins %> +<% this.macros %> +<% this.functions %> +<% this.templates %> + diff --git a/DocPrototype/navig.skin b/DocPrototype/navig.skin new file mode 100644 index 00000000..cc6f041f --- /dev/null +++ b/DocPrototype/navig.skin @@ -0,0 +1,2 @@ + +"><% this.name %>
diff --git a/DocTag/renderfunctions.js b/DocTag/renderfunctions.js new file mode 100644 index 00000000..ede11b25 --- /dev/null +++ b/DocTag/renderfunctions.js @@ -0,0 +1,46 @@ +/** + * function renders list of tags, language is hardcoded here + * @arg number of current argument (for formatting arg1, arg2 etc) + * @arg method method-object from which we try to find other prototypes/methods + * when we're formatting a see tag + */ +function render(argCt,docFunc) { + var str = ""; + if ( this.getKind() == this.ARG ) { + str = "arg" + argCt + ": " + format(this.text); + } else if ( this.getKind() == this.PARAM ) { + str = "Parameter " + this.name; + if ( this.text!=null && this.text!="" ) { + str += ": " + format(this.text); + } + } else if ( this.getKind() == this.RETURNS ) { + str = "Returns: " + format(this.text); + } else if ( this.getKind() == this.AUTHOR ) { + str = "by " + format(this.text) + ""; + } else if ( this.getKind() == this.VERSION ) { + str = "Version " + format(this.text) + ""; + } else if ( this.getKind() == this.RELEASE ) { + str = "since" + format(this.text) + ""; + } else if ( this.getKind() == this.SEE ) { + if ( this.text.indexOf("http://")==0 ) { + str = '' + this.text + ''; + } else { + var tmp = new java.lang.String(this.text); + tmp = tmp.trim(); + var arr = tmp.split("."); + var obj = docFunc.getApplication().getDocPrototype(arr[0]); + if( arr.length>1 && obj.getFunction(arr[1])!=null ) { + str = 'See also: ' + format(tmp) + ''; + } else if ( obj!=null ) { + str = 'See also: ' + format(tmp) + ''; + } + } + if ( str=="" ) { + str = "See also: " + format(this.text); + } + } + return str + "
"; +} + + + diff --git a/Global/api.skin b/Global/api.skin new file mode 100644 index 00000000..d152e04d --- /dev/null +++ b/Global/api.skin @@ -0,0 +1,17 @@ + + +<% skin name="head" %> + + +
<% param.desc %>
+ + + + +
+

">" title="helma" border="0" width="174" height="35" align="baseline" style="border-width:3px;border-color:white;">

+ <% docapplication.skin name="navig" %>
<% response.body %>
+ + + + diff --git a/Global/functions.js b/Global/functions.js new file mode 100644 index 00000000..62858d0b --- /dev/null +++ b/Global/functions.js @@ -0,0 +1,155 @@ + + +/** + * scheduler function, runs global.appStat every minute + */ +function scheduler() { + appStat(); + return 60000; +} + + +/** + * initializes requestStat storage on startup + */ +function onStart() { + app.requestStat = new HopObject(); + app.addressFilter = new Packages.helma.util.InetAddressFilter(); + var str = root.getProperty("allowadmin"); + if ( str!=null && str!="" ) { + var arr = str.split(","); + for ( var i in arr ) { + var str = new java.lang.String(arr[i]); + app.addressFilter.addAddress(str.trim()); + } + } +} + + +/** + * updates the request stats in app.requestStat every 5 minutes + */ +function appStat() { + if ( app.requestStat==null ) { + app.requestStat = new HopObject(); + } + if( (new Date()-300000) < app.requestStat.lastRun ) { + return; + } + var arr = root.getApplications(); + for ( var i=0; ib.name ) + return 1; + else if ( a.name==b.name ) + return 0; + else + return -1; +} + + +/** + * utility function to sort property-arrays by key + */ +function sortProps(a,b) { + if ( a>b ) + return 1; + else if ( a==b ) + return 0; + else + return -1; +} + +/** + * check access to an application or the whole server, authenticate against md5-encrypted + * properties of base-app or the particular application. if username or password aren't set + * go into stealth-mode and return a 404. if username|password are wrong, prepare response- + * object for http-auth and return false. + * @arg application-object + */ +function checkAuth(appObj) { + var ok = false; + + // check against root + var rootUsername = root.getProperty("adminusername"); + var rootPassword = root.getProperty("adminpassword"); + + if ( rootUsername==null || rootUsername=="" || rootPassword==null || rootPassword=="" ) + return forceStealth(); + + var uname = req.getUsername(); + var pwd = req.getPassword(); + + if ( uname==null || uname=="" || pwd==null || pwd=="" ) + return forceAuth(); + + var md5password = calcMD5(uname); + var md5username = calcMD5(pwd); + + if ( md5username==rootUsername && md5password==rootPassword ) + return true; + + if ( appObj!=null && appObj.isActive() ) { + // check against application + var appUsername = appObj.getProperty("adminusername"); + var appPassword = appObj.getProperty("adminpassword"); + if ( appUsername==null || appUsername=="" || appPassword==null || appPassword=="" ) + return forceStealth(); + if ( md5username==appUsername && md5password==appPassword ) + return true; + } + return forceAuth(); +} + + +/** + * check access to the base-app by ip-addresses + */ +function checkAddress() { + if ( !app.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost)) ) + return forceStealth(); + else + return true; +} + + +/** + * response is reset to 401 / authorization required + */ +function forceAuth(appObj) { + res.status = 401; + res.realm = (appObj==null) ? "helma" : appObj.name; + res.reset(); + res.write ("Authorization Required. The server could not verify that you are authorized to access the requested page."); + return false; +} + +/** + * response is reset to 404 / notfound + */ +function forceStealth() { + res.reset(); + res.status = 404; + return false; +} + + + diff --git a/Global/global.skin b/Global/global.skin new file mode 100644 index 00000000..a80b0da1 --- /dev/null +++ b/Global/global.skin @@ -0,0 +1,14 @@ + + +<% skin name="head" %> + + + + + + + +
<% skin name="navig" %><% response.body %>
+ + + diff --git a/Global/head.skin b/Global/head.skin new file mode 100644 index 00000000..4f5659c0 --- /dev/null +++ b/Global/head.skin @@ -0,0 +1,53 @@ + + <% response.title %> + + \ No newline at end of file diff --git a/Global/macros.js b/Global/macros.js new file mode 100644 index 00000000..5f0b72c5 --- /dev/null +++ b/Global/macros.js @@ -0,0 +1,97 @@ +/** + * macro rendering a skin + * @param name name of skin + */ +function skin_macro(par) { + if ( par && par.name ) { + renderSkin(par.name); + } +} + + +/** + * Macro returning the actual date and time. + */ +function now_macro() { + var date = new Date(); + return(date.format("dd.MM.yyyy, HH:mm'h' zzz")); +} + + +/** + * macro-utility: formatting property lists + */ +function formatProperties(props,par) { + var prefix = (par && par.prefix) ? par.prefix : ""; + var suffix = (par && par.suffix) ? par.suffix : ""; + var separator = (par && par.separator) ? par.separator : ""; + var e = props.keys(); + var arr = new Array(); + if ( e==null ) + return ""; + while ( e.hasMoreElements() ) { + arr[arr.length] = e.nextElement(); + } + arr.sort(sortProps); + for ( var i in arr ) { + // don't print the admin-password + if ( arr[i].toLowerCase()=="adminusername" || arr[i].toLowerCase()=="adminpassword" ) continue; + res.write ( prefix + arr[i] + separator + props.getProperty(arr[i]) + suffix ); + } +} + + +/** + * macro-utility: formatting an integer value as human readable bytes + */ +function formatBytes(bytes) { + if ( bytes > Math.pow(2,30) ) { + res.write( Math.round( 100*bytes/Math.pow(2,30) ) / 100 + "gb" ); + } else if ( bytes > Math.pow(2,20) ) { + res.write( Math.round( 100*bytes/Math.pow(2,20) ) / 100 + "mb" ); + } else { + res.write( Math.round( 100*bytes/Math.pow(2,10) ) / 100 + "kb" ); + } +} + + +/** + * macro-utility: formatting time in millis as human readable age + */ +function formatAge(age) { + var str = ""; + var days = Math.floor(age/86400); + var age = age - days * 86400; + var hours = Math.floor(age / 3600); + var age = age - hours * 3600; + var minutes = Math.floor(age / 60); + var seconds = Math.floor(age - minutes * 60); + if (days > 0) + str += (days + " days, "); + if (hours>0) + str += (hours + "h, "); + str += (minutes + "min"); + if (days == 0) str += (", " + seconds + "sec"); + return(str); +} + + +/** + * macro-utility: formatting a number-suffix by choosing between singular and plural + * @arg value number to be formatted + * @arg param-object object to get fields + * @param singular string used for value==1 + * @param plural string used for value!=1 + */ +function formatCount(ct, par) { + if ( !par || !par.singular || !par.plural ) { + return ""; + } + if ( ct==1 ) + return par.singular; + else + return par.plural; +} + + + diff --git a/Global/md5.js b/Global/md5.js new file mode 100644 index 00000000..3d31a709 --- /dev/null +++ b/Global/md5.js @@ -0,0 +1,178 @@ +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Copyright (C) Paul Johnston 1999 - 2000. + * Updated by Greg Holt 2000 - 2001. + * See http://pajhome.org.uk/site/legal.html for details. + */ + + +/** + * Take a string and return the hex representation of its MD5. + * @arg string + */ +function calcMD5(str) +{ + x = str2blks_MD5(str); + a = 1732584193; + b = -271733879; + c = -1732584194; + d = 271733878; + + for(i = 0; i < x.length; i += 16) + { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = ff(c, d, a, b, x[i+10], 17, -42063); + b = ff(b, c, d, a, x[i+11], 22, -1990404162); + a = ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = ff(d, a, b, c, x[i+13], 12, -40341101); + c = ff(c, d, a, b, x[i+14], 17, -1502002290); + b = ff(b, c, d, a, x[i+15], 22, 1236535329); + + a = gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = gg(c, d, a, b, x[i+11], 14, 643717713); + b = gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = gg(d, a, b, c, x[i+10], 9 , 38016083); + c = gg(c, d, a, b, x[i+15], 14, -660478335); + b = gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = gg(b, c, d, a, x[i+12], 20, -1926607734); + + a = hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = hh(c, d, a, b, x[i+11], 16, 1839030562); + b = hh(b, c, d, a, x[i+14], 23, -35309556); + a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = hh(b, c, d, a, x[i+10], 23, -1094730640); + a = hh(a, b, c, d, x[i+13], 4 , 681279174); + d = hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = hh(d, a, b, c, x[i+12], 11, -421815835); + c = hh(c, d, a, b, x[i+15], 16, 530742520); + b = hh(b, c, d, a, x[i+ 2], 23, -995338651); + + a = ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = ii(c, d, a, b, x[i+14], 15, -1416354905); + b = ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = ii(c, d, a, b, x[i+10], 15, -1051523); + b = ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = ii(d, a, b, c, x[i+15], 10, -30611744); + c = ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = ii(b, c, d, a, x[i+13], 21, 1309151649); + a = ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = ii(d, a, b, c, x[i+11], 10, -1120210379); + c = ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = ii(b, c, d, a, x[i+ 9], 21, -343485551); + + a = add(a, olda); + b = add(b, oldb); + c = add(c, oldc); + d = add(d, oldd); + } + return rhex(a) + rhex(b) + rhex(c) + rhex(d); +} + + + +/* + * Convert a 32-bit number to a hex string with ls-byte first + */ +var hex_chr = "0123456789abcdef"; +function rhex(num) +{ + str = ""; + for(j = 0; j <= 3; j++) + str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) + + hex_chr.charAt((num >> (j * 8)) & 0x0F); + return str; +} + +/* + * Convert a string to a sequence of 16-word blocks, stored as an array. + * Append padding bits and the length, as described in the MD5 standard. + */ +function str2blks_MD5(str) +{ + nblk = ((str.length + 8) >> 6) + 1; + blks = new Array(nblk * 16); + for(i = 0; i < nblk * 16; i++) blks[i] = 0; + for(i = 0; i < str.length; i++) + blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8); + blks[i >> 2] |= 0x80 << ((i % 4) * 8); + blks[nblk * 16 - 2] = str.length * 8; + return blks; +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* + * Bitwise rotate a 32-bit number to the left + */ +function rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* + * These functions implement the basic operation for each round of the + * algorithm. + */ +function cmn(q, a, b, x, s, t) +{ + return add(rol(add(add(a, q), add(x, t)), s), b); +} +function ff(a, b, c, d, x, s, t) +{ + return cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function gg(a, b, c, d, x, s, t) +{ + return cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function hh(a, b, c, d, x, s, t) +{ + return cmn(b ^ c ^ d, a, b, x, s, t); +} +function ii(a, b, c, d, x, s, t) +{ + return cmn(c ^ (b | (~d)), a, b, x, s, t); +} diff --git a/Global/navig.skin b/Global/navig.skin new file mode 100644 index 00000000..87cc3ae5 --- /dev/null +++ b/Global/navig.skin @@ -0,0 +1,17 @@ +

">" title="helma" border="0" width="174" height="35" align="baseline" style="border-width:3px;border-color:white;">

+ + +
+ <% root.appCount filter="active" singular=" app" plural=" apps"%> on <% root.hostname %> +
+ +<% root.appList filter="active" %> + +

+ +
+ and <% root.appCount filter="disabled" %> disabled apps: +
+ +<% root.appList filter="disabled" skin="navig_disabled" %> + diff --git a/Root/functions.js b/Root/functions.js new file mode 100644 index 00000000..55a0baea --- /dev/null +++ b/Root/functions.js @@ -0,0 +1,36 @@ + +/** + * lists all applications in appdir. + * for active apps use this.getApplications() = helma.main.Server.getApplications() + */ +function getAllApplications() { + var appsDir = this.getAppsHome(); + var dir = appsDir.list(); + var arr = new Array(); + for ( var i=0; i str.lastIndexOf('/') ) ? str.lastIndexOf('\\') : str.lastIndexOf('/'); + res.write ( arr[i].substring(pos+1) + ".jar" ); + if ( i < arr.length-1 ) res.write ( separator ); + } +} + + +/** + * Macro that returns the name and version of the server's os + */ +function os_macro() { + return java.lang.System.getProperty("os.name") + " " + java.lang.System.getProperty("os.arch") + " " + java.lang.System.getProperty("os.version"); +} + + +/** + * Macro that returns anything from server.properties + */ +function property_macro(par) { + if ( par && par.key ) { + return this.getProperty(key); + } else { + return ""; + } +} + + +/** + * Macro formatting server.properties + */ +function properties_macro(par) { + formatProperties(this.getProperties(),par); +} + + +/** + * Macro that returns the timezone of this server + */ +function timezone_macro(par) { + return java.util.TimeZone.getDefault().getDisplayName(false, java.util.TimeZone.LONG) + " (" + java.util.TimeZone.getDefault().getID() + ")"; +} + + diff --git a/Root/main.hac b/Root/main.hac new file mode 100644 index 00000000..5cb4d0e3 --- /dev/null +++ b/Root/main.hac @@ -0,0 +1,46 @@ + +/** + * main action, show server-stats + * perform start, stop, restart and flush-action + * + */ + + +if ( checkAddress()==false ) return; + +if ( req.data.app!=null && req.data.app!="" && req.data.action!=null && req.data.action!="" ) { + + var appObj = root.getApp(req.data.app); + // check access for application. md5-encoded uname/pwd can also be put in + // app.properties to limit access to a single app + if ( checkAuth(appObj)==false ) return; + + if ( req.data.action=="start" ) { + this.startApplication(req.data.app); + res.redirect ( appObj.href("main") ); + + } else if ( req.data.action=="stop" ) { + if ( checkAuth()==false ) return; + this.stopApplication(req.data.app); + res.redirect ( root.href("main") ); + + } else if ( req.data.action=="restart" ) { + this.stopApplication(req.data.app); + this.startApplication(req.data.app); + res.redirect ( appObj.href("main") ); + + } else if ( req.data.action=="flush" ) { + appObj.clearAppCache(); + res.redirect ( appObj.href("main") ); + + } + +} + +// output only to root +if ( checkAuth()==false ) return; + +res.skin = "global"; +res.title = "Helma Object Publisher - Serverinfo"; +res.body = this.renderSkinAsString("main"); + diff --git a/Root/main.skin b/Root/main.skin new file mode 100644 index 00000000..f3e7910b --- /dev/null +++ b/Root/main.skin @@ -0,0 +1,101 @@ +<% this.hostname %> (<% this.hostaddress %>)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<% this.properties prefix="" %> +
helma
uptime: <% this.uptime %>
version: <% this.version %>
homedir: <% this.home %>
total active sessions <% this.countSessions %>
total request 5-min-avg <% this.countRequests %>
jre
free memory: <% this.jvmFreeMemory %>
used memory: <% this.jvmUsedMemory %>
total memory: <% this.jvmTotalMemory %>
java: <% this.jvm %>
javahome: <% this.jvmHome %>
os: <% this.os %>
localtime: <% now %>
timezone: <% this.timezone %>
loaded Jars: <% this.jvmJars %>
server.properties
" separator=" " suffix="
+ + + + diff --git a/Root/makekey.hac b/Root/makekey.hac new file mode 100644 index 00000000..cadf28c0 --- /dev/null +++ b/Root/makekey.hac @@ -0,0 +1,10 @@ + +if ( checkAddress()==false ) return; +if ( checkAuth()==false ) return; + +if ( req.data.value!=null ) { + res.write ( calcMD5(req.data.value) ); +} else { + res.write ( '
' ); +} + diff --git a/app.properties b/app.properties new file mode 100644 index 00000000..544f3805 --- /dev/null +++ b/app.properties @@ -0,0 +1,5 @@ +# Set this property according to your +# server configuration: + +baseURI = /manage/ + diff --git a/class.properties b/class.properties new file mode 100644 index 00000000..181c3887 --- /dev/null +++ b/class.properties @@ -0,0 +1,11 @@ +# +# Map Java classes to the prototype used to script them +# + +helma.main.Server = root +helma.framework.core.Application = application +helma.doc.DocApplication = docapplication +helma.doc.DocPrototype = docprototype +helma.doc.DocFunction = docfunction +helma.doc.DocTag = doctag + From 69f391d2d67bdb1ae07ba6a9cfd9a41f7ae74d5b Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 11 Mar 2002 14:46:30 +0000 Subject: [PATCH 002/217] modified header in apidocs --- DocApplication/head.skin | 6 +++--- DocApplication/macros.js | 18 ++++++++++++++++++ DocApplication/main.skin | 2 +- DocFunction/macros.js | 21 +++++++++++++++++++++ DocFunction/main.skin | 7 +------ DocPrototype/macros.js | 22 ++++++++++++++++++++++ DocPrototype/main.skin | 3 +-- 7 files changed, 67 insertions(+), 12 deletions(-) diff --git a/DocApplication/head.skin b/DocApplication/head.skin index 1bd8e6a2..56c9c797 100644 --- a/DocApplication/head.skin +++ b/DocApplication/head.skin @@ -1,6 +1,6 @@ -

AppDoc <% this.name %> -
- -> +

AppDoc <% this.name %>

+

<% param.path %>

+

-> AppManager | ">public

diff --git a/DocApplication/macros.js b/DocApplication/macros.js index a18e1142..beb71311 100644 --- a/DocApplication/macros.js +++ b/DocApplication/macros.js @@ -18,6 +18,24 @@ function href_macro(par) { } +/** + * macro rendering page head + */ +function head_macro(par) { + var obj = new Object(); + obj.path = this.getPath(); + this.renderSkin("head",obj); +} + + +/** + * utility function for head_macro, rendering link to app + */ +function getPath() { + return( '' + this.name + '' ); +} + + /** * link to the "real" application object (ie not the DocApplication) */ diff --git a/DocApplication/main.skin b/DocApplication/main.skin index 2a8c5681..72cbefc0 100644 --- a/DocApplication/main.skin +++ b/DocApplication/main.skin @@ -1,4 +1,4 @@ -<% this.skin name="head" %> +<% this.head %> diff --git a/DocFunction/macros.js b/DocFunction/macros.js index 2f58e1ce..ced4f0e9 100644 --- a/DocFunction/macros.js +++ b/DocFunction/macros.js @@ -18,6 +18,27 @@ function href_macro(par) { } +/** + * macro rendering page head + */ +function head_macro(par) { + var obj = new Object(); + obj.path = this.getPath(); + var appObj = this.getApplication(); + appObj.renderSkin("head",obj); +} + + +/** + * utility function for head_macro, rendering link to app and to prototype + */ +function getPath() { + var protoObj = this.getDocPrototype(); + var str = protoObj.getPath() + "/" + this.getFullName(); + return( str ); +} + + /** * macro returning name of file this method resides in */ diff --git a/DocFunction/main.skin b/DocFunction/main.skin index 29a7bc8f..26420fb2 100644 --- a/DocFunction/main.skin +++ b/DocFunction/main.skin @@ -1,9 +1,4 @@ - - -

- ">Prototype <% docprototype.name %>
- <% this.fullname %> -

+<% this.head %>
in <% docprototype.name%>/<% this.location %>: diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js index 3db36027..4334e1bf 100644 --- a/DocPrototype/macros.js +++ b/DocPrototype/macros.js @@ -18,6 +18,28 @@ function href_macro(par) { } +/** + * macro rendering page head + */ +function head_macro(par) { + var obj = new Object(); + obj.path = this.getPath(); + var appObj = this.getApplication(); + appObj.renderSkin("head",obj); +} + + +/** + * utility function for head_macro, rendering link to app and to prototype + */ +function getPath() { + var appObj = this.getApplication(); + var str = appObj.getPath(); + str += '/' + this.name + ''; + return( str ); +} + + /** * macro returning the comment for this prototype */ diff --git a/DocPrototype/main.skin b/DocPrototype/main.skin index 71821440..20cc8ec5 100644 --- a/DocPrototype/main.skin +++ b/DocPrototype/main.skin @@ -1,5 +1,4 @@ - -

Prototype <% this.name %>

+<% this.head %> <% this.actions %> <% this.skins %> From 3c21f1a7d2418c4df8abfc765ab9232213d9eb69 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 11 Mar 2002 15:03:09 +0000 Subject: [PATCH 003/217] ouch --- Global/functions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index 62858d0b..e5f20291 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -101,8 +101,8 @@ function checkAuth(appObj) { if ( uname==null || uname=="" || pwd==null || pwd=="" ) return forceAuth(); - var md5password = calcMD5(uname); - var md5username = calcMD5(pwd); + var md5username = calcMD5(uname); + var md5password = calcMD5(pwd); if ( md5username==rootUsername && md5password==rootPassword ) return true; From b46c2f1f4f3705f3a7b18e089127ad7226490d94 Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 19 Mar 2002 19:32:41 +0000 Subject: [PATCH 004/217] The duplicate clearAppCache() method in Application() isn't necessary anymore because a JavaScript prototype without all the HopObject crap is used for scripting Java objects now. Calling clearCache() will reach through to the Java method. --- Root/main.hac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Root/main.hac b/Root/main.hac index 5cb4d0e3..f2f4bd0c 100644 --- a/Root/main.hac +++ b/Root/main.hac @@ -30,7 +30,7 @@ if ( req.data.app!=null && req.data.app!="" && req.data.action!=null && req.data res.redirect ( appObj.href("main") ); } else if ( req.data.action=="flush" ) { - appObj.clearAppCache(); + appObj.clearCache(); res.redirect ( appObj.href("main") ); } From c8be51599bea68ae965700b238bb9349b70c541e Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 19 Mar 2002 19:33:49 +0000 Subject: [PATCH 005/217] Calling href() on Java objects does indeed work. The problem was that getParentElement() method in Application always returned null (due to a very hard to find bug in helma.main.Server). --- Application/functions.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/Application/functions.js b/Application/functions.js index 04cda7fa..e0e3ca18 100644 --- a/Application/functions.js +++ b/Application/functions.js @@ -8,19 +8,6 @@ function constructor(name) { } -/** - * overrides the internal href-function, as - * helma.framework.core.Application.getNodeHref(Object,String) - * isn't able to compute correct urls for non-node objects. - * @arg action of application - */ -function href(action) { - var url = getProperty("baseURI"); - url = (url==null || url=="null") ? "" : url; - url += this.name + "/" + ( (action!=null && action!="") ? action : "main" ); - return url; -} - /** * return true/false to determine if application is running From cc36746efb59b8f6bcb79a36c2f03d4a6e8c8f59 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 17:55:25 +0000 Subject: [PATCH 006/217] changed typo --- Application/main.skin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Application/main.skin b/Application/main.skin index 0b05f12d..2c9e3cf1 100644 --- a/Application/main.skin +++ b/Application/main.skin @@ -25,7 +25,7 @@
- + From 6374ce94fc5ac7c2f1ff11d050803807058aab85 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 17:56:26 +0000 Subject: [PATCH 007/217] improved addressFilter, switched to helma embedded md5-function --- Global/functions.js | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index e5f20291..4655a2d1 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -10,19 +10,39 @@ function scheduler() { /** - * initializes requestStat storage on startup + * initializes app.requestStat storage on startup, + * creates app.addressFilter */ function onStart() { app.requestStat = new HopObject(); - app.addressFilter = new Packages.helma.util.InetAddressFilter(); + app.addressFilter = createAddressFilter(); +} + +/** + * initializes addressFilter from app.properties, + * hostnames are converted, wildcards are only allowed in ip-addresses + * (so, no network-names, sorry) + */ +function createAddressFilter() { + var filter = new Packages.helma.util.InetAddressFilter(); var str = root.getProperty("allowadmin"); if ( str!=null && str!="" ) { var arr = str.split(","); for ( var i in arr ) { var str = new java.lang.String(arr[i]); - app.addressFilter.addAddress(str.trim()); + var result = tryEval("filter.addAddress(str.trim());"); + if ( result.error!=null ) { + var str = java.net.InetAddress.getByName(str.trim()).getHostAddress(); + var result = tryEval("filter.addAddress(str);"); + } + if ( result.error==null ) { + app.__app__.logEvent( "allowed address for app manage: " + str ); + } } + } else { + app.__app__.logEvent("no addresses allowed for app manage, all access will be denied"); } + return filter; } @@ -92,8 +112,10 @@ function checkAuth(appObj) { var rootUsername = root.getProperty("adminusername"); var rootPassword = root.getProperty("adminpassword"); - if ( rootUsername==null || rootUsername=="" || rootPassword==null || rootPassword=="" ) + if ( rootUsername==null || rootUsername=="" || rootPassword==null || rootPassword=="" ) { + app.__app__.logEvent("adminUsername or adminPassword not set in server.properties!"); return forceStealth(); + } var uname = req.getUsername(); var pwd = req.getPassword(); @@ -101,8 +123,8 @@ function checkAuth(appObj) { if ( uname==null || uname=="" || pwd==null || pwd=="" ) return forceAuth(); - var md5username = calcMD5(uname); - var md5password = calcMD5(pwd); + var md5username = Packages.helma.util.MD5Encoder.encode(uname); + var md5password = Packages.helma.util.MD5Encoder.encode(pwd); if ( md5username==rootUsername && md5password==rootPassword ) return true; @@ -124,10 +146,12 @@ function checkAuth(appObj) { * check access to the base-app by ip-addresses */ function checkAddress() { - if ( !app.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost)) ) + if ( !app.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost)) ) { + app.__app__.logEvent("denied request from " + req.data.http_remotehost ); return forceStealth(); - else + } else { return true; + } } From eb6f593913994a07a4cbf5db4126542365050e2c Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 17:57:38 +0000 Subject: [PATCH 008/217] obsolete after switch to helma embedded md5-function --- Global/md5.js | 178 -------------------------------------------------- 1 file changed, 178 deletions(-) delete mode 100644 Global/md5.js diff --git a/Global/md5.js b/Global/md5.js deleted file mode 100644 index 3d31a709..00000000 --- a/Global/md5.js +++ /dev/null @@ -1,178 +0,0 @@ -/* - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Copyright (C) Paul Johnston 1999 - 2000. - * Updated by Greg Holt 2000 - 2001. - * See http://pajhome.org.uk/site/legal.html for details. - */ - - -/** - * Take a string and return the hex representation of its MD5. - * @arg string - */ -function calcMD5(str) -{ - x = str2blks_MD5(str); - a = 1732584193; - b = -271733879; - c = -1732584194; - d = 271733878; - - for(i = 0; i < x.length; i += 16) - { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = ff(a, b, c, d, x[i+ 0], 7 , -680876936); - d = ff(d, a, b, c, x[i+ 1], 12, -389564586); - c = ff(c, d, a, b, x[i+ 2], 17, 606105819); - b = ff(b, c, d, a, x[i+ 3], 22, -1044525330); - a = ff(a, b, c, d, x[i+ 4], 7 , -176418897); - d = ff(d, a, b, c, x[i+ 5], 12, 1200080426); - c = ff(c, d, a, b, x[i+ 6], 17, -1473231341); - b = ff(b, c, d, a, x[i+ 7], 22, -45705983); - a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416); - d = ff(d, a, b, c, x[i+ 9], 12, -1958414417); - c = ff(c, d, a, b, x[i+10], 17, -42063); - b = ff(b, c, d, a, x[i+11], 22, -1990404162); - a = ff(a, b, c, d, x[i+12], 7 , 1804603682); - d = ff(d, a, b, c, x[i+13], 12, -40341101); - c = ff(c, d, a, b, x[i+14], 17, -1502002290); - b = ff(b, c, d, a, x[i+15], 22, 1236535329); - - a = gg(a, b, c, d, x[i+ 1], 5 , -165796510); - d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632); - c = gg(c, d, a, b, x[i+11], 14, 643717713); - b = gg(b, c, d, a, x[i+ 0], 20, -373897302); - a = gg(a, b, c, d, x[i+ 5], 5 , -701558691); - d = gg(d, a, b, c, x[i+10], 9 , 38016083); - c = gg(c, d, a, b, x[i+15], 14, -660478335); - b = gg(b, c, d, a, x[i+ 4], 20, -405537848); - a = gg(a, b, c, d, x[i+ 9], 5 , 568446438); - d = gg(d, a, b, c, x[i+14], 9 , -1019803690); - c = gg(c, d, a, b, x[i+ 3], 14, -187363961); - b = gg(b, c, d, a, x[i+ 8], 20, 1163531501); - a = gg(a, b, c, d, x[i+13], 5 , -1444681467); - d = gg(d, a, b, c, x[i+ 2], 9 , -51403784); - c = gg(c, d, a, b, x[i+ 7], 14, 1735328473); - b = gg(b, c, d, a, x[i+12], 20, -1926607734); - - a = hh(a, b, c, d, x[i+ 5], 4 , -378558); - d = hh(d, a, b, c, x[i+ 8], 11, -2022574463); - c = hh(c, d, a, b, x[i+11], 16, 1839030562); - b = hh(b, c, d, a, x[i+14], 23, -35309556); - a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060); - d = hh(d, a, b, c, x[i+ 4], 11, 1272893353); - c = hh(c, d, a, b, x[i+ 7], 16, -155497632); - b = hh(b, c, d, a, x[i+10], 23, -1094730640); - a = hh(a, b, c, d, x[i+13], 4 , 681279174); - d = hh(d, a, b, c, x[i+ 0], 11, -358537222); - c = hh(c, d, a, b, x[i+ 3], 16, -722521979); - b = hh(b, c, d, a, x[i+ 6], 23, 76029189); - a = hh(a, b, c, d, x[i+ 9], 4 , -640364487); - d = hh(d, a, b, c, x[i+12], 11, -421815835); - c = hh(c, d, a, b, x[i+15], 16, 530742520); - b = hh(b, c, d, a, x[i+ 2], 23, -995338651); - - a = ii(a, b, c, d, x[i+ 0], 6 , -198630844); - d = ii(d, a, b, c, x[i+ 7], 10, 1126891415); - c = ii(c, d, a, b, x[i+14], 15, -1416354905); - b = ii(b, c, d, a, x[i+ 5], 21, -57434055); - a = ii(a, b, c, d, x[i+12], 6 , 1700485571); - d = ii(d, a, b, c, x[i+ 3], 10, -1894986606); - c = ii(c, d, a, b, x[i+10], 15, -1051523); - b = ii(b, c, d, a, x[i+ 1], 21, -2054922799); - a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359); - d = ii(d, a, b, c, x[i+15], 10, -30611744); - c = ii(c, d, a, b, x[i+ 6], 15, -1560198380); - b = ii(b, c, d, a, x[i+13], 21, 1309151649); - a = ii(a, b, c, d, x[i+ 4], 6 , -145523070); - d = ii(d, a, b, c, x[i+11], 10, -1120210379); - c = ii(c, d, a, b, x[i+ 2], 15, 718787259); - b = ii(b, c, d, a, x[i+ 9], 21, -343485551); - - a = add(a, olda); - b = add(b, oldb); - c = add(c, oldc); - d = add(d, oldd); - } - return rhex(a) + rhex(b) + rhex(c) + rhex(d); -} - - - -/* - * Convert a 32-bit number to a hex string with ls-byte first - */ -var hex_chr = "0123456789abcdef"; -function rhex(num) -{ - str = ""; - for(j = 0; j <= 3; j++) - str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) + - hex_chr.charAt((num >> (j * 8)) & 0x0F); - return str; -} - -/* - * Convert a string to a sequence of 16-word blocks, stored as an array. - * Append padding bits and the length, as described in the MD5 standard. - */ -function str2blks_MD5(str) -{ - nblk = ((str.length + 8) >> 6) + 1; - blks = new Array(nblk * 16); - for(i = 0; i < nblk * 16; i++) blks[i] = 0; - for(i = 0; i < str.length; i++) - blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8); - blks[i >> 2] |= 0x80 << ((i % 4) * 8); - blks[nblk * 16 - 2] = str.length * 8; - return blks; -} - -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ -function add(x, y) -{ - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); -} - -/* - * Bitwise rotate a 32-bit number to the left - */ -function rol(num, cnt) -{ - return (num << cnt) | (num >>> (32 - cnt)); -} - -/* - * These functions implement the basic operation for each round of the - * algorithm. - */ -function cmn(q, a, b, x, s, t) -{ - return add(rol(add(add(a, q), add(x, t)), s), b); -} -function ff(a, b, c, d, x, s, t) -{ - return cmn((b & c) | ((~b) & d), a, b, x, s, t); -} -function gg(a, b, c, d, x, s, t) -{ - return cmn((b & d) | (c & (~d)), a, b, x, s, t); -} -function hh(a, b, c, d, x, s, t) -{ - return cmn(b ^ c ^ d, a, b, x, s, t); -} -function ii(a, b, c, d, x, s, t) -{ - return cmn(c ^ (b | (~d)), a, b, x, s, t); -} From fd73f252a03d3a48a53c2b712121e241f2c17b18 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 17:58:19 +0000 Subject: [PATCH 009/217] bugfixed and improved calculation of 5-minute request count --- Root/macros.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Root/macros.js b/Root/macros.js index 535c81b7..3f5f3be5 100644 --- a/Root/macros.js +++ b/Root/macros.js @@ -26,7 +26,9 @@ function countSessions_macro(par) { var arr = this.getApplications(); var sum = 0; for ( var i=0; i Date: Mon, 25 Mar 2002 17:58:28 +0000 Subject: [PATCH 010/217] typo --- Root/main.skin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Root/main.skin b/Root/main.skin index f3e7910b..fcecd6ef 100644 --- a/Root/main.skin +++ b/Root/main.skin @@ -25,12 +25,12 @@ - + - + From 891b5056c8b2e7cef91c22cbf2261575989f1a4a Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 17:58:45 +0000 Subject: [PATCH 011/217] no message --- description.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 description.txt diff --git a/description.txt b/description.txt new file mode 100644 index 00000000..44be5f58 --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Helma's server management console. Start applications, introspection etc. \ No newline at end of file From bf86d54c6733b60eb9393604cde4f3e84730f723 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 18:36:56 +0000 Subject: [PATCH 012/217] removed obsolete functions: calling href() on Java objects does indeed work. The problem was that getParentElement() method in Application always returned null (due to a very hard to find bug in helma.main.Server). --- DocApplication/functions.js | 14 -------------- DocFunction/functions.js | 13 ------------- DocPrototype/functions.js | 14 -------------- 3 files changed, 41 deletions(-) delete mode 100644 DocApplication/functions.js delete mode 100644 DocPrototype/functions.js diff --git a/DocApplication/functions.js b/DocApplication/functions.js deleted file mode 100644 index fbbd7872..00000000 --- a/DocApplication/functions.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * overrides the internal href-function, as - * helma.framework.core.Application.getNodeHref(Object,String) - * isn't able to compute correct urls for non-node objects. - * @arg action of application - */ -function href(action) { - var url = getProperty("baseURI"); - url = (url==null || url=="null") ? "" : url; - url += this.name + "/api/" + ( (action!=null && action!="") ? action : "main" ); - return url; -} - - diff --git a/DocFunction/functions.js b/DocFunction/functions.js index 4fac6021..c903ff5f 100644 --- a/DocFunction/functions.js +++ b/DocFunction/functions.js @@ -1,17 +1,4 @@ -/** - * overrides the internal href-function, as - * helma.framework.core.Application.getNodeHref(Object,String) - * isn't able to compute correct urls for non-node objects. - * @arg action of prototype - */ -function href(action) { - var url = getProperty("baseURI"); - url = (url==null || url=="null") ? "" : url; - url += this.getParentElement().getParentElement().getName() + "/api/" + this.getParentElement().getName() + "/" + this.getTypeName().toLowerCase()+"_"+this.name + "/" + ( (action!=null && action!="") ? action : "main" ); - return url; -} - function getApplication() { return this.getParentElement().getParentElement(); diff --git a/DocPrototype/functions.js b/DocPrototype/functions.js deleted file mode 100644 index 053c0541..00000000 --- a/DocPrototype/functions.js +++ /dev/null @@ -1,14 +0,0 @@ - -/** - * overrides the internal href-function, as - * helma.framework.core.Application.getNodeHref(Object,String) - * isn't able to compute correct urls for non-node objects. - * @arg action of prototype - */ -function href(action) { - var url = getProperty("baseURI"); - url = (url==null || url=="null") ? "" : url; - url += this.getParentElement().getName() + "/api/" + this.name + "/" + ( (action!=null && action!="") ? action : "main" ); - return url; -} - From 078769bb43f688a8f21fd9b2703f9adc582add35 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 18:37:19 +0000 Subject: [PATCH 013/217] no message --- readme.txt | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 readme.txt diff --git a/readme.txt b/readme.txt new file mode 100644 index 00000000..4086841c --- /dev/null +++ b/readme.txt @@ -0,0 +1,27 @@ +To get the manage-application to work you must: + + - add it to the apps.properties file with the following line + + manage=self + + instead of just the application name. This is to let the + application manager know that the subject of the application + is the server itself. + + - use snapshot 200203xx or later. + + - add the following properties to server.properties: + + allowAdmin=[comma-separated list of hosts or ip-addresses that + are allowed to access this application, wildcards + are only allowed in addresses, not in hostnames] + adminUsername= + adminPassword= + + MD5-encoding can be done either on the shell: + java -classpath helma.jar helma.util.MD5Encode + + Or - once you've got the application up and running - on the web: + http:///manage/makekey + http:///base/makekey + From 7d607250b66923d31549fcf3f87dadff50e06bec Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 25 Mar 2002 18:50:29 +0000 Subject: [PATCH 014/217] added link to helma.org, aehm --- Global/navig.skin | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Global/navig.skin b/Global/navig.skin index 87cc3ae5..441b2e22 100644 --- a/Global/navig.skin +++ b/Global/navig.skin @@ -1,8 +1,13 @@ -

">" title="helma" border="0" width="174" height="35" align="baseline" style="border-width:3px;border-color:white;">

- + +

">" title="helma" border="0" width="174" height="35" align="baseline" style="border-width:3px;border-color:white;"> + helma.org + docs + mailinglist +

- <% root.appCount filter="active" singular=" app" plural=" apps"%> on <% root.hostname %> + <% root.appCount filter="active" singular=" app" plural=" apps"%> on + "><% root.hostname %>
<% root.appList filter="active" %> From fb264c63e59a140f69808a4cda02572c5a18c9a1 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 12:47:49 +0000 Subject: [PATCH 015/217] replaced javascript-md5-library with method in helma.util.MD5Encoder --- Root/makekey.hac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Root/makekey.hac b/Root/makekey.hac index cadf28c0..f032c96f 100644 --- a/Root/makekey.hac +++ b/Root/makekey.hac @@ -3,7 +3,7 @@ if ( checkAddress()==false ) return; if ( checkAuth()==false ) return; if ( req.data.value!=null ) { - res.write ( calcMD5(req.data.value) ); + res.write ( Packages.helma.util.MD5Encoder.encode(req.data.value) ); } else { res.write ( '
' ); } From 41fdae647f6d6caa2d026d2b51d0cd3ca1578366 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 16:04:45 +0000 Subject: [PATCH 016/217] added style-class formEl --- Global/head.skin | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Global/head.skin b/Global/head.skin index 4f5659c0..45680b8e 100644 --- a/Global/head.skin +++ b/Global/head.skin @@ -8,6 +8,12 @@ font-size: 10pt; } + .formEl { + border-color:#000000; + border-style:solid; + border-width:1px; + } + .list_apps { border-color:#ffffff; padding-top:5px; From 9e8d43a015b4f706c3f62fbba514e2be754ba180 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 16:07:48 +0000 Subject: [PATCH 017/217] html-form to set adminUsername and adminPassword --- Global/pwdform.skin | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Global/pwdform.skin diff --git a/Global/pwdform.skin b/Global/pwdform.skin new file mode 100644 index 00000000..0825e3ab --- /dev/null +++ b/Global/pwdform.skin @@ -0,0 +1,30 @@ + + +
<% this.countFreeEvaluators %>
5min-request-avg:requests / 5 min:   <% this.getRequestAvg %>
total active sessionstotal active sessions:   <% this.countSessions %>
total request 5-min-avgtotal requests / 5 min:   <% this.countRequests %>
+ + +
+ +Choose username and password for helma's manager:
+ +Please choose an username and password combination to access the +manage application of this server. They will be saved md5-encoded +to the server.properties file. Later you can change these settings +either manually by editing the server.properties file or through +this webinterface in manage/makekey + +<% param.msg %> +
+ (username)
+ (password)
+ (password retyped)

+
+
+ +Username and password are transmitted in an unsafe cleartext way. +Therefore you're strongly discouraged to use any given combination +that is normally protected through ssh. + +
+ + From 2a25fd3054d02648f05e8e3cb841fb22d60503fd Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 16:08:03 +0000 Subject: [PATCH 018/217] very basic skin --- Global/basic.skin | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Global/basic.skin diff --git a/Global/basic.skin b/Global/basic.skin new file mode 100644 index 00000000..8b300a8a --- /dev/null +++ b/Global/basic.skin @@ -0,0 +1,5 @@ + + +<% response.head %> +<% response.body %> + From ddd6149251d51f3ee973c232c09295256af31d7a Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 16:10:28 +0000 Subject: [PATCH 019/217] added createAuth() if no username/password are set and request comes from localhost checkAuth() now goes into createAuth() to let user enter uname/passwd combination. --- Global/functions.js | 57 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index 4655a2d1..348c1eb7 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -103,7 +103,7 @@ function sortProps(a,b) { * properties of base-app or the particular application. if username or password aren't set * go into stealth-mode and return a 404. if username|password are wrong, prepare response- * object for http-auth and return false. - * @arg application-object + * @arg appObj application object to check against (if adminUsername etc are set in app.properties) */ function checkAuth(appObj) { var ok = false; @@ -113,8 +113,7 @@ function checkAuth(appObj) { var rootPassword = root.getProperty("adminpassword"); if ( rootUsername==null || rootUsername=="" || rootPassword==null || rootPassword=="" ) { - app.__app__.logEvent("adminUsername or adminPassword not set in server.properties!"); - return forceStealth(); + return createAuth(); } var uname = req.getUsername(); @@ -157,11 +156,12 @@ function checkAddress() { /** * response is reset to 401 / authorization required + * @arg realm realm for http-auth */ -function forceAuth(appObj) { - res.status = 401; - res.realm = (appObj==null) ? "helma" : appObj.name; +function forceAuth(realm) { res.reset(); + res.status = 401; + res.realm = (realm!=null) ? realm : "helma"; res.write ("Authorization Required. The server could not verify that you are authorized to access the requested page."); return false; } @@ -176,4 +176,49 @@ function forceStealth() { } +/** + * response is either a html form to enter auth data or input from + * html form is saved to server.properties + * access is only allowed if remote host is in the list of friendly + * ip-adresses in server.properties + */ +function createAuth() { + if ( checkAddress()!=true ) { + // double check + return false; + } + var obj = new Object(); + obj.msg = ""; + + if ( req.data.username!=null && req.data.password!=null && req.data.password2!=null ) { + // we have input from webform + if ( req.data.username=="" ) + obj.msg += "username can't be left empty!
"; + if ( req.data.password=="" ) + obj.msg += "password can't be left empty!
"; + else if ( req.data.password!=req.data.password2 ) + obj.msg += "password and re-typed password don't match!
"; + if ( obj.msg!="" ) { + obj.username = req.data.username; + res.reset(); + renderSkin("pwdform",obj); + return false; + } + var props = root.getProperties(); + props.put("adminUsername", Packages.helma.util.MD5Encoder.encode(req.data.username) ); + props.put("adminPassword", Packages.helma.util.MD5Encoder.encode(req.data.password) ); + props.store( new java.io.FileOutputStream( new java.io.File(root.getHopHome(),"server.properties") ), "# properties saved from application 'manage'" ); + app.__app__.logEvent( req.data.http_remotehost + " saved new adminUsername/adminPassword to server.properties"); + res.redirect ( root.href("main") ); + + } else { + // no input from webform, so print it + res.reset(); + res.skin = "basic"; + res.title = "username & password on " + root.hostname_macro(); + res.head = renderSkinAsString("head"); + res.body = renderSkinAsString("pwdform",obj); + return false; + } +} From 660ea666d99a81fc405e4a39dd80317a307653bb Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 16:11:18 +0000 Subject: [PATCH 020/217] makekey now uses createAuth() and shows a nice form. --- Root/makekey.hac | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Root/makekey.hac b/Root/makekey.hac index f032c96f..1ba50f12 100644 --- a/Root/makekey.hac +++ b/Root/makekey.hac @@ -1,10 +1,11 @@ -if ( checkAddress()==false ) return; -if ( checkAuth()==false ) return; - -if ( req.data.value!=null ) { - res.write ( Packages.helma.util.MD5Encoder.encode(req.data.value) ); -} else { - res.write ( '
' ); +// strictly limit access to localhost: +if ( req.data.http_remotehost!="localhost" && req.data.http_remotehost!="127.0.0.1" ) { + app.__app__.logEvent( req.data.http_remotehost + " tried to access makekey"); + return; } +if ( checkAuth()==false ) return; + +createAuth(); + From 0dbab772a68c6d287c7881e3347d436865af2a9c Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 19:00:03 +0000 Subject: [PATCH 021/217] saving of username and password now works through appending and not by saving the whole properties list. --- Global/functions.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index 348c1eb7..97d90318 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -204,10 +204,15 @@ function createAuth() { renderSkin("pwdform",obj); return false; } - var props = root.getProperties(); - props.put("adminUsername", Packages.helma.util.MD5Encoder.encode(req.data.username) ); - props.put("adminPassword", Packages.helma.util.MD5Encoder.encode(req.data.password) ); - props.store( new java.io.FileOutputStream( new java.io.File(root.getHopHome(),"server.properties") ), "# properties saved from application 'manage'" ); + var f = new File(root.getHopHome().toString, "server.properties"); + var str = f.readAll(); + var sep = java.lang.System.getProperty("line.separator"); + str += sep + "adminUsername=" + Packages.helma.util.MD5Encoder.encode(req.data.username) + sep; + str += "adminPassword=" + Packages.helma.util.MD5Encoder.encode(req.data.password) + sep; + f.remove(); + f.open(); + f.write(str); + f.close(); app.__app__.logEvent( req.data.http_remotehost + " saved new adminUsername/adminPassword to server.properties"); res.redirect ( root.href("main") ); From 8f6503ae6b6745df075d7ff6cbd0bf7c415fdc98 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 26 Mar 2002 19:00:25 +0000 Subject: [PATCH 022/217] changed instructions --- Global/pwdform.skin | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Global/pwdform.skin b/Global/pwdform.skin index 0825e3ab..641aaa2d 100644 --- a/Global/pwdform.skin +++ b/Global/pwdform.skin @@ -4,13 +4,16 @@ -Choose username and password for helma's manager:
+Username and password for helma's manager:
-Please choose an username and password combination to access the -manage application of this server. They will be saved md5-encoded -to the server.properties file. Later you can change these settings -either manually by editing the server.properties file or through -this webinterface in manage/makekey +

Please choose an username and password combination to access the +manage application of this server. They will be appended md5-encoded +to the server.properties file. You can change the settings manually +by editing the server.properties file or through this webinterface +in manage/makekey (from localhost only!).

+

This is a stupid script and doesn't check wheter these properties +are already set in this file. So if you've already set username and +password you need to delete the old values manually.

<% param.msg %>
@@ -20,9 +23,9 @@ this webinterface in manage/makekey
-Username and password are transmitted in an unsafe cleartext way. -Therefore you're strongly discouraged to use any given combination -that is normally protected through ssh. +

Warning: The used http-authorization transmits username and password +in an unsafe cleartext way. Therefore you're strongly discouraged to +use any given combination that is normally protected through SSH.

From a48d2fefc9d5f707f30c2b46053feb7cb0c4909c Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 8 Apr 2002 08:49:41 +0000 Subject: [PATCH 023/217] make app work again with new way of retrieving a custom root object (helma.main.Server, that is) --- class.properties | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/class.properties b/class.properties index 181c3887..57808b22 100644 --- a/class.properties +++ b/class.properties @@ -1,5 +1,20 @@ + +# +# define the root class of this application +# +root = helma.main.Server + +# +# root.factory is used to retrieve the root class of the application +# when the instance has already been created when the application comes up. +# this is true for the helma server that is scripted here. +# +root.factory.class = helma.main.Server +root.factory.method = getServer + # # Map Java classes to the prototype used to script them +# and, yes, map the root class again. # helma.main.Server = root From 0524f54a470c7ce56822c2c9026254ffeb69b47e Mon Sep 17 00:00:00 2001 From: stefanp Date: Thu, 18 Apr 2002 09:37:55 +0000 Subject: [PATCH 024/217] failure to catch an empty enumeration from javascript caused a bug when an application had no app.properties. workaround: check against new method SystemProperties.size(). --- Global/macros.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Global/macros.js b/Global/macros.js index 5f0b72c5..ace6eaae 100644 --- a/Global/macros.js +++ b/Global/macros.js @@ -25,10 +25,10 @@ function formatProperties(props,par) { var prefix = (par && par.prefix) ? par.prefix : ""; var suffix = (par && par.suffix) ? par.suffix : ""; var separator = (par && par.separator) ? par.separator : ""; + if ( props.size()==0 ) + return ""; var e = props.keys(); var arr = new Array(); - if ( e==null ) - return ""; while ( e.hasMoreElements() ) { arr[arr.length] = e.nextElement(); } From 52822f59e39860b68fe020c1f54afdcfca7688ff Mon Sep 17 00:00:00 2001 From: p3k Date: Tue, 23 Apr 2002 11:46:23 +0000 Subject: [PATCH 025/217] moved description from text file description.txt to property "description" in app.properties --- app.properties | 2 ++ description.txt | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 description.txt diff --git a/app.properties b/app.properties index 544f3805..d796f8d5 100644 --- a/app.properties +++ b/app.properties @@ -3,3 +3,5 @@ baseURI = /manage/ +# A short description of what this application is about: +description = Helma's server management console. Start applications, introspection etc. \ No newline at end of file diff --git a/description.txt b/description.txt deleted file mode 100644 index 44be5f58..00000000 --- a/description.txt +++ /dev/null @@ -1 +0,0 @@ -Helma's server management console. Start applications, introspection etc. \ No newline at end of file From 0e9738e95d764e9bbe66f835907ee670c3589528 Mon Sep 17 00:00:00 2001 From: stefanp Date: Wed, 24 Apr 2002 16:04:29 +0000 Subject: [PATCH 026/217] updated to fit the last changes --- readme.txt | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/readme.txt b/readme.txt index 4086841c..74e2e6c3 100644 --- a/readme.txt +++ b/readme.txt @@ -1,14 +1,10 @@ To get the manage-application to work you must: - - add it to the apps.properties file with the following line + - add it to the apps.properties file with the following line: - manage=self + manage - instead of just the application name. This is to let the - application manager know that the subject of the application - is the server itself. - - - use snapshot 200203xx or later. + - use snapshot 20020326 or later. - add the following properties to server.properties: @@ -18,10 +14,12 @@ To get the manage-application to work you must: adminUsername= adminPassword= - MD5-encoding can be done either on the shell: - java -classpath helma.jar helma.util.MD5Encode + MD5-encoding can be done - once you've got the application + up and running - on the web: - Or - once you've got the application up and running - on the web: http:///manage/makekey http:///base/makekey + or you can use a shell-tool integrated in helma: + java -classpath helma.jar helma.util.MD5Encoder + From 32d2230ef5d5f7dc46c6cf5ce2b28e8da2c433c9 Mon Sep 17 00:00:00 2001 From: hns Date: Fri, 31 May 2002 14:14:37 +0000 Subject: [PATCH 027/217] Updated code to new session/app/req/res object layout. --- Application/main.hac | 4 ++-- DocApplication/main.hac | 8 ++++---- DocFunction/main.hac | 6 +++--- DocPrototype/main.hac | 6 +++--- Global/functions.js | 41 +++++++++++++++++++++-------------------- Root/main.hac | 8 +++----- 6 files changed, 36 insertions(+), 37 deletions(-) diff --git a/Application/main.hac b/Application/main.hac index 40a43c35..016058d0 100644 --- a/Application/main.hac +++ b/Application/main.hac @@ -5,6 +5,6 @@ if ( checkAddress()==false ) return; if ( checkAuth(this)==false ) return; -res.skin="global"; -res.body = this.renderSkinAsString("main"); +res.data.body = this.renderSkinAsString("main"); +renderSkin ("global"); diff --git a/DocApplication/main.hac b/DocApplication/main.hac index cac9f238..f61fec7c 100644 --- a/DocApplication/main.hac +++ b/DocApplication/main.hac @@ -12,12 +12,12 @@ if ( req.data.action=="reload" ) { } if ( req.data.action=="index" ) { - res.body = this.renderSkinAsString("index"); + res.data.body = this.renderSkinAsString("index"); } else { - res.body = this.renderSkinAsString("main"); + res.data.body = this.renderSkinAsString("main"); } -res.skin = "api"; -res.title = "Application " + this.name; +res.data.title = "Application " + this.name; +renderSkin("api"); diff --git a/DocFunction/main.hac b/DocFunction/main.hac index ef413f29..6faae50d 100644 --- a/DocFunction/main.hac +++ b/DocFunction/main.hac @@ -1,8 +1,8 @@ if ( checkAddress()==false ) return; if ( checkAuth(this)==false ) return; -res.body = this.renderSkinAsString("main"); -res.skin = "api"; -res.title = "Application " + this.name; +res.data.body = this.renderSkinAsString("main"); +res.data.title = "Application " + this.name; +renderSkin("api"); diff --git a/DocPrototype/main.hac b/DocPrototype/main.hac index ef413f29..77ebcb02 100644 --- a/DocPrototype/main.hac +++ b/DocPrototype/main.hac @@ -1,8 +1,8 @@ if ( checkAddress()==false ) return; if ( checkAuth(this)==false ) return; -res.body = this.renderSkinAsString("main"); -res.skin = "api"; -res.title = "Application " + this.name; +res.data.body = this.renderSkinAsString("main"); +res.data.title = "Application " + this.name; +renderSkin ("api"); diff --git a/Global/functions.js b/Global/functions.js index 97d90318..14c917ad 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -3,19 +3,19 @@ /** * scheduler function, runs global.appStat every minute */ -function scheduler() { +function scheduler() { appStat(); return 60000; } /** - * initializes app.requestStat storage on startup, - * creates app.addressFilter + * initializes app.data.requestStat storage on startup, + * creates app.data.addressFilter */ -function onStart() { - app.requestStat = new HopObject(); - app.addressFilter = createAddressFilter(); +function onStart() { + app.data.requestStat = new HopObject(); + app.data.addressFilter = createAddressFilter(); } /** @@ -36,29 +36,29 @@ function createAddressFilter() { var result = tryEval("filter.addAddress(str);"); } if ( result.error==null ) { - app.__app__.logEvent( "allowed address for app manage: " + str ); + app.log( "allowed address for app manage: " + str ); } } } else { - app.__app__.logEvent("no addresses allowed for app manage, all access will be denied"); + app.log("no addresses allowed for app manage, all access will be denied"); } return filter; } /** - * updates the request stats in app.requestStat every 5 minutes + * updates the request stats in app.data.requestStat every 5 minutes */ function appStat() { - if ( app.requestStat==null ) { - app.requestStat = new HopObject(); + if ( app.data.requestStat==null ) { + app.data.requestStat = new HopObject(); } - if( (new Date()-300000) < app.requestStat.lastRun ) { + if( (new Date()-300000) < app.data.requestStat.lastRun ) { return; } var arr = root.getApplications(); for ( var i=0; i Date: Thu, 20 Jun 2002 17:20:38 +0000 Subject: [PATCH 028/217] made line numbers work again (bug due to xhtml-switch) --- DocFunction/macros.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DocFunction/macros.js b/DocFunction/macros.js index ced4f0e9..24b45320 100644 --- a/DocFunction/macros.js +++ b/DocFunction/macros.js @@ -109,9 +109,9 @@ function tags_macro() { function args_macro() { var ct = this.countTags(Packages.helma.doc.DocTag.ARG); for ( var i=0; i"); + var arr = str3.split("
"); var str4 = ""; for ( var i=0; i ' From 32663df930a7069b25f2803f5d0fa75606c604c9 Mon Sep 17 00:00:00 2001 From: stefanp Date: Thu, 20 Jun 2002 17:20:53 +0000 Subject: [PATCH 029/217] spacing-fix --- DocFunction/listElementFunction.skin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DocFunction/listElementFunction.skin b/DocFunction/listElementFunction.skin index b692f1ca..67686f30 100644 --- a/DocFunction/listElementFunction.skin +++ b/DocFunction/listElementFunction.skin @@ -2,6 +2,6 @@  <% param.group %>
- "><% this.name %>(<% this.args %>) in <% docprototype.name %>/<% this.location %>
<% this.comment %>
<% this.tags %>
+ "><% this.name %> (<% this.args %>)
in <% docprototype.name %>/<% this.location %>
<% this.comment %>
<% this.tags %>
From 2daf832db0224e85180a7fac4ea656d9d1d5823b Mon Sep 17 00:00:00 2001 From: stefanp Date: Thu, 20 Jun 2002 17:21:21 +0000 Subject: [PATCH 030/217] made the "create username/password"-part work with the newer snapshots. --- Global/functions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index 14c917ad..04d5ce1a 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -219,10 +219,10 @@ function createAuth() { } else { // no input from webform, so print it res.reset(); - res.skin = "basic"; - res.title = "username & password on " + root.hostname_macro(); - res.head = renderSkinAsString("head"); - res.body = renderSkinAsString("pwdform",obj); + res.data.title = "username & password on " + root.hostname_macro(); + res.data.head = renderSkinAsString("head"); + res.data.body = renderSkinAsString("pwdform",obj); + renderSkin("basic"); return false; } } From 601f2d688504fe3e4059fc52089599e5486c7bcf Mon Sep 17 00:00:00 2001 From: p3k Date: Tue, 25 Jun 2002 14:03:05 +0000 Subject: [PATCH 031/217] added valign="top" to tags in macro call for this.properties --- Application/main.skin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Application/main.skin b/Application/main.skin index 2c9e3cf1..630e6e8c 100644 --- a/Application/main.skin +++ b/Application/main.skin @@ -37,6 +37,6 @@ app.properties -<% this.properties prefix="" separator=" " suffix="" %> +<% this.properties prefix="" separator=" " suffix="" %> From c3b41519bfa5150afee1e77758b43824ea8c5539 Mon Sep 17 00:00:00 2001 From: p3k Date: Tue, 25 Jun 2002 14:04:29 +0000 Subject: [PATCH 032/217] moved format functions from macros.js to functions.js (where they belong to, imho) --- Global/functions.js | 74 ++++++++++++++++++++++++++++++++++++++++++ Global/macros.js | 79 --------------------------------------------- 2 files changed, 74 insertions(+), 79 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index 04d5ce1a..dc4939f9 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -228,3 +228,77 @@ function createAuth() { } +/** + * macro-utility: formatting property lists + */ +function formatProperties(props,par) { + var prefix = (par && par.prefix) ? par.prefix : ""; + var suffix = (par && par.suffix) ? par.suffix : ""; + var separator = (par && par.separator) ? par.separator : ""; + if ( props.size()==0 ) + return ""; + var e = props.keys(); + var arr = new Array(); + while ( e.hasMoreElements() ) { + arr[arr.length] = e.nextElement(); + } + arr.sort(sortProps); + for ( var i in arr ) { + // don't print the admin-password + if ( arr[i].toLowerCase()=="adminusername" || arr[i].toLowerCase()=="adminpassword" ) continue; + res.write ( prefix + arr[i] + separator + props.getProperty(arr[i]) + suffix ); + } +} + + +/** + * macro-utility: formatting an integer value as human readable bytes + */ +function formatBytes(bytes) { + if ( bytes > Math.pow(2,30) ) { + res.write( Math.round( 100*bytes/Math.pow(2,30) ) / 100 + "gb" ); + } else if ( bytes > Math.pow(2,20) ) { + res.write( Math.round( 100*bytes/Math.pow(2,20) ) / 100 + "mb" ); + } else { + res.write( Math.round( 100*bytes/Math.pow(2,10) ) / 100 + "kb" ); + } +} + + +/** + * macro-utility: formatting time in millis as human readable age + */ +function formatAge(age) { + var str = ""; + var days = Math.floor(age/86400); + var age = age - days * 86400; + var hours = Math.floor(age / 3600); + var age = age - hours * 3600; + var minutes = Math.floor(age / 60); + var seconds = Math.floor(age - minutes * 60); + if (days > 0) + str += (days + " days, "); + if (hours>0) + str += (hours + "h, "); + str += (minutes + "min"); + if (days == 0) str += (", " + seconds + "sec"); + return(str); +} + + +/** + * macro-utility: formatting a number-suffix by choosing between singular and plural + * @arg value number to be formatted + * @arg param-object object to get fields + * @param singular string used for value==1 + * @param plural string used for value!=1 + */ +function formatCount(ct, par) { + if ( !par || !par.singular || !par.plural ) { + return ""; + } + if ( ct==1 ) + return par.singular; + else + return par.plural; +} diff --git a/Global/macros.js b/Global/macros.js index ace6eaae..13408e7a 100644 --- a/Global/macros.js +++ b/Global/macros.js @@ -16,82 +16,3 @@ function now_macro() { var date = new Date(); return(date.format("dd.MM.yyyy, HH:mm'h' zzz")); } - - -/** - * macro-utility: formatting property lists - */ -function formatProperties(props,par) { - var prefix = (par && par.prefix) ? par.prefix : ""; - var suffix = (par && par.suffix) ? par.suffix : ""; - var separator = (par && par.separator) ? par.separator : ""; - if ( props.size()==0 ) - return ""; - var e = props.keys(); - var arr = new Array(); - while ( e.hasMoreElements() ) { - arr[arr.length] = e.nextElement(); - } - arr.sort(sortProps); - for ( var i in arr ) { - // don't print the admin-password - if ( arr[i].toLowerCase()=="adminusername" || arr[i].toLowerCase()=="adminpassword" ) continue; - res.write ( prefix + arr[i] + separator + props.getProperty(arr[i]) + suffix ); - } -} - - -/** - * macro-utility: formatting an integer value as human readable bytes - */ -function formatBytes(bytes) { - if ( bytes > Math.pow(2,30) ) { - res.write( Math.round( 100*bytes/Math.pow(2,30) ) / 100 + "gb" ); - } else if ( bytes > Math.pow(2,20) ) { - res.write( Math.round( 100*bytes/Math.pow(2,20) ) / 100 + "mb" ); - } else { - res.write( Math.round( 100*bytes/Math.pow(2,10) ) / 100 + "kb" ); - } -} - - -/** - * macro-utility: formatting time in millis as human readable age - */ -function formatAge(age) { - var str = ""; - var days = Math.floor(age/86400); - var age = age - days * 86400; - var hours = Math.floor(age / 3600); - var age = age - hours * 3600; - var minutes = Math.floor(age / 60); - var seconds = Math.floor(age - minutes * 60); - if (days > 0) - str += (days + " days, "); - if (hours>0) - str += (hours + "h, "); - str += (minutes + "min"); - if (days == 0) str += (", " + seconds + "sec"); - return(str); -} - - -/** - * macro-utility: formatting a number-suffix by choosing between singular and plural - * @arg value number to be formatted - * @arg param-object object to get fields - * @param singular string used for value==1 - * @param plural string used for value!=1 - */ -function formatCount(ct, par) { - if ( !par || !par.singular || !par.plural ) { - return ""; - } - if ( ct==1 ) - return par.singular; - else - return par.plural; -} - - - From 2b491ebe3937c69e64a501d6bbf2c577a1493f53 Mon Sep 17 00:00:00 2001 From: p3k Date: Thu, 11 Jul 2002 15:35:15 +0000 Subject: [PATCH 033/217] renamed app property "description" to "_description" to indicate internal status --- app.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.properties b/app.properties index d796f8d5..41d1e161 100644 --- a/app.properties +++ b/app.properties @@ -4,4 +4,4 @@ baseURI = /manage/ # A short description of what this application is about: -description = Helma's server management console. Start applications, introspection etc. \ No newline at end of file +_description = Helma's server management console. Start applications, introspection etc. \ No newline at end of file From 1b3d6adc796bcf956a6e3c088c4f5fe5e7e8ee64 Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 16 Jul 2002 14:45:34 +0000 Subject: [PATCH 034/217] Show message when client IP address is not allowed instead of going stealth mode. --- Global/functions.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index dc4939f9..94acd536 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -142,12 +142,15 @@ function checkAuth(appObj) { /** - * check access to the base-app by ip-addresses + * check access to the manage-app by ip-addresses */ function checkAddress() { if ( !app.data.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost)) ) { app.log("denied request from " + req.data.http_remotehost ); - return forceStealth(); + // forceStealth seems a bit like overkill here. + // display a message that the ip address must be added to server.properties + res.write ("Access to address "+req.data.http_remotehost+" denied."); + return false; } else { return true; } From ad6e93aa3830475d8907c817aefcc9e8bd60c219 Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 16 Jul 2002 15:06:01 +0000 Subject: [PATCH 035/217] Do not set baseUri, since this is not necessary with the embedded web server anymore. --- app.properties | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app.properties b/app.properties index 41d1e161..e8473eaa 100644 --- a/app.properties +++ b/app.properties @@ -1,7 +1,6 @@ # Set this property according to your # server configuration: - -baseURI = /manage/ +# baseURI = /manage/ # A short description of what this application is about: -_description = Helma's server management console. Start applications, introspection etc. \ No newline at end of file +_description = Helma's server management console. Start applications, introspection etc. From 38ec696cf2dbcadad0aa50d6e28604081df45501 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 23 Sep 2002 12:21:47 +0000 Subject: [PATCH 036/217] temporary fix to have a working list of apps --- Root/macros.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Root/macros.js b/Root/macros.js index 3f5f3be5..fa4e77c9 100644 --- a/Root/macros.js +++ b/Root/macros.js @@ -113,7 +113,7 @@ function appList_macro(par) { } else { var apps = root.getAllApplications(); } - apps = apps.sort(sortByName); +// apps = apps.sort(sortByName); var html = ""; var param = new Object(); for (var n in apps) { From d3837363e96fef497846bc14a61d90f182cb6a12 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 23 Sep 2002 12:22:13 +0000 Subject: [PATCH 037/217] added blank onRequest() --- Application/functions.js | 7 +++++++ Root/functions.js | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/Application/functions.js b/Application/functions.js index e0e3ca18..63d7278f 100644 --- a/Application/functions.js +++ b/Application/functions.js @@ -1,3 +1,4 @@ + /** * construct an application object so that we can use * skins for non-active applications too @@ -8,6 +9,12 @@ function constructor(name) { } +/** + * of no use, just to avoid error message + */ +function onRequest () { +} + /** * return true/false to determine if application is running diff --git a/Root/functions.js b/Root/functions.js index 55a0baea..342e79ea 100644 --- a/Root/functions.js +++ b/Root/functions.js @@ -1,4 +1,10 @@ +/** + * of no use, just to avoid error message + */ +function onRequest () { +} + /** * lists all applications in appdir. * for active apps use this.getApplications() = helma.main.Server.getApplications() From 5e1913d98b48f389f8642e610b4a333e3ba149dd Mon Sep 17 00:00:00 2001 From: p3k Date: Tue, 24 Sep 2002 08:56:04 +0000 Subject: [PATCH 038/217] sort works again, uncommented line 116 --- Root/macros.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Root/macros.js b/Root/macros.js index fa4e77c9..3f5f3be5 100644 --- a/Root/macros.js +++ b/Root/macros.js @@ -113,7 +113,7 @@ function appList_macro(par) { } else { var apps = root.getAllApplications(); } -// apps = apps.sort(sortByName); + apps = apps.sort(sortByName); var html = ""; var param = new Object(); for (var n in apps) { From 0e1ea8b8c0d9abd999fd348b70cf0d7be056cd76 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 24 Sep 2002 09:04:19 +0000 Subject: [PATCH 039/217] show loaded extensions --- Root/macros.js | 12 +++++++++++- Root/main.skin | 9 +++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Root/macros.js b/Root/macros.js index 3f5f3be5..8108ec3f 100644 --- a/Root/macros.js +++ b/Root/macros.js @@ -56,7 +56,17 @@ function countRequests_macro(par) { } - +function extensions_macro (par) { + var vec = this.getExtensions (); + var str = ""; + for (var i=0; i total active sessions:   - <% this.countSessions %> + <% this.countSessions default=" " %> total requests / 5 min:   - <% this.countRequests %> + <% this.countRequests default=" " %> + + + loaded extensions: +   + <% this.extensions default=" " %> From 1d1da15b10339be93f3a007931c7e291934600e9 Mon Sep 17 00:00:00 2001 From: p3k Date: Fri, 4 Oct 2002 15:43:37 +0000 Subject: [PATCH 040/217] made some decent rearrangements --- app.properties | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app.properties b/app.properties index e8473eaa..267d3c92 100644 --- a/app.properties +++ b/app.properties @@ -1,6 +1,5 @@ -# Set this property according to your -# server configuration: -# baseURI = /manage/ +# Set baseURI for application generated URLs, if necessary. +#baseURI = /manage # A short description of what this application is about: _description = Helma's server management console. Start applications, introspection etc. From 76bbe4053b6482524384e2a384f94c388f8b482b Mon Sep 17 00:00:00 2001 From: p3k Date: Sat, 26 Oct 2002 11:07:50 +0000 Subject: [PATCH 041/217] replaced "prefix" and "suffix" parameters in global formatProperties() function and corresponding skins by "itemprefix" and "itemsuffix" due to incorrect HTML output. --- Application/main.skin | 2 +- Global/functions.js | 5 +---- Root/main.skin | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Application/main.skin b/Application/main.skin index 630e6e8c..4bc3e011 100644 --- a/Application/main.skin +++ b/Application/main.skin @@ -37,6 +37,6 @@ app.properties -<% this.properties prefix="" separator=" " suffix="" %> +<% this.properties itemprefix='' separator=' ' itemsuffix='' % --> diff --git a/Global/functions.js b/Global/functions.js index 94acd536..578ef6eb 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -235,9 +235,6 @@ function createAuth() { * macro-utility: formatting property lists */ function formatProperties(props,par) { - var prefix = (par && par.prefix) ? par.prefix : ""; - var suffix = (par && par.suffix) ? par.suffix : ""; - var separator = (par && par.separator) ? par.separator : ""; if ( props.size()==0 ) return ""; var e = props.keys(); @@ -249,7 +246,7 @@ function formatProperties(props,par) { for ( var i in arr ) { // don't print the admin-password if ( arr[i].toLowerCase()=="adminusername" || arr[i].toLowerCase()=="adminpassword" ) continue; - res.write ( prefix + arr[i] + separator + props.getProperty(arr[i]) + suffix ); + res.write ( par.itemprefix + arr[i] + par.separator + props.getProperty(arr[i]) + par.itemsuffix ); } } diff --git a/Root/main.skin b/Root/main.skin index 306c6761..fd84cdc4 100644 --- a/Root/main.skin +++ b/Root/main.skin @@ -98,7 +98,7 @@ server.properties -<% this.properties prefix="" separator=" " suffix="" %> +<% this.properties itemprefix='' separator=' ' itemsuffix='' %> From 7633e98eea2834e1e4bd330cddd5301902d5a4ae Mon Sep 17 00:00:00 2001 From: stefanp Date: Thu, 21 Nov 2002 18:36:03 +0000 Subject: [PATCH 042/217] major overhaul of the manage app's api-documentation functions. things can now be rendered to static html, new helma features are supported (prototype extension), everyhting is done in a nice and clean way with skins. --- Application/macros.js | 54 ++++++-- Application/main.hac | 6 +- Application/main.skin | 40 ++++-- Application/mrtg.hac | 37 ++++-- Application/navig_active.skin | 5 +- DocApplication/actions.js | 95 ++++++++++++++ DocApplication/frameset.skin | 31 +++++ DocApplication/head.skin | 8 -- DocApplication/index.skin | 11 -- DocApplication/macros.js | 100 +++++++-------- DocApplication/main.hac | 23 ---- DocApplication/main.skin | 11 -- DocApplication/navig.skin | 14 --- DocApplication/prototypes.skin | 10 ++ DocApplication/summary.skin | 4 + DocFunction/actions.js | 8 ++ DocFunction/asLargeListItem.skin | 7 ++ DocFunction/asLargeListItemSkin.skin | 8 ++ DocFunction/asListItem.skin | 2 + DocFunction/asParentListItem.skin | 1 + DocFunction/functions.js | 7 -- DocFunction/indexList.skin | 5 - DocFunction/indexListSeparator.skin | 3 - DocFunction/listElementAction.skin | 7 -- DocFunction/listElementFunction.skin | 7 -- DocFunction/listElementMacro.skin | 9 -- DocFunction/listElementSkin.skin | 7 -- DocFunction/listElementTemplate.skin | 7 -- DocFunction/macros.js | 156 +++++++++-------------- DocFunction/main.hac | 8 -- DocFunction/main.skin | 35 +++++- DocPrototype/actions.js | 10 ++ DocPrototype/appList.skin | 10 -- DocPrototype/asInheritanceLink.skin | 1 + DocPrototype/asParentList.skin | 17 +++ DocPrototype/asPrototypeList.skin | 10 ++ DocPrototype/functions.js | 29 +++++ DocPrototype/list.skin | 11 ++ DocPrototype/listFooter.skin | 3 - DocPrototype/listHeader.skin | 7 -- DocPrototype/macros.js | 177 ++++++++++++++------------- DocPrototype/main.hac | 8 -- DocPrototype/main.skin | 86 ++++++++++++- DocPrototype/navig.skin | 2 - DocTag/author.skin | 2 + DocTag/deprecated.skin | 2 + DocTag/main.skin | 1 + DocTag/overrides.skin | 3 + DocTag/parameter.skin | 2 + DocTag/renderfunctions.js | 46 ------- DocTag/return.skin | 2 + DocTag/see.skin | 2 + Global/api.skin | 72 +++++++++-- Global/functions.js | 68 +++++----- Global/renderFunctions.js | 176 ++++++++++++++++++++++++++ Root/macros.js | 62 +++++++--- Root/main.skin | 45 ++++--- Root/makekey.hac | 13 +- Root/mrtg.hac | 37 ++++++ 59 files changed, 1052 insertions(+), 578 deletions(-) create mode 100644 DocApplication/actions.js create mode 100644 DocApplication/frameset.skin delete mode 100644 DocApplication/head.skin delete mode 100644 DocApplication/index.skin delete mode 100644 DocApplication/main.hac delete mode 100644 DocApplication/main.skin delete mode 100644 DocApplication/navig.skin create mode 100644 DocApplication/prototypes.skin create mode 100644 DocApplication/summary.skin create mode 100644 DocFunction/actions.js create mode 100644 DocFunction/asLargeListItem.skin create mode 100644 DocFunction/asLargeListItemSkin.skin create mode 100644 DocFunction/asListItem.skin create mode 100644 DocFunction/asParentListItem.skin delete mode 100644 DocFunction/functions.js delete mode 100644 DocFunction/indexList.skin delete mode 100644 DocFunction/indexListSeparator.skin delete mode 100644 DocFunction/listElementAction.skin delete mode 100644 DocFunction/listElementFunction.skin delete mode 100644 DocFunction/listElementMacro.skin delete mode 100644 DocFunction/listElementSkin.skin delete mode 100644 DocFunction/listElementTemplate.skin delete mode 100644 DocFunction/main.hac create mode 100644 DocPrototype/actions.js delete mode 100644 DocPrototype/appList.skin create mode 100644 DocPrototype/asInheritanceLink.skin create mode 100644 DocPrototype/asParentList.skin create mode 100644 DocPrototype/asPrototypeList.skin create mode 100644 DocPrototype/functions.js create mode 100644 DocPrototype/list.skin delete mode 100644 DocPrototype/listFooter.skin delete mode 100644 DocPrototype/listHeader.skin delete mode 100644 DocPrototype/main.hac delete mode 100644 DocPrototype/navig.skin create mode 100644 DocTag/author.skin create mode 100644 DocTag/deprecated.skin create mode 100644 DocTag/main.skin create mode 100644 DocTag/overrides.skin create mode 100644 DocTag/parameter.skin delete mode 100644 DocTag/renderfunctions.js create mode 100644 DocTag/return.skin create mode 100644 DocTag/see.skin create mode 100644 Global/renderFunctions.js create mode 100644 Root/mrtg.hac diff --git a/Application/macros.js b/Application/macros.js index 9eec3fe5..219a2a86 100644 --- a/Application/macros.js +++ b/Application/macros.js @@ -149,20 +149,53 @@ function countFreeEvaluators_macro() { /** - * Macro formatting the 5min average of requests. + * Macro returning the current number of objects in the cache */ -function getRequestAvg_macro(par) { - if ( app.requestStat==null || app.requestStat.get(this.name)==null ) - return 0; - if ( this.isActive() ) { - var obj = app.requestStat.get(this.name); - return obj.last5Min + formatCount(obj.last5Min,par); +function cacheusage_macro (param) { + return this.getCacheUsage (); +} + + +/** + * Macro returning the number of objects allowed in the cache + */ +function cachesize_macro (param) { + return this.getProperty ("cachesize", "1000"); +} + + +/** + * Macro formatting the number of requests in the last 5 minutes + */ +function requestCount_macro(par) { + if (app.data.stat==null || app.data.stat.get (this.name)==null) + return "not available"; + if (this.isActive()) { + var obj = app.data.stat.get (this.name); + return obj.requestCount + formatCount (obj.requestCount, par); } else { - return 0 + formatCount(0,par); + return 0 + formatCount (0,par); } } +/** + * Macro formatting the number of errors in the last 5 minutes + */ +function errorCount_macro(par) { + if (app.data.stat==null || app.data.stat.get (this.name)==null) + return "not available"; + if (this.isActive()) { + var obj = app.data.stat.get (this.name); + return obj.errorCount + formatCount (obj.errorCount, par); + } else { + return 0 + formatCount (0,par); + } +} + + + + /** * Macro formatting app.properties */ @@ -170,3 +203,8 @@ function properties_macro(par) { formatProperties( this.getProperties(), par ); } + +function appdir_macro (param) { + return this.getAppDir ().toString (); +} + diff --git a/Application/main.hac b/Application/main.hac index 016058d0..7faa81af 100644 --- a/Application/main.hac +++ b/Application/main.hac @@ -2,8 +2,10 @@ * renders AppManager */ -if ( checkAddress()==false ) return; -if ( checkAuth(this)==false ) return; +if (checkAddress()==false) + return; +if (checkAuth(this)==false) + return; res.data.body = this.renderSkinAsString("main"); renderSkin ("global"); diff --git a/Application/main.skin b/Application/main.skin index 4bc3e011..c689c6a9 100644 --- a/Application/main.skin +++ b/Application/main.skin @@ -1,42 +1,62 @@ <% this.skin name="head" %> - +
application
+ + - + - + - + - + - + - + - + + + + + + + + + + + - + + + -<% this.properties itemprefix='' % --> +
active sessions:active sessions   <% this.countSessions %>
?showusers=true">logged-in users:?showusers=true">logged-in users   <% this.users %> 
active evaluators:active evaluators   <% this.countActiveEvaluators %>
free evaluators:free evaluators   <% this.countFreeEvaluators %>
requests / 5 min:requests / 5 min  <% this.getRequestAvg %><% this.requestCount %>
uptime:errors / 5 min <% this.errorCount %>
cache usage <% this.cacheusage %> objects of <% this.cachesize %>
uptime   <% this.uptime %>
app.propertiesapp directory <% this.appdir %>
' separator=' ' itemsuffix='
+ + + + + +<% this.properties itemprefix='' %>
app.properties
' separator=' ' itemsuffix='
diff --git a/Application/mrtg.hac b/Application/mrtg.hac index fb324794..b6129f21 100644 --- a/Application/mrtg.hac +++ b/Application/mrtg.hac @@ -1,23 +1,42 @@ + /** * prints session- and thread-stats for mrtg-tool * doesn't check username or password, so that we don't have - * to write them cleartext in a mrtg-configfile + * to write them cleartext in a mrtg-configfile but checks the + * remote address. */ -if ( checkAddress()==false ) return; +if ( checkAddress()==false ) + return; if ( this.isActive()==false ) { res.write ( "0\n0\n0\n0\n"); return; } -if ( req.data.action=="sessions" ) { - res.write ( this.sessions.size() + "\n0\n0\n0\n" ); - return; -} +if (req.data.action=="sessions") { -if ( req.data.action=="threads" ) { - res.write ( this.countActiveEvaluators() + "\n" + this.countFreeEvaluators() + "\n0\n0\n"); - return; + res.write (this.sessions.size()); + res.write ("\n0\n0\n0\n"); + +} else if (req.data.action=="threads") { + + res.write (this.countActiveEvaluators () + "\n"); + res.write (this.countEvaluators () + "\n"); + res.write ("0\n0\n"); + +} else if (req.data.action=="cache") { + + res.write (this.getCacheUsage () + "\n"); + res.write (this.getProperty ("cachesize", "1000") + "\n"); + res.write ("0\n0\n"); + +} else if (req.data.action=="requests") { + +// res.write ( + +} else { + res.write ( "0\n0\n0\n0\n"); } + diff --git a/Application/navig_active.skin b/Application/navig_active.skin index afd05311..9bb568a8 100644 --- a/Application/navig_active.skin +++ b/Application/navig_active.skin @@ -2,14 +2,15 @@ "><% this.title %>
<% this.countSessions singular=" Session" plural=" Sessions" %>, <% this.getRequestAvg singular=" Request" plural=" Requests" %>/5min
- +
diff --git a/DocApplication/actions.js b/DocApplication/actions.js new file mode 100644 index 00000000..cbc1d907 --- /dev/null +++ b/DocApplication/actions.js @@ -0,0 +1,95 @@ +function main_action () { + this.renderSkin ("frameset"); +} + + +function prototypes_action () { + res.data.body = this.renderSkinAsString ("prototypes"); + renderSkin ("api"); +} + + +function summary_action () { + res.data.body = this.renderSkinAsString ("summary"); + renderSkin ("api"); +} + + + +function render_action () { + res.write ("renderrendering ... " + new Date () ); + var prefix = this.href (""); + this.storePage (this, "main"); + this.storePage (this, "prototypes"); + this.storePage (this, "summary"); + var arr = this.listChildren (); + for (var i=0; i + + helma api / <% this.name %> + + + + + +" name="prototypes"> +" name="functions"> + +" name="main"> + + +<h2> +Frame Alert</h2> + +<p> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + + + + diff --git a/DocApplication/head.skin b/DocApplication/head.skin deleted file mode 100644 index 56c9c797..00000000 --- a/DocApplication/head.skin +++ /dev/null @@ -1,8 +0,0 @@ -

AppDoc <% this.name %>

-

<% param.path %>

-

-> - AppManager | - ">public -

- - diff --git a/DocApplication/index.skin b/DocApplication/index.skin deleted file mode 100644 index 51fc7746..00000000 --- a/DocApplication/index.skin +++ /dev/null @@ -1,11 +0,0 @@ - -

AppDoc <% this.name %>

- - - - -<% this.index skin="indexList" %> -
- -
- diff --git a/DocApplication/macros.js b/DocApplication/macros.js index beb71311..d14126df 100644 --- a/DocApplication/macros.js +++ b/DocApplication/macros.js @@ -1,3 +1,4 @@ + /** * macro rendering a skin * @param name name of skin @@ -8,43 +9,33 @@ function skin_macro(par) { } } - /** * macro-wrapper for href-function * @param action name of action to call on this prototype, default main */ -function href_macro(par) { - return this.href( (par&&par.action)?par.action:"main" ); +function href_macro(param) { return this.href ((param && param.action) ? param.action : "main"); } + +function comment_macro (param) { return renderComment (this, param); } +function content_macro (param) { return this.getContent (); } +function tags_macro (param) { return renderTags (this, param); } +function location_macro (param) { return renderLocation (this, param); } +function link_macro (param) { return renderLink (this, param); } + +//// END OF COPIED FUNCTIONS + + +function headline_macro (param) { + res.write (this.getName ()); } -/** - * macro rendering page head - */ -function head_macro(par) { - var obj = new Object(); - obj.path = this.getPath(); - this.renderSkin("head",obj); -} - -/** - * utility function for head_macro, rendering link to app - */ -function getPath() { - return( '' + this.name + '' ); -} - - -/** - * link to the "real" application object (ie not the DocApplication) - */ -function parentlink_macro(par) { - var url = getProperty("baseURI"); - url = (url==null || url=="null") ? "" : url; - url += this.name + "/"; - url += (par&&par.action)?par.action:"main"; - return url; +function hrefRoot_macro (param) { + var obj = this.getChildElement ("prototype_root"); + if (obj!=null) { + var action = (param.action) ? param.action : "main"; + return obj.href (action); + } } @@ -53,40 +44,33 @@ function parentlink_macro(par) { * @param skin name of skin to render on prototype */ function prototypes_macro(par) { - var skin = (par && par.skin&&par.skin!="")?par.skin:"appList"; - var arr = this.listPrototypes(); + var skin = (par && par.skin&&par.skin!="") ? par.skin : "asPrototypeList"; + var arr = this.listChildren (); for ( var i=0; i - - - - - - <% this.prototypes skin="appList" %> -
Prototypes
- -
- diff --git a/DocApplication/navig.skin b/DocApplication/navig.skin deleted file mode 100644 index f639e52a..00000000 --- a/DocApplication/navig.skin +++ /dev/null @@ -1,14 +0,0 @@ -<% this.name %> - - - -

-

- Prototypes:
- <% this.prototypes skin="navig" %> -

- diff --git a/DocApplication/prototypes.skin b/DocApplication/prototypes.skin new file mode 100644 index 00000000..cdbcc472 --- /dev/null +++ b/DocApplication/prototypes.skin @@ -0,0 +1,10 @@ + + +Application " target="main"><% this.name %>

+ +<% this.prototypes %> + + + + + diff --git a/DocApplication/summary.skin b/DocApplication/summary.skin new file mode 100644 index 00000000..a030a136 --- /dev/null +++ b/DocApplication/summary.skin @@ -0,0 +1,4 @@ +

Application <% this.headline %>

+ +<% this.comment encoding="html" %> + diff --git a/DocFunction/actions.js b/DocFunction/actions.js new file mode 100644 index 00000000..b7ce0e01 --- /dev/null +++ b/DocFunction/actions.js @@ -0,0 +1,8 @@ +function main_action () { + this.getParentElement ().readFiles (); + res.data.body = this.renderSkinAsString ("main"); + renderSkin ("api"); +} + + + diff --git a/DocFunction/asLargeListItem.skin b/DocFunction/asLargeListItem.skin new file mode 100644 index 00000000..584d72f1 --- /dev/null +++ b/DocFunction/asLargeListItem.skin @@ -0,0 +1,7 @@ + +" target="main"><% this.link %>
+<% this.comment length="200" %> + + + + diff --git a/DocFunction/asLargeListItemSkin.skin b/DocFunction/asLargeListItemSkin.skin new file mode 100644 index 00000000..c659c611 --- /dev/null +++ b/DocFunction/asLargeListItemSkin.skin @@ -0,0 +1,8 @@ + +" target="main"><% this.link %>
+<% this.comment length="200" %> +<% this.skinparameters separator=", "%> + + + + diff --git a/DocFunction/asListItem.skin b/DocFunction/asListItem.skin new file mode 100644 index 00000000..30df0ea1 --- /dev/null +++ b/DocFunction/asListItem.skin @@ -0,0 +1,2 @@ +<% this.link %>
+ diff --git a/DocFunction/asParentListItem.skin b/DocFunction/asParentListItem.skin new file mode 100644 index 00000000..0822c4cc --- /dev/null +++ b/DocFunction/asParentListItem.skin @@ -0,0 +1 @@ +<% this.link %> \ No newline at end of file diff --git a/DocFunction/functions.js b/DocFunction/functions.js deleted file mode 100644 index c903ff5f..00000000 --- a/DocFunction/functions.js +++ /dev/null @@ -1,7 +0,0 @@ - - -function getApplication() { - return this.getParentElement().getParentElement(); -} - - diff --git a/DocFunction/indexList.skin b/DocFunction/indexList.skin deleted file mode 100644 index 3c0bc71f..00000000 --- a/DocFunction/indexList.skin +++ /dev/null @@ -1,5 +0,0 @@ - - <% this.name %> - <% this.typename %> in <% this.prototypename %> - ("><% this.prototypename %>/<% this.location %>) - diff --git a/DocFunction/indexListSeparator.skin b/DocFunction/indexListSeparator.skin deleted file mode 100644 index f8d0edd0..00000000 --- a/DocFunction/indexListSeparator.skin +++ /dev/null @@ -1,3 +0,0 @@ - -  <% param.letter %> - diff --git a/DocFunction/listElementAction.skin b/DocFunction/listElementAction.skin deleted file mode 100644 index 67c5da69..00000000 --- a/DocFunction/listElementAction.skin +++ /dev/null @@ -1,7 +0,0 @@ - - -  <% param.group %> -
- "><% this.name %>
<% this.comment %>
<% this.tags %>
- - diff --git a/DocFunction/listElementFunction.skin b/DocFunction/listElementFunction.skin deleted file mode 100644 index 67686f30..00000000 --- a/DocFunction/listElementFunction.skin +++ /dev/null @@ -1,7 +0,0 @@ - - -  <% param.group %> -
- "><% this.name %> (<% this.args %>) in <% docprototype.name %>/<% this.location %>
<% this.comment %>
<% this.tags %>
- - diff --git a/DocFunction/listElementMacro.skin b/DocFunction/listElementMacro.skin deleted file mode 100644 index 52a10dbd..00000000 --- a/DocFunction/listElementMacro.skin +++ /dev/null @@ -1,9 +0,0 @@ - - -  <% param.group %> -
- "><% docprototype.name %>.<% this.name %> - in <% docprototype.name %>/<% this.location %> -
<% this.comment %>
<% this.tags %>
- - diff --git a/DocFunction/listElementSkin.skin b/DocFunction/listElementSkin.skin deleted file mode 100644 index 71185419..00000000 --- a/DocFunction/listElementSkin.skin +++ /dev/null @@ -1,7 +0,0 @@ - - -  <% param.group %> -
- "><% docprototype.name %>.<% this.name %>
<% this.comment %>
<% this.tags %>
- - diff --git a/DocFunction/listElementTemplate.skin b/DocFunction/listElementTemplate.skin deleted file mode 100644 index 81893dd8..00000000 --- a/DocFunction/listElementTemplate.skin +++ /dev/null @@ -1,7 +0,0 @@ - - -  <% param.group %> -
- "><% this.name %>()
<% this.comment %>
<% this.tags %>
- - diff --git a/DocFunction/macros.js b/DocFunction/macros.js index 24b45320..679de5ba 100644 --- a/DocFunction/macros.js +++ b/DocFunction/macros.js @@ -1,3 +1,4 @@ + /** * macro rendering a skin * @param name name of skin @@ -8,120 +9,83 @@ function skin_macro(par) { } } - /** * macro-wrapper for href-function * @param action name of action to call on this prototype, default main */ -function href_macro(par) { - return this.href( (par&&par.action)?par.action:"main" ); -} +function href_macro(param) { return this.href ((param && param.action) ? param.action : "main"); } + +function comment_macro (param) { return renderComment (this, param); } +function content_macro (param) { return this.getContent (); } +function tags_macro (param) { return renderTags (this, param); } +function location_macro (param) { return renderLocation (this, param); } +function link_macro (param) { return renderLink (this, param); } + +//// END OF COPIED FUNCTIONS -/** - * macro rendering page head - */ -function head_macro(par) { - var obj = new Object(); - obj.path = this.getPath(); - var appObj = this.getApplication(); - appObj.renderSkin("head",obj); -} - - -/** - * utility function for head_macro, rendering link to app and to prototype - */ -function getPath() { - var protoObj = this.getDocPrototype(); - var str = protoObj.getPath() + "/" + this.getFullName(); - return( str ); -} - - -/** - * macro returning name of file this method resides in - */ -function location_macro(par) { - var f = new File ( this.getLocation() ); - return f.getName(); -} - - -/** - * macro returning the type of this method (Action, Template, Skin, Macro, Function) - */ -function typename_macro(par) { - return this.getTypeName(); -} - - -/** - * macro returning a link to the prototype page - * @param action name of action to call on this prototype, default main - */ -function prototypehref_macro(par) { - return this.getDocPrototype().href( (par&&par.action)?par.action:"main" ) -} - - -/** - * macro returning the name of the prototype this method belongs to - */ -function prototypename_macro(par) { - return this.getDocPrototype().getName(); -} - - -/** - * macro returning the comment text of this method - * (excluding the tags!) - * @param size (optional) text is cutoff after a number of chars - */ -function comment_macro(par) { - var str = this.getComment(); - if ( par && par.length && str.length > par.size ) { - return ( str.substring(0,par.size) ); - } else { - return ( str ); +function headline_macro (param) { + var p = this.getParentElement (); + var handler = (p!=null) ? p.getName () : ""; + if (this.getType () == this.ACTION) { + res.write ("/" + this.getName ()); + } else if (this.getType () == this.FUNCTION) { + if (handler!="" && handler!="global") + res.write (handler + "."); + res.write (this.getName () + " ("); + var arr = this.listParameters (); + for (var i=0; i-1) + name = name.substring (0, name.length-6); + res.write (name); + res.write (" %>"); + } else if (this.getType () == this.SKIN) { + if (handler!="" && handler!="global") + res.write (handler + "/"); + res.write (this.getName ()); + res.write (".skin"); } } -/** - * macro rendering the list of tags - */ -function tags_macro() { - var arr = this.listTags(); - var argCt = 0; - for ( var i in arr ) { - if ( arr[i].getKind()==Packages.helma.doc.DocTag.ARG ) - argCt++; - res.write( arr[i].render(argCt,this) ); +function skinparameters_macro (param) { + if (this.getType () == this.SKIN) { + this.parameters_macro (param); } } -/** - * macro rendering sequence of arg1, arg2 etc - * according to number of arguments in doctags. - */ -function args_macro() { - var ct = this.countTags(Packages.helma.doc.DocTag.ARG); - for ( var i=0; i ' - if ( i<100 ) str4+=' '; + if (i<99) str4+=' '; + if (i<9) str4+=' '; str4 += arr[i] + "
"; } return ( str4 ); } -/** - * macro returning the fullname of this method - */ -function fullname_macro(par) { - return this.getFullName(); -} - diff --git a/DocFunction/main.hac b/DocFunction/main.hac deleted file mode 100644 index 6faae50d..00000000 --- a/DocFunction/main.hac +++ /dev/null @@ -1,8 +0,0 @@ -if ( checkAddress()==false ) return; -if ( checkAuth(this)==false ) return; - -res.data.body = this.renderSkinAsString("main"); -res.data.title = "Application " + this.name; -renderSkin("api"); - - diff --git a/DocFunction/main.skin b/DocFunction/main.skin index 26420fb2..f9546829 100644 --- a/DocFunction/main.skin +++ b/DocFunction/main.skin @@ -1,9 +1,34 @@ -<% this.head %> + + + + -
- in <% docprototype.name%>/<% this.location %>: -
+ + + +
+ <% this.headline %>
+
+ <% this.comment suffix="

" %> + <% this.skinparameters prefix="general parameters used in this skin:
  • " separator="
  • " suffix="

" %> +
    + <% this.tags type="param" skin="parameter" %> + <% this.tags type="return" skin="return" %> + <% this.tags type="author" skin="author" %> + <% this.tags type="see" skin="see" %> + <% this.tags type="deprecated" skin="deprecated" %> + <% this.tags type="overrides" skin="overrides" %> +
+
+ + + + + + +
Sourcecode in <% this.location %>: +
<% this.source %>
+
-
<% this.source %>
diff --git a/DocPrototype/actions.js b/DocPrototype/actions.js new file mode 100644 index 00000000..62ee1460 --- /dev/null +++ b/DocPrototype/actions.js @@ -0,0 +1,10 @@ +function list_action () { + res.data.body = this.renderSkinAsString ("list"); + renderSkin ("api"); +} + +function main_action () { + res.data.body = this.renderSkinAsString ("main"); + renderSkin ("api"); +} + diff --git a/DocPrototype/appList.skin b/DocPrototype/appList.skin deleted file mode 100644 index e132ca63..00000000 --- a/DocPrototype/appList.skin +++ /dev/null @@ -1,10 +0,0 @@ - - -  Prototype -
- "><% this.name %>
- <% this.comment %> -
- - - diff --git a/DocPrototype/asInheritanceLink.skin b/DocPrototype/asInheritanceLink.skin new file mode 100644 index 00000000..42449c89 --- /dev/null +++ b/DocPrototype/asInheritanceLink.skin @@ -0,0 +1 @@ +extends Prototype "><% this.name %> \ No newline at end of file diff --git a/DocPrototype/asParentList.skin b/DocPrototype/asParentList.skin new file mode 100644 index 00000000..cfdc8989 --- /dev/null +++ b/DocPrototype/asParentList.skin @@ -0,0 +1,17 @@ + +Inherited from prototype <% this.link %>:
+ + + +<% this.methods separator=", " filter="actions" skin="asParentListItem" prefix="Actions: " suffix="
" %> +<% this.methods separator=", " filter="functions" skin="asParentListItem" prefix="Functions: " suffix="
" %> +<% this.methods separator=", " filter="macros" skin="asParentListItem" prefix="Macros: " suffix="
" %> +<% this.methods separator=", " filter="skins" skin="asParentListItem" prefix="Skins: " suffix="
" %> +<% this.methods separator=", " filter="templates" skin="asParentListItem" prefix="Templates: " suffix="
" %> + + + + + + + diff --git a/DocPrototype/asPrototypeList.skin b/DocPrototype/asPrototypeList.skin new file mode 100644 index 00000000..0f3762aa --- /dev/null +++ b/DocPrototype/asPrototypeList.skin @@ -0,0 +1,10 @@ + +" onClick="parent.changePrototypeList(this);" target="main"><% this.name %> + +<% + this.inheritance action="main" target="main" + onClick="parent.changePrototypeList(this);" hopobject="false" + prefix=" (extends " suffix=")" +%> + +
diff --git a/DocPrototype/functions.js b/DocPrototype/functions.js new file mode 100644 index 00000000..c0bb39c9 --- /dev/null +++ b/DocPrototype/functions.js @@ -0,0 +1,29 @@ + +///** +// * utility function for head_macro, rendering link to app and to prototype +// */ +//function getPath() { +// var appObj = this.getParentElement (); +// var str = appObj.getPath(); +// str += '/' + this.name + ''; +// return( str ); +//} + + + +function translateType (filter) { + if (filter=="actions") + return Packages.helma.doc.DocElement.ACTION; + else if (filter=="templates") + return Packages.helma.doc.DocElement.TEMPLATE; + else if (filter=="functions") + return Packages.helma.doc.DocElement.FUNCTION; + else if (filter=="macros") + return Packages.helma.doc.DocElement.MACRO; + else if (filter=="skins") + return Packages.helma.doc.DocElement.SKIN; + else + return -1; +} + + diff --git a/DocPrototype/list.skin b/DocPrototype/list.skin new file mode 100644 index 00000000..afb66787 --- /dev/null +++ b/DocPrototype/list.skin @@ -0,0 +1,11 @@ +

Prototype " target="main"><% this.name %>

+<% this.inheritance action="list" %> +<% this.inheritance deep="true" hopobject="true" action="main" target="main" onClick="parent.changePrototypeList(this);" separator=", " prefix="extends: " suffix="
" %>
+ + +<% this.methods filter="actions" skin="asListItem" prefix="

Actions:
" suffix="

%> +<% this.methods filter="functions" skin="asListItem" prefix="

Functions:
" suffix="

%> +<% this.methods filter="macros" skin="asListItem" prefix="

Macros:
" suffix="

%> +<% this.methods filter="skins" skin="asListItem" prefix="

Skins:
" suffix="

%> +<% this.methods filter="templates" skin="asListItem" prefix="

Templates:
" suffix="

%> + diff --git a/DocPrototype/listFooter.skin b/DocPrototype/listFooter.skin deleted file mode 100644 index d3f6097b..00000000 --- a/DocPrototype/listFooter.skin +++ /dev/null @@ -1,3 +0,0 @@ - -
- diff --git a/DocPrototype/listHeader.skin b/DocPrototype/listHeader.skin deleted file mode 100644 index bbe57421..00000000 --- a/DocPrototype/listHeader.skin +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js index 4334e1bf..9d509458 100644 --- a/DocPrototype/macros.js +++ b/DocPrototype/macros.js @@ -1,3 +1,4 @@ + /** * macro rendering a skin * @param name name of skin @@ -8,105 +9,105 @@ function skin_macro(par) { } } - /** * macro-wrapper for href-function * @param action name of action to call on this prototype, default main */ -function href_macro(par) { - return this.href( (par&&par.action)?par.action:"main" ); +function href_macro(param) { return this.href ((param && param.action) ? param.action : "main"); } + +function comment_macro (param) { return renderComment (this, param); } +function content_macro (param) { return this.getContent (); } +function tags_macro (param) { return renderTags (this, param); } +function location_macro (param) { return renderLocation (this, param); } +function link_macro (param) { return renderLink (this, param); } + +//// END OF COPIED FUNCTIONS + + + +function headline_macro (param) { + res.write (this.getName ()); } - /** - * macro rendering page head + * macro formatting list of methods of this prototype + * @param filter actions | functions | macros | templates | skins + * @param skin skin to apply to the docfunction object + * @param separator + * @param desc Description that is passed on to the called skin */ -function head_macro(par) { - var obj = new Object(); - obj.path = this.getPath(); - var appObj = this.getApplication(); - appObj.renderSkin("head",obj); -} - - -/** - * utility function for head_macro, rendering link to app and to prototype - */ -function getPath() { - var appObj = this.getApplication(); - var str = appObj.getPath(); - str += '/' + this.name + ''; - return( str ); -} - - -/** - * macro returning the comment for this prototype - */ -function comment_macro(par) { - return this.getComment(); -} - - -/** - * macro formatting list of actions of this prototype - */ -function actions_macro(par) { - this.printMethods( Packages.helma.doc.DocElement.ACTION, "listElementAction","Actions" ); -} - - -/** - * macro formatting list of templates of this prototype - */ -function templates_macro(par) { - this.printMethods( Packages.helma.doc.DocElement.TEMPLATE, "listElementTemplate","Templates" ); -} - - -/** - * macro formatting list of functions of this prototype - */ -function functions_macro(par) { - this.printMethods( Packages.helma.doc.DocElement.FUNCTION, "listElementFunction","Functions" ); -} - - -/** - * macro formatting list of skins of this prototype - */ -function skins_macro(par) { - this.printMethods( Packages.helma.doc.DocElement.SKIN, "listElementSkin","Skins" ); -} - - -/** - * macro formatting list of macros of this prototype - */ -function macros_macro(par) { - this.printMethods( Packages.helma.doc.DocElement.MACRO, "listElementMacro","Macros" ); -} - - -/** - * macro-utility: renders a list of methods of this prototype - * usage of docprototype.listHeader/listFooter skin is hardcoded - * @arg type integer - which type of methods are listed - * @arg skin skin to be called on method - * @arg desc string describing the type of method (ie "Skins", "Actions") - */ -function printMethods(type,skin,desc) { - var arr = this.listFunctions(type); - if ( arr.length > 0 ) { - var obj = new Object(); - obj.desc = desc; - this.renderSkin("listHeader",obj); - for ( var i in arr ) { - arr[i].renderSkin(skin,obj); +function methods_macro (param) { + var skinname = (param.skin) ? param.skin : "list"; + var separator = (param.separator) ? param.separator : ""; + var arr = this.listChildren (); + var type = this.translateType (param.filter); + var sb = new java.lang.StringBuffer (); + for (var i=0; i0) + return str.substring (0, str.length - separator.length); + else + return str; +} + + +function inheritance_macro (param) { + var action = param.action ? param.action : "main"; + var target = param.target ? ('target="' + param.target + '" ') : ''; + var obj = this.getParentPrototype (); + if (obj!=null) { + obj = this.inheritanceUtil (obj, param); + } + if (param.deep=="true") { + while (obj!=null) { + obj = this.inheritanceUtil (obj, param); + } + } +} + +function inheritanceUtil (obj, param) { + if (obj.getName ()=="hopobject" && param.hopobject!="true") + return null; + var tmp = new Object (); + for (var i in param) + tmp[i] = param[i]; + tmp.href = obj.href ((param.action) ? param.action : "main"); + delete tmp.hopobject; + delete tmp.action; + delete tmp.deep; + delete tmp.separator; + res.write (renderLinkTag (tmp)); + res.write (obj.getName () + ""); + if (obj.getParentPrototype ()) + res.write (param.separator); + return obj.getParentPrototype (); +} + + +/** + * loops through the parent prototypes and renders a skin on each + * @param skin + */ +function parentPrototype_macro (param) { + var skinname = (param.skin) ? param.skin : "asParentList"; + var obj = this.getParentPrototype (); + while (obj!=null) { + obj.renderSkin (skinname); + obj = obj.getParentPrototype (); } } +function typeProperties_macro (param) { + var props = this.getTypeProperties (); + if (props!=null) { + res.encode(props.getContent ()); + } +} + diff --git a/DocPrototype/main.hac b/DocPrototype/main.hac deleted file mode 100644 index 77ebcb02..00000000 --- a/DocPrototype/main.hac +++ /dev/null @@ -1,8 +0,0 @@ -if ( checkAddress()==false ) return; -if ( checkAuth(this)==false ) return; - -res.data.body = this.renderSkinAsString("main"); -res.data.title = "Application " + this.name; -renderSkin ("api"); - - diff --git a/DocPrototype/main.skin b/DocPrototype/main.skin index 20cc8ec5..ec24d999 100644 --- a/DocPrototype/main.skin +++ b/DocPrototype/main.skin @@ -1,8 +1,82 @@ -<% this.head %> +
<% param.desc %>
+ + + +
+ Prototype <% this.headline %>
+ <% this.inheritance deep="true" hopobject="true" action="main" target="main" onClick="parent.changePrototypeList(this);" separator=", " prefix="extends: " suffix="
" %> +
+ +ACTIONS | +FUNCTIONS | +MACROS | +SKINS | +TEMPLATES | +TYPE.PROPERTIES + + + + + + + +
+ <% this.comment suffix="

" %> +
    + <% this.tags type="author" skin="author" %> + <% this.tags type="see" skin="see" %> + <% this.tags type="deprecated" skin="deprecated" %> + <% this.tags type="overrides" skin="overrides" %> +
+
+ + + + <% this.methods separator="" + filter="actions" + skin="asLargeListItem" + prefix="" + %> + + <% this.methods separator="" + filter="functions" + skin="asLargeListItem" + prefix="" + %> + + <% this.methods separator="" + filter="macros" + skin="asLargeListItem" + prefix="" + %> + + <% this.methods separator="" + filter="skins" + skin="asLargeListItemSkin" + prefix="" + %> + + <% this.methods separator="" + filter="templates" + skin="asLargeListItem" + prefix="" + %> + + <% this.parentPrototype skin="asParentList" %> +
Actions
Functions
Macros
Skins
Templates
+ +

+ + + + + +
type.properties
<% this.typeProperties prefix="
" suffix="
" %>
+ + + + + + -<% this.actions %> -<% this.skins %> -<% this.macros %> -<% this.functions %> -<% this.templates %> diff --git a/DocPrototype/navig.skin b/DocPrototype/navig.skin deleted file mode 100644 index cc6f041f..00000000 --- a/DocPrototype/navig.skin +++ /dev/null @@ -1,2 +0,0 @@ - -"><% this.name %>
diff --git a/DocTag/author.skin b/DocTag/author.skin new file mode 100644 index 00000000..c319829d --- /dev/null +++ b/DocTag/author.skin @@ -0,0 +1,2 @@ +
  • Author
    +<% this.text %> \ No newline at end of file diff --git a/DocTag/deprecated.skin b/DocTag/deprecated.skin new file mode 100644 index 00000000..57cb4d4e --- /dev/null +++ b/DocTag/deprecated.skin @@ -0,0 +1,2 @@ +
  • Deprecated
    +<% this.text %> diff --git a/DocTag/main.skin b/DocTag/main.skin new file mode 100644 index 00000000..dca81089 --- /dev/null +++ b/DocTag/main.skin @@ -0,0 +1 @@ +
  • <% this.text %> \ No newline at end of file diff --git a/DocTag/overrides.skin b/DocTag/overrides.skin new file mode 100644 index 00000000..4616af7f --- /dev/null +++ b/DocTag/overrides.skin @@ -0,0 +1,3 @@ +
  • Overrides
    +<% param.link %> + diff --git a/DocTag/parameter.skin b/DocTag/parameter.skin new file mode 100644 index 00000000..deeed157 --- /dev/null +++ b/DocTag/parameter.skin @@ -0,0 +1,2 @@ +
  • Parameter <% this.name %>:
    +<% this.text %> \ No newline at end of file diff --git a/DocTag/renderfunctions.js b/DocTag/renderfunctions.js deleted file mode 100644 index ede11b25..00000000 --- a/DocTag/renderfunctions.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * function renders list of tags, language is hardcoded here - * @arg number of current argument (for formatting arg1, arg2 etc) - * @arg method method-object from which we try to find other prototypes/methods - * when we're formatting a see tag - */ -function render(argCt,docFunc) { - var str = ""; - if ( this.getKind() == this.ARG ) { - str = "arg" + argCt + ": " + format(this.text); - } else if ( this.getKind() == this.PARAM ) { - str = "Parameter " + this.name; - if ( this.text!=null && this.text!="" ) { - str += ": " + format(this.text); - } - } else if ( this.getKind() == this.RETURNS ) { - str = "Returns: " + format(this.text); - } else if ( this.getKind() == this.AUTHOR ) { - str = "by " + format(this.text) + ""; - } else if ( this.getKind() == this.VERSION ) { - str = "Version " + format(this.text) + ""; - } else if ( this.getKind() == this.RELEASE ) { - str = "since" + format(this.text) + ""; - } else if ( this.getKind() == this.SEE ) { - if ( this.text.indexOf("http://")==0 ) { - str = '' + this.text + ''; - } else { - var tmp = new java.lang.String(this.text); - tmp = tmp.trim(); - var arr = tmp.split("."); - var obj = docFunc.getApplication().getDocPrototype(arr[0]); - if( arr.length>1 && obj.getFunction(arr[1])!=null ) { - str = 'See also: ' + format(tmp) + ''; - } else if ( obj!=null ) { - str = 'See also: ' + format(tmp) + ''; - } - } - if ( str=="" ) { - str = "See also: " + format(this.text); - } - } - return str + "
    "; -} - - - diff --git a/DocTag/return.skin b/DocTag/return.skin new file mode 100644 index 00000000..a421d33c --- /dev/null +++ b/DocTag/return.skin @@ -0,0 +1,2 @@ +
  • Returns
    +<% this.text %> diff --git a/DocTag/see.skin b/DocTag/see.skin new file mode 100644 index 00000000..5e66957d --- /dev/null +++ b/DocTag/see.skin @@ -0,0 +1,2 @@ +
  • See also
    +<% param.link %> diff --git a/Global/api.skin b/Global/api.skin index d152e04d..9fb798d9 100644 --- a/Global/api.skin +++ b/Global/api.skin @@ -1,17 +1,67 @@ - -<% skin name="head" %> + + + + + + + - - - - - -
    -

    ">" title="helma" border="0" width="174" height="35" align="baseline" style="border-width:3px;border-color:white;">

    - <% docapplication.skin name="navig" %>
    <% response.body %>
    - +<% response.body %> diff --git a/Global/functions.js b/Global/functions.js index 578ef6eb..5e678c23 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -10,11 +10,10 @@ function scheduler() { /** - * initializes app.data.requestStat storage on startup, + * initializes app.data.stat storage on startup, * creates app.data.addressFilter */ function onStart() { - app.data.requestStat = new HopObject(); app.data.addressFilter = createAddressFilter(); } @@ -47,29 +46,28 @@ function createAddressFilter() { /** - * updates the request stats in app.data.requestStat every 5 minutes + * updates the stats in app.data.stat every 5 minutes */ -function appStat() { - if ( app.data.requestStat==null ) { - app.data.requestStat = new HopObject(); - } - if( (new Date()-300000) < app.data.requestStat.lastRun ) { +function appStat () { + if (app.data.stat==null) + app.data.stat = new HopObject (); + if ((new Date()-300000) < app.data.stat.lastRun) return; - } - var arr = root.getApplications(); - for ( var i=0; ib.name ) + if ( a.name>b.name) return 1; else if ( a.name==b.name ) return 0; @@ -132,8 +130,6 @@ function checkAuth(appObj) { // check against application var appUsername = appObj.getProperty("adminusername"); var appPassword = appObj.getProperty("adminpassword"); - if ( appUsername==null || appUsername=="" || appPassword==null || appPassword=="" ) - return forceStealth(); if ( md5username==appUsername && md5password==appPassword ) return true; } @@ -149,7 +145,7 @@ function checkAddress() { app.log("denied request from " + req.data.http_remotehost ); // forceStealth seems a bit like overkill here. // display a message that the ip address must be added to server.properties - res.write ("Access to address "+req.data.http_remotehost+" denied."); + res.write ("Access from address "+req.data.http_remotehost+" denied."); return false; } else { return true; @@ -169,14 +165,7 @@ function forceAuth(realm) { return false; } -/** - * response is reset to 404 / notfound - */ -function forceStealth() { - res.reset(); - res.status = 404; - return false; -} + /** @@ -302,3 +291,16 @@ function formatCount(ct, par) { else return par.plural; } + + +/** + * tries to make out if this server is running linux from java's system properties + */ +function isLinux () { + var str = java.lang.System.getProperty("os.name"); + return (str!=null && str.toLowerCase().indexOf("linux")!=-1); +} + + + + diff --git a/Global/renderFunctions.js b/Global/renderFunctions.js new file mode 100644 index 00000000..c8c17ea7 --- /dev/null +++ b/Global/renderFunctions.js @@ -0,0 +1,176 @@ + + +function renderLink (docEl, param) { + var text = ""; + if (docEl.getType () == docEl.APPLICATION || docEl.getType () == docEl.PROTOTYPE) { + text = docEl.getName (); + } else if (docEl.getType () == docEl.SKIN) { + text = docEl.getName () + ".skin"; + } else if (docEl.getType () == docEl.MACRO) { + if (docEl.getParentElement () && docEl.getParentElement().getName()!="global") { + text = docEl.getParentElement ().getName () + "."; + } + var str = docEl.getName (); + if (str.indexOf("_macro")) { + text += str.substring (0, str.length-6); + } + } else if (docEl.getType () == docEl.FUNCTION) { + var text = docEl.getName () + " ("; + var arr = docEl.listParameters (); + for (var i=0; i'; +} + + + + +function renderLinkTag (param) { + var sb = new java.lang.StringBuffer (); + sb.append (''); + return sb.toString (); +} + + +/** + * renders the name of the location relative to the application + * root. + */ +function renderLocation (docEl, param) { + var f = docEl.getLocation (); + if (f.isDirectory ()) + return f.getName (); + else { + return f.getParentFile ().getName () + "/" + f.getName (); + } +} + + + +/** + * renders tag list. + * @param param.skin skin to render on found DocTags + * @param param.separator String printed between tags + * @param param.type type string (param|return|author|version|see) to filter tags. + */ +function renderTags (docEl, param) { + var skinname = (param.skin) ? param.skin : "main"; + var type = -1; + if (param.type=="param" || param.type=="params") + type = Packages.helma.doc.DocTag.PARAMETER; + else if (param.type=="return" || param.type=="returns") + type = Packages.helma.doc.DocTag.RETURN; + else if (param.type=="author") + type = Packages.helma.doc.DocTag.AUTHOR; + else if (param.type=="version") + type = Packages.helma.doc.DocTag.VERSION; + else if (param.type=="see") + type = Packages.helma.doc.DocTag.SEE; + else if (param.type=="deprecated") + type = Packages.helma.doc.DocTag.DEPRECATED; + else if (param.type=="overrides") + type = Packages.helma.doc.DocTag.OVERRIDES; + var str = ""; + var arr = docEl.listTags (); + for (var i=0; i' + text + ''; + } else { + // make sure we only use the first item in the text so that unlinked comments + // can follow, store & split the that + var tok = new java.util.StringTokenizer (text); + var tmp = tok.nextToken (); + text = " " + text.substring (tmp.length + 1); + var parts = tmp.split("."); + // try to find the application object + var obj = docEl; + while (obj!=null) { + if (obj.getType () == Packages.helma.doc.DocElement.APPLICATION) { + var appObj = obj; + break; + } + obj = obj.getParentElement (); + } + var protoObj = appObj.getChildElement ("prototype_" + parts[0]); + if (protoObj==null) { + // prototype wasn't found, return the unlinked tag + return tmp + text; + } + if (parts.length==1) { + // no function specified, return the linked prototype + return '' + format (tmp) + '' + text; + } + // try to find a function object: + var arr = protoObj.listChildren (); + for (var i=0; i' + format(tmp) + '' + text; + } + } + // function not found: + return tmp + text; + } +} + + + + +/** + * function rendering a comment. + * @param param.length comment is shortened to the given length. + * @returns string + */ +function renderComment (docEl, param) { + var str = docEl.getComment (); + if (param.length) { + if (param.length < str.length) { + return str.substring (0, param.length) + " ..."; + } + } + return str; +} + diff --git a/Root/macros.js b/Root/macros.js index 8108ec3f..fe3c30de 100644 --- a/Root/macros.js +++ b/Root/macros.js @@ -35,27 +35,50 @@ function countSessions_macro(par) { /** - * macro returning the total number of sessions on this server + * macro returning the number of requests during the last 5 minutes * @see global.formatCount */ -function countRequests_macro(par) { - if ( app.requestStat==null ) { +function requestCount_macro(par) { + if (app.data.stat==null) { return; } - var arr = this.getApplications(); + var arr = this.getApplications (); var sum = 0; - for ( var i=0; i - uptime: + uptime:   <% this.uptime %> - version: + version:   <% this.version %> - homedir: + homedir:   <% this.home %> - total active sessions: + total active sessions:   <% this.countSessions default=" " %> - total requests / 5 min: + total requests / 5 min:   - <% this.countRequests default=" " %> + <% this.requestCount default=" " %> - loaded extensions: + total errors / 5 min: +   + <% this.errorCount default=" " %> + + + loaded extensions:   <% this.extensions default=" " %> @@ -45,51 +50,51 @@ - free memory: + free memory:   - <% this.jvmFreeMemory %> + <% this.jvmFreeMemory hr="true" %> - used memory: + used memory:   - <% this.jvmUsedMemory %> + <% this.jvmUsedMemory hr="true" %> - total memory: + total memory:   - <% this.jvmTotalMemory %> + <% this.jvmTotalMemory hr="true" %> - java: + java:   <% this.jvm %> - javahome: + javahome:   <% this.jvmHome %> - os: + os:   <% this.os %> - localtime: + localtime:   <% now %> - timezone: + timezone:   <% this.timezone %> - loaded Jars: + loaded Jars:   <% this.jvmJars %> @@ -98,7 +103,7 @@ server.properties -<% this.properties itemprefix='' separator=' ' itemsuffix='' %> +<% this.properties itemprefix='' separator=' ' itemsuffix='' %> diff --git a/Root/makekey.hac b/Root/makekey.hac index 1ba50f12..4800e2e4 100644 --- a/Root/makekey.hac +++ b/Root/makekey.hac @@ -1,11 +1,12 @@ -// strictly limit access to localhost: -if ( req.data.http_remotehost!="localhost" && req.data.http_remotehost!="127.0.0.1" ) { - app.__app__.logEvent( req.data.http_remotehost + " tried to access makekey"); - return; -} +//// strictly limit access to localhost: +//if ( req.data.http_remotehost!="localhost" && req.data.http_remotehost!="127.0.0.1" ) { +// app.logEvent( req.data.http_remotehost + " tried to access makekey"); +// return; +//} -if ( checkAuth()==false ) return; +if ( checkAuth()==false ) + return; createAuth(); diff --git a/Root/mrtg.hac b/Root/mrtg.hac new file mode 100644 index 00000000..44b672c8 --- /dev/null +++ b/Root/mrtg.hac @@ -0,0 +1,37 @@ + +/** + * prints server-stats for mrtg-tool. + * doesn't check username or password, so that we don't have + * to write them cleartext in a mrtg-configfile but checks the + * remote address. + */ + +if ( checkAddress()==false ) + return; + + +if (req.data.action=="memory") { + + res.write (this.jvmTotalMemory_macro () + "\n"); + res.write (this.jvmFreeMemory_macro () + "\n"); + res.write ("0\n0\n"); + +} else if (req.data.action=="netstat" && isLinux ()) { + + var str = (new File("/proc/net/tcp")).readAll(); + var arr = str.split("\n"); + res.write (arr.length-2 + "\n"); + res.write ("0\n0\n0\n"); + +} else if (req.data.action=="loadavg" && isLinux ()) { + + // load average of last 5 minutes: + var str = (new File("/proc/loadavg")).readAll(); + var arr = str.split(" "); + res.write (arr[1]*100 + "\n"); + res.write ("0\n0\n0\n"); + +} else { + res.write ( "0\n0\n0\n0\n"); +} + From 604ab4f8ba15ad4beadc7bbaaabc3ab96c33fa9e Mon Sep 17 00:00:00 2001 From: stefanp Date: Fri, 22 Nov 2002 11:39:11 +0000 Subject: [PATCH 043/217] lots of formatting fixes, added functionindex to docapplication --- Application/head.skin | 3 +- Application/navig_active.skin | 12 +++-- DocApplication/actions.js | 73 +++++------------------------- DocApplication/functionindex.skin | 24 ++++++++++ DocApplication/functions.js | 58 ++++++++++++++++++++++++ DocApplication/indexSeparator.skin | 3 ++ DocApplication/macros.js | 51 ++++++++++++--------- DocApplication/summary.skin | 27 ++++++++++- DocFunction/asIndexItem.skin | 7 +++ DocFunction/asLargeListItem.skin | 2 - DocFunction/macros.js | 5 +- DocPrototype/asSummary.skin | 4 ++ DocPrototype/macros.js | 19 ++++++-- DocPrototype/main.skin | 18 ++++---- DocPrototype/typeproperties.skin | 9 ++++ Global/functions.js | 4 +- Global/navig.skin | 14 ++++-- Global/renderFunctions.js | 2 +- 18 files changed, 219 insertions(+), 116 deletions(-) create mode 100644 DocApplication/functionindex.skin create mode 100644 DocApplication/functions.js create mode 100644 DocApplication/indexSeparator.skin create mode 100644 DocFunction/asIndexItem.skin create mode 100644 DocPrototype/asSummary.skin create mode 100644 DocPrototype/typeproperties.skin diff --git a/Application/head.skin b/Application/head.skin index a52e6407..1a5b8604 100644 --- a/Application/head.skin +++ b/Application/head.skin @@ -2,7 +2,8 @@ <% this.description prefix="
    " %>
    -> - /main">AppDoc | + /main">showAPI | + /render">renderAPI | public | ?app=<% this.title %>&action=flush">flush | ?app=<% this.title %>&action=restart">restart | diff --git a/Application/navig_active.skin b/Application/navig_active.skin index 9bb568a8..c35d2472 100644 --- a/Application/navig_active.skin +++ b/Application/navig_active.skin @@ -1,13 +1,15 @@
    "><% this.title %>
    - <% this.countSessions singular=" Session" plural=" Sessions" %>, <% this.getRequestAvg singular=" Request" plural=" Requests" %>/5min + <% this.countSessions singular=" Session" plural=" Sessions" %>, + <% this.requestCount singular=" Request" plural=" Requests" %>/5min
    - diff --git a/DocApplication/actions.js b/DocApplication/actions.js index cbc1d907..27df09dd 100644 --- a/DocApplication/actions.js +++ b/DocApplication/actions.js @@ -15,81 +15,30 @@ function summary_action () { } +function functionindex_action () { + res.data.body = this.renderSkinAsString ("functionindex"); + renderSkin ("api"); +} + function render_action () { - res.write ("renderrendering ... " + new Date () ); + res.writeln("renderrendering API ... "); var prefix = this.href (""); this.storePage (this, "main"); this.storePage (this, "prototypes"); this.storePage (this, "summary"); + this.storePage (this, "functionindex"); + var ct = 4; var arr = this.listChildren (); for (var i=0; i + + + +
    - /render">render AppDoc - /main">AppDoc - ?app=<% this.title %>&action=flush">flush + + /main">showAPI | + /render">renderAPI | + public | + ?app=<% this.title %>&action=flush">flush | ?app=<% this.title %>&action=restart">restart
    + Application <% this.headline %>
    +
    + +">SUMMARY | +">INDEX | +A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z| + + + <% this.functions skin="asIndexItem" + separator="" + %> +
    + +">SUMMARY | +">INDEX | +A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z| + diff --git a/DocApplication/functions.js b/DocApplication/functions.js new file mode 100644 index 00000000..16dbe089 --- /dev/null +++ b/DocApplication/functions.js @@ -0,0 +1,58 @@ + + +function getDocPrototype (obj) { + var tmp = obj; + while (tmp!=null && tmp.getType () != this.PROTOTYPE) { + tmp = tmp.getParentElement (); + } + return tmp; +} + +function getDir (dir, obj) { + dir.mkdir (); + if (obj.getType () == this.APPLICATION) { + return dir; + } else if (obj.getType () == this.PROTOTYPE) { + var protoObj = this.getDocPrototype (obj); + var dir = new File (dir, protoObj.getElementName ()); + dir.mkdir (); + return dir; + } else { + var protoObj = this.getDocPrototype (obj); + var dir = this.getDir (dir, protoObj); + dir = new File (dir, obj.getElementName ()); + dir.mkdir (); + return dir; + } +} + + +function storePage (obj, action, backPath) { + var str = this.getPage (obj, action, backPath); + var appObj = this.getParentElement (); + var dir = new File (appObj.getAppDir ().getAbsolutePath (), ".docs"); + dir = this.getDir (dir, obj); + var f = new File (dir, action + ".html"); + f.remove (); + f.open (); + f.write (str); + f.close (); + app.log ("wrote file " + f.toString ()); +} + + +function getPage (obj, action, backPath) { + backPath = (backPath==null) ? "" : backPath; + res.pushStringBuffer (); + eval ("obj." + action + "_action ();"); + var str = res.popStringBuffer (); + var reg = new RegExp ("href=\"" + this.href ("") + "([^\"]+)\""); + reg.global = true; + str = str.replace (reg, "href=\"" + backPath + "$1.html\""); + var reg = new RegExp ("src=\"" + this.href ("") + "([^\"]+)\""); + reg.global = true; + str = str.replace (reg, "src=\"" + backPath + "$1.html\""); + return str; +} + + diff --git a/DocApplication/indexSeparator.skin b/DocApplication/indexSeparator.skin new file mode 100644 index 00000000..beb8ee73 --- /dev/null +++ b/DocApplication/indexSeparator.skin @@ -0,0 +1,3 @@ + +<% param.letter %> + \ No newline at end of file diff --git a/DocApplication/macros.js b/DocApplication/macros.js index d14126df..f7b78ccd 100644 --- a/DocApplication/macros.js +++ b/DocApplication/macros.js @@ -42,35 +42,42 @@ function hrefRoot_macro (param) { /** * list all prototypes of this application * @param skin name of skin to render on prototype + * @param separator */ -function prototypes_macro(par) { - var skin = (par && par.skin&&par.skin!="") ? par.skin : "asPrototypeList"; +function prototypes_macro(param) { + var skin = (param.skin) ? param.skin : "asPrototypeList"; + var separator = (param.separator) ? param.separator : ""; var arr = this.listChildren (); for ( var i=0; iApplication <% this.headline %> + + + + + + +
    + Application <% this.headline %>
    +
    + +">SUMMARY | +">INDEX | + + <% this.comment encoding="html" %> +
    + + + <% this.prototypes skin="asSummary" + separator="" + %> +
    + + +">SUMMARY | +">INDEX | + diff --git a/DocFunction/asIndexItem.skin b/DocFunction/asIndexItem.skin new file mode 100644 index 00000000..95a998ea --- /dev/null +++ b/DocFunction/asIndexItem.skin @@ -0,0 +1,7 @@ + +<% this.link handler="false" %> +- <% this.type %> in <% docprototype.name %> +
    +<% this.comment length="200" %> + + diff --git a/DocFunction/asLargeListItem.skin b/DocFunction/asLargeListItem.skin index 584d72f1..e11013b3 100644 --- a/DocFunction/asLargeListItem.skin +++ b/DocFunction/asLargeListItem.skin @@ -3,5 +3,3 @@ <% this.comment length="200" %> - - diff --git a/DocFunction/macros.js b/DocFunction/macros.js index 679de5ba..7eb66819 100644 --- a/DocFunction/macros.js +++ b/DocFunction/macros.js @@ -24,6 +24,7 @@ function link_macro (param) { return renderLink (this, param); } //// END OF COPIED FUNCTIONS + function headline_macro (param) { var p = this.getParentElement (); var handler = (p!=null) ? p.getName () : ""; @@ -77,7 +78,9 @@ function parameters_macro (param) { } - +function type_macro (param) { + return this.getTypeName (); +} /** diff --git a/DocPrototype/asSummary.skin b/DocPrototype/asSummary.skin new file mode 100644 index 00000000..5ce50bd5 --- /dev/null +++ b/DocPrototype/asSummary.skin @@ -0,0 +1,4 @@ + +"><% this.name %>
    +<% this.comment length="200" %> + diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js index 9d509458..b7f852e1 100644 --- a/DocPrototype/macros.js +++ b/DocPrototype/macros.js @@ -91,23 +91,32 @@ function inheritanceUtil (obj, param) { /** * loops through the parent prototypes and renders a skin on each + * if it has got any functions. * @param skin */ function parentPrototype_macro (param) { var skinname = (param.skin) ? param.skin : "asParentList"; var obj = this.getParentPrototype (); while (obj!=null) { - obj.renderSkin (skinname); + if (obj.listChildren ().length>0) { + obj.renderSkin (skinname); + } obj = obj.getParentPrototype (); } } - +/** + * macro rendering a skin depending on wheter this prototype has got + * type-properties or not. + * @param skin + */ function typeProperties_macro (param) { var props = this.getTypeProperties (); - if (props!=null) { - res.encode(props.getContent ()); + if (props!=null && props.getContent ()!="" ) { + var tmp = new Object (); + tmp.content = props.getContent (); + var skinname = (param.skinname) ? param.skinname : "typeproperties"; + this.renderSkin (skinname, tmp); } } - diff --git a/DocPrototype/main.skin b/DocPrototype/main.skin index ec24d999..318ffaed 100644 --- a/DocPrototype/main.skin +++ b/DocPrototype/main.skin @@ -14,6 +14,7 @@ TEMPLATES | TYPE.PROPERTIES +

    @@ -36,44 +37,43 @@ filter="actions" skin="asLargeListItem" prefix="" + suffix=" %> <% this.methods separator="" filter="functions" skin="asLargeListItem" prefix="" + suffix=" %> <% this.methods separator="" filter="macros" skin="asLargeListItem" prefix="" + suffix=" %> <% this.methods separator="" filter="skins" skin="asLargeListItemSkin" prefix="" + suffix=" %> <% this.methods separator="" filter="templates" skin="asLargeListItem" prefix="" + suffix=" %> <% this.parentPrototype skin="asParentList" %>
    Actions
     
    Functions
     
    Macros
     
    Skins
     
    Templates
     
    -

    - - - - - -
    type.properties
    <% this.typeProperties prefix="
    " suffix="
    " %>
    - - +

    + +<% this.typeProperties %> diff --git a/DocPrototype/typeproperties.skin b/DocPrototype/typeproperties.skin new file mode 100644 index 00000000..4eead93f --- /dev/null +++ b/DocPrototype/typeproperties.skin @@ -0,0 +1,9 @@ + + + + + + + +
    type.properties
    <% param.content encoding="html" %>
    + diff --git a/Global/functions.js b/Global/functions.js index 5e678c23..b95b947a 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -75,9 +75,9 @@ function appStat () { * utility function to sort object-arrays by name */ function sortByName(a,b) { - if ( a.name>b.name) + if ( a.getName () > b.getName ()) return 1; - else if ( a.name==b.name ) + else if (a.getName () == b.getName ()) return 0; else return -1; diff --git a/Global/navig.skin b/Global/navig.skin index 441b2e22..f19ff3df 100644 --- a/Global/navig.skin +++ b/Global/navig.skin @@ -1,22 +1,26 @@

    ">" title="helma" border="0" width="174" height="35" align="baseline" style="border-width:3px;border-color:white;"> - helma.org - docs - mailinglist

    <% root.appCount filter="active" singular=" app" plural=" apps"%> on - "><% root.hostname %> + "><% root.hostname %> (<% root.hostaddress %>)
    <% root.appList filter="active" %>

    -
    and <% root.appCount filter="disabled" %> disabled apps:
    <% root.appList filter="disabled" skin="navig_disabled" %> +

    +

    + Information on helma.org:
    +

  • reference
    +
  • mailinglist
    +
  • cvs
    +
  • download
    +

    diff --git a/Global/renderFunctions.js b/Global/renderFunctions.js index c8c17ea7..84731b8b 100644 --- a/Global/renderFunctions.js +++ b/Global/renderFunctions.js @@ -7,7 +7,7 @@ function renderLink (docEl, param) { } else if (docEl.getType () == docEl.SKIN) { text = docEl.getName () + ".skin"; } else if (docEl.getType () == docEl.MACRO) { - if (docEl.getParentElement () && docEl.getParentElement().getName()!="global") { + if (param.handler!="false" && docEl.getParentElement () && docEl.getParentElement().getName()!="global") { text = docEl.getParentElement ().getName () + "."; } var str = docEl.getName (); From cd8ebdd41b259d4096dd3e170593dc4302bc2423 Mon Sep 17 00:00:00 2001 From: stefanp Date: Fri, 22 Nov 2002 11:55:42 +0000 Subject: [PATCH 044/217] re-added access check to actions --- DocApplication/actions.js | 20 ++++++++++++++++++++ DocFunction/actions.js | 5 ++++- DocPrototype/actions.js | 8 ++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/DocApplication/actions.js b/DocApplication/actions.js index 27df09dd..c80a63ff 100644 --- a/DocApplication/actions.js +++ b/DocApplication/actions.js @@ -1,27 +1,47 @@ function main_action () { + if (checkAddress()==false) + return; + if (checkAuth(this.getParentElement ())==false) + return; this.renderSkin ("frameset"); } function prototypes_action () { + if (checkAddress()==false) + return; + if (checkAuth(this.getParentElement ())==false) + return; res.data.body = this.renderSkinAsString ("prototypes"); renderSkin ("api"); } function summary_action () { + if (checkAddress()==false) + return; + if (checkAuth(this.getParentElement ())==false) + return; res.data.body = this.renderSkinAsString ("summary"); renderSkin ("api"); } function functionindex_action () { + if (checkAddress()==false) + return; + if (checkAuth(this.getParentElement ())==false) + return; res.data.body = this.renderSkinAsString ("functionindex"); renderSkin ("api"); } function render_action () { + if (checkAddress()==false) + return; + if (checkAuth(this.getParentElement ())==false) + return; res.writeln("renderrendering API ... "); var prefix = this.href (""); this.storePage (this, "main"); diff --git a/DocFunction/actions.js b/DocFunction/actions.js index b7ce0e01..4c86848c 100644 --- a/DocFunction/actions.js +++ b/DocFunction/actions.js @@ -1,5 +1,8 @@ function main_action () { - this.getParentElement ().readFiles (); + if (checkAddress()==false) + return; + if (checkAuth()==false) + return; res.data.body = this.renderSkinAsString ("main"); renderSkin ("api"); } diff --git a/DocPrototype/actions.js b/DocPrototype/actions.js index 62ee1460..853c8b66 100644 --- a/DocPrototype/actions.js +++ b/DocPrototype/actions.js @@ -1,9 +1,17 @@ function list_action () { + if (checkAddress()==false) + return; + if (checkAuth()==false) + return; res.data.body = this.renderSkinAsString ("list"); renderSkin ("api"); } function main_action () { + if (checkAddress()==false) + return; + if (checkAuth()==false) + return; res.data.body = this.renderSkinAsString ("main"); renderSkin ("api"); } From 7bd5803a33a49394df9fb87ffc22cb57db0b8980 Mon Sep 17 00:00:00 2001 From: stefanp Date: Fri, 22 Nov 2002 11:58:37 +0000 Subject: [PATCH 045/217] simplified editing of server authentication. as changes to server.properties are now immediately read and accessible from the manage-application we just have a md5-encoding utility and leave it to the admin to add the values to the server.properties file. this makes sure that nothing can be changed via the web. changes to allowadmin are effective immediately too. --- Global/functions.js | 32 ++++++++++++++------------------ Global/navig.skin | 4 ++++ Global/pwdform.skin | 17 ++++++----------- Root/makekey.hac | 7 ------- 4 files changed, 24 insertions(+), 36 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index b95b947a..b77db3dc 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -15,6 +15,7 @@ function scheduler() { */ function onStart() { app.data.addressFilter = createAddressFilter(); + app.data.addressString = root.getProperty ("allowadmin"); } /** @@ -75,9 +76,9 @@ function appStat () { * utility function to sort object-arrays by name */ function sortByName(a,b) { - if ( a.getName () > b.getName ()) + if (a.name > b.name) return 1; - else if (a.getName () == b.getName ()) + else if (a.name == b.name) return 0; else return -1; @@ -126,7 +127,7 @@ function checkAuth(appObj) { if ( md5username==rootUsername && md5password==rootPassword ) return true; - if ( appObj!=null && appObj.isActive() ) { + if (appObj!=null && appObj.isActive()) { // check against application var appUsername = appObj.getProperty("adminusername"); var appPassword = appObj.getProperty("adminpassword"); @@ -141,6 +142,12 @@ function checkAuth(appObj) { * check access to the manage-app by ip-addresses */ function checkAddress() { + // if allowadmin value in server.properties has changed, + // re-construct the addressFilter + if (app.data.addressString != root.getProperty ("allowadmin")){ + app.data.addressFilter = createAddressFilter(); + app.data.addressString = root.getProperty ("allowadmin"); + } if ( !app.data.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost)) ) { app.log("denied request from " + req.data.http_remotehost ); // forceStealth seems a bit like overkill here. @@ -181,32 +188,21 @@ function createAuth() { } var obj = new Object(); obj.msg = ""; - - if ( req.data.username!=null && req.data.password!=null && req.data.password2!=null ) { + if (req.data.username!=null && req.data.password!=null) { // we have input from webform if ( req.data.username=="" ) obj.msg += "username can't be left empty!
    "; if ( req.data.password=="" ) obj.msg += "password can't be left empty!
    "; - else if ( req.data.password!=req.data.password2 ) - obj.msg += "password and re-typed password don't match!
    "; if ( obj.msg!="" ) { obj.username = req.data.username; res.reset(); renderSkin("pwdform",obj); return false; } - var f = new File(root.getHopHome().toString, "server.properties"); - var str = f.readAll(); - var sep = java.lang.System.getProperty("line.separator"); - str += sep + "adminUsername=" + Packages.helma.util.MD5Encoder.encode(req.data.username) + sep; - str += "adminPassword=" + Packages.helma.util.MD5Encoder.encode(req.data.password) + sep; - f.remove(); - f.open(); - f.write(str); - f.close(); - app.log( req.data.http_remotehost + " saved new adminUsername/adminPassword to server.properties"); - res.redirect ( root.href("main") ); + var str = "adminUsername=" + Packages.helma.util.MD5Encoder.encode(req.data.username) + "
    \n"; + str += "adminPassword=" + Packages.helma.util.MD5Encoder.encode(req.data.password) + "
    "; + res.write ("
    " + str + "
    "); } else { // no input from webform, so print it diff --git a/Global/navig.skin b/Global/navig.skin index f19ff3df..fecbbaf7 100644 --- a/Global/navig.skin +++ b/Global/navig.skin @@ -24,3 +24,7 @@
  • cvs
  • download

    + +

    +

  • ">generate server password +

    \ No newline at end of file diff --git a/Global/pwdform.skin b/Global/pwdform.skin index 641aaa2d..20eb1a01 100644 --- a/Global/pwdform.skin +++ b/Global/pwdform.skin @@ -1,26 +1,21 @@ - +
    diff --git a/DocPrototype/functions.js b/DocPrototype/functions.js index 020052d2..b418b24b 100644 --- a/DocPrototype/functions.js +++ b/DocPrototype/functions.js @@ -1,4 +1,3 @@ - ///** // * utility function for head_macro, rendering link to app and to prototype // */ @@ -10,25 +9,24 @@ //} - -function translateType (filter) { - if (filter=="actions") - return Packages.helma.doc.DocElement.ACTION; - else if (filter=="templates") - return Packages.helma.doc.DocElement.TEMPLATE; - else if (filter=="functions") - return Packages.helma.doc.DocElement.FUNCTION; - else if (filter=="macros") - return Packages.helma.doc.DocElement.MACRO; - else if (filter=="skins") - return Packages.helma.doc.DocElement.SKIN; - else - return -1; +function translateType(filter) { + if (filter == "actions") + return Packages.helma.doc.DocElement.ACTION; + else if (filter == "functions") + return Packages.helma.doc.DocElement.FUNCTION; + else if (filter == "macros") + return Packages.helma.doc.DocElement.MACRO; + else if (filter == "skins") + return Packages.helma.doc.DocElement.SKIN; + else if (filter == "properties") + return Packages.helma.doc.DocElement.PROPERTIES; + else + return -1; } -function getApplication () { - return this.getParentElement (); +function getApplication() { + return this.getParentElement(); } diff --git a/DocPrototype/list.skin b/DocPrototype/list.skin index b9a23cc5..55620dac 100644 --- a/DocPrototype/list.skin +++ b/DocPrototype/list.skin @@ -7,5 +7,4 @@ <% this.methods filter="functions" skin="asListItem" prefix="

    Functions:
    " suffix="

    %> <% this.methods filter="macros" skin="asListItem" prefix="

    Macros:
    " suffix="

    %> <% this.methods filter="skins" skin="asListItem" prefix="

    Skins:
    " suffix="

    %> -<% this.methods filter="templates" skin="asListItem" prefix="

    Templates:
    " suffix="

    %> diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js index 7ffbaed9..7b2915e1 100644 --- a/DocPrototype/macros.js +++ b/DocPrototype/macros.js @@ -1,91 +1,105 @@ - /** - * macro rendering a skin - * @param name name of skin - */ -function skin_macro(par) { - if ( par && par.name ) { - this.renderSkin(par.name); - } +* macro rendering a skin +* @param name name of skin +*/ +function skin_macro(par) { + if (par && par.name) { + this.renderSkin(par.name); + } } /** * macro-wrapper for href-function * @param action name of action to call on this prototype, default main */ -function href_macro(param) { return this.href ((param && param.action) ? param.action : "main"); } +function href_macro(param) { + return this.href((param && param.action) ? param.action : "main"); +} -function comment_macro (param) { return renderComment (this, param); } -function content_macro (param) { return this.getContent (); } -function tags_macro (param) { return renderTags (this, param); } -function location_macro (param) { return renderLocation (this, param); } -function link_macro (param) { return renderLink (this, param); } +function comment_macro(param) { + return renderComment(this, param); +} + +function content_macro(param) { + return this.getContent(); +} + +function tags_macro(param) { + return renderTags(this, param); +} + +function location_macro(param) { + return renderLocation(this, param); +} + +function link_macro(param) { + return renderLink(this, param); +} //// END OF COPIED FUNCTIONS - -function headline_macro (param) { - res.write (this.getName ()); +function headline_macro(param) { + res.write(this.getName()); } /** * macro formatting list of methods of this prototype - * @param filter actions | functions | macros | templates | skins + * @param filter actions | functions | macros | skins * @param skin skin to apply to the docfunction object * @param separator * @param desc Description that is passed on to the called skin */ -function methods_macro (param) { - var skinname = (param.skin) ? param.skin : "list"; - var separator = (param.separator) ? param.separator : ""; - var arr = this.listChildren (); - var type = this.translateType (param.filter); - var sb = new java.lang.StringBuffer (); - for (var i=0; i0) - return str.substring (0, str.length - separator.length); - else - return str; +function methods_macro(param) { + var skinname = (param.skin) ? param.skin : "list"; + var separator = (param.separator) ? param.separator : ""; + var arr = this.listChildren(); + var type = this.translateType(param.filter); + var sb = new java.lang.StringBuffer (); + for (var i = 0; i < arr.length; i++) { + if (arr[i].getType() == type) { + sb.append(arr[i].renderSkinAsString(skinname, param)); + sb.append(separator); + } + } + var str = sb.toString(); + if (str.length > 0) + return str.substring(0, str.length - separator.length); + else + return str; } -function inheritance_macro (param) { - var action = param.action ? param.action : "main"; - var target = param.target ? ('target="' + param.target + '" ') : ''; - var obj = this.getParentPrototype (); - if (obj!=null) { - obj = this.inheritanceUtil (obj, param); - } - if (param.deep=="true") { - while (obj!=null) { - obj = this.inheritanceUtil (obj, param); - } - } +function inheritance_macro(param) { + var action = param.action ? param.action : "main"; + var target = param.target ? ('target="' + param.target + '" ') : ''; + var obj = this.getParentPrototype(); + if (obj != null) { + obj = this.inheritanceUtil(obj, param); + } + if (param.deep == "true") { + while (obj != null) { + obj = this.inheritanceUtil(obj, param); + } + } } -function inheritanceUtil (obj, param) { - if (obj.getName ()=="hopobject" && param.hopobject!="true") - return null; - var tmp = new Object (); - for (var i in param) - tmp[i] = param[i]; - tmp.href = obj.href ((param.action) ? param.action : "main"); - delete tmp.hopobject; - delete tmp.action; - delete tmp.deep; - delete tmp.separator; - res.write (renderLinkTag (tmp)); - res.write (obj.getName () + ""); - if (obj.getParentPrototype ()) - res.write (param.separator); - return obj.getParentPrototype (); +function inheritanceUtil(obj, param) { + if (obj.getName() == "hopobject" && param.hopobject != "true") + return null; + var tmp = new Object (); + for (var i in param) + tmp[i] = param[i]; + tmp.href = obj.href((param.action) ? param.action : "main"); + delete tmp.hopobject; + delete tmp.action; + delete tmp.deep; + delete tmp.separator; + res.write(renderLinkTag(tmp)); + res.write(obj.getName() + ""); + if (obj.getParentPrototype()) + res.write(param.separator); + return obj.getParentPrototype(); } @@ -94,15 +108,15 @@ function inheritanceUtil (obj, param) { * if it has got any functions. * @param skin */ -function parentPrototype_macro (param) { - var skinname = (param.skin) ? param.skin : "asParentList"; - var obj = this.getParentPrototype (); - while (obj!=null) { - if (obj.listChildren ().length>0) { - obj.renderSkin (skinname); - } - obj = obj.getParentPrototype (); - } +function parentPrototype_macro(param) { + var skinname = (param.skin) ? param.skin : "asParentList"; + var obj = this.getParentPrototype(); + while (obj != null) { + if (obj.listChildren().length > 0) { + obj.renderSkin(skinname); + } + obj = obj.getParentPrototype(); + } } /** @@ -110,33 +124,42 @@ function parentPrototype_macro (param) { * type-properties or not. * @param skin */ -function typeProperties_macro (param) { - var props = this.getTypeProperties (); - if (props!=null && props.getContent ()!="" ) { - var sb = new java.lang.StringBuffer (); - // map of all mappings.... - var mappings = props.getMappings (); - // parse type.properties linewise: - var arr = props.getContent ().split ("\n"); - for (var i=0; i' + arr[i] + ''; - } - } - } - sb.append (arr[i] + "\n"); - } - var tmp = new Object (); - tmp.content = sb.toString (); - var skinname = (param.skinname) ? param.skinname : "typeproperties"; - this.renderSkin (skinname, tmp); - } +function typeProperties_macro(param) { + var props = this.getTypeProperties(); + var iter = props.getResources(); + while (iter.hasNext()) { + var tmp = this.renderTypePropertiesResource(iter.next(), props); + var skinname = (param.skinname) ? param.skinname : "typeproperties"; + this.renderSkin(skinname, tmp); + } +} + +function renderTypePropertiesResource(res, props) { + if (res.getContent() != "") { + var sb = new java.lang.StringBuffer (); + // map of all mappings.... + var mappings = props.getMappings(); + // parse type.properties linewise: + var arr = res.getContent().split("\n"); + for (var i = 0; i < arr.length; i++) { + arr [i] = arr[i].trim(); + // look up in mappings table if line matches: + for (var e = mappings.keys(); e.hasMoreElements();) { + var key = e.nextElement(); + var reg = new RegExp ('^' + key + '\\s'); + if (arr[i].match(reg)) { + // it matched, wrap line in a link to that prototype: + var docProtoObj = this.getApplication().getPrototype(mappings.getProperty(key)); + if (docProtoObj != null) { + arr[i] = '' + arr[i] + ''; + } + } + } + sb.append(arr[i] + "\n"); + } + var tmp = new Object (); + tmp.content = sb.toString(); + tmp.source = res.getName(); + return tmp; + } } diff --git a/DocPrototype/main.skin b/DocPrototype/main.skin index 318ffaed..afaf2ab8 100644 --- a/DocPrototype/main.skin +++ b/DocPrototype/main.skin @@ -11,7 +11,6 @@ FUNCTIONS | MACROS | SKINS | -TEMPLATES | TYPE.PROPERTIES

    @@ -62,9 +61,9 @@ %> <% this.methods separator="
    " - filter="templates" - skin="asLargeListItem" - prefix="" + filter="properties" + skin="asLargeListItemSkin" + prefix="" suffix=" %> @@ -73,7 +72,7 @@

    -<% this.typeProperties %> + diff --git a/DocPrototype/typeproperties.skin b/DocPrototype/typeproperties.skin index 2a0ffd32..e1975b32 100644 --- a/DocPrototype/typeproperties.skin +++ b/DocPrototype/typeproperties.skin @@ -1,6 +1,6 @@
    Username and password for helma's manager:

    Please choose an username and password combination to access the -manage application of this server. They will be appended md5-encoded -to the server.properties file. You can change the settings manually -by editing the server.properties file or through this webinterface -in manage/makekey (from localhost only!).

    -

    This is a stupid script and doesn't check wheter these properties -are already set in this file. So if you've already set username and -password you need to delete the old values manually.

    +manage application of this server. They will be printed md5-encoded +in a format that you've got to copy/paste into the server.properties +file.

    <% param.msg %>
    (username)
    - (password)
    - (password retyped)

    -
    + (password)
    +

    Warning: The used http-authorization transmits username and password diff --git a/Root/makekey.hac b/Root/makekey.hac index 4800e2e4..edcf8857 100644 --- a/Root/makekey.hac +++ b/Root/makekey.hac @@ -1,10 +1,3 @@ - -//// strictly limit access to localhost: -//if ( req.data.http_remotehost!="localhost" && req.data.http_remotehost!="127.0.0.1" ) { -// app.logEvent( req.data.http_remotehost + " tried to access makekey"); -// return; -//} - if ( checkAuth()==false ) return; From 917502ba56ac5989084010dee0d0cb82f0ebdde3 Mon Sep 17 00:00:00 2001 From: stefanp Date: Fri, 22 Nov 2002 14:29:28 +0000 Subject: [PATCH 046/217] use higher request timeout because rendering the apidocs might take more than one minute on a slow computer --- app.properties | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app.properties b/app.properties index 267d3c92..d8232b4f 100644 --- a/app.properties +++ b/app.properties @@ -3,3 +3,8 @@ # A short description of what this application is about: _description = Helma's server management console. Start applications, introspection etc. + +# use higher request timeout because rendering the apidocs +# might take more than one minute on a slow computer +requestTimeout = 300 + From c709dd4c59f614aba3b4d51e60d52b6fb194399e Mon Sep 17 00:00:00 2001 From: stefanp Date: Fri, 22 Nov 2002 14:31:28 +0000 Subject: [PATCH 047/217] server password is now encoded as one single entry in server.properties (adminAccess instead of adminUsername+adminPassword) --- Global/functions.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index b77db3dc..d56f4731 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -108,10 +108,9 @@ function checkAuth(appObj) { var ok = false; // check against root - var rootUsername = root.getProperty("adminusername"); - var rootPassword = root.getProperty("adminpassword"); + var adminAccess = root.getProperty("adminAccess"); - if ( rootUsername==null || rootUsername=="" || rootPassword==null || rootPassword=="" ) { + if (adminAccess==null || adminAccess=="") { return createAuth(); } @@ -121,10 +120,9 @@ function checkAuth(appObj) { if ( uname==null || uname=="" || pwd==null || pwd=="" ) return forceAuth(); - var md5username = Packages.helma.util.MD5Encoder.encode(uname); - var md5password = Packages.helma.util.MD5Encoder.encode(pwd); + var md5key = Packages.helma.util.MD5Encoder.encode(uname + "-" + pwd); - if ( md5username==rootUsername && md5password==rootPassword ) + if (md5key==adminAccess) return true; if (appObj!=null && appObj.isActive()) { @@ -200,9 +198,9 @@ function createAuth() { renderSkin("pwdform",obj); return false; } - var str = "adminUsername=" + Packages.helma.util.MD5Encoder.encode(req.data.username) + "
    \n"; - str += "adminPassword=" + Packages.helma.util.MD5Encoder.encode(req.data.password) + "
    "; + var str = "adminAccess=" + Packages.helma.util.MD5Encoder.encode(req.data.username + "-" + req.data.password) + "
    \n"; res.write ("

    " + str + "
    "); + return false; } else { // no input from webform, so print it From 4505fb1ffc19fa18b72a28d4a26a3a5bf2e9ef78 Mon Sep 17 00:00:00 2001 From: stefanp Date: Fri, 22 Nov 2002 14:32:46 +0000 Subject: [PATCH 048/217] - click on showApi-button calls docapplication/read_action to re-read the application each time a user enters the doc-frameset. - function docfiles aren't stored in their own directory each but moved up to the prototype directory, further regex-parsing of the resuting html-code necessary --- Application/head.skin | 2 +- Application/navig_active.skin | 2 +- DocApplication/actions.js | 9 +++++++-- DocApplication/functions.js | 21 ++++++++++++--------- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Application/head.skin b/Application/head.skin index 1a5b8604..539aac0e 100644 --- a/Application/head.skin +++ b/Application/head.skin @@ -2,7 +2,7 @@ <% this.description prefix="
    " %>
    -> - /main">showAPI | + /read">showAPI | /render">renderAPI | public | ?app=<% this.title %>&action=flush">flush | diff --git a/Application/navig_active.skin b/Application/navig_active.skin index c35d2472..3c24b3bf 100644 --- a/Application/navig_active.skin +++ b/Application/navig_active.skin @@ -6,7 +6,7 @@ - +
    - /main">showAPI | + /read">showAPI | /render">renderAPI | public | ?app=<% this.title %>&action=flush">flush | diff --git a/DocApplication/actions.js b/DocApplication/actions.js index c80a63ff..1087d246 100644 --- a/DocApplication/actions.js +++ b/DocApplication/actions.js @@ -1,3 +1,8 @@ +function read_action () { + this.readApplication (); + res.redirect (this.href("main")); +} + function main_action () { if (checkAddress()==false) return; @@ -44,7 +49,7 @@ function render_action () { return; res.writeln("renderrendering API ... "); var prefix = this.href (""); - this.storePage (this, "main"); + this.storePage (this, "main", "", "index.html"); this.storePage (this, "prototypes"); this.storePage (this, "summary"); this.storePage (this, "functionindex"); @@ -56,7 +61,7 @@ function render_action () { ct += 2; var subarr = arr[i].listChildren (); for (var j=0; j Date: Mon, 2 Dec 2002 12:18:15 +0000 Subject: [PATCH 049/217] added getPrototype (string) --- DocApplication/functions.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/DocApplication/functions.js b/DocApplication/functions.js index 3de8ba86..88908e71 100644 --- a/DocApplication/functions.js +++ b/DocApplication/functions.js @@ -1,5 +1,7 @@ - +/** + * get the prototype of any doc-object (either a prototype, a function or a tag) + */ function getDocPrototype (obj) { var tmp = obj; while (tmp!=null && tmp.getType () != this.PROTOTYPE) { @@ -8,6 +10,15 @@ function getDocPrototype (obj) { return tmp; } + +/** + * get a prototype of this docapplication, ie get on of the children of this object + */ +function getPrototype (name) { + return this.getChildElement ("prototype_" + name); +} + + function getDir (dir, obj) { dir.mkdir (); if (obj.getType () == this.APPLICATION) { From c52925d41427fc292a372a787bbc832b08020634 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 2 Dec 2002 12:18:59 +0000 Subject: [PATCH 050/217] added getApplication () --- DocPrototype/functions.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DocPrototype/functions.js b/DocPrototype/functions.js index c0bb39c9..020052d2 100644 --- a/DocPrototype/functions.js +++ b/DocPrototype/functions.js @@ -27,3 +27,8 @@ function translateType (filter) { } +function getApplication () { + return this.getParentElement (); +} + + From 428b1ab1efc7c51eb44f4d5280502b4e3f233094 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 2 Dec 2002 12:19:36 +0000 Subject: [PATCH 051/217] type.properties are now parsed, mappings to other prototypes are linked --- DocPrototype/macros.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js index b7f852e1..f47045bc 100644 --- a/DocPrototype/macros.js +++ b/DocPrototype/macros.js @@ -113,10 +113,28 @@ function parentPrototype_macro (param) { function typeProperties_macro (param) { var props = this.getTypeProperties (); if (props!=null && props.getContent ()!="" ) { + var sb = new java.lang.StringBuffer (); + // map of all mappings.... + var mappings = props.getMappings (); + // parse type.properties linewise: + var arr = props.getContent ().split ("\n"); + for (var i=0; i' + arr[i] + ''; + } + } + sb.append (arr[i] + "\n"); + } var tmp = new Object (); - tmp.content = props.getContent (); + tmp.content = sb.toString (); var skinname = (param.skinname) ? param.skinname : "typeproperties"; this.renderSkin (skinname, tmp); } } - From 1f9846f157bf4c17419f316783f3b30fa3405f9a Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 2 Dec 2002 12:23:19 +0000 Subject: [PATCH 052/217] two formatting fixes --- DocPrototype/list.skin | 2 +- DocPrototype/macros.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DocPrototype/list.skin b/DocPrototype/list.skin index afb66787..b9a23cc5 100644 --- a/DocPrototype/list.skin +++ b/DocPrototype/list.skin @@ -1,4 +1,4 @@ -

    Prototype " target="main"><% this.name %>

    +Prototype " target="main"><% this.name %>
    <% this.inheritance action="list" %> <% this.inheritance deep="true" hopobject="true" action="main" target="main" onClick="parent.changePrototypeList(this);" separator=", " prefix="extends: " suffix="
    " %>
    diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js index f47045bc..53472148 100644 --- a/DocPrototype/macros.js +++ b/DocPrototype/macros.js @@ -123,7 +123,7 @@ function typeProperties_macro (param) { // look up in mappings table if line matches: for (var e = mappings.keys (); e.hasMoreElements (); ) { var key = e.nextElement (); - var reg = new RegExp ('^' + key + '\\W'); + var reg = new RegExp ('^' + key + '\\s'); if (arr[i].match (reg)) { // it matched, wrap line in a link to that prototype: var docProtoObj = this.getApplication ().getPrototype (mappings.getProperty (key)); From 544c791ddc78de9e8ca96dcc6a13c5da5714d525 Mon Sep 17 00:00:00 2001 From: stefanp Date: Wed, 4 Dec 2002 09:21:40 +0000 Subject: [PATCH 053/217] - moved key-generation from a global function to root/makekey.hac - added a nice feedback skin --- Global/functions.js | 44 +---------------------------------------- Global/pwdfeedback.skin | 20 +++++++++++++++++++ Root/makekey.hac | 32 ++++++++++++++++++++++++++++-- 3 files changed, 51 insertions(+), 45 deletions(-) create mode 100644 Global/pwdfeedback.skin diff --git a/Global/functions.js b/Global/functions.js index d56f4731..b7c895e9 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -111,7 +111,7 @@ function checkAuth(appObj) { var adminAccess = root.getProperty("adminAccess"); if (adminAccess==null || adminAccess=="") { - return createAuth(); + res.redirect (root.href ("makekey")); } var uname = req.username; @@ -172,48 +172,6 @@ function forceAuth(realm) { - -/** - * response is either a html form to enter auth data or input from - * html form is saved to server.properties - * access is only allowed if remote host is in the list of friendly - * ip-adresses in server.properties - */ -function createAuth() { - if ( checkAddress()!=true ) { - // double check - return false; - } - var obj = new Object(); - obj.msg = ""; - if (req.data.username!=null && req.data.password!=null) { - // we have input from webform - if ( req.data.username=="" ) - obj.msg += "username can't be left empty!
    "; - if ( req.data.password=="" ) - obj.msg += "password can't be left empty!
    "; - if ( obj.msg!="" ) { - obj.username = req.data.username; - res.reset(); - renderSkin("pwdform",obj); - return false; - } - var str = "adminAccess=" + Packages.helma.util.MD5Encoder.encode(req.data.username + "-" + req.data.password) + "
    \n"; - res.write ("
    " + str + "
    "); - return false; - - } else { - // no input from webform, so print it - res.reset(); - res.data.title = "username & password on " + root.hostname_macro(); - res.data.head = renderSkinAsString("head"); - res.data.body = renderSkinAsString("pwdform",obj); - renderSkin("basic"); - return false; - } -} - - /** * macro-utility: formatting property lists */ diff --git a/Global/pwdfeedback.skin b/Global/pwdfeedback.skin new file mode 100644 index 00000000..f5003a67 --- /dev/null +++ b/Global/pwdfeedback.skin @@ -0,0 +1,20 @@ + + + + + +
    + +Generated username and password for helma's manager:
    + +

    Please copy/paste this line into the server.properties file of your +helma installation.

    + +
    <% param.propsString %>
    + +

    After that proceed to ">the manage console, +enter your credentials and you should be allowed in.

    + +
    + + diff --git a/Root/makekey.hac b/Root/makekey.hac index edcf8857..6eb739fb 100644 --- a/Root/makekey.hac +++ b/Root/makekey.hac @@ -1,5 +1,33 @@ -if ( checkAuth()==false ) + +if (checkAddress()==false) return; -createAuth(); +var obj = new Object(); +obj.msg = ""; +if (req.data.username!=null && req.data.password!=null) { + + // we have input from webform + if ( req.data.username=="" ) + obj.msg += "username can't be left empty!
    "; + if ( req.data.password=="" ) + obj.msg += "password can't be left empty!
    "; + if ( obj.msg!="" ) { + obj.username = req.data.username; + res.reset(); + res.data.body = renderSkinAsString ("pwdform",obj); + } else { + // render the md5-string: + obj.propsString = "adminAccess=" + Packages.helma.util.MD5Encoder.encode(req.data.username + "-" + req.data.password) + "
    \n"; + res.data.body = renderSkinAsString ("pwdfeedback", obj); + } +} else { + + // no input from webform, so print it + res.data.body = renderSkinAsString("pwdform",obj); + +} + +res.data.title = "username & password on " + root.hostname_macro(); +res.data.head = renderSkinAsString("head"); +renderSkin("basic"); From d5add243c7204524f7258c2b32e504b8e42d716b Mon Sep 17 00:00:00 2001 From: stefanp Date: Wed, 4 Dec 2002 09:35:09 +0000 Subject: [PATCH 054/217] render_action: fixed problem with regex parsing of links with anchors --- DocApplication/functions.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/DocApplication/functions.js b/DocApplication/functions.js index 88908e71..aa586d6e 100644 --- a/DocApplication/functions.js +++ b/DocApplication/functions.js @@ -55,12 +55,13 @@ function getPage (obj, action, backPath) { var str = res.popStringBuffer (); // get the baseURI out of the url and replace // it with the given relative prefix - var reg = new RegExp ("href=\"" + this.href ("") + "([^\"]+)\""); + // (keep anchors in regex!) + var reg = new RegExp ("href=\"" + this.href ("") + "([^\"#]+)([^\"]*)\""); reg.global = true; - str = str.replace (reg, "href=\"" + backPath + "$1.html\""); - var reg = new RegExp ("src=\"" + this.href ("") + "([^\"]+)\""); + str = str.replace (reg, "href=\"" + backPath + "$1.html$2\""); + var reg = new RegExp ("src=\"" + this.href ("") + "([^\"#]+)([^\"]*)\""); reg.global = true; - str = str.replace (reg, "src=\"" + backPath + "$1.html\""); + str = str.replace (reg, "src=\"" + backPath + "$1.html$2\""); // shorten links, so that function files can move up one directory // in the hierarchy var reg = new RegExp ("(prototype_[^/]+/[^/]+)/main.html"); From 862cdef847c38a43ac20c4eba74d61c1ae3990e2 Mon Sep 17 00:00:00 2001 From: stefanp Date: Wed, 4 Dec 2002 09:35:34 +0000 Subject: [PATCH 055/217] fixed problem with type.properties pointing to non-existing prototypes --- DocPrototype/macros.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DocPrototype/macros.js b/DocPrototype/macros.js index 53472148..7ffbaed9 100644 --- a/DocPrototype/macros.js +++ b/DocPrototype/macros.js @@ -127,7 +127,9 @@ function typeProperties_macro (param) { if (arr[i].match (reg)) { // it matched, wrap line in a link to that prototype: var docProtoObj = this.getApplication ().getPrototype (mappings.getProperty (key)); - arr[i] = '' + arr[i] + ''; + if (docProtoObj!=null) { + arr[i] = '' + arr[i] + ''; + } } } sb.append (arr[i] + "\n"); From 6b534edeab7382d69d49d33aedb91ec691e72d70 Mon Sep 17 00:00:00 2001 From: stefanp Date: Wed, 4 Dec 2002 09:36:21 +0000 Subject: [PATCH 056/217] - included link to manage console (but not if pages are rendered to static html) - nicer feedback after rendering --- DocApplication/actions.js | 10 ++++++++-- DocApplication/macros.js | 7 +++++++ DocApplication/prototypes.skin | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/DocApplication/actions.js b/DocApplication/actions.js index 1087d246..f071ac99 100644 --- a/DocApplication/actions.js +++ b/DocApplication/actions.js @@ -43,11 +43,13 @@ function functionindex_action () { function render_action () { + // set res.data.rendering, this will suppress the link back to the manage + // console in the apidocs actions + res.data.rendering = true; if (checkAddress()==false) return; if (checkAuth(this.getParentElement ())==false) return; - res.writeln("renderrendering API ... "); var prefix = this.href (""); this.storePage (this, "main", "", "index.html"); this.storePage (this, "prototypes"); @@ -65,5 +67,9 @@ function render_action () { ct += 1; } } - res.writeln (" ... wrote " + ct + " files"); + res.data.body = 'rendering API ...
    wrote ' + ct + ' files

    '; + res.data.body += 'back to manage console'; + res.data.title = "rendering helma api"; + res.data.head = renderSkinAsString("head"); + renderSkin ("basic"); } diff --git a/DocApplication/macros.js b/DocApplication/macros.js index f7b78ccd..daccf992 100644 --- a/DocApplication/macros.js +++ b/DocApplication/macros.js @@ -24,6 +24,13 @@ function link_macro (param) { return renderLink (this, param); } //// END OF COPIED FUNCTIONS + +function linkToManage_macro (param) { + if (res.data.rendering != true) { + return ('back to manage console'); + } +} + function headline_macro (param) { res.write (this.getName ()); } diff --git a/DocApplication/prototypes.skin b/DocApplication/prototypes.skin index cdbcc472..2ff758fb 100644 --- a/DocApplication/prototypes.skin +++ b/DocApplication/prototypes.skin @@ -1,4 +1,4 @@ - +<% this.linkToManage suffix="

    " %> Application " target="main"><% this.name %>

    From c3e422c8ecc969759bee0adc2dbf014c19780c3a Mon Sep 17 00:00:00 2001 From: stefanp Date: Wed, 4 Dec 2002 10:07:35 +0000 Subject: [PATCH 057/217] updated to latest changes --- readme.txt | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/readme.txt b/readme.txt index 74e2e6c3..180a849d 100644 --- a/readme.txt +++ b/readme.txt @@ -1,25 +1,17 @@ To get the manage-application to work you must: - add it to the apps.properties file with the following line: - manage - - use snapshot 20020326 or later. + - use helma distribution 1.2-RC1 or later. - add the following properties to server.properties: - allowAdmin=[comma-separated list of hosts or ip-addresses that - are allowed to access this application, wildcards - are only allowed in addresses, not in hostnames] - adminUsername= - adminPassword= + allowAdmin = [comma-separated list of hosts or ip-addresses that + are allowed to access this application. wildcards + are only allowed in addresses, not in hostnames!] + adminAccess = - MD5-encoding can be done - once you've got the application - up and running - on the web: - - http:///manage/makekey - http:///base/makekey - - or you can use a shell-tool integrated in helma: - java -classpath helma.jar helma.util.MD5Encoder + Creating the credentials can be done after you've got the application + up and running at this address: http:///manage/makekey From 23c6c02b5c427396642108f9468ce2892cd9d872 Mon Sep 17 00:00:00 2001 From: hns Date: Wed, 16 Apr 2003 14:21:21 +0000 Subject: [PATCH 058/217] Use password input field for password in manage/makekey --- Global/pwdform.skin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Global/pwdform.skin b/Global/pwdform.skin index 20eb1a01..79b7c602 100644 --- a/Global/pwdform.skin +++ b/Global/pwdform.skin @@ -14,7 +14,7 @@ file.

    <% param.msg %>
    (username)
    - (password)
    + (password)

    From 710631429efb2dc185ea4cc1a53badd65872846d Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 23 Jun 2003 15:03:34 +0000 Subject: [PATCH 059/217] replaced tryEval with try/catch --- Global/functions.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index b7c895e9..86db57d5 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -30,14 +30,16 @@ function createAddressFilter() { var arr = str.split(","); for ( var i in arr ) { var str = new java.lang.String(arr[i]); - var result = tryEval("filter.addAddress(str.trim());"); - if ( result.error!=null ) { - var str = java.net.InetAddress.getByName(str.trim()).getHostAddress(); - var result = tryEval("filter.addAddress(str);"); - } - if ( result.error==null ) { - app.log( "allowed address for app manage: " + str ); - } + try { + filter.addAddress(str.trim()); + } catch (a) { + try { + var str = java.net.InetAddress.getByName(str.trim()).getHostAddress(); + filter.addAddress (str); + } catch (b) { + app.log ("error using address " + arr[i] + ": " + b); + } + } } } else { app.log("no addresses allowed for app manage, all access will be denied"); From d42fa491704bdc1066b3d63f49244d9953a62c61 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 24 Jun 2003 14:43:40 +0000 Subject: [PATCH 060/217] modified to work with type-definition by strings and not by constants --- Global/renderFunctions.js | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/Global/renderFunctions.js b/Global/renderFunctions.js index 84731b8b..7381c031 100644 --- a/Global/renderFunctions.js +++ b/Global/renderFunctions.js @@ -74,26 +74,18 @@ function renderLocation (docEl, param) { */ function renderTags (docEl, param) { var skinname = (param.skin) ? param.skin : "main"; - var type = -1; - if (param.type=="param" || param.type=="params") - type = Packages.helma.doc.DocTag.PARAMETER; - else if (param.type=="return" || param.type=="returns") - type = Packages.helma.doc.DocTag.RETURN; - else if (param.type=="author") - type = Packages.helma.doc.DocTag.AUTHOR; - else if (param.type=="version") - type = Packages.helma.doc.DocTag.VERSION; - else if (param.type=="see") - type = Packages.helma.doc.DocTag.SEE; - else if (param.type=="deprecated") - type = Packages.helma.doc.DocTag.DEPRECATED; - else if (param.type=="overrides") - type = Packages.helma.doc.DocTag.OVERRIDES; + var type = param.type; + if (type=="params") + type = "param"; + else if (type=="returns") + type = "return"; + else if (type=="arg") + type = "param"; var str = ""; var arr = docEl.listTags (); for (var i=0; i Date: Thu, 6 Nov 2003 15:09:36 +0000 Subject: [PATCH 061/217] Adapt function line number output to changes in HtmlEncoder which adds line separators after the
    rather than before. --- DocFunction/macros.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/DocFunction/macros.js b/DocFunction/macros.js index 7eb66819..2f674bec 100644 --- a/DocFunction/macros.js +++ b/DocFunction/macros.js @@ -109,7 +109,11 @@ function source_macro(par) { str4 += '' + (i+1) + ': ' if (i<99) str4+=' '; if (i<9) str4+=' '; - str4 += arr[i] + "
    "; + // Hack: remove leading returns/line feeds in each line + while (arr[i].length>0 && + (arr[i][0] == '\n' || arr[i][0] == '\r')) + arr[i] = arr[i].substring(1); + str4 += arr[i] + "
    "; } return ( str4 ); } From 08d3a944295a5406405c6598d08015502201e0d8 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 6 Jan 2004 15:47:22 +0000 Subject: [PATCH 062/217] moved the actual rendering part in render_action into functions.js --- DocApplication/actions.js | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/DocApplication/actions.js b/DocApplication/actions.js index f071ac99..573947a5 100644 --- a/DocApplication/actions.js +++ b/DocApplication/actions.js @@ -46,29 +46,13 @@ function render_action () { // set res.data.rendering, this will suppress the link back to the manage // console in the apidocs actions res.data.rendering = true; - if (checkAddress()==false) - return; - if (checkAuth(this.getParentElement ())==false) - return; - var prefix = this.href (""); - this.storePage (this, "main", "", "index.html"); - this.storePage (this, "prototypes"); - this.storePage (this, "summary"); - this.storePage (this, "functionindex"); - var ct = 4; - var arr = this.listChildren (); - for (var i=0; i
    '; - res.data.body += 'back to manage console'; + if (checkAddress()==false) + return; + if (checkAuth(this.getParentElement ())==false) + return; + var ct = this.renderApi(); + res.data.body = 'rendering API ...
    wrote ' + ct + ' files

    '; + res.data.body += 'back to manage console'; res.data.title = "rendering helma api"; res.data.head = renderSkinAsString("head"); renderSkin ("basic"); From 98ad7be09b8661f0b7b78842014eae13d49556a0 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 6 Jan 2004 15:50:29 +0000 Subject: [PATCH 063/217] added function renderApi() which renders the whole application docs into files. used via webinterface or commandline. changed RegExp: rhino needs global setting as second param in constructor --- DocApplication/functions.js | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/DocApplication/functions.js b/DocApplication/functions.js index aa586d6e..14393695 100644 --- a/DocApplication/functions.js +++ b/DocApplication/functions.js @@ -31,6 +31,27 @@ function getDir (dir, obj) { } } +function renderApi() { + var prefix = this.href (""); + this.storePage (this, "main", "", "index.html"); + this.storePage (this, "prototypes"); + this.storePage (this, "summary"); + this.storePage (this, "functionindex"); + var ct = 4; + var arr = this.listChildren (); + for (var i=0; i Date: Tue, 6 Jan 2004 15:51:12 +0000 Subject: [PATCH 064/217] supress security checks if accessed from commandline - setting via res.data.noWeb --- Global/functions.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Global/functions.js b/Global/functions.js index 86db57d5..4d3740bb 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -107,6 +107,9 @@ function sortProps(a,b) { * @arg appObj application object to check against (if adminUsername etc are set in app.properties) */ function checkAuth(appObj) { + if (res && res.data.noWeb==true) { + return true; + } var ok = false; // check against root @@ -142,6 +145,9 @@ function checkAuth(appObj) { * check access to the manage-app by ip-addresses */ function checkAddress() { + if (res && res.data.noWeb==true) { + return true; + } // if allowadmin value in server.properties has changed, // re-construct the addressFilter if (app.data.addressString != root.getProperty ("allowadmin")){ From e8e2c7098a88bd79c8f7e018a1344e7a0f492252 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 6 Jan 2004 15:55:39 +0000 Subject: [PATCH 065/217] added function renderApi(appName) which can be used from commandline --- Root/functions.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Root/functions.js b/Root/functions.js index 342e79ea..b5c26f9e 100644 --- a/Root/functions.js +++ b/Root/functions.js @@ -1,10 +1,26 @@ /** - * of no use, just to avoid error message + * renders the api of a given application. used from commandline. */ -function onRequest () { +function renderApi(appName) { + + // supress security checks when accessing actions + res.data.noWeb = true; + + // start the application + this.startApplication(appName); + var appObj = this.getApp(appName); + var docApp = appObj.getChildElement("api"); + + // now render the api + var ct = docApp.renderApi(); + writeln("rendered " + ct + " files"); + + // cleanup + this.stopApplication(appName); } + /** * lists all applications in appdir. * for active apps use this.getApplications() = helma.main.Server.getApplications() From 265fc2bf77a2ba1360bd0f6de0b8a9a1b9ea6a28 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 13 Apr 2004 08:35:15 +0000 Subject: [PATCH 066/217] don't encode type.properties content to avoid double blank lines --- DocPrototype/typeproperties.skin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DocPrototype/typeproperties.skin b/DocPrototype/typeproperties.skin index 4eead93f..2a0ffd32 100644 --- a/DocPrototype/typeproperties.skin +++ b/DocPrototype/typeproperties.skin @@ -3,7 +3,7 @@
    type.properties
    <% param.content encoding="html" %>
    <% param.content %>
    From 2c907f75c86085fb9cad15aba211ecae677b7c95 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 13 Apr 2004 08:37:02 +0000 Subject: [PATCH 067/217] removed space between functionname and params --- Global/renderFunctions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Global/renderFunctions.js b/Global/renderFunctions.js index 7381c031..ad6862f5 100644 --- a/Global/renderFunctions.js +++ b/Global/renderFunctions.js @@ -15,7 +15,7 @@ function renderLink (docEl, param) { text += str.substring (0, str.length-6); } } else if (docEl.getType () == docEl.FUNCTION) { - var text = docEl.getName () + " ("; + var text = docEl.getName () + "("; var arr = docEl.listParameters (); for (var i=0; i Date: Tue, 13 Apr 2004 08:37:38 +0000 Subject: [PATCH 068/217] changed macro sourcecode to work with regexp and added more syntax highlighting --- DocFunction/macros.js | 71 ++++++++++++++++++++++++++----------------- DocFunction/main.skin | 2 +- 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/DocFunction/macros.js b/DocFunction/macros.js index 2f674bec..ed2c1354 100644 --- a/DocFunction/macros.js +++ b/DocFunction/macros.js @@ -87,35 +87,50 @@ function type_macro (param) { * macro returning nicely formatted sourcecode of this method. * code is encoded, >% %<-tags are colorcoded, line numbers are added */ -function source_macro(par) { - var str = this.getContent (); - var arr = str.split("<%"); - var str2 = ""; - for ( var i=0; i<%'); + + r = new RegExp("%>","gim"); + sourcecode = sourcecode.replace(r, '%>'); + + // highlight js-comments + r = new RegExp("^([ \\t]*//.*)", "gm"); + sourcecode = sourcecode.replace(r, '$1'); + + // highlight quotation marks, but not for skins + if (this.getTypeName() != "Skin") { + r = new RegExp("(".*?")", "gm"); + sourcecode = sourcecode.replace(r, '$1'); + r = new RegExp("(\'[\']*\')", "gm"); + sourcecode = sourcecode.replace(r, '$1'); + } + + // remove all CR and LF, just
    remains + var r = new RegExp("[\\r\\n]","gm"); + sourcecode = sourcecode.replace(r, ""); + + var arr = sourcecode.split("
    "); + for (var i=0; i' + (i+1) + ': '); + if (i<99) { + res.write(' '); + } + if (i<9) { + res.write(' '); + } + res.write(arr[i] + "\n"); + } + + } else { + res.write(sourcecode); } - var arr = str2.split("%>"); - var str3 = ""; - for ( var i=0; i"); - var str4 = ""; - for ( var i=0; i ' - if (i<99) str4+=' '; - if (i<9) str4+=' '; - // Hack: remove leading returns/line feeds in each line - while (arr[i].length>0 && - (arr[i][0] == '\n' || arr[i][0] == '\r')) - arr[i] = arr[i].substring(1); - str4 += arr[i] + "
    "; - } - return ( str4 ); } diff --git a/DocFunction/main.skin b/DocFunction/main.skin index f9546829..da43ed06 100644 --- a/DocFunction/main.skin +++ b/DocFunction/main.skin @@ -24,7 +24,7 @@ From af52a36f3da8083c2669c55b7d7de56d603474a9 Mon Sep 17 00:00:00 2001 From: stefanp Date: Tue, 13 Apr 2004 15:40:27 +0000 Subject: [PATCH 069/217] check for prototype root or Root in hrefRoot_macro --- DocApplication/macros.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DocApplication/macros.js b/DocApplication/macros.js index daccf992..b93ee674 100644 --- a/DocApplication/macros.js +++ b/DocApplication/macros.js @@ -39,6 +39,9 @@ function headline_macro (param) { function hrefRoot_macro (param) { var obj = this.getChildElement ("prototype_root"); + if (obj == null) { + var obj = this.getChildElement ("prototype_Root"); + } if (obj!=null) { var action = (param.action) ? param.action : "main"; return obj.href (action); From f1b50186fbc3ad6c8f86c2876423456e4e4c1f50 Mon Sep 17 00:00:00 2001 From: p3k Date: Wed, 28 Apr 2004 11:09:39 +0000 Subject: [PATCH 070/217] fixed bug that caused exception with wront access credentials --- Global/functions.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Global/functions.js b/Global/functions.js index 4d3740bb..6f506f3d 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -132,10 +132,9 @@ function checkAuth(appObj) { if (appObj!=null && appObj.isActive()) { // check against application - var appUsername = appObj.getProperty("adminusername"); - var appPassword = appObj.getProperty("adminpassword"); - if ( md5username==appUsername && md5password==appPassword ) - return true; + adminAccess = appObj.getProperty("adminAccess"); + if (md5key==adminAccess) + return true; } return forceAuth(); } From c632c8f8bd19721e0b77a7abe52e912d2d749bfd Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 30 Aug 2005 11:06:07 +0000 Subject: [PATCH 071/217] * Always render full file path because sources may be scattered in different repositories. --- Global/renderFunctions.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Global/renderFunctions.js b/Global/renderFunctions.js index ad6862f5..2b7c4057 100644 --- a/Global/renderFunctions.js +++ b/Global/renderFunctions.js @@ -57,11 +57,8 @@ function renderLinkTag (param) { */ function renderLocation (docEl, param) { var f = docEl.getLocation (); - if (f.isDirectory ()) - return f.getName (); - else { - return f.getParentFile ().getName () + "/" + f.getName (); - } + // with repositories, always display full file path + return f.getAbsolutePath(); } From 437dfb94d3adab49d5176680d5998c5ef29de1e3 Mon Sep 17 00:00:00 2001 From: hns Date: Wed, 31 Aug 2005 13:16:21 +0000 Subject: [PATCH 072/217] * Bring manage app up to date with current Helma. --- Application/actions.js | 67 +++++++ Application/functions.js | 25 ++- Application/macros.js | 176 +++++++++--------- Application/main.hac | 12 -- Application/main.skin | 4 +- Application/mrtg.hac | 42 ----- Application/redirectpublic.hac | 10 - DocApplication/actions.js | 88 ++++----- DocApplication/functions.js | 135 +++++++------- DocApplication/macros.js | 127 +++++++------ DocFunction/actions.js | 14 +- DocFunction/macros.js | 170 +++++++++-------- DocPrototype/actions.js | 28 +-- DocPrototype/asParentList.skin | 1 - DocPrototype/functions.js | 32 ++-- DocPrototype/list.skin | 1 - DocPrototype/macros.js | 225 ++++++++++++----------- DocPrototype/main.skin | 9 +- DocPrototype/typeproperties.skin | 2 +- Global/functions.js | 303 +++++++++++++++---------------- Global/macros.js | 12 +- Global/navig.skin | 4 +- Global/renderFunctions.js | 264 +++++++++++++-------------- Root/actions.js | 130 +++++++++++++ Root/functions.js | 39 ++-- Root/image.hac | 11 -- Root/macros.js | 273 ++++++++++++++-------------- Root/main.hac | 44 ----- Root/makekey.hac | 33 ---- Root/mrtg.hac | 37 ---- app.properties | 4 +- class.properties | 13 +- readme.txt | 2 +- 33 files changed, 1185 insertions(+), 1152 deletions(-) create mode 100644 Application/actions.js delete mode 100644 Application/main.hac delete mode 100644 Application/mrtg.hac delete mode 100644 Application/redirectpublic.hac create mode 100644 Root/actions.js delete mode 100644 Root/image.hac delete mode 100644 Root/main.hac delete mode 100644 Root/makekey.hac delete mode 100644 Root/mrtg.hac diff --git a/Application/actions.js b/Application/actions.js new file mode 100644 index 00000000..ddbedc75 --- /dev/null +++ b/Application/actions.js @@ -0,0 +1,67 @@ +/** +* renders AppManager +*/ +function main_action() { + if (checkAddress() == false) + return; + if (checkAuth(this) == false) + return; + + res.data.body = this.renderSkinAsString("main"); + renderSkin("global"); +} + + +/** +* prints session- and thread-stats for mrtg-tool +* doesn't check username or password, so that we don't have +* to write them cleartext in a mrtg-configfile but checks the +* remote address. +*/ +function mrtg_action() { + if (checkAddress() == false) + return; + + if (this.isActive() == false) { + res.write("0\n0\n0\n0\n"); + return; + } + + if (req.data.action == "sessions") { + + res.write(this.sessions.size()); + res.write("\n0\n0\n0\n"); + + } else if (req.data.action == "threads") { + + res.write(this.countActiveEvaluators() + "\n"); + res.write(this.countEvaluators() + "\n"); + res.write("0\n0\n"); + + } else if (req.data.action == "cache") { + + res.write(this.getCacheUsage() + "\n"); + res.write(this.getProperty("cachesize", "1000") + "\n"); + res.write("0\n0\n"); + + } else if (req.data.action == "requests") { + + // res.write ( + + } else { + res.write("0\n0\n0\n0\n"); + } + +} + +/** +* performs a redirect to the public site +* (workaround, we can't access application object from docapplication for some reason) +* @see application.url_macro +*/ +function redirectpublic_action() { + if (checkAddress() == false) return; + if (checkAuth(this) == false) return; + + res.redirect(this.url_macro()); +} diff --git a/Application/functions.js b/Application/functions.js index 63d7278f..cdf0af56 100644 --- a/Application/functions.js +++ b/Application/functions.js @@ -1,29 +1,28 @@ - /** - * construct an application object so that we can use - * skins for non-active applications too - * @arg name - */ -function constructor(name) { - this.name = name; +* construct an application object so that we can use +* skins for non-active applications too +* @arg name +*/ +function constructor(name) { + this.name = name; } /** * of no use, just to avoid error message */ -function onRequest () { +function onRequest() { } /** * return true/false to determine if application is running */ -function isActive() { - if ( root.getApplication(this.name)==null ) - return false; - else - return true; +function isActive() { + if (root.getApplication(this.name) == null) + return false; + else + return true; } diff --git a/Application/macros.js b/Application/macros.js index 219a2a86..22c32903 100644 --- a/Application/macros.js +++ b/Application/macros.js @@ -2,10 +2,10 @@ * macro rendering a skin * @param name name of skin */ -function skin_macro(par) { - if ( par && par.name ) { - this.renderSkin(par.name); - } +function skin_macro(par) { + if (par && par.name) { + this.renderSkin(par.name); + } } @@ -13,8 +13,8 @@ function skin_macro(par) { * macro-wrapper for href-function * @param action name of action to call on this prototype, default main */ -function href_macro(par) { - return this.href( (par&&par.action)?par.action:"main" ); +function href_macro(par) { + return this.href((par && par.action) ? par.action : "main"); } @@ -24,12 +24,12 @@ function href_macro(par) { * the application (which is using baseURI if set) */ function url_macro() { - var str = this.getProperty("absoluteuri"); - if ( str!=null && str!="" ) { - return str; - } else { - return this.getRootHref(); - } + var str = this.getProperty("absoluteuri"); + if (str != null && str != "") { + return str; + } else { + return this.getRootHref(); + } } @@ -37,8 +37,8 @@ function url_macro() { * Macro returning the title of an application */ function title_macro() { - var title = this.name; - return(title); + var title = this.name; + return(title); } @@ -49,25 +49,25 @@ function title_macro() { * @param Object Macro parameter object */ function description_macro(param) { - var str = ""; - var appHome = this.getAppDir(); - var f = new File(this.getAppDir().toString(), "description.txt"); - if (!f.exists()) - f = new File(this.getAppDir().toString(), "doc.html"); - if (f.exists()) { - str = f.readAll(); - if (str.length > 200) - str = str.substring(0, 200) + "..."; - } - return(str); + var str = ""; + var appHome = this.getAppDir(); + var f = new File(this.getAppDir().toString(), "description.txt"); + if (!f.exists()) + f = new File(this.getAppDir().toString(), "doc.html"); + if (f.exists()) { + str = f.readAll(); + if (str.length > 200) + str = str.substring(0, 200) + "..."; + } + return(str); } /** * Macro returning the server's uptime nicely formatted */ -function uptime_macro() { - return formatAge( (java.lang.System.currentTimeMillis()-this.starttime) / 1000 ); +function uptime_macro() { + return formatAge((java.lang.System.currentTimeMillis() - this.starttime) / 1000); } @@ -76,11 +76,11 @@ function uptime_macro() { * parameter used by global.formatCount * @see global.formatCount */ -function countSessions_macro(par) { - if ( this.isActive()==true ) - return this.sessions.size() + formatCount(this.sessions.size(),par); - else - return 0; +function countSessions_macro(par) { + if (this.isActive() == true) + return this.sessions.size() + formatCount(this.sessions.size(), par); + else + return 0; } @@ -91,12 +91,12 @@ function countSessions_macro(par) { * @see application.countUsers_macro * @see application.listUsers_macro */ -function users_macro(par) { - if ( req.data.showusers=="true" ) { - this.listUsers_macro(par); - } else { - this.countUsers_macro(par); - } +function users_macro(par) { + if (req.data.showusers == "true") { + this.listUsers_macro(par); + } else { + this.countUsers_macro(par); + } } @@ -106,11 +106,11 @@ function users_macro(par) { * parameter used by global.formatCount * @see global.formatCount */ -function countUsers_macro(par) { - if ( this.isActive()==true ) - return this.activeUsers.size() + formatCount(this.activeUsers.size(),par); - else - return 0; +function countUsers_macro(par) { + if (this.isActive() == true) + return this.activeUsers.size() + formatCount(this.activeUsers.size(), par); + else + return 0; } @@ -118,93 +118,93 @@ function countUsers_macro(par) { * Macro rendering the list of logged-in users if application is active * @param separator html-code written between elements */ -function listUsers_macro(par) { - var separator = (par && par.separator) ? par.separator : ", "; - if ( this.activeUsers.size()==0 ) - return ""; - var e = this.activeUsers.keys(); - while ( e.hasMoreElements() ) { - res.write ( e.nextElement() ); - if ( e.hasMoreElements() ) { - res.write ( separator ); - } - } +function listUsers_macro(par) { + var separator = (par && par.separator) ? par.separator : ", "; + if (this.activeUsers.size() == 0) + return ""; + var users = this.activeUsers.iterator(); + while (users.hasNext()) { + res.write(users.next().__name__); + if (users.hasNext()) { + res.write(separator); + } + } } /** * Macro returning the number of active evaluators (=threads) */ -function countActiveEvaluators_macro() { - return this.countActiveEvaluators(); +function countActiveEvaluators_macro() { + return this.countActiveEvaluators(); } /** * Macro returning the number of free evaluators (=threads) */ -function countFreeEvaluators_macro() { - return this.countFreeEvaluators(); +function countFreeEvaluators_macro() { + return this.countFreeEvaluators(); } /** * Macro returning the current number of objects in the cache */ -function cacheusage_macro (param) { - return this.getCacheUsage (); +function cacheusage_macro(param) { + return this.getCacheUsage(); } /** * Macro returning the number of objects allowed in the cache */ -function cachesize_macro (param) { - return this.getProperty ("cachesize", "1000"); +function cachesize_macro(param) { + return this.getProperty("cachesize", "1000"); } /** * Macro formatting the number of requests in the last 5 minutes */ -function requestCount_macro(par) { - if (app.data.stat==null || app.data.stat.get (this.name)==null) - return "not available"; - if (this.isActive()) { - var obj = app.data.stat.get (this.name); - return obj.requestCount + formatCount (obj.requestCount, par); - } else { - return 0 + formatCount (0,par); - } +function requestCount_macro(par) { + if (app.data.stat == null || app.data.stat[this.name] == null) + return "not available"; + if (this.isActive()) { + var obj = app.data.stat[this.name]; + return obj.requestCount + formatCount(obj.requestCount, par); + } else { + return 0 + formatCount(0, par); + } } /** * Macro formatting the number of errors in the last 5 minutes */ -function errorCount_macro(par) { - if (app.data.stat==null || app.data.stat.get (this.name)==null) - return "not available"; - if (this.isActive()) { - var obj = app.data.stat.get (this.name); - return obj.errorCount + formatCount (obj.errorCount, par); - } else { - return 0 + formatCount (0,par); - } +function errorCount_macro(par) { + if (app.data.stat == null || app.data.stat[this.name] == null) + return "not available"; + if (this.isActive()) { + var obj = app.data.stat[this.name]; + return obj.errorCount + formatCount(obj.errorCount, par); + } else { + return 0 + formatCount(0, par); + } } - - /** - * Macro formatting app.properties - */ -function properties_macro(par) { - formatProperties( this.getProperties(), par ); +* Macro formatting app.properties +*/ +function properties_macro(par) { + formatProperties(this.getProperties(), par); } -function appdir_macro (param) { - return this.getAppDir ().toString (); +function repositories_macro(param) { + var repos = this.getRepositories().iterator(); + while (repos.hasNext()) + res.writeln(repos.next().getName()); } diff --git a/Application/main.hac b/Application/main.hac deleted file mode 100644 index 7faa81af..00000000 --- a/Application/main.hac +++ /dev/null @@ -1,12 +0,0 @@ -/** - * renders AppManager - */ - -if (checkAddress()==false) - return; -if (checkAuth(this)==false) - return; - -res.data.body = this.renderSkinAsString("main"); -renderSkin ("global"); - diff --git a/Application/main.skin b/Application/main.skin index c689c6a9..455e77d2 100644 --- a/Application/main.skin +++ b/Application/main.skin @@ -47,9 +47,9 @@ - + - +
    Sourcecode in <% this.location %>: -
    <% this.source %>
    +
    <% this.source as="highlighted" %>
    <% this.uptime %>
    app directoryrepositories  <% this.appdir %><% this.repositories %>
    diff --git a/Application/mrtg.hac b/Application/mrtg.hac deleted file mode 100644 index b6129f21..00000000 --- a/Application/mrtg.hac +++ /dev/null @@ -1,42 +0,0 @@ - -/** - * prints session- and thread-stats for mrtg-tool - * doesn't check username or password, so that we don't have - * to write them cleartext in a mrtg-configfile but checks the - * remote address. - */ - -if ( checkAddress()==false ) - return; - -if ( this.isActive()==false ) { - res.write ( "0\n0\n0\n0\n"); - return; -} - -if (req.data.action=="sessions") { - - res.write (this.sessions.size()); - res.write ("\n0\n0\n0\n"); - -} else if (req.data.action=="threads") { - - res.write (this.countActiveEvaluators () + "\n"); - res.write (this.countEvaluators () + "\n"); - res.write ("0\n0\n"); - -} else if (req.data.action=="cache") { - - res.write (this.getCacheUsage () + "\n"); - res.write (this.getProperty ("cachesize", "1000") + "\n"); - res.write ("0\n0\n"); - -} else if (req.data.action=="requests") { - -// res.write ( - -} else { - res.write ( "0\n0\n0\n0\n"); -} - - diff --git a/Application/redirectpublic.hac b/Application/redirectpublic.hac deleted file mode 100644 index 7ead5169..00000000 --- a/Application/redirectpublic.hac +++ /dev/null @@ -1,10 +0,0 @@ -/** - * performs a redirect to the public site - * (workaround, we can't access application object from docapplication for some reason) - * @see application.url_macro - */ - -if ( checkAddress()==false ) return; -if ( checkAuth(this)==false ) return; - -res.redirect ( this.url_macro() ); diff --git a/DocApplication/actions.js b/DocApplication/actions.js index 573947a5..7c1efcfa 100644 --- a/DocApplication/actions.js +++ b/DocApplication/actions.js @@ -1,59 +1,59 @@ -function read_action () { - this.readApplication (); - res.redirect (this.href("main")); +function read_action() { + this.readApplication(); + res.redirect(this.href("main")); } -function main_action () { - if (checkAddress()==false) - return; - if (checkAuth(this.getParentElement ())==false) - return; - this.renderSkin ("frameset"); +function main_action() { + if (checkAddress() == false) + return; + if (checkAuth(this.getParentElement()) == false) + return; + this.renderSkin("frameset"); } -function prototypes_action () { - if (checkAddress()==false) - return; - if (checkAuth(this.getParentElement ())==false) - return; - res.data.body = this.renderSkinAsString ("prototypes"); - renderSkin ("api"); +function prototypes_action() { + if (checkAddress() == false) + return; + if (checkAuth(this.getParentElement()) == false) + return; + res.data.body = this.renderSkinAsString("prototypes"); + renderSkin("api"); } -function summary_action () { - if (checkAddress()==false) - return; - if (checkAuth(this.getParentElement ())==false) - return; - res.data.body = this.renderSkinAsString ("summary"); - renderSkin ("api"); +function summary_action() { + if (checkAddress() == false) + return; + if (checkAuth(this.getParentElement()) == false) + return; + res.data.body = this.renderSkinAsString("summary"); + renderSkin("api"); } -function functionindex_action () { - if (checkAddress()==false) - return; - if (checkAuth(this.getParentElement ())==false) - return; - res.data.body = this.renderSkinAsString ("functionindex"); - renderSkin ("api"); +function functionindex_action() { + if (checkAddress() == false) + return; + if (checkAuth(this.getParentElement()) == false) + return; + res.data.body = this.renderSkinAsString("functionindex"); + renderSkin("api"); } -function render_action () { - // set res.data.rendering, this will suppress the link back to the manage - // console in the apidocs actions - res.data.rendering = true; - if (checkAddress()==false) - return; - if (checkAuth(this.getParentElement ())==false) - return; - var ct = this.renderApi(); - res.data.body = 'rendering API ...
    wrote ' + ct + ' files

    '; - res.data.body += 'back to manage console'; - res.data.title = "rendering helma api"; - res.data.head = renderSkinAsString("head"); - renderSkin ("basic"); +function render_action() { + // set res.data.rendering, this will suppress the link back to the manage + // console in the apidocs actions + res.data.rendering = true; + if (checkAddress() == false) + return; + if (checkAuth(this.getParentElement()) == false) + return; + var ct = this.renderApi(); + res.data.body = 'rendering API ...
    wrote ' + ct + ' files

    '; + res.data.body += 'back to manage console'; + res.data.title = "rendering helma api"; + res.data.head = renderSkinAsString("head"); + renderSkin("basic"); } diff --git a/DocApplication/functions.js b/DocApplication/functions.js index 14393695..e3769a61 100644 --- a/DocApplication/functions.js +++ b/DocApplication/functions.js @@ -1,90 +1,89 @@ - /** - * get the prototype of any doc-object (either a prototype, a function or a tag) - */ -function getDocPrototype (obj) { - var tmp = obj; - while (tmp!=null && tmp.getType () != this.PROTOTYPE) { - tmp = tmp.getParentElement (); - } - return tmp; +* get the prototype of any doc-object (either a prototype, a function or a tag) +*/ +function getDocPrototype(obj) { + var tmp = obj; + while (tmp != null && tmp.getType() != this.PROTOTYPE) { + tmp = tmp.getParentElement(); + } + return tmp; } /** * get a prototype of this docapplication, ie get on of the children of this object */ -function getPrototype (name) { - return this.getChildElement ("prototype_" + name); +function getPrototype(name) { + return this.getChildElement("prototype_" + name); } -function getDir (dir, obj) { - dir.mkdir (); - if (obj.getType () == this.APPLICATION) { - return dir; - } else { - var protoObj = this.getDocPrototype (obj); - var dir = new File (dir, protoObj.getElementName ()); - dir.mkdir (); - return dir; - } +function getDir(dir, obj) { + dir.mkdir(); + if (obj.getType() == this.APPLICATION) { + return dir; + } else { + var protoObj = this.getDocPrototype(obj); + var dir = new File (dir, protoObj.getElementName()); + dir.mkdir(); + return dir; + } } function renderApi() { - var prefix = this.href (""); - this.storePage (this, "main", "", "index.html"); - this.storePage (this, "prototypes"); - this.storePage (this, "summary"); - this.storePage (this, "functionindex"); - var ct = 4; - var arr = this.listChildren (); - for (var i=0; iback to manage console'); - } +function linkToManage_macro(param) { + if (res.data.rendering != true) { + return ('back to manage console'); + } } -function headline_macro (param) { - res.write (this.getName ()); +function headline_macro(param) { + res.write(this.getName()); } - -function hrefRoot_macro (param) { - var obj = this.getChildElement ("prototype_root"); - if (obj == null) { - var obj = this.getChildElement ("prototype_Root"); - } - if (obj!=null) { - var action = (param.action) ? param.action : "main"; - return obj.href (action); - } +function hrefRoot_macro(param) { + var obj = this.getChildElement("prototype_root"); + if (obj == null) { + var obj = this.getChildElement("prototype_Root"); + } + if (obj != null) { + var action = (param.action) ? param.action : "main"; + return obj.href(action); + } } @@ -54,15 +67,15 @@ function hrefRoot_macro (param) { * @param skin name of skin to render on prototype * @param separator */ -function prototypes_macro(param) { - var skin = (param.skin) ? param.skin : "asPrototypeList"; - var separator = (param.separator) ? param.separator : ""; - var arr = this.listChildren (); - for ( var i=0; i-1) - name = name.substring (0, name.length-6); - res.write (name); - res.write (" %>"); - } else if (this.getType () == this.SKIN) { - if (handler!="" && handler!="global") - res.write (handler + "/"); - res.write (this.getName ()); - res.write (".skin"); - } +function headline_macro(param) { + var p = this.getParentElement(); + var handler = (p != null) ? p.getName() : ""; + if (this.getType() == this.ACTION) { + res.write("/" + this.getName()); + } else if (this.getType() == this.FUNCTION) { + if (handler != "" && handler != "global") + res.write(handler + "."); + res.write(this.getName() + " ("); + var arr = this.listParameters(); + for (var i = 0; i < arr.length; i++) { + res.write(arr[i]); + if (i < arr.length - 1) { + res.write(", "); + } + } + res.write(")"); + } else if (this.getType() == this.MACRO) { + res.write("<% "); + if (handler != "" && handler != "global") + res.write(handler + "."); + var name = this.getName(); + if (name.indexOf("_macro") > -1) + name = name.substring(0, name.length - 6); + res.write(name); + res.write(" %>"); + } else if (this.getType() == this.SKIN) { + if (handler != "" && handler != "global") + res.write(handler + "/"); + res.write(this.getName()); + res.write(".skin"); + } else if (this.getType() == this.PROPERTIES) { + res.write(this.getName()); + } } -function skinparameters_macro (param) { - if (this.getType () == this.SKIN) { - this.parameters_macro (param); - } +function skinparameters_macro(param) { + if (this.getType() == this.SKIN) { + this.parameters_macro(param); + } } -function parameters_macro (param) { - var separator = (param.separator) ? param.separator : ", "; - var arr = this.listParameters (); - for (var i=0; i<%'); - r = new RegExp("%>","gim"); + r = new RegExp("%>", "gim"); sourcecode = sourcecode.replace(r, '%>'); // highlight js-comments @@ -113,24 +125,24 @@ function source_macro(param) { } // remove all CR and LF, just
    remains - var r = new RegExp("[\\r\\n]","gm"); + var r = new RegExp("[\\r\\n]", "gm"); sourcecode = sourcecode.replace(r, ""); - var arr = sourcecode.split("
    "); - for (var i=0; i' + (i+1) + ': '); - if (i<99) { - res.write(' '); - } - if (i<9) { - res.write(' '); - } - res.write(arr[i] + "\n"); - } + var arr = sourcecode.split("
    "); + for (var i = 0; i < arr.length; i++) { + res.write('' + (i + 1) + ': '); + if (i < 99) { + res.write(' '); + } + if (i < 9) { + res.write(' '); + } + res.write(arr[i] + "\n"); + } - } else { - res.write(sourcecode); - } + } else { + res.write(sourcecode); + } } diff --git a/DocPrototype/actions.js b/DocPrototype/actions.js index 853c8b66..a9b9c873 100644 --- a/DocPrototype/actions.js +++ b/DocPrototype/actions.js @@ -1,18 +1,18 @@ -function list_action () { - if (checkAddress()==false) - return; - if (checkAuth()==false) - return; - res.data.body = this.renderSkinAsString ("list"); - renderSkin ("api"); +function list_action() { + if (checkAddress() == false) + return; + if (checkAuth() == false) + return; + res.data.body = this.renderSkinAsString("list"); + renderSkin("api"); } -function main_action () { - if (checkAddress()==false) - return; - if (checkAuth()==false) - return; - res.data.body = this.renderSkinAsString ("main"); - renderSkin ("api"); +function main_action() { + if (checkAddress() == false) + return; + if (checkAuth() == false) + return; + res.data.body = this.renderSkinAsString("main"); + renderSkin("api"); } diff --git a/DocPrototype/asParentList.skin b/DocPrototype/asParentList.skin index cfdc8989..34208c8a 100644 --- a/DocPrototype/asParentList.skin +++ b/DocPrototype/asParentList.skin @@ -7,7 +7,6 @@ <% this.methods separator=", " filter="functions" skin="asParentListItem" prefix="Functions: " suffix="
    " %> <% this.methods separator=", " filter="macros" skin="asParentListItem" prefix="Macros: " suffix="
    " %> <% this.methods separator=", " filter="skins" skin="asParentListItem" prefix="Skins: " suffix="
    " %> -<% this.methods separator=", " filter="templates" skin="asParentListItem" prefix="Templates: " suffix="
    " %>
    Templates
    type.properties
     
    - + diff --git a/Global/functions.js b/Global/functions.js index 6f506f3d..7c40b5b7 100644 --- a/Global/functions.js +++ b/Global/functions.js @@ -1,11 +1,9 @@ - - /** - * scheduler function, runs global.appStat every minute - */ +* scheduler function, runs global.appStat every minute +*/ function scheduler() { - appStat(); - return 60000; + appStat(); + return 60000; } @@ -14,8 +12,8 @@ function scheduler() { * creates app.data.addressFilter */ function onStart() { - app.data.addressFilter = createAddressFilter(); - app.data.addressString = root.getProperty ("allowadmin"); + app.data.addressFilter = createAddressFilter(); + app.data.addressString = root.getProperty("allowadmin"); } /** @@ -23,80 +21,80 @@ function onStart() { * hostnames are converted, wildcards are only allowed in ip-addresses * (so, no network-names, sorry) */ -function createAddressFilter() { - var filter = new Packages.helma.util.InetAddressFilter(); - var str = root.getProperty("allowadmin"); - if ( str!=null && str!="" ) { - var arr = str.split(","); - for ( var i in arr ) { - var str = new java.lang.String(arr[i]); +function createAddressFilter() { + var filter = new Packages.helma.util.InetAddressFilter(); + var str = root.getProperty("allowadmin"); + if (str != null && str != "") { + var arr = str.split(","); + for (var i in arr) { + str = new java.lang.String(arr[i]); try { filter.addAddress(str.trim()); } catch (a) { try { - var str = java.net.InetAddress.getByName(str.trim()).getHostAddress(); - filter.addAddress (str); + str = java.net.InetAddress.getByName(str.trim()).getHostAddress(); + filter.addAddress(str); } catch (b) { - app.log ("error using address " + arr[i] + ": " + b); + app.log("error using address " + arr[i] + ": " + b); } } - } - } else { - app.log("no addresses allowed for app manage, all access will be denied"); - } - return filter; + } + } else { + app.log("no addresses allowed for app manage, all access will be denied"); + } + return filter; } /** * updates the stats in app.data.stat every 5 minutes */ -function appStat () { - if (app.data.stat==null) - app.data.stat = new HopObject (); - if ((new Date()-300000) < app.data.stat.lastRun) - return; - var arr = root.getApplications (); - for (var i=0; i b.name) - return 1; - else if (a.name == b.name) - return 0; - else - return -1; +function sortByName(a, b) { + if (a.name > b.name) + return 1; + else if (a.name == b.name) + return 0; + else + return -1; } /** * utility function to sort property-arrays by key */ -function sortProps(a,b) { - if ( a>b ) - return 1; - else if ( a==b ) - return 0; - else - return -1; +function sortProps(a, b) { + if (a > b) + return 1; + else if (a == b) + return 0; + else + return -1; } /** @@ -106,62 +104,62 @@ function sortProps(a,b) { * object for http-auth and return false. * @arg appObj application object to check against (if adminUsername etc are set in app.properties) */ -function checkAuth(appObj) { - if (res && res.data.noWeb==true) { +function checkAuth(appObj) { + if (res && res.data.noWeb == true) { return true; } - var ok = false; + var ok = false; - // check against root - var adminAccess = root.getProperty("adminAccess"); + // check against root + var adminAccess = root.getProperty("adminAccess"); - if (adminAccess==null || adminAccess=="") { - res.redirect (root.href ("makekey")); - } + if (adminAccess == null || adminAccess == "") { + res.redirect(root.href("makekey")); + } - var uname = req.username; - var pwd = req.password; + var uname = req.username; + var pwd = req.password; - if ( uname==null || uname=="" || pwd==null || pwd=="" ) - return forceAuth(); + if (uname == null || uname == "" || pwd == null || pwd == "") + return forceAuth(); - var md5key = Packages.helma.util.MD5Encoder.encode(uname + "-" + pwd); + var md5key = Packages.helma.util.MD5Encoder.encode(uname + "-" + pwd); - if (md5key==adminAccess) - return true; + if (md5key == adminAccess) + return true; - if (appObj!=null && appObj.isActive()) { - // check against application - adminAccess = appObj.getProperty("adminAccess"); - if (md5key==adminAccess) - return true; - } - return forceAuth(); + if (appObj != null && appObj.isActive()) { + // check against application + adminAccess = appObj.getProperty("adminAccess"); + if (md5key == adminAccess) + return true; + } + return forceAuth(); } /** * check access to the manage-app by ip-addresses */ -function checkAddress() { - if (res && res.data.noWeb==true) { +function checkAddress() { + if (res && res.data.noWeb == true) { + return true; + } + // if allowadmin value in server.properties has changed, + // re-construct the addressFilter + if (app.data.addressString != root.getProperty("allowadmin")) { + app.data.addressFilter = createAddressFilter(); + app.data.addressString = root.getProperty("allowadmin"); + } + if (!app.data.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost))) { + app.log("denied request from " + req.data.http_remotehost); + // forceStealth seems a bit like overkill here. + // display a message that the ip address must be added to server.properties + res.write("Access from address " + req.data.http_remotehost + " denied."); + return false; + } else { return true; } - // if allowadmin value in server.properties has changed, - // re-construct the addressFilter - if (app.data.addressString != root.getProperty ("allowadmin")){ - app.data.addressFilter = createAddressFilter(); - app.data.addressString = root.getProperty ("allowadmin"); - } - if ( !app.data.addressFilter.matches(java.net.InetAddress.getByName(req.data.http_remotehost)) ) { - app.log("denied request from " + req.data.http_remotehost ); - // forceStealth seems a bit like overkill here. - // display a message that the ip address must be added to server.properties - res.write ("Access from address "+req.data.http_remotehost+" denied."); - return false; - } else { - return true; - } } @@ -169,68 +167,67 @@ function checkAddress() { * response is reset to 401 / authorization required * @arg realm realm for http-auth */ -function forceAuth(realm) { - res.reset(); - res.status = 401; - res.realm = (realm!=null) ? realm : "helma"; - res.write ("Authorization Required. The server could not verify that you are authorized to access the requested page."); - return false; +function forceAuth(realm) { + res.reset(); + res.status = 401; + res.realm = (realm != null) ? realm : "helma"; + res.write("Authorization Required. The server could not verify that you are authorized to access the requested page."); + return false; } - /** - * macro-utility: formatting property lists - */ -function formatProperties(props,par) { - if ( props.size()==0 ) - return ""; - var e = props.keys(); - var arr = new Array(); - while ( e.hasMoreElements() ) { - arr[arr.length] = e.nextElement(); - } - arr.sort(sortProps); - for ( var i in arr ) { - // don't print the admin-password - if ( arr[i].toLowerCase()=="adminusername" || arr[i].toLowerCase()=="adminpassword" ) continue; - res.write ( par.itemprefix + arr[i] + par.separator + props.getProperty(arr[i]) + par.itemsuffix ); - } +* macro-utility: formatting property lists +*/ +function formatProperties(props, par) { + if (props.size() == 0) + return ""; + var e = props.keys(); + var arr = new Array(); + while (e.hasMoreElements()) { + arr[arr.length] = e.nextElement(); + } + arr.sort(sortProps); + for (var i in arr) { + // don't print the admin-password + if (arr[i].toLowerCase() == "adminusername" || arr[i].toLowerCase() == "adminpassword") continue; + res.write(par.itemprefix + arr[i] + par.separator + props.getProperty(arr[i]) + par.itemsuffix); + } } /** * macro-utility: formatting an integer value as human readable bytes */ -function formatBytes(bytes) { - if ( bytes > Math.pow(2,30) ) { - res.write( Math.round( 100*bytes/Math.pow(2,30) ) / 100 + "gb" ); - } else if ( bytes > Math.pow(2,20) ) { - res.write( Math.round( 100*bytes/Math.pow(2,20) ) / 100 + "mb" ); - } else { - res.write( Math.round( 100*bytes/Math.pow(2,10) ) / 100 + "kb" ); - } +function formatBytes(bytes) { + if (bytes > Math.pow(2, 30)) { + res.write(Math.round(100 * bytes / Math.pow(2, 30)) / 100 + "gb"); + } else if (bytes > Math.pow(2, 20)) { + res.write(Math.round(100 * bytes / Math.pow(2, 20)) / 100 + "mb"); + } else { + res.write(Math.round(100 * bytes / Math.pow(2, 10)) / 100 + "kb"); + } } /** * macro-utility: formatting time in millis as human readable age */ -function formatAge(age) { - var str = ""; - var days = Math.floor(age/86400); - var age = age - days * 86400; - var hours = Math.floor(age / 3600); - var age = age - hours * 3600; - var minutes = Math.floor(age / 60); - var seconds = Math.floor(age - minutes * 60); - if (days > 0) - str += (days + " days, "); - if (hours>0) - str += (hours + "h, "); - str += (minutes + "min"); - if (days == 0) str += (", " + seconds + "sec"); - return(str); +function formatAge(age) { + var str = ""; + var days = Math.floor(age / 86400); + age = age - days * 86400; + var hours = Math.floor(age / 3600); + age = age - hours * 3600; + var minutes = Math.floor(age / 60); + var seconds = Math.floor(age - minutes * 60); + if (days > 0) + str += (days + " days, "); + if (hours > 0) + str += (hours + "h, "); + str += (minutes + "min"); + if (days == 0) str += (", " + seconds + "sec"); + return(str); } @@ -241,23 +238,23 @@ function formatAge(age) { * @param singular string used for value==1 * @param plural string used for value!=1 */ -function formatCount(ct, par) { - if ( !par || !par.singular || !par.plural ) { - return ""; - } - if ( ct==1 ) - return par.singular; - else - return par.plural; +function formatCount(ct, par) { + if (!par || !par.singular || !par.plural) { + return ""; + } + if (ct == 1) + return par.singular; + else + return par.plural; } /** * tries to make out if this server is running linux from java's system properties */ -function isLinux () { - var str = java.lang.System.getProperty("os.name"); - return (str!=null && str.toLowerCase().indexOf("linux")!=-1); +function isLinux() { + var str = java.lang.System.getProperty("os.name"); + return (str != null && str.toLowerCase().indexOf("linux") != -1); } diff --git a/Global/macros.js b/Global/macros.js index 13408e7a..ee3fe97a 100644 --- a/Global/macros.js +++ b/Global/macros.js @@ -2,10 +2,10 @@ * macro rendering a skin * @param name name of skin */ -function skin_macro(par) { - if ( par && par.name ) { - renderSkin(par.name); - } +function skin_macro(par) { + if (par && par.name) { + renderSkin(par.name); + } } @@ -13,6 +13,6 @@ function skin_macro(par) { * Macro returning the actual date and time. */ function now_macro() { - var date = new Date(); - return(date.format("dd.MM.yyyy, HH:mm'h' zzz")); + var date = new Date(); + return(date.format("dd.MM.yyyy, HH:mm'h' zzz")); } diff --git a/Global/navig.skin b/Global/navig.skin index fecbbaf7..044e081d 100644 --- a/Global/navig.skin +++ b/Global/navig.skin @@ -11,7 +11,7 @@

    - and <% root.appCount filter="disabled" %> disabled apps: + disabled apps:
    <% root.appList filter="disabled" skin="navig_disabled" %> @@ -27,4 +27,4 @@

  • ">generate server password -

    \ No newline at end of file +

    diff --git a/Global/renderFunctions.js b/Global/renderFunctions.js index 2b7c4057..280c5168 100644 --- a/Global/renderFunctions.js +++ b/Global/renderFunctions.js @@ -1,95 +1,85 @@ - - -function renderLink (docEl, param) { - var text = ""; - if (docEl.getType () == docEl.APPLICATION || docEl.getType () == docEl.PROTOTYPE) { - text = docEl.getName (); - } else if (docEl.getType () == docEl.SKIN) { - text = docEl.getName () + ".skin"; - } else if (docEl.getType () == docEl.MACRO) { - if (param.handler!="false" && docEl.getParentElement () && docEl.getParentElement().getName()!="global") { - text = docEl.getParentElement ().getName () + "."; - } - var str = docEl.getName (); - if (str.indexOf("_macro")) { - text += str.substring (0, str.length-6); - } - } else if (docEl.getType () == docEl.FUNCTION) { - var text = docEl.getName () + "("; - var arr = docEl.listParameters (); - for (var i=0; i'; +function renderLink(docEl, param) { + var text = ""; + if (docEl.getType() == docEl.APPLICATION || docEl.getType() == docEl.PROTOTYPE) { + text = docEl.getName(); + } else if (docEl.getType() == docEl.SKIN) { + text = docEl.getName() + ".skin"; + } else if (docEl.getType() == docEl.MACRO) { + if (param.handler != "false" && docEl.getParentElement() && docEl.getParentElement().getName() != "global") { + text = docEl.getParentElement().getName() + "."; + } + var str = docEl.getName(); + if (str.indexOf("_macro")) { + text += str.substring(0, str.length - 6); + } + } else if (docEl.getType() == docEl.FUNCTION) { + text = docEl.getName() + "("; + var arr = docEl.listParameters(); + for (var i = 0; i < arr.length; i++) { + text += arr[i]; + if (i < arr.length - 1) + text += ", "; + } + text += ")"; + } else { + text = docEl.getName(); + } + param.href = docEl.href("main"); + if (!param.target) { + param.target = "main"; + } + return renderLinkTag(param) + text + ''; } - - -function renderLinkTag (param) { - var sb = new java.lang.StringBuffer (); - sb.append (''); - return sb.toString (); +function renderLinkTag(param) { + var sb = new java.lang.StringBuffer (); + sb.append(''); + return sb.toString(); } - /** - * renders the name of the location relative to the application - * root. - */ + * renders the name of the location of a doc element. + */ function renderLocation (docEl, param) { - var f = docEl.getLocation (); - // with repositories, always display full file path - return f.getAbsolutePath(); + return docEl.toString(); } - - /** - * renders tag list. - * @param param.skin skin to render on found DocTags - * @param param.separator String printed between tags - * @param param.type type string (param|return|author|version|see) to filter tags. - */ -function renderTags (docEl, param) { - var skinname = (param.skin) ? param.skin : "main"; - var type = param.type; - if (type=="params") - type = "param"; - else if (type=="returns") - type = "return"; - else if (type=="arg") +* renders tag list. +* @param param.skin skin to render on found DocTags +* @param param.separator String printed between tags +* @param param.type type string (param|return|author|version|see) to filter tags. +*/ +function renderTags(docEl, param) { + var skinname = (param.skin) ? param.skin : "main"; + var type = param.type; + if (type == "params") type = "param"; - var str = ""; - var arr = docEl.listTags (); - for (var i=0; i' + text + ''; - } else { - // make sure we only use the first item in the text so that unlinked comments - // can follow, store & split the that - var tok = new java.util.StringTokenizer (text); - var tmp = tok.nextToken (); - text = " " + text.substring (tmp.length + 1); - var parts = tmp.split("."); - // try to find the application object - var obj = docEl; - while (obj!=null) { - if (obj.getType () == Packages.helma.doc.DocElement.APPLICATION) { - var appObj = obj; - break; - } - obj = obj.getParentElement (); - } - var protoObj = appObj.getChildElement ("prototype_" + parts[0]); - if (protoObj==null) { - // prototype wasn't found, return the unlinked tag - return tmp + text; - } - if (parts.length==1) { - // no function specified, return the linked prototype - return '' + format (tmp) + '' + text; - } - // try to find a function object: - var arr = protoObj.listChildren (); - for (var i=0; i' + format(tmp) + '' + text; - } - } - // function not found: - return tmp + text; - } +function renderReference(docTagObj, docEl) { + // prepare the text: + var text = docTagObj.getText(); + text = new java.lang.String (text); + text = text.trim(); + if (text.indexOf("http://") == 0) { + // an url is a simple job + return '' + text + ''; + } else { + // make sure we only use the first item in the text so that unlinked comments + // can follow, store & split the that + var tok = new java.util.StringTokenizer (text); + var tmp = tok.nextToken(); + text = " " + text.substring(tmp.length + 1); + var parts = tmp.split("."); + // try to find the application object + var obj = docEl; + while (obj != null) { + if (obj.getType() == Packages.helma.doc.DocElement.APPLICATION) { + var appObj = obj; + break; + } + obj = obj.getParentElement(); + } + var protoObj = appObj.getChildElement("prototype_" + parts[0]); + if (protoObj == null) { + // prototype wasn't found, return the unlinked tag + return tmp + text; + } + if (parts.length == 1) { + // no function specified, return the linked prototype + return '' + format(tmp) + '' + text; + } + // try to find a function object: + var arr = protoObj.listChildren(); + for (var i = 0; i < arr.length; i++) { + if (arr[i].getName() == parts [1]) { + return '' + format(tmp) + '' + text; + } + } + // function not found: + return tmp + text; + } } - - /** - * function rendering a comment. - * @param param.length comment is shortened to the given length. - * @returns string - */ -function renderComment (docEl, param) { - var str = docEl.getComment (); - if (param.length) { - if (param.length < str.length) { - return str.substring (0, param.length) + " ..."; - } - } - return str; +* function rendering a comment. +* @param param.length comment is shortened to the given length. +* @returns string +*/ +function renderComment(docEl, param) { + var str = docEl.getComment(); + if (param.length) { + if (param.length < str.length) { + return str.substring(0, param.length) + " ..."; + } + } + return str; } diff --git a/Root/actions.js b/Root/actions.js new file mode 100644 index 00000000..aac54dc7 --- /dev/null +++ b/Root/actions.js @@ -0,0 +1,130 @@ +/** + * main action, show server-stats + * perform start, stop, restart and flush-action + * + */ +function main_action() { + + if (checkAddress() == false) return; + + if (req.data.app != null && req.data.app != "" && req.data.action != null && req.data.action != "") { + + var appObj = root.getApp(req.data.app); + // check access for application. md5-encoded uname/pwd can also be put in + // app.properties to limit access to a single app + if (checkAuth(appObj) == false) return; + + if (req.data.action == "start") { + this.startApplication(req.data.app); + res.redirect(appObj.href("main")); + + } else if (req.data.action == "stop") { + if (checkAuth() == false) return; + this.stopApplication(req.data.app); + res.redirect(root.href("main")); + + } else if (req.data.action == "restart") { + this.stopApplication(req.data.app); + this.startApplication(req.data.app); + res.redirect(appObj.href("main")); + + } else if (req.data.action == "flush") { + appObj.clearCache(); + res.redirect(appObj.href("main")); + + } + + } + + // output only to root + if (checkAuth() == false) return; + + res.data.title = "Helma Object Publisher - Serverinfo"; + res.data.body = this.renderSkinAsString("main"); + renderSkin("global"); +} + +/** +* return the helma object publisher logo, built into hop core +* to be independent of static html-paths +*/ +function image_action() { + if (checkAddress() == false) return; + + res.contentType = "image/gif"; + res.writeBinary(Packages.helma.util.Logo.hop); +} + +function makekey_action() { + + if (checkAddress() == false) + return; + + var obj = new Object(); + obj.msg = ""; + if (req.data.username != null && req.data.password != null) { + + // we have input from webform + if (req.data.username == "") + obj.msg += "username can't be left empty!
    "; + if (req.data.password == "") + obj.msg += "password can't be left empty!
    "; + if (obj.msg != "") { + obj.username = req.data.username; + res.reset(); + res.data.body = renderSkinAsString("pwdform", obj); + } else { + // render the md5-string: + obj.propsString = "adminAccess=" + Packages.helma.util.MD5Encoder.encode(req.data.username + "-" + req.data.password) + "
    \n"; + res.data.body = renderSkinAsString("pwdfeedback", obj); + } + + } else { + + // no input from webform, so print it + res.data.body = renderSkinAsString("pwdform", obj); + + } + + res.data.title = "username & password on " + root.hostname_macro(); + res.data.head = renderSkinAsString("head"); + renderSkin("basic"); +} + +/** +* prints server-stats for mrtg-tool. +* doesn't check username or password, so that we don't have +* to write them cleartext in a mrtg-configfile but checks the +* remote address. +*/ +function mrtg_action() { + + if (checkAddress() == false) + return; + + + if (req.data.action == "memory") { + + res.write(this.jvmTotalMemory_macro() + "\n"); + res.write(this.jvmFreeMemory_macro() + "\n"); + res.write("0\n0\n"); + + } else if (req.data.action == "netstat" && isLinux()) { + + var str = (new File("/proc/net/tcp")).readAll(); + var arr = str.split("\n"); + res.write(arr.length - 2 + "\n"); + res.write("0\n0\n0\n"); + + } else if (req.data.action == "loadavg" && isLinux()) { + + // load average of last 5 minutes: + var str = (new File("/proc/loadavg")).readAll(); + var arr = str.split(" "); + res.write(arr[1] * 100 + "\n"); + res.write("0\n0\n0\n"); + + } else { + res.write("0\n0\n0\n0\n"); + } +} \ No newline at end of file diff --git a/Root/functions.js b/Root/functions.js index b5c26f9e..dc6405f6 100644 --- a/Root/functions.js +++ b/Root/functions.js @@ -1,7 +1,6 @@ - /** - * renders the api of a given application. used from commandline. - */ +* renders the api of a given application. used from commandline. +*/ function renderApi(appName) { // supress security checks when accessing actions @@ -15,7 +14,7 @@ function renderApi(appName) { // now render the api var ct = docApp.renderApi(); writeln("rendered " + ct + " files"); - + // cleanup this.stopApplication(appName); } @@ -25,15 +24,15 @@ function renderApi(appName) { * lists all applications in appdir. * for active apps use this.getApplications() = helma.main.Server.getApplications() */ -function getAllApplications() { - var appsDir = this.getAppsHome(); - var dir = appsDir.list(); - var arr = new Array(); - for ( var i=0; i str.lastIndexOf('/') ) ? str.lastIndexOf('\\') : str.lastIndexOf('/'); - res.write ( arr[i].substring(pos+1) + ".jar" ); - if ( i < arr.length-1 ) res.write ( separator ); - } +function jvmJars_macro(par) { + var separator = (par && par.separator ) ? par.separator : ", "; + var str = java.lang.System.getProperty("java.class.path"); + var arr = str.split(".jar"); + for (var i in arr) { + var str = arr[i]; + var pos = ( str.lastIndexOf('\\') > str.lastIndexOf('/') ) ? str.lastIndexOf('\\') : str.lastIndexOf('/'); + res.write(arr[i].substring(pos + 1) + ".jar"); + if (i < arr.length - 1) res.write(separator); + } } /** * Macro that returns the name and version of the server's os */ -function os_macro() { - return java.lang.System.getProperty("os.name") + " " + java.lang.System.getProperty("os.arch") + " " + java.lang.System.getProperty("os.version"); +function os_macro() { + return java.lang.System.getProperty("os.name") + " " + java.lang.System.getProperty("os.arch") + " " + java.lang.System.getProperty("os.version"); } /** * Macro that returns anything from server.properties */ -function property_macro(par) { - if ( par && par.key ) { - return this.getProperty(key); - } else { - return ""; - } +function property_macro(par) { + if (par && par.key) { + return this.getProperty(key); + } else { + return ""; + } } /** * Macro formatting server.properties */ -function properties_macro(par) { - formatProperties(this.getProperties(),par); +function properties_macro(par) { + formatProperties(this.getProperties(), par); } /** * Macro that returns the timezone of this server */ -function timezone_macro(par) { - return java.util.TimeZone.getDefault().getDisplayName(false, java.util.TimeZone.LONG) + " (" + java.util.TimeZone.getDefault().getID() + ")"; +function timezone_macro(par) { + return java.util.TimeZone.getDefault().getDisplayName(false, java.util.TimeZone.LONG) + " (" + java.util.TimeZone.getDefault().getID() + ")"; } diff --git a/Root/main.hac b/Root/main.hac deleted file mode 100644 index f05009fa..00000000 --- a/Root/main.hac +++ /dev/null @@ -1,44 +0,0 @@ -/** - * main action, show server-stats - * perform start, stop, restart and flush-action - * - */ - - -if ( checkAddress()==false ) return; - -if ( req.data.app!=null && req.data.app!="" && req.data.action!=null && req.data.action!="" ) { - - var appObj = root.getApp(req.data.app); - // check access for application. md5-encoded uname/pwd can also be put in - // app.properties to limit access to a single app - if ( checkAuth(appObj)==false ) return; - - if ( req.data.action=="start" ) { - this.startApplication(req.data.app); - res.redirect ( appObj.href("main") ); - - } else if ( req.data.action=="stop" ) { - if ( checkAuth()==false ) return; - this.stopApplication(req.data.app); - res.redirect ( root.href("main") ); - - } else if ( req.data.action=="restart" ) { - this.stopApplication(req.data.app); - this.startApplication(req.data.app); - res.redirect ( appObj.href("main") ); - - } else if ( req.data.action=="flush" ) { - appObj.clearCache(); - res.redirect ( appObj.href("main") ); - - } - -} - -// output only to root -if ( checkAuth()==false ) return; - -res.data.title = "Helma Object Publisher - Serverinfo"; -res.data.body = this.renderSkinAsString("main"); -renderSkin("global"); diff --git a/Root/makekey.hac b/Root/makekey.hac deleted file mode 100644 index 6eb739fb..00000000 --- a/Root/makekey.hac +++ /dev/null @@ -1,33 +0,0 @@ - -if (checkAddress()==false) - return; - -var obj = new Object(); -obj.msg = ""; -if (req.data.username!=null && req.data.password!=null) { - - // we have input from webform - if ( req.data.username=="" ) - obj.msg += "username can't be left empty!
    "; - if ( req.data.password=="" ) - obj.msg += "password can't be left empty!
    "; - if ( obj.msg!="" ) { - obj.username = req.data.username; - res.reset(); - res.data.body = renderSkinAsString ("pwdform",obj); - } else { - // render the md5-string: - obj.propsString = "adminAccess=" + Packages.helma.util.MD5Encoder.encode(req.data.username + "-" + req.data.password) + "
    \n"; - res.data.body = renderSkinAsString ("pwdfeedback", obj); - } - -} else { - - // no input from webform, so print it - res.data.body = renderSkinAsString("pwdform",obj); - -} - -res.data.title = "username & password on " + root.hostname_macro(); -res.data.head = renderSkinAsString("head"); -renderSkin("basic"); diff --git a/Root/mrtg.hac b/Root/mrtg.hac deleted file mode 100644 index 44b672c8..00000000 --- a/Root/mrtg.hac +++ /dev/null @@ -1,37 +0,0 @@ - -/** - * prints server-stats for mrtg-tool. - * doesn't check username or password, so that we don't have - * to write them cleartext in a mrtg-configfile but checks the - * remote address. - */ - -if ( checkAddress()==false ) - return; - - -if (req.data.action=="memory") { - - res.write (this.jvmTotalMemory_macro () + "\n"); - res.write (this.jvmFreeMemory_macro () + "\n"); - res.write ("0\n0\n"); - -} else if (req.data.action=="netstat" && isLinux ()) { - - var str = (new File("/proc/net/tcp")).readAll(); - var arr = str.split("\n"); - res.write (arr.length-2 + "\n"); - res.write ("0\n0\n0\n"); - -} else if (req.data.action=="loadavg" && isLinux ()) { - - // load average of last 5 minutes: - var str = (new File("/proc/loadavg")).readAll(); - var arr = str.split(" "); - res.write (arr[1]*100 + "\n"); - res.write ("0\n0\n0\n"); - -} else { - res.write ( "0\n0\n0\n0\n"); -} - diff --git a/app.properties b/app.properties index d8232b4f..83e08c43 100644 --- a/app.properties +++ b/app.properties @@ -1,5 +1,5 @@ # Set baseURI for application generated URLs, if necessary. -#baseURI = /manage +# baseURI = /manage # A short description of what this application is about: _description = Helma's server management console. Start applications, introspection etc. @@ -8,3 +8,5 @@ _description = Helma's server management console. Start applications, introspect # might take more than one minute on a slow computer requestTimeout = 300 +# run scheduler function each minute +cron.scheduler.function = scheduler diff --git a/class.properties b/class.properties index 57808b22..6a51df81 100644 --- a/class.properties +++ b/class.properties @@ -1,4 +1,3 @@ - # # define the root class of this application # @@ -17,10 +16,10 @@ root.factory.method = getServer # and, yes, map the root class again. # -helma.main.Server = root -helma.framework.core.Application = application -helma.doc.DocApplication = docapplication -helma.doc.DocPrototype = docprototype -helma.doc.DocFunction = docfunction -helma.doc.DocTag = doctag +helma.main.Server = Root +helma.framework.core.Application = Application +helma.doc.DocApplication = DocApplication +helma.doc.DocPrototype = DocPrototype +helma.doc.DocFunction = DocFunction +helma.doc.DocTag = DocTag diff --git a/readme.txt b/readme.txt index 180a849d..8e271c95 100644 --- a/readme.txt +++ b/readme.txt @@ -3,7 +3,7 @@ To get the manage-application to work you must: - add it to the apps.properties file with the following line: manage - - use helma distribution 1.2-RC1 or later. + - use helma distribution 1.5 or later. - add the following properties to server.properties: From 66876ba2142a8c49b991b0cfed72786bbe57a18c Mon Sep 17 00:00:00 2001 From: zumbrunn Date: Mon, 24 Apr 2006 06:58:02 +0000 Subject: [PATCH 073/217] initial commit of modules with javascript library structure for Helma 1.5 --- core/Array.js | 112 +++++ core/Date.js | 185 ++++++++ core/Number.js | 68 +++ core/Object.js | 105 +++++ core/String.js | 638 +++++++++++++++++++++++++++ helma/Aspects.js | 84 ++++ helma/Chart.js | 167 +++++++ helma/Color.js | 356 +++++++++++++++ helma/Database.js | 138 ++++++ helma/File.js | 492 +++++++++++++++++++++ helma/Ftp.js | 364 ++++++++++++++++ helma/Html.js | 835 +++++++++++++++++++++++++++++++++++ helma/Http.js | 340 +++++++++++++++ helma/Image.js | 108 +++++ helma/Mail.js | 315 ++++++++++++++ helma/Search.js | 965 +++++++++++++++++++++++++++++++++++++++++ helma/Skin.js | 82 ++++ helma/Ssh.js | 331 ++++++++++++++ helma/Url.js | 78 ++++ helma/Zip.js | 411 ++++++++++++++++++ helma/ganymed-ssh2.jar | Bin 0 -> 187326 bytes helma/jxl.jar | Bin 0 -> 511346 bytes helma/lucene.jar | Bin 0 -> 323983 bytes 23 files changed, 6174 insertions(+) create mode 100644 core/Array.js create mode 100644 core/Date.js create mode 100644 core/Number.js create mode 100644 core/Object.js create mode 100644 core/String.js create mode 100644 helma/Aspects.js create mode 100644 helma/Chart.js create mode 100644 helma/Color.js create mode 100644 helma/Database.js create mode 100644 helma/File.js create mode 100644 helma/Ftp.js create mode 100644 helma/Html.js create mode 100644 helma/Http.js create mode 100644 helma/Image.js create mode 100644 helma/Mail.js create mode 100644 helma/Search.js create mode 100644 helma/Skin.js create mode 100644 helma/Ssh.js create mode 100644 helma/Url.js create mode 100644 helma/Zip.js create mode 100644 helma/ganymed-ssh2.jar create mode 100644 helma/jxl.jar create mode 100644 helma/lucene.jar diff --git a/core/Array.js b/core/Array.js new file mode 100644 index 00000000..cefc2e15 --- /dev/null +++ b/core/Array.js @@ -0,0 +1,112 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: Array.js,v $ + * $Author: czv $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +/** + * retrieve the union set of a bunch of arrays + * @param Array (Array2, ...) the arrays to unify + * @return Array the union set + */ +Array.union = function() { + var result = []; + var map = {}; + for (var i=0; i= 0) { + if (this[i] == val) + return i; + } + return -1; +}; + + +/** + * check if an array passed as argument contains + * a specific value (start from end of array) + * @param Object Array to use for checking + * @param String|Object the String or Object to check + */ +Array.prototype.contains = function(val) { + if (this.indexOf(val) > -1) + return true; + return false; +}; + + +// prevent any newly added properties from being enumerated +for (var i in Array) + Array.dontEnum(i); +for (var i in Array.prototype) + Array.prototype.dontEnum(i); diff --git a/core/Date.js b/core/Date.js new file mode 100644 index 00000000..937b34b8 --- /dev/null +++ b/core/Date.js @@ -0,0 +1,185 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2005 Helma Software. All Rights Reserved. + * + * $RCSfile: Date.js,v $ + * $Author: czv $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +Date.ONESECOND = 1000; +Date.ONEMINUTE = 60 * Date.ONESECOND; +Date.ONEHOUR = 60 * Date.ONEMINUTE; +Date.ONEDAY = 24 * Date.ONEHOUR; +Date.ONEWEEK = 7 * Date.ONEDAY; +Date.ONEMONTH = 30 * Date.ONEDAY; +Date.ONEYEAR = 12 * Date.ONEMONTH; +Date.ISOFORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; + + +/** + * format a Date to a string + * @param String Format pattern + * @param Object Java Locale Object (optional) + * @param Object Java TimeZone Object (optional) + * @return String formatted Date + */ +Date.prototype.format = function (format, locale, timezone) { + if (!format) + return this.toString(); + var sdf = locale ? new java.text.SimpleDateFormat(format, locale) + : new java.text.SimpleDateFormat(format); + if (timezone && timezone != sdf.getTimeZone()) + sdf.setTimeZone(timezone); + return sdf.format(this); +}; + + +/** + * set the date/time to UTC by subtracting + * the timezone offset + */ +Date.prototype.toUtc = function() { + this.setMinutes(this.getMinutes() + this.getTimezoneOffset()); +}; + + +/** + * set the date/time to local time by adding + * the timezone offset + */ +Date.prototype.toLocalTime = function() { + this.setMinutes(this.getMinutes() - this.getTimezoneOffset()); +}; + + +/** + * returns the difference between this and another + * date object in milliseconds + */ +Date.prototype.diff = function(dateObj) { + return this.getTime() - dateObj.getTime(); +}; + + +/** + * return the timespan to current date/time or a different Date object + * @param Object parameter object containing optional properties: + * .now = String to use if difference is < 1 minute + * .day|days = String to use for single|multiple day(s) + * .hour|hours = String to use for single|multiple hour(s) + * .minute|minutes = String to use for single|multiple minute(s) + * .date = Date object to use for calculating the timespan + * @return Object containing properties: + * .isFuture = (Boolean) + * .span = (String) timespan + * @see Date.prototype.getAge, Date.prototype.getExpiry + */ +Date.prototype.getTimespan = function(param) { + if (!param) + param = {date: new Date()}; + else if (!param.date) + param.date = new Date(); + + var result = {isFuture: this > param.date}; + var diff = Math.abs(param.date.diff(this)); + var age = {days: Math.floor((diff % Date.ONEMONTH) / Date.ONEDAY), + hours: Math.floor((diff % Date.ONEDAY) / Date.ONEHOUR), + minutes: Math.floor((diff % Date.ONEHOUR) / Date.ONEMINUTE)}; + + res.push(); + if (diff < Date.ONEMINUTE) + res.write(param.now || "now"); + else { + var arr = [{one: "day", many: "days"}, + {one: "hour", many: "hours"}, + {one: "minute", many: "minutes"}]; + for (var i in arr) { + var value = age[arr[i].many]; + if (value != 0) { + var prop = (value == 1 ? arr[i].one : arr[i].many); + res.write(value); + res.write(" "); + res.write(param[prop] || prop); + if (i < arr.length -1) + res.write(param.delimiter || ", "); + } + } + } + result.span = res.pop(); + return result; +}; + + +/** + * return the past timespan between this Date object and + * the current Date or a different Date object + * @see Date.prototype.getTimespan + */ +Date.prototype.getAge = function(param) { + var age = this.getTimespan(param); + if (!age.isFuture) + return age.span; + return null; +}; + + +/** + * return the future timespan between this Date object and + * the current Date or a different Date object + * @see Date.prototype.getTimespan + */ +Date.prototype.getExpiry = function(param) { + var age = this.getTimespan(param); + if (age.isFuture) + return age.span; + return null; +}; + + +/** + * checks if a date object equals another date object + * @param Object Date object to compare + * @param Int indicating how far the comparison should go + * @return Boolean + */ +Date.prototype.equals = function(date, extend) { + if (!extend) + var extend = Date.ONEDAY; + switch (extend) { + case Date.ONESECOND: + if (this.getSeconds() != date.getSeconds()) + return false; + case Date.ONEMINUTE: + if (this.getMinutes() != date.getMinutes()) + return false; + case Date.ONEHOUR: + if (this.getHours() != date.getHours()) + return false; + case Date.ONEDAY: + if (this.getDate() != date.getDate()) + return false; + case Date.ONEMONTH: + if (this.getMonth() != date.getMonth()) + return false; + case Date.ONEYEAR: + if (this.getFullYear() != date.getFullYear()) + return false; + } + return true; +}; + + +// prevent any newly added properties from being enumerated +for (var i in Date) + Date.dontEnum(i); +for (var i in Date.prototype) + Date.prototype.dontEnum(i); diff --git a/core/Number.js b/core/Number.js new file mode 100644 index 00000000..5983eb35 --- /dev/null +++ b/core/Number.js @@ -0,0 +1,68 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: Number.js,v $ + * $Author: hannes $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +/** + * factory to create functions for sorting objects in an array + * @param String name of the field each object is compared with + * @param Number order (ascending or descending) + * @return Function ready for use in Array.prototype.sort + */ +Number.Sorter = function(field, order) { + if (!order) + order = 1; + return function(a, b) { + return (a[field] - b[field]) * order; + }; +}; + +Number.Sorter.ASC = 1; +Number.Sorter.DESC = -1; + + +/** + * format a Number to a String + * @param String Format pattern + * @return String Number formatted to a String + * FIXME: this might need some localisation + */ +Number.prototype.format = function(fmt) { + var df = fmt ? new java.text.DecimalFormat(fmt) + : new java.text.DecimalFormat("#,##0.00"); + return df.format(0+this); +}; + + +/** + * return the percentage of a Number + * according to a given total Number + * @param Int Total + * @param String Format Pattern + * @return Int Percentage + */ +Number.prototype.toPercent = function(total, fmt) { + var p = this / (total / 100); + if (!fmt) + return Math.round(p * 100) / 100; + return p.format(fmt); +}; + + +// prevent any newly added properties from being enumerated +for (var i in Number) + Number.dontEnum(i); +for (var i in Number.prototype) + Number.prototype.dontEnum(i); diff --git a/core/Object.js b/core/Object.js new file mode 100644 index 00000000..e1ebb56a --- /dev/null +++ b/core/Object.js @@ -0,0 +1,105 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: Object.js,v $ + * $Author: czv $ + * $Revision: 1.6 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +/** + * copy the properties of an object into + * a new object + * @param Object the source object + * @param Object the (optional) target object + * @return Object the resulting object + */ +Object.prototype.clone = function(clone, recursive) { + if (!clone) + clone = new this.constructor(); + var value; + for (var propName in this) { + value = this[propName]; + if (recursive && (value.constructor == HopObject || value.constructor == Object)) { + clone[propName] = value.clone(new value.constructor(), recursive); + } else { + clone[propName] = value; + } + } + return clone; +}; + + +/** + * reduce an extended object (ie. a HopObject) + * to a generic javascript object + * @param HopObject the HopObject to be reduced + * @return Object the resulting generic object + */ +Object.prototype.reduce = function(recursive) { + var result = {}; + for (var i in this) { + if (this[i] instanceof HopObject == false) + result[i] = this[i]; + else if (recursive) + result[i] = this.reduce(true); + } + return result; +}; + + +/** + * print the contents of an object for debugging + * @param Object the object to dump + * @param Boolean recursive flag (if true, dump child objects, too) + */ +Object.prototype.dump = function(recursive) { + var beginList = "
      "; + var endList = "
    "; + var beginItem = "
  • "; + var endItem = "
  • "; + var beginKey = ""; + var endKey = ": "; + res.write(beginList); + for (var p in this) { + res.write(beginItem); + res.write(beginKey); + res.write(p); + res.write(endKey); + if (recursive && typeof this[p] == "object") { + var recurse = true; + var types = [Function, Date, String, Number]; + for (var i in types) { + if (this[p] instanceof types[i]) { + recurse = false + break; + } + } + if (recurse == true) + this[p].dump(true); + else { + res.write(this[p].toSource()); + } + } else if (this[p]) { + res.write(encode(this[p].toSource())); + } + res.write(endItem); + } + res.write(endList); + return; +}; + + +// prevent any newly added properties from being enumerated +for (var i in Object) + Object.dontEnum(i); +for (var i in Object.prototype) + Object.prototype.dontEnum(i); diff --git a/core/String.js b/core/String.js new file mode 100644 index 00000000..60f61126 --- /dev/null +++ b/core/String.js @@ -0,0 +1,638 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.String.js,v $ + * $Author: czv $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +String.ANUMPATTERN = /[^a-zA-Z0-9]/; +String.APATTERN = /[^a-zA-Z]/; +String.NUMPATTERN = /[^0-9]/; +String.FILEPATTERN = /[^a-zA-Z0-9-_\. ]/; +String.HEXPATTERN = /[^a-fA-F0-9]/; +String.EMAILPATTERN = /^.+@.+\.[a-zA-Z]+$/; +String.URLPATTERN = /^([^:]*):\/\/+(?:([^\/]*):)?(?:([^\/]*)@)?([\w\-_.]*[^.])(\/[^?]*)?(?:\?(.*))?$/; +String.LEFT = -1 +String.BALANCE = 0 +String.RIGHT = 1 +String.ISOFORMAT = "yyyy-MM-dd'T'HH:mm:ssZ"; + + +/** + * factory to create functions for sorting objects in an array + * @param String name of the field each object is compared with + * @param Number order (ascending or descending) + * @return Function ready for use in Array.prototype.sort + */ +String.Sorter = function(field, order) { + if (!order) + order = 1; + var key = field + ":" + order; + if (!String.Sorter.cache[key]) { + String.Sorter.cache[key] = function(a, b) { + var str1 = String(a[field] || "").toLowerCase(); + var str2 = String(b[field] || "").toLowerCase(); + if (str1 > str2) + return order * 1; + if (str1 < str2) + return order * -1; + return 0; + }; + } + return String.Sorter.cache[key]; +}; + +String.Sorter.ASC = 1; +String.Sorter.DESC = -1; +String.Sorter.cache = {}; + + +/** + * create a string from a bunch of substrings + * @param String one or more strings as arguments + * @return String the resulting string + */ +String.compose = function() { + res.push(); + for (var i=0; i helma.Url + * @return Boolean + * @see helma.Url.PATTERN + */ +String.prototype.isUrl = function() { + if (String.URLPATTERN.test(this)) + return true; + try { + return new java.net.URL(this); + } catch (err) { + return false; + } + return true; +}; + + +/** + * function checks if the string passed contains any characters + * that are forbidden in image- or filenames + * @return Boolean + */ +String.prototype.isFileName = function() { + return !String.FILEPATTERN.test(this); +}; + + +/** + * function cleans the string passed as argument from any characters + * that are forbidden or shouldn't be used in filenames + * @return Boolean + */ +String.prototype.toFileName = function() { + return this.replace(new RegExp(String.FILEPATTERN.source, "g"), ""); +}; + + +/** + * function checks a string for a valid color value in hexadecimal format. + * it may also contain # as first character + * @returns Boolean false, if string length (without #) > 6 or < 6 or + * contains any character which is not a valid hex value + */ +String.prototype.isHexColor = function() { + var str = this; + if (this.indexOf("#") == 0) + str = this.substring(1); + if (str.length != 6) + return false; + return !String.HEXPATTERN.test(str); +}; + + +/** + * converts a string into a hexadecimal color + * representation (e.g. "ffcc33"). also knows how to + * convert a color string like "rgb (255, 204, 51)". + * @return String the resulting hex color (w/o "#") + */ +String.prototype.toHexColor = function() { + if (this.startsWith("rgb")) { + res.push(); + var col = this.replace(/[^0-9,]/g,""); + var parts = col.split(","); + for (var i in parts) { + var num = parseInt(parts[i], 10); + var hex = num.toString(16); + res.write(hex.pad("0", 2, String.LEFT)); + } + return res.pop(); + } + var col = this.replace(new RegExp(String.HEXPATTERN.source), ""); + return col.toLowerCase().pad("0", 6, String.LEFT); +}; + + +/** + * function returns true if the string contains + * only a-z and 0-9 (case insensitive!) + * @return Boolean true in case string is alpha, false otherwise + */ +String.prototype.isAlphanumeric = function() { + if (!this.length) + return false; + return !String.ANUMPATTERN.test(this); +}; + + +/** + * function cleans a string by throwing away all + * non-alphanumeric characters + * @return cleaned string + */ +String.prototype.toAlphanumeric = function() { + return this.replace(new RegExp(String.ANUMPATTERN.source, "g"), ""); +}; + + +/** + * function returns true if the string contains + * only characters a-z + * @return Boolean true in case string is alpha, false otherwise + */ +String.prototype.isAlpha = function() { + if (!this.length) + return false; + return !String.APATTERN.test(this); +}; + + +/** + * function returns true if the string contains + * only 0-9 + * @return Boolean true in case string is numeric, false otherwise + */ +String.prototype.isNumeric = function() { + if (!this.length) + return false; + return !String.NUMPATTERN.test(this); +}; + + +/** + * transforms the first n characters of a string to uppercase + * @param Number amount of characters to transform + * @return String the resulting string + */ +String.prototype.capitalize = function(limit) { + if (limit == null) + limit = 1; + var head = this.substring(0, limit); + var tail = this.substring(limit, this.length); + return head.toUpperCase() + tail.toLowerCase(); +}; + + +/** + * transforms the first n characters of each + * word in a string to uppercase + * @return String the resulting string + */ +String.prototype.titleize = function() { + var parts = this.split(" "); + res.push(); + for (var i in parts) { + res.write(parts[i].capitalize()); + if (i < parts.length-1) + res.write(" "); + } + return res.pop(); +}; + + +/** + * translates all characters of a string into HTML entities + * @return String translated result + */ +String.prototype.entitize = function() { + res.push(); + for (var i=0; i/g, replacement); + return str; +}; + + +/** + * function calculates the md5 hash of a string + * @return String md5 hash of the string + */ +String.prototype.md5 = function() { + return Packages.helma.util.MD5Encoder.encode(this); +}; + + +/** + * function repeats a string passed as argument + * @param Int amount of repetitions + * @return String resulting string + */ +String.prototype.repeat = function(multiplier) { + res.push(); + for (var i=0; i -1) + return true; + return false; +}; + + +/** + * function compares a string with the one passed as argument + * using diff + * @param String String to compare against String object value + * @param String Optional regular expression string to use for + * splitting. If not defined, newlines will be used. + * @return Object Array containing one JS object for each line + * with the following properties: + * .num Line number + * .value String line if unchanged + * .deleted Obj Array containing deleted lines + * .inserted Obj Array containing added lines + */ +String.prototype.diff = function(mod, separator) { + // if no separator use line separator + var regexp = (typeof(separator) == "undefined") ? + new RegExp("\r\n|\r|\n") : + new RegExp(separator); + // split both strings into arrays + var orig = this.split(regexp); + var mod = mod.split(regexp); + // create the Diff object + var diff = new Packages.helma.util.Diff(orig, mod); + // get the diff. + var d = diff.diff(); + if (!d) + return null; + + var max = Math.max(orig.length, mod.length); + var result = new Array(); + for (var i=0;i 400) + result.bold = true; + result.italic = font.isItalic(); + result.wrap = format.getWrap(); + var type = c.getType(); + var align = format.getAlignment().getDescription(); + if (align == "right" || type == "Number" || type == "Date") + result.align = "right"; + else if (align == "centre") + result.align = "center"; + return result; + } + + if (sheetName) + var sheet = workbook.getSheet(sheetName); + else + var sheet = workbook.getSheet(0); + if (!sheet) + return; + + prefix = prefix ? prefix + "_" : "chart_"; + + this.render = function() { + res.write('
    type.propertiestype.properties in <% param.source %>
    <% param.content %>
    \n'); + + var rowBuf = []; + var rows = sheet.getRows(); + var max = 0; + for (var i=0; i max) + max = row.length; + rowBuf.push(row); + } + + for (var i in rowBuf) { + res.write('\n'); + for (var n=0; n"); + if (style.bold) + res.write(""); + if (style.italic) + res.write(""); + } + else + res.write(">"); + res.write(str); + if (style) { + if (style.italic) + res.write(""); + if (style.bold) + res.write(""); + } + res.write('\n'); + } + res.write('\n'); + } + + res.write('
    \n'); + workbook.close(); + }; + + this.renderAsString = function() { + res.push(); + this.render(); + return res.pop(); + }; + + this.toString = function() { + return "[helma.Chart " + file + "]"; + }; + + for (var i in this) + this.dontEnum(i); + + return this; +} + + +helma.Chart.toString = function() { + return "[helma.Chart]"; +}; + + +helma.Chart.example = function(file) { + // var file = "/path/to/file.xls"; + var chart = new helma.Chart(file); + chart.render(); + return; +}; + + +helma.lib = "Chart"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Color.js b/helma/Color.js new file mode 100644 index 00000000..a7908054 --- /dev/null +++ b/helma/Color.js @@ -0,0 +1,356 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Color.js,v $ + * $Author: hannes $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +/** + * constructor for a color object + * @param IntegerOrRgbObject the red fraction or an rgb() object + * @param Integer the green fraction + * @param Integer the blue fraction + * @return the resulting color object + */ +helma.Color = function(R, G, B) { + var value = null, name, hex, rgb; + + /** + * return the decimal value of a color object + * @return Integer the decimal value + */ + this.valueOf = function() { + if (arguments.length > 0) { + if (!rgb) { + var compose = function(n, bits) { + var div = Math.pow(2, bits); + remainder = n % div; + return Math.floor(n/div); + } + var remainder = value; + rgb = { + red: compose(remainder, 16), + green: compose(remainder, 8), + blue: compose(remainder, 0) + } + } + return rgb[arguments[0]]; + } + return value; + }; + + /** + * return the hexidecimal value of a color object + * @return String the hexidecimal value + */ + this.toString = function() { + if (!value) + return null; + if (!hex) + hex = value.toString(16).pad("0", 6, String.LEFT); + return hex; + }; + + /** + * return the trivial name of this color + * @return String the trivial name + */ + this.getName = function() { + return helma.Color.COLORVALUES[value]; + }; + + // the main code + if (arguments.length % 2 == 0) + throw("Insufficient arguments for creating Color"); + if (arguments.length == 1) { + if (R.constructor == Number) { + value = R; + } else if (R.constructor == String) { + R = R.toLowerCase(); + if (helma.Color.COLORNAMES[R]) { + this.name = R; + R = helma.Color.COLORNAMES[R]; + } else if (helma.Color.COLORVALUES[R]) { + this.name = helma.Color.COLORVALUES[R]; + } else if (R.startsWith("#")) + R = R.substring(1); + value = parseInt(R, 16); + } + } else + value = R * Math.pow(2, 16) + G * Math.pow(2, 8) + B; + + if (value == null || isNaN(value)) + throw("Cannot create Color from " + R); + + for (var i in this) + this.dontEnum(i); + + return this; +}; + + +/** + * create a helma.Color from trivial name + * @param String the color's name (like "darkseagreen") + * @return helma.Color the resulting color object + */ +helma.Color.fromName = function(name) { + var value = helma.Color.COLORNAMES[name.toLowerCase()]; + if (!value) + value = 0; + return new helma.Color(value); +}; + + +/** + * transform a hsl representation of a color + * to the equivalent decimal value + * @param Integer the hue fraction + * @param Integer the saturation fraction + * @param Integer the lightness fraction + * @return Object the resulting color object + * + * note: this function is adapted from the + * HSLtoRGB conversion method as described at + * http://www1.tip.nl/~t876506/ColorDesign.html#hr + * (thanks!) + */ +helma.Color.fromHsl = function(H,S,L) { + function H1(H,S,L) { + var R = 1; var G = 6*H; var B = 0; + G = G*S + 1 - S; B = B*S + 1 - S; + R = R*L; G = G*L; B = B*L; + return [R,G,B]; + } + + function H2(H,S,L) { + var R = 1-6*(H - 1/6); var G = 1; var B = 0; + R = R*S + 1 - S; B = B*S + 1 - S; + R = R*L; G = G*L; B = B*L; + return [R,G,B]; + } + + function H3(H,S,L) { + var R = 0; var G = 1; var B = 6*(H - 1/3); + R = R*S + 1 - S; B = B*S + 1 - S; + R = R*L; G = G*L; B = B*L + return [R,G,B]; + } + + function H4(H,S,L) { + var R = 0; var G = 1-6*(H - 1/2); var B = 1; + R = R*S + 1 - S; G = G*S + 1 - S; + R = R*L; G = G*L; B = B*L; + return [R,G,B]; + } + + function H5(H,S,L) { + var R = 6*(H - 2/3); var G = 0; var B = 1; + R = R*S + 1 - S; G = G*S + 1 - S; + R = R*L; G = G*L; B = B*L; + return [R,G,B]; + } + + function H6(H,S,L) { + var R = 1; var G = 0; var B = 1-6*(H - 5/6); + G = G*S + 1 - S; B = B*S + 1 - S; + R = R*L; G = G*L; B = B*L; + return [R,G,B]; + } + + // H [0-1] is divided into 6 equal sectors. + // From within each sector the proper conversion function is called. + var rgb; + if (H < 1/6) rgb = H1(H,S,L); + else if (H < 1/3) rgb = H2(H,S,L); + else if (H < 1/2) rgb = H3(H,S,L); + else if (H < 2/3) rgb = H4(H,S,L); + else if (H < 5/6) rgb = H5(H,S,L); + else rgb = H6(H,S,L); + + return new Color( + Math.round(rgb[0]*255), + Math.round(rgb[1]*255), + Math.round(rgb[2]*255) + ); +}; + + +/** + * object containig the hex values of named colors + */ +helma.Color.COLORNAMES = { + black: 0x000000, + maroon: 0x800000, + green: 0x008000, + olive: 0x808000, + navy: 0x000080, + purple: 0x800080, + teal: 0x008080, + silver: 0xc0c0c0, + gray: 0x808080, + red: 0xff0000, + lime: 0x00ff00, + yellow: 0xffff00, + blue: 0x0000ff, + fuchsia: 0xff00ff, + aqua: 0x00ffff, + white: 0xffffff, + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgreen: 0x006400, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + greenyellow: 0xadff2f, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgreen: 0x90ee90, + lightgrey: 0xd3d3d3, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + oldlace: 0xfdf5e6, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + whitesmoke: 0xf5f5f5, + yellowgreen: 0x9acd32 +}; + + +/** + * object containig the color names for specific hex values + */ +helma.Color.COLORVALUES = {}; + +for (var i in helma.Color.COLORNAMES) + helma.Color.COLORVALUES[helma.Color.COLORNAMES[i]] = i; + + +helma.Color.toString = function() { + return "[helma.Color]"; +}; + + +helma.lib = "Color"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Database.js b/helma/Database.js new file mode 100644 index 00000000..30a39b8f --- /dev/null +++ b/helma/Database.js @@ -0,0 +1,138 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Database.js,v $ + * $Author: czv $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.Database = function(driver, url, user, password, name) { + if (!driver || !url || !user) + throw("Insufficient arguments to create helma.db.Connection"); + if (!name) + name = "db" + new Date().getTime(); + if (typeof password != "string") + password = ""; + + MYSQL = "mysql"; + ORACLE = "oracle"; + JDBC = "jdbc:"; + DRIVER_MYSQL = "org.gjt.mm.mysql.Driver"; + DRIVER_ORACLE = "oracle.jdbc.driver.OracleDriver"; + + if (driver == MYSQL) { + driver = DRIVER_MYSQL; + if (url.indexOf(JDBC) != 0) + url = "jdbc:mysql://" + url + "/" + name; + } else if (driver == ORACLE) { + driver = DRIVER_ORACLE; + if (url.indexOf(JDBC) != 0) + url = "jdbc:oracle:thin:@" + url + ":" + name; + } + + var DbSource = Packages.helma.objectmodel.db.DbSource; + var DatabaseObject = Packages.helma.scripting.rhino.extensions.DatabaseObject; + + var DbSource = Packages.helma.objectmodel.db.DbSource; + var props = new Packages.helma.util.ResourceProperties(); + props.put(name + ".url", url); + props.put(name + ".driver", driver); + if (user) { + props.put(name + ".user", user); + props.put(name + ".password", password); + } + var source = new DbSource(name, props); + var connection = source.getConnection(); + + this.getConnection = function() { + return connection; + }; + + this.getObject = function() { + return new DatabaseObject(source); + }; + + this.getProductName = function() { + return connection.getMetaData().getDatabaseProductName().toLowerCase(); + }; + + this.isOracle = function() { + return source.isOracle(); + }; + + this.isMySql = function() { + return this.getProductName() == MYSQL; + }; + + this.query = function(query) { + var statement = connection.createStatement(); + var resultSet = statement.executeQuery(query); + var metaData = resultSet.getMetaData(); + var max = metaData.getColumnCount(); + var result = []; + while (resultSet.next()) { + var row = {} + for (var i=1; i<=max; i+=1) + row[metaData.getColumnName(i)] = resultSet.getString(i); + result.push(row); + } + return result; + }; + + this.getName = function() { + return source.getName(); + }; + + this.getDriverName = function() { + return source.getDriverName(); + }; + + this.toString = function() { + return "[helma.Database " + this.getName() + "]"; + }; + + for (var i in this) + this.dontEnum(i); + + return this; +}; + + +helma.Database.toString = function() { + return "[helma.Database]"; +}; + + +helma.Database.example = function() { + var type = "mysql"; + var host = "localhost"; + var user = "root"; + var pw = ""; + var name = "mysql"; + var db = new helma.Database(type, host, user, pw, name); + var result = db.query("select count(*) from db"); + res.write(result.toSource()); + return; +}; + + +helma.lib = "Database"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/File.js b/helma/File.js new file mode 100644 index 00000000..c940d223 --- /dev/null +++ b/helma/File.js @@ -0,0 +1,492 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.File.js,v $ + * $Author: czv $ + * $Revision: 1.9 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.File = function(path) { + var BufferedReader = java.io.BufferedReader; + var File = java.io.File; + var Reader = java.io.Reader; + var Writer = java.io.Writer; + var FileReader = java.io.FileReader; + var FileWriter = java.io.FileWriter; + var PrintWriter = java.io.PrintWriter; + var EOFException = java.io.EOFException; + var IOException = java.io.IOException; + var IllegalStateException = java.lang.IllegalStateException; + var IllegalArgumentException = java.lang.IllegalArgumentException + + var self = this; + + var file; + try { + if (arguments.length > 1) + file = new File(path, arguments[1]); + else + file = new File(path); + } catch (e) { + throw(e); + } + + var readerWriter; + var atEOF = false; + var lastLine = null; + + var setError = function(e) { + this.lastError = e; + }; + + this.lastError = null; + + this.toString = function() { + return file.toString(); + }; + + this.getName = function() { + var name = file.getName(); + return (name == null ? "" : name); + }; + + this.isOpened = function() { + return (readerWriter != null); + }; + + this.open = function() { + if (self.isOpened()) { + setError(new IllegalStateException("File already open")); + return false; + } + // We assume that the BufferedReader and PrintWriter creation + // cannot fail except if the FileReader/FileWriter fails. + // Otherwise we have an open file until the reader/writer + // get garbage collected. + try{ + if (file.exists()) { + readerWriter = new BufferedReader(new FileReader(file)); + } else { + readerWriter = new PrintWriter(new FileWriter(file)); + } + return true; + } catch (e) { + setError(e); + return false; + } + return; + }; + + this.exists = function() { + return file.exists(); + }; + + this.getParent = function() { + if (!file.getParent()) + return null; + return new helma.File(file.getParent()); + }; + + this.readln = function() { + if (!self.isOpened()) { + setError(new IllegalStateException("File not opened")); + return null; + } + if (!(readerWriter instanceof BufferedReader)) { + setError(new IllegalStateException("File not opened for reading")); + return null; + } + if (atEOF) { + setError(new EOFException()); + return null; + } + if (lastLine != null) { + var line = lastLine; + lastLine = null; + return line; + } + var reader = readerWriter; + // Here lastLine is null, return a new line + try { + var line = readerWriter.readLine(); + if (line == null) { + atEOF = true; + setError(new EOFException()); + } + return line; + } catch (e) { + setError(e); + return null; + } + return; + }; + + this.write = function(what) { + if (!self.isOpened()) { + setError(new IllegalStateException("File not opened")); + return false; + } + if (!(readerWriter instanceof PrintWriter)) { + setError(new IllegalStateException("File not opened for writing")); + return false; + } + if (what != null) { + readerWriter.print(what.toString()); + } + return true; + }; + + this.writeln = function(what) { + if (self.write(what)) { + readerWriter.println(); + return true; + } + return false; + }; + + this.isAbsolute = function() { + return file.isAbsolute(); + }; + + this.remove = function() { + if (self.isOpened()) { + setError(new IllegalStateException("An openened file cannot be removed")); + return false; + } + return file["delete"](); + }; + + /* + * will list all files within a directory + * you may pass a RegExp Pattern to return just + * files matching this pattern + * @example var xmlFiles = dir.list(/.*\.xml/); + * @param RegExp pattern to test each file name against + * @return Array the list of file names + */ + this.list = function(pattern) { + if (self.isOpened()) + return null; + if (!file.isDirectory()) + return null; + if (pattern) { + var fileList = file.list(); + var result = []; + for (var i in fileList) { + if (pattern.test(fileList[i])) + result.push(fileList[i]); + } + return result; + } + return file.list(); + }; + + this.flush = function() { + if (!self.isOpened()) { + setError(new IllegalStateException("File not opened")); + return false; + } + if (readerWriter instanceof Writer) { + try { + readerWriter.flush(); + } catch (e) { + setError(e); + return false; + } + } else { + setError(new IllegalStateException("File not opened for write")); + return false; // not supported by reader + } + return true; + }; + + this.close = function() { + if (!self.isOpened()) + return false; + try { + readerWriter.close(); + readerWriter = null; + return true; + } catch (e) { + setError(e); + readerWriter = null; + return false; + } + }; + + this.getPath = function() { + var path = file.getPath(); + return (path == null ? "" : path); + }; + + this.error = function() { + if (this.lastError == null) { + return ""; + } else { + var exceptionName = this.lastError.getClass().getName(); + var l = exceptionName.lastIndexOf("."); + if (l > 0) + exceptionName = exceptionName.substring(l + 1); + return exceptionName + ": " + this.lastError.getMessage(); + } + }; + + this.clearError = function() { + this.lastError = null; + return; + }; + + this.canRead = function() { + return file.canRead(); + }; + + this.canWrite = function() { + return file.canWrite(); + }; + + this.getAbsolutePath = function() { + var absolutPath = file.getAbsolutePath(); + return (absolutPath == null ? "" : absolutPath); + }; + + this.getLength = function() { + return file.length(); + }; + + this.isDirectory = function() { + return file.isDirectory(); + }; + + this.isFile = function() { + return file.isFile(); + }; + + this.lastModified = function() { + return file.lastModified(); + }; + + this.makeDirectory = function() { + if (self.isOpened()) + return false; + // don't do anything if file exists or use multi directory version + return (file.exists() || file.mkdirs()); + }; + + this.renameTo = function(toFile) { + if (toFile == null) { + setError(new IllegalArgumentException("Uninitialized target File object")); + return false; + } + if (self.isOpened()) { + setError(new IllegalStateException("An openened file cannot be renamed")); + return false; + } + if (toFile.isOpened()) { + setError(new IllegalStateException("You cannot rename to an openened file")); + return false; + } + return file.renameTo(new java.io.File(toFile.getAbsolutePath())); + }; + + this.eof = function() { + if (!self.isOpened()) { + setError(new IllegalStateException("File not opened")); + return true; + } + if (!(readerWriter instanceof BufferedReader)) { + setError(new IllegalStateException("File not opened for read")); + return true; + } + if (atEOF) + return true; + if (lastLine != null) + return false; + try { + lastLine = readerWriter.readLine(); + if (lastLine == null) + atEOF = true; + return atEOF; + } catch (e) { + setError(e); + return true; + } + }; + + this.readAll = function() { + // Open the file for readAll + if (self.isOpened()) { + setError(new IllegalStateException("File already open")); + return null; + } + try { + if (file.exists()) { + readerWriter = new BufferedReader(new FileReader(file)); + } else { + setError(new IllegalStateException("File does not exist")); + return null; + } + if (!file.isFile()) { + setError(new IllegalStateException("File is not a regular file")); + return null; + } + + // read content line by line to setup proper eol + var buffer = new java.lang.StringBuffer(file.length() * 1.10); + while (true) { + var line = readerWriter.readLine(); + if (line == null) + break; + if (buffer.length() > 0) + buffer.append("\n"); // EcmaScript EOL + buffer.append(line); + } + + // Close the file + readerWriter.close(); + readerWriter = null; + return buffer.toString(); + } catch (e) { + readerWriter = null; + setError(e); + return null; + } + }; + + // DANGER! DANGER! HIGH VOLTAGE! + // this method removes a directory recursively + // without any warning or precautious measures + this.removeDirectory = function() { + if (!file.isDirectory()) + return false; + var arr = file.list(); + for (var i=0; i -1) + body.write(buf, 0, read); + stream.close(); + return body.toByteArray(); + }; + + for (var i in this) + this.dontEnum(i); + + return this; +} + + +helma.File.toString = function() { + return "[helma.File]"; +}; + + +helma.File.separator = java.io.File.separator; + + +helma.lib = "File"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Ftp.js b/helma/Ftp.js new file mode 100644 index 00000000..c13599e9 --- /dev/null +++ b/helma/Ftp.js @@ -0,0 +1,364 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Ftp.js,v $ + * $Author: czv $ + * $Revision: 1.7 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.Ftp = function(server) { + var OK = 0; + var SOCKET = 1; + var TIMEOUT = 2; + var LOGIN = 10; + var LOGOUT = 11; + var BINARY = 20; + var ASCII = 21; + var ACTIVE = 22; + var PASSIVE = 23; + var CD = 30; + var LCD = 31; + var PWD = 32; + var DIR = 33; + var MKDIR = 34; + var RMDIR = 35; + var GET = 40; + var PUT = 41; + var DELETE = 42; + + var FTP = Packages.com.oroinc.net.ftp.FTP; + var FtpClient = Packages.com.oroinc.net.ftp.FTPClient; + var BufferedInputStream = java.io.BufferedInputStream; + var BufferedOutputStream = java.io.BufferedOutputStream; + var FileInputStream = java.io.FileInputStream; + var FileOutputStream = java.io.FileOutputStream; + var ByteArrayInputStream = java.io.ByteArrayInputStream; + var ByteArrayOutputStream = java.io.ByteArrayOutputStream; + + var self = this; + var className = "helma.Ftp"; + + var ftpclient = new FtpClient(); + var localDir; + + var error = function(methName, errMsg) { + var tx = java.lang.Thread.currentThread(); + tx.dumpStack(); + app.log("Error in " + className + ":" + methName + ": " + errMsg); + return; + }; + + var debug = function(methName, msg) { + var msg = msg ? " " + msg : ""; + app.debug(className + ":" + methName + msg); + return; + }; + + var setStatus = function(status) { + if (self.status === OK) { + self.status = status; + } + return; + }; + + var getStatus = function() { + return self.status; + }; + + this.server = server; + this.status = OK; + + this.toString = function() { + return "[helma.Ftp " + server + "]"; + }; + + this.setReadTimeout = function(timeout) { + try { + ftpclient.setDefaultTimeout(timeout); + debug("setReadTimeout", timeout); + return true; + } catch(x) { + error("setReadTimeout", x); + setStatus(SOCKET); + } + return false; + }; + + this.setTimeout = function(timeout) { + try { + ftpclient.setDataTimeout(timeout); + debug("setTimeout", timeout); + return true; + } catch(x) { + error("setTimeout", x); + setStatus(TIMEOUT); + } + return false; + }; + + this.login = function(username, password) { + try { + ftpclient.connect(this.server); + ftpclient.login(username, password); + debug("login", username + "@" + server); + return true; + } catch(x) { + error("login", x); + setStatus(LOGIN); + } + return false; + }; + + this.binary = function() { + try { + ftpclient.setFileType(FTP.BINARY_FILE_TYPE); + debug("binary"); + return true; + } catch(x) { + error("binary", x); + setStatus(BINARY); + } + return false; + }; + + this.ascii = function() { + try { + ftpclient.setFileType(FTP.ASCII_FILE_TYPE); + debug("ascii"); + return true; + } catch(x) { + error("ascii", x); + setStatus(ASCII); + } + return false; + }; + + this.active = function() { + try { + ftpclient.enterLocalActiveMode(); + debug("active"); + return true; + } catch(x) { + error("active", x); + setStatus(ACTIVE); + } + return false; + }; + + this.passive = function() { + try { + ftpclient.enterLocalPassiveMode(); + debug("passive"); + return true; + } catch(x) { + error("passive", x); + setStatus(PASSIVE); + } + return false; + }; + + this.pwd = function() { + try { + debug("pwd"); + return ftpclient.printWorkingDirectory(); + } catch(x) { + error("pwd", x); + setStatus(PWD); + } + return; + }; + + this.dir = function(path) { + try { + debug("dir", path); + return ftpclient.listNames(path ? path : "."); + } catch(x) { + error("dir", x); + setStatus(DIR); + } + return; + }; + + this.mkdir = function(dir) { + try { + ftpclient.makeDirectory(dir); + debug("mkdir", dir); + return true; + } catch(x) { + error("mkdir", x); + setStatus(MKDIR); + } + return false; + }; + + this.rmdir = function(dir) { + try { + ftpclient.removeDirectory(dir); + debug("rmdir", dir); + return true; + } catch(x) { + error("rmdir", x); + setStatus(RMDIR); + } + return false; + }; + + this.cd = function(path) { + try { + ftpclient.changeWorkingDirectory(path); + debug("cd", path); + return true; + } catch(x) { + error("cd", x); + setStatus(CD); + } + return false; + }; + + this.lcd = function(dir) { + try { + localDir = new File(dir); + if (!localDir.exists()) { + localDir.mkdir(); + debug("lcd", dir); + } + return true; + } catch(x) { + error("lcd", x); + setStatus(LCD); + } + return false; + }; + + this.putFile = function(localFile, remoteFile) { + try { + if (localFile instanceof File) { + var f = localFile; + } else if (typeof localFile == "string") { + if (localDir == null) + var f = new File(localFile); + else + var f = new File(localDir, localFile); + } + var stream = new BufferedInputStream( + new FileInputStream(f.getPath()) + ); + if (!remoteFile) { + remoteFile = f.getName(); + } + ftpclient.storeFile(remoteFile, stream); + stream.close(); + debug("putFile", remoteFile); + return true; + } catch(x) { + error("putFile", x); + setStatus(PUT); + } + return false; + }; + + this.putString = function(str, remoteFile, charset) { + try { + str = new java.lang.String(str); + var bytes = charset ? str.getBytes(charset) : str.getBytes(); + var stream = ByteArrayInputStream(bytes); + ftpclient.storeFile(remoteFile, stream); + debug("putString", remoteFile); + return true; + } catch(x) { + error("putString", x); + setStatus(PUT); + } + return false; + }; + + this.getFile = function(remoteFile, localFile) { + try { + if (localDir == null) + var f = new File(localFile); + else + var f = new File(localDir, localFile); + var stream = new BufferedOutputStream( + new FileOutputStream(f.getPath()) + ); + ftpclient.retrieveFile(remoteFile, stream); + stream.close(); + debug("getFile", remoteFile); + return true; + } catch(x) { + error("getFile", x); + setStatus(GET); + } + return false; + }; + + this.getString = function(remoteFile) { + try { + var stream = ByteArrayOutputStream(); + ftpclient.retrieveFile(remoteFile, stream); + debug("getString", remoteFile); + return stream.toString(); + } catch(x) { + error("getString", x); + setStatus(GET); + } + return; + }; + + this.deleteFile = function(remoteFile) { + try { + ftpclient.deleteFile(remoteFile); + debug("deleteFile", remoteFile); + return true; + } catch(x) { + error("deleteFile", x); + setStatus(DELETE); + } + return false; + }; + + this.logout = function() { + try { + ftpclient.logout(); + ftpclient.disconnect(); + debug("logout"); + return true; + } catch(x) { + error("logout", x); + setStatus(LOGOUT); + } + return false; + }; + + for (var i in this) + this.dontEnum(i); + + return this; +} + + +helma.Ftp.toString = function() { + return "[helma.Ftp]"; +}; + + +helma.lib = "Ftp"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Html.js b/helma/Html.js new file mode 100644 index 00000000..3b6256e4 --- /dev/null +++ b/helma/Html.js @@ -0,0 +1,835 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Html.js,v $ + * $Author: czv $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +// take care of any dependencies +app.addRepository('modules/core/String.js'); + + +if (!global.helma) { + global.helma = {}; +} + +helma.Html = function() { + var self = this; + + /** + * helper function to render an arbitrary markup part + * @param String the element's name + * @param String prefix of each rendered element + * @param String suffix of each rendered element + * @param Object optional element's attributes + */ + var renderMarkupPart = function(name, start, end, attr) { + res.write(start); + res.write(name); + if (attr) { + for (var i in attr) { + if (i == "prefix" || i == "suffix" || + i == "default" || attr[i] == null) { + continue; + } + res.write(" "); + res.write(i); + res.write("=\""); + res.write(attr[i]); + res.write("\""); + } + } + res.write(end); + return; + }; + + /** + * helper function used in Html.checkBox + * and Html.dropDown to check if a current value + * matches against one or more selected values + * @param String the current value + * @param StringOrArray the selectedValue + */ + var isSelected = function(value, selectedValue) { + if (selectedValue == null || value == null) + return false; + if (selectedValue instanceof Array) + return Array.contains(selectedValue, value); + return value == selectedValue; + }; + + /** + * return a textual representation of this object + * @return String + */ + this.toString = function() { + return "[Antville Html Library]"; + }; + + /** + * render the opening tag of an arbitrary x/html element + * @param String the element's name + * @param Object the element's attributes + */ + this.openTag = function(name, attr) { + renderMarkupPart(name, "<", ">", attr); + return; + }; + + /** + * return the opening tag of an arbitrary x/html element + * @see this.openTag + * @return String the rendered element + */ + this.openTagAsString = function(name, attr) { + res.push(); + renderMarkupPart(name, "<", ">", attr); + return res.pop(); + }; + + /** + * render the closing tag of an arbitrary x/html element + * directly to response + * @param String the element's name + */ + this.closeTag = function(name) { + renderMarkupPart(name, "", null); + return; + }; + + /** + * return the closing tag of an arbitray x/html element + * @see this.closeTag + * @return String the rendered element + */ + this.closeTagAsString = function(name) { + res.push(); + renderMarkupPart(name, "", null); + return res.pop(); + }; + + /** + * render an empty arbitrary x/html element ("contentless tag") + * @param String the element's name + * @param Object the element's attributes + */ + this.tag = function(name, attr) { + renderMarkupPart(name, "<", " />", attr); + return; + }; + + /** + * return an empty arbitrary x/html element ("contentless tag") + * @see this.tag + * @return String the rendered element + */ + this.tagAsString = function(name, attr) { + res.push(); + renderMarkupPart(name, "<", " />", attr); + return res.pop(); + }; + + /** + * render an arbitrary x/html element + * @param String the element's name + * @param String the element's content + * @param Object the element's attributes + */ + this.element = function(name, str, attr) { + renderMarkupPart(name, "<", ">", attr); + res.write(str); + renderMarkupPart(name, ""); + return; + }; + + /** + * return an arbitrary x/html element + * @see this.element + * @param String the rendered element + */ + this.elementAsString = function(name, str, attr) { + res.push(); + self.element(name, str, attr); + return res.pop(); + }; + + /** + * render an x/html link element + * @param Object the element's attributes + * @param String the element's content + */ + this.link = function(attr, text) { + if (!attr) { + res.write("[Html.link: insufficient arguments]"); + return; + } + self.openTag("a", attr); + res.write(text); + self.closeTag("a"); + return; + }; + + /** + * return an x/html link element + * @see this.link + * @return String the rendered element + */ + this.linkAsString = function(attr, text) { + res.push(); + self.link(attr, text); + return res.pop(); + }; + + /** + * render an x/html hidden input element + * @param Object the element's attributes + */ + this.hidden = function(param) { + if (!param) { + res.write("[Html.hidden: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + attr.type = "hidden"; + attr.value = (attr.value != null) ? encodeForm(attr.value) : ""; + self.tag("input", attr); + return; + }; + + /** + * return an x/html hidden input element + * @see this.hidden + * @return String the rendered element + */ + this.hiddenAsString = function(attr) { + res.push(); + self.hidden(attr); + return res.pop(); + }; + + /** + * render an x/html text input element + * @param Object the element's attributes + */ + this.input = function(param) { + if (!param) { + res.write("[Html.input: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + attr.type = "text"; + if (!attr.size) + attr.size = 20; + attr.value = (attr.value != null) ? encodeForm(attr.value) : ""; + self.tag("input", attr); + return; + }; + + /** + * return an x/html text input element + * @see this.input + * @return String the rendered element + */ + this.inputAsString = function(attr) { + res.push(); + self.input(attr); + return res.pop(); + }; + + /** + * render an x/html textarea element + * @param Object the element's attributes + */ + this.textArea = function(param) { + if (!param) { + res.write("[Html.textArea: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + var value = (attr.value != null) ? encodeForm(attr.value) : ""; + delete attr.value; + self.openTag("textarea", attr); + res.write(value); + self.closeTag("textarea"); + return; + }; + + /** + * return an x/html textarea element + * @see this.textArea + * @return String the rendered element + */ + this.textAreaAsString = function(attr) { + res.push(); + self.textArea(attr); + return res.pop(); + }; + + /** + * render an x/html checkbox input element + * @param Object the element's attributes + */ + this.checkBox = function(param) { + if (!param) { + res.write("[Html.checkBox: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + attr.type = "checkbox"; + if (attr.selectedValue != null) { + if (isSelected(param.value, param.selectedValue)) + attr.checked = "checked"; + else + delete attr.checked; + delete attr.selectedValue; + } + self.tag("input", attr); + return; + }; + + /** + * return an x/html checkbox input element + * @see this.checkBox + * @return String the rendered element + */ + this.checkBoxAsString = function(attr) { + res.push(); + self.checkBox(attr); + return res.pop(); + }; + + /** + * render an x/html radiobutton input element + * @param Object the element's attributes + */ + this.radioButton = function(param) { + if (!param) { + res.write("[Html.radioButton: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + attr.type = "radio"; + if (attr.selectedValue != null) { + if (attr.value == attr.selectedValue) + attr.checked = "checked"; + else + delete attr.checked; + delete attr.selectedValue; + } + self.tag("input", attr); + return; + }; + + /** + * return an x/html radiobutton input element + * @see this.radioButton + * @return String the rendered element + */ + this.radioButtonAsString = function(attr) { + res.push(); + self.radioButton(attr); + return res.pop(); + }; + + /** + * render an x/html submit input element + * @param Object the element's attributes + */ + this.submit = function(param) { + if (!param) { + res.write("[Html.submit: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + attr.type = "submit"; + if (!attr.name) + attr.name = attr.type; + attr.value = (attr.value != null) ? encodeForm(attr.value) : attr.type; + self.tag("input", attr); + return; + }; + + /** + * return an x/html submit input element + * @see this.submit + * @return String the rendered element + */ + this.submitAsString = function(attr) { + res.push(); + self.submit(attr); + return res.pop(); + }; + + /** + * render an x/html button input element + * @param Object the element's attributes + */ + this.button = function(param) { + if (!param) { + res.write("[Html.button: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + attr.type = "button"; + if (!attr.name) + attr.name = attr.type; + attr.value = (attr.value != null) ? encodeForm(attr.value) : attr.type; + self.tag("input", attr); + return; + }; + + /** + * return an x/html button input element + * @see this.button + * @return String the rendered element + */ + this.buttonAsString = function(attr) { + res.push(); + self.button(attr); + return res.pop(); + }; + + /** + * render a x/html drop down box + * @param Object the element's attributes + * @param Array either an array of strings, an array with + * several {value: v, display: d} objects, or a collection + * of ["value", "display"] arrays in an array + * @param String the currently selected value + * @param String the first option (without a value) + */ + this.dropDown = function(param, options, selectedValue, firstOption) { + if (!param) { + res.write("[Html.dropDown: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + if (!attr.size) + attr.size = 1; + self.openTag("select", attr); + res.write("\n "); + if (firstOption) { + self.openTag("option", {value: ""}); + res.write(firstOption); + self.closeTag("option"); + res.write("\n "); + } + for (var i in options) { + var attr = new Object(); + var display = ""; + if ((options[i] instanceof Array) && options[i].length > 0) { + // option is an array + attr.value = options[i][0]; + display = options[i][1]; + } else if (options[i].value != null && options[i].display != null) { + // option is an object + attr.value = options[i].value; + display = options[i].display; + } else { + // assume option is a string + attr.value = i; + display = options[i]; + } + if (isSelected(attr.value, selectedValue)) + attr.selected = "selected"; + self.openTag("option", attr); + res.write(display); + self.closeTag("option"); + res.write("\n "); + } + self.closeTag("select"); + res.write("\n "); + return; + }; + + /** + * return an x/html drop down box + * @see this.dropDown + * @return String the rendered drop down box + */ + this.dropDownAsString = function(attr, options, selectedValue, firstOption) { + res.push(); + self.dropDown(attr, options, selectedValue, firstOption); + return res.pop(); + }; + + /** + * Renders an image map from an array + * each array contains an object describing the parameters + * for the area of the image map + * @param String name of the image map + * @param String array of image map objects + */ + this.map = function(name, param) { + self.openTag("map", {name: name}); + var areas = Object.clone(param); + for (var i in areas) { + if (!areas[i].alt) + areas[i].alt = ""; + if (!areas[i].shape) + areas[i].shape = "rect"; + self.openTag("area", areas[i]); + } + self.closeTag("map"); + return; + }; + + /** + * @see Html.map + * @return the rendered element + */ + this.mapAsString = function(name, areas) { + res.push(); + self.map(name, areas); + return res.pop(); + }; + + /** + * render a complete x/html table + * @param Array an array containing table headers + * @param Array a 2 dimensional array containing the table data + * @param Object the table's, its rows' and cells' attributes + */ + this.table = function(headers, data, param) { + if (!param) { + res.write("[Html.table: insufficient arguments]"); + return; + } + var attr = Object.clone(param); + if (!attr.trHead) attr.trHead = attr.tr; + if (!attr.trEven) attr.trEven = attr.tr; + if (!attr.trOdd) attr.trOdd = attr.tr; + if (!attr.tdEven) attr.tdEven = attr.td; + if (!attr.tdOdd) attr.tdOdd = attr.td; + if (!attr.thEven) attr.thEven = attr.th; + if (!attr.thOdd) attr.thOdd = attr.th; + self.openTag("table", attr.table); + if (headers) { + self.openTag("tr", attr.trHead); + for (var i in headers) { + var evenOdd = i % 2 == 0 ? "Even" : "Odd"; + self.openTag("th", attr["th"+evenOdd]); + res.write(headers[i]); + self.closeTag("th"); + } + self.closeTag("tr"); + } + for (var i in data) { + var evenOdd = i % 2 == 0 ? "Even" : "Odd"; + self.openTag("tr", attr["tr"+evenOdd]); + for (var j in data[i]) { + var evenOddCell = j % 2 == 0 ? "Even" : "Odd"; + self.openTag("td", attr["td"+evenOddCell]); + res.write(data[i][j]); + self.closeTag("td"); + } + self.closeTag("tr"); + } + self.closeTag("table"); + }; + + /** + * return a complete x/html table + * @see this.table + * @return String the rendered table + */ + this.tableAsString = function(headers, data, attr) { + res.push(); + self.table(headers, data, attr); + return res.pop(); + }; + + /** + * utility object to provide an easy way + * for programmatically creating an x/html table. + * @param Number the number of columns in the table + * @param Object the table's, its rows' and cells' attributes + * @return Object an instance of TableWriter + */ + this.TableWriter = function(numberOfColumns, attr) { + this.ncols = numberOfColumns; + if (isNaN(this.ncols)) + throw "Illegal argument in TableWriter(): first argument must be a number"; + if (this.ncols < 1) + throw "Illegal argument in TableWriter(): first argument must be > 1"; + this.written = 0; + // if no attributes object given, create an empty one + if (!attr) + attr = {}; + if (!attr.trEven) attr.trEven = attr.tr; + if (!attr.trOdd) attr.trOdd = attr.tr; + if (!attr.trHead) attr.trHead = attr.trEven; + if (!attr.tdEven) attr.tdEven = attr.td; + if (!attr.tdOdd) attr.tdOdd = attr.td; + if (!attr.thEven) attr.thEven = attr.th; + if (!attr.thOdd) attr.thOdd = attr.th; + this.attr = attr; + + // write header row? set to true to use "th" tags for first row + this.writeHeader = false; + // write to string buffer rather than response? + this.writeString = false; + + /** + * Write a table cell. + * @param String the table cell content as text + * @param attr an optional attributes holder for the td tag + */ + this.write = function(text, attr) { + // set up some variables + var isHeaderRow = (this.writeHeader && this.written < this.ncols); + var isNewRow = (this.written % this.ncols == 0); + var isEvenRow = ((this.written / this.ncols) % 2 == 0); + var isEvenCol = ((this.written % this.ncols) % 2 == 0); + // write out table and table row tags + if (this.written == 0) { + if (this.writeString) + res.push(); + self.openTag("table", this.attr.table); + self.openTag("tr", this.attr.trHead); + } else if (isNewRow) { + self.closeTag("tr"); + if (isEvenRow) + self.openTag("tr", this.attr.trEven); + else + self.openTag("tr", this.attr.trOdd); + } + // get the attribute object for the table cell + if (!attr) { + // no explicit attribute given + if (isEvenCol) + attr = isHeaderRow ? this.attr.thEven : this.attr.tdEven; + else + attr = isHeaderRow ? this.attr.thOdd : this.attr.tdOdd; + } + // write out table cell tag + self.openTag(isHeaderRow ? "th" : "td", attr); + // write out table cell contents + if (text) + res.write(text); + // close table cell + self.closeTag(isHeaderRow ? "th" : "td"); + if (attr && !isNaN(attr.colspan)) + this.written += attr.colspan; + else + this.written += 1; + return; + }; + + /** + * Close all open table tags. + */ + this.close = function() { + if (this.written > 0) { + while (this.written++ % this.ncols != 0) + res.write(""); + res.write(""); + this.written = 0; + } + if (this.writeString) + return res.pop(); + return; + }; + + this.dontEnum("ncols", "written", "attr", "writeHeader"); + this.dontEnum("writeString", "write", "close"); + + return this; + }; + +/*********************************************************************/ +/* */ +/* the following functions should be deliberately altered or removed */ +/* (most of these can easily be replaced by the methods they call) */ +/* */ +/*********************************************************************/ + + /** + * render an x/html open link tag + * @param Object the element's attributes + */ + this.openLink = function(attr) { + self.openTag("a", attr); + return; + }; + + /** + * return an x/html open link tag + * @see this.openTag + * @return String the rendered element + */ + this.openLinkAsString = function(attr) { + return self.openTagAsString("a", attr); + }; + + /** + * render an x/html close link tag + */ + this.closeLink = function() { + self.closeTag("a"); + return; + }; + + /** + * return an x/html close link tag + * @see this.closeLink + * @return String the rendered element + */ + this.closeLinkAsString = function() { + return self.closeTagAsString("a"); + }; + + /** + * render a color string + * if it contains hex characters only prefix it with "#" + * otherwise assume that it is a named color (eg. "yellow") + * @param String the color string + * @deprecated + */ + this.color = function(c) { + if (c) { + var nonhex = /[^0-9,a-f]/gi; + if (!c.match(nonhex)) { + c = c.pad("0", 6); + res.write("#"); + } + } + res.write(c); + return; + }; + + /** + * return a color string + * @see this.color + * @return String the resulting color string + * @deprecated + */ + this.colorAsString = function(c) { + res.push(); + return self.color(c); + return res.pop(); + }; + + /** + * render an x/html open form tag + * @param Object the element's attributes + */ + this.form = function(attr) { + self.openTag("form", attr); + return; + }; + + /** + * return an x/html open form tag + * @see this.form + * @return String the rendered element + */ + this.formAsString = function(attr) { + res.push(); + self.form(attr); + return res.pop(); + }; + + /** + * render an x/html password input element + * @param Object the element's attributes + */ + this.password = function(attr) { + if (!attr) { + res.write("[Html.password: insufficient arguments]"); + return; + } + attr.type = "password"; + if (!attr.size) + attr.size = 20; + self.tag("input", attr); + return; + }; + + /** + * render an x/html password input element + * @see this.password + * @return String the rendered element + */ + this.passwordAsString = function(attr) { + res.push(); + self.password(attr); + return res.pop(); + }; + + /** + * render an x/html file input element + * @param Object the element's attributes + */ + this.file = function(attr) { + if (!attr) { + res.write("[Html.file: insufficient arguments]"); + return; + } + attr.type = "file"; + self.tag("input", attr); + return; + }; + + /** + * return an x/html file input element + * @see this.file + * @return String the rendered element + */ + this.fileAsString = function(attr) { + res.push(); + self.file(attr); + return res.pop(); + }; + + for (var i in this) + this.dontEnum(i); + + return this; +}; + + +helma.Html.toString = function() { + return "[helma.Html]"; +}; + + +/** + * function parses a string and converts any + * found URL into a HTML link tag + * @return String resulting string with activated URLs + */ +helma.Html.prototype.activateUrls = function(str) { + var re = /(^|\/>|\s+)([fhtpsr]+:\/\/[^\s]+?)([\.,;:\)\]\"]?)(?=[\s<]|$)/gim; + var func = function(str, p1, p2, p3) { + res.push(); + res.write(p1); + res.write(''); + res.write(p2.clip(50, "...", true)); + res.write(''); + res.write(p3); + return res.pop(); + }; + return str.replace(re, func); +}; + + +helma.lib = "Html"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Http.js b/helma/Http.js new file mode 100644 index 00000000..604ad974 --- /dev/null +++ b/helma/Http.js @@ -0,0 +1,340 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Http.js,v $ + * $Author: czv $ + * $Revision: 1.11 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.Http = function() { + var proxy = null; + var content = ""; + var userAgent = "Helma Http Client"; + var method = "GET"; + var credentials = null; + var followRedirects = true; + var headers = {}; + var timeout = { + "connect": 0, + "socket": 0 + }; + + var setTimeout = function(type, value) { + var v = java.lang.System.getProperty("java.specification.version"); + if (parseFloat(v, 10) >= 1.5) { + timeout[type] = value; + } else { + app.log("[Helma Http Client] WARNING: timeouts can only be set with Java Runtime version >= 1.5"); + } + return true; + } + + /** + * sets the proxy host and port for later use + */ + this.setProxy = function(proxyString) { + var idx = proxyString.indexOf(":"); + var host = proxyString.substring(0, idx); + var port = proxyString.substring(idx+1); + if (java.lang.Class.forName("java.net.Proxy") != null) { + // construct a proxy instance + var socket = new java.net.InetSocketAddress(host, port); + proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP, socket); + } else { + // the pre jdk1.5 way: set the system properties + var sys = java.lang.System.getProperties(); + if (host) { + app.log("[Helma Http Client] WARNING: setting system http proxy to " + host + ":" + port); + sys.put("http.proxySet", "true"); + sys.put("http.proxyHost", host); + sys.put("http.proxyPort", port); + } + } + return true; + }; + + /** + * returns the proxy in "host:port" format + */ + this.getProxy = function() { + if (proxy != null) { + return proxy.address().getHostName() + ":" + proxy.address().getPort(); + } else if (sys.get("http.proxySet") == "true") { + return sys.get("http.proxyHost") + ":" + sys.get("http.proxyPort"); + } else { + return null; + } + }; + + /** + * sets the credentials for basic http authentication + */ + this.setCredentials = function(username, password) { + var str = new java.lang.String(username + ":" + password); + credentials = (new Packages.sun.misc.BASE64Encoder()).encode(str.getBytes()); + return true; + } + + this.setContent = function(stringOrObject) { + if (stringOrObject.constructor == Object) { + res.push(); + var value; + for (var key in stringOrObject) { + value = stringOrObject[key]; + res.write(encodeURIComponent(key)); + res.write("="); + res.write(encodeURIComponent(value)); + res.write("&"); + } + content = res.pop(); + content = content.substring(0, content.length-1); + } else + content = stringOrObject.toString(); + return; + }; + + /** + * getter/setter for method + */ + this.setMethod = function(m) { + method = m; + return true; + }; + this.getMethod = function() { + return method; + }; + + this.setHeader = function(name, value) { + headers[name] = value; + return; + }; + this.getHeader = function(name) { + return headers[name]; + }; + + /** + * getter/setter for timeouts + */ + this.setTimeout = function(timeout) { + setTimeout("connect", timeout); + return true; + }; + this.setReadTimeout = function(timeout) { + setTimeout("socket", timeout); + return true; + }; + this.getTimeout = function() { + return timeout.connect; + }; + this.getReadTimeout = function() { + return timeout.socket; + }; + + /** + * getter/setter for following redirects + */ + this.setFollowRedirects = function(value) { + followRedirects = value; + return; + }; + this.getFollowRedirects = function() { + return followRedirects; + }; + + /** + * getter/setter for user agent string + */ + this.setUserAgent = function(agent) { + userAgent = agent; + return true; + } + this.getUserAgent = function() { + return userAgent; + } + + /** + * executes a http request + */ + this.getUrl = function(url, opt) { + if (typeof url == "string") { + if (!(url = helma.Http.evalUrl(url))) + throw new Error("'" + url + "' is not a valid URL."); + } else if (!(url instanceof java.net.URL)) { + throw new Error("'" + url + "' is not a valid URL."); + } + + var conn = proxy ? url.openConnection(proxy) : url.openConnection(); + conn.setFollowRedirects(followRedirects); + conn.setAllowUserInteraction(false); + conn.setRequestMethod(method); + conn.setRequestProperty("User-Agent", userAgent); + + if (opt) { + if (opt instanceof Date) + conn.setIfModifiedSince(opt.getTime()); + else if ((typeof opt == "string") && (opt.length > 0)) + conn.setRequestProperty("If-None-Match", opt); + } + if (credentials != null) { + conn.setRequestProperty("Authorization", "Basic " + credentials); + } + if (parseFloat(java.lang.System.getProperty("java.specification.version"), 10) >= 1.5) { + conn.setConnectTimeout(timeout.connect); + conn.setReadTimeout(timeout.socket); + } else { + app.debug("WARNING: timeouts can only be set due to Java version < 1.5"); + } + + for (var i in headers) + conn.setRequestProperty(i, headers[i]); + + if (content) { + conn.setRequestProperty("Content-Length", content.length); + conn.setDoOutput(true); + var out = new java.io.DataOutputStream(conn.getOutputStream()); + out.writeBytes(new java.lang.String(content)); + out.flush(); + out.close(); + } + + var result = { + url: conn.getURL(), + location: conn.getHeaderField("location"), + code: conn.getResponseCode(), + message: conn.getResponseMessage(), + length: conn.getContentLength(), + type: conn.getContentType(), + encoding: conn.getContentEncoding(), + lastModified: null, + eTag: null, + content: null + } + var lastmod = conn.getLastModified(); + if (lastmod) + result.lastModified = new Date(lastmod); + result.eTag = conn.getHeaderField("ETag"); + + if (result.length != 0 && result.code == 200) { + var body = new java.io.ByteArrayOutputStream(); + var input = new java.io.BufferedInputStream(conn.getInputStream()); + var buf = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024); + var str; + while ((str = input.read(buf)) > -1) { + body.write(buf, 0, str); + } + input.close(); + result.content = result.encoding ? body.toString(result.encoding) : body.toString(); + result.length = result.content.length; + } + conn.disconnect(); + return result; + } + + this.toString = function() { + return "[Helma Http Client]"; + }; + + for (var i in this) + this.dontEnum(i); + + return this; +}; + + +/** + * removes trailing slash from and evaluates a url + * @param String the url or uri string + * @return Object the result with error and result properties + */ +helma.Http.evalUrl = function(url) { + try { + return new java.net.URL(url); + } catch (err) { + return null; + } +}; + + +/** + * set global http proxy + */ +helma.Http.setProxy = function(proxyString) { + var sys = java.lang.System.getProperties(); + if (proxyString) { + var idx = proxyString.indexOf(":"); + var host = proxyString.substring(0, idx); + var port = proxyString.substring(idx+1); + if (!port) + port = "3128"; + else if (typeof port == "number") + port = port.toString(); + app.log("helma.Http.setProxy " + proxyString); + sys.put("http.proxySet", "true"); + sys.put("http.proxyHost", host); + sys.put("http.proxyPort", port); + } else { + sys.put("http.proxySet", "false"); + sys.put("http.proxyHost", ""); + sys.put("http.prodyPort", ""); + } + return; + +}; + + +/** + * return global proxy settings + */ +helma.Http.getProxy = function() { + var sys = java.lang.System.getProperties(); + if (sys.get("http.proxySet") == "true") + return sys.get("http.proxyHost") + ":" + sys.get("http.proxyPort"); + return false; +}; + + +/** + * static method to check if a request is authorized or not + * @param String username to check req.username against + * @param String password to check req.password against + * @return Boolean true if request is authorized, false otherwise + */ +helma.Http.isAuthorized = function(name, pwd) { + if (!req.username || !req.password || + req.username != name || req.password != pwd) { + res.reset(); + res.status = 401; + res.realm = "Helma Http Authorization"; + res.write("Authorization required."); + return false; + } else { + return true; + } +}; + + +helma.Http.toString = function() { + return "[helma.Http]"; +}; + + +helma.lib = "Http"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Image.js b/helma/Image.js new file mode 100644 index 00000000..94d90bde --- /dev/null +++ b/helma/Image.js @@ -0,0 +1,108 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Image.js,v $ + * $Author: czv $ + * $Revision: 1.6 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.Image = function(arg) { + // according to + // http://grazia.helma.org/pipermail/helma-dev/2004-June/001253.html + var generator = Packages.helma.image.ImageGenerator.getInstance(); + return generator.createImage(arg); +} + + +helma.Image.toString = function() { + return "[helma.Image]"; +}; + + +helma.Image.getInfo = function(arg) { + if (arguments.length != 1) { + throw new java.lang.IllegalArgumentException( + "Image.getInfo() expects one argument" + ); + } + + var inp, result; + var info = new Packages.helma.image.ImageInfo(); + // FIXME: we need a byte object for comparison + var b = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024); + + try { + if (arg instanceof java.io.InputStream) { + inp = new java.io.InputStream(arg); + // FIXME: here comes a dirty hack to check for a byte array + } else if (arg.getClass && arg.getClass() == b.getClass()) { + inp = new java.io.ByteArrayInputStream(arg); + } else if (arg instanceof java.io.File) { + inp = new java.io.FileInputStream(arg); + } else if (arg instanceof helma.File) { + inp = new java.io.FileInputStream(arg.getFile()); + } else if (typeof arg == "string") { + var str = arg; + // try to interpret argument as URL if it contains a colon, + // otherwise or if URL is malformed interpret as file name. + if (str.indexOf(":") > -1) { + try { + var url = new java.net.URL(str); + inp = url.openStream(); + } catch (mux) { + inp = new java.io.FileInputStream(str); + } + } else { + inp = new java.io.FileInputStream(str); + } + } + if (inp == null) { + var msg = "Unrecognized argument in Image.getInfo(): "; + msg += (arg == null ? "null" : arg.getClass().toString()); + throw new java.lang.IllegalArgumentException(msg); + } + info.setInput(inp); + if (info.check()) { + result = info; + } + } catch (e) { + // do nothing, returns null later + } finally { + if (inp != null) { + try { + inp.close(); + } catch (e) {} + } + } + + return result; +}; + + +helma.Image.spacer = function() { + res.contentType = "image/gif"; + res.writeBinary([71,73,70,56,57,97,2,0,2,0,-128,-1,0,-64,-64,-64,0,0,0,33,-7,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,64,2,2,68,1,0,59]); + return; +}; + + +helma.lib = "Image"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Mail.js b/helma/Mail.js new file mode 100644 index 00000000..8bbfd15e --- /dev/null +++ b/helma/Mail.js @@ -0,0 +1,315 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Mail.js,v $ + * $Author: czv $ + * $Revision: 1.6 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.Mail = function(smtp) { + var OK = 0; + var SUBJECT = 10; + var TEXT = 11; + var MIMEPART = 12; + var TO = 20; + var CC = 21; + var BCC = 22; + var FROM = 23; + var REPLYTO = 24; + var SEND = 30; + var MAILPKG = Packages.javax.mail; + + var self = this; + var errStr = "Error in helma.Mail"; + + var System = java.lang.System; + var Properties = java.util.Properties; + var IOException = java.io.IOException; + var Wrapper = Packages.org.mozilla.javascript.Wrapper; + var FileDataSource = Packages.javax.activation.FileDataSource; + var DataHandler = Packages.javax.activation.DataHandler; + + var Address = MAILPKG.Address; + var Message = MAILPKG.Message; + var Multipart = MAILPKG.Multipart; + var Session = MAILPKG.Session; + var Transport = MAILPKG.Transport; + var InternetAddress = MAILPKG.internet.InternetAddress; + var AddressException = MAILPKG.internet.AddressException; + var MimePart = MAILPKG.internet.MimePart; + var MimeBodyPart = MAILPKG.internet.MimeBodyPart; + var MimeMessage = MAILPKG.internet.MimeMessage; + var MimeUtility = MAILPKG.internet.MimeUtility; + var MimeMultipart = MAILPKG.internet.MimeMultipart; + var MimePartDataSource = MAILPKG.internet.MimePartDataSource; + + var buffer, multipart; + + var props = new Properties(); + System.setProperty( + "mail.mime.charset", + System.getProperty("mail.charset", "ISO-8859-15") + ); + + var host = smtp || getProperty("smtp"); + if (host != null) { + props.put("mail.smtp.host", host); + } + + var session = Session.getInstance(props); + var message = new MimeMessage(session); + + var setStatus = function(status) { + if (self.status === OK) { + self.status = status; + } + return; + }; + + var getStatus = function() { + return self.status; + }; + + var addRecipient = function(addstr, name, type) { + if (addstr.indexOf("@") < 0) { + throw new AddressException(); + } + if (name != null) { + var address = new InternetAddress(addstr, + MimeUtility.encodeWord(name.toString())); + } else { + var address = new InternetAddress(addstr); + } + message.addRecipient(type, address); + return; + }; + + this.status = OK; + + this.setFrom = function(addstr, name) { + try { + if (addstr.indexOf("@") < 0) { + throw new AddressException(); + } + if (name != null) { + var address = new InternetAddress(addstr, + MimeUtility.encodeWord(name.toString())); + } else { + var address = new InternetAddress(addstr); + } + message.setFrom(address); + } catch (mx) { + res.debug(errStr + ".setFrom(): " + mx); + setStatus(FROM); + } + return; + }; + + this.setReplyTo = function(addstr) { + try { + if (addstr.indexOf("@") < 0) { + throw new AddressException(); + } + var address = [new InternetAddress(addstr)]; + message.setReplyTo(address); + } catch (mx) { + res.debug(errStr + ".setReplyTo(): " + mx); + setStatus(REPLYTO); + } + return; + } + + this.setTo = function(addstr, name) { + try { + addRecipient(addstr, name, Message.RecipientType.TO); + } catch (mx) { + res.debug(errStr + ".setTo(): " + mx); + setStatus(TO); + } + return; + }; + + this.addTo = function(addstr, name) { + try { + addRecipient(addstr, name, Message.RecipientType.TO); + } catch (mx) { + res.debug(errStr + ".addTo(): " + mx); + setStatus(TO); + } + return; + } + + this.addCC = function(addstr, name) { + try { + addRecipient(addstr, name, Message.RecipientType.CC); + } catch (mx) { + res.debug(errStr + ".addCC(): " + mx); + setStatus(CC); + } + return; + } + + this.addBCC = function(addstr, name) { + try { + addRecipient(addstr, name, Message.RecipientType.BCC); + } catch (mx) { + res.debug(errStr + ".addBCC(): " + mx); + setStatus(BCC); + } + return; + } + + this.setSubject = function(subject) { + if (!subject) { + return; + } + try { + message.setSubject(MimeUtility.encodeWord(subject.toString())); + } catch (mx) { + res.debug(errStr + ".setSubject(): " + mx); + setStatus(SUBJECT); + } + return; + }; + + this.setText = function(text) { + if (text) { + buffer = new java.lang.StringBuffer(text); + } + return; + }; + + this.addText = function(text) { + if (buffer == null) { + buffer = new java.lang.StringBuffer(text); + } else { + buffer.append(text); + } + return; + }; + + this.addPart = function(obj, filename) { + try { + if (obj == null) { + throw new IOException( + errStr + ".addPart: method called with wrong number of arguments." + ); + } + if (multipart == null) { + multipart = new MimeMultipart(); + } + if (obj instanceof Wrapper) { + obj = obj.unwrap(); + } + + var part = new MimeBodyPart(); + if (typeof obj == "string") { + part.setContent(obj.toString(), "text/plain"); + } else if (obj instanceof File) { + // FIXME: the following line did not work under windows: + //var source = new FileDataSource(obj); + var source = new FileDataSource(obj.getPath()); + part.setDataHandler(new DataHandler(source)); + } else if (obj instanceof MimePart) { + var source = new MimePartDataSource(obj); + part.setDataHandler(new DataHandler(source)); + } + if (filename != null) { + try { + part.setFileName(filename.toString()); + } catch (x) {} + } else if (obj instanceof File) { + try { + part.setFileName(obj.getName()); + } catch (x) {} + } + multipart.addBodyPart(part); + } catch (mx) { + res.debug(errStr + ".addPart(): " + mx); + setStatus(MIMEPART); + } + return; + } + + this.send = function() { + if (this.status > OK) { + res.debug(errStr + ".send(): Status is " + this.status); + return; + } + try { + if (buffer != null) { + if (multipart != null) { + var part = new MimeBodyPart(); + part.setContent(buffer.toString(), "text/plain"); + multipart.addBodyPart(part, 0); + message.setContent(multipart); + } else { + message.setText(buffer.toString()); + } + } else if (multipart != null) { + message.setContent(multipart); + } else { + message.setText(""); + } + Transport.send(message); + } catch (mx) { + res.debug(errStr + ".send(): " + mx); + setStatus(SEND); + } + return; + }; + + for (var i in this) + this.dontEnum(i); + + return this; +} + + +helma.Mail.toString = function() { + return "[helma.Mail]"; +}; + + +helma.Mail.prototype.toString = function() { + return "[helma.Mail Object]"; +}; + + +helma.Mail.example = function(smtp, sender, addr, subject, text) { + // var smtp = "smtp.host.dom"; + // var sender = "sender@host.dom"; + // var addr = "recipient@host.dom"; + // var subject = "Hello, World!"; + // var text = "This is a test."; + var msg = new helma.Mail(smtp); + msg.setFrom(sender); + msg.addTo(addr); + msg.setSubject(subject); + msg.setText(text); + msg.send(); + res.write(msg.status); + return; +}; + + +helma.lib = "Mail"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Search.js b/helma/Search.js new file mode 100644 index 00000000..ad25af03 --- /dev/null +++ b/helma/Search.js @@ -0,0 +1,965 @@ +// +// A wrapper for Apache Lucene for use with Helma Object Publisher +// Copyright (c) 2005-2006 Robert Gaggl +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +// +// $Revision: 1.7 $ +// $Author: czv $ +// $Date: 2006/04/18 13:06:58 $ +// + + +// take care of any dependencies +app.addRepository('modules/helma/lucene.jar'); + + +if (!global.helma) { + global.helma = {}; +} + +/** + * Search constructor + */ +helma.Search = function() { + + this.toString = function() { + return helma.Search.toString(); + }; + + try { + var c = java.lang.Class.forName("org.apache.lucene.analysis.Analyzer", + true, app.__app__.typemgr.getClassLoader()); + } catch (e) { + throw("helma.Search needs lucene.jar \ + in lib/ext or application directory \ + [http://lucene.apache.org/]"); + } + return this; +} + +helma.Search.PKG = Packages.org.apache.lucene; + +/////////////////////////////////////////// +// static methods +/////////////////////////////////////////// + +helma.Search.toString = function() { + return "[helma.Search]"; +} + +/** + * static method that returns a new Analyzer instance + * depending on the language passed as argument + * @param String language + * @return Object analyzer + */ +helma.Search.getAnalyzer = function(lang) { + switch (lang) { + case "de": + return new helma.Search.PKG.analysis.de.GermanAnalyzer(); + case "ru": + return new helma.Search.PKG.analysis.ru.RussianAnalyzer(); + case "si": + case "simple": + return new helma.Search.PKG.analysis.SimpleAnalyzer(); + case "whitespace": + return new helma.Search.PKG.analysis.WhitespaceAnalyzer(); + default: + return new helma.Search.PKG.analysis.standard.StandardAnalyzer(); + } +}; + +/** + * constructor for QueryFilter objects + * @param Object instance of Search.Query + */ +helma.Search.QueryFilter = function(q) { + var wrappedFilter = new helma.Search.PKG.search.QueryFilter(q.getQuery()); + + this.getFilter = function() { + return wrappedFilter; + }; + + this.toString = function() { + return wrappedFilter.toString(); + }; + + return this; +}; + + +/////////////////////////////////////////// +// prototype methods +/////////////////////////////////////////// + +/** + * returns an instance of org.apache.lucene.store.FSDirectory + * @param Object an instance of File, helma.File, java.io.File or the + * path to the directory as String + * @return Object org.apache.lucene.store.FSDirectory + */ +helma.Search.prototype.getDirectory = function(dir, create) { + if (!dir) { + throw("helma.Search.getDirectory(): insufficient arguments."); + } + var d; + if (dir.constructor == String) { + d = new java.io.File(dir); + } else if (dir.constructor == File || dir.constructor == helma.File) { + d = new java.io.File(dir.getAbsolutePath()); + } else if (!((d = dir) instanceof java.io.File)) { + throw("helma.Search.getDirectory(): " + dir + " is not a valid argument."); + } + return helma.Search.PKG.store.FSDirectory.getDirectory(d, + create == true ? true : !d.exists()); +} + +/** + * returns an instance of org.apache.lucene.store.RAMDirectory + * @param Object the directory to create the RAMDirectory from. Argument + * can be an instance of File, helma.File, java.io.File or the + * path to the directory as String + * @return Object org.apache.lucene.store.RAMDirectory + */ +helma.Search.prototype.getRAMDirectory = function(dir) { + if (dir != null) { + var d; + if (dir.constructor == String) { + d = new java.io.File(dir); + } else if (dir.constructor == File || dir.constructor == helma.File) { + d = new java.io.File(dir.getAbsolutePath()); + } else if (!((d = dir) instanceof java.io.File)) { + throw("helma.Search.getRAMDirectory(): " + dir + " is not a valid argument."); + } + if (!d.exists()) { + throw("helma.Search.getRAMDirectory(): " + dir + " does not exist."); + } + return helma.Search.PKG.store.RAMDirectory(d); + } + return helma.Search.PKG.store.RAMDirectory(); +} + +/** + * returns a new index Object + * @param String name of the index + * @param Object Analyzer to use (instance of analysis.Analyzer) + * @param Object base directory of the index (File object) + * @return Object Index object + */ +helma.Search.prototype.createIndex = function(dir, analyzer) { + if (arguments.length == 0) { + throw("helma.Search.createIndex(): insufficient arguments."); + } else if (arguments.length == 1) { + analyzer = helma.Search.getAnalyzer(); + forceCreate = false; + } else if (arguments.length == 2) { + if (arguments[1].constructor == Boolean) { + analyzer = helma.Search.getAnalyzer(); + forceCreate = arguments[1]; + } else { + forceCreate = false; + } + } + var index = new helma.Search.Index(dir, analyzer); + if (!helma.Search.PKG.index.IndexReader.indexExists(dir)) { + index.create(); + } + return index; +}; + + +/////////////////////////////////////////// +// Index +/////////////////////////////////////////// + + +/** + * static constructor for Index objects + * @param Object index directory, either an instance of FSDirectory or RAMDirectory + * @param Object Lucene analyzer object + */ +helma.Search.Index = function(directory, analyzer) { + /** + * returns an IndexWriter object + * @param Boolean if true a new index is created + */ + this.getWriter = function(create) { + return new helma.Search.PKG.index.IndexWriter(directory, + analyzer, create == true ? true : false); + }; + + /** + * returns an IndexReader object + */ + this.getReader = function() { + return helma.Search.PKG.index.IndexReader.open(directory); + }; + + /** + * return the directory of the index + * @param Object helma.File object representing the index' directory + */ + this.getDirectory = function() { + return directory; + }; + + /** + * constructor function for Searcher objects + */ + this.Searcher = function() { + var s = new helma.Search.PKG.search.IndexSearcher(directory); + var sortFields; + + /** + * wraps a org.lucene.search.Hits collection + * @param Object instance of org.lucene.search.Hits + */ + var HitCollection = function(hits) { + /** + * silently converts the requested hit into + * an instance of helma.Search.Document + * @param Int index position of hit in collection + * @return instance of helma.Search.Document + */ + this.get = function(idx) { + var doc = new helma.Search.Document(hits.doc(idx)); + doc.score = hits.score(idx); + doc.rank = idx +1; + return doc; + } + + /** + * returns the nr. of hits + */ + this.size = this.length = function() { + return (hits != null) ? hits.length() : 0; + } + return this; + } + + this.hits = null; + + /** + * main search method. the resulting hits collection is + * stored in the property hits. don't forget to do a close() + * when finished processing the resulting hits, otherwise + * the index files will stay locked! + * @param Object instance of Search.Query + * @param Object instance of QueryFilter + * @return Int number of hits + */ + this.search = function(query, filter) { + var pkg = helma.Search.PKG.search; + var hits; + if (sortFields) { + var arr = java.lang.reflect.Array.newInstance(pkg.SortField, sortFields.size()); + var sort = pkg.Sort(sortFields.toArray(arr)); + if (filter) { + hits = s.search(query.getQuery(), filter.getFilter(), sort); + } else { + hits = s.search(query.getQuery(), sort); + } + } else if (filter) { + hits = s.search(query.getQuery(), filter.getFilter()); + } else { + hits = s.search(query.getQuery()); + } + this.hits = new HitCollection(hits); + return this.hits.length(); + }; + + /** + * sets a field as result sorting field + */ + this.sortBy = function(field) { + var pkg = helma.Search.PKG.search; + if (!sortFields) + sortFields = new java.util.Vector(); + var f = field; + var t = pkg.SortField.AUTO; + var r = false; + if (arguments.length == 3) { + t = pkg.SortField[arguments[1].toUpperCase()]; + r = arguments[2]; + } else if (arguments.length == 2) { + if (arguments[1].constructor == Boolean) { + r = arguments[1]; + } else { + t = pkg.SortField[arguments[1].toUpperCase()]; + } + } + sortFields.add(new pkg.SortField(f, t, r)); + return; + }; + + /** + * closes the wrapped IndexSearcher + */ + this.close = function() { + s.close(); + return; + }; + + return this; + }; + + this.toString = function() { + return ("[Lucene Index " + directory + "]"); + }; + + return this; +}; + +/** + * check if the index is locked. if true wait a bit + * and return it again until the timeout is reached + */ +helma.Search.Index.prototype.checkWriteLock = function() { + var interval = 500; + var timeout = 5000; + var isLocked = helma.Search.PKG.index.IndexReader.isLocked(this.getDirectory()); + if (isLocked) { + var elapsed = 0; + while (elapsed < timeout) { + java.lang.Thread.sleep(interval); + elapsed += interval; + isLocked = helma.Search.PKG.index.IndexReader.isLocked(this.getDirectory()); + if (!isLocked) + return; + } + throw("Timeout while waiting for Index unlock"); + } +}; + +/** + * merge indexes into this one + */ +helma.Search.Index.prototype.addIndexes = function(dirs) { + try { + var writer = this.getWriter(); + writer.addIndexes(dirs); + } finally { + writer.close(); + } + return; +}; + +/** + * return the analyzer used within this index + */ +helma.Search.Index.prototype.getAnalyzer = function() { + this.checkWriteLock(); + try { + var writer = this.getWriter(); + return writer.getAnalyzer(); + } finally { + writer.close(); + } + return; +}; + +/** + * create a new index + */ +helma.Search.Index.prototype.create = function() { + try { + var writer = this.getWriter(true); + return true; + } finally { + writer.close(); + } + return; +}; + +/** + * clear the index by re-creating it + */ +helma.Search.Index.prototype.clear = function() { + this.create(); + return true; +}; + +/** + * return the number of documents in the index + */ +helma.Search.Index.prototype.size = function() { + this.checkWriteLock(); + try { + var writer = this.getWriter(); + var size = writer.docCount(); + return size; + } finally { + writer.close(); + } + return; +} + +/** + * optimize the index + */ +helma.Search.Index.prototype.optimize = function() { + this.checkWriteLock(); + try { + var writer = this.getWriter(); + writer.optimize(); + } finally { + writer.close(); + } + return; +}; + +/** + * return an array containing all field Names + * indexed in this index + * @return Object java Array + */ +helma.Search.Index.prototype.getFieldNames = function() { + try { + var reader = this.getReader(); + var coll = reader.getFieldNames(); + // FIXME: should return a JS Array, not a Java Array + return coll.toArray(); + } finally { + reader.close(); + } + return; +}; + +/** + * check if the index is locked + * @return Boolean + */ +helma.Search.Index.prototype.isLocked = function() { + try { + var reader = this.getReader(); + return helma.Search.PKG.index.IndexReader.isLocked(reader.directory()); + } finally { + reader.close(); + } + return; +}; + +/** + * unlock the index + */ +helma.Search.Index.prototype.unlock = function() { + try { + var reader = this.getReader(); + helma.Search.PKG.index.IndexReader.unlock(reader.directory()); + return true; + } finally { + reader.close(); + } + return; +}; + +/** + * return an Array containing all terms of an index + * @param String field name (optional) + * @param String field value (optional) + * @return Object Array containing terms + */ +helma.Search.Index.prototype.getTerms = function(field, str) { + try { + var reader = this.getReader(); + var arr = []; + var e; + if (field && str) { + e = reader.terms(new helma.Search.PKG.index.Term(field, str)); + } else { + e = reader.terms(); + } + while (e.next()) { + arr.push(e.term()); + } + e.close(); + return arr; + } finally { + reader.close(); + } + return; +}; + +/** + * close the directory of this index to + * future operations + */ +helma.Search.Index.prototype.close = function() { + this.checkWriteLock(); + try { + var reader = this.getReader(); + var dir = reader.directory(); + dir.close(); + } finally { + reader.close(); + } + return; +}; + +/** + * add a document object to the index + * @param Object either a single Document object + * or a Hashtable/Vector containing numerous + * Document objects to add to the index + */ +helma.Search.Index.prototype.addDocument = function(d) { + this.checkWriteLock(); + try { + var writer = this.getWriter(); + if (d instanceof java.util.Hashtable || d instanceof java.util.Vector) { + var e = d.elements(); + while (e.hasMoreElements()) + writer.addDocument(e.nextElement().getDocument()); + } else { + writer.addDocument(d.getDocument()); + } + } finally { + writer.close(); + } + return; +}; + +/** + * remove those document(s) from the index whose + * field-value matches the passed arguments + * @param String Name of the field + * @param Object either a single string value or a + * Hashtable/Vector containing numerous + * key values of Documents to remove from index + */ +helma.Search.Index.prototype.removeDocument = function(fieldName, fieldValue) { + + /** + * private method that does the actual + * removal in the index + */ + var remove = function(name, value) { + return reader["delete"](new helma.Search.PKG.index.Term(name, value)); + } + + this.checkWriteLock(); + try { + var reader = this.getReader(); + if (fieldValue instanceof java.util.Hashtable || fieldValue instanceof java.util.Vector) { + var result = []; + var e = fieldValue.elements(); + while (e.hasMoreElements()) + result.push(remove(fieldName, e.nextElement())); + return result; + } else + return remove(fieldName, fieldValue); + } finally { + reader.close(); + } + return; +}; + +/////////////////////////////////////////// +// Query constructors +/////////////////////////////////////////// + +/** + * static constructor for Query objects + * contains basic methods inherited by other types of Query objects + */ +helma.Search.QueryBase = function() { + this.toString = function(field) { + return "[" + this.getQuery().toString(field) + "]"; + }; + this.getBoost = function() { + return this.getQuery().getBoost(); + }; + this.setBoost = function(fact) { + this.getQuery().setBoost(fact); + return; + }; +}; + +/** + * Term Query constructor + * @param String name of the field + * @param String query string + * @return Object TermQuery object + */ +helma.Search.TermQuery = function(field, str) { + var t = new helma.Search.PKG.index.Term(field, str); + var wrappedQuery = new helma.Search.PKG.search.TermQuery(t); + + /** + * getter for wrapped java object + */ + this.getQuery = function() { + return wrappedQuery; + }; + return this; +}; +helma.Search.TermQuery.prototype = new helma.Search.QueryBase; + +/** + * Boolean Query constructor + * @param String name of the field + * @param String query string + * @return Object BooleanQuery object + */ +helma.Search.BooleanQuery = function(field, str, clause, analyzer) { + var wrappedQuery = new helma.Search.PKG.search.BooleanQuery(); + + /** + * getter for wrapped java object + */ + this.getQuery = function() { + return wrappedQuery; + }; + + /** + * directly call addTerm if constructor was + * called with arguments + */ + if (field && str) { + this.addTerm.apply(this, arguments); + } + + return this; +}; +helma.Search.BooleanQuery.prototype = new helma.Search.QueryBase; + +/** + * add a term to the wrappedQuery object. this method can be called + * with two, three or four arguments, eg.: + * addTerm("fieldname", "querystring") + * addTerm("fieldname", "querystring", "and") + * addTerm("fieldname", "querystring", helma.Search.getAnalyzer("de")) + * addTerm("fieldname", "querystring", "not", helma.Search.getAnalyzer("simple")) + * + * @param Object either a String or an Array containing Strings + * that determine the index field(s) to match + * @param String string to match + * @param String boolean clause ("or"|"not", default is "and") + * @param Object instance of analysis.Analyzer + */ +helma.Search.BooleanQuery.prototype.addTerm = function(field, str, clause, analyzer) { + if (arguments.length == 3 && arguments[2] instanceof helma.Search.PKG.analysis.Analyzer) { + analyzer = arguments[2]; + clause = "or"; + } + if (!analyzer) + analyzer = helma.Search.getAnalyzer(); + + var q; + try { + if (field instanceof Array) + q = helma.Search.PKG.queryParser.MultiFieldQueryParser.parse(str, field, analyzer); + else + q = helma.Search.PKG.queryParser.QueryParser.parse(str, field, analyzer); + } catch (e) { + return; + } + + switch (clause) { + case "or": + this.getQuery().add(q, false, false); + break; + case "not": + this.getQuery().add(q, false, true); + break; + default: + this.getQuery().add(q, true, false); + } + return; +}; + +/** + * "merge" a query object with a query object passed as + * argument + * @param Object Query object + * @param String boolean clause ("or"|"not", default is "and") + */ +helma.Search.BooleanQuery.prototype.addQuery = function(q, clause) { + switch (clause) { + case "or": + this.getQuery().add(q.getQuery(), false, false); + break; + case "not": + this.getQuery().add(q.getQuery(), false, true); + break; + default: + this.getQuery().add(q.getQuery(), true, false); + } + return; +}; + +/** + * Phrase Query constructor + * @param String name of the field + * @param String query string + * @return Object PhraseQuery object + */ +helma.Search.PhraseQuery = function(field, str) { + var wrappedQuery = new helma.Search.PKG.search.PhraseQuery(); + + /** + * add a term to the end of the phrase query + */ + this.addTerm = function(field, str) { + var t = new helma.Search.PKG.index.Term(field, str); + wrappedQuery.add(t); + return; + }; + + /** + * getter for wrapped java object + */ + this.getQuery = function() { + return wrappedQuery; + }; + + if (field && str) + this.addTerm(field, str); + delete this.base; + return this; +}; +helma.Search.PhraseQuery.prototype = new helma.Search.QueryBase; + +/** + * Range Query constructor + * @param String name of the field + * @param String min value (can be null) + * @param String max value (can be null) + * @param Boolean if true min/max values are included + * @return Obj JS wrapper object + */ +helma.Search.RangeQuery = function(field, from, to, inclusive) { + if (!field) + throw("Missing field name in RangeQuery()"); + if (arguments.length < 4) + inclusive = true; + var t1 = from ? new helma.Search.PKG.index.Term(field, from) : null; + var t2 = to ? new helma.Search.PKG.index.Term(field, to) : null; + var wrappedQuery = new helma.Search.PKG.search.RangeQuery(t1, t2, inclusive); + + /** + * getter for wrapped java object + */ + this.getQuery = function() { + return wrappedQuery; + }; + + return this; +}; +helma.Search.RangeQuery.prototype = new helma.Search.QueryBase; + +/** + * Fuzzy Query constructor + * @param String name of the field + * @param String query string + * @return Object FuzzyQuery object + */ +helma.Search.FuzzyQuery = function(field, str) { + var t = new helma.Search.PKG.index.Term(field, str); + var wrappedQuery = new helma.Search.PKG.search.FuzzyQuery(t); + + /** + * getter for wrapped java object + */ + this.getQuery = function() { + return wrappedQuery; + }; + + return this; +}; +helma.Search.FuzzyQuery.prototype = new helma.Search.QueryBase; + +/** + * Prefix Query constructor + * @param String name of the field + * @param String query string + * @return Object PrefixQuery object + */ +helma.Search.PrefixQuery = function(field, str) { + var t = new helma.Search.PKG.index.Term(field, str); + var wrappedQuery = new helma.Search.PKG.search.PrefixQuery(t); + + /** + * getter for wrapped java object + */ + this.getQuery = function() { + return wrappedQuery; + }; + + return this; +}; +helma.Search.PrefixQuery.prototype = new helma.Search.QueryBase; + +/** + * Wildcard Query constructor + * @param String name of the field + * @param String query string + * @return Object WildcardQuery object + */ +helma.Search.WildcardQuery = function(field, str) { + var t = new helma.Search.PKG.index.Term(field, str); + var wrappedQuery = new helma.Search.PKG.search.WildcardQuery(t); + + /** + * getter for wrapped java object + */ + this.getQuery = function() { + return wrappedQuery; + }; + + return this; +}; +helma.Search.WildcardQuery.prototype = new helma.Search.QueryBase; + + +/////////////////////////////////////////// +// Document +/////////////////////////////////////////// + +/** + * constructor function for Document objects that wrap + * a Lucene Document object + * @param Object (optional) Lucene Document object + */ +helma.Search.Document = function(document) { + if (!document) + document = new helma.Search.PKG.document.Document(); + + /** + * return the Lucene Document object wrapped + * by this javascript Document object + */ + this.getDocument = function() { + return document; + }; + + return this; +}; + +/** + * adds a field to this document. + * @param String Name of the field + * @param String Value of the field + * @param Object Parameter object (optional) containing + * the following properties: + * .store (Boolean) + * .index (Boolean) + * .tokenize (Boolean) + */ +helma.Search.Document.prototype.addField = function(name, value, param) { + if (!param) + param = {store: true, index: true, tokenize: true}; + if (value === null) + value = ""; + // if value is a date convert it + if (value instanceof Date) + value = helma.Search.PKG.document.DateField.timeToString(value.getTime()); + var f = new helma.Search.PKG.document.Field(String(name), + String(value), + param.store, + param.index, + param.tokenize); + this.getDocument().add(f); + return; +}; + +/** + * return a single document field + * @param String name of the field + * @return Object containing the following parameters: + * .name (String) name of the Field + * .boost (Int) boost factor + * .indexed (Boolean) true if Field is indexed, false otherwise + * .stored (Boolean) true if Field is stored, false otherwise + * .tokenized (Boolean) true if Field is tokenized, false otherwise + * .value (String) value of the Field + */ +helma.Search.Document.prototype.getField = function(name) { + var f = this.getDocument().getField(name); + if (f != null) { + return ({name: name, + boost: f.getBoost(), + indexed: f.isIndexed(), + stored: f.isStored(), + tokenized: f.isTokenized(), + value: f.stringValue()}); + } else { + return null; + } +}; + +/** + * return a single document field as Date Object + * @param String name of the field + */ +helma.Search.Document.prototype.getDateField = function(name) { + var f = this.getDocument().getField(name); + if (f != null) { + return ({name: name, + boost: f.getBoost(), + indexed: f.isIndexed(), + stored: f.isStored(), + tokenized: f.isTokenized(), + value: new Date(helma.Search.PKG.document.DateField.stringToTime(f.stringValue()))}); + } else { + return null; + } +}; + +/** + * return the fields of a document + */ +helma.Search.Document.prototype.getFields = function() { + var e = this.getDocument().fields(); + var result = []; + while (e.hasMoreElements()) { + result.push(this.getField(e.nextElement().name())); + } + return result; +}; + +/** + * returns the boost factor of a document + */ +helma.Search.Document.prototype.getBoost = function() { + return this.getDocument().getBoost(); +}; + +/** + * sets the boost factor of a document + */ +helma.Search.Document.prototype.setBoost = function(boost) { + this.getDocument().setBoost(boost); + return; +}; + +helma.Search.Document.prototype.toString = function() { + return "[Document Object]"; +}; + + +/////////////////////////////////////////// +// helma library stuff +/////////////////////////////////////////// + +helma.lib = "Search"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Skin.js b/helma/Skin.js new file mode 100644 index 00000000..cc90dbb9 --- /dev/null +++ b/helma/Skin.js @@ -0,0 +1,82 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Skin.js,v $ + * $Author: czv $ + * $Revision: 1.5 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.Skin = function(source, encFlag) { + var Base64 = Packages.helma.util.Base64; + + if (!encFlag) { + var skin = createSkin(source); + } else { + var encoded = source; + source = new java.lang.String(source); + var bytes = Base64.decode(source.toCharArray()); + var skin = createSkin(new java.lang.String(bytes, "UTF-8")); + } + + this.toString = function() { + return source; + }; + + this.valueOf = function() { + if (encFlag) + return encoded; + var bytes = new java.lang.String(source).getBytes("UTF-8"); + return new java.lang.String(Base64.encode(bytes)); + }; + + this.render = function(param) { + return renderSkin(skin, param); + }; + + this.renderAsString = function(param) { + return renderSkinAsString(skin, param); + }; + + this.containsMacro = function(name, handler) { + res.push(); + res.write("<% *"); + if (handler) { + res.write(handler); + res.write("."); + } + res.write(name); + res.write(" *%>"); + var re = new RegExp(res.pop(), "g"); + return re.test(source); + }; + + for (var i in this) + this.dontEnum(i); + + return this; +}; + + +helma.Skin.BASE64 = true; + + +helma.lib = "Skin"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Ssh.js b/helma/Ssh.js new file mode 100644 index 00000000..25505cf5 --- /dev/null +++ b/helma/Ssh.js @@ -0,0 +1,331 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Ssh.js,v $ + * $Author: czv $ + * $Revision: 1.4 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +// take care of any dependencies +app.addRepository('modules/helma/File.js'); +app.addRepository('modules/helma/ganymed-ssh2.jar'); + + +if (!global.helma) { + global.helma = {}; +} + +/** + * constructor + */ +helma.Ssh = function(server, hosts) { + var SSHPKG = Packages.ch.ethz.ssh2; + var SSHPKGNAME = "ganymed-ssh2.jar"; + var SSHPKGURL = "http://www.ganymed.ethz.ch/ssh2"; + var className = "helma.Ssh"; + var paranoid = false; + var verifier = null; + var knownHosts, connection; + + try { + knownHosts = new SSHPKG.KnownHosts(); + connection = new SSHPKG.Connection(server); + } catch (e) { + if (e instanceof TypeError == false) + throw(e); + throw("helma.Ssh needs " + SSHPKGNAME + + " in lib/ext or application directory " + + "[" + SSHPKGURL + "]"); + } + + var SimpleVerifier = { + verifyServerHostKey: function(hostname, port, serverHostKeyAlgorithm, serverHostKey) { + var result = knownHosts.verifyHostkey(hostname, serverHostKeyAlgorithm, serverHostKey); + switch (result) { + case SSHPKG.KnownHosts.HOSTKEY_IS_OK: + debug("verifyServerHostKey", "received known host key, proceeding"); + return true; + case SSHPKG.KnownHosts.HOSTKEY_IS_NEW: + if (paranoid == true) { + debug("verifyServerHostKey", "received unknown host key, rejecting"); + return false; + } else { + debug("verifyServerHostKey", "received new host key, adding temporarily to known hosts"); + var hn = java.lang.reflect.Array.newInstance(java.lang.String, 1); + hn[0] = hostname; + knownHosts.addHostkey(hn, serverHostKeyAlgorithm, serverHostKey); + return true; + } + case SSHPKG.KnownHosts.HOSTKEY_HAS_CHANGED: + debug("verifyServerHostKey", "WARNING: host key has changed, rejecting"); + default: + return false; + } + return; + } + }; + + /** + * private method for creating an instance of + * java.io.File based on various argument types + * @param a String or an instance of helma.File or java.io.File + */ + var getFile = function(arg) { + if (arg instanceof helma.File) { + return new java.io.File(arg.getAbsolutePath()); + } else if (arg instanceof java.io.File) { + return arg; + } else if (arg.constructor == String) { + return new java.io.File(arg); + } + return null; + }; + + /** + * private method that connects to the remote server + * @return Boolean + */ + var connect = function() { + try { + var info = connection.connect(verifier); + debug("connect", "connected to server " + server); + return true; + } catch (e) { + error("connect", "connection to " + server + " failed."); + } + return false; + }; + + /** + * debug output method + * @param String name of method + * @param String debug message + */ + var debug = function(methodName, msg) { + var msg = msg ? " " + msg : ""; + app.debug(className + ":" + methodName + msg); + return; + }; + + /** + * error output method + * @param String name of method + * @param String error message + */ + var error = function(methodName, msg) { + var tx = java.lang.Thread.currentThread(); + tx.dumpStack(); + app.log("Error in " + className + ":" + methodName + ": " + msg); + return; + }; + + /** + * reads a known hosts file + * @param Object String or instance of helma.File or java.io.File + */ + this.addKnownHosts = function(file) { + try { + knownHosts.addHostkeys(getFile(file)); + verifier = new SSHPKG.ServerHostKeyVerifier(SimpleVerifier); + return true; + } catch (e) { + error("addKnownHosts", "Missing or invalid known hosts file '" + file + "'"); + } + return false; + }; + + /** + * connects to a remote host with username/password authentication + * @param String username + * @param String password + * @return Boolean + */ + this.connect = function(username, password) { + if (!username || !password) { + error("connect", "Insufficient arguments."); + } else if (connect() && connection.authenticateWithPassword(username, password)) { + debug("connect", "authenticated using password"); + return true; + } else { + error("connect", "Authentication failed!"); + } + return false; + }; + + /** + * connects to a remote host using private key and passphrase + * @param String username + * @param String path to keyfile + * @param String passphrase (if needed by key) + * @return Boolean + */ + this.connectWithKey = function(username, key, passphrase) { + var keyFile; + if (!username || !(keyFile = getFile(key))) { + error("connectWithKey", "Insufficient or wrong arguments."); + } else if (connect() && connection.authenticateWithPublicKey(username, keyFile, passphrase)) { + debug("connectWithKey", "authenticated with key"); + return true; + } else { + error("connectWithKey", "Authentication failed!"); + } + return false; + }; + + /** + * disconnect a session + */ + this.disconnect = function() { + connection.close(); + debug("disconnect", "disconnected from server " + server); + return; + }; + + /** + * returns true if the ssh client is connected + * @return Boolean + */ + this.isConnected = function() { + return (connection != null && connection.isAuthenticationComplete()); + }; + + /** + * copies a file to the remote server + * @param String path to local file that should be copied + * to remote server. If the argument is a + * String Array, all files specified in the + * Array are copied to the server + * @param String path to remote destination directory + * @param String (optional) 4-digit permission mode string (eg. "0755"); + * @return Boolean + */ + this.put = function(localFile, remoteDir, mode) { + if (!localFile || !remoteDir) { + error("put", "Insufficient arguments."); + } else if (!this.isConnected()) { + error("put", "Not connected. Please establish a connection first."); + } else { + try { + var scp = connection.createSCPClient(); + if (mode != null) + scp.put(localFile, remoteDir, mode); + else + scp.put(localFile, remoteDir); + debug("put", "copied '" + localFile + "' to '" + remoteDir + "'"); + return true; + } catch (e) { + error("put", e); + } + } + return false; + }; + + /** + * copies a file from the remote server. + * @param String path to remote file that should be copied + * to remote server. If the argument is a + * String Array, all files specified in the + * Array are copied from the remote server + * @param String path to local destination directory + * @return Boolean + */ + this.get = function(remoteFile, targetDir) { + if (!remoteFile || !targetDir) { + error("get", "Insufficient arguments."); + } else if (!this.isConnected()) { + error("get", "Not connected. Please establish a connection first."); + } else { + try { + var scp = connection.createSCPClient(); + scp.get(remoteFile, targetDir); + debug("get", "copied '" + remoteFile + "' to '" + targetDir + "'"); + return true; + } catch (e) { + error("get", e); + } + } + return false; + }; + + /** + * executes a command on the remote server + * (scp must be in PATH on the remote server) + * @param String the command to execute + * @return String result of the command + */ + this.execCommand = function(cmd) { + if (!this.isConnected()) { + error("execCommand", "Not connected. Please establish a connection first."); + } else { + var session = connection.openSession(); + try { + session.execCommand(cmd); + var stdout = new SSHPKG.StreamGobbler(session.getStdout()); + var br = new java.io.BufferedReader(new java.io.InputStreamReader(stdout)); + res.push(); + while (true) { + if (!(line = br.readLine())) + break; + res.writeln(line); + } + debug("execCommand", "executed command '" + cmd + "'"); + return res.pop(); + } catch (e) { + error("execCommand", e); + } finally { + session.close(); + } + } + }; + + /** + * toggle paranoia mode + * @param Boolean + */ + this.setParanoid = function(p) { + paranoid = (p == true) ? true : false; + return; + }; + + /** + * returns true if in paranoid mode + * @return Boolean + */ + this.isParanoid = function() { + return paranoid; + }; + + /** + * main constructor body + */ + if (hosts) { + this.addKnownHosts(hosts); + } + + for (var i in this) + this.dontEnum(i); + return this; +}; + + +helma.Ssh.toString = function() { + return "[helma.Ssh]"; +}; + + +helma.lib = "Ssh"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/Url.js b/helma/Url.js new file mode 100644 index 00000000..65153318 --- /dev/null +++ b/helma/Url.js @@ -0,0 +1,78 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Url.js,v $ + * $Author: czv $ + * $Revision: 1.4 $ + * $Date: 2006/04/18 13:06:58 $ + */ + + +if (!global.helma) { + global.helma = {}; +} + +helma.Url = function(str) { + if (!str || !helma.Url.PATTERN.test(str)) + throw Error("Cannot create helma.Url: insufficient arguments"); + + // filter punctuation from user-generated urls + // FIXME: a) can this be done in helma.Url.PATTERN? + // b) should it be done rather in methods like activateUrls? + str = str.replace(/[,.;:]\s/, ""); + + var parts = helma.Url.PATTERN.exec(str); + this.protocol = parts[1]; + + if (!parts[2]) { + if (parts[3]) + this.user = parts[3]; + } else { + this.user = parts[2]; + if (parts[3]) + this.password = parts[3]; + } + + if (!parts[4]) + throw Error("Cannot create helma.Url: missing host part"); + + this.domainName = parts[4]; // actually, the fully-qualified domain name + var fqdnParts = this.domainName.split("."); + if (fqdnParts.length < 3) + this.host = ""; + else { + this.host = fqdnParts[0]; + fqdnParts.splice(0, 1); + } + this.topLevelDomain = fqdnParts[fqdnParts.length-1]; + this.domain = fqdnParts.join("."); + + this.pathString = parts[5] || ""; + if (this.pathString.indexOf("/") == 0) + this.pathString = this.pathString.substring(1); + this.path = this.pathString.split("/"); + this.file = this.path.pop(); + + if (parts[6]) { + this.queryString = parts[6]; + var pairs; + this.query = {}; + parts = parts[6].split("&"); + for (var i in parts) { + pairs = parts[i].split("="); + this.query[pairs[0]] = pairs[1]; + } + } + + return this; +}; + + +helma.Url.PATTERN = /^([^:]*):\/\/+(?:([^\/]*):)?(?:([^\/]*)@)?([\w\-_.]*[^.])(\/[^?]*)?(?:\?(.*))?$/; diff --git a/helma/Zip.js b/helma/Zip.js new file mode 100644 index 00000000..d311af40 --- /dev/null +++ b/helma/Zip.js @@ -0,0 +1,411 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: helma.Zip.js,v $ + * $Author: czv $ + * $Revision: 1.6 $ + * $Date: 2006/04/18 13:06:58 $ + */ + +// take care of any dependencies +app.addRepository('modules/helma/File.js'); + + +if (!global.helma) { + global.helma = {}; +} + +/** + * constructor function for Zip Objects + * @param either + * - (Object) a File object + * - (Object) an instance of Helma.File + * - (Object) an instance of java.io.File + * - (String) the path to the zip file + */ +helma.Zip = function (file) { + + /** + * private function that extracts the data of a file + * in a .zip archive. If a destination Path is given it + * writes the extracted data directly to disk using the + * name of the ZipEntry Object, otherwise it returns the + * byte array containing the extracted data + * @param Object jAva.util.zip.ZipFile Object + * @param Object java.util.zip.ZipEntry Object to extract + * @param String destination path to extract ZipEntry Object to + * @return Object ByteArray containing the data of the ZipEntry + */ + var extractEntry = function(zFile, entry, destPath) { + var size = entry.getSize(); + if (entry.isDirectory() || size <= 0) + return null; + + var zInStream = new java.io.BufferedInputStream(zFile.getInputStream(entry)); + var buf = new java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, size); + zInStream.read(buf, 0, size); + zInStream.close(); + + if (!destPath) { + // no filesystem destination given, so return + // the byte array containing the extracted data + return buf; + } + // extract the file to the given path + var dest = new java.io.File(destPath, entry.getName()); + if (entry.isDirectory()) + dest.mkdirs(); + else if (buf) { + if (!dest.getParentFile().exists()) + dest.getParentFile().mkdirs(); + try { + var outStream = new java.io.BufferedOutputStream(new java.io.FileOutputStream(dest)); + outStream.write(buf, 0, size); + } finally { + outStream.close(); + } + } + return null; + }; + + /** + * private function for adding a single file to the .zip archive + * @param Object java.util.zip.ZipOutputStream + * @param Object instance of java.io.File representing the file to be added + * @param Int compression-level (0-9) + * @param String path of the directory in the archive to which the + * file should be added (optional) + */ + var addFile = function(zOutStream, f, level, pathPrefix) { + var fInStream = new java.io.BufferedInputStream(new java.io.FileInputStream(f), f.length()); + buf = new java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, f.length()); + fInStream.read(buf, 0, f.length()); + + var name = new java.lang.StringBuffer(); + if (pathPrefix) { + // append clean pathPrefix to name buffer + var st = new java.util.StringTokenizer(pathPrefix, "\\/"); + while (st.hasMoreTokens()) { + name.append(st.nextToken()); + name.append("/"); + } + } + name.append(f.getName()); + var entry = new java.util.zip.ZipEntry(name.toString()); + entry.setSize(f.length()); + entry.setTime(f.lastModified()); + zOutStream.setLevel(level); + zOutStream.putNextEntry(entry); + zOutStream.write(buf, 0, buf.length); + zOutStream.closeEntry(); + fInStream.close(); + return true; + }; + + /** + * private function that constructs an instance + * of java.io.File based on a JS File or Helma.File object + * @param Object either a string or an instance of java.io.File, File or Helma.File + * @return Object instance of java.io.File + */ + var evalFile = function(f) { + if (f instanceof java.io.File) + return f; + var result; + if (typeof f == "string") + result = new java.io.File(f); + else + result = new java.io.File(f.getAbsolutePath()); + if (!result.exists()) + throw("Error creating Zip Object: File '" + f + "' doesn't exist."); + return result; + }; + + /** + * returns an array containing the entries of a .zip file as objects + * (see Entry for description) + * @param Object File object representing the .zip file on disk + * @return Object result object + */ + this.list = function() { + var result = new helma.Zip.Content(); + var zFile = new java.util.zip.ZipFile(file); + var entries = zFile.entries(); + while (entries.hasMoreElements()) + result.add(new helma.Zip.Entry(entries.nextElement())); + zFile.close(); + return result; + }; + + /** + * extracts a single file from a .zip archive + * if a destination path is given it directly writes + * the extracted file to disk + * @param Object File object representing the .zip file on disk + * @param String Name of the file to extract + * @param String (optional) destination path to write file to + * @return Object JS Object (see Entry for description) + */ + this.extract = function(name, destPath) { + var zFile = new java.util.zip.ZipFile(file); + var entry = zFile.getEntry(name); + if (!entry) + return null; + var result = new helma.Zip.Entry(entry); + result.data = extractEntry(zFile, entry, destPath); + zFile.close(); + return result; + }; + + /** + * extracts all files in a .zip archive + * if a destination path is given it directly writes + * the extracted files to disk (preserves directory structure + * of .zip archive if existing!) + * @param String (optional) destination path to write file to + * @return Object Array containing JS objects for each entry + * (see Entry for description) + */ + this.extractAll = function(destPath) { + var result = new helma.Zip.Content(); + var zFile = new java.util.zip.ZipFile(file); + var entries = zFile.entries(); + while (entries.hasMoreElements()) { + var entry = entries.nextElement(); + var e = new helma.Zip.Entry(entry); + e.data = extractEntry(zFile, entry, destPath); + result.add(e); + } + zFile.close(); + return result; + }; + + /** + * adds a single file or a whole directory (recursive!) to the .zip archive + * @param either + * - (Object) a File object + * - (Object) an instance of java.io.File + * - (String) the path to the file that should be added + * @param Int Level to use for compression (default: 9 = best compression) + * @param String name of the directory in the archive into which the + * file should be added (optional) + * @return Boolean true + */ + this.add = function (f, level, pathPrefix) { + var f = evalFile(f); + + // evaluate arguments + if (arguments.length == 2) { + if (typeof arguments[1] == "string") { + pathPrefix = arguments[1]; + level = 9; + } else { + level = parseInt(arguments[1], 10); + pathPrefix = null; + } + } else if (level == null || isNaN(level)) { + level = 9; + } + // only levels between 0 and 9 are allowed + level = Math.max(0, Math.min(9, arguments[1])); + + if (f.isDirectory()) { + // add a whole directory to the zip file (recursive!) + var files = (new helma.File(f.getAbsolutePath())).listRecursive(); + for (var i in files) { + var fAdd = new java.io.File(files[i]); + if (!fAdd.isDirectory()) { + var p = fAdd.getPath().substring(f.getAbsolutePath().length, fAdd.getParent().length); + if (pathPrefix) + p = pathPrefix + p; + addFile(zOutStream, fAdd, level, p); + } + } + } else + addFile(zOutStream, f, level, pathPrefix); + return true; + }; + + /** + * adds a new entry to the zip file + * @param Object byte[] containing the data to add + * @param String name of the file to add + * @param Int compression level (0-9, default: 9) + * @return Boolean true + */ + this.addData = function(buf, name, level) { + var entry = new java.util.zip.ZipEntry(name); + entry.setSize(buf.length); + entry.setTime(new Date()); + if (level == null || isNaN(level)) + zOutStream.setLevel(9); + else + zOutStream.setLevel(Math.max(0, Math.min(9, parseInt(level, 10)))); + zOutStream.putNextEntry(entry); + zOutStream.write(buf, 0, buf.length); + zOutStream.closeEntry(); + return true; + }; + + /** + * closes the ZipOutputStream + */ + this.close = function() { + zOutStream.close(); + return; + }; + + /** + * returns the binary data of the zip file + * @return Object ByteArray containing the binary data of the zip file + */ + this.getData = function() { + return bOutStream.toByteArray(); + }; + + /** + * saves the archive by closing the output stream + * @param String path (including the name) to save the zip file to + * @return Boolean true + */ + this.save = function(dest) { + if (!dest) + throw new Error("no destination for ZipFile given"); + // first of all, close the ZipOutputStream + zOutStream.close(); + var destFile = new java.io.File(dest); + try { + var outStream = new java.io.FileOutputStream(destFile); + bOutStream.writeTo(outStream); + } finally { + outStream.close(); + } + return true; + }; + + this.toString = function() { + if (file) + return "[Zip Object " + file.getAbsolutePath() + "]"; + else + return "[Zip Object]"; + }; + + /** + * constructor body + */ + var bOutStream = new java.io.ByteArrayOutputStream(); + var zOutStream = new java.util.zip.ZipOutputStream(bOutStream); + if (file) { + file = evalFile(file); + } + + for (var i in this) + this.dontEnum(i); + + return this; +} + +/** + * constructor for Content Objects + */ +helma.Zip.Content = function() { + this.toc = []; + this.files = {}; + + /** + * adds a Zip Entry object to the table of contents + * and the files collection + * @param Object instance of helma.Zip.Entry + */ + this.add = function(entry) { + // add the file to the table of contents array + this.toc.push(entry); + // plus add it to the files tree + var re = /[\\\/]/; + var arr = entry.name.split(re); + var cnt = 0; + var curr = this.files; + var propName; + while (cnt < arr.length-1) { + propName = arr[cnt++]; + if (!curr[propName]) + curr[propName] = new Object(); + curr = curr[propName]; + } + curr[arr[cnt]] = entry; + return; + }; + + for (var i in this) + this.dontEnum(i); + + return this; +}; + + +/** + * constructor for Entry objects holding the meta-data of a zip entry: + * .name (String) name of the entry + * .size (Int) decompressed size of the entry in bytes + * .time (Date) last modification timestamp of the entry or null + * .isDirectory (Boolean) true in case entry is a directory, false otherwise + * .data (ByteArray) ByteArray containing the data of the entry + * @param Object java.util.zip.ZipEntry Object + */ +helma.Zip.Entry = function(entry) { + this.name = entry.getName(); + this.size = entry.getSize(); + this.time = entry.getTime() ? new Date(entry.getTime()) : null; + this.isDirectory = entry.isDirectory(); + this.data = null; + for (var i in this) + this.dontEnum(i); + return this; +}; + + +/** + * extract all files in a ByteArray passed as argument + * and return them as result Array + * @param Object ByteArray containing the data of the .zip File + * @return Object instance of helma.Zip.Content + */ +helma.Zip.extractData = function(zipData) { + var zInStream = new java.util.zip.ZipInputStream(new java.io.ByteArrayInputStream(zipData)); + var result = new helma.Zip.Content(); + + var entry; + while ((entry = zInStream.getNextEntry()) != null) { + var eParam = new helma.Zip.Entry(entry); + if (eParam.isDirectory) + continue; + if (eParam.size == -1) + eParam.size = 16384; + var bos = new java.io.ByteArrayOutputStream(eParam.size); + var buf = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 8192); + var count; + while ((count = zInStream.read(buf)) != -1) + bos.write(buf, 0, count); + eParam.data = bos.toByteArray(); + eParam.size = bos.size(); + result.add(eParam); + } + zInStream.close(); + return result; +}; + + +helma.lib = "Zip"; +helma.dontEnum(helma.lib); +for (var i in helma[helma.lib]) + helma[helma.lib].dontEnum(i); +for (var i in helma[helma.lib].prototype) + helma[helma.lib].prototype.dontEnum(i); +delete helma.lib; diff --git a/helma/ganymed-ssh2.jar b/helma/ganymed-ssh2.jar new file mode 100644 index 0000000000000000000000000000000000000000..8ca7bd747b791c1bebf22b9e6f9b285d8f4e4164 GIT binary patch literal 187326 zcmaI71CS@rwk_PYZQHhO^VgcTZQHhO+nAoVZQI6l_q5*p@44~a7w3EDRz*c2R#sx? z%B)&@r;;ov7#a}N-`%PVixueq+Mt2JfaJy1gz2RfBpAOYfPg@Olw={H{y~8JH%#e2 zCPw><`2P~i3oA%Vh^wkG$V)uRPfg0n(lgA%%hJ=#OwBf{FfFm}9Xm0|$kR#7&%0KE zL1&y{594OgT7adWP`{c{U>;*?Vx*UxV9g@lQcu z{;N>x|5gjozfX-V82>Zip9=j2n7UYa{a+}Je|ru5|AlgPwqW@$=)c$%i>19CgRzaFvvaQ&v=830@7KMp{gx z4fZ+&Dd4#P%-md)lO0v%&XY63a;%>5nZc8|&FNyQ; zBhMS>da=;t*A8PV_-^V9sJR7ZbMVg#kfz%0ArPiPy-KgtNy-(TN*A6QRrVWEwj+>w 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�MmU`=Vmn&K30 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℘iW$AAqD*S4Ob93TUZ{#EW-39!sjau(kvsI?zcddaXlFW zn&t?XT1A}-Welo?9^`hco3@dh-b(nd#r2Vrp56UmZ?71TXE{WeSlmM7cEMC8E$-2I zmy-S^9==GWL-;G)jkNOH7|7&{W-B1bF`>VGO+y`v3n{1We3R&Gea@2aM#oa>q)YIo zDNu@>u|kZdio5pIqDK^lCO3aiq7Ch(8rD_wJufqGT!fyV46)+IV|CgSnm=Itkv<_C z;t~#@VM^5}g{c1z^!ayp85K7s*~kA$B8h~es9Ls0U5s!HcR%ApQM&^4!2F2hi{j(l z0yD*U<-1x?x~*P_tGs?DGt+j};<~apiFRvI}2m*Iyw6|eGUe`UMjP~yQ$+lf~<*#P2gdVhC7`ya_=TE%A-x)EX zgAK%9cAOcpLu-a0@Kq?Yy7zT+LKM&E^6~kGO|jaW?hKIPvz$l<^K9LygJCBMIndI# z-35e;7Vjgd25Vv8hWlyH+k1!|!8E4z&3dZthjUt^aBo=a=&cgtOxQJ|ox%nwaQf13 z?2NY7*C(d$K-_Ty@FQp?(v*_(BGq$y^0S1hGx&=F>8|-6WPV>g4 zQE84iW|3mUIJPQR#@Ec~O#jRtw|x84A$Q7(YZJ*Qc*mdb{|k6Zj`je3tA7NT@-lLt z)mL61Fy&Ox{_bQ9pv-xE{JR6D27-G)+nbees42;35Is5jBmDt<-2{M4oyZ>7X;P*+ zH?P}+!oL@(zpz8ei_VFS4I$;Zn^j0uL+)GK2wqif1dz@{44%ANBAvKW_l3qCbW>o- z7+K!@hPj(flYrdtizpVPElf8<0!V7n{79NnGC*c70UkuSN^S@JpLbr zsbG?Ms{9IXvdsBkq>m;d1|#D715F77Ulm#FG&N_@3w~3f@F64o2J%U?Yf_e{b3d9q zbKG>vmVNns{Q{mF4F`gaUN4?!qz5&|sp?q4XgZ4*Ef_3#8~)2y%6&0ti)WjF{s%%K zRUc8XQQ@k-IGzVjPpplkT4ofu&UUlgQr@WNTz%`@c9-&FODgm$qu#QW`|rYm&sG7L zF|3tdG<26%2aMrvbC0Foq{o>WgMBvN^wO1RjMxl2dy5EtavrwnTG7X3wi~ONSaW6T z9VIn%QpVwQaiOJJ>wI5op=Ul+;a4>+syi?O#B+?(eI2(&tEFCd9?jqCcwQ^B$~Z@8AO+5!D7x@fPNughik z!YtK1){)jIl9w`{R&hEER1j8NgCliOz$jFJW!!wJ7_ccN`A@2p0K=N3@VPAN0vKueWtN$k;X? zw?RCQ2E=$R2hr$wAM~ksuXmIPnxvl7lt0!Z=sZo6Z=~qDX5|};8_PRecWX8`T0gG* zCaZMXf=`6v3I=nLWU-ICYO*I%kGm?dJDeA>r$tnS0Qy`hED8FWxjaAF(WMS7=On3u zZmf(~$1kS0;1};ruNu_tzQv@O&BRIJA*EUGipQ(E_J?DQ;1d~+w$>kwkV_JYbl^Ky!PesDR7xEgt;)X>BUzup+P}T^Ffg)9{H#oH^cPghT5w zQJ7>pE5KZH@dU#RS{0K5E^ezIC(`uH=DK^EzQ9w zgCH4n8l54SFMy5T>)+xe5a8s$B$pyfC~1?E!^mgRfN*)$uJRzOiLpVi+o~!x!~LUQu+(;}qf8c3N^wenMSP zN3g6IIzd@Kzry_`i9AAy(X5)9?nQVtM)j;{iT!t+V(W7)gvYyS!WCTC{SFsj*AN2Z z0-yVJ0)d*HOkc2sctgD?r?t_Ju&92nI!hR{*`5iU#pND-Z4OQ5n~0EUd;(GgrWu2! z0(+kR0P!g2!d1!s={!NvEWQyGyp~N%f_HwNGxEJc<;ixN*(vTZkn#dW!S|!Sb9=Xu zLFT*=)f7`c<>2?7mO4eWOjo0eW$Q%)k_19h5P6ytzA6vjmpn@Wr1I%6o?e7hONrI1 zJINSnS0_f@Jy4xtZ;NuR-^I^qlon~*JarI~XW48qys9^BM^}yPtt1&u>$VX^ zfzE+PO+hPZm_cb!)!)gq71&%(6%ZbeW*Bvg#KzoO@$c=c@d25~GyELYU+?S*zU|II zQnlnv4;7=x?lM8Xcf{LrA|Os~sRSlvqJX=y=%eLG3_nx%n(GR&CrpuM4jdvbUbP0+ zKXdnTc=B#*clp}le-~%Zp(E7p#z3LnlY+#!E)0x#X6z;DNVcW;F541W{k3AB3M%DR zC6FrdJ&9YqC4319+%2>wdI=@i6-2+YZoL}^3dapa9|Zv=cw`K&0)C@E{RnY!v%76( z`$hhUQ}rVluEAZVur13Le-!GmC!nSYdSX@6TxAVu=3&+v;`|9FOpNSdPCEW3R%ld& za6rWVkw@|3^F(4c(h-dz-=gwJHF6%c?t-3BOh;KTeMi)#rS;5q&O0WfeOna%)Mvm; zXj$Dq-xNs%q7f24DzC&VFyA@9WG(MVf3;nW_rv7blCoz4MPwaQnODqOiUsbHsU#!DBYXrRovMnj56GHa8GM3S-u=-L%GL})S z@cKA#O=CUq*k_TfvnhZL#EW8y`t%BdUJ$$}wFq$zkqg;?UD$(NYJc_+IQGwmFtqi^ zz(%B)ZM*0FycvDMIT5l9J;Weu%_xfYYo9-*W4ASL_eno1y+c2H>Hmu_|Cg8ebHR6( zs)f>;C@PPIC5#c+c%R#YfT?7Z4E-^aA8I@zq_u>&xuC^tL)-u`u!b`Y2MAx`JKC`{ z%$#x2oZPXrw{p>A6=1*@C(~V&>inYfG1FrzX_4;x`!j|wl;tUVKq-FaATz>}+mm8n zWHhF+Q@XTSOWrQ2_3_aluFbDSh8Qrs_m+fi!W+w%r0D9}AKSEazjpQ0LSDJKr>~-d z{rShM&&1XAj7k;P#?w^hR^vH}ttHeBq?a5YxYx!iYbF|e51#9^lUe-6Y#6_%v~ty{ zvTg|WWpcx{T5vc`RkeT}!`#tWWynovZ!~A&(!>h9wVkj2j^t zQ%xfUcglIc)4i40g35R#FUhYk9Kcy_JaOPwgL&UaBPU?Vdxp*}l`luPuNJ=x8atf^U0g*}~zu>q}Tk1f;vnas^88cRq z&tBA?R?yPaJ`#A~LZfjX)>^C|bdY@qGclRwNz`Ll+1Kzg;?t!O$v;|u{6Ve#y}Z@D z+0QY<=w7f;x1LyHypgBu8I%jt72y(xJ;DKea@XI_<%-tnNbBkl5`iM1Pdm&%SOw(Q z4i_sqwt8Pluo(ED-AebPYsEGM2;WZF7Zeh>WIrcvBurijbP!}5a8|eFUc+c>80ik3 zpD>Zxfpg5b%3&)>+TI+fI=NI6VEC3qh@D4V_Htpfayrg;RJK(rC9UDR;t@oYod!)> zm9KcV7I)43Yz)-ZCDHii26)!lLrPiE*aaW%82Xr=;uCTHqV=#B(E}gB&_m5@DwY9A3&z?AMD%yDkTd-N* zbV6;HW|abQ)HX_8j;jQ0mFC!`>uCT`uqJg7h*;NLgxrqTh!fmm6|TPQ6Fw?Pw6m`G zc21%LvBA*{ci#fO?UC;gi<%xf65;c9lkoF+g(?Ud&c~R>C=h&;Y~c@AVDUeujlL{6 z1meu=3O-R0Rf9Ug7LYEz>Vq4i_oRfJk~7Ok`NsKX*kT#G2cik676!5IfE$(pZWVbR zZ}cS=j1`8Amsg3L{vt_d9y{?%8ELXLedH~;pEr`FY=KA;E4wZpMo4~CC*FM8|46+QY6bX0NKhfHvj_~fNn z;H$yiuTxs(ftWlE~p-GZ*rrt_;X~8?q-cBo@w68>hq#hFR8}~b?rwMSE z-GMu`K^Cg_Dl!AUXe5Wd1fRNz-YnRC%)}4R#03@k;S!$`F zedzcMIjJ?v%sSg81UIA^Ro*c9FrE&BPh}cR6$L|uUgZaA=p~@ZM+TsM<%jM0y6^JK!`t~*p@)F?ans?V z_0eVOIqTNb`k_z_$g&rTuZ>}E0MDD9e%{|HRLZWHfS})*&xGrTelaQ(MR4JTkRowm zi&S`fVT+iii$rsl;@QJ)-!hTY<4cX2`NK2)PM>$_D$PI%0>qx{bcm4sTPW(I+qDAS zASiC3o!`O;(WnARvdT@`GJa>tK9fr#0)c7-2=H%3w~ik}F#8>}Uy*^cD>ZfJnxWYH zyk0@IuLU*H)RX6LPB!+}TQob=u%;C22{ptiR=gw?5-g;SXUQ7ky9bT(Qo|?`B+Uh* z0Amy^)q{y0@jSY-lC=%kYkBAnlHM^@2ln8QYGF!#n^)YKAYQjBH`w@JzftRH|cd;b3bkFu5nn!uVAGcPVswZy}nqUwrKu59ck8Lr%u8jIv0cOIy&eJ z_!aFPXbnD2$JV0V58xKC3=nZ4xGj3dFVg%ldO+`A)+q-Aml-rj$_^IhBF)!u^5w5#DLku4aWsVCrWODDJY_0gg;^`U_fzf+DzU; z(`Ty{(x!|!?*;2@rD+C}kcsB8bz>2-E7GTqP{2({g67OslN8{CP{N+!Ss!^cyMCa% zT@Kpr_~>V!AI-ryd1lWCD&p>7RoUjpK+@iI8$z7aJ8>O$2qFQ@5I!2##g941&@32JfG z8a)+s)7rn@ckKT$_RhhTeeJezr_(_vJI;=6+fK*m*tTt>W81cE8y(xWZGL(0{m!}P z{OZ3=i!26tEG3Hw?g(#+14OH81a}eTSyTB2WR$bKo>oP*6t3sKyW357A zZ2=dM4#C;DxaA_`*c(1<8}gXM!$_cX<}mwF>nNlSb1t28j$t_}dVhkx`j>Olbe=#e zN@LRWoqrlI>JR=K`X;qXan6JsW>jVe+(BG z*c1hduWK>4b3EWPp4b+%@J?|D@p#0Pyh}r-`&cRhPeu0^`+FZv6N?QTy4rnHB2va4 zTxVvFLIQtn(1+Mn_}Y;#UeKp3AHw8jS@RwHC*9CD#tcn|PF9z2^^AN{;d4vD@|r?S zOsZyFzOz(&VJ`7uC+`B0lABHLu%PGbT?p@(e$^f<2nq;$P#`MN^>!=Rw&|)wN)*b` z$0JBQHvoaE_mG&}Z|E5u(PO;Cmh6P)M7=+feVK zu~H*g*c@h}wT*_j{sz7Sy|Ocjd8KNKGxh5}IAYl%JfFakJ>tA|%-)6={i3#oxcsem zW!w9Ieb7woD7FV))&x&(H9hfs_~LF+c#*ZUQL0_*BlNJ_LVFQ3ZWZZqY9R$(wTf;V z?|8jwNN&SilX>Cu1ZjuTZY%GUxyZMN-tJI&QELrZ_q(PequTTw)GD{D9@aLSH2HbL^68jHe{7;^r~hx z1r|kt(rS_wO4Xt6@{Wa4qJ>KIhMDy}^`(wwMrv@$3tF?K^A)A0>t<^12P%w(4YT!5 zm{*v>;y}QL1;|YUcI;_)0nx?>*8BX~29|4YYR;|69WAN8tC5$lbGc zI0oCOtt<k+Y^|KHbQ~8jLC)gI6%4SAvg+mn>c;V21}P(3>P_;rS^21g*At0?q%- zb6*1Y0iWgZAggK2uoin&;>z}#-toAc)UcTH_OK|;3yRiL8A+MEU?VLO7K?j)r7zs) ziOtU?Gg=<$702EoO;C4tMdc zxTcZsge7{Wl)4uw%k7d&3FTD7{;G86)+0*nF>xUcdgR9HhNOy2_Oc z%{Wq)Y1(N&%aW5DEKO-n*o zCI|JriB&6?Bxl!|${ST*bW=6Y99E zvolA>ZV#qnGT&>qC4Ck17RDJzzS>n0)fE!{{FN`(e|xd{hUyUYR&OkFd&EAJXSui* zQ%Y<7G;M<2M?GYeZR2V~@O{|fagSna1=fhNLhy!%9G`)D!EK6EddZ(&JO@8Iz-}8EF5TzI zm@Z@&e=R!&H%c-o3B7`FXwCD#4F6tLw>Rh!xR6{)b_#xo>&~mx3g|iyz|B)Y0I+%h zGk)jNW?>|64+_pE>uZe>pLmY2y7`2aEP=Eh?2^*2YOZqNyZu7TY^{MX|G<$1iTsR& zkcS4rJXFh)R?fnSvfR9B{KM`QY=w9rN6{LU`TP`h1bl+^T)X@E7W&~}k<5gKC*&2C zF*iHv!I#-r)4XX!%{kU_x&Sm><5$W9KPJpnX1@|c-EUUU!8nG2^hc z3AMH7D`8RgB^UN@(4sF9I5|gqd((gBwiA?1ZR8h$ADPr0q|oS@*MBVAL3$JSg{T@; zEl~97SXfw8wBSkLb)l)Ei77^NraEL&nJiOj#8w@olN@NDz$68-#l%@nyd9tCC5tko zie|Mnjb5t6CR?gP{H_Bdd+V4lWzeTtl2~$>@G@l5gRPO1J z^2Ga@Khg1WACtI@MEvsbZ<98EDh~W2e0*0%%hY{p#+=+i;(Ch1;Mo_(;i=eWXT7;@ z51hPOnlyV#$27m>X30RyWTzOvxVfmMtie%omPT6&ML?Nz|0 z?h{SlBUo#X?c2{ryKuQ`SBO9qk4{2=^pHhsK!l)3~*|C%z%P@z-4Ei;jPYEGl+_m%Un^Q zu*F9cBUhPsr+E`(qss^#{GM+@Y-K@^o~}m|_Itk3ge!IBH=$<(6QhWT9#?N)?zQOV z-QKaN9i0bjf&nf4?YArX%O zqyud=DRrsHJisI9JV+}u4q=JzrZ=C;#+qaeiVGb*4tA8|@EZ&=l`AJq_EZS{?3Dvm zXaVRcKY168zA~J(0aLhMfGrVMa}cik6`GV>Cp2kZ_V5SL^$J7laSP^6u+J0DD>Tb? zEsN4bZNcp*E1**zTc2U@5R?Ye+V9My?b@K`K+wH;F=fgq;r)Y#!L)JsuJ!339l04%A3^ zkSK}}poE1Nn^LaTXxwmKS0lvVGkO;xLXvQ_JTLN{+@|TODc$V z&tIc7Y>R)*KZ~~OiigNQi@(W^*OYUTa1|ZFA$Kp}qB6{if0x6FxhakZl>;xpinkLT z(Ipqj=OQr_9odzO6nFh4&QU9BbX`M2lwm@|Oy=<&QMlL{ary3t%X^*7n{zZURp{Y2 z+Z&_JhX2S8OZ}=%%thdpU0^k&RPW+eH+6aM>72J8g%_@|*s0iS-;Z1(_62ry^K?DK zm~u6=vPi;tYV3QF~aNsL- zz$^C1l{-Qu#kmQOMhjp_nqD#%g7s5zIQ!#8?|NECS^33Am`R@3a$+Z^ z3V(`=6GyFjdcXuY0h9#RN8m4G`C00{NDW5{+K%_f)>_0N>T-bAc<#n~>*=lO3pw%? zMDrDi!&}VE2a@9cWbuIZlw>W?yP)BXq++rwWX@Th;#BqzbbW4y!McyL%*is-U>H#$ znc@Z}xn4^yw_Qf_@DS5)D$Qxqz5ZB(49g}hL7^6H>4vlbEBPhw;ogrps8?Dw+D{hX z0;jghrH5{Z!cy2Ce-Edv*r0cy2b*Z)8oyTY#wWv^YI&jCK@i4F#`hEC&`5n0p*dB? zA>>D94ejV@@0hSAnb0O#0gyCgA%i_>k>tr@u%v667+L6zh{xz4jnaGfYo3v{fXB&m z;zw^2>+3-RwD2oeHyTNk*9q2ALfBBDo^11gUjLw@Ban*41us&j66B3;Jr= zNoJXfDkhn{Du%6DN6-ehOpvb56~2s2>ufDrx~Xhb43oJqz>hm-aF*i%aF$bI@W!J8 z@WvB!7^Y)G@YH)dP-?dTUrV?#g{Wkxb|s6Z^Umlg-Iy=49YnPGN6 ziWyE#BhQE__n=>;)zfHx`17WXrUVg%YRt#7J<$?%vvsT!{K`rBi}V%LVvBT^hwV~R zKUiimLb*a!~Ia0y_5bTj7Y%PTHSja8_xAq_nTqDrrIzIsvttyWz4x+K0%<6G0mNCGs$-J#Au-rACUaUcF9v14>i_W?|y( zYZ%8~pw1pA8l<Tg0%R9JusQdLMDV!8D#dOPBlQ+f$;|3Cj zOI7Pi8TJt>)#e83(VE5s;Te~#LhvaX1sY11l-lPqP}C8s=W|Pq71KQK|7`B3pVDcM zl&-g$Efg#oH*l%9)ZQs++CAZnUYRMKD^^h8P?xS*2?Rf%)#3X;!iG7^M!wV3nZ=o2 zDi}XZfUr*_l?W7>DHdqcBS26KT9TB}sFK(kIddLz+~UCf^>u`1{T($LxrI!5_<3}< zK^$S`AH&uRyXp^***a-T;@{^rUz*y)tycpq!JRKJ1q*ZN4rIw#<9DQ|p2428M62Rr zL8VH^$CQt`s3z8|(HGfEgD-nb=2+D2WT^A|#c(P-nneVG>P{;vG1QFtoBWMhsa(()(5usYzN5baGe<1OvH@1cCuWhWvl4 zeA6*^%0e%z7po(y1Fgz+xl zP6=*yk2`Ey=U6XV-f6aGbh0~7J?=@p;8+x_dSR}6I!~{Av#virPGNh{uDh>ZgS^Of z3TuN&&!XPcF}<+AFnIZPq9W@(X}$OS^F#=nGmJX_6{dQBg{lAJ6XCy^XLzTaa!*F~8+EM-YIs4Ay8qVg~l#s5bkS_%z$-CaM!36dEnMd48|Eyu<}D zYP*@lk^EL8_A6#4nuJwZ*WRA)2L+Or;@7bKzh{Wfu4=;KE1XDHZY62IT^HZ|<{B6h z?BPu>$0~!HwOd0H{))D8#*7gWS`Gg8PLtRtSiTVbgw3T~x1d>0NZZaXF01RfO*3FQ zIWS0h3p}bd$+Mv0%{V&|H^OGKLl9l^fB>@$armTx<~=@}Ac?(|-xy7LH{L!_yjZk? z#0Nm;eCvUS>JUKq0}>9IgG`7W{;JLC2>*~6p1(d8I=r)A7W;Gg_i>lN1{Z4%XCb&N zL@`o;&(jn9ofDohzctbdK?Pi76F)o3sG{JB=)1mG&}~@yo^CeQtz$KYE_(x}7T(eBawkRiqL98TKGs}sJH-VbmPLS^5Qkp1O8Da5~8@DaBlZ! z>ecrOmjL#oK98Xu#G#-9DG(kc@K6)1Se z^S5_wyvsyyEtd)Hk7j8eUzPM^H9cEid2_1FNhW+0IJ)2A1JKDN13S9tsZ=pFVqAp%V{5)Vx=5(8%#PxMbY5KTVD7W+A?Ax18*AUDV)EjMvj zng7SMGe7p2`!8PMBe7o!ifI1<=wJB4fLOCar@u0VaKwGdC}L**@^X~Pu^c3c0Aq@n za2<+-a080CImQGDVR}VTVMax9jAU>zj1+K*K{`dT)Z{?XK?X&ML3)@3CPtVz!DKU{ z-4ruoYDvdfrNZslpOS<`NGZbNB=qwVB#aTUlDZhwDI;@uDT8xlDHBY>41OhIGlNV@ z3~{FE1}O4%28|xv`d#={xbUakd=^*VZ0A7xmEhphxcDrT_^@R8(q;H8l=;qN_|6pg z&gA&cl=#kM`OXyi&gA*9WcaWY_^{;ou$1^LWce)Q`79Lp(!XB$YL)ozDDWaF@gm9b zq{#8ykl|l}@Q29ohd_8~WO!v{cvK*K5;A-g5PlK}zlaRK2!v-vhGzxBHzC6}0pXpI z;hll-k3e`hWOz6rd=xT#5)fV)2#<;kUj>Ax{c4fnJ)we)p@NH`f|H!5<&zaP1S zx+sB6l5e?!wP*XF0EjNtsRFrR?0yG#>HY?Xv4s!HW#J#J%M& z;vUEUn-cba;^zOWlxs%pq|}@Y@?h60xkEBKh%pw>NYEiCV|t2ARP+bSZ&67Mq@L>N z`GPe%WpneFAwkqikDtzi5tu9_7%u-9zp2)Fz}Q;aB3s~bIhrwy@BJruLg!D;u^kB|G+mF+|dqMF_| z3VqH=ImLAdrfS^O+BcMr?OU*GW&yD>!f6cig*=uk&wR$;!}wz_+-@QO5F=rsG6N%V zHQ^hE9Je#Q>a?|ARbMi$6Rv+Lfv1lSL~)T|B$IKFbB;z_wKYm{14oEfp*vG zW|(3zfo8ukV<$Gb55|tbOPiOw$*>^mVAg)g>uh@mgRObD8|h4ns-sFRrCXPs2{CL? z-!qIwG?vyOQT8ss#eAC_{Ki<9tV}(b(w1ga70 zZc?4f9kYw*ENg_6yhj&@4jLAiG|h$m>1&qf%-JRL?2q7HRXcO;9prcgb{;9#3Z3=) zHIKLx=e^_%ro&i#2_hWsCubC;OaBJJ`=Kp_gg_#PwQ*QmqAj{yi^(np`j5&4q$=Eh zu+_sbfreXO10(p0Gx$Fr9RDF6`d97 zmjZ=L*Z|T&hqCXRqqWP74ziaX%gF=DZN(@FX0Y;mtKf)oIDdv*HIT`E#cBX!9 zna7O&i7z(C^0dn0g_b942m6|nH+Q+WEA^-zi+gFiqr!SI z{0!-eaXB?Q%Lf{U_5%)K9tD!5*MH=9_JuCg^t?UDo-q@L=x(aetc1L^uDQZi!HicO zU@lS^m6lo8ZFkI;0nCi~E{!b$9Qge=_mA-TKP1$SdQQ+t*327Cx;V=R|CoSpk zvQUrutBG~Y*xkH7>S+Kash6sEy8X3H6kag=WoWH1P#vm(mAr(N-EhkA=SY45JCBIi zM0mg0k`feQ$L99#zoxpys7!u?fop>GCr|xcS#2M0D{6G1y43vV%GN7oq@?F7n`1Z6 z{RA+spxmI}2y?9PuyZfj)I^(RF3`{W>IY*>K&uU2kbdEQ&tsW^>8Uym&W_sf$7~jD z%PeJInFjfxopA)UHuUEkKH>?JTEOe2e?{KC;SFK$Ycy0zRd99391nr?>}zovbd;#2 z+`$nx2Sa_MSf2sf3*dP`J*4CFeiweaU<~BMeg;3jKq|zC9`XJgs$I;)@CNxjRR9Fy zU2;J-!SA`c_}yjGbB8HiJ zgN{66p{6DON+UEzO%UB673SW_gueU74u6n@pxB7Nf&X_l^hgjS_}El>?IBlssH4L%LwH%-Zl zzscR6=$6UIH4qGiS2DeX2(DCP^>mEAL_}laF1_#$VVBJVbm=rJZLP8lcJ3OJN%m_y zt-9#X0z(dWiZO9I(O5~SP-{lPSxHt&_f3XF^e~j_e~V@kRc9I2ivYVZ(42;vX_x{1 zMhvZk@S-S9>;fVy^-p#!)dS~>`jpZ!l@9dAdy9Zo|h5bq>`yzvHWw}TI@>nfc8^Y2ZEzaECAdD(Q zswv|Wg)u=XV!mZcsIAkwrts8}VN1^u4gQ>gwmNvNVE9R0f{thjG;l_%hue z1I60BX!<}{ljab#7cvf&<)DLipTqUuZ;l8XmTLD1I5R{MxtAjK(GcauC#dyU0xQ`Q zya)y&OpmjtoWiH{zf3DGMziP~LL2YR1WN$Q6aue5IRr~Ci(wn1)V{_2unSd_M)F5* zZ8jELw#V6`+lN7vb*9_t(J1+aTfoW}L+^G;AV+N0lZP1HfNP@I;B8|17}+VRC;>VB z(XdY5CKYrxEzJs>tCjHr@!zLSbko}5+!r-{|4V)2-vEpM=PdHCY4e{9pmSAE7Y)Uf z&kW8l8Bha~zrW-DiZDK#tuUqJ|5p3;L!8pm#MDH>d^Wz&uw-^DKP6VGcPyV8iW0Jd ztQ9XCnjZm5Z7!4;^e;`qFHI#SGto04UNs)cZ6RCF#6MflLoY00ET8 zrqu7n66JZgkFoPRb}to0AZ@I2`mD?^4|4iQ?<}*{(C?MGn@TU1d7Dlz_p{az@8CyG zzFuu6Gq8GQ9YnuQNvB>}?bJ7$ojAjA4JH;~m_*b^OJBgzhS7GXmbRBn#IxPF60ss- z3U-6^l>1|mLXKVpnKGBM2u3yCm(o_2L6s~d26Jl^%&1&5kN4`(LvV&4$TGYCT#GVb z4c?d?FqqoWO*$Mg#?@?3FCnx|b?2zqX=|mw$NWgR$rJGBrDus5PK!^)Llq{3 zX?^C~lgYPdie1`V&XS7t{1Q?PGW~_QFN-%&7t-WT z#h+R>$((pYD3*8LIioMx+Qy!^l!b%e(09F-3dNKzZ;4wVj%nD=hPNdV)o;fbYF~Iq zoLfUUhf5k$!c1I*3N^_a@n_bd z6U0pN*o8*ZPM3^?@tj@3gD$q+YE^||LO1VlOQWRBAQB5lLYSTK;BKZ8LHc};AYZmZ zu7VyzqDa4b!Ay8r3N&+FBbfHVBEK@zea)1n&{>I`$K>;@kTD4QM?8IP*OoSXdG656c} z2NMOLhV18(pdDEw{zQVpMS09V6^&2SHr)4SjJEGjcs%gkhc*O0>Mf2;uTLu9nru(= z09n1ppv~ZIplC$!%zCMZu~Z0-#vglkf~2sLt;7W(e#vO}w6TfD)KsZ@qTsqq2$MR4EUrKjnS zbXH(p5I+4KwST8vj}jd&?1s54X6=c}w@X!+IM_mdj3ZPPQy*L>Inxo^sXQH=`-+S$ z$5d(}IlUeVOWCSD{iS6eiX(H!AtVCiE;ji!O)oSA?9iId&m|X{4V5Bu6P@l0#gV-O z7uqa3dIfgKPNx}ogf^oPcc@OQBfn?oHc_~x<$k?ecoc-(p*aml`GO#HDRY+>tHggr zBH&V_LCP@}+}g(oFFm~9A_2Pq=?#P3)iYEA9ER;(Zw?}ZZdU%e#7F3AfdCEJ#0y4E zTkwMhqg(*h>d7CUSkXv?QfzI9DW{3O(wO)b^4Rfu9)FDoY!PrL)~reT+`|o~51uI& ze-)S1dJ!bT3$osz#%p@4$#;uCvV{sQLq#!#Us`Z6Sgs)PX!nMHL70Kfbm=8d`Cu?p zyF(UnaGg;;!s?ehpHq%4-7DS2SMP~2kaI*xW;xkdD4Uz*us>cL6f~wHSjifPE+Ip) zGDWm9O~X+w>98z$QZIR;K=M5G2ZF3`nP_FG?(4*8HztxNtjYaS%ji}=gzdoV(=qzz zA|VMa2g6TgXghBLsafN4T7Vnp@98yo2b_+n`xK)nT&8J!?7Lb7!kv?|w{XPc`hn+Z zzd9`#c{Wd?^TD2_l^#~pa~+7GK_5kPe*qbSxePvyK!!??@N}3_4Gy&)=t@7ZS>{eR zY{}nJkMZT$RmLJO!iF=K>Cy)++Dlu&%OM8_E;dR_K?jpZz*Gm`7>GlV8T3NvlB{O+ zuoya7917PIIr?OCiZEiKRnCS}U^r(u##5GP8z)}4Q>{V5y+RMlcp2Z*+i$h1hpavl zN^LkG2Sy8yJuH58&y;!tVBU5@RIM+RG73_VOBx505F>WS58OhK6(7+Z2}Do`0hKdl zqwJSc(3b~2uSJnGR%sRrZcE)_|NDM}}B?F&Ayw?GiW z-GOi4p;L7P-9L(`&t%mPX$F%Rs8At~6sKH_t`t@)nk)kzH=dn;T}lsjr_gpn?FwoZ z>{XE1R}^87#l0MuPTT?C1kn998&V}T;N6gWY}`#S_8E(l^V{e8Lz=V>aJa?Kr)-a; z{RNn8C$?TExtq^2#6L9sUv4?qc@*OGaf8&?A_#2Z0@z{1r(V|^H3LFr4KJL z+?500>YfmBimDU0pPEQe9dI0JC_%UR`>L zCqD5(1Rl7#!-vgR=CQ1k&&h2`P#50z594T5;S+iBw;i9F0Iiqq0;xN6B`)tc7ckv8 zJ5u>XXQy*prc0kE%9O9nYi8PnJHDaS!FoSKyG0tf#a@ zrXMy9UpjYi9De6m>BwaLdhf==ero{zDvHGb2j`YI!9u%}$}!cMB3d9I=r z{v*P;+F+`{IG`SI2X`V|IsQF~!uQ?J${L@C(kvnL7w9{>Ld*HiiAuT|?ZJf^W7$N; z{=B%XT*(fTDpu1Fd*D2E!pRa^-!9hW*?sb03u#?N1p}GEbv7$&eKgU~6u@jO!0Gf< zvHx~qQ4Oo95BC5qbXLcf3zpr|B3uC0Ua}8gw3Z82EOy^97>aT9Fq&9Z2v#+A-+4H; z+(%!Jvn~`HiMUL#27|aPMYSMwKHWIQ%H58}NGXLg2@b{Fw-1uNW^Fs#KoLzU$j;Ri z9HvNJNu)p*bq1dkqd9M+nzG(e0ds=QPK3~T4sC+1Bod&Z<=#tMM=an)ZTGiY!!B_( z7GGK7*R(*t|f8;&8Oy6lK$r4K?stF8%SXz_j_iW!8sZ+vUKq$5uRCE`X1(q$KT{>&mVByYm$E~q( zL{uG@dso<;8UG&06>*pUc1^TLwX+~;%*Y$2FCE2MDCDBlVPme{b$qC18NVQ-PoGf3 zE(ny*X@EBZ!M58Ug*uAHhK3r8zSq{$5%%-EEpevN@wzpw$L`X67$4FK`d3R+`nU6W z2^+A?npL=r4UNrc@vL-edmy63j%&uChabhrjJ1wl&h;r}>)Z0A@jl*oa~RHex7H|z zUV0cWXLZ8<%0_vg?w%gyHbFcgc#r3Kvu~NKIY(_DRh!r%qT2CJ2EDIJ964j!glpLF z)%o%^A$NeLXwExw6JUyM*tpxOcaezfkRBha$o^7JIFBghs5| zV6V;cD^gT6!Z9$;a9*Zkn`!C9gf5-`5SF}S+9q`XTTVpY7rj;ZL!*#+OR54r%A8tH z;nZQh+|tQYdNn7gVcjjOQCZqt_OWgS;S%(_}}YS(ite`7yf0T!ceItTwOXD`w37O(XFu@c6@C z3t`_GBneuP1~h_(wwDH%Lu26Zy;4ocd$RP>XcE{tR+Zcf_B{GFVy}Im`Q?;1_DbeA zK>_B+6bM7X8$oGe$ZBLaN9C!wx#^$iuwjZ>BqtC_xl2%77pOxLbrG@lChrYLy60*WH_!_xHFtGLNTnK zzcZdP1!sUv8$hRGm0&QTlVDsjN=0uUq8iPf*NEm%QqAPgQ;q3yVoc_5Q%<QcdWA zt>f@3F!~KXIu?KqNNzx9O34BIGSUPO8+!qyjt2rzCbjbptEO)kP1@9N7mt>!F28;n zTaNv&-a6y2`zKuGbi}_N1+aTZe0V!Ypxivzf@k>uc0k(k?q;2JbfMQQPs;vIT|6i^ zmy_VOQVbM^SgH9_4KZ3BdZCmwy>@?;3%w6zF(7`{4d$?aJlN0-FTiB>v@YnNg(SkjE5J@Z93#>}Uc$De%3TvS@!4wF8TnwZK;aHnHv`W)#kl6Tj&(oe{y zHi;{GeRw!`?LJj)`p$z-2Ce(9KZ}3EcoSGls@_rldye3k=S2NqhI3$F>9v1TocN!H zt^Wdb|ErLS;g^ugm+4%_z%P)p?5(Da?cR@X*56Y}h_L9ixM0p@P(~V$gL=9SdT_U* z7$#7n(H^Ut65QuYZ2yZm!#23B&}M_n*3)q(`usI(`6~3o?(|krd)+*jD1B z&MwCdcos*6O~M8ZMY^FQ)b<&_5j92JvSFV4m{8xGif|g+^Zj1nTv}&taW{h8VTc1= z&0+Nz5CnbBu7>DdCLP~G30PXZa1ep^5J1m`-6N8ShrMtWagw}QmaG7aXWvfP)P*64 z8>38X7mFvw;Vz9O!m==|ADA~cRHm{DaO%0Zg5*j9ySKVS&Pgnk*DXyk~}>(NHYWfcR{196YDO+n?6+ zD2|6+-m@4xK+5q<-}ptu(e1+MC%uk{u3guAr+b(ES0>bIE6e-S155}0QQ=O9A=F9( z$zF3TKACnvGAu>b)T;Ois*a*_kX3g~$VOfWaJ$n29BiUkxyoSciej+92mBU-AR$zV zXC@`V^`$wD4gDUfi>A88 zE7hkyJqXWRj{KuCetP~VP_@!-J+7mo!VJA{MDkQkt0^eOxStN@u>DV@LEY_A`Je9O zghgPzA&h*NlBVk1Ip&I92hWl@3=^J;X5Gn!4PuuzZ8LM=3UMfrZHTcN`Eabf1P zWJSFeJw-}rUW)7Zgz;cQD5KKc@bp3hP)=6G(tpyGU2#hqM}PmMpdno=5$Y#a?LBdx zf}JN3D)W6?UZx~HkF`0%I6^LgBfPExE!qJLf{4Mq-RL|+2?^;Bg8T{<#kd(kn$wB? zP$eB;#$SDAa`9Bv;pj|V6j9odV00tK1u`;g3GFvx5SU7{g3@^JX@(ZEx3h{ccH0gu zUms)#<1q?FWyvPU2l_E2*`(hGv&4*D`%31ksZ|M>O_9{r9;ev{%EslT8M8w$rUFB! zGq6wzY>_((SeLtgY;M!2B3;P>daz;7@FF{GA@aKMJ1V~Dfj|*-=io*OVkotI*$zXJ zllcl_{-)jGEkan;I;WlT{%z3@3MHTevxo&VJwu@)w9ui2HI{P?iBU!d_60LkA+fEW z?VC>womcoSDc#3j+vKwOTP5wrg1yDZ*6LO}h`v$B&JkCrSz|@TVL1bNQS9>9yh3Wj zY9U;Dc`+ZNuU&6}Aw3*I>p@sfTVs#1n+@BNr&F$_IBVB#Iv?Cl(<_(v?)jzGQl927 zbqU_QTfC64U1$^a`spu%RpvB9#|a}i+(y+F8-nzfd*=Jc5AxbPsqW|Vwo9vdR};?7 zLf^)SY=Px|N1o^m&Ti#*TyONW75`Yd%)X=>-XLvBK1mr#GUh9+?IOS}{ys_Y6b`=+ zQ!df8I25*IS5ycrVtdvVX!ubnKVif!P7eQuTy(T=ku;4qv7k_B2@XL8nK#O_x69XH$^hZ70n>Svncw0>djUqwIhLx>D znEyHfJ|$#`HNS$xy~p4S+R}Nh(;;hi=IJ#z-zaqd!OCu$$+HB_v%5=Q7xlAZB0)e2 z6{#=2_&fdU%TGhDh`J|aWgBpLG~d9nv8_jYU%Lmg1xa1PC5w+h5uE-gw-a_9f|7m39MLLXW7)kJA+zeHYGYN@&iANcYtQ zg4CQG$oOxJ+jX(@z4w&HEIphvzw=mrPe0(8rPHW+u^CX2&f?VQo707++bdlE{BCIv zV+qxKzS*C-d2-dzy$oLY%6;@>V!Iu}Wi&0P(#je`j%K=k_2G_1%~II9cF@(~X2FLu z<6@j+o2F455@Klu+6oiVVuhS`wzMdq7;}Sf2jQizEAJhQ$`cot zrP>=5BD1x;FWS4njH-1Q1uKN^hD&qLHFC*KvlDG|RW>xg8MH?6Tu9@F4d6b?`v;>T&n`PK3A z)o~H4-h+BU^NRc5x7|Ey$%)4=H0u%YKVRGbmj}6!i@u?agQ>OE|IesW`gBH~2Y$An zH7$?(6MH?=&lZX+Xv-=oB#iu*JXTqdqEA)`3L$)8Dwl-1nkl^O&_6IY zPz=TinK&NEUKotDyAlen{JV7Ira6#w-ax#sJ`f2bGj!XOD{oi~ridwh;Yt8z(#%Dw z4;^OG+=ag{jQ$Oh*3?CHIYZIQ3#*3`p`AiUVT8drWxzL9(>B9wf|~vN&QB0-Wk)R2 zwpR(H8I&V*3ig0~H7T-ZrODr#j(to^d2xzvKF)Gtb;B1Mh6*yZ9W+{lel;F2Q?4w!YPu=p{MGXVs43)j$6 zK->uWe=KKc4vTJ_hEbb=~g+~4Zs zpC3z68BUc74VuTp9=V)4K;I2oI9;cKvNXjJSRN%(%d)Zqhk=B+9{~R5 zMe>A#T`B0b#cy;?KXa;8X(ZB?BsWoxtp14EOLPkAj9P9Ym8Vb_sVr^z7w832eI|xR z4*xMMqx_{~X?OMMZ}~t4(Jr;AmaN9Gom&rmk?frA`mL{pe%4h+C|?~X_F*6B=dZ?J zTY>$z2OJ-rO06VP!OUxs1meS3tvSv**8OP%3cnZ@oIPhE@Nw_@Dw7M}1APAYnhGpx z6n4gILW|D_Lq~oDKFmZM9fa@+QFBPxkm-d#)y1ZiJ_;xV^>i%Bq@B+Trz8^Frxww;C6^^0D zC&a57yG}nE!FGGncE*BC*z1FV+|VWkbO)3>J(9Fw!kB-*uLMo}7&trhzIALU=F-88S$BT%Qb4h9)(0_^|m|H9jzVn`?y9C&tKKTo=U8eq^4ZdXrxHTxjXAh~iLWDJbY7f4|us zu1w%98{tRjA@|$4pK!bNAqYCbh|-Sc83}547Ttv{en1-rhx$O!(r!+j<{NC3?5aQe zv~Nc|*j0>4kFyJ!-`nl_fxhxv7!I;iTm!?|1K;0YYwU#KnJzXU>x;-2Rd#~gpAWVs zSW$}xBJ6rtiOz^Untq!F-Hcf4ShRK)2QC@AkV6HkYoeH#DrbIm$-gl%JufoqZIdQ5 zBrwxFE(+>vmJg*0BJw8{X9rQT(nK-Ivl!nM;O?7MieGur=%m~%2HD7USw@bIlz zTWgbbmA6Ch0UuF{hA1anIj{*tCP+m2zfs^e;)jFC6r=Om zHJT0v>)OJ5{g2I5#wh}|{40LF{P(n~{|uDm9dxY>bnX7r^!I;nrx^<7(sO*s+@PaQ z>LUU;Wn`f@(KCi6T#ABoTVV!uXySPNa0W}*IWv}GtMf-9-Z9xm5k&ves=StRwnf6D zOeXol$-gSnGFCZnPanUmx=F57gdhf)7zzWW44974lFU`XkT7Dak=Lf9d-MO0!=z#r z8BT?Vs*aI2mu=zrAqszVQWFG5uBm@Ss_zfmQmeUiXD^#mRyDFHDP^qy)~m{1X&#-Z zIH9ntgMP(AM;;1>0mcWHI0W?m(n5*tyAWv8Scd6DShv;BB-}!;X&(9#9ySaJ)}Q(V z?AdvjYMyv#&!9%BQT<7&E^HqKj{KF-Y^#R-2*i{!NbL^uAVs+>(_`W!1rmZ*uKWmU znuI?xuT12x5CtaKB8n^7IvXflVuFV-_Un|4^8jv3r$pOvv`**cp}x=LJFX42M@k&&C3lF9?_y!; zB{0Pg%n5bJ>nI4(&?Un}vwwC#Cc2Q7LI%cw_prQgbKDAmg>m5I1nC}lr-tYjgOuaU ztL?b=@^sSo89!{6n9o_JpU|C5kF|WZhG+6R-~Dv`iSsUkeR_E6mgpU$-l%OgZ_Q&h zoi-yTErsMc$FX<+w=tIp$1eDRRtLfsn6JXHfkwoML8|li50NQm zr4YZlFU^07FTt1pX|muy=D>d?7AAZd0AMPjc}c~t6OF2UHzh-^sed5E_l0b{0~N<4 zNLb>7CqOG}l&Jk#_Lt;03+(*}^bqD{#1i@00S}p?|l^U&s!& zOV`P^$yeLV+sr!exBFA;ZzMXVX#LE*QroS8n90-Gx=NvGGc1RF)G$pkSGpTv`3jq{ zdi(?zqSuYcVTfrrJJ>Lu&6FUfCDdXyXG8D|TIDX+m8fOkJ3YMX6%)6`Yr zkEFfzJdFBB12sdd*d0e{#vzYF_RNgfo923o>k=*5?Y~dkw5rh#M5M-SGVJafZPbr9 z>tgPUz?30OD)BN~4$?)8NE&E%$CaZ<9!RP;wyc#~q~4d;sInMNm~D_%VLD1watcS) z88ZK%`P2>!)L#P2)6yw$AHgm=OLkN`tNs5td&l6+;%MEoJGO1xwr$(C@y6XT-q`Ng zwr$%^I!VWNGP!ronVNHE>Q2qA+Ex3@{u z$enFX4ZKO zOxiKI(vJ^PsdQy(sgrg>>^`hVzY(bLF1`kNc zXu~4JqY_ux%I{_m0!*v|MFS*%Q#$8N4aS}irbk#k`qqWHoxJdDE7%-z7;~?8?8T8Z z;De9uwI3w^@>R(#{WM=#N>rOE{XJC(hFhTF9v5?W)HXg3IKjcC>-~|(T)@CVj)q8N z@MrLxmXtLyS5@d@?_lf+_HFPYhJu4{SvY0D7j+PVmkv}H5<|Od?T8l`)xfne98W&i zZ)dO1?? z+&mWzZpcIDhyeT*s;%jHmaXmmrGWo-tawHEuJ`BL!}AB_n-KE97E}H|y5)aMm@U$< zS5jNS_P@OB@Ar-uC-JYPqR620j3?jK#3d&eQ$-s@3?z{s1+SjyuaD}8`e`aJHzuho zn9$73Y^^hBjfJ|wOfy?PtR#3ePB-FAHTT{({V zuI{>zKQDS(KB4}A6c~v4&CVW(a(laK4;G#zI_O0PyS){0{S}{wBvfgGBDxs*wK!4) zFo^8a%fP)QMx-=*gcYz88;?p9pi3n`dd@>D=>*J$sXuBkdO5F;6#cuKV0kC4W239m zG`rJ08n89lbGQD`(h-c`FEOx7d;$L=BO-&X=yy%H;yde)T?h*2v@Z5BG-{er@fRyXyS&so*VcSh4OJ!_4(80C`eQ#g_^_j z|8-{Ni;EfVr`NFLAr4QGQ^c9yHLu~sxyoO9 z#V5aqT5YcL&aU(&X5cf+a!9*n)M2nIRWn z`qkPA+^OoldLVe{e4JX5DCmF41@Tgilp!!c>FBql^QBRw2#5z_kk=>uvn_oOpm)0X zS&>6#yV_KHajcn2kI0q(NWM6Y4p)~J{g}iq9Lq6VsSML2-iC8GFv}& z$jZIshH!1&)XorJSSC7^rG2GdCxKa$$*{J~O_$TgMzmh7@72FF7`bR9fNukWx_>4O z4kIHdo#07nkF+{xicP4{GQij?Qcg`<@rej~imQ6Y9@NwpR__iRgO>#OiW9f< zZ{p!GhP(9mm}XxsMF2?5q23Oj?jZa8Ds5`95zm{n7<`kiN8KnbNvugdb6Aa(7)j+K z(_E&fq(+3j+8E30${3r|Zc51=hWihctFz~1rB_?vXgtGM{G-)sC)J`H*VDm#jz$C3 zojcGlrigm0zYM6k!$!)2CH4VoUG^rWN6|Ji2?$dC7=(H`r zQ2nj!SVM2uv9e#kyE*sz+Gd*I36r2V!~HU1Lyj-6P`^lc zR(-%wXH5KIc9Dpsbg`()ica~pkqaqQEd&U=T?!IyZ=0o*H%H|NY@uD_6I*lWV| z0pfMs1n+rv+q1q;kH8GnY*amjZaAQ!>cnJZv-8=O7A^WC|uy={c->a8d5!}`>`@a1Vpw_G?PU#A%#TXsUD$`ZmP9+*!rhrBrEaZRBL3^b z1O{|`nWJ3waldkj>+nXnQp}(VS)4#vcY|4-`Vq3sZ;y>Fao_vqEO0$_7uEr&MY#pN zaR`}W?4cw}s56R2Tk+29Hm2%{_xs4jeHx+N$J{2VeYO&9lhhc5a=U$sth0m?3=_xD zo^i^&Vlz2LV%@!mo(X!nB$A9O4UFb7!dlqZ_P42`*K3u!t@B0siv!4n3zPxyc>ZCF zSl6wtp&^9Fm#k(&nDN%ozmw(Ii92N=3{82w^nWj2RN=*e!_`|r4rBMHnkiEc<7}~$ z4;8E`RbSJ^mpj9K-eObXgl)Oq2~N~Z-QHne`lq~Q6@bmKUSt>L?x^|THeQ+kipmWs zABR&UCcD<6h{Tw0LdeqEo9KLG@#F03_# z?MC`3&|%SC`hZ6GYxk)!CQI&U5Hx(`K_v|RxHLCxv@ks?#obOoNYUT_qM%l>O+Z&1 zogg#7g4rmqYct*vahFJQiKud1ybH9HtJldH%rpjWLu3A;Dut_17uLI!%N^ZC5a;C07A-@+z) zek?U6z|D7>&2C;aHM}ASOHa*7^KU&YHQ{Zx0{@!L?hI>Im3g7#R=}R+lUAB2zXCm7 z$OphbcJ^GiDPr}>nJnMV!AI25;eSj;|LJIUPkeIt zHkAy|*oQi5ByQJ_(`2S7H)zWD7AhPpM^y1tnGpwXF2XRB1+m2KRv~>6_kmt3g z+tLurjvQO&zN|exqhXt%=n6H@AJh-MOM! zNR3rp@pXL$S|iQGg{G7>f}Jq$A~Qm)uG&%H8_Y0t9HYM%8V0N;{k*Anf9X1*oBCJc z&I?j$mosHJ$WrY4cB(O#T3BMp(wF1s%>3h{!z}h*CTzx#XL=qtk1*wpYj#2aQZ_`c z^fg{}1GE67K<+N=ZWMG5q@m2U`E@dwA-JLJwfl86*bW#Y835Urwy&kn6U7&^Gsy_u zm$C1u4-w@Z>HTE2dlv8om{au*eRG{no4=i$>yUY&WM(8U)?=hssZK?7yW zdFxSCYmUJnRD|QvVS24*QT6^6M{XvPsTF62*F`a3wN`fSS(t2Ty@2(CaHfQsvEn9> zeS`h4+ayoc%ve;yA3xOje*BR9-~F=x=WH);>|kv9pRsa9K9B&lC6wzdm#gNEwFdem zFsafph=d=+zh^VuKvY0!g3W#lNil^`1j5j04Bo2QsIkc?Lj}ix<7(x=JPxbog7Zeg z$G^K?Zf|w09e(6~3i^NhJtni#xxX`;TooQ)=Z8cUL4x@eb|x!SmS6A<*;_3q?eM#%?Gol zLmnWnIyAMFZi-h+C`=$<(one|TQX3=CtFfh$u8_ci%>Z-70QrlNSK}%#VnGi^82%R z_LY+o0Tx%7F9M3}A~M4>CzyfC=wrMy%NJ}R?NZGgjx?iW@nDRJne5Ho2ZfQ~K#t8) zFDEJ+Y>zm5x3eVDt}W#WJ4Uig1v6cq!J1dkr&aswSHOK|pg1`8kU93jc$6%y==nC6 z?cLugn(8b(x=Avjl31XLTU36B!rdmfM|?wv3A-p=SF3^GDzK&%beUQlf?6`YG^fyaQJDFu`|}~{$*eTMd-E6u+T29t+S)%( z4on4wH00&_&vIeWl&dTz}Qjypmk@hU4N-`tr zN}AM2uu-Eda$g*Kv0yyBs0u2sjz8sv^M^b~;h1NLL9#{Q1NAvk;NZzvs&lRNF#2-< zJaxJuXY{^t;<<`HUNVUjMD8p<1zIbi{MsZiQz1q)=+n^Yad+kg8L|pbky6`~R|%J5di}tS z=X8@cb}}}1)~1fxs+P2pYmAH%&XuZ|uEGk>OEked^Y!B~2Z50>M`Hn_4P`Pp99^`A z2h+#p%X4i~bhdUj7X;Z-{XE4UkYus>4h~$%Bl`QfH{&$k8Ge%4}PUSG{aRc)qf0=+ps`X&eOcBx93U=#aSR zv6|O+b{z`w)c1k2*oTU|EVfj?fe~>T>O)r;CQ%RVaJo&AQVX%t zD+6Dhe8LlAmFk4x6BoX?K3MK(8uQk8Pz9pR9Cf)Qa5$VpdNBH=xjSD9MPDRYm~ zS=lFz{bqa3^1C{~M`vV`nvf<@kx0P908)J_hyIvUTys<&hqE? zfqs~tQF;d^1}lt~&sbrDKBI%$zgIyz+$E1{r|`unJ1gv_xL?<2c5 z;fEBZ7ns<2xRX6Rw)a@CbOEJJEkbs`zKY-O*VFc9uljbSSD%P)%j<_=I=-F;O-S-{ zcga_SAJ`7OU8D#(>QiJNJZf!YK1(=HWhIQMDl7)WV$16^b+qB}qD1AaOz#ulAl z6rCF-qr)b?d(wU za%T$&QyU^|Mudr9z3ShL-%BGvxIF_WLRZ(YRSo<48PFqnu9{>0Ecy|mpli-*1?xgy z!lz+w+oZ7thyF5pwK=Y)e7kyK`trc>4ikW zmRVzFv`5sO##t4js_csXtj0E_Eb&ETtl3q7rodA-cYcU9A%=D_8G?#R}fWat*>-1B3xDr$znLhPY9Cq5zaMGT=QPNl> z;ye4-eH70#N z{%RF{+7xZq6gnnWTvyM^qlfOn3*s9?h@kh&L*XLFkYtHHgY1DI^ajP5^jZaLLq#Du zhy#%Je*OHCct&HK1Rz^xBh3nQ;O&jaDSD9hQ-Dpv@P;@+>?!(sZ4liHVTC9e^_DBi z;qBObg7x1)5n?%ET>S-XXsC$R(R?6N5Kl_BF8}gDZYJdmx<=^tBv#tWV;%*#ouG*$ zvaeH1=pKR6Z@15TJbmmw=ss(t`}mfG_y`V)i;e&JbscUoTCVIO=U|zbY3FhP8re>$ z#~!%=*}psY3tUqMUXV~j7tsd(YuOPwrRo=yekj^@)au?Bf>ww_xF9C;AR>gAlyhp? zGt+Ib`ih>TO*K4JX6@PLQt_oqqV76TO8Q(KlscDNcD%*R=g&OolIbayu0ja0ECR)Z zvQx<%r_+qbaEb~m8h7|#X2v^X5cKPgxE0Y9}K#DcbQvHf6j@loEzCR!-a#*$*j1g z>oK%Nu+Y6q77Bg{5V2RW-`|}`o$&fcp_A5)OQ94&JbH7OL=ixRFXu;3ZgXbNVpAh707^Ow%uDDwf!!;k#lWf!^5|b=EZ-0fgY@OfLxc?c)90 z-{@Ow)%^5B3dhg^Qn0xk*mjWhBo!bg?aI3wP{20~xUu&%NIv#PGY`HE! zwnSzMk&LPPr=VJo6HB6BAJj|zrSZE$&2b;jV1i|W*+cEVfy2R=NZrF3heA@KSm8`R z^RV{H;}~?qYDfMk5*f+wX{~uRAjNtLr#Z}OJ#j7bb@u^=+eZw=0El}vNQyV1|I+4H z01^Q(ud1`Tf!#@A@Sn!P3lJZ$%`r$-6r^w*C%y&rqOAmb287SRG567`yljIOxD=L} zx$Y7<=Azc_jR{VUZVBvC#bKaLk!2|ob-FQoTWwNvG)?k8%f+=+5szcqp5=i1zlw02 zuhB|X$^mc6N$>l@vbK>!0UUft!yU6^9s5T;8#~S$t(|^>z&#xI^fJ!vO6AnxhgS(3 zOLz;-LnP<9ow#e1fFPqRS&%o-HoyCdBMcR~gqR8OkrU-44j}!0)j_l}5NkQ9s zlrEb`J`0Wfk71~j1B)TA(Z$Z0!|mnXk?|9@k#k}ETbmQOh2cRd`Fv72ho0}-)&MgY zNmE!eGrJ$f3dUYS6a;5?==(P_(J<_6j&iOpK~;XaprE))r-5K8Z8O?}UkCHCcDRyP zGc)6eVkIlUMY|9u{$}rUAX-Ok@`X}6UPnx2z*{;#gY-;SYr#Py|Mdj9e~p564)U+X zL%ViF4rg0fzpfTMpRvo0?}8!RtoxPY?h!_hc;7>*6d~xKkiKc%8sZFR(4bMau8|8R zE@jv=4wm`%!>$on#b=L9+wi@2A5LBEO}4vBS1r4&JFlZ*+#7m41addrsks+k@*xp;j4Yja|qTq?KZT#a({e zMncl}-wzX*-WJ$Us>m8dd}h}50r=+>?PuWk zdIN*EUlI-h?_FsIlyY;4(fdamndOb|Im40BH9?(~b<5^;?5VLpXi82MfR_ZYRK9T8 z#Sl2!iBKCJKA5RXAJ!5lwGrU%pK<=ExKJ^UHf75O$5T|MA`dyddV*87(r5}ie!hm4YYNRC1#ig8jYjrELE;x@{Ghw> z5cRp`!DHBGKA_x?S9S+NjpWisG2sBQ1?W<{p|H|6vjuSlsI*4Y(gl-pyh$9EeC>Lho z1nw4y9S6Zm3~M1w2$dj{CaclU=fXcpY5OO*GDM}GV0?5yNx?%HoPZxA5z`3T3%;7< zYQW`|x{_?CkNr@xHRT;*C0@`N9b8KudsFJb2;Lr{W!A%q_5#k<8evlyvQOU)Zd1Ob zzpD}HvY@Coo*_iujoYrc!U(ntx%^ZI@M{}d_d7fqE0!sCp8pz)AB6WLsx~nvSpS}M zRlX;%>)x`o0CSJ1p^unv9?#r*q4bA!5tmc~ief^t*}U+n91jgQ+4njCWSnYVJY8-+ z**76?k}O>Y`LsMK&OruyOeH0rVEm!5#0B!S$d1S_Nm9ztoD=&G9x-S#=9tnES)15P zI8dpZgfzLq4CwM3s7`Oz`HwiYylRw;Jw#5UBhlJMkVPL~ia|9jabjui5XPM(Jx_rc z{2v{QtiDj-KN1$*t`M{e&qS|(6!k)W!Aa$@@hlI}^-5Lbn&psEZQf~WZfckYFpq^t_(xz3m%(7NVVrHeVOQt(<+m<)Fwxz!OW#hKY zW!<*yr@6l3Ws`u=WrKj+Ws3vpSrzY?#M#gKF>j!nt|0}Y)()9&Rms@Ea?M!5a_*Sv za+F!vl!V8+uUTpp{F=S3tc`t{S!@;Tn(dkJKRf<0{|zITUXB#JW_e;sJJvDP=9fe3 z4U*eRdvdR74_2=^4@7Q<3JS)J=0r`qw^7^XlF_r~gTtf?G_Qq64zGzvWUq}!Xs;2E z&`#U8lupODXkQ~{|7Yz~Xi726O4_Y7 zMIy{r+bwuGH)dI4o_U>&MK16}C%88>SdD_FRjy0RX*`r7{ zo7*j&HPzqxmD^>3CpY4J0C#TDS$54V{IsfD!JTOPm{+KSM@|7^E6b_I%8%D@TdXSQ z==|8W;syI^k@hWhVbAuI`4RnzQ`Bm8x0W*oowIehGriaazv`g-KWAY4hdk1;?E*!L z?E)o=ZQVtR9sY$gP$IF=3c08Pubo!%u~BZ`BKP?<;mG&u%<jGCr_{;{ zJ7^Opy8AY-F|E?_|rf4a^z<^qE2%!S-ku7 z6~0^;i!iq)uv;C?2fI>~pZI}oSEid?>C~5yX+vF^+FO!o10OI8n^#P!Z?b&0UxS?l z7?R}rRDd^eSCCE&KF(&o@Pbj$0k!A&=CrqVfebZf5EwrAs}0&_+#gz~^~BBm%RgA`lWVC7*fC-4ELo$wLadzi$(edwTf@uEow{>3 zy7Nn~T;%+f{3223vg4+)mpO&;f>AfrZM(*@!{d>B<~C6qhI6MW>sc~!=vg7 zsbktRsp^)0MB^={;moh50oS)=6=%otoMPwcTw_PvBXei?^18+7?EPYG>yyqSwnwmI zCU@lW$#8u6t)w3Q^VF`OC(izM#zOZ!N~`Hh=P@n-e;bOU9_I_;u{1z%<1!%r;<{(h zh$mdOsAM}4IyC^LO^yrJvH<%>dtq!&QX5taFEaZ_~^W@z*~ z6BW2@3uz+q^5bx)xnAC#c#*dS*S^Y0{!ap_dRQVX|WEO+8uRFi# zIw80=lwqZ#wa22h?Qt8{$<4^l@ItPP{(2JIA5pEz&SKA?eXQ9!QTu=fo}_SgX?&e8BAd0g9s1o`_k>HF~7cf?pttKO91#~ACwtc4ae&^ zrM;jVJlSQC19R?>6Jzl(q{rnKq2V{(UgqD<>u$t5)Dn~6!t*BuGm_D*Krkn{7wUKt zX<|?U;o!MLn%g#>U(*jnN9ZX42-)>uX&;%yI|YtE|E;V3z{U|)=AsSywOb7+gT%e` z=&`sThiKL(cM2tKP4VYQ+EpC@rIZhQvy=XBt$tF4Mkp=r^L=#G38*cJ6Z;JUhEeK>%91uNw7~MEffxsw}H6q04$f=Cs9Sk8o#*AT10Q3SE4$^SDLrH z9o64payI9?^S#5oqQ6Q+A-0_+`^+WwM;E&ejwJkLZ2^K7aMe%?%eO!739~68c(9aU zZ;yvlwuTGc{gL(ZXfKEYQvk<2SXme*aPgj-dBX$bx5jBVOnL%9CIX4^FlFlw5@gRo zHP9;rjU4d6r(YO+xbt2J_rpGGPTQ~)H+pG9K9c4QqgWy63_&fs_P}m%V4&x&K7Zy_ z$cSi=)mjX$up^6ve<}K{Adee5q-XVKaTDBm5VL8=ISjz=_V-wFJK=EttAUhOtfwDd zOZWy%^RMtkm}jal2%@|AUdvbKjQ9C!!xhGTaY*7=5qjXlTiFE5InP|ckV@OyVhxlJ z?6LTl9o;uJFZobMtC{^4Gl)82zr7FVB+>TZ`?vBK@%IvIH$>wo-J#C?4#l~yTaGAK zg|KcFQcBhGuXY`B|1)nZ%M6?KU_A@}Q=WmE=Ov7G=}uL{SF~caKJlZl@!7cYv>RN&W@&^R0r2W}>rZ2FS%VPWE`oftvw@_PYyKzh$qK!4Fgb zv0h)45iw%_lrKW%k*hI2V^Fj&@!~bDF)m|Rb|*;Ap5}mSCyK$Yx>F!y;DRr+!A5E? zcQ;zizlod3?m(sP1gm$P`4qzv#`utD6LwH}!D6a7;9PgCY;fN?)C0)n6ycvm2wY=W z-%>&an_Y)zC~EZPKAvZ+)CBMmAKt9cuTlNf`|qiZylWS=F;JU$?bSG};CT3G(IOQHWRHX2E>Hea%gu1K->pn6pq&m|CzH zT3;x^l1VJhLB^_N61CsL{tV9izE}zc1K(ZvC`2TK0+eD)YILlh!Ao+p5+Uhw1MXu= zdZQH-swSEFtHq*`Zi6%5c*LA+ka5e_=cVb)0s zAF3n2REEEcB;1IIZpv{XbEXo9W3WKXsX!2;xbY}A3T?_9H)4Dsw;+QeQAP-dCk`16 z+7FS3Z$ub}Z^%mG7e2(aKPa?6pzR4~(R7A`=Ckgz&4D{xGJ`o|GNU=S*Ah)5v2@EB zi*Bl~B735OID76%WRb5EUlOmAPGkHWC{b_G!O;5xjl_{|g-0p#1lP&xWe?+|5=W_(@zQG{A#UU9TncFc zR)1-oHAb-SNeWZXmuFmbA6#oNoqx3aVTg-Dw`19c!4TodDf1C#zwZmu4%mEy?0aHL zDsAnc=%boP9Zqm&%9%7DIq5iOT#g4l8^%5x`6iX-o~obpeEqk8MHP`BaEagH38&wx zlJAVgAC4}TjNjWjQ!8^uJ9kra2Xn^nb-JCGtF+0{sdgP>~nWsdu04uk3aCi42UrR zvW0cFhOsgrcBJ&`-Jntxr@yO?+Wt5c$Js`70QPhkCGYE(Hl#79%TS735xw80T$3G~ z@oH$af9P;-IyOzN#M6dlzr0cb?ZliqhHyQVlEgB63Y-qa1cbE4!4C*_4K@oZQcX0; zQWq#}V~11Z^PB_$HR`|a4dKd>9*#duLoM)71ycxTJ)i8oj#7`Ly-Ox>Oem&$Yt z6}jPOM)3qm-p0(4L3jrn-a=|3t?!~)yXfa2j&?J*jmO-0>k9Zh3{or2E30 zEHwuVw8MPH7=f{qAOuswEa%<6W>Qvx=TV?wuVHV&*RPw6x56T!w7JPj_ho~XuI{EM z2SWar55yn(&osZ>pkNe&nIaPdvsIjRtfot!m4?zHW7V?MnXC7+U_^(+ps>wC!pclk z#102ZYVwJ?RcWRxsLIncjG=9*gE^TB_D#{7BVC|2_MkjOYGvYvwfAl!j4(l3v3kkD zZB@rqz4JNQbMOcVa5Vm$ERxG;tTEGBE>da8A-2r8tV^|XR#6V0=HhvDg@`N9mLkSH z7TE?hv{fn3FPIm z8zefdwA!A-O))DsyB{&tVLBbI+tvD5AZZs+i?cZ>A{VX7REDWya6E)7D`bl3;MnIE z&2Jkiq`<**>P=~{H;P$p(a`O@iFcLEUFI9HF%;4rSx2ZRR?e_OW8xfRQIseHk<&L*s1tqAp9kr)iZKqiW}3+keo;)2DxFGvIPd z*o7}cjE`Zieq5@JO%Fw5lO}Q=49N^PPPQ6j4@Dh`a5GqBv!C1X>GL@1fO6|T4jFxY z2C6%GL&-P#sr3!xEX;)vGj(;s=36GoZo1q}Fvb7Oi&q(%PWu4ouD2Zbh(KB{hxf;# zh68ir2GTyW0lD>#kVYu_TSI4p51}leIjGazZ_IXZb`V*NJQ=QS|zb5NAnl2_ftI5SC>pGe|l$_qLLVkymV7mW~ zFZZOHurJWP8y8m?jqyXk7d?GUCyE~y*}O74&)MUWbHS~uQ!_cRY_)|3#&8MDKgR@_ z%dcdKb|`ZDEp9zPkb@*n?t)+W_L`vWLTU~2R@BeU@2>U{+SlF%e4{{HqX^!A1%WkU z-bw9h-tYZ=4Ci3l%iSi&P*P6xF`)maZ3jo$Gkm z=GV`)1W(CY6;rL~M5#rlEu;4~(xc3%JIoOMJr?-&%@>L7Ks9laBA||v5-ZvwAyAfp zqCR~TFEjL@FB~{umsAvxUFzO{kCZYTAu;gj*3(Xb?LY{AEPa>!jp)V>cq-o=4NBgP z+w3D>?tD)G3t9pjIi-GVEhcRaufnJA$-A)5&@8l$`K_6Ln<0npyj4*a%r^KJjT%3( zD(Zfu;#)#NbfqII=_+em&@#4iV%Xn2+)H8*;NP<1h2S`fGT<;O69Ey?KvE=zzV&^V zlmW4JLnPHrx1KG8LLL)_ zHs*jLN3X*L4-6%i?{<__5p_N%lp}6ElH_sPurJ`(AYm`p({Q16hV zEjq~+%!j+YcFjECOJWifLRbHzhzRNBv|~myG(fF8iea&)aZ?PeF4Wyi3N_^Gfrs|;>=WgtwVpFrPPh`Py+@rFi>m*+%h~Uf z*5=)06_@O)no4vXXbRe2@kKdpqtHC)byxS^FlBMq`t^UB)&V}_UyCwW)GKmm+GC8D zxSfvrtp6Axt=QOlYI=e_H!qmYofK=A%^{F?T+kBX*h1R1g^qC=o_C1;@`8qX3Z%}l zJ$E0%jXipWxMr^aG2m@*$y7DNtz{ZylJrbGs!@b18q1aOh%g;7wG_V5!=xMFmVE1* z{uh_R_PsIEYt)UAFgFs%{ikM@^Fq}cZVj&KEZ+w%CT2$s_yto`?1>usuGYsPfXd`v z-#S;HwzyQo=C{Lc7v*7e#aeAYb5d^VKlLtvd85>a(5>_*5QTH~cbeXU*cTtotdgmJ z1B~0b%Ed&MOOz|KPmzM_m*jHF+x zvwcV8t$bl|V?*wKFVS2KbaB$WQ`#_$`t^shX>GznA{e19Xnm)!BXtINMo@$()XZsL z7&Z=ME3?AouX%`FdcAz^U@8m#6po02B` zA|XtrbOgUIP>5J!bqSHMI72yB>Eq=DNF}L-*zI{D-CMg@W*=al%q`MDNE>MI#{BX7 zCur7=_w6lXeRL(cBGk8AI9i(|h4i-yT(|gIrAc z9p%#h9pys(|4~8yqm=wd0ZDyRRWrvL>9M>zCt&OdjQmYP!_X0>TdI|x!WpSm3qnj> z0P6EAXoBG~WU(`8Zph}nC|$-9$MStBoeq-Ld33I>F$<@`?zZF=@s+Ut%4d2Fwl?v- z_S}ji1A`I1MtM*R;80{Q&CQH>3oSBIU!4la$z(QK`~=BIRG~54ek#J45}{Q&1_9G#pPPhi zpMgvd3;oKO5`ib)jfA|9`A=CL6(ua`z<3(UbYYVgSANlaG|IVOgcuFIu+4rOy^fx& zW1`W+iib??g`Ai=G%SgZp8W*yzHAJkh;bO*kZi7IkSDp2VtYzl*ITL}f<0c$g{cxq z^C4=(m2#?iV8fMhG6O8VaRa1s=jm(8$X_wZZM@6(XW25fh`bHf(aceyzkVs2CSF%6 zhi|x3lB)^6wt^|D;7bF`cfw`mA`nA27NqF~N-G+Nl99Kzv^!AfaJXe*_t&yC z5@mSe4|DYX@SAg4=-5zMSTpn{3>&hVis+-*M3z&FXkXUQ3vJ?;sEF7^a6QS?Yl&^D z$r;b+_2NmhCr1>)yJySL6{u{j@BfSZ;Vl+kpbb=aW#zWW&{k6`qRnRdI~m(!rH1F1 z{`)68wee}?7XB;3OzQ?}x|yIWm5q-}`27Ze z(5!zLts|T|#vPCsVz8!6KJNwC4q$NlqnozmiY*Li^A#(O0?+ zT4IxT@NR@KxBfIR>0Xxx*edNhlv3nO%1jKk=-4xtK2 zg(gv5#mEXA2&_)$dfOHD{27xq5MPH3zj!!A!Dnsro@Ob=wG11r>Lg75$#LSZljJZo-WyKr$MpcsYcy1*x6S?D0l+5!D3-O_$csj)nQ z^wGfmtzB*)wxfv2jIc9fqX*l}_y$gaEYCpbX~WeH{^-2EzT(?q3B|NibigCuVRpfz z+<~?@GW(gyIiitkS}{}i;%axU!uoA+qJ`^xL76sfO4F1x{%sDC+2vreNum#U7RpHL z^N37-{)sJ6m>paChGu)^_H%(iE3>~#Ct^!7~-6?Ea2*=d><2W@K_4in;P2+12jTP6o{qpMK2 z_=Z|pRAN(q{7dR2=&>QMN}MF8cMt}>K@{Jyry8t5S-Bf=h$maVSVyEjbbKGsIh$3C z;A4(q>%^QN$a&j(!QN9)ZL=YkYk6Y9Iid}x+s8?$mm%UbDUG3*CjicBQ|rv8J`D@l zEw0#k9)StF2RY@p*68YY)zp!yVv|`=$ZpDBMBpJk#T5t5HR;=gy~*ZSUdoN4!%wUG zRyrfD)P5bF6_G9h4Rx?8w?W$O5Q={@zL*JbHF;U-S{Tr;1es#uEB7FdX$HH(8h|3M zWI@xYoFLv4T?UPZgdX(!DkMgrkotDrkFB4V^IeA8eow1X{sp8xtjkZ@h5<2)mn^}x{he?IJQ-bZZ}OV@t5KL#q&BzYTMBOh|Fzr5#HlhQe|MWxq#r*h{@2~+ z|2C^uX>7QnnxlQ$CsGh^rLZB@!k}3H=CH;EV-&KbSCWZ`k#cN~te0;#C*GsCc4PxaHwY*1E5>s1e`2+BZ!}gogBu`R?T0@gBcr z%RWEuoN@kSJLqRg+8ZN+7-&SixmCkbJb;p&xxS@il=M>8a!*TTW5hOCWa2O)3sx4u zI}krO0w7U}jE2^Mm=d25V;KVv+K60?7i;}@;P%v@O0=`!_TUO~;PzjL z4B~cIl9|;-8sA!3@(SxC1v36IyJiTiljM;w7W$Lx5+xsbEsU0R**H`h$|q6@7hzVO+3{aOZ2nQ_bASkmS|Pa-gXT`tFKVJs0r9%c_kw8juF*l zbW|4fbT{PXHg8FUf}Sk9JqQ`wX-z%Q3}_=a#cR}m$S52%_?>dbT6;mCbwqD|r#WfP zk1VP+$7#5;Co|87FspN_W@ltfIXM-?FdF)SawA@9D(14eps8qnn8;x4uqEvm`SzPw zYUf^d?(9_Lkkn+$dQ+$Aa4hAe*;xM{lzn4#XK%A*$F^oj&0kv*|BZg z_Aj2i^WG2l{^!oDJ8PZu{hU?nsb^Q!uD$t)ZE2w1Bt3iOC2sQgeE1@yLbRp5BvQSk zeo)hKSqS%yy@JE~% z-(gSeBk5@3l2)c<(@w-5KJ9(U43sVyhNs^!LUpugQrg#rgb7Z^QW^SKAtv&r;41h=$UiEj>|RSYoe`bSYn96t&+Bqap^R+#j(zv^z*U;(u@W_ z_fdeWY1Rkp(qH%zwlF4WOQ4Ttnl>RXjA2=$hkjWUY1j_F4)WA7 z7>7GVt1Cn`7+)TmG^x+>jvEM`&JR@Q-vRLQG=oM!E-MZqm95oz8*fDOLD93s%A-{3#q<04CWFTtBqGQRb^O*&&)c0luIE+8xW3JSxg>&3O zOQhiI@Vt10VB3hM>9GtGCJjsA3jfM|{kEhT;H2fAX*31jEhaWj3ccWI8UmvoJ_qJ9 zz~Y=)WM`F9Z8UIfNh#kHYsr{7oTWy)D&2lCM+7zS+>K^`4yV)CoZl;qgK$G%4X>jhjospuLUyl503+b&W6dgZV;N>KaY`4~=Ti5~ZmEnnKu*nP}VG!bM=6a!fTP zEz6233kGCxXV};a&vRN!^ncY%7^ zBJ$=S@#diLa)f0wP_5L=#MEF!1_Ffy|LegeKWDaVHYIj;@E4nPi7A(wA?;t4|Qb^8MNHSWDoh=qX>BZX*|tnjN0}_TIYO?Sm|?+Ch-7a`{UHg z?Kw@mbkmtf*S-{Ql6+lcf_`32%b2ZejLR_Ex_LK&sX+7NC4+d#hfH7EOJ8{lzrYdw zTnAGIeMl6>XtUGd64+>1AKqna;?_Ds zqT;rt5$y~0p4i6e$fV~N4&Wc#xwC!amPOwe+Wq(Y-iTX6pFZ>W{PPDQF(M)`UvEssx602U849|BOLfH*DKEYTnRUOQ4r*_NUGZe= zWYgcs+A?cul`7|<`U_T^AE9}(ZS~RAI5fqwuc%|-@_x0?;!)LiNy66N#rZ$$ zaAzfG$)O0K4u8$tG9-e5S_6Sq0c)b0D9FcZ!NLs~l8C}W?OLqCo4BmnxVC`v|K9#< zrsqSBB+eQqtcU9Je3cNk-RExli+&bjkKD=hX(Da=C8wcby(hZ|bS5MW)cIj47agOp zjZ#K0AQDT+4>tulbgw=VE7p`TxZ>N_#~kbmCitrJJV{1(chJOOZ86_I@D!q&Vj@$i z4BW||0x(ATEmKxMcrh2x01VFFkBHZROOvY4$Sfu}G4U{=v{b2;UkT?ij?_|41Gc+) z2$sPk2alT=d)Y}Hl92!pOVG>%W%dinxwOG(noLRX@vhyOID&XUBj(tPc>_f z)uM;QUBX=_L|$3#Ta|}Xy%@MeH6kBby;?{-%TbD;#x{SYiSprYxYUmLtgFd-Kh~+#M4L(tWg$;+a?j$^<~~Ae zw5YN3LY}S|Nc8DXqDjVTCf0GEdB@3(i)>HJ6x5t*dwy}bN!jsz5-!o%DkE4trpRx< zNV|Sau9%xDtg~_A*vR#2vbWr`BJPBVgCxTYZj%HlM z5A!C=r+SdHx$FXb3sm*kQKGD~vMg1qh{b+D;@BDbqSsu4qMmpLBt=z1T1vn7jg>-U zeS|``^TF3ay~RGC#p9RdM@R=7%UC6nV#|`Gu@q@u1yS7;p>k;ioAK~Eh?~RkOE~R# zz9qwjy-chLnNcM~xbPhuEn;$VufXzQWa?xFT8t5+?5X=WN9Lol}AR0@Wk=6 zdoQ#j2W$%!1AMbk48;mr%^(Do6_JfB=$aYGdHpxKDC)lmNz_G%)(k-XoRVYke=(;> z8eq;?yhuZQrpC6-q<^$mfP*A2DD>ZRCwt1frqH>WH<*sk+Td%r)O_v0xo{tB)mk?6 z-0KvZ8YcV@Y+{A$(S*@r6h#yC;L3im=Ux&>0U0JQwCl>Va|$Iy^+g`zeJo`bCpIyR zum|LzL#@_^A5w4DRcrA!ADX}ybFvzIUE3=k@DChXVG^^56XKd0!==rIZ@6mmNYMtR zewbm(DR`v6G2)%`-e>~v!zHt;CDZM{kz6t{Qt^|{}DO04=vPXG+(on%~c(6Wki(s zQY*9|FddnEVr*=X^xu#+@`{ZTTo+S)Bg_p~Q`F}3-t02#q&D+0m|9xt>>~4pNvb;% z7FMsUa(6r*1#8`ArW&g1un!?!&r@B;oyT3rnO;|$eqYBmUq5OQoRHWtRE$Y(b`3GT z;u419$Qi6sjGZ|H9HhmaMA9n^l=rpfcxv|6k)9YrUnAn`W)*~ za49A$87xylI>^IdEBOesrG+j8~h_ANHC zqfs^*gWGfs%wVPb9c2X=)oNF2i5;Ps&dR|x()!w#{!DS3a(#YpL2*`@wc_)bY8KB| z=QcT@X{R(;VH5Vib4y&EdrFU=Ovb=rt+KqzuWd$U&CG*%E+t;~8PCWTIR^KCIMdvu zNx(~gwxfa~yKe0X{=MPxD1{}Nm&D$`h4-QrS}kn-pc0b9Uey_dv{!?JceKvVwvl@O6eK^g^9Zo}dOGe}ikl=aHuk(29Qk``K*&-c3D@3|FL#a%YAR1H z56m-EVX&*WPH(V@m_|PnPx&qq?t(pJ2pjBPW-vRh$}J6C&ro6T_6{#x&*1N1cxOuh z9v2$V-B%_f(QS9|wvnVf2E15Q%H|S8i3!GPbNi<9wza;>L z9IaAsOsL;Rx&qJ;+_MuMj5T37!&FEFbo87pa@(LvpEJ6mF)aRM5?M*_OX(o~t5QsZ zu0UdaM1*cV4151dBeE*HB>+!PT~mF3X(tqp8ZC=7oc+m)hy zlcb!2w}grHv`>Ir{>oP)E!xZSqw#!8I%4Y*r~U6Go(|u9qxTqHR1)Q_Y;-J%3?l<`6S&6B_fEasC!zm)jC2kq#z#eE zyB$tqJKeYUM9Xzi@gitBtOoeNB#_EcYzS}289K@xINHU@{No3XR(FI2YDmWd`MPd2 zN!K86h8VsnV2-{kgeIx=*N;*iqq4#sVROs+p!N)odcE(_f4a7tuU4W8VZ+~aBG(ds z@y{6UQWKc5CpfkV%^B6th)1~|Y~|ulZW2kCM<4`aA%%wg5AyPo+73ELl-}2o&E_$i zpa5ORA~CqoTCzfJM_LWNa ztFj83>}IxD02tj8tb{?34w^;5LS&kmtszLokGlE%{)BYVvqLDxjX4+X<}|zSrc8-2yv&!yC}FD-LUNI#I*us;H_v0j&1xGC&T3Gg;ED zplouv`og^$u!#!r^eXuD1)V~+=nNH*S8mJLq`z{c09FuI>{EGH)dN0D5dgLyt7jpUAv^4sEdf^S9&wxYuK|uR92=|eOs+3CP}t}i z!rH4T3Sny66&XC60gIB%UcqfN{@&48ryA~!`b63{!&e9?pwExUrS=XW1{|lL;TRUZ z%Q0xV2do_)%n`f-aA25Jj#5;bBx4)^wG^^#C}a-ZA2!$9Akc{mnob;#Vtl-`@mewvCMr^dQgnyF7Z& z5WgYwAf|k~Lng)fN69?r&zeg~<+22PlNb0v+JuUd zc!`adII3GU$>7^G^U51}t~Zv7+E5>LKYk+4CNWaq@&{B$XB0DB3D3m)ETJv!uwlQ24dUmad ztskAt`;N9xSB^pw4mlEcd4J=^9~v?a=Aq(!wvuIgX7lF6AzvM#WDc|P_OYjcKQoT8 zZgRM z+;Vzz7nT*&w{6z9i0c0oqW(L!{{d0ez1;uh+c9}X-q3*stRc?$+r(WWo3>GsQJrQQ z8`2*gCQ5!y!j&CsB}>AM0`kFMrEKZ-1cX37qSOY&l7@2iw?b{QppUXu(}E>I^4i+d z+xu&h-iV0sq2!6=( z@yA=pC9+>6ocg}-lJAlHJv)juz8e|u`9!B+BILunC7pJjV13jrkygPKqsDawvE-(JzIj^my7DJ zzbq-&C?IMckeZ*HXB##BzQZA;K=3(k@SgP7BA?H;05T8MH@C=W!L3dkVLfquv|fiG>;bR*4F9D-XCUhiOfJ zNRE)^Z+2qn3p)+U+>sEuq@s`#>7|~<7LSKjr-#EqZ6t@rV$~5`TFR162PLevB?{Vb zP6-&NKe->XZK+rCcgpL(H2yH2Xe25z1#Oz@%XUqf7od-w>q1RbL=pywSJ9F+bNc)0R!tvTFp%M{0M!yu>o0sQ+$qP(+bG5ByMqCdVWcxi0Ty52txYd zc7bf24Y%LPnnLK@z<`e|0+dmwU+%UuKygzXX>&l8b4l79fVD)^`u-(BB5?W5tb`HV zS95=YKe=LNk)TLG|KJ~n0`DB0z4wuG%L;JHklF4COfxoy)t*1{u&3t{&RPsemi@~emjA}?SX67&LBAKt>m&l^l&{Gx;SfLON?wqy9j`S zaDI!EAu6xaZ}%GSiYhcrckZl^w)21f!bX5lO~%TLw&%3% zY@aA`OD%`@4f1422;J|N%GQptI%@_TbEdbK6G3k6Q?i}k4wKP=B+5?}bXw%}B850~8)suy zQdOEQwWA;G?$U2Wb)mLK ztip|$^a?9(sC@Y+SNFY3Avo!)PX8#PT!`d8k%~T&tYE`D=AEc-{;gCuWozn^w>tAg zsy-DfY(kjTO^jU-k3JJQ6}Zk^+_DQm_DvxPB=er(FhaG#l!GCk3&!H<3N9ILYd~6d z7&ZfdId3CRE&af6O2((cf7EzICEN@@zfT_K9Me>oBr1h~hQRQeP?gI&vKygMu7y7j zL4rp>+hVM|IUacqikYXWYmDmi*9n+DSz1ZuOT?qm$GD&23XEUF9l9D~HFz?@HK2}B zIbh7bxUG`{jOHmeKN$&D%!P!}oQ2+yLMJaB+MljDxi1lp*-~R6S}BML6*H8CPk?Z5 zABJI)Ni^-%*%>#GbgJsHvxJ}bwtNk5CrQoI$1sg;mF{&)ol%r)F?-4{XO9k2shr9>o^9GvpC8+zM z7)Ot^)o{|mphDP%#mq6#3Vg{W$@@U5Jlua-IP(5bp%#it6huK%5uL3JI4hC?UX083 zy~rn3z}U@*qW9QxIDG3VOEgeTv^fh{gHwxGa5|wYAM-i21e5wR!J7naLKg_Kv=ouT zE;jz0-Noaf#q|SDY@C|L1nUTI_2rqYQ?Ej z8JvvZ6gjr2_KofXE1;hx6%WZcS%;1g66aNhc^Vp_tMW&zDXS=}uX8%$gvbhJ*U8?K>xV#o{Rwf}1boVyJD*rcpm>cH4` zkkQ?Pl>@QsX&;Escqa_quo|c)!Y2!fdG>$6@PoWm>_b}<$rVg#tVotC8>*Otnw2i! zXs%;1i~+^m-4loU?Mh7~%s>!-p-qq17%~lGmIXZkTVtU7r0)&<`Uh}x>;CJhf%M~t z0m+XawEvIZqVRuE_5LepgYiyWO!~?(Cf}Yokovvz8zitLRa!hC7YRZn6cH{M6fR&V zg6Jh4R@$_0B2aA*Vo;T4>9sGvSw$14?ozWoR$sxs1G-{e$E9V_by0I&bMw`*qsnK6 z?v3A#9EI@DK}*lO<8|9}w$pUm@y8^L-`A(W50yI;0z>!3J~{7^{t8{^y%O}#@juJn z_WLe6J$e1p&hAPfIp;UYL3#lBL~=lpU{C!`GXlv?IegF44qn#wV!~JR4Gw|mJ}=(Z z@-E2XV_vpT;X}{jt{d0;R>)T`fj5AJ@5$kX0`If3U(Xp(k?pG(+OzBD0_X@T;7f%0 z_Ivqm8XuhR5O=qtQP&RK?b6<=?>&Z2hiL5GO60BZQN=M*+GMU?WJLs4w1VwwgM0?If;iR)C&j9hfkBUlHscB4!Sdc&GZxIh&d zYCHBul}VSnSv$GTAm8Dv`p)|oH_OBuU*qlTNs87Bo7TZ0N13jvqWQ}*rNTt$!H&fY;}*1g+v|x+ZN<^C;`z?UQ=qgl z2DQrk4dCKZ=T|n{)+CIb73UD`pu|#;RF>0Z)XGWv#E#-wJ_^BZldohck~L-FhghKd ztExUS0^~I`=V$FJyV^OEa-keY*V2hbbUDOCn&M@>Uen`yTOjWwlGc;J^_K0{j5TF@ z8|B=Jjh}e4Bah`_5^A`pX5(4o+b{Z}=w#J~RKiK>9%YHya%1YX( z2nfQ|^lV*6gxwbp~KwaBoQA2r#~;{?NwUPYSCwG=4XeNY15A`GQ?zil#%t<~*|gNv_zX z15#T-w_B+cVhWpXLGsNpBAzWIQg?A@&K9TRqz{p%qag_AZ|x5gPNkaesOFxlZ%$i= zoTBAsGwJeB_APIaD!RN#m#`>sfX74S>|qfEY0HBibZ*4de?$;akmQmCD>id8WUe-R@{nL#U` zVVcDJhegqz(&&6E2nHZB341?ms!$?HNCK{{>L7e@u_~x(1W#(4Lb;)ab1Tc-;f(mK zmLz6+QN=SZs!DOZ0QYcah};@I@~sg9Dwjjsc%OX3+6WJseea|`PIznxT)rwnPN&hv z*{F*S#y&@XA#7SoO+^d+Y+YN$rcPFiK3U3I^-%=2FVENk?N$+|WtUG2yYRb9#KkI^ z5H-EyiKFG*3dEsVKaf0r;3$=Dqd~2<(wagFfZ#FM|B+pPORQU8CzY&GzmZI15=2LH zNZmW2bSR-!T|59t*ESk&l61|2uW-J`abHNTtwhgUx}H3BD{<-ypCab)_(k(LTRM*) zJtfzO1FkWQp`3oeRoB3smcD|ddoAruTn10U#N!(LslY zTxT3bXH|w0R_@Aeq3nr>G8L$F0Eg32H#=lhK2SAR)X$}b9N(x>l)Sp~=X%vW^NMJ* zek+x+ZYmzG**a0C{X%j^Y6{nI;ZXVMHZ|G0`H;o2tJ?skOVYOXP_%7yNa(dX!=!>N zr|BCK_30Bh)~?-gKBi4eMbNcSJLAxW+MPz}#je||@*#>0ACqWZ#WGN@b1y!$%%Ie6 z#xtxsrff_OXf76K`^3;aLuWaKY)p5uHL6COn*F6pSFOowoG>s+hn>PzoMk->8cbH< z+*mvufRvsVQ0FtJ!HZkNF4{ZAxQwyS)YRbO z#qu8mX+1^TJ2Gu|F`iNG7aFw02eA+7k~etdlg&lviO`#Bvii}(+!t+$*Xu6s&%i*F zNX#QDBDG6mSDK`=v`TUmrKw2p*BE)tXVNAgDj(%uV={}wJ>&-jCwSid7}iF6Bh9jj zo*4@&TVuW?((24(UFB4qyZzY+?NiwERuWvi>mb3eKW%!>xns0@MEIOgR|s`v-#BZ29r@Z=?2Og~F3lPG=qw;X7VGH3thCLZ zdVc!gwRys%CR0W)ddPqgpMS?3;joz$KP;_qJl1I4AZd|7)0owDmP*(4Y)jSdHl3%f zQrD+X#gzWZ)bDlX%Ez1mZzK9x{tQZdg63!!ge<0tq#+#7Oa@cjQCG(_-7aS|Ee)(8 z$UnV(VVVv-(b?!Hb;!h#fk?3D&e3i<_Bod4ZgP_p$}YO5>w^QQwS^dQH_<)FBrCO< zIKp(C4fqFPUrJ$*0?s}~O6rSuB{Q!D+5=}@vU^2BcfX3Nn(n&Y^qP$3o3=^Q;W#5m zRw&R+4(uus%GkW?>V$RjYiusq#lC|PwCmBnF3fu8T8>bhb2Q4Q^A16=8 z{vP2c_X-3Q{;#cYzJu#O5xHI>5&{we1eHEFpfpdtIGNoD-TH@osNf&fKDE!O>vp?8 zS2ws&=p}h!5sY|D4WOq)v8DvbEL*uSa+K&TbOAiJV6cUD$RMXQ_ppW6;~cTw6G6My zgFSy)#%N@)JlvH25|3$iBJ>A%F_?$ z^+}Z`lZ9#v08$enCw^4(0cTzHp(P!5X}IVd+pbhA?6UzCzA(+?@{}x>W2B>-SyBg1i&2NdmFG@OFZ!i7>A8Mu&`3^Q^>bR{>-|N$dB`U}fOGe9upPm;!5gyfLA!Z0 zY_4!oi4sw5|9Oq6>x(x22@dV96}-|dtSB$_cMzeXS$TuOnAzecFKTsi5dMI zD@=_Uy{4!fPjSe++cy0Y{q-e_bx{bHpdjsOPI!7w{A=_Phjo&n_Rq#uzt~C`|2_~B z4<#9(oaxgv-HHyb1LTt99b=Qplx-%6Ok$#j2nW@gN8b_99mCIk*uRy@^v5^d8D`ALb0XpwJ-?;1ymqMk+fo-!06^jq zh`7vy>k;$1U_&=Ah_+%%U%)AQUY+paZS(*-r8pg?Z*m7mKW|}h@n(^om(xb6<*of&iO#@jQ7gc6P-f=5LePMXSoy$;Qq~nwNt^ zt@5z0_MJ-P0er%kx-A=o6iD^agND5}`abRzVnL$TWUoVb+&#S86TI8K`f@q;@=rCZ zsCBt7`74VHd4ZX0RYG}v$gcGbF|TOfQt^(|>i6o4RW5I*i0a{C+yH~4lw zIUL@op)kz}Waz=q z$P$M!-s80w;Tk2cIg(yIm#)5Pymn$RI>)BnO~QUKQYlIAY98kn&LJ&@3WD@dZDh*! z(u3L6XdT@>h76WGw zqiP#pX=gQ?NNX@sz&3z#(wEN$521C`l};F(c_aHI4OyRaTbXm5ih5#=e50x;?*&C( z*aklh{dVai5l~+uDlFCC-uvHOY2x1dEiY^ao#R_32D{X;so~v$2V)Esa(^B$1;vM5 zhtJght?g28Mmh8kAi;F{F&^VHnDnjd+KT26ETUUBSiZx^)9#ieXoTACNg){;Yw8pg z?taP6z!@{Lr~8Z%UO~s{l05jQko!QumL`Lzd|+P^O`{ z>TucKj98?&z&PR4Xw0nD>tn{JJQX=-fh1VtHAH~ZqpTS8|9t2knm9LUuoh6iitRY$ zn~E9Rzr&l78%H?cM2~UK#Wf`WeNUo)fMOZiKFJkhit<$(cWhC0$`IV1Z}Eh&)ie zqsYOeZ4eA0K(4|zW)(Z5G6gR0D;Kn}}ECM`!PsiP;`}8r8^X<`kp9p9?~eE z*BRi~-!s27-28)qIjSh*v2I|tvWLvi)}q*ED=1K~sLQ?)XeFXKOTCO&^%OQbsC~X# zM%_Y%foo~PH76CA7+1WLJOLb&zF_mMt{Fq&aZF`xLIWIHJw&>!L*}jNTOOzYm2^y( zCVg^LMVa0BTc(OnREmy#LVLY0_)B zj@v668Z+uVQbMQGi^a*UoyT@`>4`3_S|YE}5<;1L;+}e*=AWu6It${29^Z3Qu5St- z#s8y4^S}37By3IX{ykC)lCP5m7C_D9l||wKQb0ulE%ayErM+NfCnqHphJgdybgZm( zzew9>O#X}qW2*a?pvwOGqPf8?*_-KBS4!Hd&zHLo$c!jS6zP+ax`;+fI6XwWazZJY zf>|wE4pgwW-55bDhCSO;^}cxdEtQbuREH%g{$Qv-9H#1`Av-D(n@;cr4?KwjNxp_2 zK-j{YJSlP-D}1uY^3PT7B1K1py|C+Qw({Ow>E?}rK5!r(!YfaF``4$%Fbb!c`9q)i z#jV$sTp$LmcU~Zc3u6t52;*7#dhDELxKh|Ps}^HnO~1%NMD&7STFzjz>=9vv5QLRD zr?}Ck{~tIAtV))JuO`EhkF6`qpGE5|r0G?B(WeFp4_EAXbHShDTZEjL6RFv=qr_sZ z5*JYDs*qAwFsWXRfrrT{;;l(!)-C!Bb$8NAFdkh(_<#945=Zj{Jt0;E(Y#8LfGPAO zS44XONwq>=6SX>b&9F3z>464ZF*5hO`|_`#|CN9VFA%c>@jV#@LH+TA@_!ONr+G-<12T zRfJEcQ|R9&053#@o!|a{1QK_CVORBhK7OvA-)QTJED*11T!jr#)xr#8` zz_kz4xFL{U*PsSfB+*dWj+$S3HZ9skcQ<}T@yIAXgZ*$-o$F2}#wg*2RGN;nhPRc7 zDuk$vYIcs&NYF7z8yFmbt~B<$JJBP@7p@2nr^*@^#!0sN9Y%k_e8YlbcH@L%aZ{Mh z<^WFv*J+cF(ZguJH2}tAK^)=$2XpO=EK@niP3}4t9l`8u(BdyePQRZ5?rX9aPTNhR z-Vo7XX^5B{Mp3KvqdCnTcb#=%n`xB%sW+KX8_lVQ-2rY{X5%kBN>8thz$Q)O(&$5S z*z-+y7^osRALA{NuhpI#peu}jCx-l!^p_tx!Y6UR-YrLS4tLA(dgkgzPYxP;91=I$ z`PPN2pqyLy8sl}*LT%E7nb#pKLbMu)E)NLX($_EIq&l9a5@%VsCYd-3Zqt!_Ae!V5 zTa-&%adqH6^CXHYAq}%J{1s*QzWd#CN?lh3-=eHEYjdpu0{mj?nyK+$YqC;FS6H{U zO-V{>Y?y@`QqhhiIttN(zA!j%nj6C$eGmXctv-bH-1wD8fL1Sq7da-VWXEm+C~bJO zP=v1NXtV=>{#VIK31;gL5>1V>@w|)7zLOpGNjHTZ-4pcy4fDS|tactx~jEd1R~0>|I4i$+!Vsvqk%qdg*^S!5efi@>KnvaTU<#RAG=b0qt9R^%lZd z!w@hljfzg3MM(z>vXe>Lr}7v13&bEPIyg%^27|3KnuYZWQI9LXs&U%N?^lOkE(Kdq zYDlzEB9o7BuhteEk=(3)`Ujz!TC|3*8s`Xs^(4JdjpkWi6!@WwT@giF*>lh>&seft z%Gg)z@&}9EP*z2xpwMc~{E=zAHkAZN@3CFHbiXQ8Y0k_~=MoknOuBzOjw>%(VEB1}XzjQT`)UE z@D8llfvXr}PoGB@#U7$Dr;^}$_=V~ohh3Xg739IYtXf8mAS2oX}KV3nw% zuwK1<)?$xgvk+ypg?VQ6c%MqZ7gn#S)ARd<`TG<|_a~5|BjI8ag@N#hL10BHh`vy@ zKeN(&VuA123lM7RI9AcOsfJ{Vd;8>~fV=so11+?@21)@afuTtpv0S**`)BWGoLWPi zF&fXA%MP7)T_r^uLLb*DBvi}q`1>Y!hWYcwJRV}uV#8YtiRsHirKtB}(}kAr3Rwqc zuVdFl@WMQU!uN`kGbn91V?;`%WHGS(vM==X$8--o{K^P*(5i2tVJY{45^03u>AQ6} zgO^IHM|6vDCk$>?7P4GyKv7TCP;Fgwrw7^aw4-{wa2r+NH8q@l;iaYu@-WZbft1r= zR79uUC@H&hJrL)^mQDmN7A-<$a&Jv$1UmF4i`MQ>d36Gv>vIj{l-q+p+~-zv9PSjZ z&mXFw#hhB7QOgSq4vhhz@1DnT$We4ApQJZDg5wU9z2~65AWpaBmQ)OXwQRGU@hAD> z(IC$78psw_rsoj*pq__*4(U;q*KWYblsAY1qGUH<6pnRcY1PWlN)>y8v}K)m`j5>t zXpR97v{gMi_85Vih{2m3gcloNK*1i6qxl`buczR9tl)dHO`&ArCv8)?R8p1a_hP5YvK{-8ic^635wpY6~Y|0;I3oeMDX*aIydQA zB-PyI4p(|>+97JerBu4!O0fnR`J|QvJlT-0@t4=}57Sh4G{WA29C_X#mJ2alZk=hh z4z+YJ_<|M_jW{=!tCaxi8T<#!IlMqZ1b?oqU;^JiN7H&I0)dJCTwaI9=<4J=Q2S}= zQ7q%c`jHZCkS=RIobh@-^0jRdrXVDV#l#7Pw&WNKl@}{`9F*8bSyBOAL6#>Q-ZY4M zP=T!vfSdakrB5(wOv5M0bNZS3Cn%OYBLXVyJy*%i^H+)1z?Rm-(mH=@$0xR|K zTp_UZVMov$eG!QqO8{-;^leajs-&ih5LZCK2&GpUQH6mFVSJM@eL`b{tVAxyA?h-0 zgMRUHQCvk~5gpw4)QHT!FHDh}LZRrI^_G1zmZ6XckWgar83^iH@2M-YiDb-ReBoVZ7#-N^0{(8S?Mw>bt z$Eh8Jn1JatGTt05SmH;eZ!F-ZY8>v#pj_HXhnS$CSV_t)3e=JiByrnGDnmrZx=>j*4ol5uzB z1a(-8Bt&b*iqYl6Xc!6Q`?6i{)jLF0df^veN0*B$B)0Jbs;gFW!bwM5?6WZM?QzD-GmV@A}J>Rz2p<@mdP&;3@|MH;y#mCOUDQ_3=*BaZqgij z?7oeqQw0n8nxj5Xi`f^1%fLK?AeqBdyuyDMCkAtV4NUWhN_pQ3mfVS>CS=q?n9JAPi#bpqQVf#_kxgOzDorogm@lr@RWUfS(SA?+}) zmoh9@y%Z-#^(gxy4yHazNzVwj7yG3_h8y;^MHTr9gK%tNQ@<%V|Q~LK;kI zqt-vLMRRA_QgoMBe@h&qR#K)Pr3Sux?>!*RH&qXeZAg$b}=JlfSn`*l7` zezq^5c?QzUxlPoN4;L7GW$ER<5d6JX3Rlb75k{-ogb9cE`dm8v>e3yAtovh*ppUB{ zy#q>L`yhe-fnSj-7_eQDIz&uwl+m8Usf1QjTMbG-SCJE_OQwP1jzP4B70Ecdh(tTv zy}kMT_UO|!o%&%+6Hd3Rmo@BSnofQT{&k?eXQ{s|3VEcWzWq;EUY%^vd!O$VC-Xl_ zasQc)5v97Wg!3(G;nP+dTlp(bzD~WZDfnEI!91^#Roj~J7n-z9)f(9ga&quyD+aWR zRn{zoUgoU~{)Ls9x6@E@!PHN_H$6a%`t&MX3%MkD!Zo+o)$w!I^~LAow4L7%%ziZ{ zXQOtg5(g0h=3vHRk2H$`+G{7KiG3S%JsaWh=OD~2f%Fs+-DE@cp{Ac(gI=ALlOfugLth!oHjt ztyY+&7N(3ng|_FK@@>&s9raU#Mm-(zCLo1PD>G5eC2)$h@7R|MyUJ_O!se5k>phtY z*1`GJQjy#??Jbv`M>?D~*|jZ{zAaE^^u#`a!%1K==A1e0RhWSDIweY&TC$SJmTRTO zdTsp8o6R{BRets+4LoYwE{%EmrwG%nIHJ`xmmCWrJ|alxUVqWP_ff`;r0*gF6H6FK zP}(#wgR!r+Pey+RZ8fwdy< z03iaFK~3MMtY1dCtAxf*xtYDMuee)ZA3}%b#z_pe(#wmM!}R9lowvs)elEq6tED1G z1J#J1*wWc7U_&x<)c`9cMR&~so>!hCIaj!k`@cAQ$KYDuC+|1Tj&1B6+t!Y4+qP}3 z*tTu%*tTukPImHSp83tGnSa&HnRBYvtM%r-t5&bRuKxD7KP|4rHm8S1#TS-q<5cBG zWXC99C5qiS{KSB#mRwz<$x$1Yjn%wsto}5FK&<2T-$RX z3YAA&W8EL^`rhGNI zAjuN1b0Lnq8%`**MUM9#mSuuI-Y(G#m9KB=k-bfIR;l8eW4^)*lDcZ)-ar=jjb`t1 z5TWxJhI3I)Hoyn5Djhn#MQ_;}#|I)fBCfs{hv@yEpW zj+~jfx&E>37BC`)HQNlKF(x-=<`r37kiSA8|6$78r>?<;RMeEx@st;~2Rn1kC_aVc zN*)@V5(ngE5$o1h0$>opPsJ|k=zmxOH-|AZJ5-k&eTKGI>oz{YU{1=LLod1f<<+38 z2Ljz{Lwby>0w+bOkHF=FRs$X_oPL2V_Ra2qn989l;NWJ_5*eR6sWC%a5oSXo1N#(O z7b>Ju5P7G??t%{!mHjeFxMGySm)9**$uSUq3wdcRh?J>^iV=N1U7$6hd`> z^_DkqfxVrmA#g$7u~{bo2g@She*V>ZcL-jrYaI_Sh{V(#Gy3jdI_IbaSWNvnZ-2` z1@PiT?lGmwppp#B;_oVf^WRu}5|rFd(c{0d9E)KM;QtnFy8M+RN5!ML@3jSM&b^vl zGOMh*hg`ylF#G|73yOKr61=V;Whb?dKOBkL&@z1s#1V~r#Ex&kKMc`7_XQuLFILQ= zHNMW|QV!WyJVxfJEeJqDJA47OI&zW&K8j-eDLhnhBX!`MrI#daX{FBzv`9Fl*07o1 zfYbV9YXxp08*K~CF$vNLf6D!=j>ENf-{rIcu^=&L23qB-7hm!i7(?$8q+*SmvBOX1 z1s%`stHT!}RQu#-0CdNxSLqht2%z#;NmQ>TH#Cwl9 zIiTLLyp<2hlxYU#ggLa1bWVf1S0IIdLhUlO;dS-<7@6UZeJ=549 z5mT{$o$G?pb|Repmg*nBN1Xou#=WqOv-Q8%ELjTDw)5X(PWznpd$cr-h`(X1%_TD> zng*cc7bMMl6u^+HJa(F$Rh+0ywXGlzMeTvY5W+xt{eA{>o(qYk&JZ@P%}!jb|G76g z9-g+{2DZ|l7X=-cc2ld{Drb4FQg1NX><2}#4k&=rZ%Q$-6>z8AH$)@tSHnWHm{%>h z;WG~8VZyaSIg@Ri9fa5K^k(2@CvIss*F`$=Tr0)s?~NOSKalTB3)aCNKaew78%ikD z#68cXUtSdN9f3mP7aA(HVvBRHe)+i7-Nx6Ato)J~?HXJ1DKUVmmM;jPpNH2$`RJ6d zl!3`g-w@P;(fg&}ikC?hW8UF|?aK7nY!v>ZiCx@LS%i9hTQ)?!^2J`J>9f@0T&ODn zq(KeYtPi6l+!BP%PH_j_24<(RFmFK}^( zf4@r|>tb=`+YaIxR)ELe0n~kuwy^pEdrTw>f3&iM1NFeT?CbBOAjB$w@a-BbwS@yqJZ_`XsSrWg4CHy;B1pmj*z<-}4hX@3X=ae824FR6;*Y+XyM(BW)1H6PzCu@j+|1XqvkZ9%AQD^@~^xO*tbHJ z{a1dESQ#lt7-2Qb_9(;Fg!TT#$rV8lKEa%LHbVgA4ff&BuV`RUK?nfUC|Z$ntqA!< zqSo~a@^RnqxManqqU7W`H1&qDIj(g_Z!~h%_wiRj0fYW3F#%6;^HxP3u6P}FT#k#; zL@iDBkUm8MAA8aOltYyI^)aZ_SDh$5^rqx30Fjq2qt;h*gog`5<8x7|nC%@*r?G&P zd7o2YznwRYWp70wV$LWA)M-^Z%`{QCzx)uS&0+%y#(}*<4rdw{8b)7`KLZLLCYcnA z(xwoEIw(reqA#4Z+Kc38v8AKMx~M2C?vO&Y@`kr3c=pNh;}6AxNzAV-krB2H+95ad zgq^Rx2;BX3KBgQB5y?nHFEW@0w%iKxYpda4+Z02e)NA*f{L{&jxeeZgn&Tb97ZW$L{(LAIuNVIc6lOYO?r4^ zayO1Xj4BP?->+;RdeidU!w8>1zKO%0t|^EB?fCir-L%y-&m7O= zu8D)~ug_1&9`%oS0lMVx6$QBc(9^I0WxzTtsbE;IK`qu2<`q3VtT9ANUSI9h4R}99 zKWV=wW$TA;}a5*wwuffa17CEK`i=}@Xoa3lh+_!mv<50w;Z4M4K5L;});jilm=;NoP zYtGI+mKLfET$Y?+E7&v5H%!Ls2_`{A4G<#u0u;_mN;$F!LiR|!1G~UAM&~8OHE2r+ zFidPTe{ms6h04gKCy2NUq|YT8F^QDlD{)e_bq_&4O3fO0_IAnOHyo6jdsHNjppUyq z5YH#Ub3F86e&Z5PpjNdo$KBr~GpY~54Od$_JG7FkF`m^=rx2U?T-CUT)l_4L4Z=Rf zn}YAAeIAOQ5m=rf@Vuzol+?>*xuBYe3B>4 z-6F4;&#CM!PT?>0&0a)(~5xxiN zN|ux-X;SYj>!(FqwGFM~iy86lt9Bh)Hgg5Y8reE?4JhjdO4O!(>B4CH;no!kIuc=b zPfbX4U`cq>kl>r~#|}dj9>t!gm&NJF3VG^mlkfI`8WE+{A_SO*r9VxA-39R7VYSjVV8@61Mf@XEFF7&{cm zAB)m><#OV`BO`O4RLn86FO+{3wIK_C#xh;Vj1l3j2}F#QdsdQpmr+_$>K(40y9F{^ zyp|aU=w;r+12-~$q3?B5T!6=D-y4It^lqY8=g2)8m;Pq45Sr0g+(#n{VC^6?TX^wT zq%>D}99v0Ix_LzM=}H`H#CGVy-0C;8`z_pkS(fk1CDi>S=j0tM98RgKNTeLjz5rIF zOJ0}&dg6p|s1gPHGSpHI zkiC`xJJoM$VZ|mba;5&5z$-6sJE z$Q*j94R>nFOKDTi7jP03Y(wu#ZCZ@rFB@w_{!ovRcqAq?%9#(WZD;+i*akY?lt})v z1TbI6vCdld+#!>haf?_#bMM-(`T7qfFyGC;6UP7ReeBs->=X9;cs=^AL#Y0TBlbU6 zApb#6Q`S_R=R^H$mWHYlt_8nV4hkp|Hn^n?#h}%oU<@w+B8ihYrECt{&Bd34hZ7rmp?0}ed8W?M1FKH7_*k1 zecT`kUW$8HJRei_Sx#L&o@R2~0i^71RN=|C_b1_D?qEaEb6*dX*rXuNR)7C3}SDeL!OLl8zEuD`DEv+OOIYTrm zGLy|@!$HtwnfZH!l^>qu9{m-u{f{!@wON8#IKgp^0`W+F?l7ngw3FAECEEz`4Z$#H z3gbVIX!xGK=AAj3%l$#Rl!p1s8457*4H0WiOa+fQG22%F&!A*IL6Nz9?G2|04=o>U4R z#F*oR9&j1pg!;(s7!qfQVcpne9taO$Mx(G7oy@UI1A;ZO_*3#_sqWJ?>P|7+%&U+n zB?}-s*N3{1m~r#)3aYg;-~mR)VTKg@@78O<{shNcWr&tBC5R$a3uUC^_SI z54mtJr^%H7e9pwCTS9~HIop3`7{|4wFfVKNciv>^J3|v5PHmConk^1SpzqWMe=X5R zs-_mc66jRu-GBVyhcJy3OhgoZn8gnMx+l-g>05(i2yh%*12T7bB2vO2x55#z zlZ^NR`LB+a+f?F9zVG6G;ajEr-~Oo>|GB;>TH7M?Bl@66<7b*`nlEZt(p)xyYk11( zqD1~2Na33yom-e5uIp22vA%*2_ALri*@yJ?`|3~8)z1W1h%|??PsmDJ&u~9VOWU;V z?)Cz&4fKTAYsvPDMgyg&q^v6rGS?U@~ro`PtEI}@(7A$>etI;^;WB5LOZTKCu1`MJaD!dBwdoZl@Gutp6w?H z%Ij(O<`AD5(GdsH>RI0Yh`m!L16nBylfDd|KnaIKDIc-c_y(gH2Dh?|vPn^Ef6lDR zQrGHwLmd6`7|}~43b6d!VmuKi6JKOlyC+6eLGlUoUjq^5&c%%s4hYDN;J@26@b7o& z|CHVTJq(M~pxl%e(LS$@7@5-CrAEL6Vy*pvMu`#mgh>!d{KW(W{DjE!!uuyA8R^q{ z)e$S#+Fa_YG|<2`mo+S4(BvRuRg^U37nU}wmx^5MEiD(X)*P=oCOX{R#fx*cQ#L%e zy`Mjid5^OluiPE?_91_Q&`VBG2SA3ja9jwX;2+E)+4zi1#x z+)n9QU(wjQk1)D-NowrwHOX`aExA3iGT5|U@U{+SueD!5w;K0j;6FygD7p80G$#(M z$+mjiT{@11Xz-nOrZ>KVGrAq_e@A@a)V%u1|2{Y(g80kD_O&zoZObvn|2rP-%OxN4 zWp~d!{gILp)A|}j4`xOjq^$-P9*~!cEhc2R4p!VOV#w3u@I_(Q=)2d zx%VmT401IQ{RBf~A;sqeMQ-0zA{#}VPP94O(&L0uC`VjsQ*}90MO2#)W0)7Th7D(h zoXTG6<|7*cvk&E~M)K78>1J5NJ68}-?)nQisv@F6;~RHQm?y*&S2`h>Q@#kYG-MX5 z7ojPLhp^E52*Q7Nr~(n%1{Wi5x6(W+ha7HAPE_UEvlkk`>! zync4lLTD#)Y$@uK=5vicEw7mf2}aoCto*LfX!An$q22`)aim$Y8De2FOpaNAGrJrL zO4u?(K%d1H_-ex%gvK3DIQwM$4)}Zw!&;+gbwxxpSb#FIRVM4VA0Hp1!f8ui-%my|#mo_^LcN!r!5tZBkMTNi|_+c|7qK znz(R?Ui`+&Ou;@mzEnIg>;bcU@t~r)@znYt%iXyyb*wu^sNr-f{pH-8RMz_)B4r{| zMW6u#Ge-Kv*yjZ$j7(WeEI$%6I@FeDCUz}jD#8vMwe=#?ym8#5`D2|C3*`tnG*eel zZEiyn5*cdJ@0&`qQK}Sp$r#Lx%*@V>17ip^gF}-9>h&s=x^< zcQ>#2^2g_!Nk8q8)R4y1ffrquXzTtK1$Dw1)6>}aq9mV|kUO&{Av*nL6X`Pw(0fFG zuA+xNJq9B?I2N!{C$cp;#SJ}-%;JT=^yfvGu?H~9p>VxB`2N&AKP-%UxG*9_t+tK? z^rJo(0#nd8*IUlG7W@!7a%CwMbqw08q=amyDIQAD&o`75=~M77;YF0&zYSk)Fhy`s zgzI3tYiFX?gsLkw)Fhsj#3GJGV+j#XQ-OF5W2`F5#G5su&UL^>!z>F-9UM}qg{^{~ z8d3nSu&W3#X(U%0mF8ljYBBG3XeXBoQbwgb>4U&uJ&B$OG#$hRmg}>MmXlu*OEJ!b zyOwzGrEYH2UP0SM6n5EF3WCw!BS007M6{vgxsT=Bd8-KcgF*EpKV(Xkig!O8lR}~t zxD!4vBtr*$ySK_^S6+yMw-UJkl>s~Drc?^a5K*x<0q%}O%Ld~x9Fs~$!48X7)eg_5 zKEgg6la7>pB^u9#K|Z%JN668$SOr-||l=4! z1b09<(REZp2%Nja!0#_onu@8(27&3<0W3~eGu^3OVA_lMF?*h;RNHhyT1wL+%^hK9#mrNE@gio%9dZspyyXp<)t&U;6OhX8V7)CiKfFNE}{Ue(1_xs2=#bFxJ zMKYna%62}39cKx_GH4}2lAgx&rg>+O(9ik%RAv-YH%zYi*6LO(vQQO9Fi!KAhEvK+ zsj68904WW0u`o{~PK2->S6@<*-~qE8Q*WDckKV<6_?}ds14*S_h35q0GB-c?uqEJK zbo~qZdt%6j*)RKi%bpgwg7Aecbz?c*%?6eWZrA@Is41>Celt!31 z4uiUk)LPgm^yolJvVLEo!W!LV0*x}CnzouK)5I0(nS0W_s@)IaB|*EZ$&o*!Z096h z@jAiNds=7H1-?|1O5&A|CTg@y)Qf)3pFq^z02a;udWI#S%qULWj3YXATrvz<>?xBw z@@A=ETkG`#(cH>Mcag%Ktr&ytmO#ujfzke(1>E)aj-!={g1bUe1LUe4p{1mtOn8k%mS>HtNTQ}K1`wwJWh75-Yni9S~XBw z(1#)|@33}~(z^nMb;k5j!`KWluw@Jdk7j1)jfm87(W@HXKgejxW%M)IU{2#;qER09 z?RKG1_k)6-#}epfsr3q6ag4QE%{rj;*RrVURZ-L{Rtsiaf9yw1=#FvN2C`Iwcpq30 znvzOHQ#%N0`=uUfl#FvYD40{puJTKX>F?PDPQ*AdZl*V3lKdtgEA%ISNQrRh0>sZO zOgV$r*tc7fv;AU8SP?(~!LazNV#S2HN9ZNf)ry%i@~IF$w1Jkg2g6aE-mi<2W~G;O ztR*9Fw#iS8U{G(X1-EJmeQfB-`kXx5%eT-=i{3+m-bZxCAd*=&-gKCzr6~jKRkTos zs~V?I7CDxT-Y;q`zE9lb#tGkq1HJjQRI@Ktcnl2!m9GO5MjFV~58tq3V*po!C zGlpn~}uh}Z(5%Yu21?KMe%@2q9{OFV}JdsOC(19zhfwYX_f>F1CWj79ybRIzv+ zR4^f|@WUy{NY?Jz5Stxn9(w$?RtU}`u#vGk8&;w1@FeM+sn}@}>0Ax*scPIqMMzQ? z-XF}uc~O&SCm7#!i#gpqj^=aW1I}hVOnWe8OP&MXMN#uUdt82*i)`#RO^u3YLlfu* z7Xv~%&VaQhNQQMLvf$Q4CmESt)Yb?}V94vd556q1-31)mejyh@9HL@+*j?8)-?XsuA5jjF3Cj1Xvx zR}5+AtO^h?-|iL~uja-|>ofhtcbVtyT4OLTi|kfI;tY62BHo=bjMa}|$Lum5RJ_e* zo^7KKB}4n0utWM6P&m=wM!ZV?EaHml_g)3OrT4Q7&iE(2nKA4B3T~r<8K{=s${z*~ z`0cZKUv;{xc0LQ$4mBXXIA>*N&7k^Ze)b!hE>u(xB_@6yH&F8*_;z0;Ck#tUy?m!zh?5zc@fVl)U;u8xR+4>@3ypa663(|RKW+6vz5dkE zX#QB9TBnEnHlH>)nl&3w{murt;LicYhbG@pJS!H0rC6;u2Cntuuti}BFR3@des+7P4|IglYg^1fBky97@*n$jH^|35ZEB?JJn4>@q&?6|^q*%+T88<1JP>HdH?mUc;Z#kW zmaugexnClLnk|763Ud)QUV+Y|3{~iF==ExHRup_`gXJhZLqZRpVkzwCx=crApZDGYX`9UbY`57H(j7{MOtWMO z3eXX*$RzHK%%n99R{>2ucKn($OZI8(xiW?ysnx~tMR6Z?JLwjq0@Ye+fL?jlFUgG@5<@RHPaoH-iI`L>d}OfT-?cMoZb?U zC;L4*7vrc_f~Y4A4$#ei??SIqX0Lld+4VpO?m}wi&i0;u;U|bR%#<@bbza=^{?}qF zD*N!upCD(y|mcZIJmYl&-|4^8(ryjQSmPJ0Xyp-b^6FXli0Q{d&Z;&2j(u zd`t&)M?Q$uZv{(6PZotg%#B{C9!V5f$;^Q!Nm

    @I29M)4K7%0lIDwy6Dloz1LNX zneQX%=Haj3b=D%?zrj+4&bEdZvA%)m66hLL-=Zf&zi;R{kGRM}*B7SFO? z7T4))A0^BB-=@#o(|oFlwV^=LPD`4?L7_5d_L;-kXDZ1r*x|7;SMC&tYhv3ND)-}6 zD##B>hz)839_&X?GWu-e9R3i9j1f2zDciD&a}{2siYB(ehzrSs~0<70skEXm@yflqM0Pp=o+5uXbSBMQSR0JoO0 zr4y+C#_n#Plx-im)f`ZG0lm5zOGJTV{8BU{r5CWo)M)uDvh-n;ri3@(F!?F(U`pf( z$%Bm#%U7M66get(5ir?t> zGk)H3YQFGmkezRs7vBS%!dG_L#bvB&JiY(5+->01dzkSDG`ofO0`TzcCNu@H;XFHr z5LKb7?*KXL&*;DZ(p)veR_7=A4%h1cjY#!Rxc)yP)w<1h+nwi}(|(_}k@-+ZW3J6Q zKADrE1Dt@rm0Ug-p=`}`c$HLBp}ihY>^I~KaBNE$_HDC*eiGCOSR(C&C*B-sx{G2}A7d0|#_0rjc zHeD3Y^{jeh4Stl$A7_Y-1)71Y*)m*a+3b%jip8~%BxH`+G98~gi6_jgxg>7>QQu9>GDQ-HOVD+R6GiFnM37tai z-X~&lhl5ocY_)qw7-l&J3&tAray2`6Cg!@t#Jlt%RulcAl@@>eDj4X7S+s^xZDw>z zeA&#m`Yz=whmFvFYkt69auowazQR%8-O%Thgf4ihYZ2_#emh|WCeoXmNx&CY1?(3$#nm? z{GAs`>*VQ*=fXbpbbfVv>}&+wDLts|EUJ}3U#O z_-%XAmsdFZMCtb7GsdJM3D;U*uUBFHBaQ-&uJYGpXT&u8)Fpe(D?SU(Dc4{JdJPWM zPJKAh-+Tfyb&v<|8IHS05HyBfR9S*V4Dyo0E)LUCP#A7ZtKMliG09e0H98myHd}dT zzG+_quIQK0oAq#?>V3fTor2ol@EXnlBXEO$;xX5!dFfEY*8YR zoaUE=716K`7mC@KFJSWcyg@2gllb|U-Y`%PIkM|)P6<2_R*@@#mcIH8&Ul>+9!P9< zDAsj@-1R3!T!K1(%pUe#EU!}<9gKWmK^uvT;z{0-IGW8G@%S;Wqum>sieI8>Z$Z8H zOecoL5H-AHo@U8$aM`}29wEvhf!ke5k1^p3?!TVvbqCR(_-H^tLJa>45%oXYjjK2y z-IR=*k2fZaNE2|70brp7h_Uff*g+OOd}98+s8Rw@=#0c{^z0;4QeaNXO0|`3;o#t& zL~X2mjQj=pr7dk|ZG&6mXYr13r-!_3bf4#S zWWc$wybZmBsYxRJV)z%_k$VK|01o!_?daV_H5{#gR#tBKdusM6h|^TdUN0OYJzBw- zV|@?=aBissePo2;d-}8x3T~-GeQbnaZdCPI{eA=LUFkBo@!E}mc^dY92=G+PLFjDL zJNk%_Rn}BLM@*M$@MCrR-*gx&xrnj{dEu?vBQNL-+`^*7Ptb zHzpJ{ndn+31FZyu>~ySrfuZsm zes{EX!_S`XSHVYDzXkE}%7dfpv*xxs)<@!PUkOi9`$k#m0J@E;v}^{cD&30Ee2oVy zD&3mUT)znb4=3_CEw|WII+nfX)NVWh-pUaTRW{awj+5e+>zPr`lT>Snc36F-=|@8% zrkZ^j6PP!}XG5FcU5$@aNrwVkM~H779U-DBZn|mPVOFPL6vGoXRQ}& zZEt62aMqSM=NiciRaG_B=9V@Db234*Z&aoUPi@Vu#Vk+4k7q3yhK9NeT<6#p%d875 zH0GM&u}g>WXy1rk!!V8D3Jse_MrM%_sIu>HjFv8BvC0U9-MCf?)ACi+`()b=b<<#vm?} z&)yx$L220TeLN*WHE3aYAi%p5StD*lSVAA^R=@n#b(XZD_fj$4qw_qGFT)bAyBX!3 zc3NT%_qr*hcm~3CMs2fvE0eq0;IcOAf*-W4xQ|7c3TeW$%qN|nzKWrknp$csIg-%O z`(xHTSXlgx{|w~MG+wztsxCWoa=Zf{L15YN;FAD`{spmih#0=+=8;Sh*+H?HP^xCB zW>E0=WI{|RZ|IC(X-bfo1U|0|0rRI9xpD$@4tlmQm*t-fo%ZQs$Wx^7-#dEaU#3EVTF@AhS9v6 zelsU>J%v3c=Q2wad#=h3q#%!;BFopR(L?2h+GQnVR12fam>Y@=4a2rgV?Id!xt7>XGq93!i=)D%Yti6?cO|{dHOa40nTKgCx`5sT0a4?;*ZY& zF#H0`u<#OfzLQX^>M0o#%uH_YH>V)u{^PKfaw|2$kf5x_H2UHuo7-SkaspS=#06MV zFBK~CyD#J)*4Ka30 zhxlMYc<#Sv{OyM@W*3BZi`*em7q4Y)REaQpgWd2K`L~p}I5Nb6pr`Rh$h+}NB$gXk zbuqI*=Q;2k(9<~P5HJ=({Ns(h4vz?^7qITw4MZTq-u|$hv=)WFg6s!#ZMrtri#Qen zLF>_cWkUaraXf43PQ$buxgGeg0t})0M(~`ZTaFFE8f4H2A=34q{#4{0(9o;E*(FBG ze9P&2ap1m!d4Y5{pl9qKU@wI3;GgL5WTUfEM<*m$K0&@?H#{G|_QzksVZY@5_@*H3 zuK!SE*rMFOPMxZF@x=N9s!>$P(ybl4yhQ~|oRia&^dBDNr``W~D~s+WJ+!PYYfGQ2 za?XC6JgY4>#CA&q(?zq-WyJ24Qr8u7O(aElHLmo3KM&0{lb6aLndQ=n2ql^~pjf;E zF-9Mlyz<&qySZlv_GFV@@pIarawjcMvg!PM`*41HZ30AoslVliWN)W`fCJ?0JCAGa zkqjHy9hqy^#dHkZw-AafiQmirU+Um_vsT z4GjF`ZOL*Zbzc01YWitKW2>NxJ;1UxGMaG3D@)IQA$1o%QKgY3D*xV$OVr>vzkqcL zD=M-D1yI%iAe`eh233!bt_WoEdwYahFlmAP zaK-j%!&S^Tl4detQu@&rdbGqXq3+DSDpI|XF3W6D?6?|Vv8}sQCXoN68WeX)Pb`>) zr@hIhUv5Bz^E4?L6x%3GxQ1f2a-iO8uX+7p-7c71z?$RsS9$L9X8uffIb>Gc1~(Z7 zrsw%Jvngv>?$(0#5>^S)6L=HLcTaz@2(OCNI4~34;X{8pFS|Z4FL^p)4AO6gCehzh z;XS~JvV{->+pD~Ra3rL~^<$Z(f5(7@p&E3?_E)02ZGc=mY%p{`5dZD2i-$!%N56cg zFQS6voiwPP_`xy1!1p5#_5om3Ltr_i z0U;qIFG31nISW6kXMPlOgiGEj!iIK2sJQU})Y4_B;o##?^3{Yxi{J=IZ%vVsFtb6? z`ylK_82G>t0-`F~l;`-Nlt<9~q!{>Y$ITU_MTN7WBa!x&}Z6(&u?2LjSlIdM~8M&9Q{< zKcJVw@+%9$Z9Vcy9Xej4Qba%y&~F#~ML|gX-W$gYG^kImo|N$>^|Me_!)&SvcTIF} zgKr9(RKAbcLQQp5VhkL}Htqyp4Du&OX-@qBX=?a>9;$4B`U=GTEwfrAUM<)bK*SAF zV@F#J{JNj><$IGmLGY+(BHnKT=o|$*Z|USWk<#vPuVkf?im%w}PrF59l6^05@SBw=kiU-m&-2Kr+AYY=$ zFTr>pQLIx>OiM~3^rL&nns=nGBW*1q8iB09z(PJcf1C(CP;IBf56* z?3Bb!x&MRFeuC8+KS=%Z0*WM);grn*$b>D7vc=cnJ1IjBxzGT6UL77Ko9(2S1L8AK@WQh0L~7H zzN=-{=PnTW4Hz_##3)cl2~_0@-aqCe`N03=D<35~;Z>Mo8T^q3?mKs>p2rcG)XED4 zgIta~6>|$&AyOB>3vO|ofj7oM#E5PxV6hR|n- z>;5t)WiMRpbZpc!GG*EXClgKnBS=O^fozH!6x^<_W8?~iZXa}&M_)YG34<=wTka|k zvFIA%%I^<|DwfxV!F6W~Bq>6WatD>0cYPQuWs5RtDgYt90L;(8;LJjr8pd3y5%LDbada(y^!~ z8Ibx9pf8v1!z743pVeu_5!a3rLHC z!cXFhO9w?#;QQvDLct+=umHvaYD;}1b9=ZbVck+xfXb@wh&T`QWMK z$|jV`QMW}FK9%K#W$;FdbSVt1s0}qu32nfgY;SgvT$bgF^aZ2GIB$o-P;;WulyPI^J6GE zWi|k!@6lbtu}pi}4LRH3uODK=n1c=og*Ji{^IIGIY^so=0t@3~r5(Uq2&`Uy9Tx-& zbN%#q&waQX2sot@S^oO$FpzpE_(8fm1p*A<DV<$bq>r}%t zt~ZfraqemRgA7hF@*y^hc2D{3StzOox#r`BHf)owpJ z<<%mP@Dk>|LJ1)hd(NjHBiySgA-hIAZS39lesBUXMKMbfid(pj(du*)$2XM26XD{@ z_7evb@m1?DZz&!?Dl=BPW!B`MDyym$SemgKYuOnR{u<^KlTC6~cfUfnLDS+`+;eD_ z2ijTICs5mtBW74Ch$RigvjsvW2@g^mFf~dne6Uf@j?7BG$+-D!^Yi=tJSmN}tgv`- z6=g{^#VYV_g&q>hsCKL>ca^KJPSE^4%e|4da)aIp)rHr599=NVFZk@Y-fGc5dsIFU zX@_I-sk|x%C#W>+)vMfv3IcIQlo^4}70T~U>*w6bl+YCmop`_{sia$#lu?_MOgP-; zCu6;p2nR(v@ckaw6-J7uIZrkLK^{a!0m}7#Vxti5$lAxmSSDgvawNtApgfjw7qt@D zMWVx~ZSNn#S_z`P0(qcQuoaI&t?AX%+p$tAZR%d46)zJvJldto6w|0FLVjM_rJ2am zl&+Yp&_3N_Ep(EGJ)}{=v&=CG4v(58Lay^ah+a8~UY%^eL>BJ6ZZ8Sq;(juVbRmPI zxzp)og0YIn$O$o465~8sYIrxLw2m3Avtg?B6h;Ua^!^41{R)^ zx@(6{rJDTqpX1(juht5sSKzoqGvFf4ltGyVTUcbN^?;BE6#Tdax#N{(0gf?aXp#y= zh7~NW3yQ)6=m>ssNj~x-n<@%bOB1Jfq$}5@(Gjx71MX+7;+fM^7E04)O?Z$l6wq4F z1jq|prOE-&<_u{~>4g=*B}x^NDR}#R<4*T9^An~8nmIuf_H*j9K_=2|D*$?u+lZNo z6#$|l7K;X$2bBiHBv9}}PHwF{Oe&$Al1R5b9MBchK%V!uf_-QbHSxmX+^xwBp1`GC zb2t-_^%Kog1418%6V>YHkAwB;rks*%+^73X&BaY3y+68$n?~z&jk->V&B9Lwm+M5w z`2N&K$OV@)nS7IOESse`BROj)r1q4XKy9TUQF`X|C{*A^(5L}#%cYYg74zNy(v8x4 ztm1Hn0Rno*{+~rwX=f`Z^Z$&ksZ#fJ$}q)|W>p*U1TW7yya4Lv5@1LF`Efy*;Y zbaMMs9^vI<>sm6sSRIGs^M0%A`S0KC?MwIVOzy|e{(T_q+h)k|TR8Ks(;;Vkc6)Cq znf^b8ug%PCVvYqNlhXC)T#TLS>6%6!70i$a=hlpE+UeI4jv>t32}d&KfTC8(0pIPY z2%~OJ_dk^z`@Q@hd?LJwO`ekwILpK;A_91UWjqC`n9OC9n8laGFy4Q#@n?7TW2#RT7cI(J+?27UIZBnhAsF^9->WX$_Al^=+ z8Gr%Y+w96~k7(oxHnu zS>D%*iqy6Qou)X?D;yWDstcaVIlos;S5cJ`DeRGD8H0AYiOE2uANhtt;RH&TXTF*p z7XdDO5ZenZOVq_fP_dn7XEi=FDUUSxoO`Kiz?sT^3DPo)ARR3_N7SjlnG;+2y+tEk zj$i4vu^Bm{fmgtN(CQCZK_KdG=+Np#eu{Q^HnY;(9ebfE9NWc82BY$$JtOaQbv6sM zjC`LIV;o25^+p=AV!YrjEmKq29m~Y{@ePZ^RMUDuVOVuySr7HC^v?)qYI9CY>8`od z6&680Yl60ug<3lg`9dUsqywMerIf{~Jq^jyfFeIcu^O`)EOUZ>eMFndXxNk+qXCoh zU)W(r%?#!I%BbgOQ3dEbjWR}PBe=?x#7)$T6uqgE9;h=doEVX`Rn%W3{nLX;AV10_ z(lVNA`gN>TW|NsSqL)Y;TBuCStGSc643rhLxQB)hqHhX~g_a z-*6SMRznuAZ;AdfdcpoNdrqqkU0$6%J@7%WULeQ+hq810vNT%qbXD3mtJ1b@p0sV- z&aAX;+qP}nwr$pA_uT2}dq3QnUhBMnz*(_FJ7PaS3^w%RQF`x{AZuXmmjYiM-F9D{ zu!G{;2w$xbELXJY)>}&8>3vXO+OfN8dcJBIkK}@SjhK(29=r?cgMfpqjF(EVzY*z- zm?k?eelNrzqYd$1gEN>fKwT$8*RYyV$(yc&J>`4B%QxU{+{y48uA4pBt_pCMtT$+1 zraR^r$DoQmlkAgK6+(bvMkJfFm5f%?)65P~mdChq$^!;8<@Fbzjz-k>AgeoC+>C)& zFL_$0)rtgq^+>jBUK&C{#iy76s7Ytuqwl%zy_!!-Y)>atAKacC=Obu*bqI+7cVBR1! zy^kTnKB5p?j1({6BXSRTh#jfd18wWIg7#k}^?ytEg_i8oh7_`;{z^tP=ImBhH~-ci z`^k*7f;F|LYU0E4&iFl1YD==9dE)WO$u)+_GRsjsb*stfb%s1b80XS2B}r1}Fe29? zP)*XPV^sC*faj5hVOaYU2~`T8enL}>1u4%BT`E}h6Z`a2GhQq6s|P~jRJilG!~`U$ zzLA5@n^XFh7a~7RYS#EKOOvlThl}!c2sg(Sm^xp1STN4o4fyovQBTVnw_YqhUX#^8 z2UPuOzT1M9 zZvTaH9$BUKk}BZB@{|9^ku)&(B3Sh(a39#>fOc0a5jY77YUv;k@k|YiA>6%}oa&G0>Bl4C1nf_Q zp9cm*L7e_Wt>6w!aI$-Ypymq);)%o5gRR!$hj!spA(qXX47&cBma!t*1*l~Zq~=xf z^aI7KSN!Bpar{s8b;*YOIvKuMQKsaSjLT{qj0C3p5cTM!RQ64-mrUt|oyls->;?40 zUwIhR=!1m`o|s25?3rgVP?H;PR#2v7fol|7@+R?sEKz`<=P7 zT{Z&`=VM!AOu$7+7k-IglFay}64TKISkcLaREbNe-g~@Jnp^NL`ny;VV3DG-Jg2ry ze!m9M948WBmNkW3E`~-uhMOC)FW9t?%hfnfQ*Bj&RQjsUQ%%^ke|^ZV7hWH-hKe!R zAxiIK(2s1(jB^*AcV>F~J=%-3S_KLZ0D}EiVAb!9QHW3w6&K&Cghe(|3`S~VrF*s( z!nD>u+XB3`2C`098m?)WuKe`tq!v{DhJxl1g(|E?)T8K`#o!~M*OB4ILxguDSu#e= z5DT*#S1go2kkYkFxUejQP{Zf0we~6P)>W#Jc?E_aEtG_`VtEV_pi{e3KaX|9&terp zy4ZQM0<{D$k8K9H(jiByi&V}>^(nqEoT=Oxp(q$n?G;jzoW@HKOvN<-uk&FzYJoZ9p-#B0y>r z>AN|UoQ)hb;vDt$EQ+Yu)x1GSEs?qW0;ltYk#Cz{Oqjxb#)=hlLvR{|tMbJ}t48?n zV&P4=Q^y#W5)4?$&F&s2x4oNgyc)zi>Q+`cVy6-poq3}3nwpgg@3PBCDHaG)?56Pa zD)5MVx%yDNsN!olLTNK=Rs))4c5Q91i50Aar+4aE@)FHq$vFK6F&&0&^{X1AP1tLw zqJe3NKc!+@h$Q#KTamIel=Gyqq~h(PrN*|n3N%e(?XB0irFgu9JU^H=A1$?Mo}}ek z11hva#tL7Rcw`c3We@KaU-f+{m|xAT%RNIo7hIPSUtS`rw&`x?)U31u)1~nObyg1O zfUuO?$~1##b7I#!7&z1n?3t>lpcGMYMdE=qf_Ys9JHw*D>{oA$x`MQK=g*Y{ydoj* zILNEfsfrrPUA;`%!LFNOyCk`Ph(k1eYn^wmltI)ka)v1=w_y$RDVQZtL?_q3Y!VE0 z%dc}boM>^p+I(2uyL4S{?Ovz(7>3M_&!H@EbSIH5(2V$yozAIck!K#hU|lYe)$;FV zYjUU{cRzLS>aZ|=`N*$(4E&|t`(Q=<3U1pb{Ceg^`LeM8Zfo1-TrPe7rFQ?8_=4m6 z-s|~*`uB^E|5>~LGq@;HNlQjk2}R4}NE<9j!!&n+Vh*lw=JXF>Fs!oD^fDL_IEPjM z^r?$sz1!yqW)c)eFPG0uPhyV$VXgyEho$9OD45aJ$6p^9_`5@U(~JMB%In$*BNPSC z_}XiV+a$AbdFyz>#^>)H0v~5l|4L{V6jxxq`BW);brEmC&qte5%nBh)ni4mSU_m_? z1EPtOyeX}@le#oXj*h%pQ09D&4h#__1FS*;4ESEO0DEWqjj2OWYC`VS4IwV}c!1Q} z?Stjm)QTM`qxJM4viWp7bTq`+U7%rA53X-)Ko8kUtA(G|xi#L7%N4^=oLd&@22$E6 z2c|W$qFeEK9P%p4@AM_o+iL>-K>7OCj7)NfCre|uRXNgqls1sc*~vq;xD{Tpq2c;{ zL(R>7!wbgx<)INq_M{_#lnhHE0G`AlD(X`_pYD{-*XtZ_hBKXpjkqG<71{-4xSo9N z#2fYAe9AkR#%6uqZ|EdmSSfB&M%#gb@w}3f_9Z`($-xDpkMvmn3D7%geD@6@DvaP( zu{DEp$T2d&%p-)95Z>CmVI7)w4!R#|(U4S#AGPQPa54g`O^G76wMSes>Y;l|Yj38% znkf`cth$|%iB)8~m=Uu=mxYh&$FueT3hUP<6#eId-s|gI6THS|Sys-HRy9_65<9XQ zX8iD=+YxJLN{-C9407?Np$M?;>TAHI(4O*E1#rNrxT=eOwhN@l@|xuW)2gyXBvWS$ zkVA{wD&}7y;5;gzZ3)36uPZ9VbuvU1$ESw6Zm%R{=FK!-CB#RPzJ*cO{&cFIB$y=) zm%&YE`Q5C04aR4UinvSIj7&u$K&NQfRT^}5;ckB9p49soSp{Fxb(MlNuVU{5{WL4W zp0@w|>oaQwSd6MArm-LTn#i}ZvtcYfky(TqcKObCuyn?aUTDFa^s>0^GC#w(8kA_N`Dy#! zz^0Buo(9wI7dr6MM~xMK274Sk93lpTFyOHB zCmw&6rCM4-YM}d-zqtv!sGg87j50xIinMF?(~s^XOeCDFT{=)3jZmI5YX0tLcb~=kjVH6Q(im#`)rMtVFQ%U6#$%1vL0d;?xlzccL8HVxI+*f=VLJ64gV4 zryFjt+_$K$rr`?@*hV-JuVEx}(KnBE$5n$*rdwMt4Gv(+9nj3gx$aG;-WXKF{2lAKf z9boC#wI-10B@1uMMljk#(ULnqqYH%Zz3VZ23!7Ih#j$9>73qcX2GzYV*w3zVZHa-e z?4oO@*r|_yS+eBd0e)lnUgsT$`2P&V|Cgi{sjQ)(pn~#+#y$!eO!%B5C)8?2!mAuv{&5&Rg zc<|e!y3_h~sd;H@G~4HI7rZXS*dP3O4r|Pk{!90aUR+=oJDH?uCjjOQJ@vSkT?S%x z3J!kA!;J3VcY;A;2D#~=0I_J8i9Kj~F0@VL(9HOKVBC9-E}|CJu(A?}-Ih#^NTT}D zg|x7OaPmYsM9TU+7D5MeCoLl=$V3gL=s~xP98^W?%o!)k8LstJ8J${%dG<#B9E@H@ zJ)?>~qTgt$94rhZ=g5hga;>+8E2BCHo@26CtCSJl1>!pTo zW(+2yt$7bnH>H5s-sg-I4bPSzGE@8lC)JR2y@@)_5V>h95k_6L>;Y829Vf?-Y4EX= z$%>$t5Ov)#F@`nEA|_tqEyO0T0IDo|wZk=LhKpq2W6{x|4*YKcPvc_A;WX z0aSabRFVOFm0XfR$0St-145+MDKA*G03mwoJ>nri#9kuCRQgFDC@zd0COI-?-qkR% zT=XrS>f*@7okb!=LbdbOThwrIX6)y*^a&RvST2uIwMjfX zvkh`vIU))&nRAlK0ZezypYUukJeH(0L$Zv_V?P(xmiCh)2Y5bY&!@Vl;2Au!2Rx_n z-B0co=iF8irfjsWzo4{zJXUOHcwBt>+uW*toM)?kyDrH)q3&CPIyg6Gg5J^Fo!~Z# z_#Zvi?vRhXdlzU}A6ZBdz)XS8IiYQO(Auk$%~)1mp2OlAgNl8n*}JfbGc7mi{*B4Y z;!N}cz*x*Vfq;yBg_9!V2LUi< zRM@VcH@1uQEfGJKxx#A0tb?Zc173y;Gi?AV>~jI|Ft#{2W)O%+fC9>vu@xaKV`;6I z2%|`=<(Gc+`U&zc`xWrJ!?ColKX~vye-QJunA)2JcX1nPQ1p{D`oYC&H0n;F9q-NObzecXZSiz^LQE*csa=a z&_LxS_q9j^w}|_T%^)0+_Yr9ehXvL0FXQZSj1eoEn)YBRpzSe4CrwNvRLj>P5TUdd zCh5TQy9$Z3W&{|o=ElVwu)hh}oT#7fjOPYj&;42ymd|FIS<<`lJe zrDTsKDRQWv!VjF!vg z>Se;^8YkN4i=+ETO<)wL?>ida&Mp<80R(Tdx2LQpt;fLcRa2P4jsJx0)4GD!tyd1= zO424Jh#@X349x!Gb@fFK47jxUy{lc4PJ0MgJmtDftV{}Od1GZu8 zZZt3Uq8w50ehkQFUN6sG9^X4eltRvqX^kX?#8S~BY;dCb(W?*8m!e`f(t549cA;H* zCM7$;>O@0Qp<+4W&JA}c=Z)s;(6(=1za*V;Cfg;KDhb^R4XS(o>jh^e zrMIFdD3a9Hvc=Tl)vPn=YPBVjGr-xYyEsPDZuiW7DXmz4+D8X3wnn)ZRe)9aQ+~oBTRf( z&ryfc$jkuquk1+!-`}g2h>{g7H4*1Hj2DdF{qM6Up2C*}0copX9HYLhQ2daVx`E3O ztZvq}9fR;b&5$?bCTg|D?=X+}bY1!UY+vA>N&c4tY(I5|HYXpSz5gXc)ge0Y7k?j* zkMEE9|8-1kEsg%8TllY&LiCT zlj4Pm=Z}vV5t5+i5BxD#NG?lM4T>n5q!_%ATj}0_{Sqw%JxR}hoQ!tr+i>IQ}mV{cV-EO*TT9c$6F~h#q zbujLOYI7C;R%&^d_NT{RdU0|YgdQj#Iw}j$eTMaBZeF;4H&@A(8;kC zrrhQgEHw`^MP$DzgsE*n?l~cPD8cE{TM8-NZp2qTX1`3H1ii0L=AwJCAJ~!v(_pq4 zjpUOCr=Kv&P3&?Q1165>f=NlT%u_yigP9MAbNAbO)9P#5ewQ`Ovl}G`|B76>$2DRx zu|`W8H)3vN2^!3Fr(!V+bN5)Z4M(nnPTWTdJ4B8`SsE!V(1W?V{t0t3Cw1j$R-)b> zpV(x7xf4}%@0(%NG!Rh@x_ps6bLr^~PtMs0E*R8c^_TCgXHC#pgJ17 zL5amXs1P>!zdRgKhUyYiNW@(>{bS8FU>d6Rp^KTKVEDa`u@EnOo0I_`D`1POer>a7 zHUz$PNSu*tw?pPu5Xycz<31GpF9|S)VsM0=-nvSL!KJ$i6VI`Y!Ov+^wIi%{o?m!% zE59yCrB{Y=Et?{Z$#Tc-e>I8Losuyb7Ozx45nj@Ekt~~k{!uuZYN@2l_dbbW>DuwlKQGJRBGM(}b zk>=zY#)De**aWW5bw|n>V9=~gBw5QuTKk;lX&u7P`_>NH-#A>Hmn>CW`od?ACX3~YTR zV5XhPP_#Cv@6Bb)^!*l8*nI|LB#NfIc0)$BTsrkt7Yg0mrTW+AR3z6sE)KC{7bN2h zN32-`$YcrRrmeQg?}>k}Z+jTi1{swGp#jQ9%tj0(`k9QGCiJBTfno1eXKoO}VSta@ zLI6c!#9VVX7~xn@De|`gdRIOs12Lur5Jxpf5bKCr>F(+#GjMw6fs6U2bOG^qu~zKt zidYGhTX(PwJ?l-kdOLRgoL~$V7i;8nMil%BO1w42DSIObpFW@DOBw(I*&Ox z=;%|*_S-ap(GG*~VCm%Am1>`e`79RE57;_09+64$rZyFZusY}@EsvQj?EX{8$Q*$2 zgh(Q)r;1m$3)Ii~5Ia9`gL@{?6ciFbaC*T*bM^W4np!4kTKq^t&`=agD@bZMEA^Ml z%h4Vw{{gq3XlPb$T1;Mqv<--veXIk=bbJ@eogcR6$6kv>$1;Qx#3^Cp@~ljjBDY9V zY-GVRBC%3-6cZEZi;!)UbBuzC%`mLItL$IDy2H_17}RA10}KvF9zLa~oB-aeybL(9 zclfa=kYPLM&|i3@qmX3~yUw!gA(DpqDD$@H+$W#^l9+LBZQzQ(o#hGU#}CH;sl)t( z8KrXmElQ8@H`B|pd0o$>b1qQ1ew5u|D)l}+b$cQs zz4LaudHH8Wzc9Y?ZVfm$51Z{uaIswh$aK!Kzlj%_pL&G*gB!wQE(X1}*cQ*&xOY-i zVh$P>K1>bMh+u|Hbp7{?tXI%4ne^q?Xun)ntp4c3uSpY9wR3iSt8+Y<*BZZ0_bq<~ zypHcDc*GUw46A4=3goFsH$hGgI_gD*J$cfpTwTjzW<|y)X`|^|0kL7Gso(bPp)=+R&pQn!Mb}5V;s=!Ze!ag6QW_!{Rk` zlQ{wr#YmS@@yO+;qM4H*Hvplx;61c|2kmT;7P2a1F$5WV26A2V2VO4()yQ}jpPC^b z_qRx35gI)GW5J#Ue%M%m(^YRcN;pk08L_lazuwQ_R0LHI70T9KGSBCypg{gY#RRMc zq)f2i@BQEVj%B0Xqa+pP4n|OuxRKc8W}CYx1qC=Ls%mV-^Q#06k3i#B!h>n;294*Z zFj>nDDnO6VUHnh+31~l~yGb{Yk6dxNcOz7=LpFd#I4~1AnX3}c)XH^nO@w;gg+S1b zjYaVj=%-@AX~|7{$MG_hzd?K;O`qFW1`Z}DAhSd@uicG!f*DFD%rN9^!Oo!71bI8m z87c@zM!-N&S-NK6@ck`0y4ZLMHyr1kzO1NRqjMTuOm%lG4GKv|isn$x`pJIHw{S|u zgKC)T%MXIH3KP?!WM}#%a;iqC6FgBY8`W$^zOKMANI6?cSnM@@(i7Ua9 zDL@Y;R4X@kvfH0OY!PH@v9QI8C#3zih)n#32SMybe^|zv|8bf#_QhzgiR(%$KS5T5 zM)w*lRX?4-+7W0lK7+9+x+_{0bw985UBWhdWZtx$?;xc6Ne?Re43goIk*<|kwewi6 zy0(B(;b?^uY=LAA4wvZ=I;+77tUz{Vo%ZKDjKzhw4}y3akiCx8-TjDsyqR-Ns|n8C zfhn^^voN(T7;+DJD}z0*4P|19y$n2f^gk#K@9Z(=2qw1b?LQ!wjLu25MO`!NRc4!& zXs6-uKsnq9OcfJCos{Ni#d!hSvLj30an>emHN=4iO6{Bzr$WIHOzn(dYhGfJ&ePnX zC{s;D3kMmJvzy}g{gNIZ1j3*7lI*reIm9eIL%^j*tdWXTZLS9sqiMIdATsbU`^C7; z8f3oQNF}%~C$jI65cy1A2QTXjPwt-_nv3}Ta#fgH0Dfwijjsx~w>ahn#{UHe{RWg~ z4~u43GW`3Qfdldx6&Nl~=cF#7bW9|RK6x^=d*?-mO#!a)a{6tR@mf8Bh0mCP3Ihj= zF%1&88p~We%XKAlD~_jMj@06F$tG?^s!*nX3f1A{4qH-W9-FBgoBO$lF3x!IrAj<_ z5B$J%bV;v_A}g;#=a<0ZjRngd)|;Ip+<5sq^L*HFXy8Z4=_^U-C(J5hJ3BXH|0gx6 zW;3kn6zvyPa=D52m%-Bb1Ah(XSq<&7(RiVK8g_a>`uwDV`Rprc;*ib)me28@<;_?K z-^~?+bhF%4$XjVW(8k-b>$^=9Y3Ndl{CMI?$*apr!btk(NyK@D9}c{z);z|faBC@? zmww~{twiZZsou`3hpr(+qHt}%GHMu`E!z~oNR{W22hu)h4Jwu7A8+#CbpE+--~L&$ zXz<;)V}BP*#Q!Gle>Y){X4WSEJJJWnXh;IdealVcr#CN2rfE%lZxmp+bfR~n`2NB) zRDWowBIT~Ts&$I&QjP&Z^!mf2$Yk-TikmW?`W?gB@4s&Ez;dD_fDkPQY6B+uP=Ojz zh3UhP`0oQ*NfOe>uv3->>Vo?mjhk!($v3-P>DDuNciJ>$HV{krLu3{d-{e~r1Wtm0 zV+Bto{)W_Od}7a+IHfpNy!pjgOQ>W_4sq``R%Z3bS}Lq2&DU~aZgl&n@g{7T9IM>4 zroGMK-h><=>+{wlBB7fft?ns;rEG-OnHcQ8Y02D0pA(*M&BY3-iK5Ws+7UTY36d&) znF)=6L`x0ZgBzE#BC#~Xs#xG&+-nnd+|oe{BH|p;P<=0gOCpgsnLVMXfHe~DV;Wve zA~H0v_XRzrr3f-+|k zLuk0U;}Qw^Yy`FXME(~mFSep`v{+e+mB#!3oCCRRq)j{jHUI5Jl1KXCU!+foMI z5lu_#jriI^ri3io!ng8>P{QzuTg{{D%?0goBze5!f{0u%z#npZmMAC>GvgEO^{FOX zs~tWaT|ZCql!VY4fs|{k`l2A)*%us4=~lv~K?IHH4&gVTThm4qvzWkap1B1|n^7Eydo@7!rBP%PgdE$4d+y!;oHfAABK&Ooenj zI`VBv0GAFZF<^(E1V#5RR6e<}?Zq-3U+3X&kFxjo^4gXH-JZY>8j>h(s5GbHpapY; zdfJgo*}N`mEx$O`1Qq$?+`&PSai|6gw$u8OtW5VU?~`8&$}C?+*aEJz3VGvxGV01t z)XW23m>ARArE7(X5zs8hl%7E+xHWt1)1eJF@!5|cC( zP*lFXssHLC@)js8mJDjoNG(JX$p9t5_BKul0abWbm*EPIu7=aUy?%!{G%e+wn?4k^ zQZW!ct0GLPO);=6<=8Wb>mWYh!^4<=uo5cQeEO7qe)IUD`u*YNn78{APM6eLv1L7N;YeEo`!y3S!Iz4799mGliVIa0JHGX3ZLa~KJ z+s36G^P60d0z{AtPL$414ihko6|cty$Zx1H5~>rD2(7~%2q1eHvy}_7L|_N?_4gum z=aiw4MS@axTvwi&r8eP{IfmWl`ilY*@4RInK~*SDn9gVwJ{D}&I^6&$*7BuYqs!^p zwkn1JEq4cuv!zXI($$eZLYq}7KCOszbLW^yxzW(PWy;03+g#Vy6WVzR$V6e?I`WvQ ziflB<4;8w0)5p9U{=(e{WKP&u&X@24EAC zF+NjVatxuBTOtU$8x8 z5sQLXsSlaqJWZ@i>k5xD}mX1RYAEjxp7UOym`U=n;$=NQx#;< zLQ~wCyUUF;chmLks?ZPqBHJ%o_f!j$oulU4WZRUPL|?e8;E6VHjMdeXjMde*jMdev z1lxXF7G!gq8KklI?2&r|?5$Yi#GY8KN2|_+Gw>Uzf zo*7Sc+eI%z0^q*sQxunS3E6*l*UY;1y}V*kN~ux?kUV(6WOha*Zw)wXAs#70o*`}F ztTs~^t&}89Xt#3Z*dewNjJm8OQ^odDu2%Y!xDqAxi|F{gc94N!&o5ox5NX_!3XwaJ zW9QI(bZC$(bWTEBM!b)H{o&2(mz65v6j`+=gVk|LhFBc9eHd%yp^uTdI3<~!*YsIz z;JU?z;cIAmFiblo9-hxb&HAgu5vti~QkLDi7v$1m)gsWS?3lFkxac4;m9e%Er-YCq zg{bM#u?0A98;>Gk7#LZ|Z7ED-!itGzYGshaAKoVXs&28;cr>VErCK#I`fb64!9Mui z_G_$;0Xt$;zG837qvjSg+I#VPKn--YZB-1mmgBNWIm6WMN)XV858tQLtXvOsnG0^k zeL@(V(As`hs{jq__H3ek68`zGZ7Eh|Fer#87E}cD>eld0W~2EPrr?_$90LD(vg!pW zRXK&8F(Bnh{l|O^W=ahIiQiyM{<0N8^;}m^Dz82wn>Y*nJj!G8`&3H}CAH>_e;Qdo z?-}oXmN$BhyGr+LHY+*FTtX*oX*iA^Heec({y;4HiaxvT{qk71%6ek)wl|?YLRKB8 zA8V!;uoy5u$_Z05H3oaKy&#EP4z14q0XxJa{YvokTPB8eW~yq9zx#ca5Ps&|`=hUm z^kYqYey2LIjUpXGEu1s6+D73@<r61@Px{T{_%wlS_S2AOjeu zjABWJ@x8D~ip(98FdUd4f*&YWH0_ko6u^*E4y|Ti#&A4H zibc$c0$~r_as97?dzT%E9Hki5q)WHQu}7xE)l0Pxk0%gaD7YHTz5tkD3z@MxKzyQ* zie^8|wcFSZ_4|DejkekZEIljn0V{nooGw^1U?MF=LCnd~Lio2zsCr~x^VzFp+luDB zQ%N|#>N57AsHab&9dmUhYC`!8DY?Tg*8G$=tCW6QMLkj`so_2R}+vp(OVmdWTZr0OORYCUjqpf^ti`%X5~Ujsq%Qd|+ycG#VHs zf5~-a<$~jRtcu0mfiCe~=aE4*>WKHTEGUlQ;Cf1=r*%@`Md6>E44Ws7g-BFfXEew1 z+|3(dAyRlc~F*z-w3}h{$%zLeZj8K}nsR5P<8o=-? zaH-XUQ|zhRs?^4*8@L4du(a0%1G}08sbrAVN-1kfOmkB$tOYXg19DSrN!Ot6bmM&W zeA(NYtPStq&nRFb+aPBiutdQyLKC)wAHg`g>G^DuHYmq8$VK!~40jRKJ%RqhSvtqi%y?EQ%MXV!8xRIPxim zUUV|G!!epCcuuZ;N_!3<30oq6NrE!6C_M|C0;CvQA3@i5TlR$wLwiI*xoH&QC~qs2 ztLLVe+TU;2S5H~{kwdYrm=Pryujxx}61#j=HyM1lbUMxxDz<$4l*vcde!h?=h{!;tVkq03S+tL5zi!dGaoltR|5DpId=7gh z8to=~EThpeC<*d?koxKv1ha?xYury>U?i0fN8EN-vi6rRH`fqd^5v^Z|3>_Y(w|4p znq|n>J0>do1t){d@VRKlgwFKscu8*X(__vd=B%}<%2!3tU8>^m7 zS_${nXM+fU5xB2PVMhj&7iev9TP36^rvJvF^`@rY51TSFRHm75bA7Cax(G#OsgT3y5-xCE=}a z1xSz>+)yiet{x61KsTkLR+@!Im#E5E7e%csQ8-FJGwqs;RLaHdl`@W#l8B{YF?xoC z3CXG;tW@)i+5SL+Qss@>@e)M+&Wq;pDB4|OPhQg;id?e@tSEE{W>n4Gl!v5Y^|f3< zfS70HA899TgEus^EA#GNKovV*rR3~5HptzQz;llaPUSibLW^^E$Ewv_C_xk#$_KQ%Ck3YI69*j zrE+xkA;(KHI?N?sQG9%AmN%Wi*lC|MMf_&eC4)Ays;yQ6J|#CG+}6ydlq6OPC&^t0 zIHg+79icrQbHgK_&&PCseudJ?k!=+~)h=Cd3lvp;vx};j%UtA8Je957rdjais=hU7 zC7?wHpqoK1HwkOdpaW>5n=Hwpn1jt}VbPfzmV?s! zgey0o(5Wv)(`auRf|{9v($_#v4>bfi1%zR9i>QT_tf*s)sM|J?;1&Zl)REUOtzv`n zn2*?+KObXl1+~-^yb>@NgIek46w$B9)U$f_QXvZ|DU_>PYV1#kjL=nR%PS}}>$v<_!VX11#(T;S_WhWtkD^`` zZ=FV5f?1^Q+*RZrV z@uP)E%1;{)8m+`g#7d)K@V^A}Vwc~|&yne4c=tjL??UNp7afE}fW$-f>?9>m?(W1a zu%8tOA{s))(~Y>$>+VI$Vpr${pz0DiY+#%)t{;|!EhODA;WbFwiC(a2mg0#dpkxI% zrR62E3O=yRpU~5e1A2?(V#RD}xR=ZN?kJBFoEl;lpobbo)-}xg7sU-7mLjvN(&ZUo z#KOUc;pvhQoDTr<+$d^{{;@4l2-N&#b$=JwIQnIHys^m(K{AV4MMElw4Q}m?x9y^ zIgUikwmRd3L`W)bgl?;Yjgqqy-Z`x2#xMk>OF4a#5l`yfrJB))hs?>MycKAZrrEG- zhDWM*WaP=$PdsHzX1pWIu(H5a9)YG==U5U2Wrd|%e@-mgx-HN~*xSC{YKC5Yli~;d z)^^!@|G?l|Dg$%VU_Cwjt0r68HY!iK;P)G1XmHzZ-LcWL!a(qwUyDp*6lS}WFJ*z8 zcFBR$`qhD)HN$b!86!BAJexE}%~yS-pKDtG8LWIER|cH0t&U(S*pLrVRcgy1fbWsHaCbkuOb zX&z^Cpcc(#GJ3C=?Wy8U{hH;u9fy7Zp434`t9B>IjIL(6YCRf#Fbu`o> z^{%YLcz60GoVZ%DEYN39C+P)p6#K47{eW7Ms|+)kjrs#}GpXgKEzsqrO4QqIwEAEf zEoyh&Zxk3#ZfOQ#3(361+<-UER7-Uu#Y?@IjvNrW#AteMIWIS?eXB+=c4~v-u93TK zp5ht#ynF6C(#H>X7u8|0D;HGILE2q^@O%e;MC2YGMGc6BGk_BH%H(b`(+d@vD6x`X zkAh=dN{voZBYLRs)?7kp(vkDMxXV2T$ecp2V}!%P zt@rQOh@H&ITI5;it!b4XjwUE3pMIujUZ(YHQ@_9Pa2~hFI7iXZMwWaA;;KE}x(=}2 z`C;o8{?ay%A@5#g9ItFZ!v4dIp!Wm^evv*IBebgptcP2X;H z)F{lt#%x8?mpB+Wo!=gGv&Es`FhM2G92gsCS!MTt$u~y39`C zdoLPCff7V8tsBq&+*`o|Ob;3^c4sFTsUipBOWOds=oNprCwSA)yKle5&gBX9GdJ}s z8s9&hIgLeJX&wnts3U>jY;y`EGj$z*4MH$jBcZ=3S)+WRc7}g)lq>3}?BhFJ3mWy8V$c#@MCajFmcgHjR{Y%lvG&ea$3uR_iAST){r@$32lS6JdcRAXzdW0lZH@oyW#Hn`Q(oh4V)M4@U37W<* z$aup8!AK~ZLAgre3l$*D&@%G(5|+ z$gcY*(t_#F={2nCSsw}7`)cVVd7Xaq`i%7Az-^4B86b!Je$JByKXeNf-9u@U&68Dz zaU-6}xktEr)?bt50L2NBO9AYM1{{XL0t*u|$~tlZD_&wIf(G9r=5or65Hg9LxH%ZS zm_FCKoVMX(2gK&8iwjU(@jN~Kky@Ig=rMW-q?C;)KWSE(XRHzcX|Dm!TnRm|!Csz6 zYfnM9&ZD+2ir)6qvGYz|J@q;&?%svF-K+Op-lpEaWoL)YP6jf@Z#*}D+fIE6sV(wf zFy43bOm^M~BEGc=Ms9D=-&mR#JNJ0usni0T(e8jBJb8h=g}a8jj%MBTe__NPpMsyA zU(>Zu_PEaf-p!R?Rp!pOGq zFQlh3dU0%Xd$$<6pvQ7jW351n2I8NV19O9tx@XYNpQ+x3Wn35O4EPOK#*{e99eMi6 zMDnZ#xOPb0K%b33{ZJkp*cvM6N*`PASI}Zw{#5)+$kc;~b%<#^e%$IE`%cS9rK6|Y zHS}ubE;mttf^Rm(^7C9bNZUN3*E zUe$BoW+a%%xSO$-@*Z4U_7I0?E$I$q8)nQQze^8e@jyEI1K!Z9KrXFpNycWbj4u?B zx2T=@FXj`%H*z;A#2<2F4VGd4K5XlW%QVChIb4Wkr-!WR1}Gjw23K5QfT4 zb5d#g&m$VYl}EPpw{IlV_Nd$XC@W68^&Y)_&HvI|dqfw#;M#aZEBe?(xPz8YPqJk$ zEVyCS{4w$FEm;!>?iveuirq7u^T}kk13q8I9=N}Gf_05&ZNaQuzGGo_{OJ&QiRF;W zzwjb$oCZ9By;(HZfx!ADl(eT4Pl;)G*NjXuO{(OSMCuS6+O70?+pNAGsfSP&hp;gL zy(rjmBw!^C;SQ%K1y4gTG{|g6dL|snLfxtA@k5z4DGC1%<+UlOij0vuLrbpcIpw>0CrG7XFLr;7TE%|zJWXsi$a#MkVJ?!QB* zRK6-<(44|GqAP=;z~FcoRuqL9i&Vq_Qn$N6olX#5TmA6&?yi{S{-0`0*3Z1F@qVzMGH@StRZys zGyFm_!mN-6hSg@B#YwCasWvF%Oa6|!Y8LI9rTQKll4!@Ny|hjY*${#I zK6r706*1s#>2*5h#bi!-L~x+*Cf+8zB5~q>9vLfb42ms0w1nT_tKMg{pklASeN8<` z;}2YB^wIh-kUJ2bUxQnQf)`Kl?$h2%U#f|eW#6|p4O?sIzn?X^Rc&y+xeC^@L`2?q z{G9flIM6olVPx)4+|9(=!WE2fv(Ku{upUIfl`S!&I;3(f1lc$G=~sskZ-i((f<)1P zGH#SAH{dq(I3?B4e7yH}qzdDtTEvqU`hEMQ#rDQd4)E*~k_T2=(w%<5kXm|-|8ay% zw8MK#tI?C-Rum1+<4EO*!buLO|1R^dS?_^p_6dS(ItTI~w5-lB zlf~jq-&)@W4t4pD`v2*;6 z1WLDlI=0P@la6iMwr$(C-LY+(72BP3Y}&|-D%zU_WKh!^Ps-ClU?X#cX4$vq~ z@X5 zrp>Hox8H1^^s}_zJfHM83*oam;&D6jP`{AKCTv(6*ojNdF2qUAQoa)Vy(=n~mhpSM z=L~%aRKT-}>Zx;`fOb0P7hhn<$TW`22U}g3lrVCNXiVC}@7kiHfwiY6c)}1rs7fcw z5$o{=y*P5AkKw74dD#c7r{8=P5$m z%JV>bIpk=u`(47XXPo{)*RYf_iA@%NQD8pq*N1hrs8Jw()PY%JhVNiOaN>aK1u~hc zGdkzXkRnsyM!PYla1PS}th+Gy1`XVU$-8=D^7}K`qu_0&yUQuN#oHGw@U!sH!aJY^ z^k|#+4logPK0zQ|R*H;5v5OH;_ViQeQY6)R2e&=$;6zHDPH!0fL^KJPKWsg2;}*y^ z3E~Ba%l~7rT@HWX2S+#r2LVxx*g?F49S^{kZCCz?3%KH7>Y@@SgkH zi9#@;fuhxs+WL^-ZF`@VHaAB(*Tx_>ivAVKmbxIdoqBGa%?MhXroah zuyDtca#V>2;K30TmKkaY5v1;$iqxoj)sr1{VqfNy3_Y=U2fA=@9}kt@p67F~$=8?f zGJzpYsM2dXuV+UqFiq+tlru{kL`iQrX(v#wG>59)Y8xm!L3@rv&lBJ5(Qpv-x z)@p-6E7VP65Dz0xiyyw1cNqfta~qB=BT1%Ex@D=JGYCmRr5D+%-`EVjL9TnFT3ON}1$#f`i=Hd|Mrl>k%*HGGO`I7Sf zU?z2{-b3rE*kge`6W^zieO_ z1;%rrV#NvCqH=z`5>jl0pjTOTTsE-0v;C`(t(oSb{2A`KL1_n1&Awj7u(^v|I`!3` zt|3d>;K8A~;VxLvBuKxJFnX_HCz@;q{(Lt=vnIQ}YEqllnkoJGv1?bfn#?+sHv63W zvI$a@SH;M0j^TrBP&OOVX!xx+DVvJm z{?px&>FQ}7zj1d_!kk^>IS$girf#(b_;OFD&F#iC+k|Iu25&YfyvnDBsNwx1edubY z%5(bT7K*=LE528^rsikALvp8%?o*U*zT!jj49+T0!Ei)mhC%Lk2Eag0B|Um z(U>klI2>S4Ka!SD@{l+CA#Xq1`n-X$Swf!?9Dx)56Re>+@%&dE1qev}`&s}0@DB5@ zSiE8lC~xJ5?5_{Tq^_}RB7-($01`amNN{|(BUm!%tT=M;PsBc>-yTqfN$K=VbHXB8 z#W_pOe=8KU;#v%~Dh$U!ht|-mS}ZG@n}1zewtBT~G_P&gc6L_3eSB%N>R%^=SKf9A#47}*iV8Er`YaZ2FMA(?R3h%`yhtDlj=&!Ip_>QX10 zSf+F|ui#EK*FG)2;Z{gZ;?XAiW1*Wf&BUB@Qaq+jD`sZFy#{dVQa0qBS$amLliBmQ zrPteorki3W_!VNAGQ5QU=w$()=G7)TN)sQ~jIT@ahjUe#Zc%p0Jt568kg<}Ttn5oYhEhq1y*Ak^@l2y5w(|bdn``K@-HN>6kNO8YfHN7J(h;5 zlmlwI+^MOC2i%<|*;Moxt?tFiGiKYnYfpsSvmH46&Ep+cgpI=;8GPOuKqgPu5I~D( zeP_o8f0LHnH5~eA!cl-wZxjQ{{YQd%DYbwB%KXZ;eQBDjV;W?a6niL3&x(|ecf>Ff zUC0aa>ZZ=9LhRTP{;GS=aA!Aa&+*<*V^Y+Q>w=H<%t} zoEKKRLqz#dNex=p=1Thb5x^RhaCS*ir^Ql>tE>C5#>6{ zBVp=vYvqim==+V@oz(5kF0^HSes?#p_Y3skHTe4OZ?Uh>Zo|aJ+=2m~?W)6;{CnMI3k6)rqXzRSuwH zSG8oeU~5DkjWb+`+O`!u#_S(ScpLm7b^6SH{g^@1JBPpD!5VPIk}$bqbqD87i?+`y zQ6~W|%yigOaH-i4myE>O48nL;*Q~dh49Y+jqt6DlojMFkvZ$AY$lnPZVlFmxj#jp{ z3;uI)E;pXe{g5XdxFN_8Zh-z?jy6>o$11tlCRpImGmcp2R%p)UdG;vEG-#Ne4K=5N z#@R_f+M$G4kMWL`NcW&F6Y*;o&ck|zh%kYg?HGn-qMSe zH@T9^rBB2t^iGfL7JpYxTREz4_MB~Yk96zLi~V^y=&(+gj+DIdcU&&XY}>-x<9k#* z(_efFUd|n1mnj%LH@w-Gg{`(bfn^vlO^HAM5)b)A!dHA_kewT92SCZ4 zJAw06O+9jcMe7E!!%i*2qHLu?)IhsZB%QL|+ZLFYbABS3NUC>a@}2-WP}S1QsR`K? z2#?{LUE}1VD;jYohB9Dtx4h><5zTt z#9MJUQSf#5Zj`OJqedF}Rdy%$T*}!yTsyIM#q29|lzTJd;+wQJ|AMhg>E!sE+u1kM zul%m|886!pP9blile2f^3g&Snn0#zkkSaTA%jCfFQYnP4dqP@aN8RSmGc13Y`|Ox+ zD4?j?cB=S&pOw1oq?kUL7fh$Ig}N~FF_0hO)IdB^yoD%*r&y9IA-Z^P_)=MHIaGt( zxHk0R+f1d)5+CnMlL5ZBlX48SxL5euuy=(krBt>VHxK5K9Sq~tdVxw!&EXym(!y*iF z>T&7t^}a_#vr}_!ixOK3nMPX%vLU5#zss7Bh42Vxa(P|>DB!y{{C@Py3$>Hnk{5^6wTl#K zsU`_|bDyiTqYO||zTuL-;+Vsv$o)rUiIKJWqE5O?zv$I7l1vt{N2aHi)SQq7=UjI* zmbw(=_m4TEoT`M=J%Z8aU7UH4&=hi{ElB+6d-SK0%7uB1*5%di-%cY}Wqd}SOKRM- z{`_zu#iCn$;600ck?fq1aDYJVw=>9=!LQO9lWJzhKb0=v{8j9kA&^;?$Z7t=rqIqv zEM+Vdzr;tfOw%*CN2uzuM`{a%rF{(nP5a(wz4PWmf%McUwan{U#C1toMQD+5UXH}v z1zlifL=&b7BM~7`HY9K1=dpK(|GRTOvUB9vAbOK%#0Y%;tuZod$gYnvP0m^3z+}yoDMt~br_SHCqh3W%g1`j{lGc!5PS-V9>DP&nX?on}ZE*~Uv zx*iptUgaQPMTkx0JIL%V{Sv!~2EBMQK-8khuu1^47)A61c%{>vIK%?RMTt)Y36kg9 zAJm&vg0GnO_4jLgJnd1^u_SFi&v|KO%G|gNaZ${$MIo942VNd|pUsMQ(lLbdEaR4k zdsx!_kKhS{Jesz)M*l|oYW$3DU73C$sOU{p8q0Fu zL|LOjFDzSGGtV6K)>nkN#2@qa8XZ>)2uuZrnAa(giUn5Ug;wQ(kMpkkxmNK3m!&vA zHf8*eOtA&QJ%7yhM#J87HcV@cB47PH!xh?;2>JkyDHM!{7 z&?iQy|Jw|2IVnEJsBKzo&OwVNhFH^9RQ4n7*Il_}PN+GUt<@A;Go>b_f&s6L%p4XV zlE$AuSh?&+YEt|&8S#e<$OMPDuZp-g%(fUDVj)!LOaOL4xNRhp zAj}H3rKRQ%gqlqJFP9%)8(mimPk5FYV;+cBk){LLhXeWV_Sr1_r_}4Mz;sBiNQ1xS z?v6R0yB3okQdjWLJp*)ux0w?D>II@41&FeIAiil6uiuC{4=P%+ZAw(sqVC5f(q&`) zfuGYz1ldr9w7A7vJwG=v(tgo}20 z_ZKULD=PC-c-aG`iC*X}pJ=`h7{hx7z;&n)w+-`6w_Y);jIzb+iJrv`6$4?8gJwu% zX0`)9t+u!uaA9S0HTu-t?1uWh-0EiDAy>=Fef;(iYhc7FlXA0ybVKgG{H&XA9!OIS_Qr;(yQSnaFlRL{eLMj3I7q zR~X}oLbJdHbnwUjRL6bI%l!`i6JJR`2hK?stV}QDsco*AnSu`GDqW0E;K6~ov#Me9 zhb)XU-3P3GFZfC;QE?Bvnf-DG)IE4lrfE$p(T34sH%wSDE8s>bOoFFS`d6~At%7Di zCA)gQe1+_sNP3a)+4X?n8VpSSr515l9sF#U4bp~Tvzmzty{Nu_B>ciOyqE3MKo?8A#_h*zwcx$6V2X;OVZkq95;%awCcevT_)E zv`I1z*3P0OzhG|j4&pbwj*Ng$jM-Nz?iZz7281Uzacqlja*Yyd;iWgN*G|~nw|L$L z`Ay5h=&ogbK^(hnh?^U&0wEu0tS%>$T8LRwBUf|}kWB9G=$yFDP^jbi)Mu+qsB z!pIkla|D^(f2r*Dq)J`f7=iaC^1Bk6%P9mtNUg2hpIeokQ`6BMR!*>^kY$!3& z>E2xw)+hT5`doq_f!DO7C;hewymrC&1VWw*!f_h&wPR#H-;LUr5M{!)$Qn!TCdt?j z@_Wi<^^lfXqAuQ?)qPGVbS`BK09B*%>S1iH7?yjwRBS407Sl05IrZ5s3%K%mNiQTW ziKT1&kXqhY-_|FJ64ttM5aa`IT1zT7jGKG_HFPxn`;O|5%b{4~5f51I4O zbz);ad5agk!aiC>T^PzcT7IkdG7yZj+F|9zV7JZl!nTD;9z60JKv-;l%>!F#RKPw2 zh6>kx3SRNs-w;SRFq$Zo5haPx48sSmX;23X(0&;CYIi) z6rB(5n#?qOEqo0kYkp0!@s%E*&U-Uoyp@@21awf*xL*Rf)8w1}1>(gi)6v0e&S(`} zgE#Ml`+J$k$eUa73|w&tM6>g=dLNO+iM-hX!=}%L>q?QLN*Qhi9w!7Z)n;FoI<55b zQ|d(nsY4hgg!CBdD|q$iRzR5C=iSo49!ege^IO(S>Dn|OO9km_Vli=l8r^T1v2f85 zswWE5rHNZG0|~t_3kNY3iyrIWbfuxkQIs9SlV+`^@9O<&K$(z?4s0?<6fE`#Ho{!3 zI9GIgMKMAk*`i;Co~be6jbB4enQ>L!8MNe8|g0BpA zViQrzE32oi!_(!T_baQagsw` zu!y0aMtG5^i~>>CKAAQ#c!Qwb#`wROjv%NUuqq!+s`{sB{ZJKGqOr$ww8!tH=J;Dx zK*b|-p^)hk*^@l>Lc49x*0!}r(af9KIJ3(=IRvmxHcyhOR&gF`W^bfRKPqceoD+y= z5n+zwv7{O7quZb|0`88r&FlJ4%*+qRk3h` z#v*gQ!Ji&u#uH|S1zEl)gyXd7d!@t@ft|YG*LlL*ApTBinXiwH z5g^x}M+b?I+ft*WhVJyC4s`3!v5`=#SZUcx1KG%zSlKU(VU|rNpQjH$E2?XP-0(*>*PLg%f9bNQGG>4rAdp^`lv4Icu zR4Ss+!6>zxjNhN-;Yu|gZ{%7F4P7<6X1{!EcHzJ-mD#JwVZpS#l1_H?+0kO7kNcn1 zh2@U>)rl(PK;IsA6!1NS5yT#x!+@{kHThQUiXN`Z0%=5QOrni75kis6833HaQZ?d^ z(vuW~V5D<|U?vJYH8`I4{EUeT_I5}tMxxaC=aE<-p25)N03;bvRQ91RU>YZ)RA^FI z9v=KyDhiqCm`A6u4(?miUXy96_rTf;NC;uE^kep{=rNbqML@PPCr82-Wl~bqytunI z#sMYI_<|h0Rd&7byFY4Nl(CTato~fQTJ+J|8!$r?eaa6hV|zX$2b=)Ck1D z$?ws}k_F5Nh76lZEcSv@G13Ud^dJ-@9+Sbui0DYRa-zaBa#ZGx4T*N^mtpbr0vW1Y zB2ifR62UK91Db;|&G@ z@drlGb9Q`u1gqm=6zof}%+T!ThR8~6*BxFsrnZti54epA1GYzVcbGpaUDZ3_;4IGJ z9UAX~LIn7Gb?P8w#oE}L{hipp5t+X>7p`UAB>`%}DqMe+yJ~kpknodDYN@juywMOW zjuQ`3!{0*A0O6q^>}5L+5w^LY_x@cUEZ{2M6g_xOW<~DYaT3XxZpcX4E}EseyQt z2&UcO+*TC?WBpI{7=`f220K(U(XA|eujHlU#ALjnH7`92x%?^s_@G4BqGuUZRqFUw zMa(q?7A!QWe2lmqQ!}wI0w*}wotdo@CsaAFfIRxw%fz2Oa z0#!juoT*>jl0`-``wMRz;5Uj;>8;7!JbYO6M~&4maq;R zpea`V4lI2^7ZheyI9N6?g>a0^_&wG2*4sG8EX02;4*B~DZ)NAhUha45E*6Z6;OBpR z;o>%7j_%|LeO_=R(`nMM$*n_Rv7|(6RWWO}-l|rxN8#t2#(c%UIs~(&{qJf=^MY};^jI!bT61;F^`sGpq?;Xo%;N9r146P)z{Of0$rpD>}{ql%d zlv%yNv^QatXFg7&d3@T#J{u3lv>_9i3ag`ea-~cZ15clJ(24^R4?a<8VvqH9rc882 zIztmqpg|(xi9ry5U9Pi+Q1Gw3OA1huz3`r)YxKt~~rxBJ);&8f39Z zZG}6=Waju}3X>4;=`q8c&1OqA&EGO(Hn>C-9D%jaC`~EbLzRxHseWJ8j4 ziQ5S|^!D>)x>P(J|F|wCTbj;i=YElcuPn8FDznPxXs<;1?8nOD9cZ{$6lY{MBED3+wk?LbwUzx5)2M+2kc9Y60Wf7#yhp_sGAGM zBT-P3sx2N&!=A9YU?gjiXiAQL&=_Q5301-&cez_*GCdyx5YG(EgzbBxems#CXxZ}Z zoJ>115P~bGCN7`pP^(dDP)|5wSJ(?$CfVEx=w#=Z1XbFICbDg($l2D7A{rlztnu@A zQaync^k=zxo7{Y(QiZ5S>s^W1HZuH4V|r)1rq>$zr%y8OU&hPZSNRl3Z8tr4vl z>BwNZLIcJv@FezO5=t@*QgY&B*o6hr(~==V$LT<3j)SY%m>*bov4->=+OrOlo5_a0 zP^qrkup<{)U)ixKi8Xqd=uFRXO>0M!sVNd?RI}3g7TAu`D^rY=zi-HHo4u-os&$rD zTGmty)ug3F)>M9|UAScFva4}dkg`-Y zzxqumq+2JS*=UHWbz3u|S~HJ|W-E8wx_){mUHna9lU7?IyXhQG5$fwz2rd3OSek)2 zX7JX;oMcYtVfCp8#?Br!rCp2oS?hS;HJl-f^txaj^@n47iv+#~`ICv;D@N#qv-81b z`5v5#RZ6-`sHsazdA%s~$^Fge($|0My7nsfn(#An?HQ-oZ@cxG+&9i|k9heuE;3RM z4S`qbmjiiRv8?yFsTC97ApzlZ1E={NYvvVUs)N5OvUjB<2gbM@tp%%|!HbfqG5Obj zkX9Sn_e!~U=C%GlLLDzpkzi1~hbxO9K@*)ykiyy|i z&(^|o9^c%lVZVtUmmaT;BSpvf)L%xmG+`VI_kH67E_3T>$^yB8 zUyHXZ?dXyB>gkR9YK%NruM=J$?-Q+06!*?|=RL)UBlgXHAg&bTdiSm2D*#~zR6f?I zfrAo2iRDWHXk_Fj2gCuZM;w_v7-9Jm0pvEwvwoNQxc7%)fV9Dkyt_*rrkOma!IFKAYbf^8Qv#`4H`MG@2@>ap-x(VTp3O<@gH&IvZ#@j!t zVfPw*q*Qy8b_%Th2>M97E&yD}#|_%IkySO3mk7LFXMkYv+H~>Q6>L>kt?~eSW~>-E z?4A6C-wE^s7Hg7NJK>o3e<_JMyA*_e+F}cRBnYodTB$1xj7i_)hz+bcs@~reO%;ZM z+jN5a%}ZvsSddaQ$1K)`lD5XwXL@?R4ao{xsQZd()#v+YtV_a)d63c+^qZ9s8}@DZ z!gVlinxsPwFVf4|5I11Oz$;|)8k60v{k6`^Y1z~o%rPFvJYeu4zG)M7z&qZz{eG>z zpuzSGbOLsy?YppBomk+k_BCYdU6aP-5)FNeUc5BlLL_C`P^IQbct?Zz zlE@ToDe-A`NSn!aLlRA_-5Eqvv?;gp=2jVL1;2?;P9w;G>-SqH(QypoEC zck1dI5RmNB2H4p`i55quGL1M@J{nhiP&k$SP_@~nBI@i7gM_CgvPN8qw~dEUcFRz0Z){eh$-HVSp#gZ1&dVu_#`AQZF!q`bh!Eb=C$n?SJOP^6k~dW`{r9>x>w=YXd4c zSfSdprF5*?yx_CxR*PJ^;&3>TfrXLfj>C6A@H%IU_vi|Ef(h{mBA3zaMZrpXB|pWC z9}-4wcZ~=>OZKjwg@sfYgdN967~h3PN}o$($sL^04;$EY zN@kXi6jEnMV@LSHSxK_DdP^jerohdQx^{Fg+i7V?+z9Q1F4xs9I(TJ6d=`wH)UxwS(+SHb=`>diAxmnR6lX!eA9{LTg$!U{=6Epy?g@tEAokbqj;-f4y{>+ zUIWXWZ{hy5l)RKI)1MZQyLRiN1Zgaf=r9V)fC1*O1Rk@KqsKX&EPdyo>to+p*cA})-e2e*Vm*Ig0 zF3B8qh$Mro-W^(M6TxJUHiccejW#c&(HH$8wnS6#D0PadG+FhJj*9vD!EZs75kzit zey~4q>XTc>Q_0jqn3d1OHY^^RLb}Vy0Qv+QQrEK^#LI()rC9dMFp(%EM)$1uY;w1~ z{R>8p%%Ty9{d1+;dppNFJuyQ5)ARE*&;>+KwF<{SI=t8ky}IANt`E{{D_w)&)$nl!kIiVPuM!6Q)5 zb_JT&?(7{FEWop|1h?OpU3Y`4P_@=3G6`jm?_ma~J z_vKw&Sz7JpH<)VHPP~;LtDXQ3%`^wwr2AA^B2-OpNy(Z`;*=7TpByTSUgY&;&Qh)( z^9>S1+h((pm}R7J519H=aEbVhK-(?2eKt*J@<6R~oCQEug>o4ENlQPqCbWR;S@v+9 zHH~RzP-YN>-pIB+NDx!J$?JaVXK{r2@1MKrDUL}#?(0`;n+WDhgD;yPrs8F5H72r( zn!5;}-4#5vE~R3PNaKunr4K;|0lsk{hlE~E!7KVJc8@v7AS8ECggdIzJ$C7%3s`Gr zV9!4rqF%Ho7yjxhkv5>?kA!0qlbx;gH`7?t!{-K5!KicM;V7yo;leMMTV!3C<1p!Y zocXVa;z`NH$0eorgQS8<)}aDj-LbB*N!MVgZ+ePD=+s-JBx|w^Kw^0Y9mkYMJi!$? z5|VhSA%RAPI7Dq{2BdT+mIDq0o~43qw!58DuiVHye&3X&Yv9jgmb1m4-aENopGyV% z4CAU3tPj4x^x3s$P3HIu_=Q^eb-XrIn2IO1hnIhusS=bE`gymbHhvf*DK6E|k+a}( zq8rMQ_H3~TSvq%|NTV(lL?OEH1Xn}r;^rcan!l+snY||bl$(TuX)5s@RR)*52Nfs# zysTEVIJVtR1ieb@X_52k6yhVfQfA4`oO@Tl?(KX!N53>BzKC1z^z_dC3WNQc-%Fe- zy1IY*rJjWvGV>B0u}KY%Vq}C~QRbF@{zr0B|7XVx#dmVj>|3fZ{@<*T{}1~9pX_9c z%6E3s1a(7C91;oy6*@W7wP+|*9%WIpSY9*OFbK6yTeD9~ocFlNz%(np&HZkOZzrm@ z=YFWUt*Y3nT#onI?j2;=hl~MK3QSG)R%d4O=)BSFc0`Zw1NdjqOyco?F>rQUQlE}A zDH0&eL3(03Icti<9-*<}BjJ1_tvid_sUa(Ab%Zf9EeOJan%RIM!j*dHMgkXMPhC~K zBd4(y*PXMslAig>oolr#la70CRk1zKCi?+oWMMVyA~k5d*&!qtREEohOJ1HMgzV2v zb)Tbk$S~AIOQ1xE^C>F*1np_}dBf)FlIyknQPf`?0$rtWSuT<4SysDM&-|{=;_j4p z)d()UJ6S?K%?Yp6s>;l{?T7;^<7p!Gxy?&O7N%SaDz%-z9E}BxPmj=l;f(gw2`g(K zm@My4JA&!V?6?dh68aP|x!-C8tK=QMQhuLeu zWSWiQ1tD&;&C@f*8O2;lUR`q!<3X9WrnI{)nzW1`3xxUmL|N3XMGKayHQ%L7A(h@^v07qel@v;4GO41M87Mk*Fo;0mAPW7Z zyz~0SfPcp~@{nF%bl5hDGfJ6VAa+3 zpo{^Gy}&)u#hk)!M?+quaFZ^mRskQ0SGw$tPe1-7kAd1T=O4}>G4<4(!r2$~{$McfbamG#2vO2<0SipLsP85HfgBr<_r1N$a+E>Yya3cMokLh{6Dz#S@-G_aL1%jRnf#1%+QE-aMtsgXF#APclo88uKJ_JB8jD zJwjpZMKTp8y_y9xII&T84#cF4_qzvaG3pGX z+*V%x=+ui?b2=RYnu>8Z4RW&hkw)-c) zB1U=3ZcX`{!D3A=dun4bZ%iX&ftk-Ps|5hZxfc^vqW~RJ7>}zE2aFfYIEG*6xbY z_|z?{7Ps@loyLp!TBo*IJnY94LI><>cG*G^yUyK9+CI`+Im2L@_6%GFY%0e&0g_>< z>ZYN*8dqo5j^M__^VFt5&|9W#;S^Z0?1F_IM-SEVhYZV#8>L?H=8aa1(=qc?`^F_p z`-sh-wF9>cxJ}M&-8zZ&7I&uO=Rsw=8-1E8r%7tDr2>d-`{_Py&+-iQ)_!{4eec57 z))5i;<}+WJVAMu!7$)mb!-Gl3BJK2^DEX?9?vjZy4N|i}a+0S9o&fyeaZtf?8DF-% z=pKGD(qK0*^MUA5^~$kXVqnZuNs4M5_MY&$Lwq62!iBp`?#{` zbM`zVy{-Ltz3nslpOsDq7Eu7M1MJBAosxcfXfTF3_*b++VX=L2nS6y(H(Zqc2jr>0 zO||pvraYjHzed6}8b{=-+KtNiq!vk5xj(S|k#3pe2RX7z$)(z%o2)|IrFTsDr-gON z%!r(%r-f}pTuUR2ey^4&xLYjKg?})MqorkfVEu)}d(BU8!}qx+hAx?Pe{(Z$#V69O zE$ZbEFzh4>%;ujV8MCIE0Mn$3Bhat822o6rmOO_hD7H^8vB;!vQiQo9$6W0pFcS0Q zD=+FzNs!ggYRJfM5J-2?jA$r5W{6lq`&A};Hxsc&qn%h4HE5k7OS_|@@qWSUho?oc z!=mvBt9zx^u##q=T=xnBbpY8x^09{{VVaXD7AfOOXM@@W-IUiR zqB}Lp9NFA}_#I-{Hqur^aYYCiu1b8Z0BHhuej zJ1~E%5~BY_mHgvc_#YJ#qhe);Er!Yiu=21rw2xkkAN<}Hs+*k^%V=u3Ghc7(Cv~;P zm2#nKw!)kgbx)&}GI_||M`+S}&riXoZdOdOOSvs9*i6S`1^uoVT~BXc=XhFox>~8# z{dz#~$61je3Z+XN)n|wxr6xai7yJFatpPRTW6*=DfG}t)0#K7E5_X3ERvc(&eI1vF7^8L$h@W`{GT#YTVMQaX+_A3u?W2KU17g{)T_Xs&1h4+CRmNjbal z8`=&TSq2rRtKQvybt4-#PPG6L{89r~SLr{-~?Pi-X6~+Ok@5|L@e08%jC~WBXo_>sM4i^J?NTKih)^$fv^E<#>v>HU4h=E z-I`dMMTvV6JhXil>ofOAxX}By$i-Q<8Z^o_J|!kV;8~Vwwb93J=M3D&QcRwC=nGPG z?CM!H*Ji~+YbG(_;zD-oEkb8PHhp-34MXGF0qc~NhhiU8njRa=-a8l9P`t%$>gtud zRzJ|Tk>?dwFnx@ZF=5A#oAeYb=;(|G-qky2O(9SN%{|d_Tn_NJphv>}QL=*#F!Q!( zn5N99J$s}y5=~sE;F0}HkiQY;8K5Cn3mk%0)9j+7ZTGli^FTXWh?L#@gA~2|_cA3G z-+=(HkT%`ow?D?B05M3$!@%hFpGL8mx@4wU9qDTAR85g(WjEwRy$}|L^A_Uf8wm2V zSc#_d2glC`ZB9IDMe_k zg->d#>~0jA$C>oPNFXG`KQ5*GHTWogru~!*)E4bB1A7Px9EXu4EgwwIQ%PJ*6ccJ) zfsmLUuc%Z$z?M<5A<^I!PfdGRfGP3|0eEaGN@%wi@VXjBm3i^#+?*9Ie z{g)d<*v{ymOkbZk8Cd{5Vo0u3Mslv8)Qi>tFy+P~#Br)>Wbh&w8cYY{wER3c7YW?> zs=7T8doITk#ny^(s<@NHRR5@dDu0%;OnGhob zgNmc<%Y?f-T^(CFvq|P)22o#o-@{{01f}1rt6}8}Y#36U*Z4_FRKBHBBLq4}x%y8? zj5#7lvR-xa)%9B`Ob#Kf(w4lxmxk-BjDMJA6h(E|PKHknn-uLNw;i>Jj!=#{N~KdY z##i?unU63RDe4(BK0f9!5Y79mV@Dcy>TMexmue+uf8w1tYzOzc5J13*VT8ds2I~gh zJG|#!<6n1&B>e|d?8h(7g}U!Eg!sOF|JynKi(joEBe%wn=#$Cr>L3#UM2QL=9EZ$5 zpr(n40jgL82_NHlY}2R_0yct!3vtl;^9G^K{zn7|pFbaf&wtw1oP;(%mD}#o<8UhT zVPOJ5>~E9o-S&J*90rDh?n9k_Y_JM|4(cp5Ou1w-mcn5HKjLR20jP@%-L|b&Ocafu zAu+r}qH|Z=2&doSoD`K-0P3{oB$)PXXk|?>T|%Nw%63D~LsZh6;P-5;(kzWur7nK+ z!G0RZjk;Diuiw;J2A9Pfls7RbM;dp9qKidz)k&I!W`#S4RkdY1E!9|t8d|gkV_lVS zTSz)KUeB?AwO*15;!`$W9{0Mm%si7KZ0{)f(_zBIj}(P91M$_#YI!^3!0w6ujCNm# zl{+<4j8Bn}qQpy;15X3c^GQb;2p_9vlHc~C({YKse$Y{s0n`kNELdR7rl$QbqNzp8${0E2FAK?f z%WBpGG(yXJ7?f8FRqvBO)>k+K9vK^#cjQ}=wlDQYh0I(Wjtx=df32TA+8<87H1z0U z!Pz$3#h*}7MSe4DE@i7^osD0xew=g~EG@fU3I$L6O%>!7cNr--Ma4lkXnVFo8SW*W zc$nrH1{Fm3987rQBtUAbxqU-=c55-n?qB7*hf4wYI5Kkwwfc^O=w{ptuWwW zF2A2(sa`eYPbH;3Sh(sRgbCU+t<^jEXl<4Rfy4VNcrePIzV^nN#1p)!hxV3Iav3#j z@n(ksu(Dh^d%Y#{g$ozIB1ZcR>_uUTLpApfEp=EOEEK(DDJo)tl?dJ~^e1%G+Q)Rg zw>ay0wXmoSID)jqP2&YQgQB4|NWdi7prF@PQ4hZ<){`Hf5l!SP1^|?-u>PH}pyQ*4!Tn>qhf&zmTE zl{YZTu%=WqFf~;^NYyNMKDyMj^b!{!)+m5EvIugs3Z3UpbX=O)^qb&`a2ND~x73G} z-v3_MSnzZzweijTV;k8<(D5p$X6YL;G|a5Fs}?*XHfPApv5kk$NA@TT)BMmmpk0<% z8#t@+%UVJ}4?@W7RB*64ChBmsj^p6#YOp=uEZI{w665??O7?82I4SKYbbMzFjJ*7m z;6EwCK8Bq9z2B;M4f%hMGW|mt|Kq3U^sn27*{W7r%74&&5hm&BalwSeQHRCj*(d#t zniwL4Gk*Kyi4+H9{Q65jiMxHQeLTq@vD{RWn4#-vVV${6T5ltmVHrdTQhqp(Q0TTxr@-_s%cC#m*O3Bf^bTtYuDM4&yAV%=cJL@}hR{7G)%> zSU(g`FNK5q>sz42*)SZ1f2{S0IA=alu{O+HQ$?$}-XJ>VOg`!U_d7WK>TWZJV!AHf zYQ=up4M9NXa@O5e{{l(l!-e zCge!B=p==0GUIaOB*`BvC&x%*gI6vj zH(9Z9^fq|>9gDU5|BteFjIJ!)wnZzhm@7s_72CG$q+%N@wr$%sE2xTX+qUiGX5X{l zJNxW+&wcl{w!S~}-)Mc#HOA;)AEPtDXQ&nUMVHj74bHlX4$62|8h-PcVhD(g)&OA$ zIdsB})8s=Y@#&+%Yers(i=D@mJ$Xtlg)^Ku{Loj<>YS#iD{$PAl8U+SZ8XcU{_j z{xJDp$4xUgM#k3OZrzBq%U|n+KQT}sxmyUlYnkQlPqL~69xq^D&am90^hI6&E^ind zN(Yo%vhL41!#$hTJt)V;KiG{qG% zn6#4v!B(F+8Ul2!jo$(d?3F0v-&A>&wC<&S=9#cmCOre+)RC1ZGZlDdgRLPx@s0{N zcqM(rpmEP$y&R@In-v@#5&E&%J%2&U=I{le=t@D->RLh;Y0+|>WPIiKmNHe@X%<+o zb!^rKb*>1QiA40tJjMV@g8g!=%F*0(v6{}ZSg)w6n9W#zRNHlF>epI)M18O(1JpLN zJqxy9Qz5F{lXUaBGipz@1W<{9_oI9QW>UODvhYO5&<^qe{Sky}r`t~_?om~%wQij| zDH?H>MF(}sxwqaE{Pmf-%d$j9lh-dVu+CI9Cn%d^6NL;mbDA2+-W{UMMmVXD7MRx- z?pn#Vf4|TbLzY(s5{P9=G4b3|@cQIFIdg@a0vGeySs(yt}G=Z_P3D9GTKy(w(v~Q+6hTYbQ*>I1$Z2VMjfry z+XY2uAM&T=+x5|psrg`bYfYRrGgO$jt$fG)5er$oj_a zHDLWPqOt7R$G+Yf=Ea7g+&N%3A_IJ12;21g5!^)i2BQNT@i#@`(BD~Tu91G8@uFu1 zr+<&z44G*J8+LF@fVjKt-RpzEY&xN28-b^?#lcdWl7MI>lt<~Mi))~#;2$!Ad8eD| zCC6u+$0YH1z$Nl5uZ!>s&;8<+S$oMQ&^@J>E`cQ)ufc3>zY?e;>J}A1sZ?4G)KLle z;87wk18U`@f6gQvp0Ez|hr6d@8PNv^M6Mz^n53o|qMS%5UZEWW42#JU8P35KrMlh& z&vJ{Q2qk4zKJ^Fv#SMwHq9n3CVZ!tZ66)HRD2o`56bFwFHHF?4qJi{^JxtaKg3fmmv<#WNl`esoy>Dv zA;X)z*X+f8g3`e9osI0)D87oQ@{{lI> zmI1S4a{7c@o5e~`M$v?+PD+f_?59nbW_0LBirfO015s9IBdFzdjl!xPZ|{DT-_mS@ zKr`FHnHCoAGtUm?S|FL$e6%T{;~pm6A&K50<*Y;X&Fcr$%QvizlD1`MHCq#boSn?G zJ9TmBG8=z8N8rKUTW6y=NXOEbL5o)oG;9AgR7=igtK0W%T<{q9Zi%QOZ=CLC>+b|B zW9MTpqTcGHZBXMQ{y~UljE{5N27JEz3!@lYN(nA$_rJUpu6`x0 zstqGktU?RCHkRMi`P=%)O6z#Wst|mPfqg2<6O`MxR9LMAVa{4S9{u~)g&}*9Rq?Oe zgEGYb!%9fa-rUjnpZ5oiYL*^2YRKM;@zmz+(Ew7L*)2#iSsYF0N+fY|XF3wub#kZk zcuc4YbA95fGZ~{QqAEqUBDNXDqjn@(8BIye+(eHE(iBMST=|zPsHYyfE#e%B9xl_x zdPA-{KHnTM(}}b+Cew{Hj)p;>&ZiHkZ|>K1(HVLnKx+S8PVCqiqTn)m7*1^c(Vn$uJ4b2c=bmDNF4sJG zn}bqB>{M+jPHp~bLRTODJ)eGXHDTk6Jx_VT1Kn`}F6UVDxkb#(i0nc2mgs8?OuBWT zDYV*uO9dvERe3Wg_cH5)tAu3DiOkW*#|o3i)EHH}C0BwfS+Z~|E$?T`m4Fcdwce=F zqZI8DBT})%0m5dZG^I7<;S6J!IZ7GxCC7dyVcLbH>MH$F6_$Q13#ictiijr!q#TrD zm}(VH^8*&l{at6EHx_Cug~FfJx}XX|s}w-M>nyflG#ABMHDHp4fOeVr$HayehSj4g zyclNM?U6Z!3T6xZ z@dQ)?dqxxQG3w>|hcp3~857Qe%gB=nd)`IQE1?IWkCkprTBSt*>5(DP^Rq8LfU{-yruVtt!WPL z3-80X4eLGpZ90#u_aoRI)PL*i(tIlOTfKUw-(bCBdRyzFyOILy?5Sa?RC=%?OT#Y1 zND6L@PjqHYb0!n((wGd{#B_xUz-HZ(T!8+Bp;L5M8;&3~b$5GiZ<+KBD}eN-QbY*`t0fqx>&H01 zGoEWM1gNk+S5-_Gte&J76%K=QDWQD3+=1utCs}giuVb80o~G6)n4r8M>a?yJ<&fo) zfejC;fGFxVNpWHfK%3;CFZP^i|8p2cn-d$SRc)nEZ_;B=D(wW;cKCJ%o_G~p!S$zh zTUx2zu*|-{@wVgiwaQZgAv9^;K8FUY83xO8-Z<%R<NdJrKz&?%OrtU0AOf$P%}zuS^y0R|Q9!VFHMSj-&l#h|gm)f! zMs~iHMR2wM*b_nIu^2o+#@sJ%Aqjo4c;*Dw3Xu(s^@#WHwObO4G;l-_nM!Z zK0*&bNQ*OQid;<;AF7HhQ`ujjaulXs8UAw{GmIZF4qX+_5_XY&zP8ZAQwN*~Xi%p* z!}<{4R6y|b+qGeKSnCyPzKUAvX4_JY=8F4qh6mmr5&Qc6iPgU?0BP|14X+^gkT&$B z3a%o*5ojEI#fe-f5z z;HX8az+k3KxlK=e6`lCYICB#b#ZBUew~VJQ%7k81x$BZ;t!jv}&EUgp)(>l=Qx_iR zrbe`wI|Iev(wmXOb)`h%aV%P@!=n!t(#si_8oIC(1ey!!qi2l zyS~WUzlNFliU)`3XObUW7o9%MIC&m(b~xhcVvC_~M+`3x_m=QTXy!W!*k$$y+sw$r zFLs6>I4m*af9_GQOg@h3F+C&4Gu1r#({$waqB_n&Xo_rUB*-WTy!C}0r8U59MwYL~ zT9s`F3qMlZB#KXsHDPnUAFnB>!fW$dULfg*)dyZU8A}yH+tSU}j>nv0$76#>C{J_1Oclz4?0;;c{}j3R3fPck4z8k@c=Y2thPER!+HoNhp@z)J{BC5IXk| z`ZE&iuD;_n!PvTMzgxrh4|3xFQ4#$sndlY60Mo;dCVXfaKfko(2Br{k zMgv-ghK5tY;=L2xQjsCdo$<9CU491=N1!%!n`vy9X>#!$X$>T0qggUDW``;^J1+I^{b1 zUc(iyyY6800%Cc2Q_5z@zp^7d0gNfFThRN{t^#IbFry`lq)KKHx*-l0ZWky&?^rYO z`Gi?HQX>fAgs?3g7@a3MIW!+Cvo?WwK0SdKRMn`vhV5(kO9z47e2&{yNm1 zTuNq=x^Vgz7}5n@62=l5%+&!`(G%i zB(+zUFK=0IlNzShgm2KO+Hrri=EkGQiz2|0Nd2kd{jdWKelsp-bp?-K{N>6kRjG{% z|E=;{r>phaf9bafrNn6Cf_tx2`rY$qCUt4%+3W8cZ(E0m&#fEBM;#l5?}nFZ?Nso1`@$zS&J@bs|xpz z%dh8{d~pkM``5XS1TY3Q;UWF~#FXB}JJU!O*QwGx_&umghas;8(X5_~&ARwLNEo`Ma_N{=`+j{`H;VO$%RWXA5KI#Tcm* zW+&EPUT$Ti5M?=AOQC!1K}%mMB8@FUvnpBIXJ+IV&9T+U%5=T`m_;3EO}kf!zZ4ZF z#<^Cvg@n=VyK{+l?HKPO=RUUw+Ee&37d3>Wpn#qPXGT+vs-1(Cpx9y&tZIDKDn|2T z`s#RcWZL?S;NbCDa({x~uTDSBrhUaVdr1#YOQ*X>C(WRH6PI9Omh(S_Y0G-(Gc$DX zFK1QeKl6ctm#0;Nn~+e-*N~%M1(9eeeFsOvcR_(#Gwb7q`lc_}bfWk=1F@Nr)nlz> z%;Fg(`&CG$1lg)Fz>73(xJ+jGO{UaRwqr8K1qIC=8Pgx4-rE7AXgQRvbpxP@IW+^m z#JgLsu12kmgVK+>5EpE9jP zbf3Bw`FF0%==cc!ZpsH!62yeTMKq~77nu$2EvuokMQ0Tva%n)#Xi-CxN^VrimzOQ| zv6hs9wHvjr=^{lTjY=^!gmoRvt4kGc%&e@MhH2Z-v|&%Ge@%1gixoXgby!qLy}Ln} z@=e*DBD$%)*swghfq<)DWYW5UE$ML+SMGAr8#_g@;=9Nyb?k%P$jFk3$1u0mp%oL; z3asPf<6Wq!oEnbd5Ju(sv6jzt(5QmP>$9vA=~&)`mJgwMm9&(0DUQpwFs2y zt6|KRR>pRPWqds*C%<~1lkIAwcEsg zaoQ^k;GFAk_`B*3nr9j@aIpz-@^*!Ax_2#z#rM8QI1uacseT)V_j^aqIeJ3N8NM<- zyk?5-Zji4!zu3ohGCH_To+~ScDX$@5+e49QEOoX~wwyKGJvU=GrQ$=9Jswl1axRQu zZM0Puv_owkLC&KZ6#)pyUbJ$XqL@rH`@g_R%7}~eWj0&3isSJljDcjvM zYc;XUWI5H6*HX}vt(N0^P4^H?5~IN|+sc$D&|#FZYZmC$jie)Aa-)7YHc7OM31gsoWlE@|Ni?P^M})cJ3?!~A z&5t2VTbuFvo7Zq1)c~uv^m#4ATsb>H0+1KBe`$5?I1(y`>XFg*yr=pNa=fC^ZsSgE z4TS8QInYkY?Q&N7?)+BWad%Hn-kXR}vF|?6q7l;wT*uwEiFSL|nPQJjFT!}$5u9b1 zv!U!)WXb|+al;i9N5khZ)7lZ^bO)78=+yx2#t4-hkb8{xs=B)|oV;STHGORp=)AY5 z{GAyOD1-n>_F96*_QLsQiIMHSV;o@-;^phv7Z2s@IxHTC{^kNK)m{B9@$v^;dX9_6 z&|_&)0@szsmT3(m>q~MqN+APUkeS^g#x`%HYzmdVE^GZG6}SL|kQP^LW4q~j$%@IS zEq%A~78g#F!V<$`j!3Ds*nC)Hvi6C~X!=Tx>s+>K_nmY$d`3Z0JERm$3v&wxEta{o zNn*3WofUp@j;l@|?DRtpW((N&>OT)ek(`~DysKJAE|DLzQ_6<~-I=PJAkxn@<7EN!@eP0Wiqj;*nO2Nj;_7U-&P1a-kzgu_ zP1PQJv*1b(nN}CoNw6!~#u8Q0+^J4s0bT0ez{~s-(ca2{)9MO-v7LsywcMIw&>6G5 zGJgB`?Y22YEq;CMDPU-a(7ri^3jbh;7>Bg^@(@8Tw$;lu?Oct+KJ+sJHpK13 z3xd`qRcUxzx}*pgV-r&I&E+H?LE7G|AiF?fWqcqDp;yP?#0m3Zwl&5~QMR3(d*EOj zB?JG$6;|b7o32K_h_Wu^Bj{aycNo>|OsHwGV_6(AV8HNaZvabry8Oyhyw-wr^mnFH;$V=8~ziL|K z=$ih5BJ)`>TzO7KwvjwUJV*GRf!W$ZIT4wefYGz4Y+N}>ZVrv!b5JO{xJ{Pf3jeV= z*z%z9WWzN{!T1TX&T=k;b7hL0&)R_-4LXNeFd!6*P-8Dj4QC!Xyuuhsl!V$k;6QDS zU4FdnO%vTAktzgeOrocZCuF5Wa>gP^oVrN?cB|S;*o-CC}(Ig=lGiL?oRDj*1+KtPDj@!-ogXJWUKm@hN3Fn$-Ha3 zM$(>dU^7KlL_SlM;Qo;C?_`*&tIfdoM*t~p?!wI;2Y+QvT|QuFThXHM$m|WfO_(%d zV6}AFyTqW1=r1t1(X)SgOIAs3xil7x6CKA(_b14IEg5x37Kw|$%H*rB z!|-)%zie&w?eq=JjOnbL42^A!>CA16j9uyerDXgMu8xG^pW?pA_OHGGDbVyiB8;N4 zlEzASXq)M~f0D@81d7&8uUp)x$lW}(=QjdL?#AE1WIrtDM-OgWmv7KJ-voR^k&09d z0d%nAfz!d~z|j$vrj6yEIvGi~BKhr>~X& z&_DX943}tsS6Ws>_p+&&nKRaHqt&ILTUGb%?`3l{uS1nJOU;d3Bf)Am~Z@_iVm5{I- zi6t&~v8b~4i?yQY>)iKCb^W3u3nFKOGceYT4#qpu+?bZ%Up}6|rv%4^VYskJ>Tv$H zPo3ki)7y!QANO04dx1JZo78%CJSHL#?F2Ve&+Y2VaB%AfHx(x<;d-037xJdO?*|G zT~SK&IL@>2btVVC5Y_eLZCb5uarxJ7e6!aTdIvEVC9cAU%5r*mQLWzgkRW7n5cLc? zTp_$N^xumXEZ z>U#9cC^R-a^1;6i#3UCg;ENg|9FA_37g`m>@Gi2rE_K~=IzoC zJvYAJzes=3+krv=1q21dw_?dN$xOr{Id+YAa<4RSkx-y`ePaag*v&ZX2$Rp!E~?9` z%_mo1N2z?ZtzPWv_K0JOh%S?PD&5tIBa3DnaqMGJBpWq>bUo@v&gybeGv}1u?F={3 z{D*-(bu*MagnJ`NKhe6XZ#TCHQGa=3_Soe`T8!fFOe03_ZDSRWnTrlp{d$}S2dBuRQ2PcAvW92XhhEm-5 zF=%|6Oc;2M%#BLPCu*2QCz5R&-fIhjf7ZLu5NRmalYqd^xfeQ!;B$&Kp?U%RXAq7_ z-yvDXXIl{~0T)V$q*#9B&U1{hryLj9?>y1~;{}aI?FT{aX7l|?ZoV+kgEmX}K38T4BFrJ6Qk6?d!kZ8zgB!yDHBEK5R{XGNrWz zBE|neA<+vo5=7zWmjWG$7bil3Wk3;j6xWIO)BiaE+OjCwIP-S_qOvMn^>qf|J|?Tps!`_98P2LkSo&R6_z@&zz$?8s~fxmbL$ z2O%?SB;(^VYeeI!i{7s>V>V8^taSFk0%pFOE$8EAHz3r--Ok`s7?g|Kl~UeY8V=v% zj*Zo0KIWsiP`1e$l@XWGZ>97=X0Q6z(WrI&wZne(GvKbb{(BI{Zcrl@qIiSa5dPg( z3jUkqLFdHwgOCmPSwG3ysQzszbBy~{DpU+?KPo==akmnqCnv__78|3xs_1Hwn{4`F ze=f$F>vV+so2qaJiF?!6&INqx_+cuYw(!L^S3KLHn@et2rI$_Edjg|7F}4l+T{)XK z4GFk>PYHA@-%`|e1 z@RRz!62&7n8DL5Xet(2T(5G?PUrLBA!dAOHaB-rf60 zeo?jx8|G|Yi~Mr&Rwl*;Ga#4-E^w^>y0KzRyuwFi3azCF??W$x4<+_b`%&aQ_;>mF zDea;Nj;wcQN?Zz)npn&EFT)+;$ju<^I3zX_D z*z|`4>@dr+JvL$6g9JbgZa_--&)-U~8gz5iL&$u0BWQ z3L*5$uie&2#GQGTi**uxA4`tSp1}yW;aj(`x9rA@C=_-`#+AN0f)wPxC&_5u{-p>O zhe{I9PK4v^#AcY{M>K$x?S}y?k!Vm%p9KbkbTVhr!#n0>fX*0N+O$=SMq)m}ZWQ;k zv?0Q`1-Ps~Rroz#b>R3gU4iiae&DRC9_^x>`tZMtn2d^n(~5}c&qjpr>o1kND)Vzv zx81@`)1ezT{eff%C2bA^Id0=)XFf*2lt9mfaPTaYXICk$SSfudzx;xaAhcaC%LNz( zRcO~HrgTG;ejaft^6T7n06Pp1Qi}k7cJTo`n=A$-(mF*^TX_Qh^)0XPlgJ!yd z*f+aa)br_|D@;n+pXk6a^wRunLjx(ye~q5KaU~WV+u#i)FfTDaC|c!brEwq>72e2G zn{(3k{$%^G-r{pz?1IcR-hzEw?E0+T?Ak{mC1xba?cP%k9uaKL!-ZqsSEg+qVNKL@ zTcZ?1`dE_JNsS zR&T-bh}ka0w@uN;^488=rDU@KCt@@epVZ`}2NA_qg|$EF_14! zh!AYLQtf2#q_{vv@He#(FQ-}vHCWZ_sFhWB5e}>A7hV4jO!7F~pqg1iXkZK0$@d|{ z6$yhE`KkU?8<^{jGxb^QYnQ7lQG6uuDxSD2cQ*qGufzTD zaV9gt_V(;lnk~fm$9labhq5mB8F@ct4%LKkNA@h%1#Xf{af}L59g>xdt+Mk$jK<%3 zPOK^&1ZC36rNwN;G^)kOHM}M{PZCvnbgnnpon(`0JXVgJg(#>Zf@annJWjx|e|e@4 zE<)`qamA5F31OEo)0)>80bj$nmZ58EED-HiU-hIVf7H=4$CgxRP zk0dBElpnS2A1>{q9vifx?gM@qO9V1NWefpX)M~`QY{ZD0cEQ0Zx=jiF8oz_MqlwZ@ z$4{qm2T=2%DC30=r4T-zFyJcmQ8QC4<{iU&LPy?&)j;FQjzLWcFsH!X#KQYf7y;RjmEOS1sb=td-|{e~OL`<6MS z6nQwv!Zs)$4751z@fslv!`8qBqWN4vQRVb=XvoXK95ug4xb5Y>E8NJv(ev+_A;iy& z*mf=4V8Mq!8MuSn<@dwNy`Z`;^U;8A5^oc|&rPx9h?{ZIxPb7i z(h@=MY92v_{RTCLrDZ9D`DtAX_@-7=q?YCdck~SqwfPMZi#p|aFY>sr;eTs-6V3_(fd}%EGxkcn!7aR!#$D;vvW*Ze z(fvv&h0e!`%JW|p86Uo#p6dkBz`NXR-uXK9xm$bQGy!#6;;DfODA!P4Zt0H2;cN2V zZ3cTDfsT^lXOf>=6w13;lCH^&I=P95>NeS?=5BE_I{9sC6xYT&oi(-modYvB!J@X< zRcZWXYV;ggdq)H`a?zr8o&YiX#P$H%4C?22X^I1z3#(-2MmxRxG#cX5V6N(RUccS* zKN)V^e-mzdI3jQx1|v7ZRRmdn`u#yPn2|m#RG7dkT@G?%(sEDidNWWvjI`3Hb6&O& zZ#eh+N#Q))mgl20%G2IqRuBMmn&p=sHxU5cAbPRAmGpvQaZRCk#78~xLf=QUL*d=K zJs{@Q;QgtXb0ztdSa*j7bd6aYJjDJ3ao6Zqq+AV2#&NLa5y_A7Ts-VTSMXrQ>qSBd z@n@XXzQCFGy{Y|6bdbB$cShMb1~K~mZBN@;^ri1(>0D!ahWRCzagQ?v$p zqP@~zYVyHJwBLB3ef~4DIPnk-%p`RCV@_jsfYu=eQe6KEli>yGWiEP;%ryQ4{PFc8 zqS1(B#2h+TnKQ96d;R#ET+w~Kzc&WeBmEMTh}M}k^1XG6fPBp;el5T@k&3?*N2g%a zj5w`dNPW2af%Fc2+9VllV@rGTcxctMWju%4inuBYAM7wT`qDV(tC|62&HV)!zPLt< zfaaUmfuB)&fa$_mT!?%6GkE-`quIf;+vmTvdG&;-g(6>V-sji(vTgZaa1uZ#V|zDw zeR~IEdpaRAeS0NGdt?27ws*$zGD?#RiuJ_oIDrwWZ;LiTWA9QuaEOhq?-seQ`^K2P>@UD~0pS(WOJz-$BFM=lH$nL=^gPSm?>+1hEK>B_jH~2w(_1s_0+5dVG#lHd~ zs_)?V@1P{9ZYrUgqVZ&GE`!GsD6%Yp{(>ir|7Bj4zu=$0l#519W1yLABtfLlX2bg3 z`kmPGSSaUiIPFB}oZPY8kbrBJuYA_QB?SqL6DHyH{Biv?%j4pY3)tt!e+;0EV%MLz6Ev1+(7Aoj1af+8}yn zKvrs`p29+Aswep0N-0Vh@?Zs+T~*9c7{Q3fBGPrmtqcMsBo`Nrb@C+<{l)km|D z%H*?nb8>lW2Msn8tMPh3pH@vXY;vSz)M@q^jkU^X;@H^l>U}56K(~p+$apVV0n_?r z4*H58^d<*R5Z24_dAe0q)F%s0)^%eE(UoblBMs>)@$D{{wGl<-{&|(=0LEV;qkwzq zKgqN3JPxhJnx{(XD)UuiEvk)!;n>R>f13nRU``{iIOs}X-iARIDs{9*j{#*-v4m2( zlu4t}F~9SJy-nv($p;Rt0r?z)%0-|=ktad%Ky4#rfyOoaD#7?+Xut2~R3_uOf}|m#_nY0wyOzMt((PQsVYlACjrK( zo8&BB+6P1<+i@iz=$nq{V1MbyMR8Cc3t>kY9Arlp<%kAg>Zbyg?J~?-mGg5&u;(@P z^L5s>P#meE;dpmkSuDvWEO49lYV=hETpapTQHc$IRmuOBdmI2lSsE-XFUM^tcGHvE zkVg{$e@5o)JYhx3b&dwM_nfWl(C`d4k!?m^rLQubs%Rc6C^t}B^O&lNGbN3&_Qpt` z+3!VapH|Rei4EGDuw-Tu7=jNP*xDb$jmXgX%XMolSJtn3uh(Nk*@V|QzZb!nCxzP} zakk@ZMH4rp63cAkKe7diS?P`1a2H#HI6 zPW5f~U1yqZHWWzAp;{_>26YFDS@Q}LO|OdHCbuw9kxy8nK|F&431(Kr^gF3jeh=l7O%fT z9m_#}r4l7w*nz)*hlk*idqCl zNkf(^nBt!7?6f5DnnZS&No#;YdK-?}GnzDWkg=l+TNH?aVTZW;1d(D#fcg|APNW_V znq@K@%)vEND3Ilzh=OM zBPZKwVCym^A+Da~B$u_B>8z}4nko;C@cI?x3PC>KD->sTfrAaIHl7FD6i}l zKG-Xp-BwsHC*1Sku<^7^)0TMPmo+odq(k4r=}rIBMzkVHKUQd!1>IKup#G9&UAlb< zd+k+=M2$g!js>26+m|f>C9iJo^MQS@jPCnEk;{37#Eh0b$Zzb%cmUZ|~Cnsw3$|Y@Q-<=@v$2bQAJQ4$gCz zmmW?)Q*`9*%8uFEL?-XqS|#ORg|WFnQxJz#f4t_4-mWsXO@G(^Q{d5Xx`H8o-zht) zk@RRZks?4kSc;)s>`_TZkx=@`@y7j16?=5f7 zQ-4woH@ZsG4d`zLJ$wPGc`KZG)GejQ-!#hPVA$BWw{uH1HgC~E70?MI zf^m_uz8*Z7v9rbFm&?bo0Q;Hr;~<%i%1RafjG=xa0;gTUGT7Kh-syIJsfFI@(|vChMjyarUzfl|&x7kBOW&vPSe zdxr#=hrb^_qitSXe}Zp4eW0F&vBiIc3wf#;o^pg}v9Atb z+ZY0t(q16g%N$Jz1{(BGweFfAxfUf)eK}l{81mY0U89x*xXo+7LM>G8XtSI`hYpJ-kUOP*qN-ar~ZW3^I-+_8x7 zX4R*SOrGAUJEONiTX}?uFwA9CkP0#dJR~eAf2S;ft9S=91z`Iv`*Tvv*fxp7X4HXr zmo-Vqr41AUn$b>UhE}jADHoi7+C<540uP~7jI|tstC{8==t#x_t;+}ScM@;lm0lUn zPlIV#-@JM}SFT%l*<^113^F<7yf%n25Nu)d?&5nz6Loaac!tGX14tYwpG2t?h<5e& z8c|r)wE8ubdk9zlF7zqBJ2IC!Gndux1e$2hpI}x}H*%V!aQbJ|VCuY}{^zG(?B>Nl zzwU1T2>I>X8QlL#E%!fbY!O#OV>?H4TbqC0pQu_p;LHQOs~h80Z+NHf@bMMTLah1j2$2}7yqF>x>#@JR#d6leLzYl<0~kn`2(H=NnE=0c*`yL2lCv zf`@qON)jIMqz~TQqi7@^7fI9`E^f@8FU}e{O`cpjjg|>1Md?86)iqvpK*4<7$~BtbKwGUx6nnlxG;-W6aS3K-7q{g5=CFv5&#tB{SEe@ z)~P6RcH>@;?_Y6!245lSDh5zpu_KT%i9p)-`$U?}xvppNq3eerZlycen|88APrmfO+iY7hV`mi>~*< zRPTijSt!O)A^i;MfF^Jf|0n1Lz6q<_e#mT&lKPLY~!58^;0QD z3F5>Q=LNib(NrOfk;q>Y>y$+6_VnrKa(AdY8pEorWG|M1Mz!K)+{)!o+DS*RG3MLo z-c&ZbDHPvj;K4ZZ4!S+;N!rLt{N-e1B26jSi8RGM{&--6Sok_gC}|03&%mXwsDK|L zNm@93C*wNIB~x+;C1IN&bWclmYKd@U=_v#T+QG<-OHTw8r?O(|f6nICqJEo&bRf=1{t-6L&y1pzV){|A^ zEBa>4hygm=xM9-rFBxnqWQjH|t2BWrdJWY~c zk*IMkGHIRu(b?kcx<7%VEg3^V_q>ENQ9QuT;mToLd|8vCaLAhE$zWW3U7Jo!yZU24 zvbN>0OTl#PkeqYUu`%!@G9j@WC)HA8PpstBR8@CPspuWy;a>)kWZ@}QOFDEK9MV3> zJ=2kN$revU)cQ~^@OG2Kz4<#dnqf`YJw1uNS8aB*ubboHljY%syZ9-LFBq2H&zyU( z=Ki*F)BG)7)wUs^vq!{W&-yL>j_nE0JAz|ppU0j6g~{je0(L9{&?1?biHz45D=0|! zdIy2BG;RZVjnQ$2f2ZSmZ%`BhF5?8;o)@vH2?5vcTmB@VH}&(*$$aKq;LHrCfKDRHEmBgTysaUS(_TjoI;nPLt7jIgq*TmW9dA-^eNfKSwx`+mx z2G>5}glT+xxJvU@2WRWLIxom&-wRY|8TdD4c?3Cq0pk}P2mjwHX8yZyB_)OQt*rj3 zu1``J{l`up+!Avz(kVrqASUrdA^4r|JBrX{D*Zyr?XCI}N|9i){#zbTpt9n)Pv3Z9 z>Y$UhAk}|OUMz7n)Nk_XY<~M)ryv4Ng}=bf3?WH~1u_jF*A-!vfM|NDgD?84(w$m3 z0m?{n$ygs_I`Y$K|3}A9hpw!VV9@G3D4QGi_UIW-9I*Y^2=L6+{ zMyimwuo+_3WgGbALR8&&{we}2&S4u-BPff)H1oS%{^PuQ1sypFHaxL2t@cnRoGDLh&7q7pDt>BPW52V5 zCR?|*IIt`;B?dAnF5CFI9d>ecels5P>c=^Jo`PbFv<4Iz=nmi-CQag2GP3ghn_4Tf zFz`hF3x=LA82G>5y#KFS>%W6R+Sb-m-^^IwNXg02(AeRhcw~L8G5v>vNfRb0JhZg* zXd29{&{a7UBR@>SkQwu0v_5ZsW!~Cy&(w|adJFMN46B5nhylNE-H3NHBP;D}@NkvO z_ouV9k$j_mzQxzPB&$&MZiu(%NNgF~3!I4>JZW$EX~+%Z9|Cc&UMLU|%4!tuBZu>n z4{Ec4YyyTv?V^hovgg{A?}WrK0J5Zs z$P@`qIYyaY>O6jDAdGL+zJwq3NTB5KU?PKw(F4~XPKdEMHHEylmCBU+u(ez4kjo0?hc7a*8n}PARS$CaHyEjUXg?AhXSSid(ByL0{6+(QXhoKLND`2!`~~zj z#NP|QG*723=qxpB7F0hj#~;s|Giv?JUSFxWZcRGU*lagEZlj+&xIf1Y#lGoLZj1e;GMwfB|S$x<#OLUe(CRItTKjw9bOOFIhV` zu|>a!LavMSuPd(!iEshU(*%kS5*-T1jX0#N9P3Xi>kjyVD6rch^R$R`{} zdU%yz{&XBm`VZtR_zexTTpnu^*>+u+&V3*pXA)ct11+06|YXJ;Z%(k67v%cBV7`DG$!0H~Jb3g?G(uwvwyU4+!`Y!d34)ny!n z)M0N~;*G)`4CjYru!AXKwpUVstB<~Ma zPjO5ivHr`lXJh~Y>MMfcCPC>FF~BE(XHxksC|qu58|thE+)J{56Zh=$j6m5_^oXyd zgDy0h4*DfL*Jq&4M`72J@WvQJ((NSRW?#1XSv-5i-AUxq=Y}>#tOriE2&m8QamaL18`mJtyi)*?O%*Z-Mdz#4`DLPGcmNI3XwG1jg=7c~fAk(aEq>CA zXR)*vKE2hC>;rC1=*X)p)qUA9@A%3v)C4O(Omw?&ZlEv=*`DYgAj;bXHg{fv(=BXs zi)S#*gin@Ha1X6-Sgn?hdV$2FZ+?G)8z#2*l$$NV$ric^wwdnOm59+)tRY$BU8xYgZ!O4cWm3XZQHhO+qP}nwr$(Ct(|YPo9w>r zCY6&;`k`OClm9tgRX;sa*&W3Y7_6y^zpeBAz&;ECf$Pap7%Z;m8OX~l`}RbTjle!l zEqx|Z)?iC4krWDEtZFcCE3fIvAYW8|=9mt~kp9cfuYWO)-2nM?bT>aiHN_CPM6I&; z^7#=xB<4^T8PR*(pYDrc<4ew&TA}{=FKrha`^=i=vIi;-6r+n;0Gb0{x1}QfeG^6S zj4~Pmj%QcbQV@VZy)7yl2DPNZi7^k@4LtIbMcB`1Y`p2f)H~l_0}l6%5oHuDuV5Av zNL1(s8qQ{qDn)>cvhixD0W%UO!Btm`@LVcYU?s()Hw82&Z;nM{8aCWdg6EyhU06{x zsI5+0HmoH+F`NpUTR^eGL@-dCJ%LiJp?3~T98dd3*KE{L^Gc}cEV3gak8ml<^DlIX z==5_p&&XmPB2CQ7N0Je;-boWX=kf4rs$o;SDe1CMIL|m2SU^P_TDQ$=2`~ee#3AUkvS-xS4RfT?8@)`71uo3h_i9qCPCBtHvdIXJ_|; zxy(q!F-JsQ;RFIn1K7k-nzG*@Et54 z8;OQ+KfDeKn!#Oe$6Msf@*--d@J5=$eHj%MS622cKO|AMgE|1lMXc%H?k1`y03E2c zZ(kp!ukm+SrpqNgtGK1_;w4q4cMH*&75Y)`u5RLBBJLg57&)_L%W;@Jjw-~xA@3EA!2aP`%M;dql5BRdRk z8v?4@Xug4;=(QrRx>-J_)#JyoIWIoZ@rFMquaZY=pFJBhV_XvNys&QFvVLkZykF%u z<<_QP%QXUPiceD*-X%_MQ0`HV2G*cWZkv=gqbmC_jP3&GW&lD>a2$LxNxdNXN(E4<3AsJD_UYBDC5G>q--2il~ zzT6$G^;eZrue#5)#B?63<=oQVfg{QIL)qGjxkUwMhU?c@9FkDZu#gsfMs7`;-;0lt z8PV*Pwu6r8jwMX?^Qxbx?}6?B1PaRE5X~)j5rU7CKvd{aUE#YO)XgoDNRpzq-67Ey z9Fm7|1M;D4a-ru6hg~B_SL9`5*rv~ui_Paj9CZP3;^A-ZRu&D^VRK1m3@ZwnxnUvG zpr|fWE}xvFyazN&8T02s7p*A1yw?*5^W-KA$mJxs>9f&`qEOclTG@Mg+IlO`aLXVE zY?sv=;_2-#^%c}eRq{?+Eqy2Xy3i73RJCeJ`u z;K3FfGZ?iY$W#3~ZXRrx|LTwlhmnhZTAx8zO$oGCBbd8p@rbD8oBd)7g$7(Jrc87mzY_ zMpBh12H6URr6oaz)=M;G#8RL(pb1MpRMo%)i{6sciH$f$VZSe~CpQ_;em5FA=kVnL z9=q-xhR_u4LN5?rg1*z4b^FpCU&%ftLkesqM{sM!Od`zkHf`eKGLtK>=V#ykvHE?Vbr4dR3f2*H zzwEW$*pFhM!7LPGw%jRa@x8i`3pFoO#Oj4SpgFU)w?p% zXhA%|JI^edT?nvp!34yOfQwI0`8pxbx@nqSC3YQt!x7efWy**u~M`t`wy%P#2?I{b#YXixXCdpGv@QGzNES;i;GvGk5Nz2LM3k(hPh5+T- zM6C-LLyram%rWgFDC3aNH43j+8ppbsl|(M@%hz>F8wDw6004oouC+q(04HZUx%8Rg zb5EwZl%Y-b&rIh>@Xqpq3&l=9APe0v_Kr9!K9`TJn^DJRfEMT;|CTGysA&wbVb=?a~38Jua;65E#c-tfw#RZDZSE7jS4tS1|49GJg^@ zHAa%bJgH0gESA0c%@`@}q^gCrm$fAJj!3JyJ*NFb5y8cfQryn8nkEOuaoqZ(5Z8$5 zl{(=ptr(!5RI1#o%9S@@^dE}ltx&~E&8X$bzCi993eOg7&Z>n_V@JM2@gkGTjC2E{ zwcr8yE@((rPEsQzn{nMQVVt*HU>yQsq#?Y1Wpu0>j1OK8u6x83VqyPUK`jtATE{f2 z+zY<+uyEiZ*j2GLvf%wZ(evrt$`wvx^8l|N&`>=HgD634rZSIsxRUNEh!Kai5{!U8 zD4@^bqll{ZJ{hxt({8PP+>_v8cmYLzQG-i9ozc!+0lmP26l}2ixO4dq#WO4--8Qx& zI_neni5e`&suPQHm3Ztqk8PAJj}co+rtfp)d1SygJBacXT+K6OKh_0zAZgC-cd*kd*H;SJq2sO!wXjA5Y0^H)PUx{`i*W1T?qp?o-z&Y=p zB0>6c53#St=1iskhDY^3gp{exZWGGaR^}iE!qtt0rQLXPiDT`T;B&Vb_N)ER<%8)@ zUv($ObK3?S$HVl=_+c=NpGKB`lML)0=WTjuCU53lR8V;0QQbn_s=1APr7il*PBgw2 zY0OAdZ510{&M%5oRL6jac*7vrKD{g({l7%!(fZ1*9RyWncD7xM$C?Ku7Dhp0_Cz!$ z8`R<~Yn@=c0m14N48%RC#XebGTb^%hUpQJ&=w1R)oWhr`S--34(q}wNoM>~N@T(E` z$eVC;p6Dx*{B@CDAQ|W1h)PNO-brH7Y=x<~qGFU=YB?Q}!c)Vs!=!~`R9mFGLsVTr zIbEpylSTP4B1QSTQ^QxV+K=WF19-6F2a54m^0`c2Zv3{T!eQY$>PP8G58X(YMfAX{ zNE6*Z`KJ(b&Jt76r5=_IoHA#;L4)ac5X&DpjS1d)6o}o+zsgA&AsaL^E-wD7CB~m( zRWo&(kxxLkCV`v7uCEbeP$l~i3b1zJ2cl5iem(xaGIc8Z4c@NcmaQUhj{sN z(h4E{W{}7t=N%j>JSL4u)FzJ6E1dnWopAyKrA0SS&iuWV+_H8#|BcC%3yYKcg%Tjq z<08Z>asivsn_>j20xav=5O6;UATu5;{HZ51t)qZ&e1-4sN3%AZ=Gn6tnioUfNp2r|T6Q-Nj&qGqC5M8B-ZdpIq!oAb#;F9XYh3 zBXJ;}99ytuv{G<@x$*sm(?frEB$!^SrY*!Mpfol;*MvigUz6@nngcN7vb*BdYcMsfREo!hy|nrv#SkM4TL-u z6D65uTZF(fTndHFA{xduUHkEJ`MF3y)A6>yOagVqB} z|2i^#Rmp9u5wJkvU+`w5KU5#IMNm)NGIhlfcIFCdjze9A1Pi4IdonT86`|BSwYQz` zLa%53r{*|Se7U}m+?j0*Xopmci*jBcPmK{6D=P~;A-M5GTbQcqJYb6uQOE(Z0IY(F zGwQdMm9Yc1#$^~8OtPoN#wIp(Ty^_-TYwSqvheh$=y>tZaUp*o)oR$AU@mLX(4a!kvw90|7<;r#96Y}X9N zI332KSc7Yg+8yQ|Oi;v9Jkjqp_*}+HZZiu&wdnbSz=c)O2J7rO>5+EzA@WJb8~>*m z*Z5?s*=g-i$3KOzQcc6}*Hjbo*$0ItrFe;B%}xWsxYlarso1Abjj7Uge^rO)7sap^ z+dE7^h@_Y+ZT50Rk~;A-#>tH>zvmaChmQrDI7FBNh2{u+-b|Ha-XXyO8HAmJHDS+A z)=Zshi3!1J(*`~&f-8mX-|$RUe?L2#^P3SxrRq=b?fV=ZGe#X<&Q}M~MTFqTw($Gw zT(^EmpGfBQ$QcJ01H$j)3`{W?WfCwwEjS7dBrZlm0p?0+{GSjZTK$JJCT~fR9aDPM zDn||bj2C31&i(N@XG}Z>8INe5`PH?pllQRM^~RO`PM%@h;Pwg;pf1%Hqc3I=wP6D4 zu=}hVFVg{GZbTPMqw7hrjL=tDA+3J;r-e1=6s5p6m>|ibOuaze&Xq$2%p{*wKZOsN ztH9s5x=QM|BaZL64VM99r?DgH>*nGdQk4W&6^F_lIT;1k8nKC;-FL*&_zDqU2#?qZ zkK724gb0s{e!>&ckjaWxNg@~GMdHj!G8Y~iI}ws-205vY<+o5snNdt>t>oLAdhpkP z80IWuIR7=c7m8ofgkB|(Cd67-rTnLAky$p>Yw$uMJ}Y{4Jhm=!T7!a|G~&Jhb=Hjp zmqR;^HqydZys2atLz=^rqBUZ+lq&zjV*%7a>lRFAg!=FHaOPy2s?%)PEYU3SM;E^zr1jp79GlPcTk{w%W3Oxr! zY}SOVh*)32)IRYfplB0^Dk`sF1JUP=4qfQ%I){nDMafAniI;w&>q+TU4yuW^N+{|{ z`{U-meM%E=jL8{$XsdvS`b;(}T8;^}VyI#hwutrJO3D)!(H z7(v<@>$n6HZe|#TMrrXnF}wvhP#@}U?)_?51!lmRhVfGK=v(_AS$fG zNt@7QoY27bAeAR!wrDpXJ0sl|ZuLb2fO&8NWe>J3(5;$xA%h)QTtG)-cD76pxg)xx ze&EbAij~HP$+VS_72C^W9flmw=JvDOVTU1S9b1vKn8+(3>I7)OTwdFVfZN}q-C!vB@ zrL4AfI4>;xfYrPue3DqoffExCrv(6s-Xp~M`|C4M9Twqb!U5yv23NkrynUdnP42)O ze9&c>390g=)Ept{t@?~CWjth7uwdI9pH>M|JDeq2px{iPK_k{#H@H9I9!jC`(}$)f z2G*f>--C$ChGTNhAIp&YEfj6OlH@g(bm2fy9Po<*vo`5mlC`XV>L;!u$q<))?VU@z zYlxFth?5!`Eq2IFo(Xj4#z=Pq`}c;aIwG+r&yCW2`>^Y=3AplL{|Zp!tL2HeIfWur zSGlFXwneAf%`PRDl{NOW|~8CR_LSeposN7W zN~@1_y#EH+jab!BFS?7eN2Uo4_zFIHtj!rlffw>2d%|x^paW9%so$Dq=%xg zut$~@YPKaPZxnWjfEiUesM(eosK@aSrKumcg#m4;bn{9Q-^%_3C-5jlS4fR!e-$v% z17n|*Zewpp@c{)&gGaw+WdZtPQ(B8E@JcXdBdrv@3k@SODp9RJ>(8SL$4A-RG=M6S z-Zp1&A)1LeLjt-q)$knd8`Lt%h9*3V3#zg+|C6D{_8-U+3q|b|5xO%KNTMf9SAf`1J-UVt8uH^xR!mtwIJss=homI0G7KgThx|Y!XAX^yRKW# z9*FJTt6K1$LbPZAHFG zu*VnS1i50JJd-y_fq&r?3jOJRv3Y2$@l-)7WC40%mT3I-8OWNb%YR4U76A^6oi)t> zh>P-Rr4ffC_(f`pr7ZroFDc27D5B|huCZ*t=0O4TxlA8;@YSih;R#p_r(T5>V`*A` za|Yw*hfmsaD1gNWJv*nKIzO|Z+g%wFfS?*c>TMWo^rf~ZTA9m(e{D`97V+29c4NgO zQVT@6uMDPZGu3sjhzS%dOI|e>^Z9g^wF3h|2l#Uy{6ju7v#Xk&$-0>5=u=6YrT)n> zwh_umst^VxrxnfTC|Aea26JLOu4;T$Ru!MSITS3qPOYw@SK^LK2HZODIVMK3+4ow&!i=JS{SwGN7O2iYNwZKZv@p+PpuwQ zb!5{j+58A4^%A?PrqQEMKve&o6d74TuKfC_G5RKo$Or1Le2=bTFYDWsXvEPuG}D=c z2vAE*No3|W%U4qM!=r6c8QAmSj7B%MrXRV-Y-`B|@PZ*j1PxhRGax^_K+ufQ=_ezT z^BQ94F)hb!L-7Xi;LxD2i3bi-=_lW9j8fr=2Ksiig9Cmr(7*+PZ~ZpT2pd)}xPeFN z1@^ECv(x9icKLp2gB$w=@0+TxlS|5GYdL}63|kBv@5BWj_Dif#?ZqSTN;8%q5zDr(&J}u0o$3S1TTXY$1|k@>P5w z3!14T*RewgzyAqa%kUHZkXfFH=z;J6bG$j&lK5a>@6+&d_<$8OrReea072ic(3*2V zi@ajoV*apo_U{P7{2+g3^h^={AT>O=qz3#17u~(AB7Os8jPV#cyxpiW{DfAW;50~m z!dNo=AZ!ft=&jtztU-UnIFtNDZVm95fV`qy!v4f}jr|OH5A_(|-2K${JlL$JeEw_E zd!LiBy@vOXL1gBZTYZCsn=uLh$E|Ye*(JKKA;|O16*pOfMD__hm(vo?xJ^9o)`2>z zgBb97fgjLAR{!dOufaM*OD7A7f~HTHTyXn?DTg~8$`GU>iQ<+oco+dpC;e~8wGJ*v zlbkrbLMX2lO@xzl8eVJP@{WN{=u=q|Atw|~K3v}ng~2F3m8c{Xo=svh&OxxO64v49 zuN*NABDNaU_z^mtj5P|xA#|PWHR8!c#}LpxRGnZqLGrlEP|!VrUEF7ZDjpAt_FI#x z8AAT>F)a6ntDFgkLS?-a!c((;-LNuox@AP*PP1}llNPamvlYH!heTxq7A%J4On6i? z${%GaR7gtl zNzI3ZrKR(VW-@9za!4uldHLgIMV5o}*}taP)qNGq)!x>`sa|5luP zova_e^8l+|9-v$Mt}64?SoD9K-)|3!p#*Bg)dIAG?Nw_=sy{ zSNwD4rw;jA-$%6xp)Mw=Tfs@bZS&mU{R{ChReWUhIY|~s3n!|N?D_kL*6$Bw=s*IPbcJzF{Li#pDiWT1Inlh;fhzb;(0V2z`EjV1UNHcorjJejuh^ zu`1zvLULb0mm^~K2Zc-C9; zkaKb!-YHmzN@9t>fddA2^fF&TTn9~%uhNjOfaDreG#XPf8cSwzG*eMD6eJIPaMZrY zXZTj_5aW{|cwt*+qZ{QS61x$s1$t@+)>F|JW9vXVugM`fiH6rAz}khYd+kUg`6-pu4BAmnDln6w@fLN3IQZduf(d zj=g7+ybY+TS8%sGnZ%Et+f+{|g`pn3=vNr~PYhLJX!`yNBsc+Bd=zs&|aRrAmt zhMbpi(5)K8syAt$w24n97qJ8=eTElE2VTfO*9AQ9yx(TFC>k~V38o?Kc$czv#Zqpu zAaU=1zWrZ%E%zlFD)B%fvPL%yXjR+Rc@a&dYBrz+qC`Ln+T;7Vu*}Dsl}CkAA}`5C zKzXvdd%-rL#7fyw&u&OhKDr*hC8rND75T3nnryvLo%2gJMHF z#D`5ufaVR!A>+RCM2iDN+IRn^`H_hdFOE~TDnbWW7&33-hxC8hrxpckqZ*OxP|-UU zge%3OA!Fb$uBA%)yy;=*L4`;CS&*8#=zteyj8QD|NW>HA<7Gp)H-e5#F|b9rCY|Bg zA|y@I3NPuyH7I!-cSpzXs7E?gCet-^v^cwR8rDWlD=C%89bbT+?j%j;6gSxkb5E-3 zwoEj@Q;H7Yv*(PA1CkBBMP!@PS4n@90;MxcA1XAnY|xh{KdjFaUy(nxDUxKjkaCs+ zX8=pt@q(mxw+AbVUg`%a^>JyP<06kY;pbsP6Q0N?-45)jIDBMbT^`XJ)(Bf+$YOHw z-;`;tkg8q{;6B7n_e>PnfQJ{<5EkONEC{KxrJ>ps=GKeR16+UpOH}3o+D&I+8FY8A z1KU$`6UZ?}%^AMO*61ISi$muMew{Bv5Tvp5A|7AErSOQ;jwYJ_>so9pN!2a(ATN_9`m@x>p_I5uVDs+~>n=S@nrvcc!L{-^vfE)o_8eG0?&qIl*ybwg!A zJ1r>hh)q5WVceJ2AX-WU`7`&w*Y~LJc3tn>hP>JSQ8t3t>ZQsbvDA#BT@TQ_A9$~J zhp|-yo?wUIiD@W~ZSe0C=A6$IdbN*vpXPGjPO`Wcdz5YH;)m#@DNwb7%>6>3E4n}C zXuiIX{qAV~6NV7&VNSLP&sVV+ve_7OQkMQ6heV_k5__SWkTm*Un$~rPY5$}bwzDFv zTNK5d@iWbynRWq~aV1?U1HQY-WU#gkRq86_+&}VstqfLXNpvpNDUimPY+_Xfg_c%O z?JX9~jFO2ut{)LD+_OJGg9O6UdUB^oQD6&WS>>v@bg69c9Cld z>Xw`p(NBH|rL?hrt>oB`4zZf1kld_>l{C{Q9tn_VM#?h#*=xB$wU=1P`LE=)bpjN* z5MV!F*;aRgam`SLI*oXLSH-lYZQ-TGWi_6ZbX-*~C~2 z(z|rY!`_A_yN70c?vT5A#(i=T_9{Zaind}dqf!~8y3&nakMLz}-ijA(9uspzy}n2T zxl#E%?B4YFRRa-H1rG}Wm%j>xqJitL`=9ivl}KH32m>p#*J z$e?Eoi9cu@{6nIZ5u9e zRB>o~O_VWiN>>IUo>Ln?U<@6$8@~tpm*-m(HDz|Y8#|LC(yX_)$u(L|HO_oW2jxrg z*z$uvA-1e6G+Q4v7G7&;srn^rJ%zvpu|vv@=o&+9;5bttjvL)4^F)&`HpNXd=ZWOm z5|^a8FPET>au#SK5=TYi<<5XiEedvcFIpW#X`nC+&u!}D@?iIxE4*!O@z0H;vhD2I z+81Yw-~3|=0I$1pG-lex!we}iT6uJAZgbhegqHLwF^bmJ#ykwCer5@u?z^!Za2d9x z_bXtDG0@EG?lq@!rlg76>oA^ zS0UAB-_EPpff6=@DNy1nI$~fZu2PB7qVd|tYzK$BHj2*Vkk0pS4^*m2>KdqErEXFr z^Ei5^w|3OCgE+~m#LjK!QFz|8JTTm;TATI;l3pxlHYZ|Hde-x7*jv6n%3LqgfRJ}< zKYS5cUN7mhR|-T`cq}zB1A3}B$p;UqxMB-JQ_#QzdM=me?*lAfJ<@y{-n3ieNbTsn zoCz7-N0WzA!0kW3vHkAvtU(E)2Gv4z7dm}%`{7LwiMg*mpP^8m1<&qPKKGSl3e8N_ zmuYOLQD;IpqA}cN4)lRSSD6_B-gzmrHx|qRsTyw(Y$V4S(qj{5DXW|u?eX`{}51Kry<+X)AJ9?Ta|EBfJDdANj?gYiHl@;5;(A^6d-VGQjKn z;i0$_x{V(MyLEu)f$1i^gV;qO@&@x%+fV7M5&a~84IfnLD<7=!OCj>c`V1aKcNN+v zbXC&F%8Yk~>ZGv@-#I1uG05AFZPE<$Y0M&_w_(hQGrNhH>0r7JC~a>WE2Qlr<+%`j+gJFeg|V%qM+@ z*W{JbF?mL1_OEs~SglH9{`q6e@#oL4{@>lkiZ&KT z)>3-bdM5vy=`!UG=Bl&=cRR`EGBF`x|1b)HhY@Bu2EoA(8%srL1jQi;3m*^ShDS&T zk>Oujs#LKQ4uMDn&a5m47g*ZbNL{65v9#P(6&_w%<%9w>#^Z49MMHy!YxVQP1_ zo#}8qIhp1#J(>A&-7tdV4f*GNzZ`Y--;M_;rjc!A1rIIjbS@DxKpZV1u{b_&6a_nA zfZtfJKI}jjwws=W1cX7|`x_Mvwwalmz)~kWn1F9~uENh8atf(*3RUiRE3%A0bSd6D z@u`VzgLmUm>ViE2)Lwpy!UMXC;NJ$IjjATjqc`NMSnEsV;-m2UTDo(>)o=Ov61xh!R!SrG7JH z>6Y5rel+CiM%(0|2C7VhJxya4nYCD8ok9)^(1JF%?l1^RO8Ps@z}5QQ`QW353yT0E z3b;=N3UTG6M+l{t3^|PQa+mZFfKhe#1$lMsOO-WQ^h)q&jv74G z4rgI8E3MjQ9X>ZPD?|3d;^y|e^2kCrRk?Tu4%HalWadSByect(v|#fpbKEKNJj&L} z!o2$KrX@LLCGhgpfC)7^?^|U07EcpHF*LK~nR?~%&Lr2q(O*c?=J}0y> z@l^D3aA_OWHbzyB5<@ehrq^QSlw`$eiZUp>Evv=z2?0Xd9}!6U1|*f?EMdJ6@|GdOmxKt4~?4wgw;9L_WuG*nl|=d-=UrrlP*|cUdPSv$7R7irJ!k zef6huT@RrT273}GlOx_@??fEEAc2rs2jDSHO>$-Dyjm=dVeuFz>~^q zXao%LdtX|95?s1)T1ljf(CgUiu9mRhLOG^V$Lo}d>k@rlk!zg z2BJieS)OvhjZB}u32V;1WRp(!-2j^y$NRAw}}1H z+bq5xzr{@EKtxKLz2<723&b+hL?Whbs=x!pg*yiFUG{(~JOX7k~*;?GoA zujV)Rx?hg>Pt~q97xSCty8?S)%gev-Oc|k$&_C&-#`bzWBDg{JrFf%8-b1!w6zNo~ zLqE*WPA8_md08=6-+wM+6{=P zTL~IVlUg)uTDv?Hl)X0XR=Yr~x*@VSNL)9B+lg4lz)I@UKn*(BB zZKc>mMR^++giIc)^iG4T{J~0KomeB%l-&VIWEzK4G)i?5THli`QUC4_X>0Rb zgRPlRZK5DFrvzZuu?LQK+&L<`=h!kIp48YnPm;^R+C- z4k&Aq)&TPX-dP@BxX}#|S025;&h}bc7x25#{$tQUpWx|;IDprMX>lcbEZ6sGd@@nl zcV;dW>8il`DuFp7ceim2w-niGxM}SD4A|GiSF(B?yV&{9eO++Z3VbfDAb-u&rf}yQ z_l;va*3B~9*E7iiTQg5&wdO$PU;L0oH$d3wY>qH%+!@5YRni5PW5jV=$_X$1x~c;& z#2mUej+(_m|6%_*z@vqG_FMW#H^7*THVP^e@r>>fauiv%obh7c#;&Q|HK7^SmovMZx@(4QulFqz{|`y$ z?D{Ek5YziVU1l{;0YJ2W!u4Pi2XssQJXHZr`h-!XKkhBrWeO6_I;R^o172B~Y)dfl z3&2-d|!)y4$vv|bwQwNQVM;9sJ^GA(@k zH3uKu${IwuDx%Dt()<@@E1ig_BlwGo0@E>sml0I9AWqASx`+{#3sv512{_A?@JAMa zrwmg^@)3;PK{`A*T+qAe!jZIh)ZM}lF$LhrSQfy@e*hnAFgd9 zrUjg0)L|!oKHVU4N7cx%q5C548mf8eia=sN#U!vt=e5>e8UQjwFmT>zeg+bePm?fW zOM0^2FeZnQcS|1UDW&Qw!Vxs$PD--&LP)Bj{#J!|6#xCzv(^bD|5=>XiU2yBSZKu< z&;vG1%vZmWBlQ?hJ=>Q`tOB}S9=Iz-SqN6+)YLbjWo0V>U&tD6fYr3- z%uvXz=ay;>2G!!S|99hfk0Ak93eE%(Y!!B1=_4o z=fxt5XI07_IzlEes%7G4iLF+|igl0F*K>;tLX8~tuly!&IE-t9`r9$SPs8&bGQecZT$*zA|$N#EKt z209*vd)vmf!iGv|De{~g=&E+K-Z$}GnR&)GDB0DR0Yt`NMEQ$9v^&-LR)ISN$0<{( zOT#(V0%^7RN`=CS`4U^ToMM>(adL$Kak!S%;HR?zBf0{tF>57YFqhIvrEnY{WK|aa zT63zNe?>kmyDS`!OG!w`60WBTR6onW6pa(Dg{R=twAo$$s*n*dq*$mb=O}6%L^mPSE5F zhpcGddj`0-L4c$}yRA^Oe>}?nhp`# z6kOtWSDJ<{gSx+0H@^hf(4ZR^Efn>(_qWfj!*?T&8r=qu8xkqXZh((FQ=Bcg#Z!YY zIdZYa$UmvKV=fMWszUkrIo&c79f#<0c|v0B{)V?TcJ&!|;Ufbi=+LMKs%_bhdy!UQ zst5UQ8887<4j@~RBlg(E1(*$>HhnX8jl~6;cWLx6t^+l0u}upT51BpTo%eJ0pgj?; z2Vr(sTv4z4efqXui7xvKY+R)DK7^5_LJtT%hJA|{6dQBI`x=4?kTV{3+vbVW9slERbI5XA^@$yAitbr6)JI1J z<~=LF+lrh!af2&pMF?(%FKz{At`6&Dg@wLOWNOY*P_z|Hx6b`&E@P1S%(=c!ky`2% zD7KDrx&kFRmrxgx?RVxbGdUY#kjxF#@T9h?r4!2ah(0;TqF?RJ_Pks(#Ql!7s?&o4 zaw@Z*_U^!{>I3lbv|?NOO`KiS6EW}zW83;o6+PQC5*Hj@00|+20meFf8fXxuNJ&d? z+Zh*t5XqTo3OSgADqtH=2Ty`wU|UXyR)XeW7c3Xa5G9{!q_}HY0Dgj6VOw2?e1ef- z>v!j%X}TF15sB40*oqPn6;iwC3O*6JV=(Iqkb*{YV1FP*$?_eHG>oUI=NYXuOjpUQ zUOUWq%efHHR19+=$-|tQ);c~pD%C!^+|>Da@y>y5~oxu*|f66aPJ;*OXC*rvI&bxC|gN4@J- znF6OpW1w~pJ)lMH;Lh0s{kqn8x2E#VwWJC4rhfd^nj)~HGRd_@Dd0sd<-qy^ymO}= z?xoaXkjb$P6|Xz6WEZ>kQ1C4-Ag%`SL_0?9-^d=C`9r$V zEzzgn`aWg%#;wxUK7`1tI{#|J^jApj$>NuYy2hScKjW?XN*@l`LSBPYTKi~*qn8`r zz4hVW{5=Y@UayCFh|HbCw;Bay_``BrI0@^V&6qZc%W!v!1aM$D76Eu}$h22b#}Sb{ z5^iX=*NsvSbzFNda6xUdfA}}@-;VVyjBe*n!Z*$~X16XSU&+TqKd)HgHwm2rc^wJS zGkziVQ`4^^qx~q~6)vPSLfd(jjyrjWB3%M!Rm9hwEMg`6ZWN9%v;K?%INl?1aBd@T zMg&jp06N4=+IdQ@Q11sAayRt%1UK~B!8{%LE*%#Fwts>#ajUvi|Ot}%hSzf*WOq3%{DK|{F_0AV?jSo zM`cmJjg$*9pASpGxu9GJg~(MkVMwt}jxCDz!Di45#7@uzV0-%uQV7Oz2UJkp25BV3 zX>fv8P#7?L!(>*hi3xqfwH}b-aqOmci0Jxk30OyPjf$+-{KZmZX`6A!)9(n!0S4S0 zKF%$Nc;pz?EMp{Gy~vTiyYeF>eX`n9nf2AiJ?7=iLFa*Po3EdCHD7~()O9>kPkyl| zwgltCE|x?Jr?lUBD=dN&N$|=h`uUeqTu1+o;&yK(Hd17i&Km^a6B~Gs4mFxemipf! z7}PQt7Bi@LQ6SI?D9k3VzFtOX0EZywCILLz)SVprL5U*~nl`f5Zmwuhj3BV5klAdD z;{q3Ty=@D&+7w{kT+IXRgitf4rOEEbIWV zF0*_JzpFxe*-K zcY>G9liEpR@iOVAcicx2Z)^kUpvlW^xlnCyK}*Es5{-FAMq%n3g0qQR$!ppD13Mtj zM!;?EkM?tQHT9M>viGtVgC%;f2y*|5e8Q^_RXq|FH`UqTx){)%>NEHnb|!r4HoO%KIzp!(MV|u`Daw)7W00K1w@SqDl>1Ec>{~j+Y{R6wY&n1d@BM|=jM}8=zaBqY* z^7;^HzhPk-{pY*j=lo{mmkrCy*l5M=Wk=ol~%8n9_|G`^OGn^)?Urc*Q2}fZP;mW3BIPQk8l1=bFA%w3(jchVOq+dyijBqGV zCzc#eR4*T8uI&657dd|9?JqKV56DfIB*!vLc((Z9PG(tRYsd# zDg9+Lz)_uk(y?=L7zcxawF+qP3;=w2DZ=@|${KTIf@xA^fQEQ0!YO<~vu{${bx31c zdW8Q+1f6|L#HY>BR`K{n+r1@o zb5A^bG_@P2A$?EeH;`EOvbY(?lkB*L($RBQ0`fN=CKsau!qu3Q%z5vnrQwY^-U;IM zuxeJ#x+IKASc;enpJglQ;-H3K%j_iHS~3alRw@@)&m=~aVt!nBQ=B@0=j~RC($f5` za*GAWo&@zCS~Ri8-*F9*h2KQjX8g~ zN#lp{!I^fUnePRVw(RteB(-@kS$Elop8C3X>NN$SAnpQ6;TJ}%AG~^e@}d7h**ga57A9N5#Z$Iz+qP}nwr$(C zZQHhOo>O+!sj9Dfx^Kkoj+y!HL_BZ2|M$-Q>YEI|0G2;_S(q+dM6GdD=(}%B_d%!0)xxYto#P9>{^N!gb#d1#F z3$}hkbx!gNbGX+@r-lr2{7DnBb~W)1sD??mv}B)k=54wmbX&ko z@|J`0GIrKzhK=0q1KXtbargxvU?k zUe(kI?@K=THq;(GS|j<$(V4Pv%l=k9FbY++o{dQFo49p?bYLWgh$f=)EcqhJkA6;w zLM2=1yW!?jbn|DNdt`BrwtDe~4rG)wS4;hPJriVVtNxD86d@)~O1SepgKzuTo-un#^ z%vsvS3Up;@N>r3AD%Le?l^BElI~Anprxp0e_gNzJvnmqwn<}F8{VFnZCIdoXydYWV zMD$l57?32NDsb1+P~<(!Kpk%@@KQ%1%pm8L%mXbc`XsE*!#_RrW6sSwVw>-?WG+5v z@x8rI%Pj-5hD4B!1SmO?0wcwS5UhB>wHuX~L;XYesR3yM*g@{UAguAS8iarG{>nio zX1Hy_Nn!!Y*+{3@UJYqb9$iE)X8MtelpgJbWPEa**}y?tjHGkAivsUE_D!)CQACdX z%8-W?G68>{Y)NjdEn|K{lw_kr1N0zKz*Xq|?)nD)cbamuC+al*M-*x8M-++T|Cgrx zU)_H0mfUgCV6eF>yJ~N<3eEzM=F(qEZ{vEAc}%aZGCjGjU8a6>BN7ps&LU70_~5 zSSmt<7S6T-@!3*^X3NLe_VI6+u@P-;7wziTOw_d>Ih}BbDUheMiFQkF3qwn_;6Gyf z4(vD`yf#oJ+tV5$?Bd?n6A7NNn?r~kxtFU^IK2pDbawEF$9GIl&Im6}d@KivohE)Oh3zk+|13um@xz zRbdy|iMV+Y{wM;Z0k;?GyHI*)$~l*bCItln2SFm|bP6v}a)h2hV}&$c96W2tVoAD{ zJq?q8CI!{D)ssVBK7AcrC+{+KCQG`LhBSyC0MP*f$X-u-BjLX{FqWQD$QXXg5Ivm>rF=AWC973UM55o_-x^w9wasp0UO?wxWuQG&W-xuoImX6_Itt@WN-Rb%RSz*>J)jA)MY|53us)#& zkQe5F)CRH?Qh+^*X6OOjrqRi`7Cy{n$esXHhJdijl`ZE*Oaz9gAisqWL0luTV{?KRV#5Ag?*t9_3}w9kfG@5P>+d>WUc{nyz2WBp6mSFCwNF+5ojc4|^D|{`^4y z87FWD#0^$eSmA@gdtI%ssX;~-Hc|SCk(+CKcoK72!~NlFA6CLL7g%tiBdLdo+8z#UBIA8GStXIPn25*7~9pWnd&2`S5jbL zeE{4ZL-zwa8*mhOZEFr21hLi{P=34Cx>c*Y+2iOn>`KgDBz!Comx@<#YEHO1}K z#1&*~@XJgtt!%Tx&B;w}ww`*p`xy)aE5cvjfJl&(P<1*L!&8VsCRs09F0v>>U9ehk zU05xGUwmQXjxz6Y|1CScb&`f^UwmPZaVfDg)SOSb9&L`Nni*|YsXZQUuBVb2ZCLYL+i84%-T45~qalLWEjs7dV3>QPQDi7@$dL-G5&TWVB5v$CMOa(f zTlZ^{A0MCoDrRu<(=>L77&QEc#fg2gsOsgR`-zOpSTxz=-GdcPOP?-2Q=F#_aEK{E zw}8Qtn|w=*(|XJCD!)mO9YPlBg1AC$3uy&1!_1VwMHWde)wVAG^qdcXQDYXZ8`wdHmbhH+cuJpWnzM*TNkrrj@P0I>?KX9of z8E%$}JAEW1q~&x>*zI4O7q(4}_4TBlxAWhHxt-;WsmtgVpaMZ92OR-4sUO$kG#vU{tg2|`R@a{U-3lpYlFHe(Y7bYYEn znhfC{PP(McWPp9dpkjc-DO>>cIwi|*<~cWj%8 z^lwJMB=gr{!7d%%yUP;I8qpY(EXRB>T#OMf-BX*%1lUnurEWePuqim!ql`IKgHecT zgRR8b9jC&dPDDS%d*gkH!NR_hb`vh;T(i6*!&|QL#Ij|%A&|R{fjMAHhgFN-;^X$> zmWu0egMYoD-P!Dni6GFR(b9IMua){s0cCxM-56r9X;&Yn_7C1D14WUdjDGbV#uwhM zIE#Y(&L73&gbUzMZ$>^j!)FfNIGd@Ji&W3=89ZlUtnaAv#3SJTjg4VLUFQP3rL|xX za=^7ao?m=JAf{z9!>FRV-V|C@ZUkXfuAjrZFT-VsVAAitCQcabmIIA(M6<9&?fobE zB%KWPC1+KQ-ELpqtcK1W*W<>(&cTQO83aWXLo`Dv`CQYvM(OxZTYXIv)MO%od3=k6 zWLz?hkZR6zAO6;WOs|04D3MRbir}2j=n^Y~{7bZ_tW@4~b8HJc@E8bRN>k}!tb$Y7 z3KPrM#B|N(fAg>TN5sv$dc=}J002lJ{h#a({ypOUms~6Hzrs(=#KO$n`JdreqWz(2!wGI#HapQ;!DjZe_Je3E8Td zoZk{&V*Z5+;dh87-LvV3QeIi#Q`)nh`G;>)lFT5uuv>aj7vYSC(dD)_Z|G=H`a2mVlD0H=6lP07&a&>&FoeR+UScIsrJ!CU`Ou#ms< z1g8527`O>@c9yTHp>|MXMS#hM{Hnb~O*fXWx&ROK_(MjRxN!P_hMcjJ9}os!il$@6 z?6pS}9)5abaL1p`&~qTSLfP|o)uCrVwlQuFk(xIRHq@$)P`zkmpDN;38tHEi)~EPA~wY&sd1aO8Bc-Bvu$QBZ=y0; zLp1NDv>%u=wg@{7OF_ugO%f{aO`ctcJCK-Fbz}Ud4E3Ycul8T58|_2uvfd(Pv)n3W7Y)7H zhyd5^tHAIv-8yxf?z?mw?8{gy)t{5zveE~$0=pSy1$fm@^?Nio+ zrWzZp_v3oYcz4H(xgQPI5f$Y#<{g?;wX*MS=<9=^!3fVA=vRTTM@mim)@4LG(_Kpq zcU`%1nYe^289_!iJqAY^0ozG&?hcs1++fz<;Zn&K#5xm`OrlJ?Oo}(@9IPr2#=6)@ zy17oa-f{JVW4Pn>B_9AA(oL6b_J_UxfX43vsMw-WhPIxbuyzA2CvjKq?QWj6^z76z zUSxVA1gZ&O3(&Y?m$zJsl{K!7<>ICN^0c3ApGeIfRcaTotF+Keod5}2g?=}DsJIa} zyA`OivwZ|a12##GBMtLR(!>ZOy1Y_bS7&jMwRgQ9IcoJI&y3g;8&>Wx-PYZW%Ltu{IIs3g_O1xZoF)~GTHj!D9u z1@(StR!xc}Q?Ke=(U0R%N=GLlnKiX>tc}+OoO47nVK>EOwY@C6z1ndi8xZsI4vlM2 z-=?~`$cA*6wWvExMc1IE$-fo-eU>V6BTdMlPJ(OqHA9BGMQTBAjJjz&i_advpT{x! z-6FCPw6(zA${bp8vDj^o*T~;|yzOc*0u+_J0CO`L++Sk(djRxgc0gZyu+WxugHr>1 ze@z*;;s*u3z?;ikg&sgv4v|++^^fP9&-tryyyWraxk>v)94Ve-zZ3zy+E(qr$`8vGo-lC%9vY^IBsfnO$LvYoae#jV>GpCYz*EBP!18JAy5O7DGP- z79I?$eiU;4OTXhqj3$dRxnr-&@YkB%aXvO|DSJqgNoeZ;Ib|)-I)NK&eCCm&X$9s| z^aishNsrF@sAS5Z&aLEW^3mksSJzt0u9&3!%}w1w)HLP&sR+y@2wR^h5H=yD$YRAzD$gd*ypCFy&n?M<@q0W*ph>|geYib2WjBP&RMJpt#A zm~W!Z?0=YMCS8H=(56=~yMpgzFLGT4=k7`nd(n)DwQR;bV*@G(5Q?U_oXP=;TFK8g zcF>n4Nrq=bytU2sE#nn2I@ZR4ZL!|D^PKT_i;CTZdGor#gn19G?!6Rz=+S|}4c|o+ z_hb!g37cpg71Mfw76fyHWnk)`cJ6c8xODY1s(s8D`+x96BV63AbS>YDC{BFi1a`aSWK zlYeI=KQ#OL5v7Jh1`{U{wmFHTsT~|rl}U;LV_JCC^+dI4s8m*#z?aS7?`y3yg4+~T z{FQrDsg|OVg#A9_u~PFZibDfHT_jaNTnf@GjLJ_ebs#LJOm2duRL7^unzq=d^hsp6 zfK0v^Yr;x{-a*!JM+sxkat4u)Xj;n+auLzgzo1{p&dT!|sR44|ny%o)@?3n*)>ySc0Wt^?j==GJ-W{zFe2&<18_vXyJHW?z~OVNLz|< zE&vhe-=sV(hRFQ} z`uF~v$l@+L{7-+b^XJF;KfwF{L|@8wc0U^g9{&XY|0P#0Kk$!+ozGTjL`*}=N)nrZ z2#+(}NYvp#A-=ExO^@Bte06b`NmBSHwOk+=Uw<4T*+S6nFpfLZ&CIRo`b*pz8vw9% zsCgk)K3YEAex7+zlv2Ry*MM+8)`l12`RL}n3rAieR+Yu5BwuU9Bj zCeOeiIK#(`iA>;{A+&HaT1;^CPtENiNTWvLLK=nU;&i`taseheS|4y$AdK z0H(9jGuH!MC&Agcy6rT_>*eQ__j%Pcr}Ovzip>`&AC!+$0EgPQ7{xl|N=!5$ZLA40 z@-APHiitYo>4*Rn(mK~W8!zwnD9P7bQh)>Z^o@wb_}0QV+o*i5{=&oeqZ%*oNI@3Y zgh2w=Xk={T`r$AB1RC-mf1G|KZeEOjG+_5gnq1g@DL`)y|GL{jwKs=V9ig&Q#6{tRtjWe@wX&=PIU(k|j^geCvK@ua;$M2*y}_ z$t(xb98*$}Uxc*#a@2HSUZgEen$$*E6YKf8^)gjD`HtFcUTYa1f(DF_u9-!h{2p-$ ziyw?iM4c@8F~kyz8N23(Fe5`je+H$^Cj@2~)mK*Nc#VspyMzuCW7l%&$uoO+N?CB1 zN?V45aivTVJtgBxTxKMthqrC;=FV5CL(UgO#Xzs2cQ*SMurUqY_b_t7nR}Bu`TG~= zjG?8-oEeDorL|6j84TB{!?#Csu=0}pU0pT*5NqV?Q#p!d%qgHjgoHt{sUW4+ZoE6{ zIPZ;G^03yVVMkZ5(*x6qtwNOTL>a9S^gH zNB0*9FY*jX_GL66dbSaK^jlV=iYngOVkY~2-!LEM|X4hQIVc$_v(jIV8?#8u8+G49P_`_AYqtsQP z4~l_c+Uk8#_C`%9-+^|hIpF9fIYrH+}^BxlYRBZ-sFZ=2twD>hMtC+S2w zHNY_E_9H8hm0ht!b3qrH1SJ5%rcloYmVsG zLvL*16f-1tp;<$+sQ3fVxjoCv(zxPYs}*@CC7^~%0Ydl!nkLn*lwD=fF(=CQnYKUC z?RZOMDX4oU>H$v+z#jK7q$-AmKXp%g6fgUYZit$|Y7XL!u5*X`5OQhSsN*0dFUp2) zAAlcfz*7MZ$@&Mea#GQ?;2l;AK7`(Eji6S8_-K^)gDIz(pBcmOZozd#q=6{8trDa`yMH$9y%@mN;e{y_fjd=x_rbK2ZnM ztW1I)N zLLtwT}_=i zcmjuc0GD%K!zJInn4cWp3sf>xTe!ruKU1d2eFaH(T9aQl^=N%%ji10dQGAL8UlHrC zObmBul1Ey@?|OFtUq29z3wMCe9`}0~=@m^!-)uI%hC>n%60SvOHYwti>5HuLtRY!6 z`cCPW97ojcBXqUe6gsY_Sl%&rFAdU;Rwo48*k3}3fg~Eia-vP@DnLTX0N^2tijn#9 z3RIH~V#@k`<-%Ryg;Lg{b?bqE3NZ!^C=d!k5(-fm4KQcJuG}=3x7F(bY2(){4M=Mv zw4IY~M`ng~(sp1ZwtTbg$#6*E2C~bXvNyEJ&c+wDxuI6M&80FvxQIhUvvZ4oIGrh5EWiUm?VXvCWWO(*U$4$ z3(W`ENyp7FYS0^RLHst`6`DJ)$^$=l`Iigw-?k(1He`f*b#e0V*Q&T*@B1R;esZw;u$j_9=!deESd2nTRACx?N`j(_L=UU9Ho9 zcy#k)f$?fvt0@RB4b_J6gf6N>{aQ66FB8O)Xdl}bbx1`dX=XLDO!1yXr_9mbmH-ma zqp;|NkW-Q{I^fTe7{_Z*pQN7%QD&4TVKc;ZZI&fg8xq{ao_(PczhG2#a20tTBO_Y8 zxn$s2`_+)R_U1!8LlcK+hzU&N&Ui>l`wn_xx|FW{Suh(D-?I+;#b`PAN(3h_#KVt) z0`~!3_We#I)H4r`R7-jw!<-aYUeqVC9}W9wabSv-k~}wzM5`)lS8v&*TG15wQLEA_ zc=kYj)UGF}C7X@CZkfY;ohR&`>7q|RN1i@!ICRCK-r@mOm0AjH6n2K$?>{I~KK1Dj z{-2kz_ag`Jzn22|_rB)8y%1#sL+gKa)pL}lY?t_ve^#lj4?7}fm7=(^iTN1APhsFAV;1T!wflv_;!Fm1TfNIGUl;h(OyVJQ|rn8-H zvhV)BzMXLSQ_^OQA9V*P;)2P`hDma2)7M)Hh8g9X?h^`FvEXjw%Lmcxzy+}*2rQ!d z%9#Sfbo+jI{zjc^>H`-oJG-7FCOyxx6s^Y;z%S~gJ5*=X^;(B6vJvA(u~p;rol6OD zHl!eI`)wUsKqoTqI3zAQ1sqTnyp2Q`sWFj}UNHuVziya@kB<>`e_lsrQEaZGrpBFsGii!z6g)5j~bJ(B{n6EbJuN%R7SVr~;vO zJ?6WkS`mxI*U-b)j|17jFmf+$MB~>|Hr{sHT)oyGw8c0YCG@UQhAA(|?yUOp4Wdyd z?5LBu{QK-syYa^a8YMi_omylj%%GCq!@*(!W%)+)|M3*2>)y`ki+SQJZ^dN6uo(y8& z=^Lu0C-$>9`vN^;qpSsgvAU`0bJ=9?mpfG#-eUcGz1O@lx776$m4^RtjQ^is6GC>@ z)+R>I|HaZ2hb04j(HY75>13Tb;cP>EF}t8~qv z<3{t2_Zf5xFT1;?ltsP$?q(8OSFV zLii)1DZ&a#8^__8m>qAdo|v?#FDzN699_viGp|^gF;(cfLB1h4f{t_C28Z4(*g?H* zu~n`t9AaR+>R@LaqZQgg+~_)kY?4p|KE#sN=rPt1qL9mmqteP~wXwO!4mF^-vq)V?Yb(s|==`vBcNVF7d z1J!id4n5R0(|sZ&Q*N41e`{J{mh<$e)shFio zsIOHMit1`pct_xQg8S$e=)GsnS;4|xlT?X$q`PTa08=A9z)M28gZW-VITv8bh4GMl z0>N_?=gru~$$A2?4B4Sy6QSq4B}kzQaCq1eiw$^=_k`W7DmVw78lG=&yow|{VN0Yi zaL+iu17`U@e(7%WD>-D({qBZkc?RdmQPQcLJ;Kd&kwp;1CFE4&7Iu-frNM1(p5s%=CT2TC*1qOaMKir^_N(kI_37v^uI2-9k?BzdH6x1+p$&i0O2l$^$`v2i`P;xQ+ z=XL$B3SCLYZs{M1lik4x8iEE7ra5_Wu^2XH2>^_D85p5Fh0qiHl7MYYgGCF&t{!I@ z>pO_AKSPNBG61hXPH@^?^*(;RV9{k;M@(f;^FdV&hjs@#YI{~gFF z;xDs81U4l5k#O8HzX^7-AdU#*G;>UK4xgi%NseC#H+$+B2FnX+&~9{G7up!(g|I;8 zq;kH`S2dfa7-P5`*4mut{Q994N|m+PzSO6n%jXx#hHlRIDImq4bAp=MZIuRZzBl&x zi7@LaLMQ6~2Qh zcNnU358DWaIg%JUK}GrfH*dgykepYLlP>CD007Z&|1()@67!#688^3|Ju=%wNuR9$-&X_GW)rE^XYqi)bIB>;eSGJuqbl!&GX?sJO}BKRwxTgLoXd?=2kyB2@@w<%+4h8qv4=b{639h=dyqpIvc zW^SOzz+@h)B8JqE95P50q%9_8aj5iKQ@g~}8_?CuQ`fHf;5g=KddfJm^i%^P$JFg~ zgK*q$Q|cj#>kXA%pY*U|$}nXXz*eV_7ojA_1ogh-RqWb5H0uhcEdN4CW%-@_vxIlR zdtf%#wF6Ts(t_U3y=d_`lOQ1d#UC4HTsfKsU&L5>@n<~p0TP!a&ZXdpG=dv!^`nw`F z?vMc|Y@z1Jh`sQrTzo8;JJuGIi|Ra4b~6*3`WQ^ib2~6;Hf3sX3GAFZ6OSqT{L5#d zB$1SIBsvqLsNVyzCFgu3@I+^qs%%erzGc&*;K=N?!}=>ER?kp$2#eDioN}6JxpJNWc;2X+zne?pTI;ofPu#Esws+so+2x zJo~Cjxy#0iJ~NfiA*u5)i>`>{{YKvNa!=$56PxfIFDBtSu2rY0{1H6QyWGYH6Rq70 zw5kk66;G|tEa~~WlWlZOR+BA5IDtOH+3V`T=%6X;-Xlw+iQ?$mO@ytf20}_Y%(MJV zSDe_WdJPGEt(6U{nn`)xD3J}Zg)=x^j6zY?-+e4xH)`u(a~)49DFe&wJB3kt%n-iL zAqqrCF^VzM6nRd{Z`n(eXJS%wW0HUG5N{|PW}PO3!}QPyu2fw+io1VEEmGTaS42owdyexn2S(o!i}hi z)&q!ZFr&;4j$T22G66b%;uCv-KrKQ-A%U=7e@eeViwCCW6!PX_Q@FIzl}$B9?HXGB zvyK9`^3mY3#9)R%{3%Uy1l$~9c`li??KZyL!LKJwgSq@(4@j3nh__65;2NxJbK8Qn z&0j9KzsZ-W^?97+A#T7|6L?4C7Ki?NUy1T8?My4*=w~8HU-6PY;UjrQ@8|8uDnUO& z12dyo0f00t0@}KEI zJI@|2AQ5MkEwq^7CT5mqnU|Dm;J)oK#?|B;Z>`&2LMywzoo0;qp}Z_t?jRQeGetR> zWQ$bMtd*kWK`R$t5B*v+%h;GJ1Uzd%BE=dqtUj6^22EudT7j^{LEgW=Ho3#(?w&2& z-QUD&4|b!!Fr%5BPPb;UNCx=r5XcMn7Sg9QX`IMA+vGbLd3h_NYniOHO_mWSsnk6N z)$M;Z(tHIkqp-cf@@0zQhvViiQ`La6wtv}pDRQ#}M!Hy%)HwmFan9-rLzn-w^YS#1 zm%8&Q|ArWxo^kzBfHz>C!u$OfAn)w@ZbB|fu}^kElaSjJtLvhvrmu*XHSXCgmD9v3 zta+0Au<%d$4ZJGlrytiPm(LaVbGJ%pV-OgSA3@I)#T{T;Su63AlK_^zPWd_?ch-F@~fn z9OU`&g9NXB3ZwsP|3t{Z$lSu#OwG~2-rmGf)WX{NzjU-xlrQ9v6yU#mbhRcO)nRK2 z!yO-u0XwD$%!nO{4b8=0_gz2C(X6(t+d}8Qn0!ZsCF6yoi8EitFwS}sCl!EAmoj{q z`ZC!1GA_Q}KToLqeW~B}#oA%r;1LKb@lS)G4m|HIAb$mW$zz8ib3Y7()uRmw#(^_j zj-<~YL6Ra%GrGIZRL{_a)~s?U~rGM5U$Y>712nEXAjtb(+MqI=6>m} zNw#LJto~Hn+)Adi&1UGGL2RcGHVo~k_Y@i9(|1pcUBqp=zbB|Q{#JPi&Dmb0Qp}!- zrsXh1L2vdc(Z$b9mmsC;lG|5l)>Bz*BC{)0ku#+oer!g@*R|&&hUnz8*llKQqfQf_ zC6`yHt|b;g^R#sa474@d-3Hp6I*EWfKX1OtY!xnIXa=2u8b4`kR;h~&oAw%GWV0)f z0kwobN0FnrF_aX7)=+NF&(1%$ZG)`s_0C6OWTpgKpfIJInD>C3l0s~i zxdq)b07bJSe(f+68&;bIu1k*K-TmutDg<|+RO~Y`W;gH1@1UATCSOq9qd+Np=LNl8 zxjjHI9%f6=5ByS@O$bpe`#58N*(pT8*FiD;gK+}vJmY1b#F$`E!pDX1LRbdwd?hc? z7+7wQB& z+9xS%qp(NVU2&ZP7Lb%<0A#@r2(7hH1w;mL%7IMMLw2L;iC+V5V1`ZSkiUS@JVP%J_e4GW@7sTDsU8Ia}D-{;U1P z@UMz0QN|950X|gkhE}6d=e&}C$W2Ln>rqH!vZXvtTs)!B5&W@##-Vz6VU_kHV7TvK zGz1Ea|InZPp$PtHhB8oCe3)wMsNu|G?CA6D_m&#~&L7b70|6Yh+xan705loAEneI= z_i6blGD<5R1NO@w5c42KOUftbE*Z~ zfd=Wsl7>K=i}c0EptkmXa=O>mS90Hp!{8IUFGIFuLLRl(vlnzMN2>?T)kaR4GU!|B zzQpt1@EY_$KXOI}f;m9_+ZE7u{ z8brvt;N5mHwCz@J1{Y&tvzPgzo=VZ#ZH3)Bwgs$ymXr?+K}}tP3uG8CKKm=AtNkm+ zESV-pyKGSm81kycc6N?nFct|(d3rK}tx7c$r_sg20bIM@KF&<(!WigbJ29)7+1YS7 zGv8Lg!Bcf9#D38qtoD9ORTE`~>5q%qw{xwXj$ z%)hsxZ0HkoK7MZ6B4_{r`v0d0`Dc8@sP3pCyP*62LN(P8C4mbUvzrucWU$R0lUfuNq{a>zRoD5yMEjxAPF(5N_6`gG&SRbEq1&T7nxJ8)_pUHqW zXw_bRs0dzzuH>K*a7j$FRgVJ-6Jg;a8#i-0?M!W8I*U~id~xiFtenGSL&jz~iw>EL z1PR3CU64;`q2U@SCIm_8H4~k&Rfdl(tNv^(J$E@lL6n*+gNZ?Oir$%%9T}6(WUARV zvt5!q%Pgk@Vvzvz&86{JCb zO9|r4VYKEp2@8Z+ML~_F{~|8F4mDNfO3lI2kWPWzX?5{zembT!uNob()?{OXQnO(r|?e% zKonqZphm%7pu{Ui{6PXo=SoG#v^h$@KC*RUn+8B*yGI`(SUzCv|>EE3!CfDfrO7>Ii+))zjr>AA` z{a9od7b98wnfIhT2ezt&H{cH5wI@esHof;uf``e~?#H6c7RQxFl;c0ghcT|b(UGML45jAb6J z&+KR;VXFM7I5==%4EADU>CHn>>k{u!RN(t^DHq&-a`0} zEfN%HTKpI6iq(jsec^=EjF;M?V+eKD&75+qCplg`UtPj@RB3ehjCumG*5MB-bpel> zHi($|Zqvw$5{-sFdpCsFkfN@4rC2}C3wTdW_>wI8rpiZ_RK%NfvHRiQKqkKMVG&A_ zN%%l{r>e3~Ox&LK3FkxtpKL$_J*?Bwv-MufVi;qVf^7C^4p@eF1WLaMmJzyg&UOBZ zqIkHV-8VNC{XXiwtYe`B^DWbMSo!#Nyj~~#WJx6Kx7}{?Jkjw z@SJG1O}#vQj`+0eFRgJS**&5)*&f*qR$SoX%DIDS6}ruH%WBf_8CbpTmY(lql{w`YiNs3^ zGH~%Hk;K9LpY}`t#j*(-IGg-;upXmoqlBb}?8{0FGKh+TT%su;BIC}WSyJOq4!(|` z52T`?)kTb@F4LH9jcj9MvvSzw<9061_tBEG;BQj;x&GsBk@m>9%xjhuDvk(9>UP8P zlKqgq=5?d@{q@Y{uj76=z>58{4-z`15Q~rzGx-M?Lw52$8M55FskQ5$(vgpCl_8u>LQJe7cyzZ6WV zT{*NJo~|Q7ejgIclejqFazD^j<3X%>J=kwJ600G?)s~c+#+HJ7!N{26irz4Er9wZ4 zEpNk3G2o#dV-ckqliu)Mo{_V5OswTDoOW_1AC;qG1V+OwT-ItaA8-q7`ZZWDYcVjX zlP?kal3^!rzQx^saj!_jGY_HRk=;gN5K~GER!(ME(P8ciUHesVd#xi7U+DZfEII%684-tt2>Qf_=sXr>r zakx^VPwl1|%gs+M={?8A!WcL)&*=lhj(-PM8#`-Ll9(w)VAC04YcSsIK1$7b0k>o1Q-&D0s z|LSkB4s_piFL}beFA*}0cR_4o6lj>MQ3(ntc;L|~>Nyh=4FeVu3tn`2SBa#YVa=Rz z4`S=Hf>QRU)M+7a`MK5NYxpnkA@fd)3Uq00klrZ^DPe{t`;%?8)%X$P=& z02sbEn}B^okHzPN2g^oMp)(*k!dodRJ(H|ypW9OTf|Nse@mM~upLqy5Tx@HV-K#*h z-rnzxk_kchabw{7aWU@YJhx%PTKJKhA75gt!TPc>&k9&%haGW9zB=%RRW)32Ncx@R z0?S}q?H`^8CB0LYS4H0c?pU(E+2EWXEQ9=$k*EGghwy3^e}^D0NzV?Uc=XhxJ!I9; zPbX?T>)^DV4D8K@@J0mZ*ruf#1|?{HET_i-W46W;3nfl6I}+P>rGL z@=SrW8MBOMf~ksUtQt1c#oyEgabG`Hqqq7Whc|P@GV7#Bqvn`ujLV(PXcc`X5m}Wk z-#fb0<5yPJqJhO1i4}jz%%a!;k$TXJP5*ndI_t}ddmL|*#r}XV=0Ux|rlWp#2fYxD ziv^oj>L7O6KExn2T7X3vTogS?whQ%*j6^P*8M%8Z{h8_?nX&ub!?H5N{-#qv*O$24I> zBC)J#f0jEH%fB$XtZaJG)PM8WJbp5pW~`En8+t0$?a-IY30nbSRi*? zC-UXeGR?P=4#zTbD{U#yPPLmtsF(DIPp&-NdLx|0718Dk`x)}@*;o0|PR#y%pGcSu z&)83}e@_hS{D?ME{~)@5n7#jNg&}NWYT#n+tYl$hVQt`O;q39R3L|mmXY2xg%nWHv zR!}^jACh@KmEU0z&I!(*05TGJQK-_<#L6yFq?Ju$3&kVgG2Tw{w- zL5ReAJtyPy#*TNj&-eQk0zgbZr2t@VvL0-1#Sn9zF<*w?Z^8$+mo%PDs|=)>ZO{P3 z68O5w;5diDLvT(z+8R1oW=Dy#<9;b0Ro3JG)gAw+>h6cVp7&VaT=7NB88L%zM-T5{Adk^PHtkS^!VFy6f z36n^j3p10$bsh}m|Kg~uzk zzaPrXJyL|iU&f0&DqcDP>oxwYH}drAfZo9~TF}-$U!)BPg6H98 zARcgrWoeVpi~P|F81&{a4efvo3~>O@iZeiNss4B2Wp#z#EjQHxPgMZc`i_tbexl@N zaWWNaY6RxwH2Avp%aH537@Exc%DeUxic2mWO<7SJ!n&uAKU=3ff@xL4JVX}kfg$8W zNy%$5w!Pl|1(?$mpb)D+z|8o`TK-#L3cKkWI?0(i=sOz!XE`uhN&1InMCOk5nPor$ z0YKp8gM5MlMea5e1}J4Q2M*S2unF1a$2B(%F)w$v{Xn>K>Yo}2(%b86anRqRwYwbq z*6X|mP|gc#I_>bh=6s%FKbAf|ua3?66-9t0fL@EoG$1I3N1p!&-ui@JVpt$CX8a_6 zqlF3|sm_JiuN*+j@TNGJm_iYH(QL|P*}0#70&qD}IYCp4*0G-%>Wz?Q2`WkHix*tK z@-Dq=U~?`&8x=)g^H7P$^QA;s9#Oa-B?+zcL&_?xm(#M^A>=8u=H=7EJh)wQNa7C# zHv2kL#CTBBtIn(@c^HG>-3`{nB6NM7oLw}7E|YaiJ2~R37K9!;n*w2A@!kw}-eiO^ zILAALpd`;YJO!%|12pp?NZ@qcW_&uGAkvWqiR;3|uPVhWGJcE{Tf|;7DnYhk{V-e} zujPPlcaLQy&ID+*%QDNmsJLvGZ^PA-klTqFJLpSH8$86Gf)M06OdA6VKTS*4kJ&e1=nSjQ189aVfN>>?~V0p`}WQW~pK<>m}%r8jDq0 zGTD^E;)CfM`D~t&I|@=>!pR-821Q~U?b*yd9i|FrZy)2pjHE=54{DwKOBGYc(W&q{ zNUVwuVL=t9aQ2=@2*C^mK55`y^v}ZnxE$2C+16Q)%shgR2apCg0`|G{%SZ2Dp4D=s zCzuK+^Jap$9AxQhgLz1#i&QY$C!mV*a5Cf#Av$L_B_(jCJIb@_nSpS}MV?goaDVGU$62R>xN>8D!w5;3NeUSoa!Cx)o-M=}47<*@nl z6T3}*MuRE-JBCQu&Ccp)o5epk#D7L^<#7cpRe0|FV?1PjqaGq~us~c7e{k`On;I(} zh7~}A{hOvqG0grJBXQzrE%BvSMB6$^c4dC0K@?RL8Rag5cB{Hkh76)&(Lg)_rP`gR zPVe^jY{xd{kEdx_TYxCOXZ)a6mKJ(iNr~ik9jceV2D6czIvWX>nN-i-9a5gP2Z6Yb z6v=~CVfRq0+;X>au;mmu;hzebmK00MRwXOQKYJLhXfDqP&FpT|e6_Fkc6pS}VM>SSUycxfDfu z=@K9_cSq6zm#yfB@377D|I(`J8a><*QYS1IdeN63E;rQSo35WSJi{z?CDSB7BWj3` zU!8}0F_)t~2njEbt$q%Cs1g&*0TbY!Lln#8Cz>vDZ)%k@62dwtQo@8%X2!?;5_JpN zTY_Rg(0hz|LFo&2#@umk_aU+=T4oGRK2|^^V+{jH8{$OJ-P)s(iH(Pg~rg7*TQVdYZbryxo{m={6K0d3>^agi)Tn2*YPgIFF zbh#tR&uYMq|BcPzM~KPmci$ofPgC`&MVlLK1~@=K40dMjBEAZtGPnkz0rqTlPaehF zck7Kbl$(q$T0tb9t=Ax!N9{EUU9GXo{TK%NI~GRt&#DDL-)mc`R10w!y_W$gDHfi= z_x!M_yWvE54uH@?TqygxOQmNr2Oq6}i_g!R18S_}X}jf}SCB13D*(wuc{lOAXtNml zCl5%m9oQVcc(GKEn^|F0RQ9{tf*Q0$e)HkZt$miA-ui4%7~^7Q&T4U#gL_NFDGsBq@2HKD}^#E?Sa?wDxSAYofam31LC%5F%tD`R03YS&X=|8oD| z!XNJ#{)i*oKRE#Ne;3$9%#E##{-HJ+6Dc}5{78=CHb%y7|I|n1CI8W?{naF^neY8t zB8$wuKmns{8<8S_5C0%XE+)HfWUjbeV3n}9eJ2MD_w~y+ku3xAafctn1&5Pyn{~p= ztE&^pOpiB~iN!%oU$NW*bzS{}&d3O!OT;ilVjAa`oR#<)%!E`ao43V43~US~0)Mu? zaj-JVI#J)t_~ruO(|-CLM$kVk%AzVG%M%ssObkpBp?iu;`<& zag~&s&AHtkRKwjYG0rgV(gJL81P@Y|`4s+bah9`8`nVzG5X*&fU$I*xb{C2>v4}3{ z^U7Q|(hI&4e{OlL>P~%j$!JB{nCR&|ss(W2BWqBN4^qd3v@~->MrBK%vTgdlF^uPh z=iQBu`j<}U+@*#0&lR)2$k*{~!O+g!2PyBpP9#y0Sn%s(<1bHMY-~)?*dYRBk43`r5Ffz(Pv`)#zV^07*TEvmxO$;VQlQsY^yi%8V{Qln?9+P zv|deDCfG5zs7Z$8T7i;@I6<}XHPM>yTLOr4^6+Zw=bH-@ct}t4YY-c(l$T3dJs@Es z+wMdW;}~`F>PjxwXy&cf3Hj_}%BYHc3((e(bBqH}8MME$ zee6*(Z-CCPpy1dM@0~cioNkb8|6;ELeu@|TVgl>GJxZt%y#Lbu7uT)H8S?YF=l+1_ zzwIsf5AcXv+gT9_+c-J=vm8x||KC}E$o9GnZ%ID#K|X~ANTSayf?U2p*qneuKwVFb z9V;{%hf!+p=|T|ocR;j#Ar=csKsZ!BCDM&llj| zs8(c!R55+T=6CpEY~!NDQDQkcQ(MU#j-bU{GMsv2Jc1tVZuFI<_ zD6`&Oe`I)O|CU87;4Po$!N*E&bC3>n-5PC9HDvVBtZBt@TL$I9b(69$=JllMjCajB zUws>Pg~NNQ`Bf%w&C7Lu>XLPsKI(RVU$Vc;TB>g-!&Xd0{X^-;*O*8C=8J{9Ow^|m z`S{Y?WmuGD=@A?ym$+;RyPkK_k3Af^p?gu|s?zhhBX(88!6`;}0c{Vf$g+6qtXPjK z`mn+{|&8Rm)8t`yS?anj*RU&CH;kUX+6(7t9SoR}D~C#BTPf_T1# zHSeW0>oqRWjU)G$t`JEdncb2%6l(+D!z*b|Xv7B3sOsPg(LW>VN zFZ78EZ4)jAoN~TRBEVf&hiX*f7_CDhY(QSJwFAO}l12yRi+%me>^Klep?JrSfGdsr z>lgL^*-iEjSpQpG>{NwvQ#{1*`DPhqhX9bs6@WKyX%1G98$g6VR5<}IL+*{hGxt~n zT_YkX4d9@KJ|1}2ws!+ErZ7-8>je~+=gf+*qBz?KW@kMv%Cqsz=ALGG_8~P-Po7yS zv&_l7&-wQH{?^`l{_eW&c-uaH0zi+g{>=u2#iVu3hsm-+kIib<%SW-`CH4O7|3`8`=>Rop*ogM&~WwRewA4yCd zm6|CCp?*u0%t3!Ygly&gXrUuy*0V$lX3`9)#YI1qvHa#LpUXLOUQ`BwvihZ^xabW zz@N0QEMU%T1-B$!BQt|ZRiSI_M!40sx`v#W^2qd?i1*l?aM51ZkO4BktuS4`9Ql6m z)vyBocsZm*0!48uOt|xJyFa>l-+*-TGZWv#l+EumI9-9w8f)sg2csl!8ZZ_4b& z-`KKH*ER{GqM^fM;4_Q%cr=V3AH7+O-I|mMNhGNG*NUCg`XSSxye~bxyj&KV3c@yF6JNP3Ol=PA?*Jo~N_6DdXln1`~0(hKXTK$wV z9TB=@51d7A;XRfz9Wkt#Y+CXDRn^T=$Wc8S|%Y+UG}&;t_P|I8`xiZ!i5>$ zV73-+G)aG)EiBpg25@h3k$eY4Wj@3wz8E7i)k2_{yefVhMW=%F8eUY5g-ZMYEv&*(cS_<28l-pM#L8rYuzt4t6Gh? z%i=wlIEpiZJ)|PM6{!mI9^|lDX{2iHS(R5m0QMwwK@Sd!C|Jq+9Hoj94z9KP=d7Qm zsJaOq6$;Y~%e>HRnn+yQ*zaF3mM@q&RMBh^H?&9P3ZVLl_4?+2Y3|ySSMag~)hg*X zG4(DbWF}c0BGy;Ox6M~y61OwwO8{0RJRk(d4y$W#1bfzQjU&=WEn2;C#uj1F%xC+V z!_jl+EJOA#pOr(19MqRg0@vpo)Y4H$@fI}HmUwGuVufQuw{B8;XV9V>Tqmal43n>& z8Qe#~jH#<+<_SiCFkDn$QqeZhI&)PkY$Bx<2I7;~NS9UH-D5pKlVy(ThAeRT{CVDs zE&Rji$eteK6yq1wAyU#oQjo+<;7v*;>qrB0@0K*}q6baIhBg?7XgszL#s+maOn|n1 zEOdF%ez1pp&jX=2;W?4rTXU-+!aG%bz+kiwC_z&^06E`v>Xj2sMI{tY&Q7g= z%9I)HD0N<3`;e6GBi(QCmNd0VVgQjm2XuSVk%)81+IRcuevl7?lE`G{O-x))CcjA- zJBFV2gj4G?%+1kf%6Uy}jjn$Br!r79UDDFO9D?I?W;{QQR(s8cZN7FvxO-r9iv}xe z!QJ_EQYnjHAv~fLdS@fZv48T{(p=^*;s7V2pg%3(ui*Xt>6~cJMG5zRZ?$7i3rIjo zGO5Jb)Z^{yh+s3KlIOLdo^!0*ESWd8|IBG4^?Zl6r_B8bZuacjZ}^*?0arTWuGK{c zZ8)u1{Y**i66wDsWPzK->+7&0$X3>AFGQhgk3o;a1Pg>}#vFQH-sQ2xGX3hlUN~5bS1@T7(Q##rK$sCxFvgnBs%2==n6KTPqb6g>; zH0?2Am|h2X)=jakx)`cqYAtQ*fjQGMXrp4p>MbowHu-#pQ{lGWo^vy>OYq}}+7AAT z<#z8gwnZH$J~B*hqk4RO|Dz}iCOZhUB6Hl7ztu4es1w8A@f8%K8@jdP=hK2iv(dA& z6(-*jUT)KS+L9#t1`B#7Q!%7%w6Pg zMGw&K$JGWOY&AL#p@!}M^v9pW+3KK{x#U~PqWYk=QU1H0tIg;B1Y6>lCmFy+E?Z4! znx0BpPt{RH@Q;O_A)^Nu+oOx!T9+uBBNS(_<6oaC)<8ws5XNdsHr(QUSvszD@Z$vN zW0$^HWI^p|7>cTwdwO8s)b$SxWlrxxdL6D8sATP4Fl@a#1SB1^mp6wYt)03Vh<~VR0KRZE+i#sdebWU=;$Lb0+ zwaJKX7$P;n-J)r>(Hi=t30AL5q*>S0ZVN9JO#NcZNYep4|5cd_!?w1ibMoMcMsdXx zdig!<=KaCJ%MbUy|3Stl(Z&FFyDxTb_y*sVCm`$h^`NNP?(u2)3md?Z1RyF9qd|bW z1f6ICEIl3R{u*0qpm?6e7KCr6xIZH_Aiym2YMD~c8KeOMKG_rSz@hqv-nJn6pAHJ%E(%Al zIfb%6&Z~tN3JvI3R^nDQ#Ksosgy~{on#MXe%X>j~M6xZvC)M9X*rCg%Np^6p9KJ_UpSL%5EvZNn`IDw-J)oAzv12JYT}pIT z$}`R6J8xsgdOXW;V@keW)L?pwDWF8zzfv&&CSsOYS=5}B%N&@Ieb*~jIh1=b3%D6LEI4+_mxTn-%ccoe(9jz|PJq!{bBxgN+3>#%ft9V;5$mUz;=tZkDYFT)7@I)yQ z)+AF_j0tupJMw1Ol_jP89&{g-&rCUsLhk5@G9^hi(m72vs<AgQF};H;0Ge1-iXMR;>;Y4o|HO@n$OSJpGQ6FhAvi% zr&Y7HuCA<6UQZ;lMoqBj6vvgMIz3pPUreHk#>cs*^DK4lfHUmk*A->1Smmm%Y zP#%es(XZh;DK0Wd<-lgQ;JCx+0I>i~E=f}>of0YJ0BbCR#%~1IZ$!6TXl+r*5*?%J z^=L$1F2A?0*9duEfMg=4eJXeOz4Pg8OoTY?A@DA^gq!8kYPO2vr87F_fU;Xx+uy!P z6q>YTWB9GQ*gsGY%Nqf-fhftvwgE|(e}=%MdE-?PBZVTTF4|Ne!?r2I&?YHMl-B3v zj(0Z?E)j8|A8iVkvROe~yD+<;eD?Pd!zCA4(XVmKcr|vO7!28fah&UAU4JW~EL=lc z&vHg|F|Qj^FAQ=n0KT^qJeVSYQ5kuBftXCy5?;=-Rz+Kaj%pt%Hgr&SZ6{>1T z(E>Yrw*M+YpU`}D!cSQ}g58Y!LcLhskV zv>*{tRVGXPP(xHd6+Y?zSOy8%8va`W6dX4#+ei0%PBa#P0%x;JAZO=#NtH+zV8Nvj0d!fCLEC0+{xgmLf#}U1VUaql&Z$RRF;21 zfX?Mslum-G>izU{0(?tN-&(Y}WrLs-!zsPz(}%8mdm}=*AfX?9p*{{z(>V_Kv%02> zt_v(eBq>BA49uwJ$^?&5CuIz;Pf#w{nOm6Jn1D>34u6*yz@oCakpYxa+ZpB|4d*x3cQLSx?sb}c^SEkP1cG6$v zXVfws_Wy)m{W%UrTL&j&BQbNQA8#|~f0`~Nsc73_Euwr~RTV5wzljpmRerRP028Q_ z^udz#$^eG^2aj3W=W?=?D0&c*&4t}SLi zFH?Lvlg5)&%;OZ&Jk`MUz>IOy>Z%&=OIpSB{KLm&e>+aMJ}1!fXaLth9S6QZ#(>O( zi3T!ZAIsr}zM*iT4*crE34+^}qZ>gJ^umP2^FxBffy;xGC3`V}XLeKYM-@UR%;ZAq zBXa^#=N$?NGtlx!5CV#MwU77B*;9;>MS_$9K@Fs}JZYT;?9b}wR`H=Kl(tB-=T4$D zaZ;2;aiY$_kbP8lZ;zaJrUPbBp($Qf$#%=@=O%3=r#3z>zECQTB*on3>1VnCf)0NP zDR3bLMd!*|Dw&d-H%xt--5UtYzFrn_2nv5t!=PsUdkE9z@(0Ir0}o1L8I4wm*T}d9 z)BB-DpI2icl0*HN9DSb1-z?-F0=DRO|gy4(?IIDr!RvX_)}N49r}kb?+ubJ88wqN3Y(phnMwN{UjZGP=tg+ema6fu(R$JoRPmTuNzw3h{fphtxjL?)FgVStkTT8PYC@~FI>UB+ z7V@#}`&if+;`kWx@Tw9Z$ih*7{2Y35`Y!UakgxE=EOGI8!pCj8piepa#$ifMV&G|K zKtObZBl?{(cnKbs*f)$josByy%^aNzPR8kVs`fkU#B%taAnD5lcOw3{(K@C1ihw#a zYbGr38ebEm@rGQ7dFg37*rP^|T3g@Ct#Q*&=O9?DqTYX?es$F|WW3+iCr9L6-pq4} zL57OW(y{CUH|^Qi-9sp_Nj-6sN42CNTNe&bcoPgQHgty)kV5H7d^NUxl_qv~CQ64F zY|6634|(9?b_ zh?W-py#8ecKSj&8&x45+bY6J94jV=LJN-^<+Z%&ov?Zj>UFjNTfNOlI_l?i{W)JH| z+#DB7H|x)o`&<|MsZ?6E2~OjwT(E4#q8VA44x-iX^rSc7 z?6EKM5p&1C@ma)ouxz!3o#+&r{ob}6Pbe@!(cmMkvWJsPd~uYF)?c#0Iag-lTZ+w7 zgE&RDC4c@ucKY2)y?;x}1PZyHzP^nakbMsI@F(I|Z|lwJn|-yze$2BlB=GBW%5W!z z%H;s|v7|j38IG%zE#6fj&_TgY&5ZrXA?0k!Ud+JIo{x&YBkMQH<0RkhL@!~tCe6n5 zEdRZtQZjqc$&4r&fV|oQ7ip z_7Ly{DgO)_#{g;Hp9A$Dql%RZU{sSi1JFXtS*53%vBWvL%r!SM~&>2DfIG<)In z!GH$Haqa2aCzxo;(rs^EJpItaR^G1ty~ZP zfK_qTZ6}H9wA_t=sp7crjS;qMyBl>%;MRiN-OM2S1%AjoaI>tK%CI= zBX->BIL#;F6AESfMB~8`I3RKloC_<(?1S@vh_F%AZNL9Z-o(Yg@1*{dGnxFTB252d z-t=E@X`+9h6I0T*MB+#0u3t4uXlaseXw=AG61g{T3V2aCm25x^MuZ75Q2MP%q0V)CQ2(~eK#olLaJKhury=D`QKg;$IPzC-w1OI8{Hd8MF zKYhCrB^}yh(H1J?wQWD#wEr_Xj8D~j@pick*|dEej?mb_Qyyf-q2bP^57ejcP75~=C8WEgmj$pB+M>A_1aHT(Ib2`m^mGy_ zX+(yNf~pwu@m$&2p%dic>bU;j*D`EO6(Rf9T9BNgyg_m7|Ek%m;NPX|{6N*>{{^ZH z|CH?iD^x43KW(fn>cuBSZu!F=h}+b_spApjc%)h8P5NC}tyqG;Kyx0&KS12&N|2F1 z0KU+>ae%$yudM_qgv~dMO|P=ppEn$@q2F(p+u?pmv?PRtBq1Y?6xBp%VlK_e{h8M@ z8?hv#lft%RZ9fNZZbWGi>iK)223`7=i`FE3vH~3r7IPeQ4t={3W6XrUP_~T-J8@`3~w0d&kjwA z^n=#iuM5OX^*KD+MZzSQt0!?qV?=3@%6_<(QwQ7W3X#PT76exX25VfGaI)ltx;f`= z+?75DBQ&({x%haax!n8`!r+FGb&jl7aZ<zF)j_g8Luv!O%wp$q!+SfsqZY2Oc7+Y?C5i;1avwwROamc@0

    >LfYBn9EFjNn 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%0DQ7=>QD3wr70OFi3vGOccAeCc$B4Ubx%p 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̬TQ~sl{yfTr2pnfa3=_Pu7;qV&H%IeaeA&%^ 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 XyBk?phes>He}N_x6hGr3Vk!OydaM_K literal 0 HcmV?d00001 From ebf02d851d7f9fe24e9c13a3edbc6294b859dcf2 Mon Sep 17 00:00:00 2001 From: zumbrunn Date: Mon, 24 Apr 2006 07:18:45 +0000 Subject: [PATCH 075/217] added all.js files as convenience SingleFileRepositories to load all the Javascript library files in modules/core and/or modules/helma --- core/all.js | 9 +++++++++ helma/all.js | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 core/all.js create mode 100644 helma/all.js diff --git a/core/all.js b/core/all.js new file mode 100644 index 00000000..64251f8b --- /dev/null +++ b/core/all.js @@ -0,0 +1,9 @@ + +// convenience SingleFileRepository to load all the +// Javascript library files in ./modules/core + +app.addRepository('modules/helma/Array.js'); +app.addRepository('modules/helma/Date.js'); +app.addRepository('modules/helma/Number.js'); +app.addRepository('modules/helma/Object.js'); +app.addRepository('modules/helma/String.js'); diff --git a/helma/all.js b/helma/all.js new file mode 100644 index 00000000..7ee3b15c --- /dev/null +++ b/helma/all.js @@ -0,0 +1,19 @@ + +// convenience SingleFileRepository to load all the +// Javascript library files in ./modules/helma + +app.addRepository('modules/helma/Aspects.js'); +app.addRepository('modules/helma/Chart.js'); +app.addRepository('modules/helma/Color.js'); +app.addRepository('modules/helma/Database.js'); +app.addRepository('modules/helma/File.js'); +app.addRepository('modules/helma/Ftp.js'); +app.addRepository('modules/helma/Html.js'); +app.addRepository('modules/helma/Http.js'); +app.addRepository('modules/helma/Image.js'); +app.addRepository('modules/helma/Mail.js'); +app.addRepository('modules/helma/Search.js'); +app.addRepository('modules/helma/Skin.js'); +app.addRepository('modules/helma/Ssh.js'); +app.addRepository('modules/helma/Url.js'); +app.addRepository('modules/helma/Zip.js'); From 6daa6c079461b6ed83932aaa64ec566763c4594c Mon Sep 17 00:00:00 2001 From: zumbrunn Date: Mon, 24 Apr 2006 08:27:00 +0000 Subject: [PATCH 077/217] Added Helma license notice --- core/all.js | 15 +++++++++++++++ helma/all.js | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/core/all.js b/core/all.js index 64251f8b..6c83fc6d 100644 --- a/core/all.js +++ b/core/all.js @@ -1,3 +1,18 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: Aspects.js,v $ + * $Author: czv $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ + */ // convenience SingleFileRepository to load all the // Javascript library files in ./modules/core diff --git a/helma/all.js b/helma/all.js index 7ee3b15c..7c2dae3a 100644 --- a/helma/all.js +++ b/helma/all.js @@ -1,3 +1,18 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: Aspects.js,v $ + * $Author: czv $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ + */ // convenience SingleFileRepository to load all the // Javascript library files in ./modules/helma From 620ce4c30578e85d4786666ed7bb138dbc534489 Mon Sep 17 00:00:00 2001 From: zumbrunn Date: Tue, 30 May 2006 18:34:31 +0000 Subject: [PATCH 078/217] Fixed all.js to correctly reference core files --- core/all.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/all.js b/core/all.js index 6c83fc6d..714e8911 100644 --- a/core/all.js +++ b/core/all.js @@ -8,17 +8,17 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: Aspects.js,v $ + * $RCSfile: all.js,v $ * $Author: czv $ - * $Revision: 1.2 $ - * $Date: 2006/04/24 07:02:17 $ + * $Revision: 1.3 $ + * $Date: 2006/04/24 08:27:00 $ */ // convenience SingleFileRepository to load all the // Javascript library files in ./modules/core -app.addRepository('modules/helma/Array.js'); -app.addRepository('modules/helma/Date.js'); -app.addRepository('modules/helma/Number.js'); -app.addRepository('modules/helma/Object.js'); -app.addRepository('modules/helma/String.js'); +app.addRepository('modules/core/Array.js'); +app.addRepository('modules/core/Date.js'); +app.addRepository('modules/core/Number.js'); +app.addRepository('modules/core/Object.js'); +app.addRepository('modules/core/String.js'); From c82daee623d67d0ea0b768f33031e1a98c0e53f2 Mon Sep 17 00:00:00 2001 From: hns Date: Fri, 2 Jun 2006 15:46:20 +0000 Subject: [PATCH 079/217] * Do not set buffer length in BufferedInputStream constructor, default lenght will do ok. * Fix bug that potentially set compression level to NaN in Zip.add(). --- helma/Zip.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/helma/Zip.js b/helma/Zip.js index d311af40..381b8090 100644 --- a/helma/Zip.js +++ b/helma/Zip.js @@ -8,10 +8,10 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.Zip.js,v $ + * $RCSfile: Zip.js,v $ * $Author: czv $ - * $Revision: 1.6 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ // take care of any dependencies @@ -84,7 +84,7 @@ helma.Zip = function (file) { * file should be added (optional) */ var addFile = function(zOutStream, f, level, pathPrefix) { - var fInStream = new java.io.BufferedInputStream(new java.io.FileInputStream(f), f.length()); + var fInStream = new java.io.BufferedInputStream(new java.io.FileInputStream(f)); buf = new java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, f.length()); fInStream.read(buf, 0, f.length()); @@ -214,7 +214,7 @@ helma.Zip = function (file) { level = 9; } // only levels between 0 and 9 are allowed - level = Math.max(0, Math.min(9, arguments[1])); + level = Math.max(0, Math.min(9, level)); if (f.isDirectory()) { // add a whole directory to the zip file (recursive!) From c9463fe57a00323b2e2feb67eb8d46f5c9a53a10 Mon Sep 17 00:00:00 2001 From: p3k Date: Tue, 6 Jun 2006 17:18:03 +0000 Subject: [PATCH 080/217] fix bug causing an exception when there's no app directory at all --- Root/functions.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Root/functions.js b/Root/functions.js index dc6405f6..f7043f15 100644 --- a/Root/functions.js +++ b/Root/functions.js @@ -28,6 +28,8 @@ function getAllApplications() { var appsDir = this.getAppsHome(); var dir = appsDir.list(); var arr = new Array(); + if (!dir) + return arr; for (var i = 0; i < dir.length; i++) { if (dir[i].toLowerCase() != "cvs" && dir[i].indexOf(".") == -1) arr[arr.length] = this.getApp(dir[i]); From c41fed49cc1a3724bc26db22f355f8d3f561d7ca Mon Sep 17 00:00:00 2001 From: grob Date: Thu, 15 Jun 2006 07:38:19 +0000 Subject: [PATCH 081/217] - re-added forceCreate argument to createIndex() that was accidentally removed - changed addIndexes(): it now accepts a js-array containing (ram/fs)directories, the conversion into a java array is done by the method itself - minor documentation and indentation fixes --- helma/Search.js | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/helma/Search.js b/helma/Search.js index ad25af03..9513a568 100644 --- a/helma/Search.js +++ b/helma/Search.js @@ -17,9 +17,9 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // // -// $Revision: 1.7 $ +// $Revision: 1.2 $ // $Author: czv $ -// $Date: 2006/04/18 13:06:58 $ +// $Date: 2006/04/24 07:02:17 $ // @@ -42,7 +42,7 @@ helma.Search = function() { try { var c = java.lang.Class.forName("org.apache.lucene.analysis.Analyzer", - true, app.__app__.typemgr.getClassLoader()); + true, app.getClassLoader()); } catch (e) { throw("helma.Search needs lucene.jar \ in lib/ext or application directory \ @@ -155,12 +155,13 @@ helma.Search.prototype.getRAMDirectory = function(dir) { /** * returns a new index Object - * @param String name of the index - * @param Object Analyzer to use (instance of analysis.Analyzer) - * @param Object base directory of the index (File object) + * @param Object directory containing the index (an instance of either + * org.apache.lucene.store.FSDirectory or org.apache.lucene.store.RAMDirectory) + * @param Object (optional) Analyzer to use (instance of org.apache.lucene.analysis.Analyzer) + * @param Boolean (optional) Flag to force index creation * @return Object Index object */ -helma.Search.prototype.createIndex = function(dir, analyzer) { +helma.Search.prototype.createIndex = function(dir, analyzer, forceCreate) { if (arguments.length == 0) { throw("helma.Search.createIndex(): insufficient arguments."); } else if (arguments.length == 1) { @@ -175,7 +176,7 @@ helma.Search.prototype.createIndex = function(dir, analyzer) { } } var index = new helma.Search.Index(dir, analyzer); - if (!helma.Search.PKG.index.IndexReader.indexExists(dir)) { + if (!helma.Search.PKG.index.IndexReader.indexExists(dir) || forceCreate == true) { index.create(); } return index; @@ -349,9 +350,14 @@ helma.Search.Index.prototype.checkWriteLock = function() { * merge indexes into this one */ helma.Search.Index.prototype.addIndexes = function(dirs) { + var arr = java.lang.reflect.Array.newInstance(helma.Search.PKG.store.Directory, + dirs.length); + for (var i=0;i Date: Wed, 28 Jun 2006 20:06:03 +0000 Subject: [PATCH 082/217] * Apply patch from Stefan Rinner to set the Date header. http://helma.org/pipermail/helma-user/2006-June/006547.html --- helma/Mail.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/helma/Mail.js b/helma/Mail.js index 8bbfd15e..9d217834 100644 --- a/helma/Mail.js +++ b/helma/Mail.js @@ -8,10 +8,10 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.Mail.js,v $ + * $RCSfile: Mail.js,v $ * $Author: czv $ - * $Revision: 1.6 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ @@ -264,6 +264,7 @@ helma.Mail = function(smtp) { } else { message.setText(""); } + message.setSentDate(new Date()); Transport.send(message); } catch (mx) { res.debug(errStr + ".send(): " + mx); From f2cc5103b494a44d7fff5433104791efc11b2009 Mon Sep 17 00:00:00 2001 From: p3k Date: Tue, 18 Jul 2006 08:24:59 +0000 Subject: [PATCH 083/217] * fixed decimal format in format method * removed unnecessary condition in toPercent method --- core/Number.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/Number.js b/core/Number.js index 5983eb35..f591050d 100644 --- a/core/Number.js +++ b/core/Number.js @@ -9,9 +9,9 @@ * Copyright 1998-2006 Helma Software. All Rights Reserved. * * $RCSfile: Number.js,v $ - * $Author: hannes $ - * $Revision: 1.5 $ - * $Date: 2006/04/18 13:06:58 $ + * $Author: czv $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ @@ -41,8 +41,8 @@ Number.Sorter.DESC = -1; */ Number.prototype.format = function(fmt) { var df = fmt ? new java.text.DecimalFormat(fmt) - : new java.text.DecimalFormat("#,##0.00"); - return df.format(0+this); + : new java.text.DecimalFormat("###,##0.##"); + return df.format(0 + this); // addition with 0 prevents exception }; @@ -54,9 +54,9 @@ Number.prototype.format = function(fmt) { * @return Int Percentage */ Number.prototype.toPercent = function(total, fmt) { - var p = this / (total / 100); - if (!fmt) - return Math.round(p * 100) / 100; + if (!total) + return (0).format(fmt); + var p = this / (total / 100); return p.format(fmt); }; From 971a740a0ab72d34d803de5fd343bd96348dfc2b Mon Sep 17 00:00:00 2001 From: p3k Date: Tue, 18 Jul 2006 15:09:36 +0000 Subject: [PATCH 084/217] * changed signature (it's more important to provide a database name than user and password) * added var keyword before constants * check user and password individually * added execute() method --- helma/Database.js | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/helma/Database.js b/helma/Database.js index 30a39b8f..658f1862 100644 --- a/helma/Database.js +++ b/helma/Database.js @@ -8,10 +8,10 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.Database.js,v $ + * $RCSfile: Database.js,v $ * $Author: czv $ - * $Revision: 1.5 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ @@ -19,19 +19,17 @@ if (!global.helma) { global.helma = {}; } -helma.Database = function(driver, url, user, password, name) { - if (!driver || !url || !user) +helma.Database = function(driver, url, name, user, password) { + if (!driver || !url || !name) throw("Insufficient arguments to create helma.db.Connection"); - if (!name) - name = "db" + new Date().getTime(); if (typeof password != "string") password = ""; - MYSQL = "mysql"; - ORACLE = "oracle"; - JDBC = "jdbc:"; - DRIVER_MYSQL = "org.gjt.mm.mysql.Driver"; - DRIVER_ORACLE = "oracle.jdbc.driver.OracleDriver"; + var MYSQL = "mysql"; + var ORACLE = "oracle"; + var JDBC = "jdbc:"; + var DRIVER_MYSQL = "org.gjt.mm.mysql.Driver"; + var DRIVER_ORACLE = "oracle.jdbc.driver.OracleDriver"; if (driver == MYSQL) { driver = DRIVER_MYSQL; @@ -45,13 +43,15 @@ helma.Database = function(driver, url, user, password, name) { var DbSource = Packages.helma.objectmodel.db.DbSource; var DatabaseObject = Packages.helma.scripting.rhino.extensions.DatabaseObject; - var DbSource = Packages.helma.objectmodel.db.DbSource; + var props = new Packages.helma.util.ResourceProperties(); props.put(name + ".url", url); props.put(name + ".driver", driver); if (user) { - props.put(name + ".user", user); + props.put(name + ".user", user) + } + if (password) { props.put(name + ".password", password); } var source = new DbSource(name, props); @@ -77,9 +77,9 @@ helma.Database = function(driver, url, user, password, name) { return this.getProductName() == MYSQL; }; - this.query = function(query) { + this.query = function(sql) { var statement = connection.createStatement(); - var resultSet = statement.executeQuery(query); + var resultSet = statement.executeQuery(sql); var metaData = resultSet.getMetaData(); var max = metaData.getColumnCount(); var result = []; @@ -92,6 +92,11 @@ helma.Database = function(driver, url, user, password, name) { return result; }; + this.execute = function(sql) { + var statement = connection.createStatement(); + return statement.execute(sql); + }; + this.getName = function() { return source.getName(); }; From 80b6083da77ccde9c0ca3d304f48cebb8b1b241e Mon Sep 17 00:00:00 2001 From: p3k Date: Mon, 24 Jul 2006 16:03:57 +0000 Subject: [PATCH 085/217] added count, enbase64 as well as debase64 methods --- core/String.js | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/core/String.js b/core/String.js index 60f61126..29838986 100644 --- a/core/String.js +++ b/core/String.js @@ -8,10 +8,10 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.String.js,v $ + * $RCSfile: String.js,v $ * $Author: czv $ - * $Revision: 1.5 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ @@ -340,23 +340,23 @@ String.prototype.entitize = function() { * @return Object containing head and tail properties */ String.prototype.embody = function(limit, clipping, delimiter) { - if (typeof(limit) == "string") + if (typeof limit == "string") limit = parseInt(limit, 10); var result = {head: this, tail: ""}; if (!limit || limit < 1) return result; if (!delimiter || delimiter =="") - result.head= this.substring(0,limit); + result.head= this.substring(0, limit); else { var re = new RegExp ("(" + delimiter + "+)"); - result.head = this.split(re,2*limit-1).join(""); + result.head = this.split(re, 2*limit - 1).join(""); } if (result.head != this) { result.tail = this.substring(result.head.length).trim(); if (result.tail) { if (clipping == null) clipping = "..."; - result.head = result.head.trim()+clipping; + result.head = result.head.trim() + clipping; result.tail = clipping + result.tail; } } @@ -607,6 +607,38 @@ String.prototype.isEmail = function() { }; +/** + * returns the amount of occurences of one string in another + */ +String.prototype.count = function(str) { + var count = 0; + var offset = 0; + while ((offset = this.indexOf(str, offset)) > -1) { + count += 1; + offset += 1; + } + return count; +}; + + +/** + * returns the string encoded using the base64 algorithm + */ +String.prototype.enbase64 = function() { + var bytes = new java.lang.String(this) . getBytes(); + return new Packages.sun.misc.BASE64Encoder().encode(bytes); +}; + + +/** + * returns the decoded string using the base64 algorithm + */ +String.prototype.debase64 = function() { + var bytes = new Packages.sun.misc.BASE64Decoder().decodeBuffer(this); + return String(new java.lang.String(bytes)); +}; + + // wrapper methods for string-related // global helma functions From ef369a61bf6af00dda6d9c2032941a59e74095ce Mon Sep 17 00:00:00 2001 From: p3k Date: Mon, 24 Jul 2006 17:09:23 +0000 Subject: [PATCH 086/217] initial check-in as adaptation of code at http://www.json.org/json.js --- core/JSON.js | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 core/JSON.js diff --git a/core/JSON.js b/core/JSON.js new file mode 100644 index 00000000..6f2b3a52 --- /dev/null +++ b/core/JSON.js @@ -0,0 +1,147 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2006 Helma Software. All Rights Reserved. + * + * $RCSfile: all.js,v $ + * $Author: czv $ + * $Revision: 1.4 $ + * $Date: 2006/05/30 18:34:31 $ + */ + + +/* + json.js + 2006-04-28 [http://www.json.org/json.js] + + This file adds these methods to JavaScript: + + object.toJSONString() + + This method produces a JSON text from an object. The + object must not contain any cyclical references. + + array.toJSONString() + + This method produces a JSON text from an array. The + array must not contain any cyclical references. + + string.parseJSON() + + This method parses a JSON text to produce an object or + array. It will return false if there is an error. +*/ + +(function () { + var m = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + + s = { + array: function (x) { + var a = ['['], b, f, i, l = x.length, v; + for (i = 0; i < l; i += 1) { + v = x[i]; + f = s[typeof v]; + if (f) { + v = f(v); + if (typeof v == 'string') { + if (b) { + a[a.length] = ','; + } + a[a.length] = v; + b = true; + } + } + } + a[a.length] = ']'; + return a.join(''); + }, + + 'boolean': function (x) { + return String(x); + }, + + 'null': function (x) { + return "null"; + }, + + number: function (x) { + return isFinite(x) ? String(x) : 'null'; + }, + + object: function (x) { + if (x) { + if (x instanceof Array) { + return s.array(x); + } + var a = ['{'], b, f, i, v; + for (i in x) { + v = x[i]; + f = s[typeof v]; + if (f) { + v = f(v); + if (typeof v == 'string') { + if (b) { + a[a.length] = ','; + } + a.push(s.string(i), ':', v); + b = true; + } + } + } + a[a.length] = '}'; + return a.join(''); + } + return 'null'; + }, + + string: function (x) { + if (/["\\\x00-\x1f]/.test(x)) { + x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) { + var c = m[b]; + if (c) { + return c; + } + c = b.charCodeAt(); + return '\\u00' + + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }); + } + return '"' + x + '"'; + } + }; + + Object.prototype.toJSONString = function () { + return s.object(this); + }; + + Array.prototype.toJSONString = function () { + return s.array(this); + }; + + Object.prototype.dontEnum("toJSONString"); + Array.prototype.dontEnum("toJSONString"); + return; +})(); + + +String.prototype.parseJSON = function () { + try { + return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(this.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + this + ')'); + } catch (e) { + return false; + } +}; From b3c82d5a061307a23b6892319f64880c64577dd6 Mon Sep 17 00:00:00 2001 From: p3k Date: Mon, 24 Jul 2006 17:18:52 +0000 Subject: [PATCH 087/217] * added missing dontEnum() call for String.prototype.parseJSON * shortened toJSONString() method to simply toJSON() --- core/JSON.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/core/JSON.js b/core/JSON.js index 6f2b3a52..eb999c0d 100644 --- a/core/JSON.js +++ b/core/JSON.js @@ -8,10 +8,10 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: all.js,v $ - * $Author: czv $ - * $Revision: 1.4 $ - * $Date: 2006/05/30 18:34:31 $ + * $RCSfile: JSON.js,v $ + * $Author: tobi $ + * $Revision: 1.1 $ + * $Date: 2006/07/24 17:09:23 $ */ @@ -21,12 +21,12 @@ This file adds these methods to JavaScript: - object.toJSONString() + object.toJSON() This method produces a JSON text from an object. The object must not contain any cyclical references. - array.toJSONString() + array.toJSON() This method produces a JSON text from an array. The array must not contain any cyclical references. @@ -124,16 +124,16 @@ } }; - Object.prototype.toJSONString = function () { + Object.prototype.toJSON = function () { return s.object(this); }; - Array.prototype.toJSONString = function () { + Array.prototype.toJSON = function () { return s.array(this); }; - Object.prototype.dontEnum("toJSONString"); - Array.prototype.dontEnum("toJSONString"); + Object.prototype.dontEnum("toJSON"); + Array.prototype.dontEnum("toJSON"); return; })(); @@ -145,3 +145,5 @@ String.prototype.parseJSON = function () { return false; } }; + +String.prototype.dontEnum("parseJSON"); From bd8b266fa9ec3eafbdc4e3ef41b823f79aaa406d Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 25 Jul 2006 13:01:02 +0000 Subject: [PATCH 088/217] * Pass on return values from FTPClient class. Fixes bug 469. --- helma/Ftp.js | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/helma/Ftp.js b/helma/Ftp.js index c13599e9..e20f3847 100644 --- a/helma/Ftp.js +++ b/helma/Ftp.js @@ -8,10 +8,10 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.Ftp.js,v $ + * $RCSfile: Ftp.js,v $ * $Author: czv $ - * $Revision: 1.7 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ @@ -62,7 +62,7 @@ helma.Ftp = function(server) { }; var debug = function(methName, msg) { - var msg = msg ? " " + msg : ""; + msg = msg ? " " + msg : ""; app.debug(className + ":" + methName + msg); return; }; @@ -112,9 +112,9 @@ helma.Ftp = function(server) { this.login = function(username, password) { try { ftpclient.connect(this.server); - ftpclient.login(username, password); + var result = ftpclient.login(username, password); debug("login", username + "@" + server); - return true; + return result; } catch(x) { error("login", x); setStatus(LOGIN); @@ -124,9 +124,9 @@ helma.Ftp = function(server) { this.binary = function() { try { - ftpclient.setFileType(FTP.BINARY_FILE_TYPE); + var result = ftpclient.setFileType(FTP.BINARY_FILE_TYPE); debug("binary"); - return true; + return result; } catch(x) { error("binary", x); setStatus(BINARY); @@ -136,9 +136,9 @@ helma.Ftp = function(server) { this.ascii = function() { try { - ftpclient.setFileType(FTP.ASCII_FILE_TYPE); + var result = ftpclient.setFileType(FTP.ASCII_FILE_TYPE); debug("ascii"); - return true; + return result; } catch(x) { error("ascii", x); setStatus(ASCII); @@ -194,9 +194,9 @@ helma.Ftp = function(server) { this.mkdir = function(dir) { try { - ftpclient.makeDirectory(dir); + var result = ftpclient.makeDirectory(dir); debug("mkdir", dir); - return true; + return result; } catch(x) { error("mkdir", x); setStatus(MKDIR); @@ -206,9 +206,9 @@ helma.Ftp = function(server) { this.rmdir = function(dir) { try { - ftpclient.removeDirectory(dir); + var result = ftpclient.removeDirectory(dir); debug("rmdir", dir); - return true; + return result; } catch(x) { error("rmdir", x); setStatus(RMDIR); @@ -218,9 +218,9 @@ helma.Ftp = function(server) { this.cd = function(path) { try { - ftpclient.changeWorkingDirectory(path); + var result = ftpclient.changeWorkingDirectory(path); debug("cd", path); - return true; + return result; } catch(x) { error("cd", x); setStatus(CD); @@ -259,10 +259,10 @@ helma.Ftp = function(server) { if (!remoteFile) { remoteFile = f.getName(); } - ftpclient.storeFile(remoteFile, stream); + var result = ftpclient.storeFile(remoteFile, stream); stream.close(); debug("putFile", remoteFile); - return true; + return result; } catch(x) { error("putFile", x); setStatus(PUT); @@ -275,9 +275,9 @@ helma.Ftp = function(server) { str = new java.lang.String(str); var bytes = charset ? str.getBytes(charset) : str.getBytes(); var stream = ByteArrayInputStream(bytes); - ftpclient.storeFile(remoteFile, stream); + var result = ftpclient.storeFile(remoteFile, stream); debug("putString", remoteFile); - return true; + return result; } catch(x) { error("putString", x); setStatus(PUT); @@ -294,10 +294,10 @@ helma.Ftp = function(server) { var stream = new BufferedOutputStream( new FileOutputStream(f.getPath()) ); - ftpclient.retrieveFile(remoteFile, stream); + var result = ftpclient.retrieveFile(remoteFile, stream); stream.close(); debug("getFile", remoteFile); - return true; + return result; } catch(x) { error("getFile", x); setStatus(GET); @@ -320,9 +320,9 @@ helma.Ftp = function(server) { this.deleteFile = function(remoteFile) { try { - ftpclient.deleteFile(remoteFile); + var result = ftpclient.deleteFile(remoteFile); debug("deleteFile", remoteFile); - return true; + return result; } catch(x) { error("deleteFile", x); setStatus(DELETE); @@ -332,10 +332,10 @@ helma.Ftp = function(server) { this.logout = function() { try { - ftpclient.logout(); + var result = ftpclient.logout(); ftpclient.disconnect(); debug("logout"); - return true; + return result; } catch(x) { error("logout", x); setStatus(LOGOUT); From 50d4eb0d935e1a3ad36f7d9811cb31fd7b65b1dc Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 25 Jul 2006 20:07:59 +0000 Subject: [PATCH 089/217] * Immediately convert java.io.File instance to absolute path names to avoid the many pitfalls and gotchas of relative file names. --- helma/File.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/helma/File.js b/helma/File.js index c940d223..36f635e5 100644 --- a/helma/File.js +++ b/helma/File.js @@ -8,10 +8,10 @@ * * Copyright 1998-2006 Helma Software. All Rights Reserved. * - * $RCSfile: helma.File.js,v $ + * $RCSfile: File.js,v $ * $Author: czv $ - * $Revision: 1.9 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ @@ -36,10 +36,12 @@ helma.File = function(path) { var file; try { + // immediately convert to absolute path - java.io.File is + // incredibly stupid when dealing with relative file names if (arguments.length > 1) - file = new File(path, arguments[1]); + file = new File(path, arguments[1]).getAbsoluteFile(); else - file = new File(path); + file = new File(path).getAbsoluteFile(); } catch (e) { throw(e); } From 7860cbdde2a77e23c954952949df9643aaa45f30 Mon Sep 17 00:00:00 2001 From: p3k Date: Sun, 6 Aug 2006 11:27:56 +0000 Subject: [PATCH 090/217] * added String.NULL as constant containing the empty string "" * added global- and HopObject-related macros to core --- core/Global.js | 67 +++++++++++++++++++++++++ core/HopObject.js | 125 ++++++++++++++++++++++++++++++++++++++++++++++ core/String.js | 31 ++++++------ core/all.js | 6 ++- 4 files changed, 212 insertions(+), 17 deletions(-) create mode 100644 core/Global.js create mode 100644 core/HopObject.js diff --git a/core/Global.js b/core/Global.js new file mode 100644 index 00000000..91f43763 --- /dev/null +++ b/core/Global.js @@ -0,0 +1,67 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2005 Helma Software. All Rights Reserved. + * + * $RCSfile: Date.js,v $ + * $Author: czv $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ + */ + + +app.addRepository("modules/core/String.js"); + + +/** + * write out a property contained in app.properties + * @param Object containing the name of the property + */ +function property_macro(param) { + res.write(app.properties[param.name] || String.NULL); + return; +} + + +/** + * wrapper to output a string from within a skin + * just to be able to use different encodings + * @param Object containing the string as text property + */ +function write_macro(param) { + res.write(param.text || String.NULL); + return; +} + + +/** + * renders the current datetime + * @param Object containing a formatting string as format property + */ +function now_macro(param) { + var d = new Date(); + if (param.format) { + res.write(d.format(param.format)); + } else if (param.as == "timestamp") { + res.write(d.getTime()); + } else { + res.write(d); + } + return; +} + + +/** + * renders a global skin + */ +function skin_macro(param) { + if (param.name) { + renderSkin(param.name); + } + return; +} diff --git a/core/HopObject.js b/core/HopObject.js new file mode 100644 index 00000000..f97853eb --- /dev/null +++ b/core/HopObject.js @@ -0,0 +1,125 @@ +/* + * Helma License Notice + * + * The contents of this file are subject to the Helma License + * Version 2.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://adele.helma.org/download/helma/license.txt + * + * Copyright 1998-2005 Helma Software. All Rights Reserved. + * + * $RCSfile: Date.js,v $ + * $Author: czv $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ + */ + + +app.addRepository("modules/core/Number.js"); +app.addRepository("modules/core/String.js"); + + +/** + * macro returns the id of a HopObject + */ +HopObject.prototype.id_macro = function(param) { + res.write(this._id); + return; +}; + + +/** + * macro returns the url for any hopobject + */ +HopObject.prototype.href_macro = function(param) { + res.write(this.href(param.action || String.NULLSTR)); + return; +}; + + +/** + * macro rendering a skin or displaying + * its source (param.as == "source") + */ +HopObject.prototype.skin_macro = function(param) { + if (param.name) { + if (param.as == "source") { + var str = app.skinfiles[this._prototype][param.name]; + if (str && param.unwrap == "true") { + str = str.unwrap(); + } + } else { + var str = this.renderSkinAsString(param.name, param); + } + res.write(str); + } + return; +}; + + +/** + * this macro renders a text depending on + * the value of a given property + */ +HopObject.prototype.switch_macro = function(param) { + if (param.name) { + res.write(this[param.name] ? param.on : param.off); + } + return; +}; + + +/** + * generic macro that loops over the childobjects + * and renders a specified skin for each of them + * @param Object providing the following properties: + * skin: the skin to render for each item (required) + * collection: the collection containing the items + * limit: max. number of items per page + * (req.data.page determines the page number) + * sort: property name to use for sorting + * order: sort order (either "asc" or "desc") + */ +HopObject.prototype.loop_macro = function(param) { + if (!param.skin) { + return; + } + var items = param.collection ? this[param.collection] : this; + if (!items || !items.size || items.size() < 1) { + return; + } + // set default values + var min = 0, max = items.size(); + var pagesize = max; + if (param.limit) { + var n = parseInt(param.limit, 10); + if (!isNaN(n)) { + pagesize = n; + } + var pagenr = parseInt(req.data.page, 10); + if (isNaN(pagenr)) { + pagenr = 0; + } + min = Math.min(max, pagenr * pagesize); + max = Math.min(max, min + pagesize); + } + if (param.sort) { + var allitems = items.list(); + var test = allitems[0][param.sort]; + if (!test || isNaN(test)) { + var Sorter = String.Sorter; + } else { + var Sorter = Number.Sorter; + } + allitems.sort(new Sorter(param.sort, Sorter[param.order.toUpperCase()])); + var itemlist = allitems.slice(min, max); + } else { + var itemlist = items.list(min, max); + } + var skinParam = {}; + for (var i=0; i str2) return order * 1; if (str1 < str2) @@ -83,7 +84,7 @@ String.random = function(len, mode) { var x = Math.random() * Math.pow(10,len); return Math.floor(x); } - var keystr = ""; + var keystr = String.NULL; for (var i=0; i/g, replacement); diff --git a/core/all.js b/core/all.js index 714e8911..8f107375 100644 --- a/core/all.js +++ b/core/all.js @@ -10,8 +10,8 @@ * * $RCSfile: all.js,v $ * $Author: czv $ - * $Revision: 1.3 $ - * $Date: 2006/04/24 08:27:00 $ + * $Revision: 1.4 $ + * $Date: 2006/05/30 18:34:31 $ */ // convenience SingleFileRepository to load all the @@ -22,3 +22,5 @@ app.addRepository('modules/core/Date.js'); app.addRepository('modules/core/Number.js'); app.addRepository('modules/core/Object.js'); app.addRepository('modules/core/String.js'); +app.addRepository('modules/core/HopObject.js'); +app.addRepository('modules/core/Global.js'); From e6d7fe7520a828043f252beb3f861e008d0b0132 Mon Sep 17 00:00:00 2001 From: stefanp Date: Mon, 21 Aug 2006 15:57:05 +0000 Subject: [PATCH 091/217] workaround for http://helma.org/bugs/show_bug.cgi?id=474 went into the wrong repository: changed the way the number of days is calculated. --- core/Date.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/Date.js b/core/Date.js index 937b34b8..1d386b8a 100644 --- a/core/Date.js +++ b/core/Date.js @@ -10,8 +10,8 @@ * * $RCSfile: Date.js,v $ * $Author: czv $ - * $Revision: 1.5 $ - * $Date: 2006/04/18 13:06:58 $ + * $Revision: 1.2 $ + * $Date: 2006/04/24 07:02:17 $ */ @@ -91,7 +91,7 @@ Date.prototype.getTimespan = function(param) { var result = {isFuture: this > param.date}; var diff = Math.abs(param.date.diff(this)); - var age = {days: Math.floor((diff % Date.ONEMONTH) / Date.ONEDAY), + var age = {days: Math.floor(diff / Date.ONEDAY), hours: Math.floor((diff % Date.ONEDAY) / Date.ONEHOUR), minutes: Math.floor((diff % Date.ONEHOUR) / Date.ONEMINUTE)}; From 5496bcfb04659ff88cdbdfc80a2cc7c004c52a70 Mon Sep 17 00:00:00 2001 From: grob Date: Fri, 29 Sep 2006 13:49:40 +0000 Subject: [PATCH 092/217] * this library now expects Lucene version 1.9.1 (due to API changes in Lucene it currently doesn't work with version 2.0) * added (most of) missing analyzers in Search.getAnalyzer() * createIndex doesn't support a third argument for force-create an index anymore. to clear an index use its create() method instead * Index now uses an IndexModifier instead of an IndexWriter in most cases * to create a new Searcher instance now call index.getSearcher() or pass the index to search in as argument to the Searcher constructor * checkWriteLock() is gone, instead getWriter() and getModifier() try for 2 seconds to return a writer/modifier. this should avoid concurrency problems * Index.addIndexes() now takes a number of index directory arguments * Index.create() now deletes all files in the directory (before it didn't) * added checks for existing writer/modifier/reader before calling close() * Index.getFieldNames() now returns a javascript array instead of a java object one * Index.isLocked() doesn't create a reader anymore (before it did, but didn't use it) * removed Index.getTerms() - if someone is missing that, shout * Index.addDocument() now expects a single Document instance, for batch adding use the new method addDocuments() * same with Index.removeDocument() * added new method Index.updateDocument() that does removal and adding in one step (so the index is locked just once instead of two times) * the wrapped lucene Query instance is now a public field - this saves from duplicating the getter method in every extending prototype * Document.addField() now uses new DateTools class instead of the deprecated DateField utility methods * removed Document.getDateField() since Document.getField() now handles dates as well * added JSDoc compatible documentation --- helma/Search.js | 1278 +++++++++++++++++++++++++++-------------------- 1 file changed, 727 insertions(+), 551 deletions(-) diff --git a/helma/Search.js b/helma/Search.js index 9513a568..6cbdf805 100644 --- a/helma/Search.js +++ b/helma/Search.js @@ -17,14 +17,15 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // // -// $Revision: 1.2 $ -// $Author: czv $ -// $Date: 2006/04/24 07:02:17 $ +// $Revision: 1.3 $ +// $Author: robert $ +// $Date: 2006/06/15 07:38:19 $ // // take care of any dependencies -app.addRepository('modules/helma/lucene.jar'); +app.addRepository('modules/helma/lucene-core.jar'); +app.addRepository('modules/helma/lucene-analyzers.jar'); if (!global.helma) { @@ -32,63 +33,94 @@ if (!global.helma) { } /** - * Search constructor + * Constructs a new instance of Search. This merely + * checks if the Lucene library is in the application + * classpath. + * @classDescription This class provides functionality for + * creating a search index. + * @return A newly created instance of this prototype. + * @constructor */ helma.Search = function() { - - this.toString = function() { - return helma.Search.toString(); - }; - try { var c = java.lang.Class.forName("org.apache.lucene.analysis.Analyzer", true, app.getClassLoader()); + // FIXME: add additional check for version, since we need >= 1.9 } catch (e) { - throw("helma.Search needs lucene.jar \ + throw("helma.Search needs lucene.jar in version > 1.9 \ in lib/ext or application directory \ [http://lucene.apache.org/]"); } return this; -} +}; -helma.Search.PKG = Packages.org.apache.lucene; -/////////////////////////////////////////// -// static methods -/////////////////////////////////////////// +/********************** + * STATIC METHODS * + **********************/ + helma.Search.toString = function() { return "[helma.Search]"; -} +}; /** - * static method that returns a new Analyzer instance - * depending on the language passed as argument - * @param String language - * @return Object analyzer + * Returns a new Analyzer instance depending on the key + * passed as argument. Currently supported arguments are + * "br" (BrazilianAnalyzer), "cn" (ChineseAnalyzer), "cz" (CzechAnalyzer), + * "nl" (DutchAnalyzer), "fr" (FrenchAnalyzer), "de" (GermanAnalyzer), + * "el" (GreekAnalyzer), "keyword" (KeywordAnalyzer), "ru" (RussianAnalyzer), + * "simple" (SimpleAnalyzer), "snowball" (SnowballAnalyzer), "stop" (StopAnalyzer) + * "whitespace" (WhitespaceAnalyzer). If no argument is given, a StandardAnalyzer + * is returned. + * @param {String} key The key identifying the analyzer + * @return A newly created Analyzer instance + * @type {org.apache.lucene.analysis.Analyzer} */ -helma.Search.getAnalyzer = function(lang) { - switch (lang) { +helma.Search.getAnalyzer = function(key) { + var pkg = Packages.org.apache.lucene; + switch (key) { + case "br": + return new pkg.analysis.br.BrazilianAnalyzer(); + case "cn": + return new pkg.analysis.cn.ChineseAnalyzer(); + case "cz": + return new pkg.analysis.cz.CzechAnalyzer(); + case "nl": + return new pkg.analysis.nl.DutchAnalyzer(); + case "fr": + return new pkg.analysis.fr.FrenchAnalyzer(); case "de": - return new helma.Search.PKG.analysis.de.GermanAnalyzer(); + return new pkg.analysis.de.GermanAnalyzer(); + case "el": + return new pkg.analysis.el.GreekAnalyzer(); + case "keyword": + return new pkg.analysis.KeywordAnalyzer(); case "ru": - return new helma.Search.PKG.analysis.ru.RussianAnalyzer(); - case "si": + return new pkg.analysis.ru.RussianAnalyzer(); case "simple": - return new helma.Search.PKG.analysis.SimpleAnalyzer(); + return new pkg.analysis.SimpleAnalyzer(); + case "snowball": + return new pkg.analysis.snowball.SnowballAnalyzer(); + case "stop": + return new pkg.analysis.StopAnalyzer(); case "whitespace": - return new helma.Search.PKG.analysis.WhitespaceAnalyzer(); + return new pkg.analysis.WhitespaceAnalyzer(); default: - return new helma.Search.PKG.analysis.standard.StandardAnalyzer(); + return new pkg.analysis.standard.StandardAnalyzer(); } }; /** - * constructor for QueryFilter objects - * @param Object instance of Search.Query + * Constructs a new QueryFilter instance. This class + * wraps a lucene QueryFilter. + * @param {helma.Search.Query} q The query object to use as + * the basis for the QueryFilter instance. + * @return A newly created QueryFilter instance. + * @constructor */ helma.Search.QueryFilter = function(q) { - var wrappedFilter = new helma.Search.PKG.search.QueryFilter(q.getQuery()); + var wrappedFilter = new Packages.org.apache.lucene.search.QueryFilter(q.getQuery()); this.getFilter = function() { return wrappedFilter; @@ -102,15 +134,22 @@ helma.Search.QueryFilter = function(q) { }; -/////////////////////////////////////////// -// prototype methods -/////////////////////////////////////////// +/************************* + * PROTOTYPE METHODS * + *************************/ + + +/** @ignore */ +helma.Search.prototype.toString = function() { + return helma.Search.toString(); +}; /** - * returns an instance of org.apache.lucene.store.FSDirectory - * @param Object an instance of File, helma.File, java.io.File or the - * path to the directory as String - * @return Object org.apache.lucene.store.FSDirectory + * Returns an instance of org.apache.lucene.store.FSDirectory + * @param {File | helma.File | java.io.File | String} dir The directory + * where the index is located or should be created at. + * @return The index directory. + * @type org.apache.lucene.store.FSDirectory */ helma.Search.prototype.getDirectory = function(dir, create) { if (!dir) { @@ -124,16 +163,16 @@ helma.Search.prototype.getDirectory = function(dir, create) { } else if (!((d = dir) instanceof java.io.File)) { throw("helma.Search.getDirectory(): " + dir + " is not a valid argument."); } - return helma.Search.PKG.store.FSDirectory.getDirectory(d, + return Packages.org.apache.lucene.store.FSDirectory.getDirectory(d, create == true ? true : !d.exists()); -} +}; /** - * returns an instance of org.apache.lucene.store.RAMDirectory - * @param Object the directory to create the RAMDirectory from. Argument - * can be an instance of File, helma.File, java.io.File or the - * path to the directory as String - * @return Object org.apache.lucene.store.RAMDirectory + * Returns a RAM directory object. + * @param {File | helma.File | java.io.File | String} dir Optional directory + * containing a Lucene index from which this RAM directory should be created. + * @return A RAM directory instance. + * @type org.apache.lucene.store.RAMDirectory */ helma.Search.prototype.getRAMDirectory = function(dir) { if (dir != null) { @@ -148,176 +187,143 @@ helma.Search.prototype.getRAMDirectory = function(dir) { if (!d.exists()) { throw("helma.Search.getRAMDirectory(): " + dir + " does not exist."); } - return helma.Search.PKG.store.RAMDirectory(d); + return Packages.org.apache.lucene.store.RAMDirectory(d); } - return helma.Search.PKG.store.RAMDirectory(); -} + return Packages.org.apache.lucene.store.RAMDirectory(); +}; /** - * returns a new index Object - * @param Object directory containing the index (an instance of either - * org.apache.lucene.store.FSDirectory or org.apache.lucene.store.RAMDirectory) - * @param Object (optional) Analyzer to use (instance of org.apache.lucene.analysis.Analyzer) - * @param Boolean (optional) Flag to force index creation - * @return Object Index object + * Creates a new Lucene index in the directory passed as + * argument, using an optional analyzer, and returns an instance + * of helma.Search.Index. Any already existing index in this + * directory will be preserved. + * @param {org.apache.lucene.store.Directory} dir The directory + * where the index should be stored. This can be either a + * FSDirectory or a RAMDirectory instance. + * @param {org.apache.lucene.analysis.Analyzer} analyzer The analyzer to + * use for the index. If not specified a StandardAnalyzer will be used. + * @return The index instance. + * @type helma.Search.Index */ -helma.Search.prototype.createIndex = function(dir, analyzer, forceCreate) { - if (arguments.length == 0) { - throw("helma.Search.createIndex(): insufficient arguments."); - } else if (arguments.length == 1) { +helma.Search.prototype.createIndex = function(dir, analyzer) { + if (!dir || !(dir instanceof Packages.org.apache.lucene.store.Directory)) { + throw("Index directory missing or invalid."); + } else if (!analyzer) { + // no analyzer given, use a StandardAnalyzer analyzer = helma.Search.getAnalyzer(); - forceCreate = false; - } else if (arguments.length == 2) { - if (arguments[1].constructor == Boolean) { - analyzer = helma.Search.getAnalyzer(); - forceCreate = arguments[1]; - } else { - forceCreate = false; - } } var index = new helma.Search.Index(dir, analyzer); - if (!helma.Search.PKG.index.IndexReader.indexExists(dir) || forceCreate == true) { + if (!Packages.org.apache.lucene.index.IndexReader.indexExists(dir)) { index.create(); } return index; }; -/////////////////////////////////////////// -// Index -/////////////////////////////////////////// +/************* + * INDEX * + *************/ /** - * static constructor for Index objects - * @param Object index directory, either an instance of FSDirectory or RAMDirectory - * @param Object Lucene analyzer object + * @class Instances of this class represent a Lucene search index + * located in either a directory on disk or in RAM. This class + * provides various methods for modifying the underlying Lucene index. + * @param {org.apache.lucene.store.Directory} directory The directory + * where the Lucene index is located at. + * @param {org.apache.lucene.analysis.Analyzer} analyzer The analyzer + * to use when modifying the index. + * @constructor */ helma.Search.Index = function(directory, analyzer) { + /** - * returns an IndexWriter object - * @param Boolean if true a new index is created + * Tries to create a new IndexWriter or IndexModifier for up to the + * number of milliseconds defined in helma.Search.Index.LOCK_TIMEOUT. + * @private + */ + var getWriterModifier = function(what, create) { + var waitFor, elapsed = 0; + while (elapsed < helma.Search.Index.LOCK_TIMEOUT) { + if (!this.isLocked()) { + return new Packages.org.apache.lucene.index[what](directory, + analyzer, create == true ? true : false); + } else { + waitFor = Math.round(Math.random() * 100) + 50; + java.lang.Thread.sleep(waitFor); + elapsed += waitFor; + app.logger.debug("[Thread " + java.lang.Thread.currentThread().getId() + + "] waiting for " + elapsed + "ms"); + } + } + throw("Failed to create " + what + " due to active lock (Thread " + + java.lang.Thread.currentThread().getId() + ")"); + }; + + /** + * Returns an IndexModifier instance for adding or deleting + * documents to resp. from the underlying index. If the + * index is currently locked this method will try for the next + * two seconds to create the IndexModifier, otherwise it will + * throw an error. + * @return An IndexModifier instance. + * @type org.apache.lucene.index.IndexModifier + */ + this.getModifier = function(create) { + return getWriterModifier.call(this, "IndexModifier", create); + }; + + /** + * Returns an IndexWriter instance that can be used to add documents to + * the underlying index or to perform various other modifying operations. + * If the index is currently locked this method will try for the next + * two seconds to create the IndexWriter, otherwise it will + * throw an error. + * @return An IndexWriter instance. + * @type org.apache.lucene.index.IndexWriter */ this.getWriter = function(create) { - return new helma.Search.PKG.index.IndexWriter(directory, - analyzer, create == true ? true : false); + return getWriterModifier.call(this, "IndexWriter", create); }; /** - * returns an IndexReader object + * Returns an IndexReader instance. Due to locking issues an + * IndexModifier should be used for deleting documents. + * @return An IndexReader instance + * @type org.apache.lucene.index.IndexReader */ this.getReader = function() { - return helma.Search.PKG.index.IndexReader.open(directory); + return Packages.org.apache.lucene.index.IndexReader.open(directory); }; /** - * return the directory of the index - * @param Object helma.File object representing the index' directory + * Returns the directory the underlying Lucene index is located at. + * @return The directory of this index + * @type org.apache.lucene.store.Directory */ this.getDirectory = function() { return directory; }; /** - * constructor function for Searcher objects + * Returns the analyzer used within this index. + * @return The analyzer used within this index. + * @type org.apache.lucene.analysis.Analyer */ - this.Searcher = function() { - var s = new helma.Search.PKG.search.IndexSearcher(directory); - var sortFields; - - /** - * wraps a org.lucene.search.Hits collection - * @param Object instance of org.lucene.search.Hits - */ - var HitCollection = function(hits) { - /** - * silently converts the requested hit into - * an instance of helma.Search.Document - * @param Int index position of hit in collection - * @return instance of helma.Search.Document - */ - this.get = function(idx) { - var doc = new helma.Search.Document(hits.doc(idx)); - doc.score = hits.score(idx); - doc.rank = idx +1; - return doc; - } - - /** - * returns the nr. of hits - */ - this.size = this.length = function() { - return (hits != null) ? hits.length() : 0; - } - return this; - } - - this.hits = null; - - /** - * main search method. the resulting hits collection is - * stored in the property hits. don't forget to do a close() - * when finished processing the resulting hits, otherwise - * the index files will stay locked! - * @param Object instance of Search.Query - * @param Object instance of QueryFilter - * @return Int number of hits - */ - this.search = function(query, filter) { - var pkg = helma.Search.PKG.search; - var hits; - if (sortFields) { - var arr = java.lang.reflect.Array.newInstance(pkg.SortField, sortFields.size()); - var sort = pkg.Sort(sortFields.toArray(arr)); - if (filter) { - hits = s.search(query.getQuery(), filter.getFilter(), sort); - } else { - hits = s.search(query.getQuery(), sort); - } - } else if (filter) { - hits = s.search(query.getQuery(), filter.getFilter()); - } else { - hits = s.search(query.getQuery()); - } - this.hits = new HitCollection(hits); - return this.hits.length(); - }; - - /** - * sets a field as result sorting field - */ - this.sortBy = function(field) { - var pkg = helma.Search.PKG.search; - if (!sortFields) - sortFields = new java.util.Vector(); - var f = field; - var t = pkg.SortField.AUTO; - var r = false; - if (arguments.length == 3) { - t = pkg.SortField[arguments[1].toUpperCase()]; - r = arguments[2]; - } else if (arguments.length == 2) { - if (arguments[1].constructor == Boolean) { - r = arguments[1]; - } else { - t = pkg.SortField[arguments[1].toUpperCase()]; - } - } - sortFields.add(new pkg.SortField(f, t, r)); - return; - }; - - /** - * closes the wrapped IndexSearcher - */ - this.close = function() { - s.close(); - return; - }; - - return this; + this.getAnalyzer = function() { + return analyzer; }; - + + /** + * Returns a searcher for querying this index. + * @return A searcher useable for querying the index. + * @type helma.Search.Searcher + */ + this.getSearcher = function() { + return new helma.Search.Searcher(this); + }; + + /** @ignore */ this.toString = function() { return ("[Lucene Index " + directory + "]"); }; @@ -326,314 +332,501 @@ helma.Search.Index = function(directory, analyzer) { }; /** - * check if the index is locked. if true wait a bit - * and return it again until the timeout is reached + * Constant containing the number of milliseconds + * the index will try to create an IndexModifier or IndexWriter + * in case it is currently locked. + * @type Number */ -helma.Search.Index.prototype.checkWriteLock = function() { - var interval = 500; - var timeout = 5000; - var isLocked = helma.Search.PKG.index.IndexReader.isLocked(this.getDirectory()); - if (isLocked) { - var elapsed = 0; - while (elapsed < timeout) { - java.lang.Thread.sleep(interval); - elapsed += interval; - isLocked = helma.Search.PKG.index.IndexReader.isLocked(this.getDirectory()); - if (!isLocked) - return; +helma.Search.Index.LOCK_TIMEOUT = 2000; + +/** + * Merges the indexes passed as argument into this one. + * @param {org.apache.lucene.store.Directory} dir At least one + * index director to add to this index. + */ +helma.Search.Index.prototype.addIndexes = function(dir /* [, dir[, dir...] */) { + var dirs = java.lang.reflect.Array.newInstance(helma.Search.PKG.store.Directory, + arguments.length); + for (var i=0;i 0) { + var arr = java.lang.reflect.Array.newInstance(PKG.SortField, this.sortFields.size()); + var sort = PKG.Sort(this.sortFields.toArray(arr)); + if (filter) { + hits = this.getSearcher().search(query.getQuery(), filter.getFilter(), sort); + } else { + hits = this.getSearcher().search(query.getQuery(), sort); + } + } else if (filter) { + hits = this.getSearcher().search(query.getQuery(), filter.getFilter()); + } else { + hits = this.getSearcher().search(query.getQuery()); + } + this.hits = new helma.Search.HitCollection(hits); + return this.hits.length(); +}; + +/** + * Sets a field as result sorting field. This method can be called + * with a different number of arguments: + * sortBy(fieldName) + * sortBy(fieldName, type) + * sortBy(fieldName, reverse) + * sortBy(fieldName, type, reverse) + * @param {String} fieldName The name of the field in the index by which + * the search result should be ordered. + * @param {String} type The type of the field defined by argument fieldName. + * Valid arguments are "string", "float", "int", "score", "doc", "auto", "custom". + * Default is "auto". See http://lucene.apache.org/java/docs/api/org/apache/lucene/search/SortField.html + * for an explanation. + */ +helma.Search.Searcher.prototype.sortBy = function(fieldName /** type, reverse */) { + var PKG = Packages.org.apache.lucene.search; + if (!this.sortFields) + this.sortFields = new java.util.Vector(); + var f = fieldName; + var t = PKG.SortField.AUTO; + var r = false; + if (arguments.length == 3) { + t = PKG.SortField[arguments[1].toUpperCase()]; + r = arguments[2]; + } else if (arguments.length == 2) { + if (arguments[1].constructor == Boolean) { + r = arguments[1]; + } else { + t = PKG.SortField[arguments[1].toUpperCase()]; + } + } + this.sortFields.add(new PKG.SortField(f, t, r)); + return; +}; + +/** + * Closes the wrapped IndexSearcher instance. + */ +helma.Search.Searcher.prototype.close = function() { + var s = this.getSearcher(); + if (s != null) { + s.close(); + } + return; +}; + +/** + * @class This class provides Helma-like methods for accessing + * a collection of search hits. + * @param {org.lucene.search.Hits} hits The hit collection returned + * by lucene. + * @constructor + */ +helma.Search.HitCollection = function(hits) { + /** + * Silently converts the hit at the given index position into + * an instance of helma.Search.Document. + * @param {Number} idx The index position of the hit + * @return The document object at the given index position + * @type helma.Search.Document + */ + this.get = function(idx) { + var doc = new helma.Search.Document(hits.doc(idx)); + doc.score = hits.score(idx); + doc.rank = idx +1; + return doc; }; - this.setBoost = function(fact) { - this.getQuery().setBoost(fact); - return; + + /** + * Returns the number of hits in this collection. + * @return The number of hits. + * @type Number + */ + this.size = this.length = function() { + return (hits != null) ? hits.length() : 0; }; + + return this; +}; + + +/************************** + * QUERY CONSTRUCTORS * + **************************/ + +/** + * @class Base class for the various query constructors. Don't + * call this directly, as it provides just basic methods used + * in all of its extends. + * @constructor + */ +helma.Search.Query = function() { + /** + * The wrapped query instance + * @type org.apache.lucene.search.Query + * @private + */ + this.query = null; + + return this; +}; + +/** + * Returns the wrapped Lucene Query object. + * @return The wrapped query object + * @type org.apache.lucene.search.Query + */ +helma.Search.Query.prototype.getQuery = function() { + return this.query; +}; + +/** @ignore */ +helma.Search.Query.prototype.toString = function(field) { + return "[" + this.getQuery().toString(field) + "]"; +}; + +/** + * Returns the boost factor of this query. + * @type Number + */ +helma.Search.Query.prototype.getBoost = function() { + return this.getQuery().getBoost(); +}; + +/** + * Sets the boost factor of this query clause to + * the given number. Documents matching this query + * will have their score multiplied with the given + * factor + * @param {Number} fact The factor to multiply the score + * of matching documents with. + */ +helma.Search.Query.prototype.setBoost = function(fact) { + this.getQuery().setBoost(fact); + return; }; /** * Term Query constructor - * @param String name of the field - * @param String query string - * @return Object TermQuery object + * @class This class represents a simple Term Query. + * @param {String} field The name of the field + * @param {String} str The value of the field + * @constructor + * @extends helma.Search.Query */ helma.Search.TermQuery = function(field, str) { - var t = new helma.Search.PKG.index.Term(field, str); - var wrappedQuery = new helma.Search.PKG.search.TermQuery(t); - - /** - * getter for wrapped java object - */ - this.getQuery = function() { - return wrappedQuery; - }; + var t = new Packages.org.apache.lucene.index.Term(field, str); + this.query = new Packages.org.apache.lucene.search.TermQuery(t); return this; }; -helma.Search.TermQuery.prototype = new helma.Search.QueryBase; +helma.Search.TermQuery.prototype = new helma.Search.Query; /** * Boolean Query constructor + * @class This class represents a Boolean Query, providing + * various methods for combining other Query instances using boolean operators. * @param String name of the field * @param String query string * @return Object BooleanQuery object + * @constructor + * @extends helma.Search.Query */ helma.Search.BooleanQuery = function(field, str, clause, analyzer) { - var wrappedQuery = new helma.Search.PKG.search.BooleanQuery(); + this.query = new Packages.org.apache.lucene.search.BooleanQuery(); /** - * getter for wrapped java object - */ - this.getQuery = function() { - return wrappedQuery; - }; - - /** - * directly call addTerm if constructor was - * called with arguments + * Main constructor body */ if (field && str) { this.addTerm.apply(this, arguments); @@ -641,40 +834,36 @@ helma.Search.BooleanQuery = function(field, str, clause, analyzer) { return this; }; -helma.Search.BooleanQuery.prototype = new helma.Search.QueryBase; +helma.Search.BooleanQuery.prototype = new helma.Search.Query; /** - * add a term to the wrappedQuery object. this method can be called + * Adds a term to the wrapped query object. This method can be called * with two, three or four arguments, eg.: * addTerm("fieldname", "querystring") * addTerm("fieldname", "querystring", "and") * addTerm("fieldname", "querystring", helma.Search.getAnalyzer("de")) * addTerm("fieldname", "querystring", "not", helma.Search.getAnalyzer("simple")) - * - * @param Object either a String or an Array containing Strings - * that determine the index field(s) to match - * @param String string to match - * @param String boolean clause ("or"|"not", default is "and") - * @param Object instance of analysis.Analyzer + * @param {String | Array} field Either a String or an Array containing Strings + * that determine the index field(s) to match + * @param {String} str Query string to match + * @param {String} clause Boolean clause ("or", "not" or "and", default is "and") + * @param {org.apache.lucene.analysis.Analyzer} analyzer An analyzer to use */ helma.Search.BooleanQuery.prototype.addTerm = function(field, str, clause, analyzer) { - if (arguments.length == 3 && arguments[2] instanceof helma.Search.PKG.analysis.Analyzer) { + if (arguments.length == 3 && arguments[2] instanceof Packages.org.apache.lucene.analysis.Analyzer) { analyzer = arguments[2]; clause = "or"; } - if (!analyzer) + if (!analyzer) { analyzer = helma.Search.getAnalyzer(); - - var q; - try { - if (field instanceof Array) - q = helma.Search.PKG.queryParser.MultiFieldQueryParser.parse(str, field, analyzer); - else - q = helma.Search.PKG.queryParser.QueryParser.parse(str, field, analyzer); - } catch (e) { - return; } + var q; + if (field instanceof Array) { + q = Packages.org.apache.lucene.queryParser.MultiFieldQueryParser.parse(str, field, analyzer); + } else { + q = Packages.org.apache.lucene.queryParser.QueryParser.parse(str, field, analyzer); + } switch (clause) { case "or": this.getQuery().add(q, false, false); @@ -689,10 +878,9 @@ helma.Search.BooleanQuery.prototype.addTerm = function(field, str, clause, analy }; /** - * "merge" a query object with a query object passed as - * argument - * @param Object Query object - * @param String boolean clause ("or"|"not", default is "and") + * Adds an additional query clause to this query. + * @param {helma.Search.Query} q The query to add + * @param {String} clause Boolean clause ("or", "not", or "and", default is "and") */ helma.Search.BooleanQuery.prototype.addQuery = function(q, clause) { switch (clause) { @@ -709,145 +897,128 @@ helma.Search.BooleanQuery.prototype.addQuery = function(q, clause) { }; /** - * Phrase Query constructor - * @param String name of the field - * @param String query string - * @return Object PhraseQuery object + * Constructs a new PhraseQuery instance that wraps a lucene Phrase + * Query object. + * @class Instances of this class represent a phrase query. + * @param {String} field The name of the field + * @param {String} str The phrase query string + * @return A newly created PhraseQuery instance + * @constructor + * @extends helma.Search.Query */ helma.Search.PhraseQuery = function(field, str) { - var wrappedQuery = new helma.Search.PKG.search.PhraseQuery(); + this.query = new Packages.org.apache.lucene.search.PhraseQuery(); /** * add a term to the end of the phrase query */ this.addTerm = function(field, str) { - var t = new helma.Search.PKG.index.Term(field, str); - wrappedQuery.add(t); + var t = new Packages.org.apache.lucene.index.Term(field, str); + this.query.add(t); return; }; - /** - * getter for wrapped java object - */ - this.getQuery = function() { - return wrappedQuery; - }; - if (field && str) this.addTerm(field, str); delete this.base; return this; }; -helma.Search.PhraseQuery.prototype = new helma.Search.QueryBase; +helma.Search.PhraseQuery.prototype = new helma.Search.Query; /** - * Range Query constructor - * @param String name of the field - * @param String min value (can be null) - * @param String max value (can be null) - * @param Boolean if true min/max values are included - * @return Obj JS wrapper object + * Constructs a new RangeQuery instance. + * @class Instances of this class represent a range + * query + * @param {String} field The name of the field + * @param {String} from The minimum value to match (can be null) + * @param {String} to The maximum value to match (can be null) + * @param {Boolean} inclusive If true the given min/max values are included + * @return A newly created RangeQuery instance + * @constructor + * @extends helma.Search.Query */ helma.Search.RangeQuery = function(field, from, to, inclusive) { if (!field) throw("Missing field name in RangeQuery()"); if (arguments.length < 4) inclusive = true; - var t1 = from ? new helma.Search.PKG.index.Term(field, from) : null; - var t2 = to ? new helma.Search.PKG.index.Term(field, to) : null; - var wrappedQuery = new helma.Search.PKG.search.RangeQuery(t1, t2, inclusive); - - /** - * getter for wrapped java object - */ - this.getQuery = function() { - return wrappedQuery; - }; - + var t1 = from ? new Packages.org.apache.lucene.index.Term(field, from) : null; + var t2 = to ? new Packages.org.apache.lucene.index.Term(field, to) : null; + this.query = new Packages.org.apache.lucene.search.RangeQuery(t1, t2, inclusive); return this; }; -helma.Search.RangeQuery.prototype = new helma.Search.QueryBase; +helma.Search.RangeQuery.prototype = new helma.Search.Query; /** - * Fuzzy Query constructor - * @param String name of the field - * @param String query string - * @return Object FuzzyQuery object + * Constructs a new FuzzyQuery instance + * @class Instances of this class represent a fuzzy query + * @param {String} field The name of the field + * @param {String} str The query string to match + * @return A newly created FuzzyQuery instance + * @constructor + * @extends helma.Search.Query */ helma.Search.FuzzyQuery = function(field, str) { - var t = new helma.Search.PKG.index.Term(field, str); - var wrappedQuery = new helma.Search.PKG.search.FuzzyQuery(t); - - /** - * getter for wrapped java object - */ - this.getQuery = function() { - return wrappedQuery; - }; - + var t = new Packages.org.apache.lucene.index.Term(field, str); + this.query = new Packages.org.apache.lucene.search.FuzzyQuery(t); return this; }; -helma.Search.FuzzyQuery.prototype = new helma.Search.QueryBase; +helma.Search.FuzzyQuery.prototype = new helma.Search.Query; /** - * Prefix Query constructor - * @param String name of the field - * @param String query string - * @return Object PrefixQuery object + * Constructs a new PrefixQuery instance. + * @class Instances of this class represent a prefix query + * @param {String} field The name of the field + * @param {String} str The query string to match + * @return A newly created PrefixQuery instance + * @constructor + * @extends helma.Search.Query */ helma.Search.PrefixQuery = function(field, str) { - var t = new helma.Search.PKG.index.Term(field, str); - var wrappedQuery = new helma.Search.PKG.search.PrefixQuery(t); - - /** - * getter for wrapped java object - */ - this.getQuery = function() { - return wrappedQuery; - }; - + var t = new Packages.org.apache.lucene.index.Term(field, str); + this.query = new Packages.org.apache.lucene.search.PrefixQuery(t); return this; }; -helma.Search.PrefixQuery.prototype = new helma.Search.QueryBase; +helma.Search.PrefixQuery.prototype = new helma.Search.Query; /** - * Wildcard Query constructor - * @param String name of the field - * @param String query string - * @return Object WildcardQuery object + * Constructs a new WildcardQuery instance. + * @class Instances of this class represent a wildcard query. + * @param {String} field The name of the field + * @param {String} str The query string to match + * @return A newly created WildcardQuery instance + * @constructor + * @extends helma.Search.Query */ helma.Search.WildcardQuery = function(field, str) { - var t = new helma.Search.PKG.index.Term(field, str); - var wrappedQuery = new helma.Search.PKG.search.WildcardQuery(t); - - /** - * getter for wrapped java object - */ - this.getQuery = function() { - return wrappedQuery; - }; - + var t = new Packages.org.apache.lucene.index.Term(field, str); + this.query = new Packages.org.apache.lucene.search.WildcardQuery(t); return this; }; -helma.Search.WildcardQuery.prototype = new helma.Search.QueryBase; +helma.Search.WildcardQuery.prototype = new helma.Search.Query; -/////////////////////////////////////////// -// Document -/////////////////////////////////////////// +/**************** + * DOCUMENT * + ****************/ + /** - * constructor function for Document objects that wrap - * a Lucene Document object - * @param Object (optional) Lucene Document object + * @class Instances of this class represent a single + * index document. This class provides various methods for + * adding content to such documents. + * @param {org.apache.lucene.document.Document} document Optional Lucene Document object + * that should be wrapped by this Document instance. + * @constructor */ helma.Search.Document = function(document) { if (!document) - document = new helma.Search.PKG.document.Document(); + document = new Packages.org.apache.lucene.document.Document(); /** - * return the Lucene Document object wrapped - * by this javascript Document object + * Returns the wrapped Lucene Document object + * @return The wrapped Document object + * @type org.apache.lucene.document.Document */ this.getDocument = function() { return document; @@ -857,77 +1028,77 @@ helma.Search.Document = function(document) { }; /** - * adds a field to this document. - * @param String Name of the field - * @param String Value of the field - * @param Object Parameter object (optional) containing - * the following properties: - * .store (Boolean) - * .index (Boolean) - * .tokenize (Boolean) + * Adds a field to this document. + * @param {String} name The name of the field + * @param {String} value The value of the field + * @param {Object} param Optional parameter object containing the following properties: + *

    */ helma.Search.Document.prototype.addField = function(name, value, param) { - if (!param) - param = {store: true, index: true, tokenize: true}; - if (value === null) - value = ""; - // if value is a date convert it - if (value instanceof Date) - value = helma.Search.PKG.document.DateField.timeToString(value.getTime()); - var f = new helma.Search.PKG.document.Field(String(name), - String(value), - param.store, - param.index, - param.tokenize); - this.getDocument().add(f); + if (!param) { + param = {}; + } + if (value != null) { + var pkg = Packages.org.apache.lucene.document; + if (value.constructor == Date) { + // Convert the value + value = pkg.DateTools.timeToString(value.getTime(), + pkg.DateTools.Resolution.MINUTE); + } else if (value.constructor != String) { + value = String(value); + } + var f = new pkg.Field(String(name), + value, + param.store || true, + param.index || true, + param.tokenize || true); + this.getDocument().add(f); + } return; }; /** - * return a single document field - * @param String name of the field - * @return Object containing the following parameters: - * .name (String) name of the Field - * .boost (Int) boost factor - * .indexed (Boolean) true if Field is indexed, false otherwise - * .stored (Boolean) true if Field is stored, false otherwise - * .tokenized (Boolean) true if Field is tokenized, false otherwise - * .value (String) value of the Field + * Returns a single document field. + * @param {String} name The name of the field in this document object. + * @return An object containing the following properties: + *
      + *
    • .name (String) The name of the field
    • + *
    • .boost (Int) The boost factor
    • + *
    • .indexed (Boolean) True if the field is indexed, false otherwise
    • + *
    • .stored (Boolean) True if the field is stored, false otherwise
    • + *
    • .tokenized (Boolean) True if the field is tokenized, false otherwise
    • + *
    • .value (String) The value of the field
    • + *
    + * @type Object */ helma.Search.Document.prototype.getField = function(name) { var f = this.getDocument().getField(name); if (f != null) { - return ({name: name, - boost: f.getBoost(), - indexed: f.isIndexed(), - stored: f.isStored(), - tokenized: f.isTokenized(), - value: f.stringValue()}); - } else { - return null; + var result = {name: name, + boost: f.getBoost(), + indexed: f.isIndexed(), + stored: f.isStored(), + tokenized: f.isTokenized(), + value: null}; + try { + var pkg = Packages.org.apache.lucene.document.DateTools; + result.value = pkg.stringToDate(f.stringValue()); + } catch (e) { + result.value = f.stringValue(); + } + return result; } + return null; }; /** - * return a single document field as Date Object - * @param String name of the field - */ -helma.Search.Document.prototype.getDateField = function(name) { - var f = this.getDocument().getField(name); - if (f != null) { - return ({name: name, - boost: f.getBoost(), - indexed: f.isIndexed(), - stored: f.isStored(), - tokenized: f.isTokenized(), - value: new Date(helma.Search.PKG.document.DateField.stringToTime(f.stringValue()))}); - } else { - return null; - } -}; - -/** - * return the fields of a document + * Returns the fields of a document object. + * @return An array containing all fields in this document object. + * @type Array */ helma.Search.Document.prototype.getFields = function() { var e = this.getDocument().fields(); @@ -939,28 +1110,33 @@ helma.Search.Document.prototype.getFields = function() { }; /** - * returns the boost factor of a document + * Returns the boost factor of a document. + * @return The boost factor of a document + * @type Number */ helma.Search.Document.prototype.getBoost = function() { return this.getDocument().getBoost(); }; /** - * sets the boost factor of a document + * Sets the boost factor of a document. + * @param {Number} boost The boost factor of the document */ helma.Search.Document.prototype.setBoost = function(boost) { this.getDocument().setBoost(boost); return; }; +/** @ignore */ helma.Search.Document.prototype.toString = function() { return "[Document Object]"; }; -/////////////////////////////////////////// -// helma library stuff -/////////////////////////////////////////// +/*************************** + * HELMA LIBRARY STUFF * + ***************************/ + helma.lib = "Search"; helma.dontEnum(helma.lib); From bb0aebb02f05963bfdf75343f0db94539c08215a Mon Sep 17 00:00:00 2001 From: grob Date: Fri, 29 Sep 2006 13:51:37 +0000 Subject: [PATCH 093/217] updated lucene from 1.4.3 to 1.9.1 --- helma/lucene-analyzers.jar | Bin 0 -> 59080 bytes helma/lucene-core.jar | Bin 0 -> 416118 bytes helma/lucene.jar | Bin 323983 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 helma/lucene-analyzers.jar create mode 100644 helma/lucene-core.jar delete mode 100644 helma/lucene.jar diff --git a/helma/lucene-analyzers.jar b/helma/lucene-analyzers.jar new file mode 100644 index 0000000000000000000000000000000000000000..5d2f55630cb51ba3eeeccb3fb310c25fa8454c62 GIT binary patch literal 59080 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 literal 0 HcmV?d00001 diff --git a/helma/lucene-core.jar b/helma/lucene-core.jar new file mode 100644 index 0000000000000000000000000000000000000000..eed7e57a9ecc18d88459ce515304bd97d2c168cf GIT binary patch literal 416118 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

    s#*LaQOm{mG@LYHdJ88 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