diff options
author | allen <allen@1faa4e14-9dd3-4be0-9f0e-ffe519881164> | 2000-09-21 16:06:47 +0000 |
---|---|---|
committer | allen <allen@1faa4e14-9dd3-4be0-9f0e-ffe519881164> | 2000-09-21 16:06:47 +0000 |
commit | 9315ef0ed2bf451757ce32a9959c6a0f0aa3ed7e (patch) | |
tree | 763ceffdea0babf663ebbc2192a782ccc7e18b10 | |
parent | 0fef9f4b00faf1b635e05d5945e634740cd4fad6 (diff) |
Made a separate file for Parameters.
Added an "On-Line" section at the bottom of the Menu (below any added
in stuff from pages) which goes to the Cactus Homepage, the User Guide,
and the Help Desk
Added a little gif, not sure if I've improved the footer or not with that.
G.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusConnect/HTTPD/trunk@79 1faa4e14-9dd3-4be0-9f0e-ffe519881164
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | src/Content.c | 513 | ||||
-rw-r--r-- | src/Headers.c | 22 | ||||
-rw-r--r-- | src/Parameters.c | 573 | ||||
-rw-r--r-- | src/images/www.h | 307 | ||||
-rw-r--r-- | src/make.code.defn | 2 |
6 files changed, 922 insertions, 497 deletions
@@ -163,6 +163,8 @@ Content.c Groups.c +Parameters.c + This makes use of the interfaces in http_Request.h described above to provide content. In principle this could be in another thorn, but that should wait until we have an agreed set of interfaces to allow diff --git a/src/Content.c b/src/Content.c index 591e44d..fd27c6c 100644 --- a/src/Content.c +++ b/src/Content.c @@ -67,11 +67,8 @@ struct httpLink static int RegisterImages(void); -static int RegisterParameterPages(void); static int MainPage(cGH *cctkGH, httpRequest *request, void *data); static int AboutPage(cGH *cctkGH, httpRequest *request, void *data); -static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data); -static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data); static int ShowStaticPage(cGH *cctkGH, httpRequest *request, void *data); @@ -88,6 +85,7 @@ static int CookieTestPage(cGH *cctkGH, httpRequest *request, void *data); ********************************************************************/ int HTTPi_RegisterGroupsPages(void); +int HTTPi_RegisterParameterPages(void); /******************************************************************** @@ -96,6 +94,10 @@ int HTTPi_RegisterGroupsPages(void); struct httpLink *ContentLinks = NULL; +static const char *notauthorized_page = +"<HTML>\n<HEAD><TITLE>Error 401: Not Authorized</TITLE></HEAD>\ +<BODY>You are not authorized to access this page</BODY>\n<HTML>\n"; + #define USER_LENGTH 255 /******************************************************************** @@ -152,7 +154,7 @@ int HTTP_RegisterPages(void) /* Register parameter stuff */ - RegisterParameterPages(); + HTTPi_RegisterParameterPages(); /* Register parameter control stuff. */ @@ -495,497 +497,12 @@ static int MainPage(cGH *cctkGH, httpRequest *request, void *data) return retval; } - -/****************************************************************************** - ***************************** Parameter Pages ******************************** - ******************************************************************************/ - - -static int RegisterParameterPages(void) -{ - int i; - const char *thorn; - char pagename[27+20]; /* Thorns have maximum length */ - char *namecopy; - - /* Two ways to do this - can either just have one function - * registered as /Parameters which then checks request->residual, - * to see what the actual accessed page is, or can register a - * main page and one for each thorn. - * Choose the latter for the mo to keep functions smaller, and also - * since the compiled thorn list is static at the moment. - */ - - HTTP_RegisterPage("/Parameters/index.html", MainParameterPage, NULL); - - HTTP_ContentLink("/Parameters/index.html", "Parameters", - "Parameter Information and Control", - HTTP_QUICKLINK); - - for (i = 0; i < CCTK_NumCompiledThorns (); i++) - { - thorn = CCTK_CompiledThorn(i); - - sprintf(pagename,"/Parameters/%s", thorn); - - namecopy = Util_Strdup(thorn); - - HTTP_RegisterPage(pagename, ThornParameterPage, namecopy); - } - - return 0; -} - - - - /*@@ - @routine MainParameterPage - @date Wed Sep 13 23:47:43 2000 - @author Tom Goodale - @desc - Displays the parameter page. - @enddesc - @calls - @calledby - @history - @hdate Sat Sep 16 15:13:16 2000 @hauthor Tom Goodale - @hdesc Copied content format from original http thorn - developed by Werner Benger, with the aesthetic - enhancements of Gabrielle Allen, John Shalf and - Ed Seidel. - @endhistory -@@*/ -static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data) -{ - int retval; - char message[4098]; - int i; - const char *thorn; - - /* Status message */ - strcpy(message,"HTTP/1.0 200 OK\r\n"); - - HTTP_Write(request, message, strlen(message)); - - /* Content-Type */ - strcpy(message,"Content-Type: text/html\r\n\r\n"); - - HTTP_Write(request, message, strlen(message)); - - /* Start the page */ - strcpy(message, "<HTML><HEAD><TITLE>Cactus Parameters Request</TITLE>\n"); - HTTP_Write(request, message, strlen(message)); - - strcpy(message,"<HTML>\n"); - HTTP_Write(request, message, strlen(message)); - - HTTP_ContentHeader(cctkGH,0,4098,message,NULL); - HTTP_Write(request, message, strlen(message)); - - strcpy(message, "<center>"); - HTTP_Write(request, message, strlen(message)); - - strcpy(message, - "<center><H1>Check/Modify Parameters</H1></center>\n" - "</center><p>From this page you can check the values \n" - "of all parameters for the \n" - "simulation, and modify any parameters which have been designated as <i>steerable</i></p>\n" - "<p>Parameters can be viewed for all <i>Active Thorns</i>, that is, for thorns which \n" - "have been activated in the parameter file for the simulation. \n" - "Select one of the active thorns for this simulation from the list below to \n" - "view all of its parameters</p>\n" - "<p>Steerable parameters can be identified by the presence of a form input box, \n" - "to change the value of a parameter, simply edit the value in the box and press \n" - " the submit button to register the new values.</p><center>\n" - "<table cellspacing=5 border=0\n>" - "<tr><td><b>Thorn Name</b></td><td><b>Implementation</b></td></tr>\n"); - - HTTP_Write(request, message, strlen(message)); - - for (i = 0; i < CCTK_NumCompiledThorns (); i++) - { - thorn = CCTK_CompiledThorn (i); - - if (CCTK_IsThornActive (thorn)) - { - sprintf(message, - "<tr><td valign=top><A HREF=\"/Parameters/%s/\">%s</A></td>\n" - "<td valign=top>%s</td></tr>", - thorn, thorn,CCTK_ThornImplementation(thorn)); - HTTP_Write(request, message, strlen(message)); - - } - } - - strcpy(message,"</table></center>"); - HTTP_Write(request, message, strlen(message)); - - /* Write out the footer part. */ - - HTTP_ContentFooter(cctkGH, 0, 4098, message); - retval = HTTP_Write(request, message, strlen(message)); - - return retval; -} - -static const char *notauthorized_page = -"<HTML>\n<HEAD><TITLE>Error 401: Not Authorized</TITLE></HEAD>\ -<BODY>You are not authorized to access this page</BODY>\n<HTML>\n"; - - /*@@ - @routine ThornParameterPage - @date Sat Sep 16 15:13:55 2000 - @author Tom Goodale - @desc - Parameter page for a thorn. - Checks to see if it is a setting request or - an info request and behaves accordingly. - - Copied content format from original http thorn - developed by Werner Benger, with the aesthetic - enhancements of Gabrielle Allen, John Shalf and - Ed Seidel. - - @enddesc - @calls - @calledby - @history - - @endhistory - -@@*/ -static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data) -{ - int retval=0; - int i; - char message[4098]; - char menu[4098]; - const char *thorn, *menuthorn; - int first; - const cParamData *pData; - char *value; - const httpArg *argument; - char user[USER_LENGTH+1]; - - int notauthorised; - int readonly; - - int param_type; - int param_bool; - int nsteerable=0; - int nfixed=0; - - thorn = (const char *)data; - - notauthorised = HTTP_AuthenticateBasic(request, "user", user, USER_LENGTH); - - readonly = notauthorised; - - if(request->n_arguments > 0) - { - /* This is a parameter set request */ - - if(!notauthorised) - { - if(!readonly) - { - /* Queue parameters for steering */ - first = 1; - while(argument = HTTP_ArgumentWalk(request, first)) - { - first = 0; - fprintf(stderr, "Setting %s::%s to %s\n", thorn, argument->arg, argument->value); - HTTP_SteerQueue(thorn, argument->arg, argument->value); - } - - /* Now redirect the browser to the normal page */ - /* Status message */ - if(request->http_major_version < 1 || - (request->http_major_version == 1 && request->http_minor_version < 1)) - { - /* Older browsers don't understand 303 */ - strcpy(message,"HTTP/1.0 302 Found\r\n"); - } - else - { - strcpy(message,"HTTP/1.0 303 See Other\r\n"); - } - - sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn); - - HTTP_Write(request, message, strlen(message)); - } - else - { - /* Redirect the browser to the normal page */ - /* Status message */ - if(request->http_major_version < 1 || - (request->http_major_version == 1 && request->http_minor_version < 1)) - { - /* Older browsers don't understand 303 */ - strcpy(message,"HTTP/1.0 302 Found\r\n"); - } - else - { - strcpy(message,"HTTP/1.0 303 See Other\r\n"); - } - - sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn); - - HTTP_Write(request, message, strlen(message)); - } - } - else - { - strcpy(message,"HTTP/1.0 401 Unauthorized\r\n"); - - HTTP_Write(request, message, strlen(message)); - - strcpy(message,"WWW-Authenticate: Basic realm=\"foo\"\r\n"); - - HTTP_Write(request, message, strlen(message)); - - strcpy(message,"Content-Type: text/html\r\n\r\n"); - - HTTP_Write(request, message, strlen(message)); - - HTTP_Write(request, notauthorized_page, strlen(notauthorized_page)); - } - - } - else - { - /* Display the page. */ - /* Status message */ - strcpy(message,"HTTP/1.0 200 OK\r\n"); - - HTTP_Write(request, message, strlen(message)); - - /* Content-Type */ - strcpy(message,"Content-Type: text/html\r\n\r\n"); - - HTTP_Write(request, message, strlen(message)); - - /* Start the page */ - sprintf(message, - "<HTML><HEAD><TITLE>Cactus Parameters Request : %s</TITLE></HEAD>\n", thorn); - - HTTP_Write(request, message, strlen(message)); - - if (CCTK_NumCompiledThorns()>0) - { - strcpy(menu,"<dt><b>Parameters:</b>\n"); - } - /* Menu for this page */ - for (i = 0; i < CCTK_NumCompiledThorns (); i++) - { - menuthorn = CCTK_CompiledThorn (i); - if (CCTK_IsThornActive (menuthorn)) - { - sprintf(menu, - "%s <dt> <A HREF=\"/Parameters/%s/\">%s</A>\n", - menu,menuthorn, menuthorn); - } - } - HTTP_ContentHeader(cctkGH,0,4098,message,menu); - strcat(message,"<BODY>"); - HTTP_Write(request, message, strlen(message)); - - if (!CCTK_IsThornActive(thorn)) - { - sprintf(message,"<B> Thorn %s is not active !!!</B><BR>\n",thorn); - HTTP_Write(request, message, strlen(message)); - } - else - { - /* Send table of available parameters for given thorn */ - /* Steerable parameters can be edited in a FORM. */ - sprintf(message, - "<center><H1>Check/Modify Parameters</H1>" - "<H2>Thorn %s</H2></center>\n", - thorn); - strcat(message, - "<p>Parameters in Cactus can be either <i>fixed</i> or <i>steerable</i>. " - "Steerable parameters are those which can be modified during a " - "simulation" - "To change steerable parameters, edit the values and press \n" - " the submit button." - "Before applying the new parameter value, Cactus will check that" - " the parameter lies in the allowed range. Note that there" - " is currently no log of parameters which have been modified.</p>\n" - "<p>The tables below show the parameter name, current value and description." - "The default value of each parameter is shown in brackets at the end of the description.</p>" - "<center><p><a href=\"../\">View parameters from another thorn</a></p>\n"); - - HTTP_Write(request, message, strlen(message)); - - if(!readonly ) - { - sprintf(message,"<FORM ACTION=\"/Parameters/%s/\">",thorn); - HTTP_Write(request, message, strlen(message)); - } - - /* Walk through all steerable parameters of given implementation. */ - first = 1; - - while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0) - { - first = 0; - strcpy(message,""); - - value = CCTK_ParameterValString (pData->name, pData->thorn); - if(value) - { - if (pData->steerable == CCTK_STEERABLE_ALWAYS) - { - - if (nsteerable == 0) - { - strcat(message,"<h2>Steerable Parameters</h2>"); - if (readonly) - { - strcat(message,"<p><i>The following parameters are steerable, " - "but you do not have authorisation to change them. " - "To change parameters you must first register on the " - "<a href=\"/control.html\">Simulation Control Page</a>." - "</i></p>"); - } - strcat(message,"<table cellpadding=5 cellspacing=5>"); - } - nsteerable++; - - if (!readonly) - { - if (pData->type == PARAMETER_BOOLEAN) - { - param_bool = - *((CCTK_INT *)CCTK_ParameterGet(pData->name,thorn,¶m_type)); - sprintf(message, - "%s<TR><TD align=left valign=center>%s</TD>" - "<TD align=left valign=center>" - "Yes <INPUT type=\"radio\" name=\"%s\" %s value=\"1\">" - " No <INPUT type=\"radio\" name=\"%s\" %s value=\"0\">" - "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n", - message,pData->name,pData->name, - param_bool ? "checked" : "", pData->name, - param_bool ? "" : "checked",pData->description,pData->defval); - } - else - { - sprintf(message, - "%s<TR><TD align=left valign=center>%s</TD>" - "<TD align=left valign=center>" - "<INPUT TYPE=TEXT NAME=\"%s\" VALUE=\"%s\">" - "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n", - message, pData->name, pData->name, - value, pData->description,pData->defval); - } - } - else - { - sprintf(message, - "%s<TR><TD align=left valign=center>%s</TD>" - "<TD align=left valign=center>%s</TD><TD>" - "<SMALL>%s (%s)</SMALL></TR>\n", - message, pData->name, pData->name, - value, pData->description,pData->defval); - } - } - free (value); - } - HTTP_Write(request, message, strlen(message)); - - } - - printf("nsteerable is %d\n",nsteerable); - if (nsteerable>0) - { - strcpy(message, "</TABLE>\n"); - } - else - { - strcpy(message, "<p>This thorn has no steerable parameters.</p>\n"); - } - HTTP_Write(request, message, strlen(message)); - - if(!readonly && nsteerable>0) - { - strcpy(message, - "<INPUT TYPE=SUBMIT VALUE=\"Update all parameters\">\n" - "</FORM>\n"); - HTTP_Write(request, message, strlen(message)); - } - - - /* Walk through non-all steerable parameters of given implementation. */ - first = 1; - - while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0) - { - first = 0; - strcpy(message,""); - - value = CCTK_ParameterValString (pData->name, pData->thorn); - if(value) - { - if (!(pData->steerable == CCTK_STEERABLE_ALWAYS && !readonly)) - { - - if (nfixed == 0) - { - strcat(message,"<h2>Fixed Parameters</h2>" - "<table cellpadding=5 cellspacing=5>"); - } - nfixed++; - - /* FIXME: This is a hack - should put in parameter tags. */ - if(strcmp(thorn,CCTK_THORNSTRING) || - (strcmp(pData->name,"user") && - strcmp(pData->name,"password") && - strcmp(pData->name,"encryption_scheme"))) - { - sprintf(message, - "%s<TR><TD align=left valign=center>%s</TD>" - "<TD>%s</TD><TD><SMALL>%s (%s)</SMALL></TD></TR>\n", - message,pData->name, value, pData->description,pData->defval); - } - } - free(value); - } - HTTP_Write(request, message, strlen(message)); - - } - - if (nfixed>0) - { - strcpy(message, "</TABLE>\n"); - } - else - { - strcpy(message, "<p>This thorn has no fixed parameters.</p>\n"); - } - HTTP_Write(request, message, strlen(message)); - - } - - strcpy(message,"</center>"); - - HTTP_Write(request, message, strlen(message)); - - /* Write out the footer part. */ - - HTTP_ContentFooter(cctkGH, 0, 4098, message); - retval = HTTP_Write(request, message, strlen(message)); - } /* n_arguments > 0 */ - - return retval; -} - /****************************************************************************** ***************************** Images ***************************************** ******************************************************************************/ #include "images/wwwcactuscodeorg.h" +#include "images/www.h" /*@@ @routine RegisterImages @@ -1006,8 +523,9 @@ static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data) static int RegisterImages(void) { struct httpStaticPage *image; + struct httpStaticPage *image2; - image = (struct httpStaticPage *)malloc(sizeof(struct httpStaticPage)); + image = (struct httpStaticPage *)malloc(sizeof(struct httpStaticPage)); if(image) { @@ -1024,6 +542,19 @@ static int RegisterImages(void) HTTP_RegisterPage("/Images/wwwcactuscodeorg.jpg", ShowStaticPage, (void *)image); } + image2 = (struct httpStaticPage *)malloc(sizeof(struct httpStaticPage)); + + if(image2) + { + image2->page = (char *)malloc(sizeof(www)); + memcpy(image2->page, www, sizeof(www)); + image2->length = sizeof(www); + image2->mime_type = (char *)malloc(strlen("image/gif")+1); + strcpy(image2->mime_type, "image/gif"); + + HTTP_RegisterPage("/Images/www.gif", ShowStaticPage, (void *)image2); + } + return 0; } diff --git a/src/Headers.c b/src/Headers.c index 95b3f93..d85bc36 100644 --- a/src/Headers.c +++ b/src/Headers.c @@ -64,10 +64,10 @@ static const char *cactus_footer = "<tr><td align=left valign=top>" "<ADDRESS><DIV ALIGN=left>\n" "<SMALL>\n" -"<A HREF=\"http://www.cactuscode.org/\">Cactus Home Page</A><BR>\n" -"Cactus Web Interface by <A HREF=\"mailto:cactusmaint@cactuscode.org\">The Cactus Team</A><BR>\n" +"<A HREF=\"www.cactuscode.org\"><IMG SRC=\"/Images/www.gif\" BORDER=0></A><BR>\n" "</SMALL></DIV></ADDRESS>" "</TD><TD ALIGN=RIGHT VALIGN=TOP><SMALL>" +"Cactus Web Interface by <A HREF=\"mailto:cactusmaint@cactuscode.org\">The Cactus Team</A><BR>\n" "<A HREF=\"/About.html\"><i>About this Server</i></A>" "</SMALL></TD></TR></TABLE>" "</BODY></HTML>\n"; @@ -126,8 +126,8 @@ int HTTP_ContentHeader(cGH *GH, int choice, int len, char *header, char *menu) sprintf( header, "</HEAD>\n<BODY BGCOLOR=\"#FFFFFF\" link=\"#1B831D\" " "vlink=\"#768000\" alink=\"#00FF00\">\n" - "<center>\n<table cellpadding=10 width=100%% border=0>\n" - "<tr>\n<td bgcolor=#E5FFA2 valign=top align=left width=20%%>\n"); + "<center>\n<table cellpadding=10 width=100%% border=0>\n" + "<tr>\n<td bgcolor=#E5FFA2 valign=top align=left width=20%%>\n"); strcat(header, "<A HREF=\"/\">Master Run Page</A>\n"); sprintf(header,"%s\n" "<small><dl>" @@ -136,7 +136,9 @@ int HTTP_ContentHeader(cGH *GH, int choice, int len, char *header, char *menu) "<dt>Date: %s" "</dl></small>", header,currenttime,currentdate); - sprintf(header,"%s <small><dl><dt><b>Simulation:</b>" + sprintf(header, + "%s <small><dl>" + "<dt><b>Simulation:</b>" "<dt><i>%s</i>" "<dt>Iteration: %d" "<dt>Physical time: %4.2f" @@ -155,6 +157,16 @@ int HTTP_ContentHeader(cGH *GH, int choice, int len, char *header, char *menu) strcat(header,"</dt></small>"); } + /* Online links */ + sprintf(header,"%s\n" + "<small><dl>" + "<dt><b>On-Line:</b>" + "<dt><A HREF=\"http://www.cactuscode.org\">Cactus Homepage</A>" + "<dt><A HREF=\"http://www.cactuscode.org/Documentation/UsersGuide/\">Users Guide</A>" + "<dt><A HREF=\"mailto:cactusmaint@cactuscode.org\">Cactus Helpdesk</A>\n" + "</dl></small>", + header,currenttime,currentdate); + strcat(header,"</td><td valign=top>\n"); } else diff --git a/src/Parameters.c b/src/Parameters.c new file mode 100644 index 0000000..261641b --- /dev/null +++ b/src/Parameters.c @@ -0,0 +1,573 @@ + /*@@ + @file Parameters.c + @date Wed Sep 13 23:47:43 2000 + @author Tom Goodale + @desc + Files for displaying and steering parameters + @enddesc + @version $Header$ + @@*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#include "cctk.h" + +#include "cctk_Parameter.h" +#include "cctk_ActiveThorns.h" + +#include "util_String.h" + +#include "http_Request.h" + +#include "http_Auth.h" +#include "http_Steer.h" +#include "http_Cookies.h" + +#include "http_Content.h" + +#include "cctk_Arguments.h" +#include "cctk_Parameters.h" + +static char *rcsid = "$Header$"; + +CCTK_FILEVERSION(DevThorns_httpd_Parameters_c) + +/******************************************************************** + ********************* Local Data Types *********************** + ********************************************************************/ + +/******************************************************************** + ********************* Local Routine Prototypes ********************* + ********************************************************************/ + +static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data); +static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data); + + +/******************************************************************** + ********************* Other Routine Prototypes ********************* + ********************************************************************/ + + +/******************************************************************** + ********************* Local Data ***************************** + ********************************************************************/ + +static const char *notauthorized_page = +"<HTML>\n<HEAD><TITLE>Error 401: Not Authorized</TITLE></HEAD>\ +<BODY>You are not authorized to access this page</BODY>\n<HTML>\n"; + + +#define USER_LENGTH 255 +/******************************************************************** + ********************* External Routines ********************** + ********************************************************************/ + + /*@@ + @routine HTTPi_RegisterParameterPages + @date Wed Sep 13 23:47:43 2000 + @author Tom Goodale + @desc + Main page registration routine. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +int HTTPi_RegisterParameterPages(void) +{ + DECLARE_CCTK_PARAMETERS + + int i; + const char *thorn; + char pagename[27+20]; /* Thorns have maximum length */ + char *namecopy; + + /* Two ways to do this - can either just have one function + * registered as /Parameters which then checks request->residual, + * to see what the actual accessed page is, or can register a + * main page and one for each thorn. + * Choose the latter for the mo to keep functions smaller, and also + * since the compiled thorn list is static at the moment. + */ + + HTTP_RegisterPage("/Parameters/index.html", MainParameterPage, NULL); + + HTTP_ContentLink("/Parameters/index.html", "Parameters", + "Parameter Information and Control", + HTTP_QUICKLINK); + + for (i = 0; i < CCTK_NumCompiledThorns (); i++) + { + thorn = CCTK_CompiledThorn(i); + + sprintf(pagename,"/Parameters/%s", thorn); + + namecopy = Util_Strdup(thorn); + + HTTP_RegisterPage(pagename, ThornParameterPage, namecopy); + } + + return 0; +} + + +/******************************************************************** + ********************* Local Routines ************************* + ********************************************************************/ + + +/****************************************************************************** + ***************************** Parameter Pages ******************************** + ******************************************************************************/ + + + /*@@ + @routine MainParameterPage + @date Wed Sep 13 23:47:43 2000 + @author Tom Goodale + @desc + Displays the parameter page. + @enddesc + @calls + @calledby + @history + @hdate Sat Sep 16 15:13:16 2000 @hauthor Tom Goodale + @hdesc Copied content format from original http thorn + developed by Werner Benger, with the aesthetic + enhancements of Gabrielle Allen, John Shalf and + Ed Seidel. + @endhistory +@@*/ +static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data) +{ + int retval; + char message[4098]; + int i; + const char *thorn; + + /* Status message */ + strcpy(message,"HTTP/1.0 200 OK\r\n"); + + HTTP_Write(request, message, strlen(message)); + + /* Content-Type */ + strcpy(message,"Content-Type: text/html\r\n\r\n"); + + HTTP_Write(request, message, strlen(message)); + + /* Start the page */ + strcpy(message, "<HTML><HEAD><TITLE>Cactus Parameters Request</TITLE>\n"); + HTTP_Write(request, message, strlen(message)); + + strcpy(message,"<HTML>\n"); + HTTP_Write(request, message, strlen(message)); + + HTTP_ContentHeader(cctkGH,0,4098,message,NULL); + HTTP_Write(request, message, strlen(message)); + + strcpy(message, "<center>"); + HTTP_Write(request, message, strlen(message)); + + strcpy(message, + "<center><H1>Check/Modify Parameters</H1></center>\n" + "</center><p>From this page you can check the values \n" + "of all parameters for the \n" + "simulation, and modify any parameters which have been designated as <i>steerable</i></p>\n" + "<p>Parameters can be viewed for all <i>Active Thorns</i>, that is, for thorns which \n" + "have been activated in the parameter file for the simulation. \n" + "Select one of the active thorns for this simulation from the list below to \n" + "view all of its parameters</p>\n" + "<p>Steerable parameters can be identified by the presence of a form input box, \n" + "to change the value of a parameter, simply edit the value in the box and press \n" + " the submit button to register the new values.</p><center>\n" + "<table cellspacing=5 border=0\n>" + "<tr><td><b>Thorn Name</b></td><td><b>Implementation</b></td></tr>\n"); + + HTTP_Write(request, message, strlen(message)); + + for (i = 0; i < CCTK_NumCompiledThorns (); i++) + { + thorn = CCTK_CompiledThorn (i); + + if (CCTK_IsThornActive (thorn)) + { + sprintf(message, + "<tr><td valign=top><A HREF=\"/Parameters/%s/\">%s</A></td>\n" + "<td valign=top>%s</td></tr>", + thorn, thorn,CCTK_ThornImplementation(thorn)); + HTTP_Write(request, message, strlen(message)); + + } + } + + strcpy(message,"</table></center>"); + HTTP_Write(request, message, strlen(message)); + + /* Write out the footer part. */ + + HTTP_ContentFooter(cctkGH, 0, 4098, message); + retval = HTTP_Write(request, message, strlen(message)); + + return retval; +} + + /*@@ + @routine ThornParameterPage + @date Sat Sep 16 15:13:55 2000 + @author Tom Goodale + @desc + Parameter page for a thorn. + Checks to see if it is a setting request or + an info request and behaves accordingly. + + Copied content format from original http thorn + developed by Werner Benger, with the aesthetic + enhancements of Gabrielle Allen, John Shalf and + Ed Seidel. + + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data) +{ + int retval=0; + int i; + char message[4098]; + char menu[4098]; + const char *thorn, *menuthorn; + int first; + const cParamData *pData; + char *value; + const httpArg *argument; + char user[USER_LENGTH+1]; + + int notauthorised; + int readonly; + + int param_type; + int param_bool; + int nsteerable=0; + int nfixed=0; + + thorn = (const char *)data; + + notauthorised = HTTP_AuthenticateBasic(request, "user", user, USER_LENGTH); + + readonly = notauthorised; + + if(request->n_arguments > 0) + { + /* This is a parameter set request */ + + if(!notauthorised) + { + if(!readonly) + { + /* Queue parameters for steering */ + first = 1; + while(argument = HTTP_ArgumentWalk(request, first)) + { + first = 0; + fprintf(stderr, "Setting %s::%s to %s\n", thorn, argument->arg, argument->value); + HTTP_SteerQueue(thorn, argument->arg, argument->value); + } + + /* Now redirect the browser to the normal page */ + /* Status message */ + if(request->http_major_version < 1 || + (request->http_major_version == 1 && request->http_minor_version < 1)) + { + /* Older browsers don't understand 303 */ + strcpy(message,"HTTP/1.0 302 Found\r\n"); + } + else + { + strcpy(message,"HTTP/1.0 303 See Other\r\n"); + } + + sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn); + + HTTP_Write(request, message, strlen(message)); + } + else + { + /* Redirect the browser to the normal page */ + /* Status message */ + if(request->http_major_version < 1 || + (request->http_major_version == 1 && request->http_minor_version < 1)) + { + /* Older browsers don't understand 303 */ + strcpy(message,"HTTP/1.0 302 Found\r\n"); + } + else + { + strcpy(message,"HTTP/1.0 303 See Other\r\n"); + } + + sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn); + + HTTP_Write(request, message, strlen(message)); + } + } + else + { + strcpy(message,"HTTP/1.0 401 Unauthorized\r\n"); + + HTTP_Write(request, message, strlen(message)); + + strcpy(message,"WWW-Authenticate: Basic realm=\"foo\"\r\n"); + + HTTP_Write(request, message, strlen(message)); + + strcpy(message,"Content-Type: text/html\r\n\r\n"); + + HTTP_Write(request, message, strlen(message)); + + HTTP_Write(request, notauthorized_page, strlen(notauthorized_page)); + } + + } + else + { + /* Display the page. */ + /* Status message */ + strcpy(message,"HTTP/1.0 200 OK\r\n"); + + HTTP_Write(request, message, strlen(message)); + + /* Content-Type */ + strcpy(message,"Content-Type: text/html\r\n\r\n"); + + HTTP_Write(request, message, strlen(message)); + + /* Start the page */ + sprintf(message, + "<HTML><HEAD><TITLE>Cactus Parameters Request : %s</TITLE></HEAD>\n", thorn); + + HTTP_Write(request, message, strlen(message)); + + if (CCTK_NumCompiledThorns()>0) + { + strcpy(menu,"<dt><b>Parameters:</b>\n"); + } + /* Menu for this page */ + for (i = 0; i < CCTK_NumCompiledThorns (); i++) + { + menuthorn = CCTK_CompiledThorn (i); + if (CCTK_IsThornActive (menuthorn)) + { + sprintf(menu, + "%s <dt> <A HREF=\"/Parameters/%s/\">%s</A>\n", + menu,menuthorn, menuthorn); + } + } + HTTP_ContentHeader(cctkGH,0,4098,message,menu); + strcat(message,"<BODY>"); + HTTP_Write(request, message, strlen(message)); + + if (!CCTK_IsThornActive(thorn)) + { + sprintf(message,"<B> Thorn %s is not active !!!</B><BR>\n",thorn); + HTTP_Write(request, message, strlen(message)); + } + else + { + /* Send table of available parameters for given thorn */ + /* Steerable parameters can be edited in a FORM. */ + sprintf(message, + "<center><H1>Check/Modify Parameters</H1>" + "<H2>Thorn %s</H2></center>\n", + thorn); + strcat(message, + "<p>Parameters in Cactus can be either <i>fixed</i> or <i>steerable</i>. " + "Steerable parameters are those which can be modified during a " + "simulation" + "To change steerable parameters, edit the values and press \n" + " the submit button." + "Before applying the new parameter value, Cactus will check that" + " the parameter lies in the allowed range. Note that there" + " is currently no log of parameters which have been modified.</p>\n" + "<p>The tables below show the parameter name, current value and description." + "The default value of each parameter is shown in brackets at the end of the description.</p>" + "<center><p><a href=\"../\">View parameters from another thorn</a></p>\n"); + + HTTP_Write(request, message, strlen(message)); + + if(!readonly ) + { + sprintf(message,"<FORM ACTION=\"/Parameters/%s/\">",thorn); + HTTP_Write(request, message, strlen(message)); + } + + /* Walk through all steerable parameters of given implementation. */ + first = 1; + + while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0) + { + first = 0; + strcpy(message,""); + + value = CCTK_ParameterValString (pData->name, pData->thorn); + if(value) + { + if (pData->steerable == CCTK_STEERABLE_ALWAYS) + { + + if (nsteerable == 0) + { + strcat(message,"<h2>Steerable Parameters</h2>"); + if (readonly) + { + strcat(message,"<p><i>The following parameters are steerable, " + "but you do not have authorisation to change them. " + "To change parameters you must first register on the " + "<a href=\"/control.html\">Simulation Control Page</a>." + "</i></p>"); + } + strcat(message,"<table cellpadding=5 cellspacing=5>"); + } + nsteerable++; + + if (!readonly) + { + if (pData->type == PARAMETER_BOOLEAN) + { + /* Steerable boolean */ + param_bool = + *((CCTK_INT *)CCTK_ParameterGet(pData->name,thorn,¶m_type)); + sprintf(message, + "%s<TR><TD align=left valign=center>%s</TD>" + "<TD align=left valign=center>" + "Yes <INPUT type=\"radio\" name=\"%s\" %s value=\"1\">" + " No <INPUT type=\"radio\" name=\"%s\" %s value=\"0\">" + "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n", + message,pData->name,pData->name, + param_bool ? "checked" : "", pData->name, + param_bool ? "" : "checked",pData->description,pData->defval); + } + else + { + /* Steerable nonboolean */ + sprintf(message, + "%s<TR><TD align=left valign=center>%s</TD>" + "<TD align=left valign=center>" + "<INPUT TYPE=TEXT NAME=\"%s\" VALUE=\"%s\">" + "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n", + message, pData->name, pData->name, + value, pData->description,pData->defval); + } + } + else + { + /* Steerable but no authority */ + sprintf(message, + "%s<TR><TD align=left valign=center>%s</TD>" + "<TD align=left valign=center>%s</TD><TD>" + "<SMALL>%s (%s)</SMALL></TR>\n", + message, pData->name, value, pData->description,pData->defval); + } + } + free (value); + } + HTTP_Write(request, message, strlen(message)); + + } + + if (nsteerable>0) + { + strcpy(message, "</TABLE>\n"); + } + else + { + strcpy(message, "<p>This thorn has no steerable parameters.</p>\n"); + } + HTTP_Write(request, message, strlen(message)); + + if(!readonly && nsteerable>0) + { + strcpy(message, + "<INPUT TYPE=SUBMIT VALUE=\"Update all parameters\">\n" + "</FORM>\n"); + HTTP_Write(request, message, strlen(message)); + } + + + /* Walk through non-all steerable parameters of given implementation. */ + first = 1; + + while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0) + { + first = 0; + strcpy(message,""); + + value = CCTK_ParameterValString (pData->name, pData->thorn); + if(value) + { + if (!(pData->steerable == CCTK_STEERABLE_ALWAYS && !readonly)) + { + + if (nfixed == 0) + { + strcat(message,"<h2>Fixed Parameters</h2>" + "<table cellpadding=5 cellspacing=5>"); + } + nfixed++; + + /* FIXME: This is a hack - should put in parameter tags. */ + if(strcmp(thorn,CCTK_THORNSTRING) || + (strcmp(pData->name,"user") && + strcmp(pData->name,"password") && + strcmp(pData->name,"encryption_scheme"))) + { + sprintf(message, + "%s<TR><TD align=left valign=center>%s</TD>" + "<TD>%s</TD><TD><SMALL>%s (%s)</SMALL></TD></TR>\n", + message,pData->name, value, pData->description,pData->defval); + } + } + free(value); + } + HTTP_Write(request, message, strlen(message)); + + } + + if (nfixed>0) + { + strcpy(message, "</TABLE>\n"); + } + else + { + strcpy(message, "<p>This thorn has no fixed parameters.</p>\n"); + } + HTTP_Write(request, message, strlen(message)); + + } + + strcpy(message,"</center>"); + + HTTP_Write(request, message, strlen(message)); + + /* Write out the footer part. */ + + HTTP_ContentFooter(cctkGH, 0, 4098, message); + retval = HTTP_Write(request, message, strlen(message)); + } /* n_arguments > 0 */ + + return retval; +} + diff --git a/src/images/www.h b/src/images/www.h new file mode 100644 index 0000000..175e128 --- /dev/null +++ b/src/images/www.h @@ -0,0 +1,307 @@ +#ifndef __www_H_ +#define __www_H_ + + +static char www[]={0x47,0x49,0x46,0x38,0x37,0x61,0xA1,0x00,0x20, + 0x00,0xF7,0x00,0x00,0x0C,0x22,0x04,0x7C,0x93,0x29,0xAC,0xCA, + 0x57,0xBC,0xCA,0xB4,0x96,0xB1,0x47,0xCC,0xE7,0x71,0xDC,0xE7, + 0xB2,0x9C,0xAE,0x84,0x44,0x5A,0x0C,0x5F,0x79,0x19,0xB4,0xCB, + 0x80,0xE6,0xE8,0xE2,0x8C,0x95,0x6F,0xAC,0xBA,0x5C,0xD4,0xD9, + 0xB7,0xE4,0xF1,0x91,0x8A,0xA3,0x3A,0x6C,0x78,0x4A,0xB4,0xB4, + 0x98,0xC4,0xDB,0x7E,0xEC,0xF6,0xE0,0x9E,0xBB,0x4A,0xC4,0xD5, + 0x6C,0xD4,0xD5,0xD6,0xEC,0xF8,0xB3,0x84,0x93,0x53,0xD2,0xE7, + 0x8E,0x5C,0x5E,0x1C,0xB7,0xC1,0x8B,0xA1,0xB0,0x68,0xAC,0xC0, + 0x5D,0xE4,0xFB,0x86,0x74,0x87,0x4E,0xB8,0xC1,0xA7,0xC4,0xD0, + 0x86,0xBC,0xD7,0x5D,0x74,0x82,0x24,0x94,0xA5,0x46,0xC4,0xD6, + 0xAC,0xEB,0xF0,0xE0,0xDC,0xE7,0xC8,0xFC,0xFA,0xEB,0xAC,0xC0, + 0x72,0xC4,0xDA,0x94,0xDC,0xDF,0xDA,0xD4,0xDF,0xB5,0x60,0x6E, + 0x18,0x8C,0x96,0x44,0x99,0xA4,0x6E,0xAC,0xCA,0x64,0xC4,0xCB, + 0xC7,0xD4,0xF2,0x78,0x89,0x9B,0x4E,0xAC,0xBB,0x8B,0xDB,0xF4, + 0x8F,0x7C,0x9A,0x2F,0x4C,0x5A,0x30,0xC7,0xDF,0x71,0xA2,0xB6, + 0x67,0xE4,0xFC,0x94,0x94,0xA5,0x5D,0x64,0x6E,0x37,0xA4,0xB4, + 0x57,0x74,0x76,0x5C,0xA4,0xBC,0x68,0xEC,0xF6,0xCE,0xC4,0xC6, + 0x9C,0x80,0x88,0x5E,0xF4,0xF2,0xEA,0xDC,0xEE,0x7A,0xAA,0xB0, + 0xA4,0x64,0x78,0x31,0xBC,0xCC,0x9C,0xE4,0xF1,0x9E,0xB7,0xC6, + 0x89,0xE4,0xEF,0xC7,0xC4,0xC6,0xA4,0xC5,0xCC,0xA3,0xE4,0xE2, + 0xE1,0xA0,0xA4,0x98,0xBC,0xCE,0x6A,0xD1,0xE8,0x7F,0xF4,0xF6, + 0xF5,0xDC,0xEA,0x8F,0x74,0x8B,0x34,0xBC,0xC5,0x7B,0xCC,0xD1, + 0xB9,0x9C,0xB6,0x4A,0x6C,0x7E,0x44,0xD4,0xDD,0x9A,0x94,0x9E, + 0x4C,0xE4,0xEF,0xB3,0xEA,0xE8,0xEE,0x8C,0xA4,0x58,0x9F,0xB1, + 0x77,0xBC,0xC6,0xA9,0xD9,0xDF,0xC8,0x94,0xAA,0x57,0xAC,0xAE, + 0x8C,0xD4,0xD5,0xC8,0xD4,0xE2,0x7C,0xAC,0xC6,0x5F,0x84,0x8D, + 0x4F,0xFC,0xFA,0xFB,0xAF,0xC6,0x6D,0x54,0x67,0x27,0xC4,0xE2, + 0x7C,0xF4,0xFE,0xE1,0xA4,0xC2,0x57,0xB7,0xC0,0x99,0xEC,0xEE, + 0xED,0x8B,0x9C,0x5E,0xF4,0xFD,0x9F,0x68,0x72,0x34,0x64,0x7E, + 0x2C,0x7F,0x94,0x3F,0x9A,0xB1,0x58,0xBC,0xD3,0x7D,0xE4,0xF6, + 0x8D,0xD4,0xDA,0xD7,0xBB,0xC1,0xB7,0x94,0xAA,0x6C,0xD4,0xE0, + 0x74,0xFC,0xFE,0xD1,0xC4,0xD2,0xB4,0xAC,0xB0,0x74,0x8C,0xAA, + 0x39,0xB4,0xB8,0xA8,0xC4,0xDA,0x6F,0x47,0x55,0x1F,0x54,0x6A, + 0x04,0x94,0x9C,0x72,0x1C,0x32,0x04,0x6C,0x80,0x24,0x5C,0x66, + 0x3E,0xBC,0xD2,0x5C,0x54,0x5E,0x0C,0x7C,0x81,0x62,0xC4,0xD3, + 0x9F,0xAC,0xB9,0x74,0xBC,0xD8,0x6F,0x6C,0x7A,0x24,0xF4,0xFE, + 0x8C,0xCC,0xD6,0xC8,0x84,0x9C,0x42,0x84,0x8A,0x3C,0x7C,0x82, + 0x54,0xD4,0xEE,0x90,0x5E,0x72,0x26,0x54,0x62,0x37,0xA4,0xAA, + 0x8F,0x8C,0x96,0x8C,0xF4,0xF2,0xF4,0xE4,0xE1,0xEE,0x74,0x86, + 0x29,0xA4,0xC2,0x64,0xDC,0xEE,0x98,0xB4,0xD2,0x5C,0xD4,0xEE, + 0x70,0xA4,0xB6,0x84,0x4C,0x62,0x18,0xEC,0xFE,0xAC,0x7C,0x8E, + 0x4A,0xC4,0xD6,0x82,0x94,0xAA,0x47,0xCC,0xE2,0x98,0x8C,0x9E, + 0x3E,0xB4,0xD2,0x68,0xCC,0xD2,0xC5,0xDC,0xFA,0x7C,0xF4,0xFE, + 0xC4,0x82,0x8E,0x62,0xAC,0xB6,0xA4,0x8C,0xA5,0x47,0xA3,0xBC, + 0x59,0x88,0x95,0x5F,0xDC,0xDE,0xE5,0x5E,0x6D,0x28,0x9C,0xA2, + 0x84,0xDC,0xF4,0xA0,0x65,0x6C,0x45,0x4C,0x56,0x34,0xE8,0xF6, + 0x9F,0xD4,0xEE,0x82,0xD5,0xDA,0xC9,0xB4,0xBA,0x97,0x5C,0x66, + 0x2C,0xFC,0xFE,0xE9,0xA4,0xB6,0x79,0xBC,0xD2,0xA4,0xBC,0xC6, + 0x9A,0xBC,0xD2,0x6B,0xD4,0xE2,0x9C,0xAC,0xB6,0x8E,0x6A,0x72, + 0x48,0x74,0x7F,0x37,0xAC,0xBA,0x98,0xA4,0xBA,0x78,0xDC,0xE9, + 0x9F,0x54,0x66,0x18,0x84,0x92,0x34,0xC4,0xCC,0xB4,0xD4,0xE8, + 0x74,0xE4,0xEA,0xB4,0xA4,0xB0,0x8B,0xBC,0xCD,0x85,0xEC,0xF2, + 0x94,0x74,0x7A,0x49,0xCC,0xDD,0x84,0xF4,0xF8,0xE5,0xDC,0xD6, + 0xDE,0xEC,0xFE,0x8A,0x7C,0x89,0x4F,0xCC,0xD6,0xB7,0xE4,0xE8, + 0xCC,0xB4,0xC0,0x74,0xCC,0xDB,0x9E,0xDC,0xE2,0xB3,0xB4,0xCC, + 0x6C,0xCC,0xCD,0xCB,0xDC,0xF4,0x7F,0x84,0x9D,0x32,0x54,0x5C, + 0x2E,0xEC,0xFC,0x99,0x9C,0xA5,0x5C,0xF4,0xF8,0xD1,0x6C,0x78, + 0x34,0xEC,0xF1,0xCE,0x7C,0x8E,0x36,0x74,0x80,0x4B,0xEC,0xF1, + 0xB9,0x6C,0x7F,0x37,0x9C,0x9E,0x74,0xCC,0xD6,0xA4,0xB4,0xBA, + 0x74,0xFC,0xFE,0xFC,0xBC,0xDE,0x74,0xC4,0xC6,0xB9,0x9C,0xB6, + 0x57,0x94,0x9E,0x60,0xD4,0xEE,0xA4,0xA4,0xAA,0xA0,0x74,0x86, + 0x39,0xB4,0xCA,0x59,0x9C,0xAA,0x61,0xB4,0xC6,0x5C,0xCC,0xE2, + 0x82,0xEC,0xF6,0x94,0xDC,0xDA,0xDA,0x9C,0xAA,0x71,0xCC,0xDA, + 0x70,0x64,0x66,0x3C,0xF4,0xFE,0xB4,0xCC,0xD6,0x84,0x9C,0xAA, + 0x4C,0x94,0x9E,0x3C,0x2C,0x00,0x00,0x00,0x00,0xA1,0x00,0x20, + 0x00,0x00,0x08,0xFE,0x00,0xD7,0x09,0x1C,0x48,0x50,0xE0,0x99, + 0x75,0x29,0x0A,0x1E,0x2C,0xC8,0xB0,0xA1,0xC3,0x87,0x10,0x77, + 0x41,0x9C,0x48,0x71,0xDD,0x2E,0x89,0x15,0x33,0x6A,0xDC,0x08, + 0xF1,0x4C,0x42,0x89,0x0B,0x39,0x8A,0x1C,0x49,0xB2,0xA4,0xC9, + 0x93,0x1A,0x77,0x8D,0x5B,0x77,0x30,0x24,0xCA,0x97,0x30,0x31, + 0xC2,0x9C,0x49,0x32,0x57,0x93,0x74,0x1C,0x12,0x0E,0x74,0x49, + 0xB3,0xA7,0xCF,0x9F,0x34,0x77,0xE5,0x5A,0xB6,0x07,0x5D,0x93, + 0x8B,0x32,0x81,0x36,0x4C,0xAA,0xB4,0xA9,0xD3,0x81,0x7B,0xC0, + 0xF5,0x01,0xF7,0x2A,0x42,0x34,0xA6,0x4F,0xB3,0x6A,0x55,0x8A, + 0x87,0x88,0x13,0x6B,0x4C,0xC0,0x2D,0x7A,0x61,0xE6,0x19,0x98, + 0x05,0xD6,0xB6,0xEE,0x64,0x79,0xA6,0x6D,0x5B,0x96,0x24,0x5D, + 0x26,0x94,0xE2,0x96,0x6D,0xDD,0x8E,0x6A,0x1B,0x9E,0x78,0x62, + 0x45,0xCC,0x38,0x70,0xEA,0x3A,0x94,0x13,0x86,0xC7,0xDA,0x18, + 0x8E,0x2E,0xEB,0xB6,0x74,0x1B,0x52,0x6E,0x0A,0x95,0xCB,0x54, + 0xED,0x89,0x26,0x85,0x2E,0xE3,0xB5,0x8D,0x19,0x27,0x3E,0x83, + 0x49,0xE2,0x9E,0x70,0x41,0xC2,0x85,0x8B,0xE6,0x06,0xD3,0xE5, + 0x85,0x17,0xAF,0xA6,0xB8,0xDC,0x71,0xA1,0x62,0xB8,0x23,0xA5, + 0x30,0x69,0x07,0xA6,0x4D,0x8B,0x2A,0xD7,0xC0,0x0D,0xFB,0x31, + 0x66,0x8C,0x13,0x29,0x19,0x5D,0xDB,0x35,0xC8,0x16,0xEE,0x62, + 0xE3,0xBB,0xF6,0x6C,0xC9,0xC2,0x8F,0x9F,0x33,0x63,0xA3,0x13, + 0x26,0xE4,0xF9,0x76,0x78,0x5D,0x90,0x6E,0x77,0x85,0x33,0x60, + 0x0C,0xC3,0x03,0x63,0x41,0x28,0xFE,0x73,0x7E,0xBB,0xEB,0xCC, + 0xAE,0x68,0xAA,0x5A,0x8C,0x8B,0x76,0xC6,0xF2,0xDD,0x87,0xEF, + 0x5B,0x8A,0x3C,0x98,0xC2,0x5A,0x1B,0x73,0x22,0x7C,0x5C,0x7B, + 0xE1,0x6D,0x88,0xC4,0xE9,0x4B,0x09,0xB4,0x8B,0x74,0xAB,0xB1, + 0x17,0xCD,0x6A,0x29,0x48,0x91,0x42,0x0A,0x06,0x2E,0xA8,0x60, + 0x82,0x6E,0xA5,0x10,0x0E,0x06,0xF7,0x90,0x71,0x48,0x03,0x9C, + 0xF4,0x53,0x85,0x01,0xEB,0x51,0x66,0xDA,0x81,0x17,0x79,0x14, + 0xCD,0x38,0xE1,0x0C,0x58,0x99,0x79,0x74,0x1D,0x78,0x06,0x11, + 0xD1,0x04,0xF1,0x0D,0x1C,0xF3,0x94,0x60,0xC1,0x03,0x1C,0x64, + 0x31,0x0E,0x11,0x52,0x60,0xA2,0x63,0x65,0x41,0x18,0xF3,0xC0, + 0x37,0x50,0x58,0x73,0xC2,0x09,0x52,0xE0,0x68,0x99,0x45,0x48, + 0x42,0xC8,0x9E,0x74,0x74,0x21,0xF8,0x5E,0x4A,0x12,0x88,0xF1, + 0x0E,0x3D,0xFA,0x81,0x13,0x08,0x03,0x5C,0x38,0xF0,0xC7,0x1F, + 0x58,0x59,0xC4,0x20,0x83,0xE1,0x45,0x13,0xCE,0x09,0xA3,0xB5, + 0x78,0x42,0x8B,0x44,0x04,0xD1,0xA1,0x68,0xD1,0xAC,0x11,0x0E, + 0x11,0x98,0xA4,0x40,0x04,0x06,0xB6,0x38,0xF3,0x8F,0x0B,0x91, + 0x6C,0xC0,0x03,0x3A,0xD8,0x9C,0x30,0xCE,0x38,0x27,0x60,0xA2, + 0x60,0x98,0xA0,0x8D,0xB3,0xCC,0x16,0x41,0x9C,0x40,0x44,0x0A, + 0xE1,0xE9,0x38,0x62,0x68,0xAA,0x4C,0x01,0x87,0x3F,0x88,0xCC, + 0xF1,0x02,0x0D,0xE0,0x08,0x81,0xE8,0x8D,0x94,0xB1,0xB8,0x8C, + 0x08,0x87,0x1C,0x62,0x4A,0x36,0x0B,0x2C,0xE0,0x27,0x9C,0x29, + 0x2E,0x18,0xCD,0xAA,0x09,0x8A,0x79,0xA6,0x9B,0xFE,0x2D,0x52, + 0xB0,0x2A,0x7B,0xD5,0x51,0x74,0xD0,0x38,0x4D,0x70,0x30,0x0C, + 0x0D,0x55,0x54,0xD1,0x41,0x1C,0xE8,0x58,0x63,0x0D,0x2E,0x7F, + 0xE8,0xC4,0x56,0x72,0xAA,0x7C,0xF3,0x4D,0x28,0x49,0xD8,0x91, + 0x84,0x31,0x9C,0x6C,0x61,0xCB,0x03,0xB6,0xDC,0xE3,0xEC,0x3D, + 0xCE,0x7C,0xF3,0xA3,0x1D,0xDC,0x56,0x3B,0x05,0x06,0xE3,0x58, + 0xB3,0x45,0x11,0x45,0x68,0x31,0x4C,0x3A,0x4E,0x80,0x61,0x06, + 0x35,0xD9,0x70,0xF2,0x40,0x11,0x0F,0x64,0x83,0x81,0x01,0x3F, + 0xEE,0xF0,0xC0,0x03,0x76,0xE4,0x50,0x84,0x0D,0xDF,0x44,0x31, + 0x45,0x12,0xB6,0x00,0xC3,0x89,0x06,0xA1,0xD8,0x11,0x85,0x32, + 0x51,0x70,0x23,0x0E,0x07,0x0E,0x80,0xA1,0x0E,0x0C,0x59,0x4C, + 0xF1,0x8D,0xB3,0xC0,0x18,0xB3,0x8C,0x31,0xD3,0x14,0x61,0xC7, + 0x2F,0xA6,0x44,0xA1,0x81,0x1D,0xF8,0x2E,0x33,0x8E,0x1B,0x6D, + 0x72,0x62,0x8B,0xB2,0x51,0x24,0x21,0xAD,0x33,0x49,0x4C,0x01, + 0xB2,0xB2,0xD3,0xD8,0x31,0xC5,0x38,0x39,0xD2,0x55,0x51,0x5B, + 0xBB,0x34,0xD1,0x47,0x1C,0x66,0x88,0x50,0x85,0x16,0xB1,0x50, + 0x23,0x84,0x35,0x4D,0xC4,0x23,0x60,0x84,0xD9,0x94,0x32,0xCD, + 0x03,0xCA,0x38,0xF2,0x01,0x14,0xFA,0x88,0x00,0x85,0x2D,0x1F, + 0xE4,0x90,0x31,0x20,0xD0,0xE8,0x01,0x45,0xCC,0xBF,0x70,0xA3, + 0x0F,0xD4,0x70,0x54,0xD1,0x84,0x35,0xE3,0x8C,0xE0,0x09,0x09, + 0x3C,0x58,0x81,0x0F,0x0B,0x4A,0x2C,0xD3,0xAC,0x1D,0x8E,0x28, + 0x73,0x08,0xC0,0xF6,0x7C,0x90,0xAF,0x1D,0xCA,0xB0,0x21,0xC0, + 0xFE,0x0C,0x1F,0x14,0x90,0xC3,0x03,0x53,0x58,0x50,0xC4,0x37, + 0x39,0x7C,0xA0,0xCC,0x08,0xCA,0xE4,0x20,0x0A,0x12,0xD9,0x80, + 0xE1,0x00,0x36,0xC0,0xE0,0x1B,0xC5,0x3D,0x53,0x40,0xC3,0x89, + 0x23,0xBF,0xE4,0xA0,0x8C,0x05,0x10,0x14,0xB1,0x83,0x32,0x1F, + 0x38,0x92,0x05,0x0A,0x0B,0x2C,0xB1,0x8C,0xC1,0x51,0x7C,0xB0, + 0x34,0x27,0x2F,0xC2,0x01,0x85,0xC6,0xDC,0x68,0x3C,0x0D,0x14, + 0x0E,0x2C,0xE0,0x86,0xCD,0x3C,0x39,0x94,0x82,0x10,0xB9,0x0C, + 0x43,0x4E,0x07,0x3C,0x98,0xEB,0xCD,0x3E,0x42,0x44,0xE3,0x04, + 0x11,0x44,0x18,0x64,0xDE,0x1E,0xD9,0xF8,0x10,0x05,0x01,0xA4, + 0xD8,0xE1,0x8F,0x06,0x3C,0xD0,0xC0,0x83,0x07,0xA6,0xD0,0xA1, + 0x41,0x09,0xA3,0xA8,0x40,0x83,0x0F,0x39,0x74,0x23,0x00,0x14, + 0x04,0xDC,0xD2,0xC1,0x31,0x4B,0xB4,0xD0,0xC2,0x21,0xFA,0x20, + 0x43,0x0F,0x36,0xBD,0x61,0x53,0x8F,0x05,0x34,0xC8,0xA3,0x81, + 0x08,0x01,0x70,0xF3,0x81,0x3C,0xD7,0x90,0xA3,0x89,0x2B,0x80, + 0x08,0x00,0x01,0x3A,0x91,0x03,0x0F,0xD4,0xA3,0x1E,0xF7,0x98, + 0xC3,0x2F,0x02,0xF7,0xBC,0x00,0xD8,0x63,0x02,0x19,0x68,0x46, + 0x32,0x64,0x30,0x86,0x66,0x14,0x40,0x19,0x8D,0x28,0x01,0x10, + 0x34,0xE0,0x01,0x4F,0xD8,0x80,0x04,0xF5,0xE8,0xC4,0x3C,0x6E, + 0x50,0x80,0x28,0x5C,0x41,0x1B,0xAE,0x38,0x07,0xC3,0xB0,0x61, + 0x0F,0x65,0xCC,0x61,0x0E,0x2A,0x00,0x04,0x04,0xEA,0x01,0x85, + 0x46,0x50,0x82,0x06,0xBF,0x88,0xC2,0x1C,0x5C,0xF1,0x80,0x39, + 0xF4,0xC0,0x1A,0xFE,0x5C,0x70,0x03,0x8E,0x72,0xC7,0x90,0x83, + 0xE4,0x4C,0x1D,0x71,0x38,0x87,0x0E,0xAA,0x27,0x09,0x71,0xD0, + 0x42,0x0C,0x12,0x48,0x46,0x3C,0xB6,0x51,0x90,0x68,0x6C,0x81, + 0x07,0x64,0xF0,0x80,0x07,0xEC,0xC1,0x06,0x0D,0xBC,0x83,0x03, + 0x61,0x18,0xC5,0x15,0x3C,0x50,0x0A,0x6D,0xD8,0x43,0x07,0x2A, + 0x68,0x85,0x36,0xAE,0x90,0x03,0x35,0xB0,0xA1,0x00,0x74,0xE0, + 0x85,0x22,0x84,0x00,0x0C,0x57,0xD8,0x03,0x12,0x3E,0x50,0xC4, + 0x1D,0x92,0xC1,0x88,0x02,0x74,0x83,0x0E,0xB3,0x18,0xC5,0x04, + 0x90,0x61,0xC6,0x39,0x8C,0x62,0x11,0x25,0x18,0x01,0x20,0xA8, + 0xA0,0xB7,0x1C,0x54,0x60,0x1E,0xF5,0xE0,0x04,0x39,0x3A,0x66, + 0x83,0x1D,0x00,0xA2,0x01,0xDA,0x20,0x83,0x3C,0x9A,0x81,0x0D, + 0x54,0x98,0x60,0x1E,0x7E,0x23,0x87,0x0A,0xFC,0x61,0x8F,0x45, + 0x8C,0xC0,0x02,0x61,0x50,0x81,0x36,0x04,0xD0,0x0D,0x45,0xB6, + 0xE2,0x05,0x9A,0x88,0x80,0x12,0x56,0x90,0x39,0x46,0x98,0x82, + 0x1E,0xDA,0xB0,0xA5,0x05,0x7E,0x41,0x02,0x2D,0x50,0x69,0x02, + 0x10,0xC8,0x81,0x36,0x1A,0xF1,0x0A,0x16,0x38,0xC1,0x76,0xC9, + 0x23,0x62,0x43,0xAC,0x81,0x8E,0x7C,0x88,0x03,0x08,0x34,0xD0, + 0x41,0x0F,0x9C,0x18,0x82,0x5C,0xA0,0xE2,0x0F,0xA8,0x08,0x89, + 0x14,0xD6,0x40,0x01,0x18,0x80,0xE3,0x17,0x65,0x20,0x47,0x0E, + 0xE8,0x50,0x0C,0x13,0x70,0xC0,0x15,0xA3,0xC8,0x03,0x24,0xEC, + 0x11,0x86,0x37,0x20,0xA1,0x18,0x7E,0x60,0x47,0x05,0x08,0xA0, + 0x0D,0x52,0xE4,0x41,0x1B,0x1F,0xFE,0xB0,0x41,0x1D,0x5A,0x01, + 0x89,0x51,0xB4,0x42,0x00,0x80,0xB0,0x81,0x0D,0xAE,0x50,0x00, + 0x4F,0x74,0x43,0x0D,0x51,0x68,0x05,0x10,0xEC,0xE1,0x0A,0x46, + 0xD4,0xE1,0x17,0xB9,0xBC,0x41,0x05,0x04,0xC0,0x08,0x57,0x8C, + 0x20,0x07,0xD0,0x98,0x43,0x1D,0x5C,0x21,0x08,0x1F,0x40,0x81, + 0x0A,0x5D,0x50,0x01,0x1D,0xEA,0xA1,0x8D,0x1C,0xD8,0x00,0x85, + 0xAE,0xB8,0x41,0x27,0xD4,0x50,0x07,0x1A,0x74,0x60,0x05,0xAE, + 0xA0,0xE8,0x08,0xFC,0xD0,0x50,0x01,0x9C,0x62,0x02,0xEC,0x98, + 0x04,0x37,0x4E,0x51,0x06,0x0D,0xD0,0x01,0x02,0x8C,0x50,0x43, + 0x02,0x2C,0x4A,0x8E,0x2E,0xA8,0xC1,0x1E,0xEC,0x20,0x40,0x05, + 0x12,0x20,0x8A,0x3A,0x8C,0xE1,0x2C,0xA5,0xB1,0x19,0x45,0xCE, + 0xC3,0x00,0x18,0x9C,0xC3,0x7B,0x1C,0xD0,0x45,0x0F,0x68,0x11, + 0x82,0x5D,0x9C,0x80,0x21,0x95,0xA1,0x40,0x08,0xDE,0x00,0x84, + 0x46,0x1C,0xE1,0x14,0x54,0x40,0x02,0x12,0x7A,0xD1,0x0A,0x05, + 0x1C,0x81,0x1C,0x68,0x38,0xC7,0x1B,0x7A,0xA1,0x80,0x30,0x6C, + 0x62,0x0E,0x90,0x88,0x41,0x37,0x8A,0xA1,0x82,0x54,0x4C,0x80, + 0x07,0x68,0xD0,0xA8,0x19,0x6F,0x11,0x05,0x01,0x08,0xC2,0x1D, + 0xB7,0xB8,0x42,0x14,0x26,0xA1,0x82,0x39,0xE8,0x60,0x02,0x36, + 0xB8,0x05,0x10,0xC2,0xE0,0x8A,0x18,0x68,0x83,0x00,0x36,0xB5, + 0x47,0x0E,0x7E,0x11,0x4D,0x68,0xD8,0x03,0xA2,0xC7,0xA0,0x01, + 0x35,0x9A,0x31,0x81,0x5B,0x7C,0xC0,0x13,0x47,0x38,0xC7,0x1C, + 0xA0,0x40,0x58,0x6D,0xC4,0xE2,0x15,0x40,0x60,0xFE,0x84,0x0D, + 0x34,0xA0,0x06,0x02,0xF8,0xA1,0x02,0xA7,0x88,0x82,0x3D,0x36, + 0xF1,0x0B,0x35,0xB8,0x22,0x0C,0x68,0x40,0x83,0x1A,0x6E,0xB1, + 0x48,0x6D,0x4C,0x20,0x9A,0xF6,0xD8,0xC1,0x0E,0x26,0xC1,0x08, + 0x6D,0xC4,0x60,0x05,0x63,0xB8,0x83,0x13,0xB8,0x70,0x82,0x5A, + 0x45,0x24,0x05,0x21,0xA0,0x86,0x28,0x8A,0xD1,0x81,0x0E,0xC4, + 0xE2,0x19,0xC2,0x48,0x46,0x9B,0x1A,0x52,0x19,0x14,0xE4,0x83, + 0x06,0xC7,0xC8,0x03,0x0F,0x10,0xC0,0x87,0x64,0xF0,0x81,0x07, + 0x6F,0x00,0x41,0x1E,0xE4,0x11,0x87,0x4F,0x24,0xC3,0x04,0x79, + 0x08,0x03,0x28,0x68,0x30,0x07,0x4D,0x20,0x41,0x09,0x61,0x18, + 0x84,0x21,0x54,0xA0,0x80,0x34,0xBC,0x41,0x09,0x75,0x50,0x80, + 0x0B,0x28,0x31,0x87,0x3C,0xD4,0x21,0x16,0x1D,0xF0,0xC2,0x1B, + 0x8E,0x00,0x04,0x05,0xA8,0xA0,0x0B,0x5D,0x10,0x05,0x1D,0x74, + 0xC0,0x4F,0x48,0xB8,0xA3,0x0B,0x54,0x10,0x47,0x06,0x78,0xE0, + 0x0A,0x1D,0x0C,0x23,0x0D,0xBE,0xD0,0xAE,0x2B,0xA0,0xC0,0x08, + 0x77,0x04,0xA2,0x18,0x19,0x70,0x05,0x10,0x8A,0x41,0x89,0x23, + 0x0C,0x42,0x1E,0x3A,0x50,0x80,0x0E,0xE4,0x41,0x85,0xFA,0x89, + 0x02,0x0D,0x40,0xE0,0x67,0x17,0x28,0x21,0x0A,0x2C,0xD0,0x80, + 0x0D,0x8C,0xA0,0x02,0x2F,0x8A,0xF1,0x86,0x68,0x42,0x82,0x1D, + 0x36,0x08,0xC5,0x2C,0x34,0x30,0x01,0x05,0x58,0x61,0x0C,0x0B, + 0xE0,0x02,0x17,0xA4,0x3A,0x11,0x22,0x38,0x60,0x17,0xCF,0x78, + 0x45,0x07,0x54,0xA0,0x84,0x08,0x44,0xC0,0x12,0x69,0x61,0x41, + 0xFE,0x43,0x6E,0x77,0x02,0x0A,0x04,0xC3,0x00,0xB8,0xA8,0x41, + 0x13,0x64,0x80,0x8A,0x47,0x3C,0x22,0x04,0xA8,0x40,0x05,0x12, + 0xDA,0x81,0x8A,0x6D,0x6C,0x03,0x0C,0x5E,0x18,0x40,0x32,0xDA, + 0xE0,0x8B,0xDE,0x7C,0x82,0x19,0xBE,0x78,0x04,0x2E,0xF8,0xC0, + 0x01,0x15,0xB4,0x81,0x19,0x03,0xA8,0x06,0x18,0x6A,0xC0,0x0C, + 0x6C,0x1C,0x80,0x19,0xDB,0xF8,0xC2,0x01,0x16,0xD1,0x8C,0x47, + 0x58,0x21,0x19,0x07,0xB0,0x2F,0x12,0x28,0x1D,0x82,0x4F,0x10, + 0x83,0x09,0xC4,0xF0,0x42,0x1B,0x42,0x90,0x0C,0x3C,0x0C,0x9A, + 0x19,0x1C,0x60,0x46,0x30,0x50,0x80,0x0A,0x16,0xB4,0xE1,0x13, + 0x1C,0x40,0x42,0x0B,0xF8,0xD0,0x0B,0x2F,0x98,0x9A,0x19,0xC4, + 0x18,0x80,0x2F,0x3E,0xC1,0x8B,0x1A,0x54,0xC3,0x04,0x4A,0x08, + 0xC1,0x1D,0x64,0x10,0x82,0x03,0x14,0xA3,0x0D,0xD5,0xF0,0x45, + 0x30,0xBE,0xA0,0x04,0xDA,0xB2,0x81,0x10,0x00,0xB8,0x41,0x1D, + 0x34,0x91,0x0C,0xDF,0x70,0x81,0x08,0xD6,0x75,0xC8,0x19,0x16, + 0xF0,0x84,0x31,0xBC,0xE2,0x0D,0xA2,0xE8,0x02,0x36,0xBC,0xE1, + 0x0D,0x30,0x84,0x00,0x17,0x46,0x53,0xC8,0x3A,0xA4,0x50,0x2A, + 0x14,0x9C,0xE0,0x0E,0x60,0x78,0x04,0x2C,0x2E,0x70,0x01,0x16, + 0x80,0xE1,0x02,0xDB,0x18,0x83,0x34,0x2E,0x20,0x8D,0x80,0xE3, + 0x02,0x1F,0x63,0x70,0x00,0x3E,0x50,0x81,0x0F,0x14,0x6C,0x01, + 0x05,0xB0,0x80,0x05,0x18,0x0C,0xD0,0x02,0x30,0x80,0xC1,0x1A, + 0x2C,0x40,0x41,0x35,0x70,0x91,0x0C,0x07,0x6C,0x83,0xCF,0xE9, + 0x68,0x42,0x32,0xFE,0x96,0x8D,0x6F,0x19,0xE0,0xE2,0x11,0xD5, + 0xB0,0x73,0x9E,0x3D,0x6D,0x05,0x54,0x4C,0xB0,0xCF,0x28,0x97, + 0x34,0x2E,0x60,0x21,0x83,0x4C,0xA0,0x42,0xE3,0xF9,0xBE,0x43, + 0x35,0xAA,0x91,0x8C,0x9E,0x6F,0xE3,0xD3,0x7C,0xA8,0x86,0x1E, + 0xEF,0xF0,0x88,0x25,0xB0,0x00,0x16,0x28,0xA8,0xF8,0x1D,0xF8, + 0x10,0x73,0x13,0x40,0xA2,0xA2,0xA5,0x80,0x47,0x33,0xDC,0x01, + 0x8A,0x6A,0x5C,0xC0,0x54,0xB7,0x53,0x66,0x41,0xA4,0x10,0x02, + 0x16,0xAC,0xC2,0x0B,0xC3,0xC8,0xC7,0x3B,0x68,0x91,0x88,0x68, + 0x48,0x60,0x01,0x78,0x90,0x02,0x53,0xE8,0x52,0x19,0x37,0x70, + 0xA1,0x54,0x4E,0xB8,0x40,0x26,0x16,0x90,0x09,0x2E,0x1C,0x93, + 0x05,0x2C,0x58,0x00,0x2C,0x32,0x31,0xF7,0xB9,0x1B,0x13,0x1F, + 0x5A,0x3E,0x01,0x17,0x60,0x41,0xF7,0xB9,0x97,0xCA,0x1A,0x85, + 0x67,0x01,0x3E,0xA4,0x01,0x8B,0xB5,0x65,0xA2,0xDF,0xF8,0xC8, + 0x84,0x34,0x8C,0x79,0x81,0xB5,0xC1,0xE2,0x0E,0x97,0x9F,0xFC, + 0x1D,0x2A,0x9F,0x09,0x7C,0x60,0xFE,0x98,0xA5,0x32,0x3C,0x3E, + 0x00,0x1F,0x71,0x7C,0x5C,0xDE,0xF4,0x04,0x27,0x38,0xDE,0x57, + 0xEF,0x86,0xBD,0x83,0xC1,0x09,0x75,0x87,0x85,0xE2,0xA3,0x0B, + 0x86,0x16,0xBC,0x42,0x14,0x71,0x00,0x41,0x06,0x44,0xD1,0x86, + 0xD1,0x67,0x19,0xDC,0x5A,0x27,0x88,0x14,0xBE,0x2A,0x8B,0x7C, + 0x64,0x20,0x1F,0x66,0x10,0x46,0x22,0xCE,0x93,0x20,0xD8,0x6C, + 0x3D,0x47,0x6E,0xCF,0xC4,0x74,0xBD,0x92,0x65,0x2D,0x97,0xEA, + 0xED,0x75,0x77,0x83,0x1B,0x10,0xFE,0x6F,0x77,0xB7,0x6B,0x19, + 0x13,0x82,0xC7,0x84,0x1B,0xAA,0xEF,0x04,0xC1,0xBB,0xE1,0x98, + 0xE8,0x77,0xC2,0x74,0xEB,0x2E,0x7D,0xEB,0xD3,0x7D,0x01,0x80, + 0x67,0xC1,0x1D,0xD6,0xB6,0x80,0x0B,0xBC,0xBD,0x54,0xC6,0xA4, + 0x6E,0x96,0x31,0x81,0x7D,0x4C,0xE4,0x7D,0x01,0xEA,0xA7,0x7E, + 0x6B,0xE3,0x04,0xB0,0x80,0x7E,0xB0,0xC0,0x05,0x98,0xB0,0x00, + 0x14,0xC0,0x02,0x7C,0xA7,0x7E,0x5C,0xD0,0x79,0xD5,0xE0,0x00, + 0xC4,0x40,0x0C,0xC1,0x10,0x0C,0x56,0x00,0x06,0xF8,0x00,0x06, + 0x41,0x24,0x28,0xC1,0x67,0x10,0x7F,0xB0,0x00,0x0E,0x30,0x04, + 0x6F,0xA0,0x0B,0x83,0xD0,0x03,0x86,0x30,0x08,0x0B,0x20,0x01, + 0xB8,0x60,0x04,0x5F,0xD5,0x10,0x6E,0x21,0x28,0x35,0x53,0x24, + 0x44,0x20,0x44,0xC8,0x83,0x3C,0x3A,0x22,0x28,0x37,0x98,0x23, + 0x70,0x82,0x83,0x3C,0x78,0x83,0x3A,0x32,0x83,0xDA,0x67,0x7E, + 0x6E,0x37,0x83,0xE2,0x87,0x09,0x40,0xA8,0x7D,0x48,0x18,0x44, + 0x6E,0x20,0x84,0x3E,0xF8,0x83,0x70,0x52,0x1A,0x50,0x58,0x1A, + 0x08,0x28,0x44,0x42,0xA4,0x84,0x50,0x58,0x84,0x45,0x42,0x85, + 0x49,0x78,0x7F,0x0B,0xB0,0x7A,0xC6,0xF4,0x7B,0x1C,0x78,0x33, + 0xED,0xC0,0x02,0x96,0x90,0x08,0x43,0x10,0x08,0x20,0x80,0x03, + 0xB5,0x60,0x09,0xAC,0x00,0x06,0x2C,0x98,0x0C,0xF0,0xE1,0x1E, + 0x6C,0xD7,0x1E,0x95,0x51,0x87,0x76,0x78,0x87,0x78,0xD8,0x1E, + 0x74,0x58,0x19,0x38,0x58,0x24,0x3B,0xD2,0x84,0x35,0xD3,0x84, + 0x3E,0xB8,0x83,0x3D,0x98,0x23,0x7D,0x58,0x87,0xF9,0x82,0x38, + 0x88,0x46,0x18,0x88,0x78,0xC8,0x87,0x3E,0xE8,0x7E,0x00,0xE8, + 0x80,0x41,0xC4,0x65,0xAD,0x81,0x07,0x0B,0x80,0x0B,0x11,0x20, + 0x0A,0x5E,0x50,0x0E,0xAB,0xA0,0x0B,0xC4,0xE0,0x6E,0x03,0x60, + 0x04,0xB7,0x33,0x11,0xD4,0x41,0x1C,0xF2,0xD1,0x18,0xC5,0x61, + 0x1C,0xA7,0x68,0x17,0x9A,0xA1,0x87,0x8C,0x61,0x19,0xB0,0xE8, + 0x8A,0x72,0x68,0x1D,0xAA,0xE8,0x16,0xC0,0x31,0x87,0x73,0xD8, + 0x8A,0x8B,0xF1,0x8A,0x76,0xA8,0x23,0x4A,0xB8,0x23,0xEE,0x91, + 0x11,0x1F,0xF1,0x0C,0x83,0xF0,0x0A,0x58,0xB0,0x0A,0xDE,0x90, + 0x0B,0x27,0xB0,0x06,0x02,0xD1,0x82,0x79,0x21,0x1F,0xC6,0x41, + 0x8B,0xD0,0xE8,0x82,0xC3,0x11,0x8D,0x04,0x21,0x1C,0x45,0xE4, + 0x7C,0xC4,0x21,0x6F,0xA7,0xC8,0x76,0x85,0x78,0x24,0xC1,0x01, + 0x1C,0xBB,0x40,0x0B,0x20,0x60,0x06,0xE5,0x20,0x0E,0x86,0x10, + 0x02,0x62,0x90,0x0C,0xA8,0xB0,0x0E,0x97,0x90,0x17,0xF0,0x98, + 0x15,0xAF,0x98,0x8A,0xF3,0x51,0x0B,0xAB,0x50,0x0E,0xBA,0x30, + 0x04,0xFB,0x90,0x0C,0x12,0x70,0x07,0xA8,0x10,0x0D,0xF1,0xD0, + 0x81,0xF1,0x38,0x90,0x28,0xB1,0x8B,0x23,0x61,0x1E,0x56,0xC0, + 0x00,0x92,0x20,0x0C,0xB4,0xF0,0x03,0xC9,0xE0,0x15,0x02,0xB1, + 0x00,0x04,0x39,0x91,0x14,0x09,0x1F,0xE6,0x61,0x0D,0xAB,0x90, + 0x08,0x89,0x50,0x2C,0x48,0x02,0x1C,0x15,0xF9,0x91,0x1F,0xC9, + 0x13,0xCD,0x07,0x92,0x24,0x19,0x92,0x05,0x61,0x2C,0xD1,0x28, + 0x90,0x25,0xB9,0x92,0x26,0x11,0x10,0x00,0x3B}; + +#endif // __www_H_ + diff --git a/src/make.code.defn b/src/make.code.defn index d6d49e0..da9e03f 100644 --- a/src/make.code.defn +++ b/src/make.code.defn @@ -7,7 +7,7 @@ MISC_SRC = Startup.c Expression.c SERVER_SRC = Server.c Sockets.c http.c -CONTENT_SRC = Content.c Headers.c Groups.c +CONTENT_SRC = Content.c Headers.c Groups.c Parameters.c STEERING_SRC = Steer.c |