]> git.sur5r.net Git - openldap/commitdiff
Initial revision
authorKurt Spanier <ksp@openldap.org>
Fri, 10 Sep 1999 17:33:39 +0000 (17:33 +0000)
committerKurt Spanier <ksp@openldap.org>
Fri, 10 Sep 1999 17:33:39 +0000 (17:33 +0000)
71 files changed:
contrib/tweb/CHANGES [new file with mode: 0644]
contrib/tweb/COPYRIGHTS [new file with mode: 0644]
contrib/tweb/FEATURE-LIST [new file with mode: 0644]
contrib/tweb/GETTING-STARTED.openldap [new file with mode: 0644]
contrib/tweb/LDAP_etc/allow.msg.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/allow.msg.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/ldapfilter.conf [new file with mode: 0644]
contrib/tweb/LDAP_etc/ldapfriendly.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/ldapfriendly.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/search-only.foot.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/search-only.foot.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/search-only.head.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/search-only.head.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb-base.foot.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb-base.foot.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb-base.head.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb-base.head.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb.footer.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb.footer.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb.header.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb.header.1 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb.help.0 [new file with mode: 0644]
contrib/tweb/LDAP_etc/tweb.help.1 [new file with mode: 0644]
contrib/tweb/Makefile.openldap [new file with mode: 0644]
contrib/tweb/README [new file with mode: 0644]
contrib/tweb/TWEB_conFiles/robots.txt [new file with mode: 0644]
contrib/tweb/TWEB_conFiles/tweb.conf.0.dist [new file with mode: 0644]
contrib/tweb/TWEB_conFiles/tweb.conf.1.dist [new file with mode: 0644]
contrib/tweb/TWEB_conFiles/tweb.lang.0.dist [new file with mode: 0644]
contrib/tweb/TWEB_conFiles/tweb.lang.1.dist [new file with mode: 0644]
contrib/tweb/TWEB_conFiles/tweb.rc.dist [new file with mode: 0644]
contrib/tweb/Versiongw.c [new file with mode: 0644]
contrib/tweb/ch_malloc.c [new file with mode: 0644]
contrib/tweb/ch_malloc_exp.h [new file with mode: 0644]
contrib/tweb/charray.c [new file with mode: 0644]
contrib/tweb/charray_exp.h [new file with mode: 0644]
contrib/tweb/checkclient.c [new file with mode: 0644]
contrib/tweb/checkclient.h [new file with mode: 0644]
contrib/tweb/checkclient_exp.h [new file with mode: 0644]
contrib/tweb/dn.c [new file with mode: 0644]
contrib/tweb/dn.h [new file with mode: 0644]
contrib/tweb/dn_exp.h [new file with mode: 0644]
contrib/tweb/doc/Presentation/DANTE-01-99.ps [new file with mode: 0644]
contrib/tweb/doc/Presentation/README [new file with mode: 0644]
contrib/tweb/html.c [new file with mode: 0644]
contrib/tweb/html.h [new file with mode: 0644]
contrib/tweb/html_exp.h [new file with mode: 0644]
contrib/tweb/init.c [new file with mode: 0644]
contrib/tweb/init.h [new file with mode: 0644]
contrib/tweb/init_exp.h [new file with mode: 0644]
contrib/tweb/queries.c [new file with mode: 0644]
contrib/tweb/queries.h [new file with mode: 0644]
contrib/tweb/queries_exp.h [new file with mode: 0644]
contrib/tweb/regular.c [new file with mode: 0644]
contrib/tweb/regular.h [new file with mode: 0644]
contrib/tweb/regular_exp.h [new file with mode: 0644]
contrib/tweb/server.c [new file with mode: 0644]
contrib/tweb/server.h [new file with mode: 0644]
contrib/tweb/server_exp.h [new file with mode: 0644]
contrib/tweb/strng.c [new file with mode: 0644]
contrib/tweb/strng_exp.h [new file with mode: 0644]
contrib/tweb/support.c [new file with mode: 0644]
contrib/tweb/support.h [new file with mode: 0644]
contrib/tweb/support_exp.h [new file with mode: 0644]
contrib/tweb/tgeneral.h [new file with mode: 0644]
contrib/tweb/tglobal.h [new file with mode: 0644]
contrib/tweb/tweb.c [new file with mode: 0644]
contrib/tweb/tweb.h [new file with mode: 0644]
contrib/tweb/x500.c [new file with mode: 0644]
contrib/tweb/x500.h [new file with mode: 0644]
contrib/tweb/x500_exp.h [new file with mode: 0644]

diff --git a/contrib/tweb/CHANGES b/contrib/tweb/CHANGES
new file mode 100644 (file)
index 0000000..afc8fe6
--- /dev/null
@@ -0,0 +1,200 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* CHANGES                                                                  *
+*                                                                          *
+* Function:..A short description of the last modifications of TWEB         *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            September 14 1995            Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            January 15 1999            ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+
+
+
+               Changes of the web-x.500-gateway TWEB
+               =====================================
+
+Version: tweb-2.3 1998/10/05
+
+Changes to code
+
+    - dynamic re-sort and re-display based on entries found in the DIT:
+        SORT definitions given by config files can be changed due to
+        local information within a DIT area; that provides for dynamic
+        definitions of sorting groups and/or display of groups with new
+        labels and/or other sorting order;
+        DISPLAY definitions can be replaced or added dynamically, in order
+        to display contents of entries in other than the statically
+        configured way
+
+
+Version: tweb-2.2 1998/3/20
+
+Changes in configuration files (please check!)
+
+    - INDEX-URL (new): display hrefs below a certain dit showing special parts
+              of the entry-dn in any sequence
+
+    - DIT-CONFIG (new): get from a specified location the information how to
+              switch to other gateways depending on the given dn.
+              With NOT-BROWSE you can turn of this functionality for browsing.
+
+    - DISP-SEA-RDN (new): with this option you can make search-results to be
+              displayed only by rdn and not by relative dn to the search-base
+
+    - TON-URLS (new): hereby you can reference a given organization/alunit
+              by TONS (special numbers for organizational hirarchies)
+              example: T013307 can mean:
+                     computing centre, dept. development of new services
+
+    - INDIRECT-ATTRS (new): attribute-value can be fetched by special keys from
+              other locations and additional be transformed by according
+              functions
+
+    - ALLOW-STRING DENY-STRING GRANT REFUSE : CHANGE IN BEHAVIOUR!!
+              now regular expressions are used. That means you have shorter
+              config strings.
+
+    - ALLOW-MSG (new): by this option you can specify a special file located
+              in the ETCDIRectorie containing a message to be displayed
+              in case of an allowed access to TWEB
+
+    - TABLES (new): triggered by the presence of a special objectclass
+               will be displayed a button in the header of the TWEB-page
+               allowing an eXtended data access such as:
+                      a table with names, telephonenumbers and e-mail addresses
+                      of the current organization
+
+               or     the access to the electronic telephonebook-data
+                      of the university of tuebingen generated by TWEB
+                      dynamically
+
+
+Version: tweb-2.0a 1997/1/7
+
+Changes in configuration files (please check!)
+
+    - PULL-DOWN-MENUS (new): use BUTTONS and PULL-DOWN-MENUS instead of links
+              in order to support: help, language-switch, move-upwards
+              and read-entry functionalities
+
+    - GRANT (new): allow general access to TWEB for specified locations
+              ( same syntax as ALLOW-STRING )
+
+    - REFUSE (new): refuse general access to TWEB for specified locations
+              ( same syntax as DENY-STRING )
+
+    - INDIRECT-ATTRS (new): Get specified attribute-values from another
+              location
+
+    - CACHING-TERMS (new): specify caching-behaviour for browsers and www-caches
+
+    - CACHE-EXPIRE-DEFAULT (new): set a default caching-time for browsers
+              and www-caches
+
+    - SHOW-DEFOC (new): Show Default Objectclass
+
+    - COMREFUSE (new): prevent engine-access
+
+    - robots.txt (new): supply robots.txt-file functionality with the same
+              behaviour as in www-servers
+
+
+Version: tweb-1.1b 1996/5/7
+
+Changes in configuration files (please check!)
+
+    - STRICT-BASEDN (new): Access not below basedn is switched to responsible
+                       gateway ( ->  gw-switch)
+
+    - ALLOW-PROXY (new): if NO-PROXY is configured access from 
+                       given domain is allowed
+
+
+Version: tweb-1.1a, 1996/4/25
+
+Changes in configuration files (please check!)
+
+    - SORT extensions: fourth parameter RELATED DISPLAY-CLASS:
+                       relation to according DISPLAY-entry
+                       (default is 'default')
+                       see DISPLAY changes
+
+                       fifth parameter SORT-ATTRIBUTE:
+                       attribute used to sort entries
+                       (default is 'sn')
+
+    - DISPLAY changes: The DISPLAY objectClass entry is replaced by the string
+                       that is used as fifth attribute with SORT
+
+    - NO-PROXY (new):  option for access restrictions via PROXY-servers
+
+    - TWEBHOST (new):  option to support a constant tweb-hostname
+
+    - NO-MODIFY (new): option to prevent entries with named objectclasses from
+                       modification
+
+    - PGPKEY (new):    DISPLAY-TYPE for PGPKeys enabling cut&paste
+
+
+  Changes to code
+
+    - conversion from upper to lowercase characters in:
+        make_oc_to_str(), pick_oc(), init_sort(), init_modify(),
+        attrs in display() and all internal comparison-strings!!!
+
+    - modification with multiline attributes now possible with NETSCAPE
+
+    - pictures in X.500 are shown (only with NETSCAPE)
+
+    - display is denied in do_read() in case of missing default-Display
+
+    - technical entries (gw...) are not shown if using DYNAMIC-GW
+
+    - the tokens to filter proxy-access with NO_PROXY are extended to:
+      " via " & "Proxy gateway"
+
+    - the tweb-version and compilation date is now shown with C & K options
+
+    - many bugfixes
+
+
+Version: tweb-1.0b, 1996/2/29
+
+  Changes in configuration files (please check!)
+
+    - ALLOW/DENY-String moved from tweb.conf.[01] to tweb.rc
+    - tweb.lang.[01]: string 4  TEXT/HTML  -->  text/html
+    - tweb.rc       : optional parameter TWEBHOST  (see FEATURE-LIST)
+
+  Changes to code
+
+    - better behaviour in modify operations
+      BEWARE: modification of inherited attributes still NOT possible (!)
+
+    - logging-option (-l) with facultative parameter: LOCAL[0-7] of syslogd
+
+          -lx  -->  LOCAL3 (default)
+
+    - simplified metasyntax of GW-switches:
+
+          labeledURI= http://<host>:<port>/ <descriptive string> (gw[-<lang>])
+
+    - use 'aliasedObjectName' in HREF of aliases
+    - always print HTML header
+    - many bugfixes
+
+
+Version: tweb-1.0a, 1996/2/7
+
+  - base distibution
+
diff --git a/contrib/tweb/COPYRIGHTS b/contrib/tweb/COPYRIGHTS
new file mode 100644 (file)
index 0000000..6b5f68d
--- /dev/null
@@ -0,0 +1,101 @@
+Copyright (c) 1994 - 1999 University of Tuebingen, Germany.
+Written by Kurt Spanier and Bernhard Winkler. All rights reserved.
+
+This software is not subject to any license of the University of
+Tuebingen, Germany.
+
+Permission is granted to anyone to use this software for any purpose
+on any computer system, and to alter it and redistribute it, subject
+to the following restrictions:
+
+1. The author is not responsible for the consequences of use of this
+   software, no matter how awful, even if they arise from flaws in it.
+
+2. The origin of this software must not be misrepresented, either by
+   explicit claim or by omission.  Since few users ever read sources,
+   credits should appear in the documentation.
+
+3. Altered versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.  Since few users
+   ever read sources, credits should appear in the documentation.
+
+4. This notice may not be removed or altered.
+
+
+
+This work is derived from the Technical University of Chemnitz web500gw
+by Frank Richter.  Information concerning is available at
+    http://www.tu-chemnitz.de/~fri/web500gw.
+
+web500gw is itself derived from the University of Michigan go500gw
+by Tim Howes.  Information concerning is available at
+    http://www.umich.edu/~dirsvcs/ldap/ldap.html
+
+This work also contains materials derived from public sources:
+
+    ch_malloc.c, charray.c, dn.c from the University of Michigan LDAPv3.3,
+      with some minor bug fixes.
+
+    regular.c from the University of Toronto regexp by Henry Spencer,
+      with renaming of functions for not colliding with putative
+      build-in regexp functions in the underlying LDAP libraries,
+      as well as minor modifications.
+      The original software can be obtained from
+          ftp://ftp.cs.toronto.edu/pub/regexp.README, and
+          ftp://ftp.cs.toronto.edu/pub/regexp.shar.Z
+
+
+Additional Information can be obtained by sending e-mail to:
+    tweb-support@mail500.uni-tuebingen.de
+
+
+---
+
+Portions Copyright (c) 1994-1998 Chemnitz University of Technology.
+All rights reserved.
+              A LDAP based WWW - X.500 gateway
+  written by: Frank Richter, Frank.Richter@hrz.tu-chemnitz.de
+              Chemnitz University of Technology, Germany, 1994-1998
+  Redistribution and use in source and binary forms are permitted
+  provided that this notice is preserved and that due credit is given
+  to the Technical University of Chemnitz. The name of the University
+  may not be used to endorse or promote products derived from this
+  software without specific prior written permission. This software
+  is provided ``as is'' without express or implied warranty.
+
+
+---
+
+Portions Copyright (c) 1992-1996 Regents of the University of Michigan.
+All rights reserved.
+
+  Redistribution and use in source and binary forms are permitted
+  provided that this notice is preserved and that due credit is given
+  to the University of Michigan at Ann Arbor. The name of the University
+  may not be used to endorse or promote products derived from this
+  software without specific prior written permission. This software
+  is provided ``as is'' without express or implied warranty.
+
+
+---
+
+Portions Copyright (c) 1986 by University of Toronto.
+  Written by Henry Spencer.  Not derived from licensed software.
+  Permission is granted to anyone to use this software for any
+  purpose on any computer system, and to redistribute it freely,
+  subject to the following restrictions:
+  1. The author is not responsible for the consequences of use of
+     this software, no matter how awful, even if they arise
+     from defects in it.
+  2. The origin of this software must not be misrepresented, either
+     by explicit claim or by omission.
+  3. Altered versions must be plainly marked as such, and must not
+     be misrepresented as being the original software.
+
diff --git a/contrib/tweb/FEATURE-LIST b/contrib/tweb/FEATURE-LIST
new file mode 100644 (file)
index 0000000..9e33862
--- /dev/null
@@ -0,0 +1,1138 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* FEATURE-LIST                                                             *
+*                                                                          *
+* Function:..A description of the basic of TWEB,                           *
+*            the Tuebinger Web-X.500 gateway                               *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            September 14 1995            Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            January 15 1999            ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+
+
+
+0 TABLE OF CONTENTS
+
+   1      Introduction
+   2      General overview
+   2.1    A case of Public Relations
+   2.2    Configuration files and TWEB start-up
+   2.3    The running gateway
+   2.4    check4access: who is allowed to see (what) data
+   2.5    Preparing the data
+   2.6    Searching for data
+   2.7    Data based behaviour: the dynamic gateway
+   2.8    Restricting the service
+   2.8.1  Restricting the number of entries
+   2.8.2  Suppression of certain entries by RDN
+   2.8.3  Defining DIT areas for search-only operations
+   2.8.4  Controlling the hackers
+   3      Configuration of TWEB features in detail
+   3.1    Technical configuration options
+   3.2    Political configuration options
+   3.3    Load balancing configuration options
+   3.4    Display configuration options
+   4      Support and discussion list
+
+
+1 INTRODUCTION
+
+   TWEB is based on the Web500gw implementation by Frank Richter, 
+   Technische Universitaet Chemnitz-Zwickau, which is based on the 
+   go500gw implementation by Tim Howes, University of Michigan.
+
+   TWEB was compiled and tested on LINUX with cc, HPUX 9.05 with the
+   HP-ANSI C compiler, as well as SunOS 4.1.2 with the SUN C compiler.
+   TWEB was also compiled with gcc on all platforms. On SUN Solaris
+   2.6.x TWEB was also compiled with gcc 2.7.2.
+
+   The UMICH LDAP client library version 3.0 or 3.3
+   ( URL:ftp://terminator.rs.itd.umich.edu/ldap/ldap-3.3.tar.Z )
+   must be installed on the machine (library path and include file 
+   path is configured in Makefile). With QUIPU ICR-2.x the ISODE-
+   provided LDAP libraries should be used. As such, TWEB only supports
+   LDAP version 2 with the University of Michigan type C API. TWEB is
+   also adapted for the OpenLDAP LDAP library, release version 1.1.2
+   (http://www.openldap.org).
+
+   An upgrade to LDAP version 3 and a C API standadized by the IETF
+   is planned for a not so far away future, most probably in step 
+   with the OpenLDAP package.
+
+   TWEB, as provided here is a fully functional core gateway, which
+   is extended at the author's site by some local features. These
+   extensions are included into the same code base, so that some
+   "#ifdef TUE_TEL" or "#ifdef AMBIX" pre-processor statements can
+   be found throughout the code. 
+
+
+2 GENERAL OVERVIEW
+
+2.1 A case of Public Relations
+
+   TWEB is a gateway between the HTML-based World-Wide-Web (WWW 
+   for short) and the X.500-based wordlwide directory, nowadays
+   mainly accessed through LDAP, the Leightweight Directory Access
+   Protocoll. As such, TWEB is a mediator between these worlds,
+   providing run-time access to a lively database and preparing
+   results in a usable format.
+
+   Why not access the directory directly via my browser-built-in
+   LDAP functionality, you may ask. One answer is, that TWEB with
+   it's build-in security features may provide access to more
+   internal data for permitted users, while denying these data for
+   outside users. This might be very handy from the database
+   administration point of view, easing the task of checking
+   for consistencies between seperate inside and outside databases.
+
+   Secondly, TWEB provides for a flexible display of results,
+   not just showing the pure data. Corporate identity, even when
+   using a staff's directory, can be implemented by an organization.
+   Furtheron, important messages and hints can be added on the fly,
+   that are relevant to the directory user. This is also possible
+   via HTTP links, provided either through the directory data (e.g.,
+   links to personal home pages) or embeded into HTML text loaded
+   during result page preparation. Thus, the integration of WWW and
+   the directory can be two-ways, not just one-way.
+
+   Thirdly, TWEB can, with some extensions not yet provided in
+   the current distribution, easily be configured to access the
+   directory more than once, in order to return results for a
+   single request. For example, this can be used to build a page
+   with the phoenbook entries of a whole department, institute, or
+   faculty, spanning many hierarchies is the underlying directory
+   database, as implemented at the University of Tuebingen.
+
+   When running TWEB with some of the configuration options, one
+   might easily find more points that are in favor of a gateway
+   solution, rather than purely accessing the data of a single
+   directory entry at a time.
+
+   BUT AFTER THIS SHORT EXCURSION INTO THE WORLD OF PR, LET'S
+   HAVE A LOOK AT WHAT TWEB PROVIDES AND WHAT FEATURES CAN
+   BE USED.
+
+
+2.2 Configuration files and TWEB start-up
+
+   Allmost anything what TWEB provides is determined by a set of
+   configuration files during start-up, or at run-time. There is 
+   the main ressource file (tweb.rc) that provides for basic,
+   language-independant features, like host and port of the connected
+   directory server. Language-specific configuration parameters
+   are located in the config files (tweb.conf.x), with x (0-9)
+   standing for any of a set of supported languages. Language 
+   strings, that are used to build an HTML result page are taken
+   from the language files (tweb.lang.x), again with x indicating
+   the language in question. Those files are located in the 
+   TWEB_conFiles subdirectory; the TWEB binary, probably via a
+   symbolic link, should also reside within that directory.
+
+   Header and footer files, and certain message files are loaded
+   during run-time, so that the content can be updated on-the-fly,
+   without restarting the gateway. Those files can be found in the
+   LDAP_etc subdirectory, but can also be located elsewhere, after
+   setting the ETCDIR parameter in the tweb.rc file.
+
+   Certain configuration parameters can be overridden by command
+   line parameters during start-up. Type 'tweb -h' to get a short
+   description of each command line parameter, or have a look at
+   the description below. The important parameters are '-l' for
+   selection of the LOCAL user of the syslog facility, and '-L'
+   for selection of languages.
+
+   When starting, TWEB first of all determines which languages should
+   be supported. A sub-process is created for each language by the
+   fork() system call, and the starting process is terminated. (In case
+   of only one language, TWEB will not fork, but instead use the first
+   process for the gateway service.) Each sub-process is responsible for
+   one of the languages, and presents hyperlinks to the other languages'
+   HTTP addresses on HTML pages, so that the user can switch from one
+   language to the other. When language hints are provided within the
+   directory data (see below) even attribute values may be presented
+   language-specific. (This is not to be mixed up with the LDAPv3
+   standard, which provides for language specification via attribute
+   options.)
+
+   The starting TWEB initializes itself by reading the tweb.rc, the
+   tweb.conf.x, and the tweb.lang.x files, and stores the configuration
+   in a global data structure that can be used by all parts of the
+   program. Command line options are considered last, and can override
+   previously defined parameters. In the tweb.rc and tweb.conf.x files
+   parameters are generally additive, meaning that configuration can be
+   spread across those files (e.g., GW-SWITCH can be set to language-
+   independant gateways in tweb.rc and extended by language-specific
+   gateways in the tweb.conf.x files.)
+
+   Also, message, header and footer files are checked for presence, and
+   a warning is printed to standard output, if they are missing. After
+   some more sanity checks of the configuration, TWEB connects to the
+   port it was configured for and starts listening for HTTP requests.
+   (In the tweb.rc config file only a base port is given; the gateway
+   process serving for language 0 will listen at this port; the gateway
+   for language 1 at port+1, for language 2 at port+2, and so on, upto
+   the language with number 9.)
+
+
+2.3 The running gateway
+
+   When a request is started by an external HTTP client, TWEB checks
+   for access rights of that client (see below), and decides, whether
+   the request can be handled by the process itself (mainly simple
+   requests, like, e.g., sending the help file), or whether another
+   sub-process should be started. In both cases the TWEB master process
+   returns to listening for requests, so that new request can be
+   handled while old ones are still in progress.
+
+   A request is encoded into the URL, the Universial Ressource Locater,
+   the HTTP client sends to the gateway process. Such an URL is build
+   of different parts, as follows:
+
+      http://host:port/request
+
+   First of all, 'http://' defines the HTTP protocoll itself. As
+   TWEB is the mediator between WWW and the directory, it is an HTTP
+   server towards the browser, accepting normal HTTP request, but is an
+   LDAP client towards the directory server, sending LDAP requests.
+
+   Host and port are the same as in the tweb.rc configuration file,
+   and tell the browser, where to direct the request.
+
+   The request for TWEB is given in the last part of the URL, in a more
+   or less complicated format. The most simple request is the EMPTY
+   request ( http://host:port/ ), which will cause TWEB to return a
+   listing of directory entries just below it's BASEDN. (Besides beeing
+   the "home" for TWEB when sending an URL without further specification,
+   the BASEDN can also be configured as beeing the root entry of an DIT
+   area, and TWEB will only serve requests within, but not outside that
+   area; STRICT-BASEDN.)
+
+   All other requests are given by a starting letter (beware: that
+   letter is CASE-SENSITIVE) and possibly a further specification.
+   That letter directs TWEB to one of several actions, like returning
+   a directory listing, reading a specified entry, or sending a 
+   formular for modification of an entry. If a directory look-up
+   is necessary, TWEB will perform that via LDAP, prepare the results
+   as an HTML page, and return it to the requesting client. After
+   that the process will die, unless it was the master process, that
+   returns to listening for further requests. Thus, TWEB's action is
+   as state-less as the HTTP protocoll itself, but some information
+   for subsequent client requests can be embedded into the result,
+   like for example a gateway-switch (see below) or an entries' old
+   data in a modification formular.
+
+   Like in HTTP, the TWEB request URL should contain no space characters,
+   and certain special chars should be HTML escaped. TWEB will allways
+   prepare such URLs in its own results, e.g., when returning a list of
+   entries, with each one beeing a clickable hyperlink for the next data
+   retrieval. Thus, during interaction with TWEB, the user has not to
+   consider such special characters, for they are converted automatically.
+   Only the very first link to TWEB, be it embedded into a web page, or
+   entered directly into the browser's 'goto URL' field, or whatever it is
+   called, should be checked for those characters.
+
+
+2.4 check4access: who is allowed to see (what) data
+
+   A requesting client not only gives the URL to TWEB, but also it's
+   IP or Internet address. This is an address needed by computers to
+   find each other in the world-wide network. Normally, computers
+   have also so-called Internet Names, that are more human-readable.
+   To match IP addresses and internet names, the Domain Name Service
+   (DNS) is run on the Internet. When TWEB receives an IP adress,
+   it will try to look up the corresponding internet name of the
+   requesting client and use that information to decide on access
+   rights of the client. If a host's name cannot be found in the
+   DNS, this is also used as a bit of information. The configuration
+   parameters GRANT, REFUSE, ALLOW-STRING, and DENY-STRING can be
+   set to specify access rights based on internet names in a very
+   flexible way. Furtheron, the HTTP information of proxy access
+   is considered, if the parameters NO-PROXY and ALLOW-PROXY are set.
+
+   When TWEB has decided on access rights, it will continue depending 
+   on these rights. When service is totally refused to a requesting
+   host, or a complete IP domain, a corresponding message is send to
+   the client and the TWEB process terminates. Otherwise, TWEB selects
+   one of two configured WEBDNs (the directory names of corresponding
+   entries in the local directory) and WEBPWs (corresponding passwords)
+   and sends the LDAP requests with these DNs to the directory server.
+   The server should of course be configured in a way, that the one DN
+   has access to internal data, whereas the other has not. Thus, data
+   retrieval can be controlled by the server, not only by TWEB itself.
+
+
+2.5 Preparing the data
+
+   Almost any result page is build by combining different areas, as
+   appropriate for the result returned. A header and footer is located
+   at the top and the bottom of the HTML page, respectively. (In fact,
+   the footer is followed by a tiny TWEB version info, so the footer
+   is only the second-last element.) Below the header some internal
+   message can follow (ALLOW-MESSAGE), which will not be shown to an
+   outside requestor, and in front of the footer there can be a Legal
+   Message for the outsider (LEGAL; actually, if the ON-TOP parameter
+   is specified for the LEGAL option, this Legal Message will also be
+   printed at the beginning of the result page). Below the header/
+   internal message, an area for navigation, reading the current base
+   position and a search box may follow, that can be used for entering
+   further requests.  Below that, the results of the current request
+   are shown.
+
+   If there are more than one result entries to the current request (e.g.,
+   due to a listing of entries below the current DIT position, or multiple
+   matches for a search request), a hyperlink for each entry is displayed,
+   to give the user the possibility to follow the link and obtain the
+   results for the next request. The HREF within the hyperlink is a
+   complete URL, with host:port, and the directory entries' distinguished
+   name (DN) for the next request to TWEB.
+
+   Results can be grouped to different lists and sorted within each
+   group, according to the settings of the SORT configuration parameter,
+   and the entries' objectclasses. The objectclasses given in the SORT
+   configuration parameter are scanned for in each result entry,
+   sequentially, and an entry is placed into the appropriate group, as
+   soon as an objectclass is found. (Entries having none of the SORT
+   objectclasses will only be shown, if the SHOW-DEFOC configuration
+   parameter as well as a DEFAULT DISPLAY-TYPE is given.) After scanning
+   for groups, each group of entries is sorted according to the contents
+   of the sort attribute listed within the group's SORT clause, or by the
+   attribute "sn" (surname), if no explicite sort attribute is given, or
+   according to the entries' relative distinguished name, if there is no
+   sn attribute within the entries. The sorted groups are displayed in
+   the order, that is given numerically in the SORT clauses. Thus, the
+   order while scanning for objectclasses (i.e., preparing the groups)
+   is distinct from the order during display. Each group is prepanded
+   by the label given in the SORT clause, with a label consisting only
+   of space characters meaning no label. (Labels containing space
+   characters must be surrounded by double quote characters, i.e., '"'.)
+
+   If there is only one result to a request, TWEB will perform a read
+   request for the X.500 entry and display the attributes of the entry.
+   Since access rights are also checked at the server (see above), the
+   attribute list for a permitted user can differ from the list of an
+   external user. In each case, the attributes are sorted according to
+   the DISPLAY-OBJECT given in the SORT configuration parameter, after
+   classification of the entry to one of the SORT groups in much the 
+   same way, as described above. The DISPLAY-OBJECT selects the attributes
+   to be displayed and determines the order of, as well as labels for
+   the attributes. (If the DISPLAY-OBJECT parameter is not given to the
+   SORT configuration option, DISPLAY-OBJECT DEFAULT will be used; if
+   that, however, is not given by the configuration files, the entry
+   will NOT be displayed!) The method for displaying is also given. Thus,
+   attributes can be displayed as simple strings, prepared as HTTP URLs,
+   or as mailto hyperlinks. A complete list of display methods is given
+   below with the description of the FIRST-PAGE configuration parameter.
+   Within the DISPLAY-OBJECT definition, FIRST-PAGE describes attributes
+   to be shown on a first HTML page, and SECOND-PAGE lists attributes
+   for a second HTML page, if given. To obtain the second page, a hyper-
+   link that directs TWEB to read the same entry again with additional
+   attributes, is placed at the end of the first page's attribute list.
+
+
+2.6 Searching for data
+
+   As described above, one element of a result page may be a search box
+   that can be used to enter appropriate search strings. The input is
+   taken by TWEB and used according to the definitions of the
+   ldapfilter.conf file (a basic version is located in the LDAP_etc
+   sub directory.) In that file, rather complicated search algorithms
+   can be defined, but the most simple ones will be to look for cn or
+   sn attributes. By default, the search scope is restricted to one
+   level below the current DIT position, unless the base entry (the
+   current position) containes objectclasses 'organization' or
+   'organizationalUnit'. In this case, the search will cover the whole
+   DIT area rooted at the current position. (Subtree search.) This
+   scope also determines which search rules are taken from the 
+   ldapfilter.conf file. (Look for "web500gw onelevel" and "web500gw
+   subtree".)
+
+   One word for a warning: since TWEB is currently based on LDAPv2 and
+   servers that are NOT aware of special characters, like german umlaute,
+   such characters should NOT be entered to the search box. Depending
+   on the server's implementation and configuration, these characters
+   might crash the server, since they are not one of the expected ASCII
+   characters. TWEB, on the other hand, can hardly figure out the
+   character entered because of differrent code tables in use with 
+   the browsers and the platforms housing TWEB itself. If someone has
+   a simple sollution to the latter problem, the authers would welcome
+   a hint, so they could implement a safe character conversion method.
+
+
+2.7 Data based behaviour: the dynamic gateway
+
+   In the 'preparing data' section, the construction of hyperlinks for
+   further requests was described for situations, when more than one
+   entry matches the previous request. For these hyperlinks, the under-
+   lying URL will normally contain the TWEB's own host and port address,
+   so that requests will be directed towards the same gateway. This, 
+   however, can be modified by a feature called "gateway-switching",
+   directing further requests to other gateways.
+
+   Gateway-switching exists in two flavors: static (via the GW-SWITCH
+   configuration option) and dynamic (selected by the configuration
+   option DYNAMIC-GW) due to data contents. In both cases, a new host
+   and corresponding port address is inserted into the URL of a hyperlink.
+
+   Static gateway-switching is performed, if a DN given in the configu-
+   ration file, or an entry below that DN, is referred to in the hyperlink.
+   In that case, the beginning of the URL is taken from the configuration
+   file and the DN of the referred-to X.500 entry is appended. Like other
+   configuration options, GW-SWITCH in the tweb.rc file will refer to one
+   such external gateway for all TWEB languages, whereas GW-SWITCH in the
+   tweb.conf.x files will be language-specific.
+
+   When the configuration option DYNAMIC-GW is given, TWEB will scan each
+   entry to be referred to, for the presence of a so-called gateway-
+   switch-URL. For the time beeing, this is encoded in the attribute
+   "labeledURI", with the value having a special syntax. Normal syntax
+   is an URL of the from "http://host/ label". With the gateway-switching
+   option, this format is extended to "http://host:port/ label (gw)",
+   for a language-independant switch, and "http://host:port/ label (gw-xx)",
+   for a languager-specific switch. The "xx" has to be replaced by the
+   international 2-letter language tag, as defined in ISO 639, "Code for
+   the representation of names of languages" (see also RFC-1766). Thus,
+   "gw-de" means "german language", "gw-en" means "english", "gw-fr"
+   means "frensh". When displaying the contents of a labeledURI attribute,
+   TWEB will suppress values that follow the above syntax. For performance
+   reasons, searching of entries, as well as listing entries below the
+   current position (i.e., browsing through the directory), will allways
+   include look-up of the labeledURI and other attributes.
+
+   If both static and dynamic gateway-switching are active, the dynamic
+   switch will be considerred first; if no gateway-switch URL, first testing
+   for a language-specific one, than testing for an independant one, is
+   found within an entry, static switching is tested, again the specific
+   case prior to the un-specific.
+
+   The most prominent usage of the gateway-switching feature is to direct
+   requests for other organizations' data within a country (or for sub-
+   organizations within one organization) to specific gateways, thus
+   giving the option to implement a Corporate Identity for each organi-
+   zation via organization-specific header and footer files. Beside that,
+   of course, specific access policies can be implemented by each orga-
+   nization, and network traffic is reduced by accessing an organization's
+   data directly with a HTTP browser, not via an intermittant gateway
+   and X.500 server of another organization. This latter point may also
+   mean a much reduced response time, when unnecessary data transfers are
+   ommited.
+
+
+2.8 Restricting the service
+
+   A number of configuration options can be used to restrict the display
+   of certain information, or to deny service totally for certain users.
+   These options are described in the following sub-chapters.
+
+2.8.1 Restricting the number of entries
+
+   Normally, an X.500 server will have an option "sizelimit" set to
+   some small or medium value, e.g., 100 or 500. This sizelimit will
+   prevent the number of entries returned for any one request, to
+   exceed that number. This is mainly set by the server's administrator
+   to reduce system and network load.
+
+   When displaying all entries returned from the server, TWEB might
+   produce a very large HTML file. That file may take some time for
+   transfer, and may be very un-handy, because of the long list of
+   entries.
+
+   To prevent the possibiloty of such large files, the TWEB administrator
+   can reduce the number of entries displayed even further, by use of
+   the MAXCOUNT configuration option. This will reduce the number of
+   ALL entries returned from the server.
+
+   If this restriction should only apply to person's entries, the
+   configuration option MAX-PERSON can be used. This option will
+   apply to each sub list of person's entries seperately. Thus, the
+   total number of persons may exceed the MAX-PERSON limit, if more
+   sub lists containing person's entries are given.
+
+   Each restriction of the number of entries to be displayed, will
+   lead to a random list of entries, cutting the results as soon as
+   the maximum count is reached. However, rhis is also true for the
+   sizelimit option at the server itself.
+
+2.8.2 Suppression of certain entries by RDN
+
+   The server's access control rules will normally define, which entries
+   can be obtained by the TWEB gateway. In some situations, the TWEB
+   administrator might want to suppress even more entries, e.g., DSA
+   entries or other mere technical ones. (This can also mean, that
+   complete DIT areas could be hided from the user.)
+
+   To invoke that, the configuration option NO-SHOW-RDN can be defined
+   to reflect a space-seperated collection of RDNs, or parts of RDNs,
+   which will not be shown to the user. This, of course, is a very
+   crude method, but normally will give the results, the TWEB admin
+   may be interested in.
+
+2.8.3 Defining DIT areas for search-only operations
+
+   As described allready in the "Restricting the number of entries"
+   section, large lists of entries may be cumbersome to read, if at
+   all they are returned completely by the server. To exclude the
+   possibility of such partial, or ultra-long lists, TWEB can be
+   configured to display the search box only at certain DIT positions.
+   This is done via the SEARCH-ONLY configuration option, which defines
+   the DIT area(s) for this restriction, as well as certain message
+   files, which should explain the local restriction to the user, and
+   tell him, how to find the information, he is looking for. The
+   SEARCH-ONLY configuration option will only take effect, when
+   browsing the directory, but not prevent a normal subtree search.
+
+   This configuration option, of course, can also be used to implement
+   certain access policies. The option will be active for both the
+   internal and the external user.
+
+2.8.4 Controlling the hackers
+
+   From time to time, users will direct tools to the world-wide-web,
+   that will screen through all, what is supplied in the system. This
+   tools are known as robots, or crawles, and normally the collect data
+   to build indices for faster information retrieval.
+
+   Sometimes, however, these tools can be very ugly, especially, when 
+   they try to collect data as fast as possible. This might cause
+   severe performance decrease, preventing other users to get data 
+   at all. In order to have some mechanisms against this type of
+   data harvest, TWEB can be configured with the COMREFUSE option
+   activated, which will control the number of accesses to the gate-
+   way by a certain number of IP ranges within a selected time-slice.
+
+   Those IP ranges are constructed by reducing the requesting host's
+   32-bit Internet address to a 13-bit number, thus giving 8192
+   different IP ranges. Each IP range is controlled seperately during
+   a pre-set time-slice, and each IP range can be excluded from
+   further service (returning an appropriate error message), when
+   a pre-set number of accesses is reached within that time-slice.
+   All hosts of that IP range are suspended from TWEB's service for
+   a number of time-slices, and resumed for service afterwards.
+
+
+3 Configuration of TWEB features in detail
+
+   Runtime configuration is provided by the files tweb.rc (general
+   configuration) and tweb.conf.x (language-specific configuration).
+   For each supported language there must be a tweb.conf.x and 
+   tweb.lang.x file, with 0 <= x <= 9.
+
+   Remark: most of the features are best configured in the files as given
+           below, but there may be situations, where transfer, or even
+           splitting to other configuration files could be used, e.g.,
+           static gateway-switching may be configured in tweb.rc listing
+           organizations which support only one gateway, whereas organi-
+           zations supporting different language-specific gateways may be
+           configured in the appropriate tweb.conf.x files; the resulting
+           gw-switch list will contain all organizations, regardless of the
+           originating files.
+
+           In order to keep off WWW robots from blocking the gateway put
+           a file with name robots.txt into the directory, together with
+           the tweb binary, containing the following:
+
+                   # go away
+                   User-agent: *
+                   Disallow: /
+
+           This is the same behaviour as if there were a www-server with a
+           corresponding public directory containing the file robots.txt.
+
+
+   The following sections will list TWEB's configuration options.
+   (See also the example configuration files.)
+
+
+3.1 Technical configuration options
+
+   This section lists options, which define the technical parameters of
+   TWEB's operation. Most of them are located in the tweb.rc configuration
+   file, but some could also go into the tweb.conf.x files.
+
+        LDAPD             -- The host running the LDAP daemon
+                             ( usually located in tweb.rc )
+
+                     example:   LDAPD            x500.zdv.uni-tuebingen.de
+
+        LDAPPORT          -- The port the LDAP daemon is listening on
+                             ( usually located in tweb.rc )
+
+                     example:   LDAPPORT         389
+
+        WEBPORT           -- The base port the gateway is attached to
+                             (the language-specific offset x is added
+                              to this number for every running GW)
+                             ( usually located in tweb.rc )
+
+                     example:   WEBPORT          7000
+
+        TIMEOUT           -- Timeout in seconds for any one LDAP
+                             operation
+                             ( usually located in tweb.rc )
+
+                     example:   TIMEOUT         240
+
+        ETCDIR            -- The directory containing support files
+                             (help files, header/footer files ...)
+                             ( usually located in tweb.rc )
+
+                     example:   ETCDIR  ./LDAP_etc/
+
+        FILTERFILE        -- The LDAP filterfile
+                             ( usually located in tweb.rc )
+
+                     example:   FILTERFILE     ldapfilter.conf
+
+        BASEDN            -- The default starting point of DIB access, when 
+                             no other directory position is given
+                             At this position, optional header and footer
+                             information (HTML code in file) can be displayed
+                             ( usually located in tweb.conf.x )
+
+                     example:   BASEDN  "o=Universitaet Tuebingen, c=DE"
+                                        tweb-base.head.0 tweb-base.foot.0
+
+        HELPFILE          -- Name and path of the help-file
+                             ( usually located in tweb.conf.x )
+
+                     example:   HELPFILE       tweb.help.0
+
+        FRIENDLYFILE      -- Name and path of the friendly-file
+                             ( usually located in tweb.conf.x )
+
+                     example:   FRIENDLYFILE   ldapfriendly.0
+
+        HEADER/FOOTER     -- General header/footer information displayed on
+                             every HTML-page, except when other headers/footers
+                             apply
+                             ( usually located in tweb.conf.x )
+
+                     example:   HEADER         tweb.header.0
+                                FOOTER         tweb.footer.0
+
+        ALLOW-MSG         -- Option to specify a special file located in the
+                             ETCDIRectory containing a message to be displayed
+                             in case of an allowed access to TWEB
+                             (see next section)
+                             ( usually located in tweb.conf )
+
+                     example:   ALLOW-MSG      allow.msg.0
+
+
+3.2 Political configuration options
+
+   This section lists options to implement a certain access policy with the
+   TWEB web-X.500 gateway, or to alter the behaviour of the gateway when
+   displaying data from certain DIT areas. 
+
+        WEBDN             -- The DN of a technical webgw X.500 entry,
+                             which is used for a permitted (internal) user
+                             (for logging AND access control)
+                             ( usually located in tweb.rc )
+
+                     example:   WEBDN          "cn=TWEB-quickie-intern,
+                                               ou=SERVICES, o=Universitaet
+                                               Tuebingen, c=DE"
+
+        WEBPW             -- The Password in the WEBDN entry
+                             ( usually located in tweb.rc )
+
+                     example:   WEBPW          password4quickie-intern
+
+        WEBDN2*           -- The DN of a technical webgw X.500 entry,
+                             which is used for a not-permitted (external) user
+                             (for logging AND access control)
+                             ( usually located in tweb.rc )
+
+                     example:   WEBDN2         cn=TWEB-quickie-extern,
+                                               ou=SERVICES, o=Universitaet
+                                               Tuebingen, c=DE"
+
+        WEBPW2*           -- The Password in the WEBDN2 entry
+                             ( usually located in tweb.rc )
+
+                     example:   WEBPW2         password4quickie-extern
+
+            *  setting WEBDN2 as well as WEBPW2 to real values is useful,
+               if the X.500 service in the background is also used by other
+               directory user agents; in this case, a clean distinction,
+               even on the ACL level, can be made between TWEB and those
+               other DUAs.
+               To fully exploit the feature of two different WEBDNs the
+               DSA must support an ACL policy, which can reduce access
+               rights for a specified DN, while at the same time defining
+               broader access rights for a group of other DN, which may
+               also include the specific DN; such a behaviour is NOT
+               implemented in Isode's QUIPU 2.x DSA; a patch introducing
+               such a policy was developped at the University of Tuebingen
+               for QUIPU 2.2v4, and can be optained seperately.
+               Slapd stand-alone LDAP servers implement a different ACL
+               mechanism and can be configured more easily by use of the
+               first matching access-rule in the slapd.conf configuration file
+
+        GRANT**           -- A string describing IP domains allowed to access
+                             the gateway
+                             ( usually located in tweb.rc )
+
+                     example:   GRANT   (www9|mog|x500server|meal)
+                                        \.zdv\.uni-tuebingen\.de$|
+                                        (abcde01|xyz)\.modem\.org\.de$
+
+        REFUSE**          -- A string describing IP domains refused to access
+                             the gateway
+                             ( usually located in tweb.rc )
+
+                     example:   REFUSE hackhost\.(org1\.)?uni-xyz\.de$
+
+        ALLOW-STRING**    -- A string describing IP domains allowed to
+                             access the DIB authorized by WEBDN (see above)
+                             example: "\.de$|\.us$|\.edu$"
+                             ==> host of domains de, us and edu will
+                             have authorized access to the DSA, others NOT
+                             ( usually located in tweb.rc )
+
+                     example:   ALLOW-STRING    uni-tuebingen\.de$
+
+        DENY-STRING**     -- The opposite of ALLOW-STRING. Here, access for
+                             subsets of the ALLOW-STRING may be reduced.
+                             ( usually located in tweb.rc )
+
+                     example:   DENY-STRING     not\.secure\.host
+                                                \.uni-tuebingen\.de$
+
+            **  GRANT/REFUSE are considered first to decide, whether the
+                requesting host will be served at all; only hosts granted
+                the service will be checked against ALLOW-STRING/DENY-STRING
+                to classify as internal or external user (hence, giving
+                WEBDN or WEBDN2 as the DN during X.500 look-up);
+                both, GRANT and ALLOW-STRING are used as positive-lists,
+                whereas REFUSE and DENY-STRING are used as negative-lists;
+                if the positive-lists are defined, and the requesting host's
+                IP domain is NOT covered by the list's description, the
+                host is considered as not-permitted; only when the host
+                is accepted by the positive-list, the negative-list will
+                be considered to decide on a more specific exclusion of
+                the host's IP domain;
+                if the positive-lists are not defined, each host will be
+                accepted, as if contained within the list; if the negative-
+                lists are not defined, each host will be accepted, as if
+                NOT contained within the list;
+                hosts NOT found in the Domain Name Service (DNS) will be
+                granted access, but will NEVER have authorized access
+                via WEBDN
+
+        TWEBHOST          -- Supplies a constant hostname in the returned URL
+                             of HTTP links independant from the local one
+                             ( usually located in tweb.rc )
+
+                     example:   TWEBHOST        x500.zdv.uni-tuebingen.de
+
+        NO-PROXY          -- Access restrictions for WWW-PROXY-Servers
+                             ( usually located in tweb.rc )
+
+                     example:   NO-PROXY
+
+        ALLOW-PROXY       -- if NO-PROXY is configured
+                             access from a given set of proxy-hosts
+                             ('host1:host2') is allowed
+                             ( usually located in tweb.rc )
+
+                     example:   ALLOW-PROXY    www1.zdv.uni-tuebingen.de:
+                                               www2.zdv.uni-tuebingen.de
+
+        COMREFUSE         -- If configured, implements an interrupt-driven
+                             time-slicing of the gateway. During these
+                             slices only a maximum number of accesses
+                             from a given group of IP-addresses is permitted;
+                             additional accesses will lead to immediate
+                             suspension of the IP connection to the WWW
+                             client; this suspension will last for a con-
+                             figured number of time-slices, and service
+                             for the IP domain in question will resume
+                             afterwards. Additionally, access statistics will
+                             be dumped to a file at given intervals;
+                             the duration of a time-slice will be computed
+                             randomly between a minimum and maximum;
+                             all times are given in seconds
+                             ( usually located in tweb.rc )
+
+                     example:   COMREFUSE   100 200 40 12 43200
+                                            ./stats/hack-stats
+
+                     i.e.:      minimum timeslice -> 100 secs
+                                maximum timeslice -> 200 secs
+                                number of accesses to tolerate in slice -> 40
+                                how long will be blocked -> 12 slices
+                                period to write a stat-file -> 43200 secs
+                                name of stat-file -> ./stats/hack-stats
+                                   (i.e., file relative to TWEB binary)
+
+        STRICT-BASEDN     -- Access to entries not below basedn is relayed
+                             to another gateway ( ->  GW-SWITCH must be set)
+                             ( usually located in tweb.rc )
+
+                     example:   STRICT-BASEDN
+
+        MAXCOUNT          -- The maximum number of displayed entries
+                             ( usually located in tweb.rc )
+
+                     example:   MAXCOUNT        200
+
+        MAX-PERSON        -- Maximum number of persons displayed in any of
+                             the configured sub-lists ( -> SORT option),
+                             if access is not allowed;
+                             if STRICT is given, this number of persons is
+                             shown at maximum, even in case of an
+                             allowed access;
+                             if NO-BROWSE is given, only non-person entries
+                             will be displayed while browsing, whereas persons
+                             have to be searched for
+                             ( usually located in tweb.rc )
+
+                     example:   MAX-PERSON      5    STRICT  NO-BROWSE
+
+        NO-SHOW-RDN       -- Matching rules for RDNs that will NOT be displayed
+                             (e.g., technical entries in the DIT or internal
+                              OUs not to be displayed by the GW)
+                             words surrounded by spaces will be matched as
+                             substrings; allignment to the start or end of
+                             the tested RDN can be enforced by surrounding
+                             the words with "|", on either side
+                             ( usually located in tweb.rc )
+
+                     example:   NO-SHOW-RDN     "|cn=Dummy notToBeShownRDN"
+
+        SEARCH-ONLY       -- Defines the root of a DIT area, where browsing
+                             is restricted to non-person entries; person
+                             entries can only be found by explicite searching
+                             (with appropriate header and footer information)
+                             ( usually located in tweb.conf )
+
+                     example:   SEARCH-ONLY    "ou=students, o=my-university,
+                                                c=my" search-only.head.0
+                                                search-only.foot.0
+
+        LEGAL             -- Flag for displaying of a comment concerning
+                             Peoples Rights
+                             (the text is configured in the tweb.lang.x files,
+                             string numbered 65 of the gateway)
+                             (Comment: certainly, it would be better to have
+                              that text in an external file)
+                             Sub-option ON-TOP directs TWEB to display the
+                             message immediately below the HEADER information,
+                             not above the FOOTER message
+                             ( usually located in tweb.rc )
+
+                     example:   LEGAL ON-TOP
+
+        CACHE-EXPIRE-DEFAULT -- The default value for the expire time
+                             in seconds. After this time the page is no
+                             longer cached by a browser or WWW cache.
+                             ( usually located in tweb.rc )
+
+                     example:   CACHE-EXPIRE-DEFAULT 900
+
+        CACHING-TERMS     -- A more detailed description of caching directives.
+                             Format:
+                                <expire-time> READ|MENU|L2ND RDN|OC <value>
+                                ...
+
+                             To specify for a given access-type: 
+                             READ|MENU|L2ND (L2ND = second page) the expire-time
+                             in seconds for given RDN|OC values
+                             ( usually located in tweb.rc )
+
+                             BEWARE: THIS OPTION IS NOT USED AT THE AUTHOR'S
+                                     SITE, ROUTINELY. THUS, CORRECT BEHAVIOUR
+                                     CANNOT BE GARANTEED !
+
+                     example:   CACHING-TERMS  3600    READ    RDN     Fax
+                                               7200    MENU    OC      person
+                                               10800   menu    RDN     Mueller
+
+        MODIFY/MODATTR    -- Selects for specified object-class (MODIFY) the 
+                             attributes permitted for modification, their 
+                             labels and the maximum number of values to be 
+                             handled by TWEB (MODATTR)
+                             ( usually located in tweb.conf )
+
+                             BEWARE: THIS OPTION IS NOT USED AT THE AUTHOR'S
+                                     SITE, ROUTINELY. THUS, CORRECT BEHAVIOUR
+                                     CANNOT BE GARANTEED !
+
+                     example:   MODIFY          person
+                                MODATTR         personalTitle        title 1
+                                                telephoneNumber      phone 2
+                                                ...
+
+        NO-MODIFY         -- Entries that contain one of the named
+                            ObjectClasses will be displayed without
+                            the possibility for modification.
+                             ( usually located in tweb.rc )
+
+                     example:   NO-MODIFY      |toc_primas|
+
+
+3.3 Load balancing configuration options
+
+   This section lists configuration options related to gateway-switching.
+
+        GW-SWITCH         -- Defines DIT areas, which will direct TWEB to
+                             introduce other gateway addresses for the
+                             so-called gateway-switching
+                             (STATIC gateway-switching; see section 2.7)
+                             ( usually located in tweb.conf )
+
+                          REMARK: A set of slides explaining gateway-switching,
+                                  presented at the January-1999 DANTE meeting
+                                  in Utrecht, NL, can be found at the TWEB FTP
+                                  site at
+                                    ftp://ftp-x500.uni-tuebingen.de/tweb
+
+                     example:   GW-SWITCH   "ROOT" HTTP://x500-relay.
+                                                   uni-tuebingen.de:8901/M
+                                            "c=DE" HTTP://x500-relay.
+                                                   uni-tuebingen.de:8911/
+
+        DYNAMIC-GW        -- If given, tells TWEB to use dynamic gateway-
+                             switching; if not given, only static switching
+                             will be used, if configured;
+                             a labeledURI attribute in an X.500 entry con-
+                             taining (gw), (gw-de), or (gw-en) in its label
+                             part is used to link this entry to another gateway
+                             ( usually located in tweb.rc )
+
+                     example:   DYNAMIC-GW
+
+3.4 Display configuration options
+
+   This section lists options related to the displaying of results on an
+   HTML page. The options direct display of entries, attributes, as well
+   as styles for displaying.
+
+        SORT              -- Classification of a list of entries into sub-lists
+                             according to their object classes; generating of
+                             sub-lists will be according to the order the
+                             OCs are given in the SORT option; displaying the
+                             sub-lists will be according to the numbers given
+                             as third parameter; sub-lists without an intro-
+                             ducing label (second parameter) should have a
+                             label of " "; the fourth parameter is the DISPLAY-
+                             TYPE for a given object (see below) and the fifth
+                             parameter is the attribute used for sorting;
+                             parameters four and five are optional;
+                             if not given reasonable defaults will be used;
+                             if none of the entries objectclasses is given
+                             in the SORT option, TWEB will randomly select
+                             one of the entry's OCs as a new entry to the 
+                             SORT list, using DISPLAY-TYPE "default"; if that
+                             type is not defined, the entry will NOT be
+                             displayed at all
+                             (see also section 2.5)
+                             ( usually located in tweb.conf.x )
+
+                     example:   SORT person             Staff 4  person tat_sort
+                                     organization       Organizations 3 orgs
+                                     organizationalUnit "O Units"     2  ous
+                                     ...
+
+        DISPLAY-OBJECT    -- For specified DISPLAY-TYPES define the order, 
+                             labels and type of HTML-code produced for given
+                             attributes (see FIRST-PAGE, SECOND-PAGE below);
+                             a DISPLAY-TYPE "default" will match all types
+                             NOT specifically listed; when the default type
+                             is not giving, some X.500 entries might NOT be
+                             displayed (see also SHOW-DEFOC below)
+                             ( usually located in tweb.conf.x )
+
+                     example:   DISPLAY-OBJECT  person
+                                FIRST-PAGE      ....
+
+            FIRST-PAGE    -- Attributes to be displayed for a specified
+                             DISPLAY-TYPE
+                             Format: <attribute> <label> <display-type>
+                             Display-types:
+                                 MULTILINE    -- attribute with multiple lines
+                                 DATE         -- attribute as date
+                                 HREF         -- attribute with syntax DN
+                                                 as hyperlink (READ DN entry)
+                                 URI          -- attribute with syntax URL
+                                                 as hyperlink
+                                 MAILTO       -- attribute as mailto (must be
+                                                 supported by WWW client)
+                                 MOVETO       -- like HREF, but the link will
+                                                 be a LIST, instead of a READ
+                                                 hyperlink
+                                 BMP          -- phote as bitmap
+                                 JPEG         -- photo as jpeg
+                                 JPEG2GIF     -- convert jpeg to gif
+                                 BOOLEAN      -- binary attribute
+                                 PGPKEY       -- display PGPKey for cut&paste
+                                 DYNAMICDN    -- uses DIT-CONFIG to show
+                                                 attribute as hyperlink
+                                 INDEXURL     -- show this hyperlink as defined
+                                                 with INDEX-URL
+                                 DEFAULT      -- anything else
+
+                     example:   DISPLAY-OBJECT  person
+                                FIRST-PAGE      cn            Name  DEFAULT
+                                                personalTitle Title DEFAULT
+                                                ...
+
+            SECOND-PAGE   -- show additional attributes not displayed on
+                             the first page
+
+                     example:   DISPLAY-OBJECT  person
+                                FIRST-PAGE      ...
+                                                ...
+                                SECOND-PAGE     sn           Surname     DEFAULT
+                                                info         Information DEFAULT
+
+        SHOW-DEFOC        -- Show Default Objectclass. If no objectclass
+                             did match -> show entry with attributes as
+                             defined in default-display
+                             ( usually located in tweb.rc )
+
+                     example:   SHOW-DEFOC
+
+        PULL-DOWN-MENUS   -- Use BUTTONS and PULL-DOWN-MENUS instead of links
+                             in order to support: help, language-switch,
+                             move-upwards and read-entry functionalities
+                             ( usually located in tweb.rc )
+
+                     example:   PULL-DOWN-MENUS
+
+        LANGUAGE          -- The labels of buttons for the switch to
+                             the other started language-specific gateways
+                             ( usually located in tweb.rc )
+
+                     example:   LANGUAGE        Deutsch
+                                                English
+                                                Fran&ccedil;ais
+
+        STRIP-PIN         -- Specify here the object-classes where numbers
+                             ( PINs, personal ident numbers, etc. ) following
+                             an RDN will be stripped when displayed
+                             ( usually located in tweb.rc )
+
+                     example:   STRIP-PIN |toc_profs|person|toc_primas|
+                                          toc_cperson|toc_funcs|toc_pextra|
+
+        INDIRECT-ATTRS    -- Format:
+                               INDIRECT-ATTRS <ref-attribute>
+                               IND_ATTRS <selection> REPLACE|APPEND <attribute>
+                                                       <host> <port> <baseDN>
+
+                             If there is an attribute with name <ref-attribute>
+                             in a given entry, values of attribute <attribute>
+                             in this entry will be REPLACEed|APPENDed by values
+                             taken from the same attribute <attribute> of
+                             an entry with DN:
+                                 "cn=<ref-attribute-value>,<baseDN>",
+                             looked-up at an LDAP server <host>:<port>,
+                             but only when some value in <ref-attribute>
+                             matches <selection> at its beginning
+                             ( usually located in tweb.rc )
+
+                     example:   INDIRECT-ATTRS  tat_refattr
+                                IND_ATTRS  POST-  append postaladdress
+                                          x500.uni-tuebingen.de 10100
+                                          "ou=POST,ou=INTERNA,ou=NETZWERK,
+                                          o=Universitaet Tuebingen,c=DE"
+
+        DISP-SEA-RDN      -- Make search-results to be displayed only by RDN
+                             and not by DN relative to the search-base
+                             ( usually located in tweb.rc )
+
+                     example:   DISP-SEA-RDN
+
+        INDEX-URL         -- Display labels of hyperlinks only with selected
+                             RDN parts in the order configured by INDEX-URL;
+                             this option applies to URL attributes within an
+                             entry, which are directed towards other X.500
+                             entries; an application of that might be an
+                             index of entries
+                             DISPLAY-TYPE must be set to INDEXURL.
+                             ( usually located in tweb.rc )
+
+                     example:   INDEX-URL 0,-2 "o=Universitaet Tuebingen, c=DE"
+
+                     i.e.:      labels of a hyperlink below the University
+                                of Tuebingen are shown as follows:
+
+                                1. lowest part of the DN (e.g., a person's name)
+                                2. third-top-most part of the DN (e.g., faculty)
+
+                                all other DN parts will be supressed
+
+        TABLES            -- Format:
+                              TABLES <ALLOW|ALL> <objectclass> <Button-label>
+                                    <mode-selection>:<attribute>,<col-width>
+                                                    [&<attribute>,<col-width>]*
+
+                              During browsing, the entries listed below a
+                              base object (i.e., DIT position) can be displayed
+                              together with some selected attributes in a
+                              tabular format; the SORT configuration option
+                              will be applied to the entries; attribute mail
+                              will be displayed as mailto: and the RDN will
+                              be displayed as a link to the respective entry;
+                              in order to select the tabular format, TWEB will
+                              display a button with a given label, that, if
+                              pressed, will request the tabular format;
+                              however, the button will only be displayed, if
+                              the requesting user is allowed to get this
+                              feature (i.e., ALLOW will select internal users
+                              only, whereas ALL will select all users)
+                              
+                     example:   TABLES ALLOW oleaf Tabelle persontable:rdn,28
+                                          &telephonenumber,25&tat_dummyattr,2
+                                          &mail,45
+
+                     i.e.:      ALLOW -> only allowed users will see the table
+                                oleaf -> table button is shown on presence of
+                                         the objectclass oleaf in the base entry
+                                Tabelle -> the label for the table-request-
+                                         button
+                                persontable -> the keyword for function-
+                                               selection of a persons' table
+                                rdn,28 -> first the rdn-attribute is shown
+                                         in the table with width 28 percent
+                                telephonenumber,25 -> telephonenumber,
+                                         width 25
+                                tat_dummyattr,2 -> a separating column, width 2
+                                mail,45 -> the e-mail-address with width 45
+
+                                (all width values are given in percentage of
+                                 the width of the browsers window, and should
+                                 sum up to 100 %)
+
+
+4 Support and discussion list
+
+   Bug reports and flames (but also critical comments) send to 
+
+      tweb-support@mail500.uni-tuebingen.de. 
+    
+   For general discussion (e.g., about interesting new features,
+   which should be supported), there is a discussion list at
+
+      tweb-l@mail500.uni-tuebingen.de.
+
+   Send requests for subscription to
+
+      tweb-l-request@mail500.uni-tuebingen.de.
+
+
+
+TWEB development team, Tuebingen, January, 15th, 1999
+
+
diff --git a/contrib/tweb/GETTING-STARTED.openldap b/contrib/tweb/GETTING-STARTED.openldap
new file mode 100644 (file)
index 0000000..d1d958c
--- /dev/null
@@ -0,0 +1,75 @@
+TWEB WWW-X500 GATEWAY   -   GETTING STARTED
+
+With the information provided by this file you should be able to start
+an initial version of TWEB. Please follow the steps below:
+
+1. Copy the distribution Makefile onto Makefile:
+
+     > cp Makefile.openldap Makefile
+
+2. Edit the Makefile. You have to change the variables in the first block of
+   the file to your appropriate settings:
+
+     > vi Makefile
+
+3. Now type in make:
+
+     > make
+
+   This should make a binary called tweb whithout severe problems
+
+4. Running the TWEB www-x500 gateway
+
+4.1. Testing the newly compiled binary
+
+     Copy the tweb binary to the sub-directory TWEB_conFiles and
+     change to that directory:
+
+       > cp tweb TWEB_conFiles
+       > cd TWEB_conFiles
+
+     Copy the config files with extension .dist to their respective
+     basefiles:
+
+       > cp tweb.rc.dist tweb.rc
+       > cp tweb.conf.0.dist tweb.conf.0
+       > cp tweb.conf.1.dist tweb.conf.1
+       > cp tweb.lang.0.dist tweb.lang.0
+       > cp tweb.lang.1.dist tweb.lang.1
+
+     Edit tweb.rc to adjust the variables in the
+     first block to your appropriate settings:
+
+       > vi tweb.rc
+
+     Run TWEB with language 0 and 1 (i.e., german and english)
+
+       > ./tweb -L01
+
+     This will run two TWEB server processes, one for german language, the
+     other for english language, whithout syslog logging;
+     you can assess them with your WWW browser by giving the URL
+
+         http://<your-tweb-host>:<your-tweb-port>/
+
+4.2. Adapting TWEB to your local requirements
+
+     When you reached this point you have a running TWEB with basic
+     functionality. Have a look to the FEATURE-LIST file for a
+     description of all features, TWEB does provide. The least, you
+     might want to change are the several header and footer files
+     in order to build up your organizational identity with TWEB.
+     But check also the security features, and the performance (i.e.,
+     load balancing) features. By setting the respective parameters,
+     TWEB can provide for a very special appearance with local require-
+     ments enforced as far as possible. Should you want more reasonable
+     features, please don't hesitate to contact the development team.
+
+
+   Have fun,
+
+   TWEB development team, Tuebingen, September, 9th, 1999
+
+   email: tweb-support@mail500.uni-tuebingen.de
+
+
diff --git a/contrib/tweb/LDAP_etc/allow.msg.0 b/contrib/tweb/LDAP_etc/allow.msg.0
new file mode 100644 (file)
index 0000000..3314bfc
--- /dev/null
@@ -0,0 +1,4 @@
+<strong>Datei: LDAP_etc/allow.msg.0<br>
+Achtung</strong>: Dies ist eine Meldung, die nur dem authorisierten
+Nutzer angezeigt wird !!!
+<hr>
diff --git a/contrib/tweb/LDAP_etc/allow.msg.1 b/contrib/tweb/LDAP_etc/allow.msg.1
new file mode 100644 (file)
index 0000000..9a5c311
--- /dev/null
@@ -0,0 +1,4 @@
+<strong>File: LDAP_etc/allow.msg.1<br>
+Attention</strong>: This message will only be shown to the 
+permitted user.
+<hr>
diff --git a/contrib/tweb/LDAP_etc/ldapfilter.conf b/contrib/tweb/LDAP_etc/ldapfilter.conf
new file mode 100644 (file)
index 0000000..d189384
--- /dev/null
@@ -0,0 +1,86 @@
+# ldap filter file
+#
+# lines like this that start with # or empty lines are ignored
+# 
+# syntax:
+#
+# <tag>
+#   <pattern1> <delimiters>    <filter1-1>     <desc1-1>       [<scope>]
+#                              <filter1-2>     <desc1-2>       [<scope>]
+#
+#   <pattern2> <delimiters>    <filter2-1>     <desc2-1>       [<scope>] ...
+#
+# The "desc" should describe the filter and it should correctly complete
+# both of the following phrases:
+#
+#      One <desc> match was found for...
+#      Three <desc> matches were found for...
+#
+# The scope is optional, and should be one of:
+#      "base"
+#      "onelevel"
+#      "subtree"
+# if it is included.
+#
+
+"finger and go500 and go500gw subtree and rp500 and rcpt500"
+    "="                " "     "%v"                            "arbitrary filter"
+
+    "^[0-9][0-9\-]*$"  " "     "(telephoneNumber=*%v)"         "phone number"
+
+    "@"                " "     "(mail=%v)"                     "email address"
+                       "(mail=%v*)"                    "start of email address"
+
+    "^.[\. _].*"       ". _"   "(cn=%v1* %v2-)"                "first initial"
+
+    ".*[. _].$"        ". _"   "(cn=%v1-*)"                    "last initial"
+
+    "[. _]"    ". _"   "(|(sn=%v1-)(cn=%v1-))"         "exact"
+                       "(|(sn~=%v1-)(cn~=%v1-))"       "approximate"
+
+    ".*"       ". "    "(|(cn=%v1)(sn=%v1)(uid=%v1))"  "exact"
+                       "(|(cn~=%v1)(sn~=%v1))"         "approximate"
+
+"web500gw subtree"
+    "="                " "     "%v"                            "arbitrary filter"
+
+    "^[0-9][0-9\-]*$"  " "     "(|(telephoneNumber=*%v)(facsimileTelephoneNumber=*%v))"                "phone number"
+
+    "@"                " "     "(mail=%v)"                     "email address"
+                       "(mail=%v*)"                    "start of email address"
+
+    "^.[\. _].*"       ". _"   "(cn=%v1* %v2-)"                "first initial"
+
+    ".*[. _].$"        ". _"   "(cn=%v1-*)"                    "last initial"
+############
+#    "[. _]"   ". _"   "(|(sn=%v1-)(cn=%v1-))"         "exact"
+#                      "(|(sn~=%v1-)(cn~=%v1-))"       "approximate"##
+#
+#    ".*"      ". "    "(|(cn=%v1)(sn=%v1))"   "exact"
+#                      "(|(cn~=%v1)(sn~=%v1))"                 "approximate"#
+#
+# Neue Einstellungen 970127 KPG:
+    "[oO][xX]:.*" ":" "(|(ou=%v2-))" "exact" 
+    "[xX][oO]:.*" ":" "(|(ou=%v2-))" "exact" 
+    "[oO]:.*" ":" "(|(ou=%v2-))" "exact" 
+                             "(|(ou~=%v2-))"   "approximate"
+    "[xX]:.*[. _].*" ":" "(|(cn=%v2%v3%v4-))" "exact" 
+    "[xX]:.*" ":" "(|(sn=%v2-))" "exact" 
+
+    "[. _]"    ". _"   "(|(cn=%v))"            "exact"
+                       "(|(cn~=%v))"   "approximate"
+
+    ".*"       ". "    "(|(sn=%v))"    "exact"
+                       "(|(sn~=%v))"                   "approximate"
+
+"go500gw onelevel and web500gw onelevel"
+    "^..$"     " "     "(|(o=%v)(c=%v)(l=%v)(co=%v))"          "exact"
+                       "(|(o~=%v)(c~=%v)(l~=%v)(co~=%v))"      "approximate"
+
+    " "                " "     "(|(o=%v)(l=%v)(co=%v))"        "exact"
+                       "(|(o~=%v)(l~=%v)(co~=%v))"     "approximate"
+
+    "\."       " "     "(associatedDomain=%v)"         "exact"
+
+    ".*"       " "     "(|(o=%v)(l=%v)(co=%v))"        "exact"
+                       "(|(o~=%v)(l~=%v)(co~=%v))"     "approximate"
diff --git a/contrib/tweb/LDAP_etc/ldapfriendly.0 b/contrib/tweb/LDAP_etc/ldapfriendly.0
new file mode 100644 (file)
index 0000000..fba7fd7
--- /dev/null
@@ -0,0 +1,40 @@
+AU     Australien
+AR     Argentinien
+AT     &Ouml;sterreich
+BE     Belgien
+BR     Brasilien
+CA     Kanada
+HR     Kroatien
+CS     Tschechoslowakei
+CZ     Tschechische Republik
+DK     D&auml;nemark
+FI     Finnland
+FR     Frankreich
+DE     Deutschland
+EE     Estland
+GB     Gro&szlig;britannien
+GR     Griechenland
+HK     Hong Kong
+HU     Ungarn
+IS     Island
+IN     Indien
+IE     Irland
+IL     Israel
+IT     Italien
+JP     Japan
+KR     Korea
+LI     Liechtenstein
+LU     Luxemburg
+NL     Niederlande
+NZ     Neuseeland
+NO     Norwegen
+PL     Polen
+PT     Portugal
+ES     Spanien
+SE     Schweden
+CH     Schweiz
+RU     Russische F&ouml;deration
+US     Vereinigte Staaten von Amerika
+SI     Slowenien
+SK     Slowakei
+SG     Singapur
diff --git a/contrib/tweb/LDAP_etc/ldapfriendly.1 b/contrib/tweb/LDAP_etc/ldapfriendly.1
new file mode 100644 (file)
index 0000000..e7aacbe
--- /dev/null
@@ -0,0 +1,40 @@
+AU     Australia
+AR     Argentina
+AT     Austria
+BE     Belgium
+BR     Brazil
+CA     Canada
+HR     Croatia
+CS     Czechoslovakia
+CZ     Czech Republic
+DK     Denmark
+FI     Finland
+FR     France
+DE     Germany
+EE     Estonia
+GB     Great Britain
+GR     Greece
+HK     Hong Kong
+HU     Hungary
+IS     Iceland
+IN     India
+IE     Ireland
+IL     Israel
+IT     Italy
+JP     Japan
+KR     Korea
+LI     Liechtenstein
+LU     Luxemburg
+NL     Netherlands
+NZ     New Zealand
+NO     Norway
+PL     Poland
+PT     Portugal
+ES     Spain
+SE     Sweden
+CH     Switzerland
+RU     Russian Federation
+US     United States of America
+SI     Slovenia
+SK     Slovakia
+SG     Singapore
diff --git a/contrib/tweb/LDAP_etc/search-only.foot.0 b/contrib/tweb/LDAP_etc/search-only.foot.0
new file mode 100644 (file)
index 0000000..2450db2
--- /dev/null
@@ -0,0 +1,4 @@
+<hr>
+<strong>Datei: LDAP_etc/search-only.foot.0<br>
+Achtung:</strong> Dieser Text wird als Footer einer Search-Only-Seite
+angezeigt !!!
diff --git a/contrib/tweb/LDAP_etc/search-only.foot.1 b/contrib/tweb/LDAP_etc/search-only.foot.1
new file mode 100644 (file)
index 0000000..9db7150
--- /dev/null
@@ -0,0 +1,4 @@
+<hr>
+<strong>File: LDAP_etc/search-only.foot.1<br>
+Attention:</strong> This footer will be display'ed at the end
+of a search-only page.
diff --git a/contrib/tweb/LDAP_etc/search-only.head.0 b/contrib/tweb/LDAP_etc/search-only.head.0
new file mode 100644 (file)
index 0000000..dc1fe4c
--- /dev/null
@@ -0,0 +1,5 @@
+<h1>Search-Only-Seite</h1>
+<strong>Datei: LDAP_etc/search-only.head.0<br>
+Achtung:</strong> Dieser Text wird am Beginn einer Search-Only-Seite
+angezeigt !!!
+<hr>
diff --git a/contrib/tweb/LDAP_etc/search-only.head.1 b/contrib/tweb/LDAP_etc/search-only.head.1
new file mode 100644 (file)
index 0000000..ff4f62c
--- /dev/null
@@ -0,0 +1,5 @@
+<h1>Search-Only-Page</h1>
+<strong>File: LDAP_etc/search-only.head.1<br>
+Attention:</strong> This header will be display'ed at the beginning
+of a search-only page.
+<hr>
diff --git a/contrib/tweb/LDAP_etc/tweb-base.foot.0 b/contrib/tweb/LDAP_etc/tweb-base.foot.0
new file mode 100644 (file)
index 0000000..2daad03
--- /dev/null
@@ -0,0 +1,4 @@
+<hr>
+<strong>Datei: LDAP_etc/tweb-base.foot.0<br>
+Achtung:</strong> Diese Seite wird als Footer auf der BASEDN-Seite
+angezeigt !!!
diff --git a/contrib/tweb/LDAP_etc/tweb-base.foot.1 b/contrib/tweb/LDAP_etc/tweb-base.foot.1
new file mode 100644 (file)
index 0000000..0a8975e
--- /dev/null
@@ -0,0 +1,4 @@
+<hr>
+<strong>File: LDAP_etc/tweb-base.foot.1<br>
+Attention:</strong> This text will be display'ed at the end of
+the BASEDN page.
diff --git a/contrib/tweb/LDAP_etc/tweb-base.head.0 b/contrib/tweb/LDAP_etc/tweb-base.head.0
new file mode 100644 (file)
index 0000000..d1626ca
--- /dev/null
@@ -0,0 +1,5 @@
+<h1>BASEDN-Header</h1>
+<strong>Datei: LDAP_etc/tweb-base.head.0<br>
+Achtung:</strong> Dieser Header wird am Beginn der BASEDN-Seite
+angezeigt !!!
+<hr>
diff --git a/contrib/tweb/LDAP_etc/tweb-base.head.1 b/contrib/tweb/LDAP_etc/tweb-base.head.1
new file mode 100644 (file)
index 0000000..0c4dd9d
--- /dev/null
@@ -0,0 +1,5 @@
+<h1>BASEDN-Header</h1>
+<strong>File: LDAP_etc/tweb-base.head.1<br>
+Attention:</strong> This header will be display'ed at the beginning
+of the BASEDN page.
+<hr>
diff --git a/contrib/tweb/LDAP_etc/tweb.footer.0 b/contrib/tweb/LDAP_etc/tweb.footer.0
new file mode 100644 (file)
index 0000000..414cf57
--- /dev/null
@@ -0,0 +1,4 @@
+<hr>
+<strong>Datei: LDAP_etc/tweb.footer.0<br>
+Achtung:</strong> Dieser Footer wird am Ende einer normalen
+Seite unterhalb BASEDN angezeigt !!!
diff --git a/contrib/tweb/LDAP_etc/tweb.footer.1 b/contrib/tweb/LDAP_etc/tweb.footer.1
new file mode 100644 (file)
index 0000000..88bcc1c
--- /dev/null
@@ -0,0 +1,4 @@
+<hr>
+<strong>File: LDAP_etc/tweb.footer.1<br>
+Attention:</strong> This footer will be display'ed at the end of a page
+below BASEDN.
diff --git a/contrib/tweb/LDAP_etc/tweb.header.0 b/contrib/tweb/LDAP_etc/tweb.header.0
new file mode 100644 (file)
index 0000000..b83c44e
--- /dev/null
@@ -0,0 +1,5 @@
+<h1>TWEB</h1>
+<strong>Datei: LDAP_etc/tweb.header.0<br>
+Achtung:</strong> Dieser Header wird am Beginn einer Seite unterhalb
+von BASEDN angezeigt !!!
+<hr>
diff --git a/contrib/tweb/LDAP_etc/tweb.header.1 b/contrib/tweb/LDAP_etc/tweb.header.1
new file mode 100644 (file)
index 0000000..a4dfb09
--- /dev/null
@@ -0,0 +1,5 @@
+<h1>TWEB</h1> 
+<strong>File: LDAP_etc/tweb.header.1<br>
+Attention:</strong> This header will be display'ed at the beginning of
+a page below BASEDN.
+<hr>
diff --git a/contrib/tweb/LDAP_etc/tweb.help.0 b/contrib/tweb/LDAP_etc/tweb.help.0
new file mode 100644 (file)
index 0000000..fd8913b
--- /dev/null
@@ -0,0 +1,46 @@
+<TITLE>TWEB HILFE</TITLE>
+<BODY>
+<H2> Das TWEB WWW2X.500-Gateway </H2>
+
+Im X.500 sind weltweit viele Personen und Organisationen mit EMail- Adresse,
+Postanschrift, FAX, Telefonnummer, Aufgabenbereich, etc. zu finden.
+Zum einfachen Zugriff per WorldWideWeb dient <strong>TWEB</strong> WWW2X.500-Gateway.<P>
+
+<strong>TWEB</strong> erm&ouml;glicht das einfache Browsen, die Suche 
+und die Modifikation des eigenen Eintrages im X.500.<P>
+Das Gateway enth&auml;lt folgende Features
+<ul>
+
+<li>F&uuml;r den Administrator bietet <strong>TWEB</strong> umfangreiche M&ouml;glichkeiten
+der Konfiguration mittels Konfigurations-Dateien, ohne &Auml;nderungen im 
+Code und ohne erneutes &Uuml;bersetzen. 
+<li>Zus&auml;tzlich sind Datenschutzmechanismen aktivierbar.
+<li>Andere Sprachen sind durch Ersetzen/Hinzuf&uuml;gen 
+von Sprach-Dateien leicht realisierbar.
+
+<li>Wie Sie es vom WWW her gewohnt sind, brauchen Sie nur den gew&uuml;nschten
+unterstrichenen Eintrag anklicken, und Sie sehen, was darunter angesiedelt ist.
+
+<li>Mit "Weitere Informationen" wird eine zweite Info-Seite gezeigt.
+
+<li>Mit Hilfe der SUCH-Box k&ouml;nnen Sie nach Namen und Teilstrings suchen.
+
+<li>Ihren eigenen Eintrag k&ouml;nnen Sie mit Ihrem Passwort in Verbindung
+mit dem entsprechenden Button &auml;ndern.
+</ul>
+
+
+<hr>
+
+<strong>TWEB</strong> ist eine Weiterentwicklung vom Web500gw von Frank Richter, Technische
+Universitaet Chemnitz-Zwickau, basierend auf go500gw von Tim Howes,
+University of Michigan.
+
+<hr>
+
+Bei Fragen, Anregungen, Bug-Reports Mail an:
+
+<ADDRESS><A HREF="mailto:web500gw-support@mail500.uni-tuebingen.de"> web500gw-support@mail500.uni-tuebingen.de</A> - Stand: 16. Februar 1996</ADDRESS>
+
+<hr>
+
diff --git a/contrib/tweb/LDAP_etc/tweb.help.1 b/contrib/tweb/LDAP_etc/tweb.help.1
new file mode 100644 (file)
index 0000000..54f615b
--- /dev/null
@@ -0,0 +1,47 @@
+<TITLE>TWEB HELP</TITLE>
+<BODY>
+<H2> TWEB WWW2X.500-Gateway HELP</H2>
+
+There are worldwide lots of persons and organizations stored in the X.500-
+directory with email-address, postal address, fax, telephone-number, 
+working-area, etc. For easy access with WorldWideWeb  there is the
+<strong>TWEB</strong> WWW2X.500-Gateway.<P>
+
+<strong>TWEB</strong> allows easy browsing, searching and modification of
+entries in the X.500-directory.<p>
+Features of the gateway include
+<ul>
+<li>For the administrator <strong>TWEB</strong> offers extensive opportunities of
+configuration by means of configuration-files without change of code
+and without recompilation.
+<li>Configurable data-protection-mechanisms are available.
+<li>Other languages are supported by language-resource-files.
+
+<li>As with other WWW applications you only have to click on the desired entry
+to see, what is settled beneath.
+
+<li>The button "More Information" shows a second page of information.
+
+<li>By means of the SEARCH-box you can look for persons with exact or substring
+match.
+
+<li>You can modify your own entry by typing in your password in combination
+with the modification button.
+</ul>
+
+
+
+<hr>
+
+<strong>TWEB</strong> is based on Web500gw from Frank Richter, Technische
+Universitaet Chemnitz-Zwickau, that itself is based on go500gw from Tim Howes,
+University of Michigan.
+
+<hr>
+
+For questions, suggestions, bug-reports mail to:
+
+<ADDRESS><A HREF="mailto:x500-netman@mail500.uni-tuebingen.de"> x500-netman@mail500.uni-tuebingen.de</A> - 27. October 1995</ADDRESS>
+
+<hr>
+
diff --git a/contrib/tweb/Makefile.openldap b/contrib/tweb/Makefile.openldap
new file mode 100644 (file)
index 0000000..218a65d
--- /dev/null
@@ -0,0 +1,105 @@
+#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                                          *
+# Makefile...                                                              *
+#                                                                          *
+# Function:..TWEB WWW to X.500-GATEWAY SERVER MAKEFILE                     *
+#                                                                          *
+#                                                                          *
+#                                                                          *
+# Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+#            Zentrum fuer Datenverarbeitung,                               *
+#            Bereich Entwicklungneuer Dienste,                             *
+#            Universitaet Tuebingen, GERMANY                               *
+#                                                                          *
+#                                       ZZZZZ  DDD    V   V                *
+#            Creation date:                Z   D  D   V   V                *
+#            August 16 1995               Z    D   D   V V                 *
+#            Last modification:          Z     D  D    V V                 *
+#            September 9 1999           ZZZZ   DDD      V                  *
+#                                                                          *
+#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+#-----------------------------------------------------------------------------
+#
+#  based on web500gw.c of Frank Richter, TU Chemnitz-Zwickau, DE
+#
+#  first edition: 95/07/28, /KSp
+#
+#  $Id: Makefile.openldap,v 1.6 1999/09/10 15:01:15 zrnsk01 Exp $
+#
+#-----------------------------------------------------------------------------
+
+#########################################################################
+###
+###  Tailor the following to your local settings
+###
+#########################################################################
+
+# where is your LDAP client library located
+LDAP_RUNTIME=/LDAP
+LDAP_SOURCE =/LDAP/ldap-3.3
+
+LIBDIR= $(LDAP_RUNTIME)/lib
+INCDIR= $(LDAP_RUNTIME)/include
+
+# where is some version information for your LDAP client library
+LDAPDIR= $(LDAP_SOURCE)/build
+
+# select your compiler (DEFAULT=cc) and uncomment ACFLAGS and/or COPTS
+# to have options for the linker and/or compiler
+CC= gcc
+# ACFLAGS= 
+# COPTS= -Aa -O  # cc  on a HP box
+COPTS= -Wall -ansi -pedantic -O2
+
+# uncomment next line when compiling on SUN
+# LXNET = -lxnet
+
+# we don't have any special definitions for the current distribution
+# DEFINES= 
+
+#########################################################################
+###
+###  You should leave the following definitions untouched
+###
+#########################################################################
+
+SRCS   = tweb.c strng.c init.c queries.c server.c \
+                 x500.c html.c support.c checkclient.c \
+                 charray.c ch_malloc.c dn.c regular.c
+OBJS   = tweb.o strng.o init.o queries.o server.o \
+                 x500.o html.o support.o checkclient.o \
+                 charray.o ch_malloc.o dn.o regular.o
+GWOBJS = $(OBJS) gwversion.o
+
+CFLAGS = $(COPTS) -I$(INCDIR) $(ACFLAGS) $(DEFINES) $(GWVERS)
+LIBS   = -lldap -llber $(KRBLIBFLAG) $(KRBLIBS) $(LXNET)
+DLIBS  = $(LIBDIR)/libldap.a $(LIBDIR)/liblber.a
+
+gw:    gwversion.o
+       $(CC) $(ALDFLAGS) -o $@ $(GWOBJS) -L$(LIBDIR) $(LIBS)
+       mv $@ tweb
+
+gwversion.c: $(OBJS) $(DLIBS)
+       rm -f $@
+       (u=$${USER-root} v=`cat $(LDAPDIR)/version` d=`pwd` h=`hostname` t=`date`; \
+       sed -e "s|%WHEN%|$${t}|" \
+       -e "s|%WHOANDWHERE%|$${u}@$${h}:$${d}|" \
+       -e "s|%VERSION%|$${v}|" \
+       < Versiongw.c > $@)
+
+lint:;
+       lint -I. $(SRCS)
+
+5lint:;
+       /usr/5bin/lint -I. $(SRCS)
+
+clean:;
+       rm -f *.o core a.out gwversion.c tweb 
+
+depend:;
+       $(LDAPDIR)/mkdep $(CFLAGS) $(SRCS)
+
+# DO NOT DELETE THIS LINE -- mkdep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/contrib/tweb/README b/contrib/tweb/README
new file mode 100644 (file)
index 0000000..91b088d
--- /dev/null
@@ -0,0 +1,91 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* README                                                                   *
+*                                                                          *
+* Function:..Introduction to the WWW-X.500 gateway TWEB                    *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            September 14 1995            Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            January 19 1999            ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+
+
+IMPORTANT HINT FOR UPGRADING TO VERSION 2.3.x:
+
+    the config-syntax of ALLOW-STRING DENY-STRING GRANT REFUSE has changed:
+    now regular expressions are used enabling shorter config strings.
+
+    the language-files have been extended. Please use the newly provided
+    language-files or update your old ones.
+
+
+
+INTRODUCTION
+
+   TWEB is based on the Web500gw implementation by Frank Richter, 
+   Technische Universitaet Chemnitz-Zwickau, which is based on the 
+   go500gw implementation by Tim Howes, University of Michigan.
+
+   TWEB was compiled and tested on LINUX with cc, HPUX 9.05 with the
+   HP-ANSI C compiler, as well as SunOS 4.1.2 with the SUN C compiler.
+   TWEB was also compiled with gcc on all platforms.
+
+   The UMICH LDAP client library version 3.0 or 3.3
+   ( URL:ftp://terminator.rs.itd.umich.edu/ldap/ldap-3.3.tar.Z )
+   must be installed on the machine (library path and include file 
+   path is configured in Makefile). With QUIPU ICR-2.x the ISODE-
+   provided LDAP libraries should be used. As such, TWEB only supports
+   LDAP version 2 with the University of Michigan type C API. TWEB is
+   also adapted for the OpenLDAP LDAP library, release version 1.1.2
+   (http://www.openldap.org).
+
+   An upgrade to LDAP version 3 and a C API standadized by the IETF
+   is planned for a not so far away future, most probably in step 
+   with the OpenLDAP package.
+
+   TWEB, as provided here is a fully functional core gateway, which
+   is extended at the author's site by some local features. These
+   extensions are included into the same code base, so that some
+   "#ifdef TUE_TEL" or "#ifdef AMBIX" pre-processor statements can
+   be found throughout the code. 
+
+   Have a look at the doc sub-directory to get some further documentation.
+
+
+INSTALLATION
+
+   The installation and configuration of TWEB is described in the
+   GETTING-STARTED file. After making and testing the basic TWEB
+   you should have a look to file FEATURE-LIST to learn about the 
+   several configuration parameters TWEB provides for runtime
+   configuration of the program.
+
+
+SUPPORT
+
+   Bug reports and flames (but also critical comments) please send to 
+
+       tweb-support@mail500.uni-tuebingen.de. 
+    
+   For general discussion (e.g., about interesting new features,
+   which should be supported), there is a discussion list at
+
+       tweb-l@mail500.uni-tuebingen.de.
+
+   Send requests for subscription to
+
+       tweb-l-request@mail500.uni-tuebingen.de.
+
+
+TWEB development team, Tuebingen, September, 9th, 1999
+
+
diff --git a/contrib/tweb/TWEB_conFiles/robots.txt b/contrib/tweb/TWEB_conFiles/robots.txt
new file mode 100644 (file)
index 0000000..1a3761a
--- /dev/null
@@ -0,0 +1,3 @@
+# go away
+User-agent: *
+Disallow: /
diff --git a/contrib/tweb/TWEB_conFiles/tweb.conf.0.dist b/contrib/tweb/TWEB_conFiles/tweb.conf.0.dist
new file mode 100644 (file)
index 0000000..eed392c
--- /dev/null
@@ -0,0 +1,267 @@
+#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                                          *
+# tweb.conf.0                                                              *
+#                                                                          *
+# Function:..Configuration-file for TWEB                                   *
+#                                                                          *
+#                                                                          *
+#                                                                          *
+# Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+#            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+#            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+#                                                                          *
+#                                       ZZZZZ  DDD    V   V                *
+#            Creation date:                Z   D  D   V   V                *
+#            July 26 1996                 Z    D   D   V V                 *
+#            Last modification:          Z     D  D    V V                 *
+#            December 18 1998           ZZZZ   DDD      V                  *
+#                                                                          *
+#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+#==========================================================================
+# $Id: tweb.conf.0.dist,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
+
+
+#  THE PARAMETERS IN THIS FILE AND THE CORRESPONDING CONFIG-FILE.1
+#  ARE PRE-SET TO PROVIDE A BASIC FUNCTIONALITY.
+#
+#  IF YOU LIKE, YOU CAN CHECK FOR FURTHER DISPLAY-OBJECTs, SORT,
+#  SEARCH-ONLY AND MODIFY DEFINITIONS IN THE SECOND PART OF THE FILE.
+#
+#  TO ACTIVATE A CERTAIN FEATURE, THE CORRESPONDING LINES HAVE TO
+#  BE DE-COMMENTED
+
+
+#########################################################################
+
+
+###
+###  the description, how to display an object upon read
+###
+
+#  FIRST-PAGE is the main view, SECOND-PAGE a linked page with more
+#  (e.g., not so important) information
+#
+#  given is a list of attributes, with labels for each and the method,
+#  how to display the content of the attribute
+
+DISPLAY-OBJECT  pers
+# 1.Bild
+FIRST-PAGE      cn                          Name             DEFAULT
+                personalTitle               Titel            DEFAULT
+                organizationalStatus        Dienststellung   DEFAULT
+                description                 Arbeitsgebiet    DEFAULT
+                telephoneNumber             Gesch&auml;fts-Telefon  DEFAULT
+                facsimileTelephoneNumber    Fax              DEFAULT
+                mail                        E-Mail-Adresse   MAILTO
+                textEncodedORaddress        X400-Adresse     DEFAULT
+                postalAddress               Anschrift        MULTILINE
+                roomNumber                  Raum             DEFAULT
+                labeledURI                  URL              URI
+# 2.Bild (see more)
+SECOND-PAGE     sn                          Nachname         DEFAULT
+                roleOccupant                Funktionstr&auml;ger HREF
+                memberOfGroup               E-Mail-Verteiler DEFAULT
+                homepostalAddress           Heimat-Anschrift MULTILINE
+                homePhone                   Privat-Telefon   DEFAULT
+                pager                       Pager            DEFAULT
+                lastModifiedTime   "letztmalig ge&auml;ndert"  DATE
+                lastModifiedBy     "letztmalig ge&auml;ndert von"  DEFAULT
+
+DISPLAY-OBJECT  organization
+# 1.Bild
+FIRST-PAGE      o                           Name             DEFAULT
+                ou                          Name             DEFAULT
+                l                           Ort              DEFAULT
+                description                 Beschreibung     DEFAULT
+                postalAddress               Postanschrift    MULTILINE
+                telephoneNumber             Telefon          DEFAULT
+                facsimileTelephoneNumber    Fax              DEFAULT
+                labeledURI                  URL              URI
+# 2.Bild (see more)
+SECOND-PAGE     st                          Bundesland       DEFAULT
+                seeAlso                     "weitere Informationen" MOVETO
+                lastModifiedTime   "letztmalig ge&auml;ndert"  DATE
+                lastModifiedBy     "letztmalig ge&auml;ndert von"  DEFAULT
+
+DISPLAY-OBJECT   rfc822MailList
+# 1. Bild
+FIRST-PAGE      description                 Beschreibung     DEFAULT
+                joinable                    abonnierbar      BOOLEAN
+                associatedDomain            E-Mail-Domain    DEFAULT
+                rfc822RequestsTo            "Anfragen an"    MAILTO
+                requestsTo                  "Anfragen an"    HREF
+                owner                       Eigent&uuml;mer  HREF
+# 2. Bild
+SECOND-PAGE     lastModifiedTime   "letzte &Auml;nderung"    DATE
+                lastModifiedBy      "ge&auml;ndert durch"    DEFAULT
+
+DISPLAY-OBJECT  country
+# 1.Bild
+FIRST-PAGE      friendlyCountryName         L&auml;ndernamen DEFAULT
+                associatedDomain            Domain           DEFAULT
+                manager                     Manager          HREF
+                labeledURI                  URL              URI
+# 2.Bild (see more)
+SECOND-PAGE     masterDSA                   Master-DSA       HREF
+                slaveDSA                    Slave-DSA        HREF
+                lastModifiedTime  "letztmalig ge&auml;ndert"      DATE
+                lastModifiedBy    "letztmalig ge&auml;ndert von"  DEFAULT
+                lastUpdateTime    "letztmalig ge&auml;ndert"      DATE
+
+DISPLAY-OBJECT   default
+# 1.Bild
+FIRST-PAGE      jpegPhoto                   Foto            JPEG
+                photo                       Foto            BMP
+                cn                          Name            DEFAULT
+                sn                          Nachname        DEFAULT
+                textEncodedMtaName          MTA-Name        DEFAULT
+                relatedMHSdomain            MHS-Domain      DEFAULT
+                description                 Beschreibung    DEFAULT
+                multiLineDescription        Beschreibung    MULTILINE
+                info                        "Allgemeines"   DEFAULT
+                productName                 Produktname     DEFAULT
+                mail                        Mail-Adresse    MAILTO
+                telephoneNumber             Telefon         DEFAULT
+                facsimileTelephoneNumber    Fax             DEFAULT
+                labeledURL                  URL             URL
+                memberOfGroup               E-Mail-Verteiler DEFAULT
+                member                      Mitglied        HREF
+                owner                       Eigent&uuml;mer HREF
+                requestsTo                  "Anfragen an"   HREF
+                errorsTo                    "Fehler an"     HREF
+                krbName                     Kerberos-Name   DEFAULT
+                postalAddress               Postanschrift   MULTILINE
+                l                           Ort             DEFAULT
+                textEncodedPSAP             Netz-Adresse    DEFAULT
+                presentationAddress         Netz-Adresse    DEFAULT
+                supportedApplicationContext Anwendung       DEFAULT
+                publicAccess                Zugang          DEFAULT
+                availability                Verf&uuml;gbarkeit  DEFAULT
+                knowledgeInformation        Kontakt         DEFAULT
+                seeAlso                     "siehe auch"    HREF
+                roleOccupant                Stelleninhabr   HREF
+                manager                     Manager         HREF
+                administrator               Manager         HREF
+                secretary                   Sekretariat     HREF
+                associatedName              "zugeordneter Name" HREF
+                responsiblePerson           Verantwortlicher HREF
+                domainComponent             Domain          DEFAULT
+                labeledURI                  URL             URI
+# 2.Bild (see more)
+SECOND-PAGE     source                      Quelle          DEFAULT
+                homePostalAddress           Heimat-Anschrift MULTILINE
+                masterDSA                   Master-DSA      HREF
+                slaveDSA                    Slave-DSA       HREF
+                lastModifiedTime   "letztmalig ge&auml;ndert"      DATE
+                lastModifiedBy     "letztmalig ge&auml;ndert von"  DEFAULT
+                lastUpdateTime     "letztmalig ge&auml;ndert"      DATE
+
+
+###
+###  sorting and display of groups of entries
+###
+
+#  while browsing and searching, entries below the current position
+#  in the DIT, or the search results, can be grouped according to some
+#  SORT rules; these rules determine,
+#     1. which objectclass should signal a specific group, and in what
+#        order the entries should be checked for those objectclasses
+#        (the sequential order of the objectclasses given below),
+#     2. what label should be applied to a group (" " means none),
+#     3. the order of groups during output,
+#     4. the display type for an object of the given object class
+#         when display´ing a read result, and
+#     5.  the attribute, that will control sort order of entries
+#          within each group
+#  the last two parameters are optional, and will default to display
+#  type Â´default´ (see DISPLAY-OBJECTS), and sort attribute sn (surname)
+#  (if given in the entry, otherwise the RDN itself)
+#
+#  When an entry has none of the listed object classes, it will NOT be
+#  included into the display !!!
+
+SORT   dNSDomain               Dom&auml;ne             8
+       domain                  Faxanschl&uuml;sse      9
+       rfc822MailList          X.500-E-Mail-Verteiler 10 rfc822MailList
+       organizationalPerson    Mitarbeiter             1 pers registeredAddress
+       residentialPerson       Privat-Personen         2 pers registeredAddress
+       person                  "sonstige Personen"     3 pers registeredAddress
+       locality                Gebiete                 7 organization
+       organization            Organisationen          5 organization
+       organizationalUnit      Unterorganisationen     6 organization 
+       alias                   Verweise               11
+       country                 L&auml;nder             4 country
+
+
+###
+###  the position of certain language-specific support-files
+###
+
+#    a help file (accessible via http://host:port/H)
+HELPFILE       tweb.help.0
+
+#    converting certain RDNs to a more user-friendly form)
+FRIENDLYFILE   ldapfriendly.0
+
+#    header and footer beeing attached to every HTML page (not BASEDN)
+HEADER         tweb.header.0
+FOOTER         tweb.footer.0
+
+#    a special message beeing attached to a HTML page when a allowed
+#    user accesses the gateway (see ALLOW-STRING/DENY-STRING in tweb.rc)
+ALLOW-MSG      allow.msg.0
+
+
+###
+###  some more settings for (language-specific) gateway-switches (see tweb.rc)
+###
+
+# GW-SWITCH  "ROOT"                http://<my-world-relay.my-domain>:<port0>/M
+#            "c=<my-country-ID>"   http://<my-country-relay.my-domain>:<port0>/
+
+
+###
+###  where to prevent listing and provide for searching only
+###
+
+#  a (list of) DN(s), where no person lists should be display´ed, but
+#  a search box only (e.g., because to many person are contained in
+#  here, so list results would be too long); also, which header and 
+#  footer files will be display´ed at that position
+
+# SEARCH-ONLY "ou=<some-ou>, o=<my-organization>, c=<my-country-ID>"  search-only.head.0 search-only.foot.0
+
+
+###
+###  modifying entries via TWEB
+###
+
+#  when the user is allowed to modify her own entry, MODIFY/MODATTR will
+#  describe, what can be modified
+#
+#  BEWARE: this feature is not allowed at the University of Tuebingen,
+#          so the code is not tested very well; usage is on own risc
+
+#  objects of what class can be modified
+#  (for each class a seperate description>)
+# MODIFY          person
+
+#  what attributes can be modified
+#  a label in the HTTP formular is given for each attribute,
+#  together with the maximum count of values, beeing accepted
+#  in the input area
+
+# MODATTR         personalTitle        Titel                      1
+#                 organizationalStatus Dienststellung             1
+#                 description          Beschreibung               2
+#                 telephoneNumber      Telefon                    2
+#                 facsimileTelephoneNumber FAX                    2
+#                 mail                 Mail-Adresse               2
+#                 roomNumber           Raum                       1
+#                 memberOfGroup        Mailgruppe                10
+#                 homePostalAddress    Heimatanschrift            1
+#                 homePhone            "privat Telefon"           2
+#                 pager                Pager                      2
+#                 info                 Information                2
+
+
diff --git a/contrib/tweb/TWEB_conFiles/tweb.conf.1.dist b/contrib/tweb/TWEB_conFiles/tweb.conf.1.dist
new file mode 100644 (file)
index 0000000..29b5aec
--- /dev/null
@@ -0,0 +1,208 @@
+#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                                          *
+# tweb.conf.1                                                              *
+#                                                                          *
+# Function:..Configuration-File for TWEB-SOFTWARE                          *
+#                                                                          *
+#                                                                          *
+#                                                                          *
+# Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+#            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+#            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+#                                                                          *
+#                                       ZZZZZ  DDD    V   V                *
+#            Creation date:                Z   D  D   V   V                *
+#            July 26 1995                 Z    D   D   V V                 *
+#            Last modification:          Z     D  D    V V                 *
+#            December 18 1998           ZZZZ   DDD      V                  *
+#                                                                          *
+#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+#==========================================================================
+# $Id: tweb.conf.1.dist,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
+
+#  FOR DESCRIPTION OF THE PARAMETERS SEE THE CONFIG FILE tweb.conf.0(.dist)
+
+
+###
+###  the description, how to display an object upon read
+###
+
+DISPLAY-OBJECT  person
+# main page
+FIRST-PAGE      cn                          Name             DEFAULT
+                personalTitle               Title            DEFAULT
+                organizationalStatus        Status           DEFAULT
+                description                 Working-Area     DEFAULT
+                telephoneNumber             Telephone        DEFAULT
+                facsimileTelephoneNumber    Fax              DEFAULT
+                mail                        E-Mail-Address   MAILTO
+                textEncodedORaddress        X400-Address     DEFAULT
+                postalAddress               "Postal address" MULTILINE
+                roomNumber                  Room             DEFAULT
+                labeledURI                  URL              URI
+# additional page
+SECOND-PAGE     sn                          Surname          DEFAULT
+                roleOccupant                Role-Occupant    HREF
+                memberOfGroup               Group-Member     DEFAULT
+                homepostalAddress           Home-Address     MULTILINE
+                homePhone                   Home-Phone       DEFAULT
+                pager                       Pager            DEFAULT
+                lastModifiedTime            "Last modified Time" DATE
+                lastModifiedBy              "Last modified by" DEFAULT
+
+DISPLAY-OBJECT  organization
+# main page
+FIRST-PAGE      o                           Name             DEFAULT
+                ou                          Name             DEFAULT
+                l                           Locality         DEFAULT
+                description                 Description      DEFAULT
+                postalAddress               "Postal address" MULTILINE
+                telephoneNumber             Telephone        DEFAULT
+                facsimileTelephoneNumber    Fax              DEFAULT
+                labeledURI                  URL              URI
+# additional page
+SECOND-PAGE     st                          State            DEFAULT
+                seeAlso                     "More Information" MOVETO
+                lastModifiedTime            "Last modified Time" DATE
+                lastModifiedBy              "Last modified by" DEFAULT
+
+DISPLAY-OBJECT  rfc822MailList
+# main page
+FIRST-PAGE      description                 Description      DEFAULT
+                joinable                    Joinable         BOOLEAN
+                associatedDomain            E-Mail-Domain    DEFAULT
+                rfc822RequestsTo            "Requests to"    MAILTO
+                requestsTo                  "Requests to"    HREF
+                owner                       Owner            HREF
+# additional page
+SECOND-PAGE     lastModifiedTime            "Last modified Time" DATE
+                lastModifiedBy              "Last modified by" DEFAULT
+
+DISPLAY-OBJECT  country
+# main page
+FIRST-PAGE      friendlyCountryName         Country-Name     DEFAULT
+                associatedDomain            Domain           DEFAULT
+                manager                     Manager          HREF
+                labeledURI                  URL              URI
+# additional page
+SECOND-PAGE     masterDSA                   Master-DSA       HREF
+                slaveDSA                    Slave-DSA        HREF
+                lastModifiedTime            "Last modified Time" DATE
+                lastModifiedBy              "Last modified by" DEFAULT
+                lastUpdateTime              "Last update Time" DATE
+
+DISPLAY-OBJECT  default
+# main page
+FIRST-PAGE      jpegPhoto                   Photo            JPEG
+                photo                       Photo            BMP
+                cn                          Name             DEFAULT
+                sn                          Surname          DEFAULT
+                textEncodedMtaName          MTA-Name         DEFAULT
+                relatedMHSdomain            MHS-Domain       DEFAULT
+                description                 Description      DEFAULT
+                multiLineDescription        Description      MULTILINE
+                info                        "More Information" DEFAULT
+                productName                 Productname      DEFAULT
+                mail                        Mail-Address     MAILTO
+                telephoneNumber             Telephone        DEFAULT
+                facsimileTelephoneNumber    Fax              DEFAULT
+                labeledURL                  URL              URL
+                memberOfGroup               "Member of Group" DEFAULT
+                member                      Member           HREF
+                owner                       Owner            HREF
+                requestsTo                  "Requests to"    HREF
+                errorsTo                    "Errors to"      HREF
+                krbName                     Kerberos-Name    DEFAULT
+                postalAddress               Postal-Address   MULTILINE
+                l                           Locality         DEFAULT
+                textEncodedPSAP             "Network address" DEFAULT
+                presentationAddress         "Network address" DEFAULT
+                supportedApplicationContext Application      DEFAULT
+                publicAccess                Access           DEFAULT
+                availability                Availability     DEFAULT
+                knowledgeInformation        Contact          DEFAULT
+                seeAlso                     "See also"       HREF
+                roleOccupant                Role-Occupant    HREF
+                manager                     Manager          HREF
+                administrator               Manager          HREF
+                secretary                   Secretary        HREF
+                associatedName              "Associated Name" HREF
+                responsiblePerson           "Responsible person" HREF
+                domainComponent             Domain           DEFAULT
+                labeledURI                  URL              URI
+# 2.Page (see more)
+SECOND-PAGE     source                      Source           DEFAULT
+                homePostalAddress           Home-Address     MULTILINE
+                masterDSA                   Master-DSA       HREF
+                slaveDSA                    Slave-DSA        HREF
+                lastModifiedTime            "Last modified Time" DATE
+                lastModifiedBy              "Last modified by" DEFAULT
+                lastUpdateTime              "Last update Time" DATE
+
+
+
+###
+###  sorting and display of groups of entries
+###
+
+SORT     dNSDomain               Domain                  8
+         domain                  Fax                     9
+         rfc822MailList          X.500-E-Mail-List      10 rfc822MailList
+         organizationalPerson    Staff                   1 person registeredAddress
+         residentialPerson       Residentials            2 person registeredAddress
+         person                  Persons                 3 person registeredAddress
+         locality                Localities              7 organization
+         organization            Organizations           5 organization
+         organizationalUnit      "Organizational Units"  6 organization 
+         alias                   Aliases                11
+         country                 Countries               4 country
+
+
+###
+###  the position of certain language-specific support-files
+###
+
+HELPFILE       tweb.help.1
+
+FRIENDLYFILE   ldapfriendly.1
+
+HEADER         tweb.header.1
+FOOTER         tweb.footer.1
+
+ALLOW-MSG      allow.msg.1
+
+
+###
+###  some more settings for (language-specific) gateway-switches (see tweb.rc)
+###
+
+# GW-SWITCH   "ROOT"              http://<my-world-relay.my-domain>:<port1>/M
+#             "c=<my-country-ID>"  http://<my-country-relay.my-domain>:<port1>/
+
+
+###
+###  where to prevent listing and provide for searching only
+###
+
+# SEARCH-ONLY "ou=<some-ou>, o=<my-organization>, c=<my-country-ID>"  search-only.head.1 search-only.foot.1
+
+
+###
+###  modifying entries via TWEB
+###
+
+# MODIFY          person
+# MODATTR         personalTitle        Title              1
+#                 organizationalStatus Status             1
+#                 description          Description        2
+#                 telephoneNumber      Telephone          2
+#                 facsimileTelephoneNumber  Fax           2
+#                 mail                 "E-Mail address"   2
+#                 roomNumber           Room               1
+#                 memberOfGroup        Group-Member      10
+#                 homePostalAddress    "Home address"     1
+#                 homePhone            "Home phone"       2
+#                 pager                Pager              2
+#                 info                 Information        2
+
+
diff --git a/contrib/tweb/TWEB_conFiles/tweb.lang.0.dist b/contrib/tweb/TWEB_conFiles/tweb.lang.0.dist
new file mode 100644 (file)
index 0000000..89f13b7
--- /dev/null
@@ -0,0 +1,150 @@
+#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                                          *
+# tweb.lang.0                                                              *
+#                                                                          *
+# Function:..Language-File for TWEB-SOFTWARE                               *
+#                                                                          *
+#                                                                          *
+#                                                                          *
+# Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+#            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+#            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+#                                                                          *
+#                                       ZZZZZ  DDD    V   V                *
+#            Creation date:                Z   D  D   V   V                *
+#            February 14 1996             Z    D   D   V V                 *
+#            Last modification:          Z     D  D    V V                 *
+#            February 20 1997           ZZZZ   DDD      V                  *
+#                                                                          *
+#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+#
+# $Id: tweb.lang.0.dist,v 1.6 1999/09/10 15:01:22 zrnsk01 Exp $
+
+0  de
+1  [not used]
+2  [not used]
+3  [not used]
+4  [not used]
+5  Kommando nicht implementiert!
+6  Nicht gefunden
+7  Last-Modified
+8  &Auml;ndere Ergebnisse:
+9  &Auml;nderungs-Ergebnisse f&uuml;r
+10 &Auml;nderungen:
+11 Fehler w&auml;hrend &Auml;nderungs-Operation:
+12 L&Ouml;SCHE alten Wert
+13 von Attribut
+14 Der Fehler-Kode war
+15 &Auml;nderung
+16 Erfolgreich ausgef&uuml;hrt
+17 Lese diesen ge&auml;nderten Wert
+18 Benutzer-Passwort
+19 &Auml;ndere diesen Eintrag erneut
+20 Die angegebene Abfrage war nicht spezifisch genug, wodurch ein Sizelimit 
+       &uuml;berschritten wurde, wobei die ersten paar &Uuml;bereinstimmungen 
+       zur&uuml;ckgegeben wurden. Falls Sie nicht den gesuchten Eintrag 
+       gefunden haben, machen Sie bitte eine genauere Abfrage, 
+       zum Beispiel mit Vor- und Nachnamen.
+21 Die Anzahl der gefundenen Eintr&auml;ge hat eine systemseitig
+       vorgegebene Obergrenze &uuml;berschritten. Falls der gesuchte Eintrag
+       in der dargestellten Liste nicht vorhanden ist, nutzen Sie die
+       <STRONG>Such</STRONG>-Option, um das Gesuchte genauer zu spezifizieren.
+22 Fehler
+23 X.500 - WWW Fehler:
+24 Beim Durchsuchen von X.500 tauchte ein Fehler auf
+25 Der Fehlercode war
+26 Es ist keine zus&auml;tzliche Information erh&auml;ltlich.
+27 Liste unterhalb von
+28 aktuelle Position:
+29 About
+30 Suche:
+31 Wir haben nicht die entsprechenden Zugriffsrechte, um hier eine globale 
+       Suche zu starten, aber wenn Sie wissen, wen Sie suchen, benutzen Sie die
+       <STRONG>Such</STRONG>-Option oben mit dem Namen des
+       gew&uuml;nschten Eintrages.
+32 Habe nichts unter diesem Eintrag gefunden. Sie k&ouml;nnen den Eintrag
+       selbst lesen, oder eine Suche probieren ...
+33 (eingeschr&auml;nkte Liste
+34 siehe Fu&szlig;note
+35 suche in
+36 Keine Suchergebnisse:
+37 Habe nichts gefunden ...
+38 f&uuml;r
+39 Suchergebnisse:
+40 Suchergebnisse f&uuml;r
+41 <H2>X.500 - WWW Fehler:</H2><P>Bei der Darstellung des X.500 Eintrages 
+       tauchte ein Fehler auf. <P>Keine bekannte Object-Klasse 
+       f&uuml;r diesen Eintrag.<P>
+42 Weitere Informationen
+43 VORSICHT: Dies ist noch <B>EXPERIMENTELL</B>!!!
+44 Geben Sie das Passwort f&uuml;r diesen Eintrag ein
+45 wenn Sie ihn
+46 &uuml;bermitteln wollen
+47 &Auml;NDERN
+48 wollen
+49 Fehlendes Passwort!
+50 Unbekanntes Argument
+51 &Auml;ndern
+52 altes Passwort
+53 VORSICHT: Dies ist noch EXPERIMENTELL!!!
+54 Fehler in der Abfrage: Kein Wert
+55 f&uuml;r
+56 Fehler in der Abfrage: Kein alter Wert
+57 <B>Fehler w&auml;hrend der Modifikation:</B><P>Neuen Wert HINZUF&Uuml;GEN
+58 zum Attribut
+59 Der Fehlercode war
+60 <B>Fataler Fehler:</B><BR>Konnte den alten Wert nicht zur&uuml;cksetzen
+61 auf Attribut
+62 Setze den alten Wert wieder
+63 auf Attribut
+64 Mail an:
+65 Aus datenschutzrechtlichen Gr&uuml;nden werden <strong>keine</strong> 
+       umfangreichen Personenlisten ausgegeben. Falls die gesuchte Person 
+       in der angezeigten Teilliste nicht vorhanden ist, verwenden Sie die
+       <STRONG>Such</STRONG>-Option, um die gesuchte Person genauer 
+       zu spezifizieren.<BR>
+66 Einstufige Suche
+67 suche unterhalb nach...
+68 SUCHEN
+69 Eingabe l&ouml;schen
+70 Eintrag
+71 Eintr&auml;ge
+72 Eintr&auml;ge zuruecksetzen
+73 en
+74 gel&ouml;scht
+75 ersetzt
+76 hinzugef&uuml;gt
+77 Welt
+78 Ja
+79 Nein
+80 <B>Fataler Fehler:</B><BR>Konnte den Wert nicht modifizieren
+81 bei Attribut
+82 http://ambix.uni-tuebingen.de/cgi-bin/selbst
+83 http://ambix.uni-tuebingen.de/selbstinfo.html
+84 <FORM METHOD=POST ACTION=%s>Selbsteintrag:
+85      <INPUT type=hidden name="aloc" value="%s">
+       <INPUT TYPE="submit" name="worker" VALUE="Angestellte">
+86      <INPUT type=hidden name="sloc" value="%s">
+       <INPUT TYPE="submit" name="studie" VALUE="Studierende">
+87 </FORM>
+88 Ung&uuml;ltige Anfrage
+89 <EM>Fehlender Such-Filter!</EM>
+90 <EM>Fehlender Scope!</EM>
+91 [not used]
+92 <EM>Fehlender Suchbegriff!</EM> <P>Bitte geben Sie einen Suchbegriff an!
+93 <EM>Fehlender DN!</EM>
+94 <EM>Fehlendes Passwort!</EM>
+95 <EM>Unbekannte Abfrage!</EM>
+96 <H1>ZUGRIFF VERWEIGERT</H1>
+       Die angefragten Daten stehen &uuml;ber diesen Server nicht zur
+       Verf&uuml;gung!<br>Bitte benutzen Sie folgende URL:
+97 <H1>ZUGRIFF VERWEIGERT</H1>
+98 ...lesen
+99 %s<H6>Daten erstellt durch %s <br>
+       &copy; TWEB: Zentrum f&uuml;r Datenverarbeitung,
+       Universit&auml;t T&uuml;bingen, Deutschland</H6>
+100 BODY BGCOLOR=#ffffe0 TEXT=#000000 LINK=#0000a0 VLINK=#00a000 font-family="times serif"
+101 <HR>
+102 <BR><H1>Der Name Ihres Hosts ist nicht verfuegbar. Sie sehen deshalb nicht alle Daten!</H1><BR>
+103 [not used]
+104 Wenn Sie mehr Daten sehen wollen, schalten Sie Ihren Proxy-Server aus !
diff --git a/contrib/tweb/TWEB_conFiles/tweb.lang.1.dist b/contrib/tweb/TWEB_conFiles/tweb.lang.1.dist
new file mode 100644 (file)
index 0000000..0ab8857
--- /dev/null
@@ -0,0 +1,136 @@
+#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                                          *
+# tweb.lang.1                                                              *
+#                                                                          *
+# Function:..Language-File for TWEB-SOFTWARE                               *
+#                                                                          *
+#                                                                          *
+#                                                                          *
+# Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+#            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+#            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+#                                                                          *
+#                                       ZZZZZ  DDD    V   V                *
+#            Creation date:                Z   D  D   V   V                *
+#            February 14 1996             Z    D   D   V V                 *
+#            Last modification:          Z     D  D    V V                 *
+#            February 20 1997           ZZZZ   DDD      V                  *
+#                                                                          *
+#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+#
+# $Id: tweb.lang.1.dist,v 1.6 1999/09/10 15:01:22 zrnsk01 Exp $
+
+0  en
+1  [not used]
+2  [not used]
+3  [not used]
+4  [not used]
+5  Command not implemented!
+6  Not found
+7  Last-Modified
+8  Modify results:
+9  Modify results for
+10 Changes:
+11 Error during modify operation:
+12 DELETE old value
+13 from attribute
+14 The error code was
+15 change
+16 successfully done
+17 Read this modified entry
+18 userPassword
+19 Modify this entry again
+20 The query you specified was not specific enough, causing a size limit to be exceeded and the first several matches found to be returned.<br>If you did not find the match you were looking for, try issuing a more specific query, for example one that contains both first and last name.<br>
+21 Not all entries could be returned because a size limit was exceeded.<br>There is no way to defeat this feature, but if you know who you are looking for, try choosing the <STRONG>Search</STRONG> option listed above and specifying the name of the entry you want.<br>
+22 Error
+23 X.500 - WWW Error:
+24 An error occurred searching X.500
+25 The error code was
+26 No additional information is available.
+27 Move upwards to
+28 current location:
+29 About
+30 search:
+31 We don't have the access right to do a global search here. If you know who you are looking for, try choosing the <STRONG>Search</STRONG> option listed above and specifying the name of the entry you want.<br>
+32 Didn't find anything below this entry! You can read the entry itself or try a search ...
+33 (restricted list
+34 see below
+35 search in
+36 No search results:
+37 Didn't find anything...
+38 for
+39 Search results:
+40 Search results for
+41 <H2>X.500 - WWW Error:</H2><P>An error occurred showing X.500 entry. <P>No known object-class for this entry.<P>
+42 See more attributes
+43 Beware, this is still <B>EXPERIMENTAL</B>!!!
+44 Enter the password of this entry
+45 if you want to
+46 submit
+47 MODIFY
+48 it
+49 Missing Password!
+50 Unknown argument
+51 Modify
+52 oldPassword
+53 Beware, this is still EXPERIMENTAL!!!
+54 Error in query: No value
+55 for
+56 Error in query: No oldvalue
+57 <B>Error during modify operation:</B><P><P>ADD new value
+58 to attribute
+59 The error code was
+60 <B>Fatal Error:</B><BR>Couldn't reset the old value
+61 to attribute
+62 Reset the old  value
+63 to attribute
+64 mailto:
+65 Due to Legal Rights no extended lists of persons will be displayed.
+       If the requested person is not in the list shown, please use the 
+       <STRONG>Search</STRONG>-option with a more significant personal name.
+       <BR>
+66 Onelevel search
+67 search below for...
+68 SEARCH
+69 DELETE INPUT
+70 entry
+71 entries
+72 RESET Values
+73 s
+74 deleted
+75 replaced
+76 added
+77 The World
+78 Yes
+79 No
+80 <B>Fatal Error:</B><BR>Couldn't modify the value
+81 at attribute
+82 http://ambix.uni-tuebingen.de/cgi-bin/selbst
+83 http://ambix.uni-tuebingen.de/selbstinfo.html
+84 <FORM METHOD=POST ACTION=%s>Self-subscription:
+85      <INPUT type=hidden name="aloc" value="%s">
+       <INPUT TYPE="submit" name="worker" VALUE="Staff">
+86      <INPUT type=hidden name="sloc" value="%s">
+       <INPUT TYPE="submit" name="studie" VALUE="Students">
+87 </FORM>
+88 Bad request
+89 <EM>Missing filter!</EM>
+90 <EM>Missing scope!</EM>
+91 [not used]
+92 <EM>Missing search value!</EM> <P>Please specify a search value.
+93 <EM>Missing DN!</EM>
+94 <EM>Missing password!</EM>
+95 <EM>Unknown query!</EM>
+96 <H1>ACCESS DENIED</H1>
+       The requested data are not delivered via this server!<br>
+       Please use the following URL:
+97 <H1>ACCESS DENIED</H1>
+98 ...read it
+99 %s<H6>Data composed by %s <br>
+       &copy; TWEB: Zentrum fuer Datenverarbeitung,
+       Universitaet Tuebingen, GERMANY</H6>
+100 BODY BGCOLOR=#ffffe0 TEXT=#000000 LINK=#0000a0 VLINK=#00a000
+101 <HR>
+102 <BR><H1>The name of your host is not available. Therefore you don't see the whole database!</H1><BR>
+103 [not used]
+104 If you want to see more data, please inactivate your proxy-server !
diff --git a/contrib/tweb/TWEB_conFiles/tweb.rc.dist b/contrib/tweb/TWEB_conFiles/tweb.rc.dist
new file mode 100644 (file)
index 0000000..3f22c8d
--- /dev/null
@@ -0,0 +1,233 @@
+#*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                                          *
+# tweb.rc....                                                              *
+#                                                                          *
+# Function:..Ressource-File for TWEB                                       *
+#                                                                          *
+#                                                                          *
+#                                                                          *
+# Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+#            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+#            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+#                                                                          *
+#                                       ZZZZZ  DDD    V   V                *
+#            Creation date:                Z   D  D   V   V                *
+#            July 26 1995                 Z    D   D   V V                 *
+#            Last modification:          Z     D  D    V V                 *
+#            January 11 1999            ZZZZ   DDD      V                  *
+#                                                                          *
+#/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
+#==========================================================================
+# $Id: tweb.rc.dist,v 1.6 1999/09/10 15:01:22 zrnsk01 Exp $
+
+
+##########################################################################
+#                                                                        #
+#    set the following variables to your local addresses (NEEDED)        #
+#    check also for the location of certain help files                   #
+#    and proper timeout                                                  #
+#                                                                        #
+##########################################################################
+
+#  the base port, TWEB is listening on;
+#  indizes for the languages are added to this base port number
+#  (e.g., TWEB with language 1 is listening on port (WEBPORT + 1))
+WEBPORT        <the-base-port-tweb-should-listen-to>
+
+#  the host and port, your x500 server (e.g., UMICH slapd) is listening on
+LDAPD          <the-host-running-your-ldap-server>
+LDAPPORT       <the-port-of-that-ldapserver>
+
+
+#------------------------------------------------------------------------#
+
+#  the DN, TWEB will consider it´s home, together with header and
+#  footer files to be display´ed at that position
+#
+#  the BASEDN will be accessed, when NO DN is given (http://host:port/
+#  the BASEDN will be stripped off from hyperlinks beeing display´ed
+#  access to DIT areas NOT below BASEDN will be denied, if STRICT-BASEDN
+#    (see tweb.rc(.dist)) is activ
+#
+#  BEWARE: HEADER AND FOORTER FILE NAMES ARE ONLY THE BASE NAMES; THE
+#          CORRESPONDING WORKING FILES MUST HAVE EXTENSIONS OF '.x'
+#          WITH x INDICATING THE DESIRED GATEWAY LANGUAGE NUMBER (0-9)
+
+BASEDN  "o=<my-organization>, c=<my-country-ID>" tweb-base.head  tweb-base.foot
+
+
+#------------------------------------------------------------------------#
+
+#  assuming you have copied the binary into the TWEB_conFiles directory,
+#  the ETCDIR directory should be a parallel directory of the current one
+ETCDIR         ../LDAP_etc/
+
+#  the filter file directs the mode, TWEB will search for entries
+#  (e.g., first search input as is in attribute cn, then search
+#         for any one word in attributes cn and/or sn ... )
+FILTERFILE     ldapfilter.conf
+
+#  the time in secs, TWEB will try to get a connection to the x500 server
+TIMEOUT        240
+
+
+##########################################################################
+#                                                                        #
+#    check the following variables for proper access rights              #
+#    and handling of entry lists/legal hints                             #
+#    (NOT NEEDED FOR FIRST START-UP)                                     #
+#                                                                        #
+##########################################################################
+
+#  DN and password of an x500 entry, TWEB will use, when access of the
+#  user to the servers data is without restrictions
+#
+# WEBDN          "cn=<TWEB-DN-1>, o=<your-organization>, c=<your-country>"
+# WEBPW          <TWEB-PW-1>
+
+#  DN (and password) of an x500 entry, TWEB will use, when access of the
+#  user to the servers data is restricted (e.g., external users);
+#  a NULL password (by not configuring) will lead to anonymous access,
+#  irrespective, whether the DN is given or not
+#
+# WEBDN2         "cn=<TWEB-DN-2>, o=<your-organization>, c=<your-country>"
+# WEBPW2         <TWEB-PW-2>
+
+#  Refuse/grant service to certain IP hosts/domains names;
+#  both settings will be checked when deciding deniel of service;
+#  the most special definition for the host given will dominate
+#  (settings can be given by using regular expressions, to cover more than
+#   one host/domain with one expression; alternatives, which should be
+#   or'ed must be seperated by '|')
+#  (continuations can be given on follow-up lines, whith no additional
+#   character at the end of the previous line, and an indentation by
+#   TAB or SPACE on the follow-up line)
+#  
+# REFUSE some-host(\.some-sub-domain)?\.some-domain$|another-domain$|
+#          ^some-initial-char[0-9]+.+\.some-domain$
+
+# GRANT        (host1|host2|host3).*\.another-domain$
+
+#  When service is granted to the requesting host, allow-string/deny-string
+#  decide on full or restricted access to the servers data; in both cases
+#  one of WEBDN1/WEBDN2 (or anonymous if not configured) is used for
+#  accessing the server;
+#  ACLs on the server must be set accourding to the required visibility of
+#  data (see description of ACLs in the servers documentation)
+#  (host/domain names are given as with GRANT/REFUSE)
+#
+# ALLOW-STRING    my-domain$
+# DENY-STRING     some-special-host/sub-domain-in-my-domain\.my-domain$
+
+#  Consider WWW proxies as not authorized to get un-restricted access
+# NO-PROXY
+
+#  Consider the explicit list of proxies as authorized to get full access
+#  (the list is as colon-seperated list of host names)
+# ALLOW-PROXY    proxy.in.my.domain:some-proxy.in.another.domain
+
+#  Refuse access to DNs, outside the scope of TWEBs BASEDN
+#  (this is necessary, if no referral mechanism is working on the
+#   x500 server level; e.g., with slapd in the UMICH package)
+# STRICT-BASEDN
+
+#  Activate anti-hacking code: count access from a range of IP adresses
+#  (IP-Group) to the gateway during a timeslice (randomly selected between
+#  a minimum and maximum number of secs); if the count exceeds a pre-
+#  defined maximum, refuse service for a certain number of timeslices;
+#  after that resume service for the IP-Group
+#  Print statistics for number of accesses from all IP-Groups to file,
+#  at regular intervalls
+#
+# COMREFUSE   TMIN TMAX MAX_ACCEPT SUSPEND_CYCLE STAT_CYCLE STAT_FILE
+COMREFUSE   100 200 40 12 43200 /LDAP/ldap-3.0/tweb-1.0/hack-stats
+
+#------------------------------------------------------------------------#
+
+#  The maximum number of entries display'ed on any one HTML page
+MAXCOUNT        2000
+
+#  During searching/browsing restrict the number of person entries to the
+#  given number; numbers apply to each of the person groups given by the
+#  SORT parameter
+#  STRICT means, even allowed access will be restricted in numbers
+#  NO-BROWSE means, during browsing no person entries are shown at all
+#  MAX-PERSON      5    STRICT  NO-BROWSE
+
+#  List of (parts of ) RDNs, which should not be display'ed
+#  For the current release, strings are seperated by BLANK, with forced
+#  matching to the beginning or end of an RDN signalled by '|';
+#  in a future release, this will be replaced by regular expressions,
+#  very like as in GRANT/REFUSE and beasts
+NO-SHOW-RDN     "|cn=Dummy| netz| LDAP-SAP Mail500|"
+
+
+#  Print a legal message for restricted users; 
+#  normally, this message is printed at the end of the HTML page,
+#  with ON-TOP, the message can be printed near the top of the page
+#
+# LEGAL ON-TOP
+
+
+##########################################################################
+#                                                                        #
+#    configure TWEB gateway-switching                                    #
+#                                                                        #
+##########################################################################
+
+#  Gateway-switching is an original feature of the TWEB, www-x500-gateway.
+#  Switching enables TWEB to generate hyper-links, that are directed towards
+#  other well-known gateways. Following those hyper-links will lead the
+#  user to those gateways, effectively balancing the load between a net
+#  of gateways. Another benefit is the 'Corporate Identity' each gateway
+#  can implement for an organizations own directory data.
+#
+#  Gateway-switching can be configured statically, in the config files
+#  tweb.rc and/or tweb.conf.? , or dynamically, via hints in the 
+#  directory data to be display'ed.
+#
+#  Select dynamic gateway-switching: TWEB will look for labeleduri
+#  attributes within each entry to be display'ed as a hyper-link
+#  before constructing the host-part of the hyper-link URL; the
+#  labelleduri attribut must follow the syntax:
+#      <base-url-of-the-other-gateway> <some-label> (gw[-<language-key>])
+#  The DN of the entry will be appended to the base-url, if the language
+#  selection matches, or no specific selection is given (gw)
+#
+DYNAMIC-GW
+
+#  Configure static gateway switches; they may be replaced at run-time by
+#  dynamic switches (in tweb.rc, gateways, which only support one language
+#  are given; gatways supporting more languages are defined in the
+#  tweb.conf.? files)
+GW-SWITCH   "l=DFN,c=DE"           http://ambix.uni-tuebingen.de:8889/
+
+
+##########################################################################
+#                                                                        #
+#    some miscelleneous configuration parameters                         #
+#                                                                        #
+##########################################################################
+
+#  the labelling of buttons/links leading to gateways with other languages
+LANGUAGE        Deutsch
+                English
+
+#  the hierarchy above the current DIT position is presented as a
+#  pull down menu and an action button, or as a list of hyperlinks
+PULL-DOWN-MENUS
+
+#  entries are kept for some time in a WWW browser´s or proxy´s cache,
+#  before expiring
+CACHE-EXPIRE-DEFAULT 900
+
+#  digits at the end of RDNs (e.g., to make RDNs unique) are stripped
+#  off before displaying; in the config parameter a list of object
+#  classes with stripping in the RDN parts is given
+# STRIP-PIN |toc_profs|person|toc_primas|toc_cperson|toc_funcs|toc_pextra|
+
+#  when MODIFY is configured (in tweb.conf.x), entries belonging to
+#  the object class(es) given here can NOT be modified
+# NO-MODIFY      |toc_primas|
+
+
diff --git a/contrib/tweb/Versiongw.c b/contrib/tweb/Versiongw.c
new file mode 100644 (file)
index 0000000..3b9bb2d
--- /dev/null
@@ -0,0 +1,41 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* Versiongw.c                                                              *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 13 1996             Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            August 26 1999             ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: Versiongw.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+/*
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Tuebingen, Gremany. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+char version[]   = "TWEB 2.3.4 (%WHEN%)";
+char Version[]   = "  TWEB 2.3.4 (%WHEN%)\t%WHOANDWHERE%";
+char copyright[] = "TWEB Version 2.3.4";
+
+char sccsid[]  = "@(#) TWEB 2.3.4 - 1995-1999, University of Tuebingen, DE";
+
+
diff --git a/contrib/tweb/ch_malloc.c b/contrib/tweb/ch_malloc.c
new file mode 100644 (file)
index 0000000..1386921
--- /dev/null
@@ -0,0 +1,85 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* ch_malloc.c                                                              *
+*                                                                          *
+* Function:..Alloc-Functions with Error-Handling                           *
+*                                                                          *
+*            from LDAP3.2 University of Michigan                           *
+*                                                                          *
+*            Patch: unsigned long --> size_t fuer size-Parameter           *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 16 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 31 1998           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: ch_malloc.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "tglobal.h"
+
+#include "ch_malloc_exp.h"
+#include "support_exp.h"
+
+
+/* ch_malloc.c - malloc routines that test returns from malloc and friends */
+
+PUBLIC char * ch_malloc( size )
+size_t size;
+{
+       char    *new;
+
+       if ( (new = (char *) calloc(1, size )) == NULL ) {
+               if (dosyslog) syslog( LOG_INFO, "malloc of %d bytes failed\n", size );
+               exit_tweb( 1 );
+       }
+
+       return( new );
+}
+/* end of function: ch_malloc */
+
+PUBLIC char * ch_realloc( block, size )
+char           *block;
+size_t size;
+{
+       char    *new;
+
+       if ( block == NULL ) {
+               return( ch_malloc( size ) );
+       }
+
+       if ( (new = (char *) realloc( block, size )) == NULL ) {
+               if (dosyslog) syslog( LOG_INFO, "realloc of %d bytes failed\n", size );
+               exit_tweb( 1 );
+       }
+
+       return( new );
+}
+/* end of function: ch_realloc */
+
+PUBLIC char * ch_calloc( nelem, size )
+size_t nelem;
+size_t size;
+{
+       char    *new;
+
+       if ( (new = (char *) calloc( nelem, size )) == NULL ) {
+               if (dosyslog) syslog( LOG_INFO, "calloc of %d elems of %d bytes failed\n",
+                 nelem, size );
+               exit_tweb( 1 );
+       }
+
+       return( new );
+}
+/* end of function: ch_calloc */
diff --git a/contrib/tweb/ch_malloc_exp.h b/contrib/tweb/ch_malloc_exp.h
new file mode 100644 (file)
index 0000000..54ef4b8
--- /dev/null
@@ -0,0 +1,34 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* ch_malloc_exp.h                                                          *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 16 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 21 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: ch_malloc_exp.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _CH_MALLOC_EXP_
+#define _CH_MALLOC_EXP_
+
+PUBLIC char * ch_malloc();
+PUBLIC char * ch_realloc();
+PUBLIC char * ch_calloc();
+
+
+#endif /* _CH_MALLOC_EXP_ */
diff --git a/contrib/tweb/charray.c b/contrib/tweb/charray.c
new file mode 100644 (file)
index 0000000..c6de468
--- /dev/null
@@ -0,0 +1,179 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* charray.c..                                                              *
+*                                                                          *
+* Function:..Array-Handling-Functions                                      *
+*                                                                          *
+*            from LDAP3.2 University of Michigan                           *
+*                                                                          *
+*            Patch: NULL-Pointers are caught in Arrays/Strings             *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 16 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 21 1998           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: charray.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "charray_exp.h"
+#include "ch_malloc_exp.h"
+
+/* charray.c - routines for dealing with char * arrays */
+
+
+PUBLIC void charray_add( a, s )
+char   ***a;
+char   *s;
+{
+       int     n;
+
+       if ( s == NULL )
+               return;
+
+       if ( *a == NULL ) {
+               *a = (char **) ch_malloc( 2 * sizeof(char *) );
+               n = 0;
+       } else {
+               for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
+                       ;       /* NULL */
+               }
+
+               *a = (char **) ch_realloc( (char *) *a,
+                   (n + 2) * sizeof(char *) );
+       }
+
+       (*a)[n++] = strdup(s);
+       (*a)[n] = NULL;
+}
+/* end of function: charray_add */
+
+PUBLIC void charray_merge( a, s )
+char   ***a;
+char   **s;
+{
+       int     i, n, nn;
+
+       if ( s == NULL )
+               return;
+
+       for ( n = 0; *a != NULL && (*a)[n] != NULL; n++ ) {
+               ;       /* NULL */
+       }
+
+       for ( nn = 0; s[nn] != NULL; nn++ ) {
+               ;       /* NULL */
+       }
+
+       *a = (char **) ch_realloc( (char *) *a, (n + nn + 1) * sizeof(char *) );
+
+       for ( i = 0; i < nn; i++ ) {
+               (*a)[n + i] = s[i];
+       }
+       (*a)[n + nn] = NULL;
+}
+/* end of function: charray_merge */
+
+PUBLIC void charray_free( array )
+char **array;
+{
+       char    **a;
+
+       if ( array == NULL ) {
+               return;
+       }
+
+       for ( a = array; *a != NULL; a++ ) {
+               if ( *a != NULL ) {
+                       free( *a );
+               }
+       }
+       free( (char *) array );
+}
+/* end of function: charray_free */
+
+PUBLIC int charray_inlist( a, s )
+    char       **a;
+    char       *s;
+{
+       int     i;
+
+       if (( a == NULL ) || ( s == NULL ))
+               return( 0 );
+
+       for ( i = 0; a[i] != NULL; i++ ) {
+               if ( strcasecmp( s, a[i] ) == 0 ) {
+                       return( 1 );
+               }
+       }
+
+       return( 0 );
+}
+/* end of function: charray_inlist */
+
+PUBLIC char ** charray_dup( a )
+char **a;
+{
+       int     i;
+       char    **new;
+
+       if ( a == NULL )
+               return( NULL );
+
+       for ( i = 0; a[i] != NULL; i++ )
+               ;       /* NULL */
+
+       new = (char **) ch_malloc( (i + 1) * sizeof(char *) );
+
+       for ( i = 0; a[i] != NULL; i++ ) {
+               new[i] = strdup( a[i] );
+       }
+       new[i] = NULL;
+
+       return( new );
+}
+/* end of function: charray_dup */
+
+PUBLIC char ** str2charray( str, brkstr )
+char *str;
+char *brkstr;
+{
+       char    **res;
+       char    *s;
+       int     i;
+       char *str1;
+
+        if (( str == NULL ) || ( brkstr == NULL )) return( (char **) NULL );
+
+       str1 = strdup(str);
+       i = 1;
+       for ( s = str1; *s; s++ ) {
+               if ( strchr( brkstr, *s ) != NULL ) {
+                       i++;
+               }
+       }
+
+       res = (char **) ch_malloc( (i + 1) * sizeof(char *) );
+       i = 0;
+       for ( s = strtok( str1, brkstr ); s != NULL; s = strtok( NULL,
+           brkstr ) ) {
+               res[i++] = strdup( s );
+       }
+       res[i] = NULL;
+
+       free(str1);
+       return( res );
+}
+/* end of function: str2charray */
diff --git a/contrib/tweb/charray_exp.h b/contrib/tweb/charray_exp.h
new file mode 100644 (file)
index 0000000..3f4a671
--- /dev/null
@@ -0,0 +1,37 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* charray_exp.h                                                            *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 16 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 21 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: charray_exp.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _CHARRAY_EXP_
+#define _CHARRAY_EXP_
+
+PUBLIC void charray_add();
+PUBLIC void charray_merge();
+PUBLIC void charray_free();
+PUBLIC int charray_inlist();
+PUBLIC char ** charray_dup();
+PUBLIC char ** str2charray();
+
+
+#endif /* _CHARRAY_EXP_ */
diff --git a/contrib/tweb/checkclient.c b/contrib/tweb/checkclient.c
new file mode 100644 (file)
index 0000000..45f2edf
--- /dev/null
@@ -0,0 +1,258 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* checkclient.c                                                            *
+*                                                                          *
+* Function:..Client-Check-Funktions                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            March 7 1996                 Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            March 19 1999              ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: checkclient.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "init_exp.h"
+#include "charray_exp.h"
+#include "checkclient.h"
+#include "regular_exp.h"
+
+PRIVATE int check4access (host, glob)
+char *host;
+GLOB_STRUCT *glob;
+/*
+ * check if host ends in a valid domain.
+ * return OK if so, NOTOK otherwise
+ */
+{
+    return(
+     (glob->allow_string ? checkad(host, glob->comp_allow, glob) : OK) &&
+     (glob->deny_string ? !checkad(host, glob->comp_deny, glob) : OK));
+
+}
+/* end of function: check4access */
+
+
+PRIVATE int checkad (host, string, glob)
+char *host;
+regexp *string;
+GLOB_STRUCT *glob;
+{
+    char nhost[BUFSIZ];
+
+    strcpy(nhost, host ? host : "unknown.xxx");
+    return( tweb_regexec( string, nhost ));
+
+}
+/* end of function: checkad */
+
+/* Analyse Web-Client-Type / proxy + Log-Message */
+
+PUBLIC void checkwwwclient (fp, ip_addr, ip_port, hp, glob)
+FILE *fp;
+char *ip_addr;
+unsigned int ip_port;
+struct hostent *hp;
+GLOB_STRUCT *glob;
+{
+    char in[BUFSIZ];
+    char agent[BUFSIZ], via[BUFSIZ];
+       char *host = hp ? hp->h_name : "unknown";
+
+       *via = *agent = '\0';
+
+    if(!((glob->grant ? checkad(host, glob->comp_grant, glob) : OK) &&
+    (glob->refuse ? !checkad(host, glob->comp_refuse, glob) : OK))){
+
+        if (dosyslog)
+                       syslog (LOG_INFO, "%s REFUSED <%08d>",
+                              glob->server_connection_msg, glob->svc_cnt);
+        fflush(fp);
+        if (http == 1) PRINT_HTML_HEADER;
+        fprintf( fp, HTML_HEAD_TITLE, "ACCESS DENIED", glob->la[100]);
+        disp_file(glob, glob->header, fp);
+        fprintf(fp, "%s", glob->la[97]);
+        disp_file(glob, glob->footer, fp);
+        PRINT_HTML_FOOTER;
+        close_ldap_connections(glob);
+        exit_tweb(0);
+    }
+
+    glob->is_proxy = FALSE;
+    while(fgets( in, BUFSIZ-1,  fp ) && *trimright(in, WSPACE) ) {
+        if(strstr(in, "User-Agent:")){
+            strcpy(agent, in);
+            if(strstr(str_tolower(in), PROXY_TOKEN1) ||
+                strstr(in, PROXY_TOKEN2))
+                     glob->is_proxy = TRUE;
+        }
+        if(strstr(in, "Via:")){
+            strcpy(via, in);
+            glob->is_proxy = TRUE;
+        }
+    }
+    if (dosyslog){
+         char useragent[BUFSIZ];
+
+         sprintf(useragent, "%s  (%s,%u) %s",
+                            *agent ?  agent : "User-Agent: unknown",
+                            ip_addr, ip_port, via);
+         glob->user_agent_msg = strdup(useragent);
+    }
+
+    /* check if access is allowed ... */
+
+    glob->allowed = 
+        ( hp
+          && ((check4access(str_tolower(hp->h_name), glob) == OK))
+          && !( glob->no_proxy && glob->is_proxy
+                && !charray_inlist(glob->allow_proxy, hp->h_name)
+              )
+        );
+}
+
+/* end of function: checkwwwclient */
+
+PUBLIC void decide_access(glob)
+GLOB_STRUCT *glob;
+{
+
+    if(!glob->allowed) {
+        /*  access from a non allowed computer
+            ==> put webdn/webpw on a alternative value (if existant) */
+        glob->webdn = glob->webdn2;
+        glob->webpw = glob->webpw2;
+        glob->noauth = TRUE;
+
+        if (dosyslog) syslog (LOG_INFO, "%s DENIED <%08d>",
+                                 glob->server_connection_msg, glob->svc_cnt);
+
+    } else {
+
+        /*  if allowed and not strict: list persons without limits */
+        if (!glob->strict) glob->max_person = 0;
+
+        if (dosyslog) syslog (LOG_INFO, "%s ALLOWED <%08d>",
+                                 glob->server_connection_msg, glob->svc_cnt);
+    }
+    if (dosyslog) syslog (LOG_INFO, "%s <%08d>",
+                                                       glob->user_agent_msg, glob->svc_cnt);
+
+    /*  non configured max-person means full listing */
+    if (!glob->max_person) glob->max_person = 100000;
+
+    /*  if result-lists shall be restricted: configure display of 
+        privacy-message */
+    glob->legal = glob->legal && (!glob->allowed || glob->strict);
+
+    /*  if browsing should be restricted: configure no_browse-variable */
+    glob->no_browse = glob->no_browse &&
+            (glob->noauth || glob->strict);
+
+}
+
+/* end of function: decide_access */
+
+/* Read ip_refuse dat_file and build up the data structure */
+
+PUBLIC void get_ip_refuse_clients(glob)
+GLOB_STRUCT *glob;
+{
+       if ( glob->ip_refuse ) {
+
+       FILE *rfp;
+       char  inLine[BUFSIZ];
+               char *inLineP;
+               size_t   buflen = REFU_BUFSIZ;
+        size_t   curlen = (size_t) 1;
+
+       if(!(rfp = fopen(glob->ip_refuse->dat_file, "r"))) {
+               return;
+       }
+
+               if ( glob->ip_refuse->refu_str ) free( glob->ip_refuse->refu_str );
+               glob->ip_refuse->refu_str = ch_calloc( 1, REFU_BUFSIZ );
+               *glob->ip_refuse->refu_str = '&';
+
+       while(fgets(inLine, BUFSIZ-1, rfp)) {
+                       int  inLen;
+
+                       if ( ( inLineP = strchr( inLine, '#' ) )) *inLineP = '\0';
+               inLineP = trim(inLine, " \t\n");
+               if ( *inLineP == '\0' ) continue;
+
+                       inLen = strlen( inLineP );
+                       if ( !( curlen + inLen + 1 < buflen )) {
+
+                               glob->ip_refuse->refu_str =
+                                       ch_realloc( glob->ip_refuse->refu_str,
+                                                                                       buflen + REFU_BUFSIZ );
+                               buflen += REFU_BUFSIZ;
+
+                       }
+
+                       sprintf( glob->ip_refuse->refu_str, "%s%s&",
+                                               glob->ip_refuse->refu_str, inLineP );
+
+                       curlen += inLen;
+
+       }
+               fclose( rfp );
+
+       }
+}  /*  get_ip_refuse_clients  */
+
+
+/* Routine needed to initialize structure in init.c */
+
+/*  Test the incomming IP address for denial  */
+
+PUBLIC int
+check_ip_denial( ip_connection, glob )
+struct sockaddr_in   *ip_connection;
+GLOB_STRUCT          *glob;
+{
+    int    res = OK;
+
+       if ( glob->ip_refuse ) {
+       char  ip_address[18];
+
+       sprintf( ip_address, "&%s&",  inet_ntoa( ip_connection->sin_addr ));
+               if ( strstr( glob->ip_refuse->refu_str, ip_address ))
+                       res = NOTOK;
+
+       }
+
+    return( res );
+
+}  /*  check_ip_denial  */
+
+
+/* re-read IP-REFUSE file if necessary */
+
+PUBLIC void
+re_readIPrefuse( glob )
+GLOB_STRUCT   *glob;
+{
+       static int ip_refuse_reload = 0;
+
+       if ( glob->ip_refuse &&
+                       !( ++ip_refuse_reload % glob->ip_refuse->rereadcycle )) {
+               get_ip_refuse_clients( glob );
+       }
+
+}  /*  re_readIPrefuse  */
+
diff --git a/contrib/tweb/checkclient.h b/contrib/tweb/checkclient.h
new file mode 100644 (file)
index 0000000..ecdd9eb
--- /dev/null
@@ -0,0 +1,41 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* checkclient.h                                                            *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            March 18 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            March 19 1999              ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: checkclient.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+#include "checkclient_exp.h"
+#include "regular_exp.h"
+#include "support_exp.h"
+#include "x500_exp.h"
+#include "charray_exp.h"
+#include "ch_malloc_exp.h"
+
+#ifndef _CHECKCLIENT_
+#define _CHECKCLIENT_
+
+#define PROXY_TOKEN1 " via "
+#define PROXY_TOKEN2 "gateway"
+
+PRIVATE int checkad();
+PRIVATE int check4access();
+
+#endif /* _CHECKCLIENT_ */
diff --git a/contrib/tweb/checkclient_exp.h b/contrib/tweb/checkclient_exp.h
new file mode 100644 (file)
index 0000000..6b71b33
--- /dev/null
@@ -0,0 +1,35 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* checkclient_exp.h                                                        *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            March 18 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            March 19 1999              ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: checkclient_exp.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _CHECKCLIENT_EXP_
+#define _CHECKCLIENT_EXP_
+
+PUBLIC void checkwwwclient();
+PUBLIC void decide_access();
+PUBLIC void get_ip_refuse_clients();
+PUBLIC int  check_ip_denial();
+PUBLIC void re_readIPrefuse();
+
+#endif /* _CHECKCLIENT_EXP_ */
diff --git a/contrib/tweb/dn.c b/contrib/tweb/dn.c
new file mode 100644 (file)
index 0000000..7518372
--- /dev/null
@@ -0,0 +1,200 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* dn.c.......                                                              *
+*                                                                          *
+* Function:..DN-Handling-Functions                                         *
+*                                                                          *
+*            from LDAP3.2 University of Michigan                           *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 24 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 14 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: dn.c,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+/* dn.c - routines for dealing with distinguished names */
+
+#include "tgeneral.h"
+#include "strng_exp.h"
+#include "dn.h"
+
+/*
+ * dn_normalize - put dn into a canonical format.  the dn is
+ * normalized in place, as well as returned.
+ */
+
+PUBLIC char * dn_normalize( dn )
+char *dn;
+{
+       char    *d, *s;
+       int     state, gotesc;
+
+       /* Debug( LDAP_DEBUG_TRACE, "=> dn_normalize \"%s\"\n", dn, 0, 0 ); */
+
+       gotesc = 0;
+       state = B4TYPE;
+       for ( d = s = dn; *s; s++ ) {
+               switch ( state ) {
+               case B4TYPE:
+                       if ( ! SPACE( *s ) ) {
+                               state = INTYPE;
+                               *d++ = *s;
+                       }
+                       break;
+               case INTYPE:
+                       if ( *s == '=' ) {
+                               state = B4VALUE;
+                               *d++ = *s;
+                       } else if ( SPACE( *s ) ) {
+                               state = B4EQUAL;
+                       } else {
+                               *d++ = *s;
+                       }
+                       break;
+               case B4EQUAL:
+                       if ( *s == '=' ) {
+                               state = B4VALUE;
+                               *d++ = *s;
+                       } else if ( ! SPACE( *s ) ) {
+                               /* not a valid dn - but what can we do here? */
+                               *d++ = *s;
+                       }
+                       break;
+               case B4VALUE:
+                       if ( *s == '"' ) {
+                               state = INQUOTEDVALUE;
+                               *d++ = *s;
+                       } else if ( ! SPACE( *s ) ) { 
+                               state = INVALUE;
+                               *d++ = *s;
+                       }
+                       break;
+               case INVALUE:
+                       if ( !gotesc && SEPARATOR( *s ) ) {
+                               while ( SPACE( *(d - 1) ) )
+                                       d--;
+                               state = B4TYPE;
+                               if ( *s == '+' ) {
+                                       *d++ = *s;
+                               } else {
+                                       *d++ = ',';
+                               }
+                       } else if ( gotesc && !NEEDSESCAPE( *s ) &&
+                           !SEPARATOR( *s ) ) {
+                               *--d = *s;
+                               d++;
+                       } else {
+                               *d++ = *s;
+                       }
+                       break;
+               case INQUOTEDVALUE:
+                       if ( !gotesc && *s == '"' ) {
+                               state = B4SEPARATOR;
+                               *d++ = *s;
+                       } else if ( gotesc && !NEEDSESCAPE( *s ) ) {
+                               *--d = *s;
+                               d++;
+                       } else {
+                               *d++ = *s;
+                       }
+                       break;
+               case B4SEPARATOR:
+                       if ( SEPARATOR( *s ) ) {
+                               state = B4TYPE;
+                               *d++ = *s;
+                       }
+                       break;
+               default:
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+#    define LDAP_DEBUG_ANY  0xffff
+
+            if ( ldap_debug & LDAP_DEBUG_ANY )
+                fprintf( stderr, "dn_normalize - unknown state %d\n", state );
+
+            if ( ldap_syslog & LDAP_DEBUG_ANY )
+                syslog( ldap_syslog_level,
+                             "dn_normalize - unknown state %d\n", state );
+
+#  endif
+#else
+                       Debug( LDAP_DEBUG_ANY,
+                           "dn_normalize - unknown state %d\n", state, 0, 0 );
+#endif
+
+                       break;
+               }
+               if ( *s == '\\' ) {
+                       gotesc = 1;
+               } else {
+                       gotesc = 0;
+               }
+       }
+       *d = '\0';
+
+       /* Debug( LDAP_DEBUG_TRACE, "<= dn_normalize \"%s\"\n", dn, 0, 0 ); */
+       return( dn );
+}
+/* end of function: dn_normalize */
+
+/*
+ * dn_normalize_case - put dn into a canonical form suitable for storing
+ * in a hash database.  this involves normalizing the case as well as
+ * the format.  the dn is normalized in place as well as returned.
+ */
+
+PUBLIC char * dn_normalize_case( dn )
+char *dn;
+{
+
+       /* normalize format */
+       dn_normalize( dn );
+
+       /* normalize case */
+        str_toupper( dn );
+
+       return( dn );
+}
+/* end of function: dn_normalize_case */
+
+/*
+ * dn_issuffix - tells whether suffix is a suffix of dn.  both dn
+ * and suffix must be normalized.
+ */
+
+PUBLIC int dn_issuffix( dn, suffix )
+char   *dn;
+char   *suffix;
+{
+       int     dnlen, suffixlen;
+
+       if ( dn == NULL ) {
+               return( 0 );
+       }
+
+       suffixlen = strlen( suffix );
+       dnlen = strlen( dn );
+
+       if ( suffixlen > dnlen ) {
+               return( 0 );
+       }
+
+       return( strcasecmp( dn + dnlen - suffixlen, suffix ) == 0 );
+}
+/* end of function: dn_issuffix */
+
diff --git a/contrib/tweb/dn.h b/contrib/tweb/dn.h
new file mode 100644 (file)
index 0000000..fa00fa9
--- /dev/null
@@ -0,0 +1,43 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* dn.h.......                                                              *
+*                                                                          *
+* Function:..Header-Datei fuer TWEB-Software                               *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 24 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 21 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: dn.h,v 1.6 1999/09/10 15:01:16 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _DN_
+#define _DN_
+
+#define DNSEPARATOR(c)  (c == ',' || c == ';')
+#define SEPARATOR(c)    (c == ',' || c == ';' || c == '+')
+#define SPACE(c)        (c == ' ' || c == '\n')
+#define NEEDSESCAPE(c)  (c == '\\' || c == '"')
+#define B4TYPE          0
+#define INTYPE          1
+#define B4EQUAL         2
+#define B4VALUE         3
+#define INVALUE         4
+#define INQUOTEDVALUE   5
+#define B4SEPARATOR     6
+
+#include "dn_exp.h"
+
+#endif /* _DN_ */
diff --git a/contrib/tweb/dn_exp.h b/contrib/tweb/dn_exp.h
new file mode 100644 (file)
index 0000000..8fc9097
--- /dev/null
@@ -0,0 +1,33 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* dn_exp.h...                                                              *
+*                                                                          *
+* Function:..Header-Datei fuer TWEB-Software                               *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 24 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 21 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: dn_exp.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _DN_EXP_
+#define _DN_EXP_
+
+PUBLIC char * dn_normalize();
+PUBLIC char * dn_normalize_case();
+PUBLIC int dn_issuffix();
+
+#endif /* _DN_EXP_ */
diff --git a/contrib/tweb/doc/Presentation/DANTE-01-99.ps b/contrib/tweb/doc/Presentation/DANTE-01-99.ps
new file mode 100644 (file)
index 0000000..1c6f931
--- /dev/null
@@ -0,0 +1,7072 @@
+%!PS-Adobe-3.0
+%XpPrinter-Model: HP LaserJet 4L (C2003) PostScript Cartridge
+%%Creator: Wind/U Xprinter Version 3.1.0 (linux) (Compile Date: Aug 27 1998 18:14:52) (XpDummyUser)
+%%Title: 
+%%CreationDate:Tue Jan 19 09:07:58 1999
+%%DocumentSuppliedResources: (atend)
+%%Pages: (atend)
+%%LanguageLevel: 1
+%%EndComments
+%%BeginProlog
+/XPrinterDict dup 200 dict def load begin
+/bdf{bind def}bind def
+/ldf{load def}bdf
+/m/rmoveto ldf
+/l2/rlineto ldf
+/gs/gsave ldf
+/gr/grestore ldf
+/np/newpath ldf
+/sv/save ldf
+/rs/restore ldf
+/tl/translate ldf
+/mt/matrix ldf
+/l/length ldf
+/z/dict ldf
+/d/def ldf
+/e/exch ldf
+/a/array ldf
+/ac/arc ldf
+/an/arcn ldf
+/b/begin ldf
+/pi/putinterval ldf
+/t/moveto ldf
+/lo/lineto ldf
+/st/stroke ldf
+/p/add ldf
+/s/sub ldf
+/c/mul ldf
+/v/div ldf
+/cp/closepath ldf
+/sl/scale ldf
+/ff/findfont ldf
+/mf/makefont ldf
+/sf/setfont ldf
+/f/fill ldf
+/sw/setlinewidth ldf
+/sc/setlinecap ldf
+/sj/setlinejoin ldf
+/sg/setgray ldf
+/ski/ISOLatin1Encoding where{pop true}{false}ifelse d
+/fcd{ff dup l z b{1 index /FID ne{d}{pop pop}ifelse}forall /Encoding ISOLatin1Encoding d currentdict end}bdf
+/fdf{e definefont pop}bdf
+/sdt 22 z d
+sdt b
+/tpm mt d
+/tpt mt d
+/tps mt d
+/cps
+{/pr2 e cvlit d
+/pr1 e cvlit d
+/npc pr1 l pr2 l p a d
+npc 0 pr1 pi
+npc pr1 l pr2 pi
+npc cvx
+}bdf
+/rmx mt d
+/frs
+{72 0 rmx defaultmatrix dtransform
+/yres e d /xres e d
+xres dup c yres dup c p sqrt
+}bdf
+end
+/sus 
+{sdt b
+/spf e d
+/sag e d 
+/ces e d
+300 ces v sag /spf load
+setscreen
+end
+}bdf
+/spt 18 z d
+spt b
+/bts
+{/ybit e d /xbit e d
+/byv bstr ybit bwd c xbit 8 idiv
+p get d
+/mask 1 7 xbit 8 mod s bitshift d
+byv mask and 0 ne
+}bdf
+end
+/bsf
+{spt b
+/y e d /x e d
+/xix x 1 p 2 v bpx c cvi d
+/yix y 1 p 2 v bpy c cvi d
+xix yix bts
+{/onb onb 1 p d 1}
+{/ofb ofb 1 p d 0}
+ifelse
+end
+}bdf
+/setpattern
+{spt b
+/csz e d
+/agl e d
+/bwd e d
+/bpy e d
+/bpx e d
+/bstr e d
+/onb 0 d /ofb 0 d
+csz agl /bsf load
+sus
+{ }settransfer
+ofb ofb onb p v setgray
+end
+}bdf
+/picstr 500 string d
+/inch{72 c}bdf
+/DP{gs np 0 360 ac cp f gr}bdf
+/DL{gs np t lo st gr}bdf
+/RGB{setrgbcolor}bdf
+/C{gs t show gr}bdf
+
+/ren 12 z d
+/REn
+{ren b
+/nwc e d
+/nwf e d
+/bft e d
+/bfd bft ff d
+/nf bfd maxlength z d
+bfd
+{e dup /FID ne 
+{dup /Encoding eq
+{e dup l a copy
+nf 3 1 roll put}
+{e nf 3 1 roll put}
+ifelse
+}
+{pop pop}
+ifelse
+}forall
+nf /FontName nwf put
+nwc aload pop
+nwc l 2 idiv
+{nf /Encoding get 3 1 roll put}
+repeat
+nwf nf definefont pop
+end
+}d
+/rots{gs t rotate show gr}bdf
+
+%%EndProlog
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<20> 420.24 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 182.64 t 107.04 397.92 lo 741.84 397.92 lo 741.84 182.64 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<446174612d44726976656e205765622d582e3530302d47617465776179204f7065726174696f6e> 138.96 209.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 182.64 t 107.04 397.92 lo 741.84 397.92 lo 741.84 182.64 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<2d20476174657761792d537769746368696e6720616e642044796e616d69632052652d436f6e66696775726174696f6e202d> 126.72 253.44 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 182.64 t 107.04 397.92 lo 741.84 397.92 lo 741.84 182.64 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-Oblique fcd /Helvetica-Oblique-ISO8859-1 fdf}if
+/Helvetica-Oblique-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4b757274205370616e6965722c205a656e7472756d2066fc7220446174656e766572617262656974756e672c20556e69766572736974e4742054fc62696e67656e> 156.96 362.88 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 182.64 t 107.04 397.92 lo 741.84 397.92 lo 741.84 182.64 lo
+cp clip np
+0.000 0.000 1.000 RGB
+/Helvetica-Oblique-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<4b7572742e7370616e696572407a64762e756e692d74756562696e67656e2e6465> 313.68 393.60 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 83.04 482.64 t 402.48 482.64 lo 402.48 525.36 lo 83.04 525.36 lo 83.04 482.64 lo 83.04 482.64 lo eofill st gr
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 2 2
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<32> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<54574542202d20486967686c6967687473> 298.32 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 144.00 t 107.04 429.84 lo 741.84 429.84 lo 741.84 144.00 lo
+cp clip np
+0.000 0.000 0.000 RGB
+%%BeginResource: font StarBats
+%!PS-AdobeFont-1.0: StarBats 001.000\r%%CreationDate: 09.09.98 at 15:50 \r%%VMusage: 1024 36745  \r% Generated by Fontographer 4.1\r% \(c\) Copyright 1998 Star Division GmbH\r% ADL: 917 200 0\r%%EndComments\rFontDirectory/StarBats known{/StarBats findfont dup/UniqueID known{dup\r/UniqueID get 4092170 eq exch/FontType get 1 eq and}{pop false}ifelse\r{save true}{false}ifelse}{false}ifelse\r20 dict begin\r/FontInfo 16 dict dup begin\r  /version (001.000) readonly def\r  /FullName (StarBats) readonly def\r  /FamilyName (StarBats) readonly def\r  /Weight (Medium) readonly def\r  /ItalicAngle 0 def\r  /isFixedPitch false def\r  /UnderlinePosition -133 def\r  /UnderlineThickness 20 def\r  /Notice (\(c\) Copyright 1998 Star Division GmbH) readonly def\r  /em 1000 def\r  /ascent 917 def\r  /descent 200 def\rend readonly def\r/FontName /StarBats def\r/Encoding 256 array\rdup 0/.notdef put\rdup 1/.notdef put\rdup 2/.notdef put\rdup 3/glyph140 put\rdup 4/glyph141 put\rdup 5/ch5 put\rdup 6/ch6 put\rdup 7/.notdef put\rdup 8/.notdef put\rdup 9/.notdef put\rdup 10/.notdef put\rdup 11/.notdef put\rdup 12/.notdef put\rdup 13/.notdef put\rdup 14/.notdef put\rdup 15/.notdef put\rdup 16/.notdef put\rdup 17/.notdef put\rdup 18/.notdef put\rdup 19/.notdef put\rdup 20/.notdef put\rdup 21/.notdef put\rdup 22/.notdef put\rdup 23/.notdef put\rdup 24/.notdef put\rdup 25/.notdef put\rdup 26/.notdef put\rdup 27/.notdef put\rdup 28/.notdef put\rdup 29/.notdef put\rdup 30/.notdef put\rdup 31/.notdef put\rdup 32/space put\rdup 33/exclam put\rdup 34/quotedbl put\rdup 35/numbersign put\rdup 36/dollar put\rdup 37/percent put\rdup 38/ampersand put\rdup 39/quotesingle put\rdup 40/parenleft put\rdup 41/parenright put\rdup 42/asterisk put\rdup 43/plus put\rdup 44/comma put\rdup 45/hyphen put\rdup 46/period put\rdup 47/slash put\rdup 48/zero put\rdup 49/one put\rdup 50/two put\rdup 51/three put\rdup 52/four put\rdup 53/five put\rdup 54/six put\rdup 55/seven put\rdup 56/eight put\rdup 57/nine put\rdup 58/colon put\rdup 59/semicolon put\rdup 60/less put\rdup 61/equal put\rdup 62/greater put\rdup 63/question put\rdup 64/at put\rdup 65/A put\rdup 66/B put\rdup 67/C put\rdup 68/D put\rdup 69/E put\rdup 70/F put\rdup 71/G put\rdup 72/H put\rdup 73/I put\rdup 74/J put\rdup 75/K put\rdup 76/L put\rdup 77/M put\rdup 78/N put\rdup 79/O put\rdup 80/P put\rdup 81/Q put\rdup 82/R put\rdup 83/S put\rdup 84/T put\rdup 85/U put\rdup 86/V put\rdup 87/W put\rdup 88/X put\rdup 89/Y put\rdup 90/Z put\rdup 91/bracketleft put\rdup 92/backslash put\rdup 93/bracketright put\rdup 94/asciicircum put\rdup 95/underscore put\rdup 96/grave put\rdup 97/a put\rdup 98/b put\rdup 99/c put\rdup 100/d put\rdup 101/e put\rdup 102/f put\rdup 103/g put\rdup 104/h put\rdup 105/i put\rdup 106/j put\rdup 107/k put\rdup 108/l put\rdup 109/m put\rdup 110/n put\rdup 111/o put\rdup 112/p put\rdup 113/q put\rdup 114/r put\rdup 115/s put\rdup 116/t put\rdup 117/u put\rdup 118/v put\rdup 119/w put\rdup 120/x put\rdup 121/y put\rdup 122/z put\rdup 123/braceleft put\rdup 124/bar put\rdup 125/braceright put\rdup 126/asciitilde put\rdup 127/.notdef put\rdup 128/Euro put\rdup 129/.notdef put\rdup 130/quotesinglbase put\rdup 131/florin put\rdup 132/quotedblbase put\rdup 133/ellipsis put\rdup 134/.notdef put\rdup 135/daggerdbl put\rdup 136/circumflex put\rdup 137/perthousand put\rdup 138/Scaron put\rdup 139/guilsinglleft put\rdup 140/OE put\rdup 141/.notdef put\rdup 142/.notdef put\rdup 143/.notdef put\rdup 144/.notdef put\rdup 145/quoteleft put\rdup 146/quoteright put\rdup 147/quotedblleft put\rdup 148/quotedblright put\rdup 149/bullet put\rdup 150/endash put\rdup 151/emdash put\rdup 152/.notdef put\rdup 153/trademark put\rdup 154/scaron put\rdup 155/guilsinglright put\rdup 156/oe put\rdup 157/.notdef put\rdup 158/.notdef put\rdup 159/.notdef put\rdup 160/.notdef put\rdup 161/exclamdown put\rdup 162/cent put\rdup 163/sterling put\rdup 164/currency put\rdup 165/yen put\rdup 166/brokenbar put\rdup 167/section put\rdup 168/dieresis put\rdup 169/copyright put\rdup 170/ordfeminine put\rdup 171/guillemotleft put\rdup 172/Tom put\rdup 173/Pete put\rdup 174/registered put\rdup 175/macron put\rdup 176/degree put\rdup 177/plusminus put\rdup 178/twosuperior put\rdup 179/threesuperior put\rdup 180/acute put\rdup 181/mu1 put\rdup 182/paragraph put\rdup 183/middot put\rdup 184/cedilla put\rdup 185/onesuperior put\rdup 186/ordmasculine put\rdup 187/guillemotright put\rdup 188/onequarter put\rdup 189/onehalf put\rdup 190/threequarters put\rdup 191/questiondown put\rdup 192/Agrave put\rdup 193/Aacute put\rdup 194/Acircumflex put\rdup 195/Atilde put\rdup 196/Adieresis put\rdup 197/Aring put\rdup 198/AE put\rdup 199/Ccedilla put\rdup 200/STARling put\rdup 201/Idee put\rdup 202/nbspace put\rdup 203/Edieresis put\rdup 204/Igrave put\rdup 205/Iacute put\rdup 206/Icircumflex put\rdup 207/Idieresis put\rdup 208/Eth put\rdup 209/Ntilde put\rdup 210/Ograve put\rdup 211/Oacute put\rdup 212/Ocircumflex put\rdup 213/Otilde put\rdup 214/Odieresis put\rdup 215/multiply put\rdup 216/Oslash put\rdup 217/Ugrave put\rdup 218/Uacute put\rdup 219/Ucircumflex put\rdup 220/Udieresis put\rdup 221/Yacute put\rdup 222/Thorn put\rdup 223/germandbls put\rdup 224/agrave put\rdup 225/aacute put\rdup 226/acircumflex put\rdup 227/atilde put\rdup 228/adieresis put\rdup 229/aring put\rdup 230/ae put\rdup 231/ccedilla put\rdup 232/egrave put\rdup 233/eacute put\rdup 234/ecircumflex put\rdup 235/edieresis put\rdup 236/igrave put\rdup 237/iacute put\rdup 238/icircumflex put\rdup 239/idieresis put\rdup 240/eth put\rdup 241/ntilde put\rdup 242/ograve put\rdup 243/oacute put\rdup 244/ocircumflex put\rdup 245/otilde put\rdup 246/odieresis put\rdup 247/divide put\rdup 248/oslash put\rdup 249/ugrave put\rdup 250/uacute put\rdup 251/ucircumflex put\rdup 252/udieresis put\rdup 253/yacute put\rdup 254/thorn put\rdup 255/uni20AC put\r readonly def\r/PaintType 0 def\r/FontType 1 def\r/StrokeWidth 0 def\r/FontMatrix[0.001 0 0 0.001 0 0]readonly def\r/UniqueID 4092170 def\r/FontBBox{-12 -210 1083 917}readonly def\rcurrentdict end\rcurrentfile eexec\r
+d8061d93a824650eefe2785f13cd28a8a226cfb0a1a9915b91e00d2c2cb80ac548a1ab21bed4518a56748942842eff6121b01bc269e7837046266cb27dafd3a4fd0344e68245aa98a5f1b5bc9db554ebffb879f1c082989cf6c044b76f4814df51dcd03f9e3397f3c73d94f85771983bd52fbe6ecbcd9a2cbb7b3636cfb819daa5469925fc89a188732d68c6d06c906d183cb4bd495aed0c41fe6b7333ad90a1674478062c8996476573a0cdad62593c86e4741ecab7b8c75a6bf02971dfdc2c5a2e1c8f74ab1e91315c54e72426da3a62dede611d5967201fe8bfaa5a21c612c0b245fa35c6706b7b9aa3f73ce16604e3109770d367fb30fa663aa8d2b246de733d27174a0b818d54c58c3676435d43949eb9e5e335396296bc3f096fc154616c0b723b0b4a100ed45072f371f77f26e02f1dcc41376638097d79af0a4ddbfc37dd6cb60d0d34ea5a7536c655d95549b8a5a269e7e927c3d89f74b88e17973c2e8d64688089d329abe6b1009c0334d57a6dc34f22efdd933023231fa03fc81093ef255a199448f17d8f67dbc57c38b2fa163b8cef97a6f42e74af55319eb81a6fb9de18810ba9e3659a7144b80aa066a9f386de3030fc4985efffd13c0cab7049a09a71dc1dfa21a1540f4289b13dde08c0d3b4a01fd2bcb4e256b398c94036935bc270713a24c51042bac575ed4827e17e5dc2997753fcee0ecaaca582c85518edc0c3dee2851fa4d2581f7b399f07013ca3d1d4702cc27be134cfa8aa1cbfecac76f1b406b5b3126c3b7b60ec34340aac6433997656b3dcc1af6c8036f051edfc109a493243546721683fe5c0e48790848079c74ea0640c3f9c92cdd22fab8af9b5575a5d1d2cea0f1f715505cb02a1e200cbe4ea5563d0475cb13bda929286f9c11eab10ddd676314996954ae3c94bd14f364d5202e6ddd20b1b4c7abec1c061b2d8a1776577387a2f2dc424f56d44e58b96f91f7b871627089498d76bbc6664e1ebc9b26486cb727d4a5d62fe405324ceb0a5dbf51c9619f2913e4dcea44c5bac49d74bd049f28b83955e13f0fc77d998a307b0bb560757b21e4a982b59cd5723d66952b8a7ad0311ee6874842f454046538c475b86983b4b8d9c00e814009235a058f6d5fca9e8339555518ba2b64ee925cf0944deff5c14069a1ee1de2cadafaa6421f495c21c042690b3a7c9e6a5a137ee005240308e63e0b1d4bead90ec607d19c57ecc24c2ea9b8ed4af8e5ec19575ba230c19156ff9b23915a7b50666ec4b655a2946f97c5013cdfc31825f2c1040fb28bb8876b1accb1fc005010e5e5d061651dc9df17b7bb37c495a37df9659962680951290f3f4168dffb294f83b2a3c423526a97451e2504fc0c819f4d263834ef7c8588ea4d68c98eb5e3ee3c2de20a6da219b3256400a7c745059581d33158a505d5bb07c75bda324c2d8fe34eadb98520c7b82838835e92ddd1d89516478cb1ca795324f802e1f7a5547f671588fc3e5b909f5ab9d573bb0766569a36e89586b7410b76867cad6577022e9be567d1a5578361d83b817fb994758c679fcfd6b22c9fa7c6c76f2a72be566e42167247c831f826d9a10e03874b9747783adece88750be1206a07923cd9fe06b677b61c69a7dd9e0f9dc60771ac529f6adaeee9ee6652cdeca5789c7f242266d86f0154a1984402c720adbc3dc79b6eece6d378555d78873844ba1cf057f385e70474132e0bdfabe169a631e07d12fd21f18736013499081e58d72e9cd451df304a5bf52c1f1723a5ec8b7992d8fa3f33d5be97d4c114fd435a94607f8be09812bc1fa4db028644e2fcef5d86ffb947a14993a93185b054a7cd9ad734c62f2d9ce3c0f9e2e8678bae5b92315f60169aa85d4ae22488cfab72b841374ac3f39966b9e126ad64c0307b54085b6e25d51caef51fecae4c5ddbfb5c29b15cc90ec0795123a84d3c31173b49096d617707d9e192da82493ac9884759115c02ba4686ed464d523aad69167e24e5303ac3eb3da0eebcc420fdc256cc26d466f979c8e637344958f02ba9d3a481693fbf13283d7d276af546abf2f2bb4e6c6f835c97e532bd5b40e8b08eea4441e8a9e03021add36c4fe28180ea466082e4fd7facb03f7abd47c929c4e0d84132835e59f8276ac7fddec7755cba924dd1c97e02691f13f2e159b1e358ef2ba347e2298b0b39f5ffdab57daae22d94ba5064abf716c866b64add8e3981b76a77a3a8be0a462594b9e1257e7940b237875e000c0e23a0841a85da6eb5af931dc0ddfe912285d160f12a66ebc8717fd37c13d20cc132218d31680d596ffbbb2f2805fd931c61693bcbe365f0d19c8fea4ff3eceefe09c5e29b7fde3782b8adf4bb1aa7f89ce01fa59d1322a1ccc4d92705e274bdc287312b23ab830968143efe12c8d4ac45e0c72c11f630eb5ae0c835b7f7d32cf261c20f04b7df8e362cb15cf38c531a3988afc8eb957fcee0364049ccc8d8a6935200970293486bb69db1969a2aeb39829cc4bed803e0c266c77b0dffd349ff9ae8f95558a3977775b1bc2dba5be54800a9e9645155315b062d0b5a0491cf90a66e84b581070f30d5796f71e88db0352432e8df588d25c9c9b2dd12b976618551d5625e357737966d9a15fe3cd9d54bc275b6f5993ecfcfbb373c419e2f8ed32fcd56d30db1345987a445ad259e03053244a1ff80c9343538c74845a907b0480f013289cf475df6c989a81aa5ba904a63db328292553fd4fc3a783fb76ee6ae50be4809ea0aaac9a9ba429c9990eb45affca8587972c54fdd677cd14f81404c77e4358212f44826316a927983c968767e7be1c7a36f308b6cab1648780b4f1a568cbb0ea49f6a6352d6ab18d54d442c176037ad16e18a17d88cd8fda7e86895c89368239f0f75f8c26f850316a328c40efcf316d8829ddb0fb69b250e41b94144e0475acadf63e51f27f6ecb6af4ed78ddce68c055b7a1f78ec1174bf9d67f54838da11655980a909ae1b80a2e6282137c75e49d703e6d5b4be616e62b020a8d08efd14912337a75857920f1d3515ab2771d38d8d8f610c9801d0b0c8d3388c75d211ac4e4c0c491d3b70e1bf1b926a6fabf60487613e76e6f779c4aed60929561ed06c676de7d5052f60db62e446ca4e2775b966f74a2ab55466ecac93c65e48d5e6b88080f24534ca63dd1e6781920be3010f3e9ceb771c5509754ebf963de75b4b9c9116ba7f4e21d9d89d2df167d8c5674b2fa61f49f016b4269e602c6e144de4a382fb7f185dcd82942081d6362f335695587d2ed1071a70bb27d51200a1de03763bec6b2c7a86d8f200505c07f25fc6be9c044110607154cb69efcbfce495dc86dc634e20349712d3754ce99a8b33cc59ce272e39f481b729c878399e51976652b4a525d107ebbd809909ec95f07f2012672601eb9ada5e0b3292d68b6ff8d529a2dcd23f7150d77ba5b1a36701d5954d37ee96501f9efa8e037290f6dca8c024ec0a2ced95b8dcbfea0ddc55dac8ffa55e224d33fdae74502f8f0085fdb5d6d031d34a609db4ed63ceeb285f3697049800bd560e31bfdc6862a49da0ff4b4e84bac9f184e08181c7870058559f826977e851f7dde09163b8b3cc82be8103f7baea3072202ffce888f1bbe37cadb748e2a3b3b53cf38b4336a4eadd0afffd76389b1dd9d067888c4e647b07a7643b81fc08a15872f08f6295eb45e7838021253432f2bdfca6c2a85aa70efea06863d3ebfdc555f41abceb6fc1a5f92448e917ae97706dc04adf0b7bc817c1b93d2f924b118fac5fe6053093401a4676c6d7ce7b4ceae1f5c149b1d8d712d32d56bc8430c210a7124e192e387ed9696df38ac2763e3a065c3ae4726afe9c16b07891bf5243c16add2bf494f9ae8b7566d4ee600a7fcc945d4bdd305daf4df51b1c0222e5594c65af003b51549e0e790ef194943d4accef39419ba173d05788ff822d4e3d4fb5a612fb13292aa377e50a44a6953bb793d0c521c2179012a882b74ece2f79723fb75624ae9c446ba358a3effd738ccb59a856f1bb5afe8635e1033936d58da18ea1f7464758e4647ac03552bcd1be22ef9d4c0f4aea0d7d1c91234ac50d5192bda73b0e63a8303ee284009e6f42c0a8671cbac1c02ac67f096cdb67e83a8d3a8b0e2915fe4e498d50a80892a374cf637cbdc145c2a4a16e0449fd300f7f03b9c80b320addb404d3b7388e5473a6502c74a9d614b21f2526b2e4f9fd9c5adca0f01677b57de5a55d60d9c428c6833d7abb14514926e09bba6b07763aad75d0a934b7c44976be43c289fb238aeff7556183515a5c4b085447922adff5498d29e101a60ff02e893ce8fb8d446874914eb3d3009db46a579d14dfe884d22d9ca5bfde436f4bf334c8c8e73cad66d26b9b711b3a2a3ea84d6864945e529bf59d397ed0acca03a3bb32e470c46cd6639cdae83b4e8e6decd2e8574e1b9361e2600bdccd6c9231ddb2b5981f4148984e0d21d2bc7c54fa7b32144192d32a60bb17520e855b14ea6ba31068d4e209a5add8dd6cec44932063adac2280f985cc70099a1fffb3cdc3134604bb8e50ede70ce9db412a309a21a0541662050f545cf6f2fbb39e9106e83d34dd1a7f9f08b66e68052482a68778687aac8b793ca24cf3d258d7991c4d2c0eb760d1b83dec08277bce87bef9883ff7af63a927a509eb44ffdf2f8f2a529baee6c68478a1f8a10c81fc3fe0a88004843f05d15b34d04149508d7b29ff2b11ad5e150269dd78545f0f57ca1752f6197a8539ab3aef587645b5dda3dbf18060d30c3426f2fff04d9bf22f1591762597d72cd6225f01377293696235f084801440fb9590bf6468e73c11d7de5c7c9899d6a84a9bbe18c8238e117ae4e74ce9c087957935630399f186f4712caa2775ee026f1c9f334bfa2ea897f2cef8f6d2f200bb2fd7d9292c056149cb3091d54be657c5efb690dd7290b7f866330d8b64cdb134019ba3c608bebca348fac2ee3891d54ce18d427de0e8270ca0b19b5cb9ab69ff7bfce6b5c6431fc794f1a2ae04975dfca6d865e38a85d0092b339119f43ee8f11f999ff0132145ef65f2786d9dae9c45dff0ff2195bfc604db64e4da4b681dcb6a3e2be4f691bad02abb6347e7ffb00172df452182679d10029a878d14569825c6df61c229e158f92a6a0e0590722313729ecc3c93a9de9f044e62d3abdf500ea46557e90649aeb8cc582bfb6fa71042b330800d50aebe27e1b7605c3aca1f67c4116d93a1d59d7f9a9d7dacb2c949193b0e901291474ed0f6b746c680b337ccc6adcccddfee2ba9e31f588940931c6d697222b14220ece34f97d640f78eafe33d689d8c5e94ba3eaccb197728d58924f1325c5951246898b2477057915ce4caea524151e7f3cb049441ae88014b89fe7730eed66c4161b2e01d608d977d674edd37527433214b40081ec8a262da3f69f07dd54acc3a8dc5058a927bf7ac5d3ff18e0e526cda9eeacc331cfecac11d2bec5872fdd5cff5f7459a42f263304294b139fd7106149b962873b757a2db3ee8e030a8ea3af3366fa5f3226d9f9de3c48dcc0f701ac74385d2b753e655804a834456e17ee576872bb5e9815bd6ab6a4555ce5fdcfd0b1637357424813dfa6443a46200dbcd46f7a15d342c14e5b99c1e53953283d83e81311eb2537162005d2bc0f18b336e33f7190d4cc4ab8a86f596ac2522b6fe3aec0befaf024e35f811a309c8a03734e432ac4695d977d6fc14c93773edfe0eab4b5a0a6d55b4ccd205086b92107a434b119d15f145d0f3511f823e69a4b3777b659555f06116cd99075982c200e36eff85d7931c7b918af5504bb4129cf65c8a33964b3b6fd3b2340fd3737c73f7667632cbf81535b88096e99a5e98ffee00409948eb2b46010a275ffdf345bc0e359ae4c2b6b804a36ec5018db1ddfd43ed28e0982be3dd61a41fc78221bfaf4eea3c94e8819e2d296a355bf61cc29ad69e2baa9caa77f4587be6bccfb178d553bb99bdf52716e6a8e2626505b819cc595f5173d13340fde8dbb4db3313a66348c8cf5fddfe7d7fd04becc8fec0ee1385ce5329088e772f1939fd59e2dce71c2946044fdcd131e06695ebfe5ae6e512640d0ea79492c20880391bffb1b3c9851cfba1b5b16d5860baa2a2b1f4e0a571aa3551cd73256e171c2590687e3596108defc56ca6cefb27095380b0bfff828d897c5f4a1f7710cc1fbe37ce9254c27edb772093e789a7e2a941d676fa8f14edf641dcb06fbd638e74a3764be77ccb7f93b5f961be59a6df0c5305b6ab3a20ead2d3eadd749fff40762a25833c9efbe377d2aae40b18e7785a77f9eb4f05f987ac7572854859f5fc5f56240e94305543baf5df3fb905a1122d20d09d7133923783f4d1e30ce9bc990e1d4989280cdcae75b5a78ff48ec68254373f9a57663255c0d5a18bc78b3cf2002befdf0cbb3cb5e76243b963e16ef7a34a06016dbd728117ed141ce213dae5acc96930ef9320938084dec3f77ee4e595b496648896de03deef6fcf49f6477a04a0b190fa668ecb8dec555db55d7ba7d0151042dd4f205e50f53ca706d93c9ae1b67b51989ad1b3ebb27f2416588397429d2129bfe0d5fbc7888fe0ca49754024224ba6fbd089214122d5c5dfacf7fe314c34581b80fe2f0786f7a70788a1dc27bce9f69daf04f197e9fe3f735a339f6f88067636e23559d1a02cd1d8b70fb07146532a5b404a4491d8650a22ed0f49088e86054e76656f079074ae121f5039c5a128109551c3ad7bfb874de16f639a82f0cae1ba1e26cb21bb8ab0ffd0fdda61da950d00e9a9d319c32757cceb80c07716cecf71f96dc167d760bcb54c8c41387d7fb8b5f884a0f7f53acced99690e1316a8f2005edcce538b3b511a637736a08c932fe9f54e281535c9ebe5716228cef9648813df7f0ce70b5107833eb4025e11f93aa574ca8215ce3dc6a5069f03f22a2224d9d2f8c819714b3b02f32066785f9aaf616afa69a3c031f1d1ece51d541f60d6b8e739b63b0f6472b93e5e34cbca3474b47deec1d72ddf91baaafa42078c177469e8099ef4a80758225c7839a0ba643dc3c88fb01ca0f278f077675f0f3bf3319931f129dbd9ef04dd0daa8cf8bc6573b6b2091b64326a366df67a739f27f8c20f47ea3bea9a9880b0aa3b558c56f6596b0f51b124b78b717336142cc03823f2d75c0ad84c09868cbd0dcfae4ccf37b345a26d5e08b20c36505447042ee2ce81f450a835d7e0b679c0c9eae37ef6982001a8c52708c5db0ec2294a90b9876eb789ab09af859a0a879cc27d2f52dde9e9a6960fca2530244cc26d3a21cb294458d707dbe2441460d79d1783fb334a3d144339bdd635b676a1b260f5969bf089d59a526f56bdcf92bbb2d52cb268ccca6c66e4ceefa57c72cbdf8a4e1a2b57ff356f8fa49db680fdbaa3d4df9f1d6201307a44a9ebef9ab8c893518d71beceba645d6df155f6aa68163f8d66b40c1084b673ac16b287f763d40db303c4c9f9e76a3e8fff77d595e97f7e59e56b02aa8f005d0c6830931892207e25a11520efbce320b99362de47e093fdd48318cef9458ab6b4093d1480ab1424e82695527412d0c5e3c299eac02b67ee503a9d04d31431d172f50666fa59e778dc43ffb7eb3f78324a5cd88601f7109bf3bc03f0256ec90473715c9a626a8488a4ac0403438c7fb97438334506f3718c262c6fb671cc1501e1616281c50c1f1abb0e796b5a989d9419e9146784619689562ee006255b58c5030d4deb7bd4e723d5dddced22c58905adb6a1b319ff10a8610912023c965c87e8b9f50babf746950ca2b356c1a9cc1cb8180a3536b2a639a147f65a8178fbe711c5fffb8fba62069c74e02ee7bb219bde7f581ed080e33ada55e37013823fbe5eaf8f7b774209a75b047e7626b8b82733f525e57792ca6c79bd882c5bfa323fc5ed98227c892ff958a359fcf654cb8facb6827d717a899ab9b4d2093e7a3762ba0c9f7ad55124173a5bb29f9f8769484f698dc8f8b394816dd74eff3b1a7dbdf16096bd0ad1b5bd409d56783b6d418631be43d241d6b834e1e8107bd9e296f9aa43e90ef753d6ad527875f230f6b1d3914692840fd51e8048ef5ecc8e7d2da90645c8e0acbdb3803d677cb07714a5fbaf0caa48234e6abfd0cc1be8a80ea7e956ec40a54ce712c979d9d108c28566d3c71c93c25fd7c202c637aa06f1baa00ed6262f87062cbc03e7722983a7c87645ad8d6e0df84112139cd220b03e3b874dea9b9705efa254db06927ab7951eb72ea84b253e0bb877b77fb1810b078ba9f20280d7e85fd9d134ee7166cb1cd51525a5bde7cf96b26569af11b40dbf5b4b25a662c9e14dc084cc349bf451cc976d1de3ef735d001c18d7e6027fdba88d29016ba395ab7f6b1d232151acca1ee234a287c2d7843223db3df6e3e5325a9fc82d92b0baa4a28fc927a3c3d307f7a7ca1ec7a54e8b4a56c177aedb633425bc7676a10c0c2d51b5555f4757c2c9908cf39eee8f85913216c5df40fc6a04dc460e99f55844700b4e02ef7a81ddf4bfa798e5ea327d2c66db67c608afb6ea5753ade25c620d52a5ff2c1d43385737d41e7e6cc645b1f9dffacdc0e8cf72a9128abd66cfe77f2c273e7efb2c6d3ddf4848a023911b7287797cb7a3baff8df5f4d8baf2d30d8ef3daa330fe4728f2fc405bf82b6360d1c9f78d17fe13bad721756ec2bba578702ab8a41c094b22a2ea393e9d4d597e5d0c2f12ab5f21d4546ac61e0b96ad5bc47586bd42edd8caf964cd2b997e0bd816ffd593d5481a8ab543384f8090d7cc0d9d4dba9001992366bbd61949f2b33bb6633f45554e879ec6399f11a13be5d195c927f9e4fb503c2f7f1af69725add00166a3c6f0b72230416d09687ac6109eb06d16b8321ab293cc112cccae7bd8233a6206b814694eb0057b708a76f7c793115dbd09b6b6808cddd0dccbc2a20c5abd02a91f0846ac0856a5cf7be1319057e48631937a3bfff2d24f0fecb55e929c1c7d8dfddf2fb892926e20c9fe4a84bc1d9dfd203d438a7f989ba23836bd55b1089bcaadbbbf19e8cf001f75059a1dc3daace5ef08b0b55231f3b63ccbcb50805601c86e10e48f90dbae123b55d421df8301a9c67f4cdead045d1ace302b93f9337ada9ed3ea36369cf35577e868383d69cd425ece04e0cdc1940b296c35e1314d837d6fa900d661eed125ada136ae005179a03494e23a245d96e60cbd7a04f9503c227e835e58935e28bdba5446128f0db08dcd9b85049c5c67e357a3a511f37a71df23c25f971df40b9982b1b5ab845bd4870fbcdf4ea319afa2e225dcbe3b4b06b73429467ab402aeb48e3b661a0355cdeefdb754d43b66d1b576a1ec93994587b16fef1d493d53263ba10fae3dd01736b479e33dcf87dd9af58b353bc55b8a5382aff065773ca8e932d8e55a80537dc04193176a1c38082e3d4fbc38ffbac68bfcbd80ea1682b79961ca070d3f7938571303267b2be5afc70f196383a01fabd8952db19f7c5921fd66ef6f44523adb1bb09ed0cd03c14b8fa91b088ecc5152d6e288f2f388b5870733b489081581fcdc2e1483d3a2dd9b1bfabe1732b2ae37041d49727a2bde007820f328cc2118b610793e6a6996e1f336a061eef6b61120049fd0b9f0847409cb3a8ab404c563c1769de2660b073dcb30bb916f3679b5819958ce2f5330634e2361cff5c0915861ec791b0dedf34a845103f7e1041a366e6109b88bcdfea2e0d0d260f16717d67e20c9a0b624f15f1f05339a408dbc7fa3b8395895bf50691bbeaccbfe69bc22e136a37fb9d074d668eaaa2f98af8ee35119d46af0dd9939462cfd2ddeb85792ca7d38d61e2c5109d2c91fc8232503900396ae6a85b7a88c80136699e77c0d7408eb88538cc544a3db250e2bcccbfa8076d70b026d46cefa250c128f8ab95d1ed9f028d56b01489d81da013201747b80513f318b84fca9dd1c4d65f36a82d09d847d550e1854341338456714e0a93424e6146e34994f84cc6bee325ae41d716920dcc0bfec62368546c901a8d43bf94c9bd2cb56283888ca54b758135fbff776c9fa98d50271b172889414b7e948180c03700d2cf3ebf390f0f9c8985900a76be9171f7439c60e18a0db5a46983722ff1489f77d24f2112b9035e65cfd10fe4c560426e464b6759ae5f24116d16f9a3167eadd85389114535f44f8054d463c1b8bab08779d40b74ee854aa6d652aaf40c30d63622eda14aacdbc002c0891abcc764b676a3b049deaf49d6789c7f9cb12bb6f0d1619548bc12b6df69c98a4af5b085c76966b116d6a2cffe4a00733efe59a473985d5602319fab0f04dc3a55be53e9c87726d6ace09dd8343e3e111858a3ae45b35de08b1730fc628265f0afcd3924b9c143450128aaf68f41fd5bd4aedfaa9411bd33032a81405dc45005c62b682112ce0952e1926a47571a8790d639580797e33f991aa9c0b7178448591f044dc794e31acd413e6ec84b3ec0ac0df66e08e9a89727f91620f3f18f9238ada2abf4557d72553f01bebdf62bdf5742d25b47def93114918c643aa2bf8761441ba5e6699760f9370b5c29545606f6003e4c6e4725dbe4078b416022b20c1d2aa30d0dcbb724783777fcae6d2487bb793e9435218f93573064f47408d08a9c39bc44caa91c24177e8283e59cb9be2c46c5329b150478beed8c6e1e35bf56c3becbcadaef963bbc70128a1518c635420921fb37e2252910e270692e8bd641832740d67f2174ff3171ac73c23512bb0682a305899af28fce475f399ffcb310dd96cd469fbbb7629fbceccfc497fc2e469a14943fbd5c4d24c8c89b66f6638daa38cbf9dcb49dcf016d768acdf758356834503afa00b7f5c8116e147c5397c2aa8ec8a241bb2a5dcfd45627821a79dee1ad9b162796b53c59e3938c94a2a531b737b7d108b9f1f42a2164027e7d3922858aa7931dc0f7e0ec8e0fc30c27d4722a4d083115c916da5976680da42e3a7fdbcb8084abde4d1f95f62a2291847c4358cfe83b13b9ec2f1378f75f787b2b573a027b24e9eb8a47188be809666df8772e43672f910eeb1c23355987358a1bf34c3a88c2647a46eb85c1429e2e5123acfce3504e0ccf4b89e9b3de548e2bc16b8e765bb53568070a17b23aee93b0988b67e10dca6129f19083a22e950a6beaffbf958a232d2b40a7966f96d8d6c1d30d4e9d42ee28dbcf0bfde533a8b5c07c32c90c634bbb90471c53658d596fd066db06cf96e76f5563b2dbf17c284fb88a7e389b9340cb17c0707caee7791234d4b9cdc0406a59ad5aa3ebe06c7ac21851139171b188bbe7b43422e3847e30014dc2f4966126c2d23e1d54d0db34fb2f415347f14ccdb4f533d2f4ccfeae45f21b027cda966933daa5732464d7e125f32b05447fe1d15170654b53a5fc3ee1d2d8427096d1f71f2bfa3e240740c879ab752f0b14d1d17fd880f05d65ff64a05bc08f69d97fb63dd78346b9ca038d79764cabd013d57fb3506d4b0ccef1c92bbd704aaba9cb912e6034ec9ab77210531c9a1266c272ce3261dde19b9a574fe5a7a031416011100ef594396adaed9f884d18173f0fbf256e47d5c57a47864a3d592c2324c39bb6b9f8cd770e23e5884fbfc119eace855f4f21356a57f912c9e27fcd292534cf2ce0e0490aca08b4df6a3faa614239252279fd2c3df91e054129e1ba23fd9b7a90ed0cbc1f9f8790ebb11bec7b0b07a228054e1f8bb4241ab3a66bb6a224bafa455ebf835e5cc1b0f7701e2e64190091a577dd835afc77e72f3970721e1b6fd64ed65abe1b7376eb58e3273254b2da264df7a97286ac43f1c55f1b50710f54cf02da4023260084aa143dff539c5c7d5951767d0ca6b48d5ae8dcfd1727774ad1c5e7273c2aa5076c0a0fa3ff8f1bdd088fbfc17040808f3bbaa83a228b573694aa171d4fcdf13185e0a010788698eba537240a9ee729d7af975b4a8637901fa3aa401cee44a0940b4378ec67b101784d07fea844a50c542fe2a3e01bda791c2ba0ea9879bb298b7883e1b8ee13a88f9dd3b28813baed3f97c29bc8b9b2a0bdfd03df29f826498abe20f8bb7ef6be2930377c56430b7b0ffafa4193998c32fb12ab1ff63695a3201e227698fa8fcdb065c9c3a82d2f0b8a78ddc9afd5a1c5b135b019c22a46d8401559149293420d91aa98397741e9cf6bd30134bd8b5f3c5a1889e5cdb61aeb0f8a052417c5dcc3eda52fd90b2a8c2ade1a0cba31ccc88a78e1573f68ec6104fab6c417c631e90bb9ee10daba4cc047ce30b2eb735ec694521b7a87edf3e15fbacc941269090845894eacc56321d38ebd3bf3bdcffe80e3b21e4683736c81a61ced165e3a2fa10b969ddfa1f55d340612e7550144aa43868d2ce06491f2e5e089b1fb3880c17b6040343b795832e1638791ab2d12b1df0ae253aa1b3e9fe01bb06f7f306c7468bdb397cf4a9977caeb0a3c95adcceb5161f95c985b08d5d703bdd011d2d4a38f16795b54058fa2183ce076cff0762b3ebf56d8d8d0fafdd508449a2f5b0a8692eabfa509dcd0b38f09f4f99e56a0044c61c067a107857dac52e1a364ea053dcb290a7cc1c78420bf502fcd56c804c8729871aae4a4752eda8c1f78de3419afae90eccdc7572a00deb5e1a90d1b8676ac638f011b18cf42c99264d350b77a64a09c433a470f3a2ea988348f59abaa12a1384b0558890e955f1f385c05c740a0b44bb51e9cddd91bdc46c8804eca94cbf9e0fb0c18b770b70f81fe5c9c6554b3a781b22665de565d08fe0b3bf6a57943888d387c19c296827e60eb6b81685016bd1b1c8d95b29eb8c335fd76b208dbd5054b22e1fc0ab4743f7b95d623ca64c9f9afd5285978bc5635a54a70aa16e736372ed027e9518a4d0d0f9951996b210830e6d46ce43272dd0923483f986349321b2184555b6a6573bced5fc778d682085d1970f05cdbe85c936a4634c9821776b4ca2e8dbadf3715228a73c71aaa271ad02bdd76a00aca5bbd2036ef7bf949814e76561a22c2f2ebcc43c7f4af62f5a40e2df2ba612e77adaf6715e1c980aec44b1164ea20020dcb5d9fb7072052e733a0a5b69d175ba8cf48b780b371575e490571e05b3fbff92f1e0fb87abfb18f4f81c8838d5bb155942adcf8911fc3926a22d60bc9037d8eb026ea975c00937d79432be5e791ff1265b396443813020ad11f0e0ee66bcc4d68aca9ebc2b4b8aff28de824007d9d9d00a12ee894e55c565f957f5f0cff21e1219c0badbc99de37c17efaabbbdfa903ca892d5a99a7201813a2ca9cbf7b5d19d779c82af7a1be51cce30ff3820448d2e10b39154573358bb6376ce5413267f6de7d7cfcb8d4d9aeed7a0f6648834b1452c58f397ea28dba8cadd4ef29382d757b78649c6436aa3e38505e1543fad8d22a415f8c0b6afa7bf16cbe0aa85eb9042f0757c8f3ce4e0d432b2b0a328ab69529c5f8bf8da11b0b354858df07e4644aeda913eaec05fdc24b95f6f4307741897662f347ff5785bcb06c0aca0ea708cfee767f385962de34b05f897242256c1eaf5fd9382fa9f07c3b2acc2d0193cc7688fa71448b4374cc3805cec6e7b503a693be2438fb03037d7a70088dc9fe10ac37c84d29c8b5f04648bc23c998872af1df21a88cee43d52ab580248f6d11c0896d25c4ec8068afc138518f52a23c9c8ae8dfba103cc49368a2ba7a6111a8d0e154d007cecd32d9a71c3341ee238d7664d39a263ce2d5efefe4065c1654c4996e5eb10397d78ab6ad8155ab5c815707655d2a85a00187f8ed16ca19f0fbc8c116417420666e9edabb192cb81fc6e2a4fdf00bcbe0ab582a63de69af3d7e7c6ec7f23c09f02a81a221ca2d2edaa751bfd3949ecc3e81d6f518453b47911b0aa13ff53dd8a4af4b6d8f40cf4ed2f5c3e700749aa3211aab791b9e9e899b4e53f3cf1d1c62bbdc06ae2ac394be1a9694858919da321123184a8a07d01e084655b974e8ae6919709ffcc4826f62b6a5dd420b784eb881ae6e682b292d2e575a28eec33e21afe2fe17e024829ed46bb4babce2e65d97a656feae5f5bcd3f10312a5a102bac3e502a468c382349d47b6e7fc4435a8c56d61ca2c33d93ded9f2165c1f640cd23b0f36e64adfd4c5afcba0fe8cab87ba2040efc0c2f00d3fbab933303b1c34f15a60158e5ebf5c82ed18c84c54babe8e1e4910921d3cf829cad909acef813f174ea65802614fb567944b14630d1e4b063c49637e7110a2ca6de4f34935866b3ff0c3643014aba7f8ce5b2701abc1e0f9caa048e7d8fb937bff1c0319a1de8f126a16740d7f0a8833b60b56864f98ea428e2f105ceff6dd30a16bd24da9f75dea0f4ce864bd44bc52b73057527b73f35a7f9e7bfdde6435e68fdd781e82b69b22c09b139b35b5a47a385ecf05cbf2152cb5c686616f81585bafa01d067a5a086cee61113870dfa9bda1b2eb1975403b994e4669b30bd5354784b1c5126ea7313e3230fbab806e8cc7411149ac52029430ce0be92453dd7cb39026ef26451d2f230392670bdc181a0d0b24267d08861c5e5e0d00d85b84a0873c02f678f2522eb8bdb04c2624256e79396404f475be988e4ccdca00ff9c4aa86cc48ac5f05d2ff1ae536c5f576d719862d44049edeb7d25c2e78e328bff60bc1f09db639c10486d65a8da9638080ab92b3c9af7799a8149cc771857f3d36a495fd7e58236beccd8ecb68aa4fdd1f8b3fc21796e7327e0eb730e0cf78567e40a8c0842dc3a9f7451f347af2375ef47b560bf6f9cdc8e682ae9574b9d7c9cb4c764ee84a22303a35b49568d8dc89f74c0447b0f263ec71e4acc6de6e6116085b7edbb61ca4b198e2af4dba714c3fe6b9c821ca1880eb1b896b01d086e80a43ddc9619789c75ca44f8dc9d4013ed4d10c50976201e6f020d6993d42fc902b299000581b04d1db1a4c548a774fff638bccb298f45bd0a30ac11a107e6b9042c41634732855c7431610456d2d163129166cf90feb8df5a72ad9ca31a8613ca3df539f599996904716878028bd884b1a8d75fd0d3fcc6dd8e007f6f9761ba55a00fa6799b6a3ea67a6a55ff8843cfda811582ef1b553b27c05331aae09b5a46aab96566568153afaebb7b4ae5e71f7cfa6fe08aaa52aea18d1551068e25942f623c4b8e8a56f46e352cafe4885dcb1eb19c458580d2049ffd77af8380ff452acf5ab88fd52d7ef112c29ff6464e62465398fafd06ef81bd3fc2b4feecc6f45f0146c96d4a7c0f90e861a1d433c5deac14a019f50511d6ae9f363952c0ba815bbb3774c97c16038e82e39b76bd15f58f6c693a973d1cfcfdfd65ff61efd3d6ded93c3aef8a715097e97d24ddc94ba972fdd68c732e1a9001f3fcc1a71f1f9fcc1b98637899fdb949c281d858130712d5d5408f0208d62f5cd7f81dda2649edca15790c87cd4e24ba48a7ae328822f5a21e57f6fc5a6fcc71d532ca6817f6eea89f76b60e4fc7bd243c2d2163b46ec46ae4be40764f95d1a51efe6f6d8274b668c50cf1de75ca2b4791dbca7c9232d147d568cfeba0b44caf8154bd09fe8a55a8bf1bb1afa95226a827167b13f33b924ca637182b0bac8b56e03327986568016841bd25cfc769000a7c746b2d930d291ea94f371563b92535003c4bec0bea1b134915286a1665b643bd011015ef04ac9d5abd487c0c4d3c6b20a00646b476e518fc0b008960148a123365cb40be362b3b1694a8d5c05d23b018370f616496a52c2cd25021c3795baf897f812f62a5a5721ac8170e79b49cdf906bf71c83af3c445a82a9b0979506e7df0fff03405f717f51c69c995d11456b03cd8bf9395d33fbb127e4cf9d8fc8411a26d42617ff2d64e886ba9fe5c7d5b85b43fc4faf88e7b4eba7145234769d58d53a5c07d1468693b0f93bac6e2cf5a931b11506f556484824d227e448c0a3805f2217f136c1a7d56f3421588e286adec32d32422b95ce8fd81eda1c3e9beed20f03cbe487fdf2d65f59add2bce47cb5f225b2c6c09100225b4276d3cb5b6792be4b8f0489bb750f1188f371880930d79cca6b09b2e3f303f766081097bfbc5e538d3cd4ebf27befc9132225dd7428d444c764860a262e95221f0f1fe57f5ef3e4432d2be9b3c9954a88e58cb329ce9cd37f4fc8494ad1cef800a7bba8d2ce486f7ebd7a5bc9dc73458bda9e4c46c6297469cb8d4e3877ea8db014c04ebd313c6b1ab74abb69b03334d562422a6529b8e68f4262dd3ff05acf1c6d0074d35e4e977c665a26f86d6bae2c4d64114ecfb334c4d575adab7905729ecc6345e3726d7f2c361ab9d75de26315cfeeafcba9bff88c0ce812554b1c6ab0c5765c5618f1bd8dcde547b86af905406ea216e4eb454e59a835fd9648dc5c8c9da88d7a753a2516b50d93e7226868bd0c4c6c2eafa7a0696a8ac2f0f3e6958efc1e6504032b42962ba6eb3c5bf856cbc6bb090d481489c42a8e6d5721b6cc02b34d6650157752126de0cac4c31b7b073e2d6d546476682be55d764f5bb3154d70dfa9244a6fe5580db958e4a766f95a61987102d67707838b177d10d116ad56368c48e815b30fef5fd6554acfc0d9e64d3c4f6b8e9b8ef6af2e09c6126a92f0865045cf97c94070d2fa013be48df5e50bbadd9062fb6183b147f7dede8b571826f81d546abddf5de4f95a97bb75200ef5dec4abef4950b587763db4fcd61017a457c00230cb8aec3bd775980ba70362b6e8d064f81062eabc6149c115feca46efab3b703e76a9241c72f6b6810adda98e1baf07d6a7d8189f6ec869b54941c40080a91980fb827c61c1f7399539387fbec2d1d46a54b1f518859b3a385ca098b86039bba25d2e49b7968281e3e1c3e5c48f2012680d81ccedf131a8c8891b4134bdcfc70854fc7787d03671c9e55185793ff6926ae12f1dfe8cf246fcd33d88d159842e8dfc7c257836c98752b7152039eecefadd80ff76e816146635ed2d36fbcce101eee7daf1515676b9a2b203e1cfc8859d128852e25f9cf924c16d4a47272e495645a6dfde91cfeb39f4e6a1613a901e2bab7c975c885f6424b617475aceb396d0d3da14c102a69987f66f38599c60210dcebeddd8bbc80aefadb225df56b7f48d1ab0a8c92584a41b9fa726a7de8620cd32472c1b89ee1cd0e3da8b595f98672343417f766bd8d9c52f3cc1a9bd6e1c8c1e588c023ac6e5355e68aec6bcc303577faa7bff293265f9506c6107432145deedef7b254d5890c755a39f5b3aee4364373a931e98d5ec011d247fa9ef17a68b2df72810929a628f6ae634f4427c1538dd02e1c9962f33273cb6add06c81d6258de794f09700a9c8b2b6c3a30eeb00ece206d70dca75beff10e9619d80bf0a7d93f24cc82b33640aa992945eac34fff30584801e2ca0fde10854ec1c60cc5c4bf08753009063e7efe7e07a94cce2de1d2add68f2abf5e6fedeb161beb5cbac9ad02c043d3d157acf018751e1140776a7f32d71f34c05cbcdc9c08a7c7a03f596dd7164540566fc54fc1fdc2b23b14f002eff9066b55e30040ff5ac54b8fb6d9d643f939aca40e5005f1d5972feafcaa34f2a72d6ee03ed74fa5e70faa11ad4e8ad2d0f788900aba49c29090a73b3432d9ab5d933c115abe4718cc9e2a2d770e9cdc735ad5991455ee0496b0ef2465e39267af0e36c30da7f3ace53cf3f6010679001e39f6e2a55da65870e9793b447b418ea1e519dca3c2bf0e1d0b0b07ad96a0708f428173694f70a113c0a0f79b3251914d7f8af58d59d6e198bdd6155cc3a4468be06e0af9a1c94c488c9fc6b44e759e43695c0873c1415fbf56c065a3ed585a790bf38784ff3cd7baf3f4b22533d735684bbde582438d213bae7dffaf897289cd0052d6788718be4e3b7c071d3c6c7b75f6e0ff3437e48217e179e35db0f088e80c8aea5749c71fec4985d00647877c9db4a55b51f07198c232adae969c821be6ee6c2b1ebdadb00a8916b1f93b1724775ba9efb421df723d54cf22caeeaa1b6cc7567a4279647a6e099cfe285cb30cea5a1019f43cca22765a15759f20dd681057a0832833c15c54cb1e3f0196aff51abc2b0ccdf37edab8b536c2a4bb072293224e9d4e83ed427b8ab2b92f52a3fa6bc28269618922a022f67f778779bbd3d164aed6747c9639f1628a6643f47dee03112facf7431bfa1954ab2d58c7b02ee380b86bec76fb52093fa5419c17f20b123ef0b0b5c0efded93f18e2c0aef25c1665c3f91a3f7faf4dae9cbd84efd9ec0a5ac4521051118c1e28dc3282be83918c9b23e06363782ad6d6e99f69a016153f70845309cb9d8e85d0ef65aabb02b0648665ae39d5ca7ae9c4de2cb940ad8e9b5e0e59ebf2298c6e16fe35886fbbeecc719f000d9c9764f3f90f66c8f9a243bb25bf84ff7cafb76be8418da346319798866bda42213d5acf00d836b2a0487b7fef2fed4cddf10633bc7f2fc2c0e7e7c8785b9bc1eee0d2d5ba42fafd5360f9c84c1a9fcf8a76ad2916c31d66257c39a760621cd0ae7b4189e051036acd5aaded0acf934fef24fe71a14cadf03afd4b7c1752e0c2890930d3f74b2674bd6135555911face869062ba346fb8bfc45d09f224e69273d4d00d5451ba213c798811eac1b8fdbe4631313aa8e35ab728a1bb9db3c806c46db222980828ecc596b8a081368d73f184401ade2b7f6debae497ef70b13d2aba139f22f233b4299ebec79ec32f868786c60171f0633ba142938699a702eb57a26d9d6b2e955a90f1020e798b3903e9d9dd8f8c98888081174469697170c38d5737a58c8258c8a9361d270357e51b67011ebd39578f6963f18bd050d014b592dc375e006cd02405623bb724b1dade6b3cc632db58ea103ca4a3d939dee5df3307dcbbb3e3d0079fe70c6acfa53430f31075b1ce444454ab8208bc4dd2b71d3d8dec8bc4d49797d2bb3f6b35338e9f1100b6c079f327a639e33cc262fad9b18fb3746829af4c08ad4a84baf08f6cd31070997c6d4b78fce290807a05914db726d20735e0e7058f73856aba4dc8642c0fd52314e856f32e5d0dc7edb7fcf7c5d04e2fea3af94ebff28fa8e886d756049f0e8a4c2d22c94866366ab8b0350e1bab7094ed1337ce3002463e49fc894ccbfd05f133ab0500da55ee616f23b36a748c528ee8e2b792eaf869e606de86d3eb0a7822b7bcef21c010695c05adf371a88b0b36981910ce1317560bf020004077dba0bb55f26249beaa36e7da60d783cf89345b38e3c1b5928b9dcb5a677ec98cd4acdcf960d3ffd40e86c6fa43ffc198c2bb1ba99fc5fed92714591730fbc7a64ab5ef06e18b5f18bd37fa9c3d954239d6dcbba27c3081eb7944d53428bdfa189a83db26d864dfb4bd729a2ea41ec866b8814d8a0664f0dbfaad60dd54ec7c61358ebc416a6bf798fc65c408e48c785e9a0746548fa593858cdd067ae1e0b5a35e49a338dffb1aaba512f5fda377b8f3f4aa6c76f2d33a6d4fa73169a9a2cddbe44b49075efccb37acd99774e63769ae150647f354f0b4b93ff3028c66de35f1d715146cf5d5c1a854b45bb38a5fa45aa211f988b4c9daf94f61ceafbd989d168439c63b388672d2b0bf170b037e5c38e89df56f80d7c6645d7c045f4118fc79b7c667e0072500d627eac7bd3a17614934e238c2f575f4a978fd53246da9d3df02a28b9291cc09a71361b010d1605e86f4f58298cec9be2f7e17aedcecd5d87d7302b2290f1313eff056b100ff9890dd989f495182e2532c691d96aa97dbb2ce6481a0f76b4e26fcd97a02996c39347f90aadad5c4a65e62f9ba6f37fea8df342d5c6cdda448bbe7dfc4a461fa8cbe1c2dc0a78abcaa67129b998e6f9a913a6e7c84e36b936f4db32f000d06bcfe8ae2d5fac04cf45bf3fd3f117bb0b3da685e109a82f200a1e0d7f8522332e5524a3fbc6e864a86f9fbe30558b3263847d890afc1b64e835e1526ebf69d743a13717163fad0f9e058816a176051dac15dd0b7e2f0ece4d367abdb72a339898575595bad4acc3b46b597db68a5b6141f850d243fbe0b3cc113bf7eb27fe4359ddfc4ff3ef16bc7acaa0f3524f310679c03333d3fcaaf2e7507ba98f8dd1b770f36e426250b1ff8a9d4bc25c463ba8a7630a582aea3252e0ec28d656063d6177f74b1c88d457bf9059895e570cecdd6fa724d2015eca9c76ddae2798f82a181582723d0bd2fe875792e22bbd67b111812ef40703d6186261d6be2747c72746960fab45840f4ff6907949f20902b065fdee98d2c13ba04152bbc70eb415b14e172b028771339fb0ca708bf580bd2fb6a6d6efc0990ba5d213fa95f2efdd8b1c1b699841b8e154451c5de23871b54be129af8e3043ec5780cc395f325d33c4d932a30171ad6c362281b895db4b604d1d097b8f4162bca2f6da265e7a2d1130043a9d21c95effcca1ef06d47c6bbb7860392e5b77d17706b5accad18e8bd19ee8ab2e950a5d8f6789119a4dcb02ce64ad5fd29879e948be85c8c35669a06b2fef4fc27ad44a3a5cffff063f9268ba3b8c54a777bb750eac7e3f3ee767a4eeacb1b7019d3eac82fe5f943bd042063df081da663ad14e7f4661e550e495f413002a6d3eab63e159baaeb60fb7766baabab0d22b82221bc37ed6ca672ad60102c15d040e6085a1f4fe67bcf63da0a15205892a04dad9b3ea918adf24d6479fd16e935badebd0aeae1cb6d505ffc29abfff2708db39d1ff6420288b3b779d291e3ac4b944512eca4f63f4e1069281a089d91d3363d15975ffdd1b103e4e2c163bbeb915a5d08454857a9d29d24b72a7e7df6e3a7e90ed517abc95a448aa0179959285247f17cc8d0532fb13738a6a21738ebec71e2e68c55d8a8b77d456b385408650e627970ef13765744f4a72e4990912186a403f71bf2a9b8ac7211a0499266466c65de65157d36302cde084d348ba46da3efc430677bb5b34f75f39f16bc710dbe9c4a4869cc6e820ffc59239b1049720bc24f5e59395f0f0f153bdbf207df37311e0d85db2906f70645c876c000583812026239a535cc06a4a6c2201b19560bf574825662aaea2dfcfb3551752e89459e4082e9196dfbe1251fdb94b9f997689be8e8609d4d78fade40844bbad5caff8a07376bd83a13141c14d0ce0eb0a9b2e621cd7e031660970aa4be5f7dcb5d15c2bd2ede463c6fb2bb6bc1abcfcd7a1af96f1ae98ae81d315af3713d000ab889760c12443ac5fa79a48fafb39bef31b3c3b9c636927e868259e64ee02f2f9a5ba0b9f1c4b2a9e7cb48beb319433419798210d720f6879e4cefe84130bcaf22c1e270f3e7262a578ced12348bfacc7ee33573d2916ea63ae14659f467dd8e5f72115537fecc1406e977438fa47375d11d5327cf409aa1ec22b0d4905084e18135917ce073aa8bdbf4d9057bb2e7ae21cd46342745b6c1a43631a5a25baf33e59e461339e402f29d787463c8d5ac2a889e7d740b7baaa588024c683aef08e721ae1f880966e35e8288b4724d97f6feaa0d812a9e876d10c7c8c222742ed14764b183b66100f3644c98ee165abe1f36a2395279ac1cba57258cc5a26aa5520a16d77f075214e439b6eecf9791cf735066b66cf71442b377775018c9ab44312fb5a40c4833d198a2cfede24b5f8bf7e4231c62c5f33669a2ae631b3a116af83acc02b72e05819f01a5e1f0492b5b11ee1f3a73d8bd473bef885cf88b2e8e35189bbc8ae8c261521a0000cd0bebee7295e8d35df1cd49f078e68993fd10373a53eba652a3f4be4016b27961e93935a059a321c20970e694c4678813216632a684de2ba44885592672cf46e54c9ff27d01b29676ec1c058628ac1e7cb063885c6f6e428195a37698c7f1941c3066480ef3d4c8e1b601b6b65c61b21c10bb3d84d09f7e1eeb38b7c94d1fc658c57106b39cfcad009e4e4b93c6d969b0b7ee231234cc1383e71623de0c1930db8a8dbf266df0e2d924da51d9f49e836b82d2ce0bb30f50bffad57cb960f448965a23a6057140f7da0b5e29caa6f95025027be799a52fcc906cfd6f55cc96e712e11ba2bdfefd3ef150f1f04f6d8de5d7f5f9f9262ffd4c0509078cfeffc27d9bacdcbd99cfea305c080c296d6699654e909a3f8b05ec63ed6bf1c01f9b1b1ebcd5c3d34f8d5e8a5d3386626297e31f510a7dbf67751afc4f77effede7186e0ac5a05c4cc7bbaa0ca610433f49bc9518f1ab48049c1dc8e7ab9ac646e024225326431294d5335d627c3a6e9e8a06d8fbda1720dfd868c071682118c570782845edb082de727983c8e4be4aa9196046dd5a92f7e3e9a3d993613c76af2ed052681ad82d8446aecfbd169b3a659d27f0b012c45b9fd2d5b022492fb34176720daa6af6b61d245cdd44a017fcb0d82b4bc34d8c14d8c815b75616a4b8a0825658e903767625b4514c8ecb6bca7e3cf28d065a4b18456ee149ee611f6a6ed9fc8060a06b0f0a6e3de41e7d4628e915808b939e901cd0e48c11deb612f94b1eb4d589df95e2b19077aaff56d57afa46add91f6274ca2117fdf4ec9ad15f2ce0eddcadaddeb39117da645bc127188f7596ca6c7ec46914c17968e3c2c976a4d71f7f8e853a558d6f09cd504e0475641389dc5811d424893cbc25778b3f9ffe28d83db243f69d7fde1fc646d6726b7ed9ba058a2a69b0a368da3d7da417d71552e231c3334b7b37884f84d831e2952e80b10b205eb9b5c02697e110e3cbaecf4e5af641335a6f8c4d00e8d2862717d2164e4ef64ca969d66b23cdf3bf06f801fef9553859094bbc872153589e8153a49c233294fdffd46656c1304642139fecd39fbb08abd4b8730169b9615d4809910dbf0a2ccb1fa8d0c38c950265c77fc4904f97c11c5e59b9f92bc653e67bbb8ec57e1cb7111dbba62ee56eaf48210af4f5f238490a4aec16c6c60fb4d968915a5a6fb7e6767111a6dca6e279498aa016965c58939dc65f55863d7c21b6885c6c360b46772571acdd7b3eebfbeea2a681e8e10e4ea4d95e259a48bb53059650c9914c768f1b9cdc3998558b5c3fb2bb4a643c85cf4ac4582d554fa71a40235700747589a8f837ee85a9c66d18bb3d010bd28f47505c45bf7d61822152e6acd38b3103115e3f4f4839d9ed1fdc3a9abbdb8885274ebeef30278964b4833509fe21a75875b7a1e59aa1f293c9ebb12e2f8f2f112f99fa17c5eb3e7f4991416e2829f7fe1f851fc3fabfbb6c03ca56f72f11e5a21da6d3a6d9696e7de32137173b91c2f6891fe71089510ce634749312f9ac7124ad7b6757e4ff3d7594057e65742c447d56a91e718ce52eba5bd2d70c9fc35c463a9dc1c8591d8dd2092a7f6686bd784de00568fc57ace7ad9ae6805c37e8b751349b9b3ef1bc5cb2cd17d7a11f3ff522151311ed21e0b9c9c5ad9f1e4787e9cca1732f1666fc70b51e9764e66d1b9d30a1d88d75524d3fb53e5fb3a618b50200ed743ee6b165b147726120793dad8ab8b10e937e32de51ec7e3f2a3dbe047895ea4a6ae75739ec0e004cd0ee5fddea612d85a1ab88d7d2736c6e5272a40a3e47d013763d5a9b196a4c494ebb2ad4c6f72dee216b533bff8a61fb1a5dc95f39b4206ea2530a7844e77df2500fdbe7ef344d09898b7f3c5d8c79e3f9e9e99981c3df0e3dd7505696fde18c154f7e02d9bcfd47521d7381c93ba2cf41d78f561a3f53eccd577758e03fdf162e38e6b7ad8394b396bfd6aafce275591df4e8032d64784b7a731c408694c16a338d771eae93499d4051f8c668712f2c64fdd596bbb9a10a35766928428914a38b8a557856e13f97eda358b4489ff9ca5d523841f17f746948d5aee5698785e51492d8b8f6b6ec652b0c876ceffa2ed67efa633f66e21a5f435caa7a7dcea449d8e8a9bfbbbf8357cf2380a303ef8660522910a645ea39fe978baa4a3fcc588d283046b5267851f872aba05703ad893f89188b0714dbc4866be93dfb1d0d04e374ed83abfa660da4c6c609a3274e432b71475270e532f06da1210163895ef1d4a256adc7f300262158de51086124508d017712fc2eb1e2fd2d92222ad09b2f53009ab06d9bf5f3e71e7383297e63ca640e44389dbb99cf0f4845f71bcbd058bee28d4db1d80a328aba88bdd9a80b726bc51e53a92960a985e7b86ea2a8e88e6e3641180eee8cba7303d54eb60aa3860a0505a143ded66dc49565e0a80c0b31fb85f4966a2154c9d64eabf2dc8ef2a2014cee92a3ba64c27b3bffa528c9bf353195dca0e95329d8dc1d50b8d5f6cba99dfacd70180ba326bafc24a472a65a5929d7928b11443974187af4baf36da0e89ce5f08c5bd698fbfe81810bfd7762c0f5d975fe9c778e4f1166a5e3d8fe0de5a195e128bee49302ad6e1788ad555b9ad8ca4892d11df7867bb6edadc878894a0e199fb4bc05a34e04be99f27af0916cd68dd2fed1b2e9582cc30b8048e2f848d49d2955fd5ba97f0daef913749324112ce2864ba84998510a5281c1df35afedd4f98e3eb6c7b0c0a98b3477bc07e074614cc4d85fae7a151dab1a2ed42c43a38659b2fe859ddba5da7d4f2a8f63442bca4dd3e11b4b981071d764b8e02feed5b956eda0b872885ac801b678a54ee120e31429866ac759f6f373a0f1b95a3f1b42c1087371758e01278a69eff2eb0a2f1221629d020c7754b0ab0de3a0d6a0d2cb1e90f23fe08faff863bac1c837bf6696b734d066596022331c3d1cb3c3bb9be964e396a1e856553b6d968b73066aed50439d8e9a64a332d02a891c1d6e29a81e0bba8ef5a9f86683d83d72391b67b62d1780c77b6457a265da0b3599e0b7918e49208cb5cda359676c8d96191547ffa8cc717cc7b6a6f449349e1cc4beccfe7613f0d3b715e4882a69ef9173ac2c261cb62291602d61bf53ad9652186dbde45ffb908d1316e4ed3c1d0b21e95ea66745ca0f5d480f690d2c519b595ce82e967644cf7b72c9cdf158da5a7e8443a6c7b60c129f2063cfa9b9f8989065880eec8dacf623e93db8e99c09cd5d94df9ef277ea6471ac2911a3c86a92831fbcd52e3b3af31ff8445f043bc48bedb11069ca2b250ea31fdd4228cf2f7735b6012dd9027594afd09f0b5a38c1675fa7f6035d3b5669fc3375cdf438e635b62e7b4ddd003c8e366671bc8e9ef38d448a48e52feb48510daab05d38fa18c7d8c0b3a5e8420f933737a145de6130c74925bdcb3e305a07202f91385af1dc4808d026d33e6dc360391b8358dde02b04e6935c783280eb340fdfd4d015d2e525dd18cda917730df9d19b7eb51ec0f53b3aecdf46ee9f68fbfe0c71896553fc8e85115080ce5ae3937d69820757d54b4ea04476815a5321ecfa8667b5ad5059a4b5c9e4e0968a38900c7faf1d52b895c8420f1ec7fb4839fef81dc2825e602ce89f3c06902b61fc0aeba09483dadc596819019c54d2d1c52ef98bd2f7e6c3053daa2cc69529515d9cec00aa1a6aad3c4f093857fa82cfd78bb540772400277753a1196bd4005a91a3650f65460b3a9a36d6c53551053b95e24d1ec4d078cdce647198ca0463cd7cc0501369399fca08aa9df985e11bcafeb40899d419a851af6398eb3c15ce33a3d90055706c1da634e3120aa28de3eebb9bcb14e7dc2e11834b12347dc58b2292aa14513bb993b78f8121cfbd1778e1ee331461a556887a63c6a67d3265080f3bbf156f186a26bb800c35ac68c0a472eab420aa380146dc9076bc00c65e75e4dba58475e8b2c77b74f292db225fde4f6d2a959f162855519f07b77677a56c7e0e91c7154c9d20e400eca9e868e8cdc17027ee04164bd29678d7b8e6319730f060ca1b246489803918f62f9b7d759add3f3f4dad0a6ef1de4f4077945db34a570cdec7f7958103e0f73ff1ee8c466ea692d1dfaedf7e7a7e94484e1ca6204d044f468f4527844f765cf4eab0a33a680d770ad3507002e35ac84f6687ca59e4fcc3bb51955b2d4d98068d5d44a46ed5ef40704d3fb7d10154f4aebeb5d6a305de2cb6b2711c5770bf878f39f35779620b1d695c2904da2f6a595852630497caae4cc9a822c4751b51cb69d635e6ec47d6972a29c59515e2eaee01a5589c03bc24916b76c32ed9b78950e910211e331b033c052413e24ae325af29db647dd02ca06cc5224a8ddd55f26ac43a83d96e0beae9d7b9ffa31d515340cce114c66a177f8d7c291bdd49c1490e880d8f82ce4ea6f7651404d81367362f2a3e9b0ce311eaa8fb8525cf8690a8f943ce49bef0aa03caa44fcb439b8b7a31a72fbb61208a04697ca3bbf8b5a0606341a0e784d6cb82b093b274ebb4cede80485b612e321be1166e3c84f2bb1789b343863ebaf12ca70a92ac55a78c7998764400fcc9812fc3e8737af721a4d5cc5264f3a291f25e2b52abe5e07a38ed0932614e87fc1bee6b2a8b66b83fbaacf3f1b49270f8c78c5468ed6a7e4d2571d60cb9808c8df22161e553f1fc3361b0d4227e26d087c80693ae4c4477afa54cc53c3b15e1b3f4e137f9366aa52ae0ba3e5f2d50c84d243d55326218faf8ffc2d6e5202bd20e4823f1b4574181a7470dfd658471b2655b40395dc6359ae87a53f19edb007b977cff3c4b0dd1b2b23d4f4b5103cba48612cc2a8d1dcd208f85c903caeba0e6d3a7348a6129c86843df4bd2b5a50699955e9c1d6c6200dc5bb2d90df887813da1b9acc7678755e24da71ba4f60720b57ac93e7f8ca9e4c9c0be6a608008e5f5ebcb631542c9c2f6c408279633b43dd688ccb4679ea0e0d60267f194210ac7d7ff258f76525bb51e2ef7d72bb10161a72083e7de7ec3ce96f53ba4f83eed496525ee2ec23ba0e06713cb094637f2863d945432ccd307ef45e62b25266282b5227cbe0c9b27e2eb55c7c15510ecd3145c01ba5dfa6b57ba234d1548cd65e851953e0fe25805acbe0be413d12526dbf031d07f8e1177d3377a2575fee0dbf74eb62d01187af05ab977b1014a5f52a5a6f20de227f3a537eff328edc4a170dde3649d6778aae839e1e24793b44b4251518f4f39a2d87add841b3eadfca7f57d968e27587bcdf516b425e59866f31c19c2ff71c575fe262536499d92873266e559d4bd873147a449dfc72d80770e045c2d02bc3cf98270d5b66031cc3a8020e688c629886cd664a2e9e01491262a51d5472440257dff2e991101178abdfa061850683747fba1575df27f75a96a4d8aa64da924bb79ebe2e1e23ecefb00e88157f648c9ae937a5cba7d26dba81f9fcef54a4d550b6977656fd6be5226f77799b1b731f7f6f9ead317bb6a370075e4b5314829a0bcb4f67f35435df3a8303081a1d427409b01ba7b9824af827759643cc07c9ab6c20fdf9b94a54a3183d21b6f475f7b7cd8a515c1cef21b386368a39d855a92eabbf9e691ff24556ecaa9e551a8c415d89a0305c15cd8fa9838fca767318f14de9197e878c573bcc853a83107909311d62804fe87c3bfb056cfd43df4c09ea3a0d21f933bf722bfc924d1430ba51efba89d0c5e9450eb71f9e016ef8833d0a06e59829e66398b1114d39479f03d506394ca034388889b5333f1d0bc9fd8f09b7ec5cb4589aab56d96b2a2d16aaeb74d81a011ad5e54bb686c1a8df3a1447c7dc256cb670644010f68c1433c187b32920b9311ed70434f597258ee69a55ee5434c4c80623288f8cc9889498a5fc6653f4b823d6c3e6efe83d1bf4950ec13f9ffed06013b0721962ea59b8ca86cc06f05cdbdd0d2305d93abac05726b527177683bc28b149ffe1fafa89c009dcc0caf55e1d9bfcd1c4fe397d3c5fc0c6da383f4c41daa66263a471ffa9d981e47f85ed33653fdadce24b56b94fb30e567fc6184e01a8905a7aeb5925859118a1060295d50487ba0c1e76ca8f99e22f99a39b809b6505842261b0d4deaf7d83d2fb26bd39d2038bd1353a36ac970cadfdb87056420c78d63ea2b2a7b8289306c163ad35031750bb6adfaedbe1a7d51f5158cc4b04321c13926f56809b0335b6d88b5f779906cd0fcd5b7c0f0bf6d57490865b51ac8c9710997aa076ad1c40cc145e65c02d25485362c3f949763200c123e7cf1bd09cf556070bc874f0ab53e6988f439980de48974db3aa17f6137067fc13aaa24297473b2302d7b44265f473fe4455ee2f9d773feb52ca364a20df1ed7c6c78be155870a586e2132871ea4fad2b4add1d2c7040b46554c5b8586744dfde9612a76439e16bcaab8daf5cc20d89f880251a9fe6208c314095da7ac5ce369c57a576361cb1f66fe1da7513f997fd3c6e77b6d166592a749034ea50feefdc2f7a1bd4e6ec60fecdad23fcfcb829fcc8eaff523797d9dccc24145816b74161f3f6c47ab2b8632b0dbfaf01938edb025a9c9dbbe795dc542c24bd7135c7c5bf361c1c3bbf4a50497c9ef18ebab83833e4452a3df9657850d114a9d102ab023ae9cdb3db837d1b321a9bd69d9a278b97d1e086a2401c1ff69f5b228bf2b6cc7fd1e4aa6433c0bbd64a74a42591dc0ddf278cc12313d7d1b81c316018206e1f349b4ee5e3ad47562795c9478d29946e442c4494b6b6ae6415258f179cf340a9f99f9d16fab1a9f05726e37897d034d3f9b469daf9fe93e4c3994196a07c5f9128f04a17a8261a6e527629565c2890eb803722ec91e30c06ff14f407809e92f184c45440b20cac6f6be27fa691d140e8e584b623ba07dcd1ce6103c844f125671c253961ac00310fe5f4ab96bb88e7d7d7e1ecf63b5af80088110724d6a5ae7a4f6970cb920b3c055d82daf8e0b1ac53aa6679f5ac85959ab6264dcd6528d5a3f1a7c7fb9fc0e2ae9ed1e10a3331a450d6887fc51b0861b5f461369ae74099b381185fe076e2ea69b9eb54a699c9268fce1b3a07daf6b5dfcc4c02975307c9e725c3047e0fd1bca91f3133a5a14ba5cb001ed0523a95984b1a5c1a57bae0f3f556cf9c0ce59c2c4f892d0502ed46471a6745a5228adc2edf9f892b906b5c0e4e033feea3215e2b140993432d4c96c91e566cdea64a5a43648440d6cdce43c803ac6c3532d860473abb463d0737e6634aa9b20c78e73c3bbabb6cef59c8dd38fef882ca0c68866737731ac94fed1f8ffac930777301a35eed5c538ba913a1c63532c5fb6188b5c16ed280267439dca48f966c2a43b4ffc61261a17aee54da1afa7b5d2a92245beadff99989eb90a7c1acd3c6a066446987f64cbd6363bf750761e4d7c6c67f15118f782c7b9dff23b61bc124650ca02f0c8390dbe4ed73f994e1e5b45644838c0c6064624dc7761d3254dca99938bf376bb979921dfc19864a0fa2dbee6eb33800c50e4867e4ad14604e053b9a6339d5aabc5fdfcd160626a11e805572666d182eba3d983ae48df106572c7dec35eff7078d9ccd7e507c1e9a6ca2407231a0783bf13d201c4ddae4f9b77b4fb855f743aee3de013ba45d8a6420a476e52d38afb23c75f2f1bffc4f2ce861daa4ec733a757be06c5c63d086081020ded0e38a7ca7ffd27ba5cb21bc403666f301572e1763b2e60a7c0847244f540786740d26f0d1021a2b81ef853b2f07109f7094d4ae75f4e84cf1bd63ab94cb6a42c38b9825572036ab6961fc49dbb24094b2de3f3365613a04e557359ead16d4ab1e73be6dd71f37e88123c8b94c25c8b2bdeb89c517e413d9d09c6cba7aa3e573a1f5621948761455c665b713877db28d7c062ad721bca8b7b28ecc060b8ed68b461e9db67d4808e9e2446ff7a9f2e59161e6a0fc484afacee5843ceb45e6fcae60af3ddb9749f003d9889039039fcebab673512ecd739ff5b610a9a90029213e112cab2d83a709e19c7ab3ec16bb60b0a53f654f55ad2b734df700a100e5f2ccb0cca15802cffdfcc8076c8f22dbf9a8d42bc6e00b4548acc9bfff67c5d812ba4b35991d6c58fcdd60cd3f708e06ba59abe93bd44831cd6e403fe2d71b54ac7d813cfb4eb047bf799bc95f460fce9549b7a9a489f4ad105795689cfcdc9225ebe59299f6989b58a3e0065a9f646d82aa27fd954f015889562bdd4f897fe642be846cf3afbe2acd4e2e40e842ef4a44956b251a8bad504676ebbe99851701584f2f4f69aade1ffc639cfe3243729c938c15f26f8c8571b5ae94b02cd95b26715034390a1f1648cd35b1f0614baefcd2d7cf27530d6cf8e26f553ecdbebecbc1f6b0f2d3f152c5add956bae4422470d5522af30f13dbeed7580f2d3c9404cdbacd60bba697e85aee7e54ff7b4a6217cd29730c1ab867cf530de44478ab8c3e57c51866136b0497b89749c72c2fb8ae2b9cd77ad8c6d1af8878b66f64acf9df52b15d9bff07669794a751cf198cb5b52228d9e810321dde0381b9e294a60651e199db8bc0784ada92d86dbaf246584dc6c482ae93fe74cfed9d2e708f49de7513a07cb38724c7ae1cc3a2648c1c394fa85c56043060ca058bf7dd4dbe8c515a8057d7c56eed326905f25f00d091a9f6a2e5c528b670ed8d20a1338100dd2df256b7038ca7b92675138ae0283cb9840c9363a320d4ecca6e37bce9776ea21add8af8d470a33dea35c40e2fe88952bb3791de1677e7b9c32acb116e2282c2c78875c685ec1621da3bf69c3ffd3cccd9f0f0b08fe8f1d126f9db0440280a00dce41ed7a43ec3e6429f119ba69c536d6e384fc39715c54bd37d0de9232dc2cb4be2c437cd2b225d1e663e10e49c3de42bf6bde842fa49329adf64d81b1574c368a443aca940dfbe491a33b63db32b3190fe67dfb7fb86994eff1c294fbcc11ceb35ce80a600f80b8c79e60a88a9a38856535203daea2878362368f2e1441f5252878b016cd943828f2eb46da23adec24265b6af97693e065848af0157b3a6a6c65a04b0bcc8755eb1acfbec2792364ad0ad226d5c5a3e7f9ab49de80a49acf8aa5c7616bb4a67c26bcbf466eef8be47fc155ef610c790591cecdb2173295bec56ebf4fd91ef9fd499fdcb68f36e11e6c618b84692cd0ec332c32fa652d952e73c3e3dd35c55a9c05f9b049821cefafaf3a59d7680aa9ce02472e2fe5055125c9b9ba2a7b25d5f6906cf88628b994085604f93a3f72c71d81758c471ffe2e3aeb47a8c17fa5d75276d4fb1123b94098ab68066b45f387ffec1d1c79ce8d905705fa504c8d6811cdb28ff827c1848292ab86f43787157dd05764ec1482f6adcd99c3d54b85c1896083cc31b5c8026d377cf8a4ca5a18cd75f84ae7461a81045c0290558c20fa6956c4f58755dda891ac458a6c915a2076467e537eebe355505fcc2c973695d7dea386a52d2155de2dcf4747ee1374bfae34f1e26bc7f26036a53735013c670e5a97765f637723a0404931b578979b94f25de1d78b8bd6dbc8190112f05654fcc37a2e3af0cb2218c27af91d96b4dac8c15c7891b08e339780fd9cbb3fc54ee9521ec8039151ae5b447e7d818535cdf3f51fa49a9099af7774862866a17bd8cc15acd395773cde28240aef35970651d141b1b4dd950f79db94e41dc623161575815f52f34b2c009c622a8dc0f5e3841a36edfa29f450341137d0a61620dc62db96d6a54702d96b3c71782051a54cf1dd63fb6ffac8adc98f0f85c2d472018d4129e2458df225c357e4c77af6284500ccc6512dbf2368e1057a2a1bb6e95cf5e2421fe6f0b616ece11b16ee36e39ac2d9919423c7d59e77810173c6d6395a93592b4626886ff32925dfc8d6d252ca7b642a8f96bec5b034591c8a8dd5e5bef050e3250fca3698de501b4147c104889e5653931be758151adae8edd7c7a859048951f53eb462b6eb17b571b9324b9e45172bb5b1c93c6923255fba2305ca28cde0c57ec6da95269c836cd41e3cc9f24116267ca0ccff81d644843f10689364df823e60110d295da8a109b616f77464182f1e933abee28bfbe3e893bd059ee8983a0c28621dc1d734c04ab7e3c39650ed778a7afb22e811aae45b0cbd8f2be085e01ae9ae29d98ea42b353f053e1b3e62f0260fb4aaf91c94bedacb06c9814b67792cfc18fbf0c74004714de8146a771fee831a8819432a549765e3d98e0381c4a7595d38a2415dee9b38714ba48f3c1346c2e5a92f5a8a80ec390e78e5faf01ef784e7f9a89746988302cafe62ebc6bea14110f831a65c195a164741beda5d652b95a05b22573d231f7376b3b80335d3fa56e8e72c2dbc695f5252b01966864fc7228549da767b82d7752558f7ccdee1fd86cf25b09c0bf84e6286df14c5cfaedc4529f20863117eeab700bd3cbfdfffa778aed414080fc42a8bdef1901c6d770399857789d317faa24cad19459b7870e7acaa3d6eeab55af56976c683bf101caa052643c878fc505476e8e9e47a9cbe4a9de664d58c79c5c9b66a524c631975db9d4bab2706e97e207a4acaad781d453d39f7a13297459ca8fd3c5486210568907e32505764e8ae1315c2c38b82b8a2196ddb0ba106aadfe33e9c80d6fc404353b4e44bc6695535f505b2e850f3db9741e6aab44cffa74ab724f1a064f4a6db4f5ad8eec214dfd50f7a48b42faed430a590e582fd8af38c59dc0732f03a39130abf80bd7cb216224990b0290f837c605dea7c9ed496a879ca50756c22a92036789068b7ee0b4680d98b0e5a2a3e3087a6eb25e717d18f393ec21ccb7f3e4216999d30ca8589fc7306f11d49e2a2b7c43302697d17b789c3bfb8b1cdbf4517033b234913ce80685bcda0ee097f8a669054bbd016d0f6c307acc0cd308d59cbdf7f87e4aada45e74bfef42954633481911d034ea97cac9323a4799fa82d4714ea6c8afe0da1efa2e9d869e1aee36a5d67b2d0511f77de5d325ff0b42e06c2bd8551cc0cf5cac7c958f9a625ce53dbf76217b52e473d57d1c906e24aa8c34d192ee6fb88cef39afd66b847e6ea395eaddc45d12a1586eb769fbd21b955ce3a499ec868130c8a6f22abda5a5c86c7acf53fec0d1373feecfea2a35039b1dd5f875e715a28224a278ce96ee79c13593e2cba3025232e08e9214042ea99f9380e35587e160a00b41b70f1b0eb4dd71b07336f46079c25be95471de8b42a9f4fb03a1ac104d4ec1ac2c3acd51058d10ca9d3b7b5657d7dec74845d0447fa39bda1fe7dfeaf26daa8fae39fbcdf733ef7ce643572c5d5feefb350df7bd18c9235a41ecae829193e2f47b26408a7b8e9e844158ecaf50b395722a6a476a1bc1212d9b3430c09e802f0d3ef353abbcf29e0fe0358237e2049d1f93e660f5ded31e438b8e7393b68cc6880d4901044081464687079bb02607a4977416ce5d1823d1d9ebcf7562219a2bf767cdc7eaf0a159fd12431106a23e403812c4d948908132242e1c97fabbd69a565b58e922d13a728e92b04c877e05e6e4d877a9d0a3d094305d89495cae047517463b8cc04fff0adee7f44858a6acba6c5b763447b03a42c1918dfb70f54123c18920b0597363af65b66eee6962d91221d23565ea50462518a8e60fc5ff7964e11cd80d04bbb2412e29933c293db3ec78a04f38802ace93251af084677107f9b580f4890a1c6bd45e3225364a042ca09a6a6a5aa53d46f1e3b407fad951694d4c3742c43e10125e8699f48a8d133b8074995abb90e6c1d757aa773558d4a4aea451dafe0aa9b4c926efb29afea8d85959927d431b3809b69c2e65b59e30443c66cc6f864c6eafbd7ef32c8eb7a1dc6a663f5e02acc2249a3a98c91ca21a25544af94e246616c099a4aa12923ffc2ee23a3694098595e2b8a06cd236b39c4977c6e3a1e0a98b4120a0c360bb9127e332cf3dde68d99cb086b9b0ee25dc287e2d3f5420330516cac8a4e04449cb6076c795274f1c54b0ff8d554f38526b09eca3771606195c5c51c7c995548e91171002ea86bd4bca9c893691fae0f689feaf12201d31d0f2a1a3a9ae7e3b70d787bdc0c3a2a76c9b5713ccac9026491bf43b5323140ab2a0547d84ab83a48369baf87565bd8733c6fb9cad027f435f9ef0cbe3c402e5182fc8879b7216394b33b855f48ca8b1f1ac798bcdaa6dab95be3da780be57dff876a641e71f5da35da0490d0639b9c178c95fcb0e1602ee3f645367b2c684b90cae2d4722a1d54afab89642e008970d172d229c1fa4963635b5735e3c2c4ae30cc47a0a906c85f7b38a9335a24e87c2f74aa5c94902d4ddd087a9d5f65cc3fd5cc543545854a47a4d0a53ca653be46c4c0a5bec89c253344b000bc86379a86f2fabde29f2b56e08d6eb3278689e3611b97b22bbfee3d3242b7451af288f34c3ad642ed7352f182baede02a5deafa1844f1084bc4b5bd9ebac1e5766f7038c65868c970dcce1525c4ba4557cfc8647ec40f9043c4b7027350472693fb7371c7c212a368f1191f1cf1872aa3de694ebe05ae0a4f5ede7131856c643d7bec87cb58c02bc22d4df105cdd1810d4b9c07fb41f4cb824c03ac290c3a9d5a76492491616355679ad42bc98b06723ec035049726cc3ffc72072ff46ec39a9e829374b6545d5a2b5ccf34fec3f1755ca0e6e5b228e0674d8df64e3b8de4ba669490198692837079a8828cb0c2090ded5cdc360f67f21057826e4834901f4d306114805513678e4823b290a28beb8204ef99ca8e0d6429c7aa3e2d6dc5ea23ff89d325352fe7c3aa6f47f67d26cca3c51c383b62d27b009235af15ba039e84cc5755e61052f18ff2b16d2e7fab90e94cf30c36b68c2368727cdd247ada97ce1b5ca19e47f42a04c49c1636a68d74e5cdfb53a237d65d3dd421b24ba59ee8f6d47bb3e7bdf2472eefd148a9cff0422d8fdce5a87c43ff8c5b33ec890e619a190f147800cab6d1835ba2bfe2d932e9e595a87246346c5468f1f7db9bf08cb1158e2dac85ccd8ffe8189e30bf0487cdbd5d1fc1ffe34130b8b1a2191c0858d64f1e216a45fdd3e5591f787914cddb4557c88e6f5781d486fbd0c2dd7b68a9f3a9e05d2d29e7aef4f851d421a26d826fb69d1063815db49414296c7a930467649f5b875cac06134f9bcbc2d6bb9c88084a6ba106a6542bd03a786995d03f8c515cf66004b64f5f7bde8986aa02bdd84af0c9f6f9954e86f046950eb139b09f270be9f4b5fdc355a972f0e136144f1fef3be3d48dcf2929464b8bc255c4e814f000db912e999e59d37c272bd5adfa4f68b237bc851c2510b358d194adbd97f6ee38458de219fd1faffa0ab3dc0591aac11f61a3a9342c085d23b6c844eb3ce8c0dcdac17553eb1316d89ede3c84622224d63120f1a23cab58f5462386ddb407afc118398e304124df2358778987f85588356bf2a89874b9b4f83e326e36c9dbbc7d761fcb81ab62a72f0aa03107a5410dfbdc35b8c25e048c25ddcd79ad53ff6cc1b00c294b420c15627fb66d76f93fba4e560163f51766fa15d207b63ade8db5d216b17160b167c098cbc26f19837e15a6bf3ba37f93d5ecce0c14e2c7c780debfa99eba75add973226988bfac7abc0d4f0418469ba08cc4305c60672c97bf71e832de7d48b7cea61ac81e67de5e4971440342624fda46bf6b8af196827b9f85b0ddad4746b67c4ba2d7d4cbf1e7db99ef0a787646414d6a779a05643a821e6c7d22cdedf473e70050f4953d66df272f74676904ec5129fd5469762d8864a3a15819ea7c5a1716b628862e2a4c318d7b96384b75c0de290c035d3444bcd196a3f5ad1464eaa0e0c8a3190cd3d00f9c5cee18c86fed91624784685acbcf82fc86a928449460dc5b791da0e973f110c6e7230bd5b3ec98caafb6d4ae0bbc515664ec0251e66d8f210049797d280563418218f07e430ce2096600e2cb2c797230b403f21ee8e88d2c3b03ca7b3f272b0daf2ce1c2eb069768d92199b31fec315da1caf22e5a422410282772cb91f9a52f7148628889077b3f81d145b8721db54046fcebdf6d9c358c1578f120696e661f51d1d99a44448873e45f02fd7682faf0b7735c9867aa8673b06a91448f34e3f73f997337b47e4aa66248682d88f24daf2bfc0deec8d8a6dedf6b707da048eb899dabb34c4fe53de0fde66e2785d21c790ab1d1584bdfd96906a3ec1c269148a6943da1c537baca09b8adc5b6ec812888e232c76c29c0db0c1c18bbc93a81920c6509aff95fb46704b342b8eafe9581c43d61a65d135da188d4d942bfd0effa1db8e068cb6618f8bff6c0fe227619aaaae571601e749fcedaa100be7386a3c8b68694eaedccb2b9d2e0a6356a0f8bf1b7a2fdb3cc696321fb76a0c35e3f3784164ea184229a60deb76fb919e6860813203a9cd502bb542a216ebe2a9b458daf52df6591c6c5f16ec34b4a35f5c0b5edc4868fe788465f70bc7340ce661d43c178fb6aee2569d4e1f4152d1acc5a32879a6c28191828a8410d28959acd2e51a37619f3ec1c72e425a37065f49a1cccafd1f2b517c2f058133b0a36ff95b6d16274a7776df502bc3909e67bce5d1bd8ecd3d86dec0344c14448ced0428b06e309ff6b61ed1e128fae6728c921f3be87180fbdef2faa17014be6a9085452d7ab3133f51e41ed39d14972bcda0449751868f847a71166f6336df799fca7118e8b474e077d2ee6b73be947c9d3e53d662c915cfcff1f09d67268b0f2767ee0dec62708beb43be805c0b4511b97979176df458fb1a925ffbb05e4b7c58a20946a2ae788f8c4c1559011bdbed1cdb72b7cd8b3bc07f4c281a43ec59b2e169ea9fb9fe106257e8db9207c739374535f7731ff817fd6a97da5aa710192f4d4a88abcfc03ba764bc7e5b372ba36252ebaa2cfcdb05aed4e0b27401e1befc84ecdaa343a4a8185f6f0290ffe91d75b1b2518dd4550a4473e48499c5a92fb457ad30aa3943fb505c14649e7e1c73824a409b28b62cd7363d112292325edefd2f03c936d84995bd6a9d1654f69ff2305fddcef8421c6fa5e95e0804d21326f29090661e8b7d29acad4ed70088e0a02d9e0c20ef28bcf6c6e37f0ea5e8d101018274b1a9581cb0e4ffc249c6ff21507ec348c2b295e0a78295c70db6da3f61e3e060097394d4dd297c791ef4b56be9b01a29139fd0b69e035c332179ab95b905fa9206a6469c25f5b040e6d41fc75c41af2551b1e653bb4cdea718bf56be7aa323ffa7caea162d9737f25854562a0e86ff89bb5933016132a74321b229255a7722120b1cabcc76bdf4bab94b18a321414558f4363d700eaea6b036f292ab2ccc250a1acec76075af3157ad8e301d6c8a38a4cf5c3de2693876f0454db9353919500d13528f47452c4986d3fe2629a3449e8d878f64d29b34b275e4fe742363f99640c3fd23b3d389f23ffdb261c466726dbbcb3c34afa274b28901d1ad577fd38c81fb19bd7550062bb85d31b513614780a02b6b5e3b5b7887a79b97532d503b43d1c7c48c96829feacef3c031665551659f32875674e20f38721cdc1e641ce9fe4e9dfb9e42bf08fc28ed0b03ef218d0b0e127b5046a9b965d8287fc07d20d688150ca006c79be06c7fdc9bb7910613ff3b5ba73d67e8dd2657407b021cdbb78ea5106f1646e9fab0fe2816f78a750ded955e761ba85c819d46a9e2a5ff21cdfc247b7350b0f8ecb1b82b1f991dba6d8b1e63cc69d4a7da94a552e695c6ca72da158fdd2260128890e396f7aa3b62023deff2db64c9a39b6030e9b39d99e280a4fec1683e09bb3787305d649f7ebb7bec1c75b1a6ea0259b734c14a0a2558a99db4acabfd497d51adfa4a46fac0c29d21fc027f0488fb7a2952e576fc9efa0c6f3bbb9725ee8556fb5ab129aa3e3ce912b2df7fc3c15463f649844144f62493b9ca098c5bca1e14e2148aea9ef0b851400b32db71827c0b0b5f8347f36f3e78f2f165f8e3fdea653ba81865efca377df1273b6a1f5df53aada0cc162aa096083a8ff62f6bd1096861fb1aae2851b4e55feb071284c12c6993dba58a4e938ec33d897b5333d67da388a69569a5762165ac069b0f9c00cca0bd1139c96e8265c865c2f8e7c39063bc077f795749cb6076df4588e2b2d07853a1443fcab992c7be89857a004fa930864687868405f9d06cd44a0122e2df619de0c07ddb7bd136ef66b5a49f7c6251915d5361fbf75d8acc6471b2aec8c0d8499c78ea80511fe930ed6f8ff4406b5c061678c0e23dc998804dcd4c7fc166356e536d84a59bc35fd2c111c7aac8ac8c29f5310f40bf0161bc7950978b886f0ce03e2e053e0d426238e9401c126d362e59556ff6bbdd7886000b65fde3390be7c2e91df00f2e15bdf77fc84040f705fe1756c4402679479a18fea45b24ac145764d68c03b2ace1ad2a40c67b027b5a81c8e29ac5d69ea33c39e236c7f906f6a8445b7a88ddcedc5d7a5b3326e9192aaa4b13e12469a21b34c6709660dbbe4844ff9aab8c1af58a076ce7dbe92a63aeaa409de0aed0d76b0da0578f55c4d6cc5b77637710c3498c8cc4718da0efefb279511b4a026d613e50a3fa51401fc786f81708e619a9369b6d9d5daea06836850917d835304fa3d6dbb4dd72ac7e624587ec2437f466db42e2d5c8bb03eb389c0482c087b6c2ea1e81f13a0b3772e452c3d640583c9705267c10d4d5f88f8322d2df8a55ba2b2fd5c7cb1b905a0c2822bd46d86e73018d96953491224866bf73b315490b2cacc59a13c14ce68372fc66c6f76a3ad62c9cbf734bf90b44a0c04f2f7545d501c91ced47854b3a5d3773420c653558b73d3c59d7d3c1689db1782f2ef33fe06b7418229a34768351cf11f61eef9f3839d3e5530af4d089305a32ebd80c97223b67047148a36d8c3eca73f31f2d94c04d70e89173ee68501de0c945b74530795598204e145adc81502d83c2944ecc9a6c42db1d7cd91682e05051e93f714505d75c1553d85e4217ae2af8f40110cc1dc88a3b34653871ecc50420cedba771ff2502b58f3bf353d62b68c365f4c7a6603f3c2a238d3e98594f1ba6e1b08eada2918519a628a45ecae4b17fb39ec117fa16c9448fe1d21645120ba850e71e2947b54cf87c599a6a2827263640041367784ec51b9c37cdbb3627f76f21955d9876ea0283ed22b5a07cec34792d6f9dbb505184eec9ef7f35b8237fdaf2b05fad8d98ce61c635c10fb5d803f9096ed9c7205b421482557f2f7c6807df1f893568181371df13935446ce065beb87a55c2dea524b53c6d4fa06a7806e31ddd78bb4704c5764b66c793128a76b159d914f5d76543df761e1db72935277f57a7a7b2ab9e7fbee199d6b4638094cb89b66fbd8c82e179f53234e5abb6ec764690885115cedd1677f5c8b2887ad48de4af560fa3fdcf7350cc5e6b6b90a23541c6174d906278d63a7b850380c412984e8b16aceb3971f832e85ffeec27da4a05c46811bb9dc4f3693f6036a1fe551da2d57544f4c85708b06f137692d30fb2146cdfad11a65ecc4e0e1afa9f25ff22858b14efbec3557074fbbf067122a39370193dfeb1b41e38b24701506d64986a4cad8853a2a39028e29f46e08b4ea0a88d180c6762ff166212ce8280c6ae78665f9c70803a313030a3e69c41f93f246738e7d5f9862f9f1d126a5fa1d67b18c6a6480c8ee7f5f5b5d24740b6d55fb64acd9435b7d0b6e13abc83a76e075387f6b93296293815504948933d97c33edd95a62f0c28db4d179e49bafceec7973b5657285a7eb9420b22caad226aa8b055495eba5974a94b17f3c18928539f7f4b03e140aefb83f2d5c2b96f74bd2689ef465777f03672d0d744f2aa232e851e5da6dbbea3ab5948b65a60872de801be0665553d27f8b831cd1769bb4cd61140cec1c9bc6677091656eff149a9546ccd453beb00c4a1851f7a67921978c5ee2ca83cc84ad7c5687c556f227f97a6271f072cab034052b22046be0bfaebad6df055d007fc5d7b6cc63aacf4ec075a0e93fc4adf32819397db79d38193450e8fe88e8effb71030ce29e62d64497c1198f8190d3b8b25c8eae993fe86e3ec3519a7a56d533462bf20b7066894af483442d6145cd3702592f6ce789526904b9a916e1c26462338ce9dabbc4ced46be7db7203dbbb84a3bd575a5ce2a624141e7d57ee41481a24d9fce04a6597a376d843ec7f024393bfa4f043a3f0a0ee18c5c8d990cff3c9b6bd7caca182fdf365d03983d95c5bf21bd7cd1929e57817dcb8d82e932e9d4e293f7c7adbded7646c56728c99afde5bdd68e219a10fa986766ac55ba1f05e6e73f0ca5df6826258eb31d002bfd3e0500171cdc9f0dd4fcb9955a058f83b15444ec721c431b9dbf103c252bb34ff11e2eaf153ff5a061dc20f386297e36a7f3ca746aa3a135e479e0ba55cceedb69a7f7624fa975e048d763b3fc94aa7d96da972ddee7f91b7f00d6c1cfde389f4ab05c799aa106556611cd123a26ff6a23a4057a3b2ff2569dd14605968e76993965b7211c5b7405ff5c89cdcfb36283f7fa82ff1da9e26d0269fac8daf9015b93b3b536c5b00a2c7427e199d9807be9893b67f03a9a1970a1a046887e0a8dcf4e6a2cee57ff26b8a664f6c836b28b20082d0387e02d6d42adb8c5f126668c2292cda1123b85e39ffbd389d832138eaa1500b06f16b0d0e5505c970152194e30f8bc3a2ef01385533daec68f3246ef72956036ba3aead3d62e879dcacb7f505698c6687996ffeeefe7d2a0c3648968aec1e2b864a9b36b8f08211e8178883a27a079fe072f08ca49e5ef1ab910ff56ac7d4db6a0e25457c230cf920acad2698536ad3c6bbea096729e2687057b1d998103c0dde7df3d699a35e5b7a297dcae7d42dc5e6a138adada3247fd200f3060be71eaed95f6e17039650bd67ed21569598bba030ca1063affaef3ad2f17d74d33508a3c74b0a9a536a7c4109ffb9bd1e1ab3ea36555c2522f1cfad903c8a51e91cdff895146b56b83fff4680123b35a193c106e845f575c9b983e338793bddd57a0c46acd9298508e556d242d62cdb45e9c0f9bbdcce45a259ae0ffd57dfeaf85c64351e0cf392c4220a6d10c7e178ef8a88c4c1ad63c131cd92df268301730bcfc01f14882e51e9826b793fdfdf5f14ce7c44c59ed399e3a56ab3ede222dccd25736b85ffbf267efd69be2ad7e07a9b6360dcfee822e70f188722d0443239533c664b51d9d6bf46ccf8087116d5baf8dd6e0077800d84c309d7d749851f45d5f843cc369c00fadee5971af41f9451fdcb24138a1f19b9d3f166d6af9a4ac580b8b38c3ae8f0822640222d3563c611071c5ed0d370566ba597913dc6beed7470d7530b1b8ed213a3e6f37b15983e63f61de57cf0996250af0cb47c8c2cbe374678edd248d14f970fbe3c24a0a35a08b517af001b7fcf8cd9a01a4e909a1247600880a0db14025908498233325773bc70c907bffe93a537d60ef9590641987f23e28bf77550609aba6d5e1b13e79b1990ac9ab8b70e96ccf1c7d685606ea0194b40c68e3fcd64b3da521b770052221807de6c4186166a9d7efed120c978fcdb8380d5be361fcb52b5728831d367f29a8879a61d7eab88a95265b583c44068374cd3f26c23a1c62cf33b8f647c9891733ac9428d675510a6c9dfe5b0489c446a8601bd14bff6f637cb030b4dc60f8b17af638ac775a9339d7a4334cee79d830d735d3186adbc52e733f3fb410d20764d418f3863ed2acc874ca4be1aa47df5c24692638d703df3dfa0c7e7a1f3e9993b8f0e7607b4969532a97dcfd30531b19fc76c331b676881217067428c1403fce556557baeeb389b4146fa043d49680239df3182fa576d48c9d40492c78d029d149f1
+\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\rcleartomark{restore}if\r
+%%EndResource
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 168.24 C
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<4261736564206f6e207765623530306777206279204672616e6b20526963687465722c204368656d6e69747a> 146.88 167.28 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 211.20 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<457874656e7369766520636f6e66696775726174696f6e206f7074696f6e73> 146.88 210.24 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 253.92 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<41636365737320636f6e74726f6c20616e642073656375726974792066756e6374696f6e73> 146.88 252.96 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 296.64 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<4d756c7469706c652d6c616e677561676520737570706f7274> 146.88 295.68 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 339.60 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<436f72706f72617465204964656e74697479> 146.88 338.64 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 382.32 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<53746174696320616e642064796e616d696320676174657761792d737769746368696e67> 146.88 381.36 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 425.04 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<44796e616d69632072652d636f6e66696775726174696f6e206f6620646973706c617920706172616d6574657273> 146.88 424.08 C
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 3 3
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<33> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<5457454220476174657761792d537769746368696e6720696e205072696e6369706c652049> 159.12 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 273.36 293.76 t 273.36 296.64 lo 721.20 295.92 lo 721.20 293.04 lo 273.36 293.76 lo 273.36 293.76 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 110.88 255.60 t 110.88 277.92 lo 158.40 277.92 lo 158.40 255.60 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4f72672041> 110.88 273.60 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 112.32 318.24 t 112.32 340.56 lo 159.84 340.56 lo 159.84 318.24 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4f72672042> 112.32 336.24 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 437.28 187.92 t 518.40 187.92 lo 518.40 235.44 lo 437.28 235.44 lo 437.28 187.92 lo 437.28 187.92 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 435.84 186.48 t 438.72 189.36 lo 516.96 189.36 lo 519.84 186.48 lo 435.84 186.48 lo 435.84 186.48 lo eofill st gr
+gs np 519.84 186.48 t 516.96 189.36 lo 516.96 234.00 lo 519.84 236.88 lo 519.84 186.48 lo 519.84 186.48 lo eofill st gr
+gs np 519.84 236.88 t 516.96 234.00 lo 438.72 234.00 lo 435.84 236.88 lo 519.84 236.88 lo 519.84 236.88 lo eofill st gr
+gs np 435.84 236.88 t 438.72 234.00 lo 438.72 189.36 lo 435.84 186.48 lo 435.84 236.88 lo 435.84 236.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 447.84 200.88 t 447.84 222.96 lo 508.32 222.96 lo 508.32 200.88 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4c44415044> 447.84 218.88 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 439.44 368.88 t 520.56 368.88 lo 520.56 416.40 lo 439.44 416.40 lo 439.44 368.88 lo 439.44 368.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 438.00 367.44 t 440.88 370.32 lo 519.12 370.32 lo 522.00 367.44 lo 438.00 367.44 lo 438.00 367.44 lo eofill st gr
+gs np 522.00 367.44 t 519.12 370.32 lo 519.12 414.96 lo 522.00 417.84 lo 522.00 367.44 lo 522.00 367.44 lo eofill st gr
+gs np 522.00 417.84 t 519.12 414.96 lo 440.88 414.96 lo 438.00 417.84 lo 522.00 417.84 lo 522.00 417.84 lo eofill st gr
+gs np 438.00 417.84 t 440.88 414.96 lo 440.88 370.32 lo 438.00 367.44 lo 438.00 417.84 lo 438.00 417.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 450.00 381.84 t 450.00 403.92 lo 510.48 403.92 lo 510.48 381.84 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4c44415044> 450.00 399.84 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 256.32 t 644.16 256.08 lo 637.44 255.36 lo 630.96 254.16 lo 624.96 252.72 lo 618.96 250.56 lo 613.68 248.16 lo 608.64 245.52 lo 604.08 242.40 lo 600.00 239.04 lo 596.40 235.44 lo 593.28 231.36 lo 590.88 227.28 lo 589.20 222.96 lo 588.00 218.64 lo 587.76 213.84 lo 588.00 209.28 lo 589.20 204.72 lo 590.88 200.40 lo 593.28 196.32 lo 596.40 192.48 lo 600.00 188.88 lo 604.08 185.52 lo 608.64 182.40 lo 613.68 179.76 lo 618.96 177.36 lo 624.96 175.20 lo 630.96 173.52 lo 637.44 172.32 lo 644.16 171.60 lo 651.12 171.36 lo 657.84 171.60 lo 664.56 172.32 lo 671.04 173.52 lo 677.28 175.20 lo 683.04 177.36 lo 688.32 179.76 lo 693.36 182.40 lo 697.92 185.52 lo 702.24 188.88 lo 705.60 192.48 lo 708.72 196.32 lo 711.12 200.40 lo 712.80 204.72 lo 714.00 209.28 lo 714.48 213.84 lo 714.00 218.64 lo 712.80 222.96 lo 711.12 227.28 lo 708.72 231.36 lo 705.60 235.44 lo 702.24 239.04 lo 697.92 242.40 lo 693.36 245.52 lo 688.32 248.16 lo 683.04 250.56 lo 677.28 252.72 lo 671.04 254.16 lo 664.56 255.36 lo 657.84 256.08 lo 651.12 256.32 lo 651.12 256.32 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 257.76 t 651.12 254.88 lo 644.16 254.64 lo 643.92 257.52 lo 651.12 257.76 lo 651.12 257.76 lo eofill st gr
+gs np 643.92 257.52 t 644.16 254.64 lo 637.68 253.92 lo 637.20 256.80 lo 643.92 257.52 lo 643.92 257.52 lo eofill st gr
+gs np 637.20 256.80 t 637.68 253.92 lo 631.44 252.72 lo 630.72 255.60 lo 637.20 256.80 lo 637.20 256.80 lo eofill st gr
+gs np 630.72 255.60 t 631.44 252.72 lo 625.20 251.28 lo 624.48 253.92 lo 630.72 255.60 lo 630.72 255.60 lo eofill st gr
+gs np 624.48 253.92 t 625.20 251.28 lo 619.68 249.36 lo 618.48 252.00 lo 624.48 253.92 lo 624.48 253.92 lo eofill st gr
+gs np 618.48 252.00 t 619.68 249.36 lo 614.40 246.96 lo 612.96 249.36 lo 618.48 252.00 lo 618.48 252.00 lo eofill st gr
+gs np 612.96 249.36 t 614.40 246.96 lo 609.36 244.32 lo 607.92 246.72 lo 612.96 249.36 lo 612.96 249.36 lo eofill st gr
+gs np 607.92 246.72 t 609.36 244.32 lo 604.80 241.20 lo 603.12 243.60 lo 607.92 246.72 lo 607.92 246.72 lo eofill st gr
+gs np 603.12 243.60 t 604.80 241.20 lo 600.96 237.84 lo 599.04 240.00 lo 603.12 243.60 lo 603.12 243.60 lo eofill st gr
+gs np 599.04 240.00 t 600.96 237.84 lo 597.36 234.48 lo 595.20 236.40 lo 599.04 240.00 lo 599.04 240.00 lo eofill st gr
+gs np 595.20 236.40 t 597.36 234.48 lo 594.48 230.64 lo 592.08 232.32 lo 595.20 236.40 lo 595.20 236.40 lo eofill st gr
+gs np 592.08 232.32 t 594.48 230.64 lo 592.08 226.56 lo 589.68 228.00 lo 592.08 232.32 lo 592.08 232.32 lo eofill st gr
+gs np 589.68 228.00 t 592.08 226.56 lo 590.40 222.72 lo 587.76 223.44 lo 589.68 228.00 lo 589.68 228.00 lo eofill st gr
+gs np 587.76 223.44 t 590.40 222.72 lo 589.44 218.40 lo 586.56 218.64 lo 587.76 223.44 lo 587.76 223.44 lo eofill st gr
+gs np 586.56 218.64 t 589.44 218.40 lo 589.20 213.84 lo 586.32 213.84 lo 586.56 218.64 lo 586.56 218.64 lo eofill st gr
+gs np 586.32 213.84 t 589.20 213.84 lo 589.44 209.52 lo 586.56 209.04 lo 586.32 213.84 lo 586.32 213.84 lo eofill st gr
+gs np 586.56 209.04 t 589.44 209.52 lo 590.40 205.20 lo 587.76 204.48 lo 586.56 209.04 lo 586.56 209.04 lo eofill st gr
+gs np 587.76 204.48 t 590.40 205.20 lo 592.32 201.12 lo 589.68 199.92 lo 587.76 204.48 lo 587.76 204.48 lo eofill st gr
+gs np 589.68 199.92 t 592.32 201.12 lo 594.48 197.28 lo 592.08 195.60 lo 589.68 199.92 lo 589.68 199.92 lo eofill st gr
+gs np 592.08 195.60 t 594.48 197.28 lo 597.36 193.44 lo 595.20 191.52 lo 592.08 195.60 lo 592.08 195.60 lo eofill st gr
+gs np 595.20 191.52 t 597.36 193.44 lo 600.96 189.84 lo 599.04 187.68 lo 595.20 191.52 lo 595.20 191.52 lo eofill st gr
+gs np 599.04 187.68 t 600.96 189.84 lo 604.80 186.72 lo 603.12 184.32 lo 599.04 187.68 lo 599.04 187.68 lo eofill st gr
+gs np 603.12 184.32 t 604.80 186.72 lo 609.36 183.60 lo 607.92 181.20 lo 603.12 184.32 lo 603.12 184.32 lo eofill st gr
+gs np 607.92 181.20 t 609.36 183.60 lo 614.16 180.96 lo 612.96 178.32 lo 607.92 181.20 lo 607.92 181.20 lo eofill st gr
+gs np 612.96 178.32 t 614.16 180.96 lo 619.68 178.56 lo 618.48 175.92 lo 612.96 178.32 lo 612.96 178.32 lo eofill st gr
+gs np 618.48 175.92 t 619.68 178.56 lo 625.20 176.64 lo 624.48 173.76 lo 618.48 175.92 lo 618.48 175.92 lo eofill st gr
+gs np 624.48 173.76 t 625.20 176.64 lo 631.44 174.96 lo 630.72 172.32 lo 624.48 173.76 lo 624.48 173.76 lo eofill st gr
+gs np 630.72 172.32 t 631.44 174.96 lo 637.68 173.76 lo 637.20 171.12 lo 630.72 172.32 lo 630.72 172.32 lo eofill st gr
+gs np 637.20 171.12 t 637.68 173.76 lo 644.16 173.04 lo 644.16 170.40 lo 637.20 171.12 lo 637.20 171.12 lo eofill st gr
+gs np 644.16 170.40 t 644.16 173.04 lo 651.12 172.80 lo 651.12 170.16 lo 644.16 170.40 lo 644.16 170.40 lo eofill st gr
+gs np 651.12 170.16 t 651.12 172.80 lo 657.84 173.04 lo 658.08 170.16 lo 651.12 170.16 lo 651.12 170.16 lo eofill st gr
+gs np 658.08 170.16 t 657.84 173.04 lo 664.32 173.76 lo 664.80 171.12 lo 658.08 170.16 lo 658.08 170.16 lo eofill st gr
+gs np 664.80 171.12 t 664.32 173.76 lo 670.80 174.96 lo 671.28 172.32 lo 664.80 171.12 lo 664.80 171.12 lo eofill st gr
+gs np 671.28 172.32 t 670.80 174.96 lo 676.80 176.64 lo 677.52 174.00 lo 671.28 172.32 lo 671.28 172.32 lo eofill st gr
+gs np 677.52 174.00 t 676.80 176.64 lo 682.56 178.56 lo 683.52 175.92 lo 677.52 174.00 lo 677.52 174.00 lo eofill st gr
+gs np 683.52 175.92 t 682.56 178.56 lo 687.84 180.96 lo 689.04 178.32 lo 683.52 175.92 lo 683.52 175.92 lo eofill st gr
+gs np 689.04 178.32 t 687.84 180.96 lo 692.64 183.60 lo 694.08 181.20 lo 689.04 178.32 lo 689.04 178.32 lo eofill st gr
+gs np 694.08 181.20 t 692.64 183.60 lo 697.20 186.72 lo 698.88 184.32 lo 694.08 181.20 lo 694.08 181.20 lo eofill st gr
+gs np 698.88 184.32 t 697.20 186.72 lo 701.28 189.84 lo 703.20 187.92 lo 698.88 184.32 lo 698.88 184.32 lo eofill st gr
+gs np 703.20 187.92 t 701.28 189.84 lo 704.64 193.44 lo 706.80 191.52 lo 703.20 187.92 lo 703.20 187.92 lo eofill st gr
+gs np 706.80 191.52 t 704.64 193.44 lo 707.52 197.28 lo 709.92 195.60 lo 706.80 191.52 lo 706.80 191.52 lo eofill st gr
+gs np 709.92 195.60 t 707.52 197.28 lo 709.92 201.12 lo 712.32 199.92 lo 709.92 195.60 lo 709.92 195.60 lo eofill st gr
+gs np 712.32 199.92 t 709.92 201.12 lo 711.60 205.20 lo 714.24 204.48 lo 712.32 199.92 lo 712.32 199.92 lo eofill st gr
+gs np 714.24 204.48 t 711.60 205.20 lo 712.56 209.52 lo 715.44 209.04 lo 714.24 204.48 lo 714.24 204.48 lo eofill st gr
+gs np 715.44 209.04 t 712.56 209.52 lo 713.04 213.84 lo 715.92 214.08 lo 715.44 209.04 lo 715.44 209.04 lo eofill st gr
+gs np 715.92 214.08 t 713.04 213.84 lo 712.56 218.40 lo 715.44 218.88 lo 715.92 214.08 lo 715.92 214.08 lo eofill st gr
+gs np 715.44 218.88 t 712.56 218.40 lo 711.60 222.48 lo 714.24 223.44 lo 715.44 218.88 lo 715.44 218.88 lo eofill st gr
+gs np 714.24 223.44 t 711.60 222.48 lo 709.92 226.80 lo 712.32 228.00 lo 714.24 223.44 lo 714.24 223.44 lo eofill st gr
+gs np 712.32 228.00 t 709.92 226.80 lo 707.52 230.64 lo 709.92 232.32 lo 712.32 228.00 lo 712.32 228.00 lo eofill st gr
+gs np 709.92 232.32 t 707.52 230.64 lo 704.64 234.48 lo 706.80 236.16 lo 709.92 232.32 lo 709.92 232.32 lo eofill st gr
+gs np 706.80 236.16 t 704.64 234.48 lo 701.28 237.84 lo 703.20 240.00 lo 706.80 236.16 lo 706.80 236.16 lo eofill st gr
+gs np 703.20 240.00 t 701.28 237.84 lo 697.20 241.20 lo 698.88 243.60 lo 703.20 240.00 lo 703.20 240.00 lo eofill st gr
+gs np 698.88 243.60 t 697.20 241.20 lo 692.64 244.32 lo 694.08 246.72 lo 698.88 243.60 lo 698.88 243.60 lo eofill st gr
+gs np 694.08 246.72 t 692.64 244.32 lo 687.84 246.96 lo 689.04 249.36 lo 694.08 246.72 lo 694.08 246.72 lo eofill st gr
+gs np 689.04 249.36 t 687.84 246.96 lo 682.56 249.36 lo 683.52 252.00 lo 689.04 249.36 lo 689.04 249.36 lo eofill st gr
+gs np 683.52 252.00 t 682.56 249.36 lo 676.80 251.28 lo 677.52 253.92 lo 683.52 252.00 lo 683.52 252.00 lo eofill st gr
+gs np 677.52 253.92 t 676.80 251.28 lo 670.80 252.72 lo 671.28 255.60 lo 677.52 253.92 lo 677.52 253.92 lo eofill st gr
+gs np 671.28 255.60 t 670.80 252.72 lo 664.32 253.92 lo 664.80 256.80 lo 671.28 255.60 lo 671.28 255.60 lo eofill st gr
+gs np 664.80 256.80 t 664.32 253.92 lo 657.84 254.64 lo 658.08 257.52 lo 664.80 256.80 lo 664.80 256.80 lo eofill st gr
+gs np 658.08 257.52 t 657.84 254.64 lo 651.12 254.88 lo 651.12 257.76 lo 658.08 257.52 lo 658.08 257.52 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 624.96 203.04 t 624.96 225.36 lo 677.52 225.36 lo 677.52 203.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4453412031> 624.96 221.04 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 650.88 434.40 t 644.16 434.16 lo 637.44 433.44 lo 630.96 432.24 lo 624.72 430.56 lo 618.96 428.64 lo 613.68 426.24 lo 608.64 423.36 lo 604.08 420.24 lo 599.76 416.88 lo 596.40 413.28 lo 593.28 409.44 lo 590.88 405.36 lo 589.20 401.04 lo 588.00 396.48 lo 587.76 391.92 lo 588.00 387.36 lo 589.20 382.80 lo 590.88 378.48 lo 593.28 374.40 lo 596.40 370.56 lo 599.76 366.72 lo 604.08 363.36 lo 608.64 360.48 lo 613.68 357.60 lo 618.96 355.20 lo 624.72 353.28 lo 630.96 351.60 lo 637.44 350.40 lo 644.16 349.68 lo 650.88 349.44 lo 657.84 349.68 lo 664.56 350.40 lo 671.04 351.60 lo 677.04 353.28 lo 683.04 355.20 lo 688.32 357.60 lo 693.36 360.48 lo 697.92 363.36 lo 702.00 366.72 lo 705.60 370.56 lo 708.72 374.40 lo 711.12 378.48 lo 712.80 382.80 lo 714.00 387.36 lo 714.24 391.92 lo 714.00 396.48 lo 712.80 401.04 lo 711.12 405.36 lo 708.72 409.44 lo 705.60 413.28 lo 702.00 416.88 lo 697.92 420.24 lo 693.36 423.36 lo 688.32 426.24 lo 683.04 428.64 lo 677.04 430.56 lo 671.04 432.24 lo 664.56 433.44 lo 657.84 434.16 lo 650.88 434.40 lo 650.88 434.40 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 650.88 435.84 t 650.88 432.96 lo 644.16 432.72 lo 643.92 435.60 lo 650.88 435.84 lo 650.88 435.84 lo eofill st gr
+gs np 643.92 435.60 t 644.16 432.72 lo 637.68 432.00 lo 637.20 434.88 lo 643.92 435.60 lo 643.92 435.60 lo eofill st gr
+gs np 637.20 434.88 t 637.68 432.00 lo 631.20 430.80 lo 630.72 433.68 lo 637.20 434.88 lo 637.20 434.88 lo eofill st gr
+gs np 630.72 433.68 t 631.20 430.80 lo 625.20 429.12 lo 624.48 432.00 lo 630.72 433.68 lo 630.72 433.68 lo eofill st gr
+gs np 624.48 432.00 t 625.20 429.12 lo 619.44 427.20 lo 618.48 429.84 lo 624.48 432.00 lo 624.48 432.00 lo eofill st gr
+gs np 618.48 429.84 t 619.44 427.20 lo 614.16 424.80 lo 612.96 427.44 lo 618.48 429.84 lo 618.48 429.84 lo eofill st gr
+gs np 612.96 427.44 t 614.16 424.80 lo 609.36 422.16 lo 607.92 424.56 lo 612.96 427.44 lo 612.96 427.44 lo eofill st gr
+gs np 607.92 424.56 t 609.36 422.16 lo 604.80 419.28 lo 603.12 421.44 lo 607.92 424.56 lo 607.92 424.56 lo eofill st gr
+gs np 603.12 421.44 t 604.80 419.28 lo 600.72 415.92 lo 598.80 418.08 lo 603.12 421.44 lo 603.12 421.44 lo eofill st gr
+gs np 598.80 418.08 t 600.72 415.92 lo 597.36 412.32 lo 595.20 414.24 lo 598.80 418.08 lo 598.80 418.08 lo eofill st gr
+gs np 595.20 414.24 t 597.36 412.32 lo 594.48 408.72 lo 592.08 410.16 lo 595.20 414.24 lo 595.20 414.24 lo eofill st gr
+gs np 592.08 410.16 t 594.48 408.72 lo 592.08 404.64 lo 589.68 405.84 lo 592.08 410.16 lo 592.08 410.16 lo eofill st gr
+gs np 589.68 405.84 t 592.08 404.64 lo 590.40 400.56 lo 587.76 401.52 lo 589.68 405.84 lo 589.68 405.84 lo eofill st gr
+gs np 587.76 401.52 t 590.40 400.56 lo 589.44 396.24 lo 586.56 396.72 lo 587.76 401.52 lo 587.76 401.52 lo eofill st gr
+gs np 586.56 396.72 t 589.44 396.24 lo 588.96 391.92 lo 586.32 391.92 lo 586.56 396.72 lo 586.56 396.72 lo eofill st gr
+gs np 586.32 391.92 t 588.96 391.92 lo 589.44 387.60 lo 586.56 387.12 lo 586.32 391.92 lo 586.32 391.92 lo eofill st gr
+gs np 586.56 387.12 t 589.44 387.60 lo 590.40 383.28 lo 587.76 382.32 lo 586.56 387.12 lo 586.56 387.12 lo eofill st gr
+gs np 587.76 382.32 t 590.40 383.28 lo 592.08 379.20 lo 589.68 377.76 lo 587.76 382.32 lo 587.76 382.32 lo eofill st gr
+gs np 589.68 377.76 t 592.08 379.20 lo 594.48 375.12 lo 592.08 373.68 lo 589.68 377.76 lo 589.68 377.76 lo eofill st gr
+gs np 592.08 373.68 t 594.48 375.12 lo 597.36 371.52 lo 595.20 369.60 lo 592.08 373.68 lo 592.08 373.68 lo eofill st gr
+gs np 595.20 369.60 t 597.36 371.52 lo 600.72 367.92 lo 598.80 365.76 lo 595.20 369.60 lo 595.20 369.60 lo eofill st gr
+gs np 598.80 365.76 t 600.72 367.92 lo 604.80 364.56 lo 603.12 362.40 lo 598.80 365.76 lo 598.80 365.76 lo eofill st gr
+gs np 603.12 362.40 t 604.80 364.56 lo 609.36 361.68 lo 607.92 359.28 lo 603.12 362.40 lo 603.12 362.40 lo eofill st gr
+gs np 607.92 359.28 t 609.36 361.68 lo 614.16 359.04 lo 612.96 356.40 lo 607.92 359.28 lo 607.92 359.28 lo eofill st gr
+gs np 612.96 356.40 t 614.16 359.04 lo 619.44 356.64 lo 618.48 354.00 lo 612.96 356.40 lo 612.96 356.40 lo eofill st gr
+gs np 618.48 354.00 t 619.44 356.64 lo 625.20 354.48 lo 624.48 351.84 lo 618.48 354.00 lo 618.48 354.00 lo eofill st gr
+gs np 624.48 351.84 t 625.20 354.48 lo 631.20 353.04 lo 630.72 350.16 lo 624.48 351.84 lo 624.48 351.84 lo eofill st gr
+gs np 630.72 350.16 t 631.20 353.04 lo 637.68 351.84 lo 637.20 348.96 lo 630.72 350.16 lo 630.72 350.16 lo eofill st gr
+gs np 637.20 348.96 t 637.68 351.84 lo 644.16 351.12 lo 643.92 348.24 lo 637.20 348.96 lo 637.20 348.96 lo eofill st gr
+gs np 643.92 348.24 t 644.16 351.12 lo 650.88 350.88 lo 651.12 348.00 lo 643.92 348.24 lo 643.92 348.24 lo eofill st gr
+gs np 651.12 348.00 t 650.88 350.88 lo 657.84 351.12 lo 657.84 348.24 lo 651.12 348.00 lo 651.12 348.00 lo eofill st gr
+gs np 657.84 348.24 t 657.84 351.12 lo 664.32 351.84 lo 664.80 348.96 lo 657.84 348.24 lo 657.84 348.24 lo eofill st gr
+gs np 664.80 348.96 t 664.32 351.84 lo 670.56 353.04 lo 671.28 350.16 lo 664.80 348.96 lo 664.80 348.96 lo eofill st gr
+gs np 671.28 350.16 t 670.56 353.04 lo 676.80 354.48 lo 677.52 351.84 lo 671.28 350.16 lo 671.28 350.16 lo eofill st gr
+gs np 677.52 351.84 t 676.80 354.48 lo 682.32 356.64 lo 683.52 354.00 lo 677.52 351.84 lo 677.52 351.84 lo eofill st gr
+gs np 683.52 354.00 t 682.32 356.64 lo 687.60 359.04 lo 689.04 356.40 lo 683.52 354.00 lo 683.52 354.00 lo eofill st gr
+gs np 689.04 356.40 t 687.60 359.04 lo 692.64 361.68 lo 694.08 359.04 lo 689.04 356.40 lo 689.04 356.40 lo eofill st gr
+gs np 694.08 359.04 t 692.64 361.68 lo 697.20 364.56 lo 698.88 362.40 lo 694.08 359.04 lo 694.08 359.04 lo eofill st gr
+gs np 698.88 362.40 t 697.20 364.56 lo 701.04 367.92 lo 702.96 365.76 lo 698.88 362.40 lo 698.88 362.40 lo eofill st gr
+gs np 702.96 365.76 t 701.04 367.92 lo 704.64 371.52 lo 706.80 369.60 lo 702.96 365.76 lo 702.96 365.76 lo eofill st gr
+gs np 706.80 369.60 t 704.64 371.52 lo 707.52 375.12 lo 709.92 373.68 lo 706.80 369.60 lo 706.80 369.60 lo eofill st gr
+gs np 709.92 373.68 t 707.52 375.12 lo 709.92 379.20 lo 712.32 377.76 lo 709.92 373.68 lo 709.92 373.68 lo eofill st gr
+gs np 712.32 377.76 t 709.92 379.20 lo 711.36 383.28 lo 714.24 382.32 lo 712.32 377.76 lo 712.32 377.76 lo eofill st gr
+gs np 714.24 382.32 t 711.36 383.28 lo 712.56 387.60 lo 715.20 387.12 lo 714.24 382.32 lo 714.24 382.32 lo eofill st gr
+gs np 715.20 387.12 t 712.56 387.60 lo 712.80 391.92 lo 715.68 391.92 lo 715.20 387.12 lo 715.20 387.12 lo eofill st gr
+gs np 715.68 391.92 t 712.80 391.92 lo 712.56 396.24 lo 715.44 396.72 lo 715.68 391.92 lo 715.68 391.92 lo eofill st gr
+gs np 715.44 396.72 t 712.56 396.24 lo 711.36 400.56 lo 714.24 401.52 lo 715.44 396.72 lo 715.44 396.72 lo eofill st gr
+gs np 714.24 401.52 t 711.36 400.56 lo 709.68 404.64 lo 712.32 405.84 lo 714.24 401.52 lo 714.24 401.52 lo eofill st gr
+gs np 712.32 405.84 t 709.68 404.64 lo 707.52 408.72 lo 709.92 410.16 lo 712.32 405.84 lo 712.32 405.84 lo eofill st gr
+gs np 709.92 410.16 t 707.52 408.72 lo 704.64 412.32 lo 706.80 414.24 lo 709.92 410.16 lo 709.92 410.16 lo eofill st gr
+gs np 706.80 414.24 t 704.64 412.32 lo 701.04 415.92 lo 702.96 418.08 lo 706.80 414.24 lo 706.80 414.24 lo eofill st gr
+gs np 702.96 418.08 t 701.04 415.92 lo 697.20 419.28 lo 698.88 421.44 lo 702.96 418.08 lo 702.96 418.08 lo eofill st gr
+gs np 698.88 421.44 t 697.20 419.28 lo 692.64 422.16 lo 694.08 424.56 lo 698.88 421.44 lo 698.88 421.44 lo eofill st gr
+gs np 694.08 424.56 t 692.64 422.16 lo 687.84 424.80 lo 689.04 427.44 lo 694.08 424.56 lo 694.08 424.56 lo eofill st gr
+gs np 689.04 427.44 t 687.84 424.80 lo 682.32 427.20 lo 683.52 429.84 lo 689.04 427.44 lo 689.04 427.44 lo eofill st gr
+gs np 683.52 429.84 t 682.32 427.20 lo 676.80 429.12 lo 677.52 432.00 lo 683.52 429.84 lo 683.52 429.84 lo eofill st gr
+gs np 677.52 432.00 t 676.80 429.12 lo 670.56 430.80 lo 671.28 433.44 lo 677.52 432.00 lo 677.52 432.00 lo eofill st gr
+gs np 671.28 433.44 t 670.56 430.80 lo 664.32 432.00 lo 664.80 434.88 lo 671.28 433.44 lo 671.28 433.44 lo eofill st gr
+gs np 664.80 434.88 t 664.32 432.00 lo 657.84 432.72 lo 657.84 435.60 lo 664.80 434.88 lo 664.80 434.88 lo eofill st gr
+gs np 657.84 435.60 t 657.84 432.72 lo 650.88 432.96 lo 650.88 435.84 lo 657.84 435.60 lo 657.84 435.60 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 624.96 381.12 t 624.96 403.20 lo 677.52 403.20 lo 677.52 381.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4453412032> 624.96 399.12 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 280.08 185.52 t 363.36 185.52 lo 363.36 236.40 lo 280.08 236.40 lo 280.08 185.52 lo 280.08 185.52 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 278.64 184.32 t 281.52 186.96 lo 362.16 186.96 lo 364.80 184.32 lo 278.64 184.32 lo 278.64 184.32 lo eofill st gr
+gs np 364.80 184.32 t 362.16 186.96 lo 362.16 234.96 lo 364.80 237.60 lo 364.80 184.32 lo 364.80 184.32 lo eofill st gr
+gs np 364.80 237.60 t 362.16 234.96 lo 281.52 234.96 lo 278.64 237.60 lo 364.80 237.60 lo 364.80 237.60 lo eofill st gr
+gs np 278.64 237.60 t 281.52 234.96 lo 281.52 186.96 lo 278.64 184.32 lo 278.64 237.60 lo 278.64 237.60 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 287.28 200.16 t 287.28 222.24 lo 356.64 222.24 lo 356.64 200.16 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<545745422041> 287.28 218.16 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 540.24 210.24 t 540.24 213.12 lo 569.76 213.12 lo 569.76 210.24 lo 540.24 210.24 lo 540.24 210.24 lo eofill st gr
+gs np 529.68 211.68 t 542.40 216.00 lo 542.40 207.36 lo 529.68 211.68 lo eofill st gr
+gs np 580.32 211.68 t 567.60 207.36 lo 567.60 216.00 lo 580.32 211.68 lo eofill st gr
+gs np 384.00 208.56 t 384.00 211.20 lo 413.76 211.20 lo 413.76 208.56 lo 384.00 208.56 lo 384.00 208.56 lo eofill st gr
+gs np 373.44 209.76 t 386.40 214.08 lo 386.40 205.68 lo 373.44 209.76 lo eofill st gr
+gs np 424.32 209.76 t 411.36 205.68 lo 411.36 214.08 lo 424.32 209.76 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 112.32 365.04 t 198.72 365.04 lo 198.72 418.80 lo 112.32 418.80 lo 112.32 365.04 lo 112.32 365.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 110.88 363.84 t 113.76 366.48 lo 197.52 366.48 lo 200.16 363.84 lo 110.88 363.84 lo 110.88 363.84 lo eofill st gr
+gs np 200.16 363.84 t 197.52 366.48 lo 197.52 417.36 lo 200.16 420.24 lo 200.16 363.84 lo 200.16 363.84 lo eofill st gr
+gs np 200.16 420.24 t 197.52 417.36 lo 113.76 417.36 lo 110.88 420.24 lo 200.16 420.24 lo 200.16 420.24 lo eofill st gr
+gs np 110.88 420.24 t 113.76 417.36 lo 113.76 366.48 lo 110.88 363.84 lo 110.88 420.24 lo 110.88 420.24 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 122.40 381.12 t 122.40 403.44 lo 189.12 403.44 lo 189.12 381.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<42726f77736572> 122.40 399.12 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 276.96 366.72 t 360.48 366.72 lo 360.48 417.36 lo 276.96 417.36 lo 276.96 366.72 lo 276.96 366.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 275.52 365.28 t 278.40 368.16 lo 359.04 368.16 lo 361.92 365.28 lo 275.52 365.28 lo 275.52 365.28 lo eofill st gr
+gs np 361.92 365.28 t 359.04 368.16 lo 359.04 415.92 lo 361.92 418.80 lo 361.92 365.28 lo 361.92 365.28 lo eofill st gr
+gs np 361.92 418.80 t 359.04 415.92 lo 278.40 415.92 lo 275.52 418.80 lo 361.92 418.80 lo 361.92 418.80 lo eofill st gr
+gs np 275.52 418.80 t 278.40 415.92 lo 278.40 368.16 lo 275.52 365.28 lo 275.52 418.80 lo 275.52 418.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 284.16 381.12 t 284.16 403.20 lo 353.76 403.20 lo 353.76 381.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<545745422042> 284.16 399.12 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 215.52 339.12 t 217.92 340.80 lo 269.28 264.48 lo 266.88 262.80 lo 215.52 339.12 lo 215.52 339.12 lo eofill st gr
+gs np 210.72 348.72 t 221.52 340.56 lo 214.32 335.76 lo 210.72 348.72 lo eofill st gr
+gs np 274.08 254.88 t 263.28 263.04 lo 270.48 267.84 lo 274.08 254.88 lo eofill st gr
+gs np 129.84 292.56 t 129.84 295.44 lo 226.32 295.92 lo 226.32 293.04 lo 129.84 292.56 lo 129.84 292.56 lo eofill st gr
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 4 4
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<34> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<5457454220476174657761792d537769746368696e6720696e205072696e6369706c65204949> 155.28 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 660.72 293.76 t 660.72 296.64 lo 721.20 295.92 lo 721.20 293.04 lo 660.72 293.76 lo 660.72 293.76 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 110.88 255.60 t 110.88 277.92 lo 158.40 277.92 lo 158.40 255.60 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4f72672041> 110.88 273.60 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 112.32 318.24 t 112.32 340.56 lo 159.84 340.56 lo 159.84 318.24 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4f72672042> 112.32 336.24 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 437.28 187.92 t 518.40 187.92 lo 518.40 235.44 lo 437.28 235.44 lo 437.28 187.92 lo 437.28 187.92 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 435.84 186.48 t 438.72 189.36 lo 516.96 189.36 lo 519.84 186.48 lo 435.84 186.48 lo 435.84 186.48 lo eofill st gr
+gs np 519.84 186.48 t 516.96 189.36 lo 516.96 234.00 lo 519.84 236.88 lo 519.84 186.48 lo 519.84 186.48 lo eofill st gr
+gs np 519.84 236.88 t 516.96 234.00 lo 438.72 234.00 lo 435.84 236.88 lo 519.84 236.88 lo 519.84 236.88 lo eofill st gr
+gs np 435.84 236.88 t 438.72 234.00 lo 438.72 189.36 lo 435.84 186.48 lo 435.84 236.88 lo 435.84 236.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 447.84 200.88 t 447.84 222.96 lo 508.32 222.96 lo 508.32 200.88 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4c44415044> 447.84 218.88 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 439.44 368.88 t 520.56 368.88 lo 520.56 416.40 lo 439.44 416.40 lo 439.44 368.88 lo 439.44 368.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 438.00 367.44 t 440.88 370.32 lo 519.12 370.32 lo 522.00 367.44 lo 438.00 367.44 lo 438.00 367.44 lo eofill st gr
+gs np 522.00 367.44 t 519.12 370.32 lo 519.12 414.96 lo 522.00 417.84 lo 522.00 367.44 lo 522.00 367.44 lo eofill st gr
+gs np 522.00 417.84 t 519.12 414.96 lo 440.88 414.96 lo 438.00 417.84 lo 522.00 417.84 lo 522.00 417.84 lo eofill st gr
+gs np 438.00 417.84 t 440.88 414.96 lo 440.88 370.32 lo 438.00 367.44 lo 438.00 417.84 lo 438.00 417.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 450.00 381.84 t 450.00 403.92 lo 510.48 403.92 lo 510.48 381.84 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4c44415044> 450.00 399.84 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 256.32 t 644.16 256.08 lo 637.44 255.36 lo 630.96 254.16 lo 624.96 252.72 lo 618.96 250.56 lo 613.68 248.16 lo 608.64 245.52 lo 604.08 242.40 lo 600.00 239.04 lo 596.40 235.44 lo 593.28 231.36 lo 590.88 227.28 lo 589.20 222.96 lo 588.00 218.64 lo 587.76 213.84 lo 588.00 209.28 lo 589.20 204.72 lo 590.88 200.40 lo 593.28 196.32 lo 596.40 192.48 lo 600.00 188.88 lo 604.08 185.52 lo 608.64 182.40 lo 613.68 179.76 lo 618.96 177.36 lo 624.96 175.20 lo 630.96 173.52 lo 637.44 172.32 lo 644.16 171.60 lo 651.12 171.36 lo 657.84 171.60 lo 664.56 172.32 lo 671.04 173.52 lo 677.28 175.20 lo 683.04 177.36 lo 688.32 179.76 lo 693.36 182.40 lo 697.92 185.52 lo 702.24 188.88 lo 705.60 192.48 lo 708.72 196.32 lo 711.12 200.40 lo 712.80 204.72 lo 714.00 209.28 lo 714.48 213.84 lo 714.00 218.64 lo 712.80 222.96 lo 711.12 227.28 lo 708.72 231.36 lo 705.60 235.44 lo 702.24 239.04 lo 697.92 242.40 lo 693.36 245.52 lo 688.32 248.16 lo 683.04 250.56 lo 677.28 252.72 lo 671.04 254.16 lo 664.56 255.36 lo 657.84 256.08 lo 651.12 256.32 lo 651.12 256.32 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 257.76 t 651.12 254.88 lo 644.16 254.64 lo 643.92 257.52 lo 651.12 257.76 lo 651.12 257.76 lo eofill st gr
+gs np 643.92 257.52 t 644.16 254.64 lo 637.68 253.92 lo 637.20 256.80 lo 643.92 257.52 lo 643.92 257.52 lo eofill st gr
+gs np 637.20 256.80 t 637.68 253.92 lo 631.44 252.72 lo 630.72 255.60 lo 637.20 256.80 lo 637.20 256.80 lo eofill st gr
+gs np 630.72 255.60 t 631.44 252.72 lo 625.20 251.28 lo 624.48 253.92 lo 630.72 255.60 lo 630.72 255.60 lo eofill st gr
+gs np 624.48 253.92 t 625.20 251.28 lo 619.68 249.36 lo 618.48 252.00 lo 624.48 253.92 lo 624.48 253.92 lo eofill st gr
+gs np 618.48 252.00 t 619.68 249.36 lo 614.40 246.96 lo 612.96 249.36 lo 618.48 252.00 lo 618.48 252.00 lo eofill st gr
+gs np 612.96 249.36 t 614.40 246.96 lo 609.36 244.32 lo 607.92 246.72 lo 612.96 249.36 lo 612.96 249.36 lo eofill st gr
+gs np 607.92 246.72 t 609.36 244.32 lo 604.80 241.20 lo 603.12 243.60 lo 607.92 246.72 lo 607.92 246.72 lo eofill st gr
+gs np 603.12 243.60 t 604.80 241.20 lo 600.96 237.84 lo 599.04 240.00 lo 603.12 243.60 lo 603.12 243.60 lo eofill st gr
+gs np 599.04 240.00 t 600.96 237.84 lo 597.36 234.48 lo 595.20 236.40 lo 599.04 240.00 lo 599.04 240.00 lo eofill st gr
+gs np 595.20 236.40 t 597.36 234.48 lo 594.48 230.64 lo 592.08 232.32 lo 595.20 236.40 lo 595.20 236.40 lo eofill st gr
+gs np 592.08 232.32 t 594.48 230.64 lo 592.08 226.56 lo 589.68 228.00 lo 592.08 232.32 lo 592.08 232.32 lo eofill st gr
+gs np 589.68 228.00 t 592.08 226.56 lo 590.40 222.72 lo 587.76 223.44 lo 589.68 228.00 lo 589.68 228.00 lo eofill st gr
+gs np 587.76 223.44 t 590.40 222.72 lo 589.44 218.40 lo 586.56 218.64 lo 587.76 223.44 lo 587.76 223.44 lo eofill st gr
+gs np 586.56 218.64 t 589.44 218.40 lo 589.20 213.84 lo 586.32 213.84 lo 586.56 218.64 lo 586.56 218.64 lo eofill st gr
+gs np 586.32 213.84 t 589.20 213.84 lo 589.44 209.52 lo 586.56 209.04 lo 586.32 213.84 lo 586.32 213.84 lo eofill st gr
+gs np 586.56 209.04 t 589.44 209.52 lo 590.40 205.20 lo 587.76 204.48 lo 586.56 209.04 lo 586.56 209.04 lo eofill st gr
+gs np 587.76 204.48 t 590.40 205.20 lo 592.32 201.12 lo 589.68 199.92 lo 587.76 204.48 lo 587.76 204.48 lo eofill st gr
+gs np 589.68 199.92 t 592.32 201.12 lo 594.48 197.28 lo 592.08 195.60 lo 589.68 199.92 lo 589.68 199.92 lo eofill st gr
+gs np 592.08 195.60 t 594.48 197.28 lo 597.36 193.44 lo 595.20 191.52 lo 592.08 195.60 lo 592.08 195.60 lo eofill st gr
+gs np 595.20 191.52 t 597.36 193.44 lo 600.96 189.84 lo 599.04 187.68 lo 595.20 191.52 lo 595.20 191.52 lo eofill st gr
+gs np 599.04 187.68 t 600.96 189.84 lo 604.80 186.72 lo 603.12 184.32 lo 599.04 187.68 lo 599.04 187.68 lo eofill st gr
+gs np 603.12 184.32 t 604.80 186.72 lo 609.36 183.60 lo 607.92 181.20 lo 603.12 184.32 lo 603.12 184.32 lo eofill st gr
+gs np 607.92 181.20 t 609.36 183.60 lo 614.16 180.96 lo 612.96 178.32 lo 607.92 181.20 lo 607.92 181.20 lo eofill st gr
+gs np 612.96 178.32 t 614.16 180.96 lo 619.68 178.56 lo 618.48 175.92 lo 612.96 178.32 lo 612.96 178.32 lo eofill st gr
+gs np 618.48 175.92 t 619.68 178.56 lo 625.20 176.64 lo 624.48 173.76 lo 618.48 175.92 lo 618.48 175.92 lo eofill st gr
+gs np 624.48 173.76 t 625.20 176.64 lo 631.44 174.96 lo 630.72 172.32 lo 624.48 173.76 lo 624.48 173.76 lo eofill st gr
+gs np 630.72 172.32 t 631.44 174.96 lo 637.68 173.76 lo 637.20 171.12 lo 630.72 172.32 lo 630.72 172.32 lo eofill st gr
+gs np 637.20 171.12 t 637.68 173.76 lo 644.16 173.04 lo 644.16 170.40 lo 637.20 171.12 lo 637.20 171.12 lo eofill st gr
+gs np 644.16 170.40 t 644.16 173.04 lo 651.12 172.80 lo 651.12 170.16 lo 644.16 170.40 lo 644.16 170.40 lo eofill st gr
+gs np 651.12 170.16 t 651.12 172.80 lo 657.84 173.04 lo 658.08 170.16 lo 651.12 170.16 lo 651.12 170.16 lo eofill st gr
+gs np 658.08 170.16 t 657.84 173.04 lo 664.32 173.76 lo 664.80 171.12 lo 658.08 170.16 lo 658.08 170.16 lo eofill st gr
+gs np 664.80 171.12 t 664.32 173.76 lo 670.80 174.96 lo 671.28 172.32 lo 664.80 171.12 lo 664.80 171.12 lo eofill st gr
+gs np 671.28 172.32 t 670.80 174.96 lo 676.80 176.64 lo 677.52 174.00 lo 671.28 172.32 lo 671.28 172.32 lo eofill st gr
+gs np 677.52 174.00 t 676.80 176.64 lo 682.56 178.56 lo 683.52 175.92 lo 677.52 174.00 lo 677.52 174.00 lo eofill st gr
+gs np 683.52 175.92 t 682.56 178.56 lo 687.84 180.96 lo 689.04 178.32 lo 683.52 175.92 lo 683.52 175.92 lo eofill st gr
+gs np 689.04 178.32 t 687.84 180.96 lo 692.64 183.60 lo 694.08 181.20 lo 689.04 178.32 lo 689.04 178.32 lo eofill st gr
+gs np 694.08 181.20 t 692.64 183.60 lo 697.20 186.72 lo 698.88 184.32 lo 694.08 181.20 lo 694.08 181.20 lo eofill st gr
+gs np 698.88 184.32 t 697.20 186.72 lo 701.28 189.84 lo 703.20 187.92 lo 698.88 184.32 lo 698.88 184.32 lo eofill st gr
+gs np 703.20 187.92 t 701.28 189.84 lo 704.64 193.44 lo 706.80 191.52 lo 703.20 187.92 lo 703.20 187.92 lo eofill st gr
+gs np 706.80 191.52 t 704.64 193.44 lo 707.52 197.28 lo 709.92 195.60 lo 706.80 191.52 lo 706.80 191.52 lo eofill st gr
+gs np 709.92 195.60 t 707.52 197.28 lo 709.92 201.12 lo 712.32 199.92 lo 709.92 195.60 lo 709.92 195.60 lo eofill st gr
+gs np 712.32 199.92 t 709.92 201.12 lo 711.60 205.20 lo 714.24 204.48 lo 712.32 199.92 lo 712.32 199.92 lo eofill st gr
+gs np 714.24 204.48 t 711.60 205.20 lo 712.56 209.52 lo 715.44 209.04 lo 714.24 204.48 lo 714.24 204.48 lo eofill st gr
+gs np 715.44 209.04 t 712.56 209.52 lo 713.04 213.84 lo 715.92 214.08 lo 715.44 209.04 lo 715.44 209.04 lo eofill st gr
+gs np 715.92 214.08 t 713.04 213.84 lo 712.56 218.40 lo 715.44 218.88 lo 715.92 214.08 lo 715.92 214.08 lo eofill st gr
+gs np 715.44 218.88 t 712.56 218.40 lo 711.60 222.48 lo 714.24 223.44 lo 715.44 218.88 lo 715.44 218.88 lo eofill st gr
+gs np 714.24 223.44 t 711.60 222.48 lo 709.92 226.80 lo 712.32 228.00 lo 714.24 223.44 lo 714.24 223.44 lo eofill st gr
+gs np 712.32 228.00 t 709.92 226.80 lo 707.52 230.64 lo 709.92 232.32 lo 712.32 228.00 lo 712.32 228.00 lo eofill st gr
+gs np 709.92 232.32 t 707.52 230.64 lo 704.64 234.48 lo 706.80 236.16 lo 709.92 232.32 lo 709.92 232.32 lo eofill st gr
+gs np 706.80 236.16 t 704.64 234.48 lo 701.28 237.84 lo 703.20 240.00 lo 706.80 236.16 lo 706.80 236.16 lo eofill st gr
+gs np 703.20 240.00 t 701.28 237.84 lo 697.20 241.20 lo 698.88 243.60 lo 703.20 240.00 lo 703.20 240.00 lo eofill st gr
+gs np 698.88 243.60 t 697.20 241.20 lo 692.64 244.32 lo 694.08 246.72 lo 698.88 243.60 lo 698.88 243.60 lo eofill st gr
+gs np 694.08 246.72 t 692.64 244.32 lo 687.84 246.96 lo 689.04 249.36 lo 694.08 246.72 lo 694.08 246.72 lo eofill st gr
+gs np 689.04 249.36 t 687.84 246.96 lo 682.56 249.36 lo 683.52 252.00 lo 689.04 249.36 lo 689.04 249.36 lo eofill st gr
+gs np 683.52 252.00 t 682.56 249.36 lo 676.80 251.28 lo 677.52 253.92 lo 683.52 252.00 lo 683.52 252.00 lo eofill st gr
+gs np 677.52 253.92 t 676.80 251.28 lo 670.80 252.72 lo 671.28 255.60 lo 677.52 253.92 lo 677.52 253.92 lo eofill st gr
+gs np 671.28 255.60 t 670.80 252.72 lo 664.32 253.92 lo 664.80 256.80 lo 671.28 255.60 lo 671.28 255.60 lo eofill st gr
+gs np 664.80 256.80 t 664.32 253.92 lo 657.84 254.64 lo 658.08 257.52 lo 664.80 256.80 lo 664.80 256.80 lo eofill st gr
+gs np 658.08 257.52 t 657.84 254.64 lo 651.12 254.88 lo 651.12 257.76 lo 658.08 257.52 lo 658.08 257.52 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 624.96 203.04 t 624.96 225.36 lo 677.52 225.36 lo 677.52 203.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4453412031> 624.96 221.04 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 435.84 t 644.16 435.60 lo 637.44 434.88 lo 630.96 433.68 lo 624.96 432.00 lo 618.96 430.08 lo 613.68 427.68 lo 608.64 424.80 lo 604.08 421.92 lo 599.76 418.56 lo 596.40 414.72 lo 593.28 410.88 lo 590.88 406.80 lo 589.20 402.48 lo 588.00 397.92 lo 587.76 393.36 lo 588.00 388.80 lo 589.20 384.24 lo 590.88 379.92 lo 593.28 375.84 lo 596.40 372.00 lo 599.76 368.40 lo 604.08 365.04 lo 608.64 361.92 lo 613.68 359.04 lo 618.96 356.64 lo 624.96 354.72 lo 630.96 353.04 lo 637.44 351.84 lo 644.16 351.12 lo 651.12 350.88 lo 657.84 351.12 lo 664.56 351.84 lo 671.04 353.04 lo 677.04 354.72 lo 683.04 356.64 lo 688.32 359.04 lo 693.36 361.92 lo 697.92 365.04 lo 702.24 368.40 lo 705.60 372.00 lo 708.72 375.84 lo 711.12 379.92 lo 712.80 384.24 lo 714.00 388.80 lo 714.24 393.36 lo 714.00 397.92 lo 712.80 402.48 lo 711.12 406.80 lo 708.72 410.88 lo 705.60 414.72 lo 702.24 418.56 lo 697.92 421.92 lo 693.36 424.80 lo 688.32 427.68 lo 683.04 430.08 lo 677.04 432.00 lo 671.04 433.68 lo 664.56 434.88 lo 657.84 435.60 lo 651.12 435.84 lo 651.12 435.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 437.28 t 651.12 434.40 lo 644.16 434.16 lo 643.92 437.04 lo 651.12 437.28 lo 651.12 437.28 lo eofill st gr
+gs np 643.92 437.04 t 644.16 434.16 lo 637.68 433.44 lo 637.20 436.32 lo 643.92 437.04 lo 643.92 437.04 lo eofill st gr
+gs np 637.20 436.32 t 637.68 433.44 lo 631.20 432.24 lo 630.72 435.12 lo 637.20 436.32 lo 637.20 436.32 lo eofill st gr
+gs np 630.72 435.12 t 631.20 432.24 lo 625.20 430.80 lo 624.48 433.44 lo 630.72 435.12 lo 630.72 435.12 lo eofill st gr
+gs np 624.48 433.44 t 625.20 430.80 lo 619.68 428.64 lo 618.48 431.28 lo 624.48 433.44 lo 624.48 433.44 lo eofill st gr
+gs np 618.48 431.28 t 619.68 428.64 lo 614.16 426.24 lo 612.96 428.88 lo 618.48 431.28 lo 618.48 431.28 lo eofill st gr
+gs np 612.96 428.88 t 614.16 426.24 lo 609.36 423.60 lo 607.92 426.24 lo 612.96 428.88 lo 612.96 428.88 lo eofill st gr
+gs np 607.92 426.24 t 609.36 423.60 lo 604.80 420.72 lo 603.12 422.88 lo 607.92 426.24 lo 607.92 426.24 lo eofill st gr
+gs np 603.12 422.88 t 604.80 420.72 lo 600.96 417.36 lo 599.04 419.52 lo 603.12 422.88 lo 603.12 422.88 lo eofill st gr
+gs np 599.04 419.52 t 600.96 417.36 lo 597.36 413.76 lo 595.20 415.68 lo 599.04 419.52 lo 599.04 419.52 lo eofill st gr
+gs np 595.20 415.68 t 597.36 413.76 lo 594.48 410.16 lo 592.08 411.60 lo 595.20 415.68 lo 595.20 415.68 lo eofill st gr
+gs np 592.08 411.60 t 594.48 410.16 lo 592.08 406.08 lo 589.68 407.52 lo 592.08 411.60 lo 592.08 411.60 lo eofill st gr
+gs np 589.68 407.52 t 592.08 406.08 lo 590.40 402.00 lo 587.76 402.96 lo 589.68 407.52 lo 589.68 407.52 lo eofill st gr
+gs np 587.76 402.96 t 590.40 402.00 lo 589.44 397.68 lo 586.56 398.16 lo 587.76 402.96 lo 587.76 402.96 lo eofill st gr
+gs np 586.56 398.16 t 589.44 397.68 lo 589.20 393.36 lo 586.32 393.36 lo 586.56 398.16 lo 586.56 398.16 lo eofill st gr
+gs np 586.32 393.36 t 589.20 393.36 lo 589.44 389.04 lo 586.56 388.56 lo 586.32 393.36 lo 586.32 393.36 lo eofill st gr
+gs np 586.56 388.56 t 589.44 389.04 lo 590.40 384.72 lo 587.76 383.76 lo 586.56 388.56 lo 586.56 388.56 lo eofill st gr
+gs np 587.76 383.76 t 590.40 384.72 lo 592.08 380.64 lo 589.68 379.44 lo 587.76 383.76 lo 587.76 383.76 lo eofill st gr
+gs np 589.68 379.44 t 592.08 380.64 lo 594.48 376.56 lo 592.08 375.12 lo 589.68 379.44 lo 589.68 379.44 lo eofill st gr
+gs np 592.08 375.12 t 594.48 376.56 lo 597.36 372.96 lo 595.20 371.04 lo 592.08 375.12 lo 592.08 375.12 lo eofill st gr
+gs np 595.20 371.04 t 597.36 372.96 lo 600.96 369.36 lo 598.80 367.20 lo 595.20 371.04 lo 595.20 371.04 lo eofill st gr
+gs np 598.80 367.20 t 600.96 369.36 lo 604.80 366.00 lo 603.12 363.84 lo 598.80 367.20 lo 598.80 367.20 lo eofill st gr
+gs np 603.12 363.84 t 604.80 366.00 lo 609.36 363.12 lo 607.92 360.72 lo 603.12 363.84 lo 603.12 363.84 lo eofill st gr
+gs np 607.92 360.72 t 609.36 363.12 lo 614.16 360.48 lo 612.96 357.84 lo 607.92 360.72 lo 607.92 360.72 lo eofill st gr
+gs np 612.96 357.84 t 614.16 360.48 lo 619.68 358.08 lo 618.48 355.44 lo 612.96 357.84 lo 612.96 357.84 lo eofill st gr
+gs np 618.48 355.44 t 619.68 358.08 lo 625.20 356.16 lo 624.48 353.28 lo 618.48 355.44 lo 618.48 355.44 lo eofill st gr
+gs np 624.48 353.28 t 625.20 356.16 lo 631.20 354.48 lo 630.72 351.84 lo 624.48 353.28 lo 624.48 353.28 lo eofill st gr
+gs np 630.72 351.84 t 631.20 354.48 lo 637.68 353.28 lo 637.20 350.40 lo 630.72 351.84 lo 630.72 351.84 lo eofill st gr
+gs np 637.20 350.40 t 637.68 353.28 lo 644.16 352.56 lo 643.92 349.68 lo 637.20 350.40 lo 637.20 350.40 lo eofill st gr
+gs np 643.92 349.68 t 644.16 352.56 lo 651.12 352.32 lo 651.12 349.44 lo 643.92 349.68 lo 643.92 349.68 lo eofill st gr
+gs np 651.12 349.44 t 651.12 352.32 lo 657.84 352.56 lo 658.08 349.68 lo 651.12 349.44 lo 651.12 349.44 lo eofill st gr
+gs np 658.08 349.68 t 657.84 352.56 lo 664.32 353.28 lo 664.80 350.40 lo 658.08 349.68 lo 658.08 349.68 lo eofill st gr
+gs np 664.80 350.40 t 664.32 353.28 lo 670.80 354.48 lo 671.28 351.60 lo 664.80 350.40 lo 664.80 350.40 lo eofill st gr
+gs np 671.28 351.60 t 670.80 354.48 lo 676.80 356.16 lo 677.52 353.28 lo 671.28 351.60 lo 671.28 351.60 lo eofill st gr
+gs np 677.52 353.28 t 676.80 356.16 lo 682.32 358.08 lo 683.52 355.44 lo 677.52 353.28 lo 677.52 353.28 lo eofill st gr
+gs np 683.52 355.44 t 682.32 358.08 lo 687.84 360.48 lo 689.04 357.84 lo 683.52 355.44 lo 683.52 355.44 lo eofill st gr
+gs np 689.04 357.84 t 687.84 360.48 lo 692.64 363.12 lo 694.08 360.72 lo 689.04 357.84 lo 689.04 357.84 lo eofill st gr
+gs np 694.08 360.72 t 692.64 363.12 lo 697.20 366.00 lo 698.88 363.84 lo 694.08 360.72 lo 694.08 360.72 lo eofill st gr
+gs np 698.88 363.84 t 697.20 366.00 lo 701.04 369.36 lo 702.96 367.20 lo 698.88 363.84 lo 698.88 363.84 lo eofill st gr
+gs np 702.96 367.20 t 701.04 369.36 lo 704.64 372.96 lo 706.80 371.04 lo 702.96 367.20 lo 702.96 367.20 lo eofill st gr
+gs np 706.80 371.04 t 704.64 372.96 lo 707.52 376.56 lo 709.92 375.12 lo 706.80 371.04 lo 706.80 371.04 lo eofill st gr
+gs np 709.92 375.12 t 707.52 376.56 lo 709.92 380.64 lo 712.32 379.44 lo 709.92 375.12 lo 709.92 375.12 lo eofill st gr
+gs np 712.32 379.44 t 709.92 380.64 lo 711.60 384.72 lo 714.24 383.76 lo 712.32 379.44 lo 712.32 379.44 lo eofill st gr
+gs np 714.24 383.76 t 711.60 384.72 lo 712.56 389.04 lo 715.44 388.56 lo 714.24 383.76 lo 714.24 383.76 lo eofill st gr
+gs np 715.44 388.56 t 712.56 389.04 lo 713.04 393.36 lo 715.68 393.36 lo 715.44 388.56 lo 715.44 388.56 lo eofill st gr
+gs np 715.68 393.36 t 713.04 393.36 lo 712.56 397.68 lo 715.44 398.16 lo 715.68 393.36 lo 715.68 393.36 lo eofill st gr
+gs np 715.44 398.16 t 712.56 397.68 lo 711.60 402.00 lo 714.24 402.96 lo 715.44 398.16 lo 715.44 398.16 lo eofill st gr
+gs np 714.24 402.96 t 711.60 402.00 lo 709.92 406.08 lo 712.32 407.52 lo 714.24 402.96 lo 714.24 402.96 lo eofill st gr
+gs np 712.32 407.52 t 709.92 406.08 lo 707.52 410.16 lo 709.92 411.60 lo 712.32 407.52 lo 712.32 407.52 lo eofill st gr
+gs np 709.92 411.60 t 707.52 410.16 lo 704.64 413.76 lo 706.80 415.68 lo 709.92 411.60 lo 709.92 411.60 lo eofill st gr
+gs np 706.80 415.68 t 704.64 413.76 lo 701.04 417.36 lo 703.20 419.52 lo 706.80 415.68 lo 706.80 415.68 lo eofill st gr
+gs np 703.20 419.52 t 701.04 417.36 lo 697.20 420.72 lo 698.88 422.88 lo 703.20 419.52 lo 703.20 419.52 lo eofill st gr
+gs np 698.88 422.88 t 697.20 420.72 lo 692.64 423.60 lo 694.08 426.00 lo 698.88 422.88 lo 698.88 422.88 lo eofill st gr
+gs np 694.08 426.00 t 692.64 423.60 lo 687.84 426.24 lo 689.04 428.88 lo 694.08 426.00 lo 694.08 426.00 lo eofill st gr
+gs np 689.04 428.88 t 687.84 426.24 lo 682.32 428.64 lo 683.52 431.28 lo 689.04 428.88 lo 689.04 428.88 lo eofill st gr
+gs np 683.52 431.28 t 682.32 428.64 lo 676.80 430.80 lo 677.52 433.44 lo 683.52 431.28 lo 683.52 431.28 lo eofill st gr
+gs np 677.52 433.44 t 676.80 430.80 lo 670.80 432.24 lo 671.28 435.12 lo 677.52 433.44 lo 677.52 433.44 lo eofill st gr
+gs np 671.28 435.12 t 670.80 432.24 lo 664.32 433.44 lo 664.80 436.32 lo 671.28 435.12 lo 671.28 435.12 lo eofill st gr
+gs np 664.80 436.32 t 664.32 433.44 lo 657.84 434.16 lo 658.08 437.04 lo 664.80 436.32 lo 664.80 436.32 lo eofill st gr
+gs np 658.08 437.04 t 657.84 434.16 lo 651.12 434.40 lo 651.12 437.28 lo 658.08 437.04 lo 658.08 437.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 624.96 382.56 t 624.96 404.88 lo 677.52 404.88 lo 677.52 382.56 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4453412032> 624.96 400.56 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 280.08 185.52 t 363.36 185.52 lo 363.36 236.40 lo 280.08 236.40 lo 280.08 185.52 lo 280.08 185.52 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 278.64 184.32 t 281.52 186.96 lo 362.16 186.96 lo 364.80 184.32 lo 278.64 184.32 lo 278.64 184.32 lo eofill st gr
+gs np 364.80 184.32 t 362.16 186.96 lo 362.16 234.96 lo 364.80 237.60 lo 364.80 184.32 lo 364.80 184.32 lo eofill st gr
+gs np 364.80 237.60 t 362.16 234.96 lo 281.52 234.96 lo 278.64 237.60 lo 364.80 237.60 lo 364.80 237.60 lo eofill st gr
+gs np 278.64 237.60 t 281.52 234.96 lo 281.52 186.96 lo 278.64 184.32 lo 278.64 237.60 lo 278.64 237.60 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 287.28 200.16 t 287.28 222.24 lo 356.64 222.24 lo 356.64 200.16 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<545745422041> 287.28 218.16 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 540.24 210.24 t 540.24 213.12 lo 569.76 213.12 lo 569.76 210.24 lo 540.24 210.24 lo 540.24 210.24 lo eofill st gr
+gs np 529.68 211.68 t 542.40 216.00 lo 542.40 207.36 lo 529.68 211.68 lo eofill st gr
+gs np 580.32 211.68 t 567.60 207.36 lo 567.60 216.00 lo 580.32 211.68 lo eofill st gr
+gs np 384.00 208.56 t 384.00 211.20 lo 413.76 211.20 lo 413.76 208.56 lo 384.00 208.56 lo 384.00 208.56 lo eofill st gr
+gs np 373.44 209.76 t 386.40 214.08 lo 386.40 205.68 lo 373.44 209.76 lo eofill st gr
+gs np 424.32 209.76 t 411.36 205.68 lo 411.36 214.08 lo 424.32 209.76 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 112.32 365.04 t 198.72 365.04 lo 198.72 418.80 lo 112.32 418.80 lo 112.32 365.04 lo 112.32 365.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 110.88 363.84 t 113.76 366.48 lo 197.52 366.48 lo 200.16 363.84 lo 110.88 363.84 lo 110.88 363.84 lo eofill st gr
+gs np 200.16 363.84 t 197.52 366.48 lo 197.52 417.36 lo 200.16 420.24 lo 200.16 363.84 lo 200.16 363.84 lo eofill st gr
+gs np 200.16 420.24 t 197.52 417.36 lo 113.76 417.36 lo 110.88 420.24 lo 200.16 420.24 lo 200.16 420.24 lo eofill st gr
+gs np 110.88 420.24 t 113.76 417.36 lo 113.76 366.48 lo 110.88 363.84 lo 110.88 420.24 lo 110.88 420.24 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 122.40 381.12 t 122.40 403.44 lo 189.12 403.44 lo 189.12 381.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<42726f77736572> 122.40 399.12 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 276.96 366.72 t 360.48 366.72 lo 360.48 417.36 lo 276.96 417.36 lo 276.96 366.72 lo 276.96 366.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 275.52 365.28 t 278.40 368.16 lo 359.04 368.16 lo 361.92 365.28 lo 275.52 365.28 lo 275.52 365.28 lo eofill st gr
+gs np 361.92 365.28 t 359.04 368.16 lo 359.04 415.92 lo 361.92 418.80 lo 361.92 365.28 lo 361.92 365.28 lo eofill st gr
+gs np 361.92 418.80 t 359.04 415.92 lo 278.40 415.92 lo 275.52 418.80 lo 361.92 418.80 lo 361.92 418.80 lo eofill st gr
+gs np 275.52 418.80 t 278.40 415.92 lo 278.40 368.16 lo 275.52 365.28 lo 275.52 418.80 lo 275.52 418.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 284.16 381.12 t 284.16 403.20 lo 353.76 403.20 lo 353.76 381.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<545745422042> 284.16 399.12 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 215.52 339.12 t 217.92 340.80 lo 269.28 264.48 lo 266.88 262.80 lo 215.52 339.12 lo 215.52 339.12 lo eofill st gr
+gs np 210.72 348.72 t 221.52 340.56 lo 214.32 335.76 lo 210.72 348.72 lo eofill st gr
+gs np 274.08 254.88 t 263.28 263.04 lo 270.48 267.84 lo 274.08 254.88 lo eofill st gr
+gs np 129.84 292.56 t 129.84 295.44 lo 226.32 295.92 lo 226.32 293.04 lo 129.84 292.56 lo 129.84 292.56 lo eofill st gr
+gs np 652.56 278.16 t 649.68 278.16 lo 649.68 330.72 lo 652.56 330.72 lo 652.56 278.16 lo 652.56 278.16 lo eofill st gr
+gs np 651.12 267.60 t 646.80 280.32 lo 655.20 280.32 lo 651.12 267.60 lo eofill st gr
+gs np 651.12 337.68 t 646.80 329.04 lo 655.20 329.04 lo 651.12 337.68 lo 651.12 337.68 lo eofill st gr
+gs np 274.56 293.28 t 274.56 296.16 lo 637.68 295.92 lo 637.68 293.04 lo 274.56 293.28 lo 274.56 293.28 lo eofill st gr
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 5 5
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<35> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<5457454220476174657761792d537769746368696e6720696e205072696e6369706c6520494949> 151.20 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 660.72 293.76 t 660.72 296.64 lo 721.20 295.92 lo 721.20 293.04 lo 660.72 293.76 lo 660.72 293.76 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 110.88 255.60 t 110.88 277.92 lo 158.40 277.92 lo 158.40 255.60 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4f72672041> 110.88 273.60 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 112.32 318.24 t 112.32 340.56 lo 159.84 340.56 lo 159.84 318.24 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4f72672042> 112.32 336.24 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 437.28 187.92 t 518.40 187.92 lo 518.40 235.44 lo 437.28 235.44 lo 437.28 187.92 lo 437.28 187.92 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 435.84 186.48 t 438.72 189.36 lo 516.96 189.36 lo 519.84 186.48 lo 435.84 186.48 lo 435.84 186.48 lo eofill st gr
+gs np 519.84 186.48 t 516.96 189.36 lo 516.96 234.00 lo 519.84 236.88 lo 519.84 186.48 lo 519.84 186.48 lo eofill st gr
+gs np 519.84 236.88 t 516.96 234.00 lo 438.72 234.00 lo 435.84 236.88 lo 519.84 236.88 lo 519.84 236.88 lo eofill st gr
+gs np 435.84 236.88 t 438.72 234.00 lo 438.72 189.36 lo 435.84 186.48 lo 435.84 236.88 lo 435.84 236.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 447.84 200.88 t 447.84 222.96 lo 508.32 222.96 lo 508.32 200.88 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4c44415044> 447.84 218.88 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 439.44 368.88 t 520.56 368.88 lo 520.56 416.40 lo 439.44 416.40 lo 439.44 368.88 lo 439.44 368.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 438.00 367.44 t 440.88 370.32 lo 519.12 370.32 lo 522.00 367.44 lo 438.00 367.44 lo 438.00 367.44 lo eofill st gr
+gs np 522.00 367.44 t 519.12 370.32 lo 519.12 414.96 lo 522.00 417.84 lo 522.00 367.44 lo 522.00 367.44 lo eofill st gr
+gs np 522.00 417.84 t 519.12 414.96 lo 440.88 414.96 lo 438.00 417.84 lo 522.00 417.84 lo 522.00 417.84 lo eofill st gr
+gs np 438.00 417.84 t 440.88 414.96 lo 440.88 370.32 lo 438.00 367.44 lo 438.00 417.84 lo 438.00 417.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 450.00 381.84 t 450.00 403.92 lo 510.48 403.92 lo 510.48 381.84 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4c44415044> 450.00 399.84 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 256.32 t 644.16 256.08 lo 637.44 255.36 lo 630.96 254.16 lo 624.96 252.72 lo 618.96 250.56 lo 613.68 248.16 lo 608.64 245.52 lo 604.08 242.40 lo 600.00 239.04 lo 596.40 235.44 lo 593.28 231.36 lo 590.88 227.28 lo 589.20 222.96 lo 588.00 218.64 lo 587.76 213.84 lo 588.00 209.28 lo 589.20 204.72 lo 590.88 200.40 lo 593.28 196.32 lo 596.40 192.48 lo 600.00 188.88 lo 604.08 185.52 lo 608.64 182.40 lo 613.68 179.76 lo 618.96 177.36 lo 624.96 175.20 lo 630.96 173.52 lo 637.44 172.32 lo 644.16 171.60 lo 651.12 171.36 lo 657.84 171.60 lo 664.56 172.32 lo 671.04 173.52 lo 677.28 175.20 lo 683.04 177.36 lo 688.32 179.76 lo 693.36 182.40 lo 697.92 185.52 lo 702.24 188.88 lo 705.60 192.48 lo 708.72 196.32 lo 711.12 200.40 lo 712.80 204.72 lo 714.00 209.28 lo 714.48 213.84 lo 714.00 218.64 lo 712.80 222.96 lo 711.12 227.28 lo 708.72 231.36 lo 705.60 235.44 lo 702.24 239.04 lo 697.92 242.40 lo 693.36 245.52 lo 688.32 248.16 lo 683.04 250.56 lo 677.28 252.72 lo 671.04 254.16 lo 664.56 255.36 lo 657.84 256.08 lo 651.12 256.32 lo 651.12 256.32 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 651.12 257.76 t 651.12 254.88 lo 644.16 254.64 lo 643.92 257.52 lo 651.12 257.76 lo 651.12 257.76 lo eofill st gr
+gs np 643.92 257.52 t 644.16 254.64 lo 637.68 253.92 lo 637.20 256.80 lo 643.92 257.52 lo 643.92 257.52 lo eofill st gr
+gs np 637.20 256.80 t 637.68 253.92 lo 631.44 252.72 lo 630.72 255.60 lo 637.20 256.80 lo 637.20 256.80 lo eofill st gr
+gs np 630.72 255.60 t 631.44 252.72 lo 625.20 251.28 lo 624.48 253.92 lo 630.72 255.60 lo 630.72 255.60 lo eofill st gr
+gs np 624.48 253.92 t 625.20 251.28 lo 619.68 249.36 lo 618.48 252.00 lo 624.48 253.92 lo 624.48 253.92 lo eofill st gr
+gs np 618.48 252.00 t 619.68 249.36 lo 614.40 246.96 lo 612.96 249.36 lo 618.48 252.00 lo 618.48 252.00 lo eofill st gr
+gs np 612.96 249.36 t 614.40 246.96 lo 609.36 244.32 lo 607.92 246.72 lo 612.96 249.36 lo 612.96 249.36 lo eofill st gr
+gs np 607.92 246.72 t 609.36 244.32 lo 604.80 241.20 lo 603.12 243.60 lo 607.92 246.72 lo 607.92 246.72 lo eofill st gr
+gs np 603.12 243.60 t 604.80 241.20 lo 600.96 237.84 lo 599.04 240.00 lo 603.12 243.60 lo 603.12 243.60 lo eofill st gr
+gs np 599.04 240.00 t 600.96 237.84 lo 597.36 234.48 lo 595.20 236.40 lo 599.04 240.00 lo 599.04 240.00 lo eofill st gr
+gs np 595.20 236.40 t 597.36 234.48 lo 594.48 230.64 lo 592.08 232.32 lo 595.20 236.40 lo 595.20 236.40 lo eofill st gr
+gs np 592.08 232.32 t 594.48 230.64 lo 592.08 226.56 lo 589.68 228.00 lo 592.08 232.32 lo 592.08 232.32 lo eofill st gr
+gs np 589.68 228.00 t 592.08 226.56 lo 590.40 222.72 lo 587.76 223.44 lo 589.68 228.00 lo 589.68 228.00 lo eofill st gr
+gs np 587.76 223.44 t 590.40 222.72 lo 589.44 218.40 lo 586.56 218.64 lo 587.76 223.44 lo 587.76 223.44 lo eofill st gr
+gs np 586.56 218.64 t 589.44 218.40 lo 589.20 213.84 lo 586.32 213.84 lo 586.56 218.64 lo 586.56 218.64 lo eofill st gr
+gs np 586.32 213.84 t 589.20 213.84 lo 589.44 209.52 lo 586.56 209.04 lo 586.32 213.84 lo 586.32 213.84 lo eofill st gr
+gs np 586.56 209.04 t 589.44 209.52 lo 590.40 205.20 lo 587.76 204.48 lo 586.56 209.04 lo 586.56 209.04 lo eofill st gr
+gs np 587.76 204.48 t 590.40 205.20 lo 592.32 201.12 lo 589.68 199.92 lo 587.76 204.48 lo 587.76 204.48 lo eofill st gr
+gs np 589.68 199.92 t 592.32 201.12 lo 594.48 197.28 lo 592.08 195.60 lo 589.68 199.92 lo 589.68 199.92 lo eofill st gr
+gs np 592.08 195.60 t 594.48 197.28 lo 597.36 193.44 lo 595.20 191.52 lo 592.08 195.60 lo 592.08 195.60 lo eofill st gr
+gs np 595.20 191.52 t 597.36 193.44 lo 600.96 189.84 lo 599.04 187.68 lo 595.20 191.52 lo 595.20 191.52 lo eofill st gr
+gs np 599.04 187.68 t 600.96 189.84 lo 604.80 186.72 lo 603.12 184.32 lo 599.04 187.68 lo 599.04 187.68 lo eofill st gr
+gs np 603.12 184.32 t 604.80 186.72 lo 609.36 183.60 lo 607.92 181.20 lo 603.12 184.32 lo 603.12 184.32 lo eofill st gr
+gs np 607.92 181.20 t 609.36 183.60 lo 614.16 180.96 lo 612.96 178.32 lo 607.92 181.20 lo 607.92 181.20 lo eofill st gr
+gs np 612.96 178.32 t 614.16 180.96 lo 619.68 178.56 lo 618.48 175.92 lo 612.96 178.32 lo 612.96 178.32 lo eofill st gr
+gs np 618.48 175.92 t 619.68 178.56 lo 625.20 176.64 lo 624.48 173.76 lo 618.48 175.92 lo 618.48 175.92 lo eofill st gr
+gs np 624.48 173.76 t 625.20 176.64 lo 631.44 174.96 lo 630.72 172.32 lo 624.48 173.76 lo 624.48 173.76 lo eofill st gr
+gs np 630.72 172.32 t 631.44 174.96 lo 637.68 173.76 lo 637.20 171.12 lo 630.72 172.32 lo 630.72 172.32 lo eofill st gr
+gs np 637.20 171.12 t 637.68 173.76 lo 644.16 173.04 lo 644.16 170.40 lo 637.20 171.12 lo 637.20 171.12 lo eofill st gr
+gs np 644.16 170.40 t 644.16 173.04 lo 651.12 172.80 lo 651.12 170.16 lo 644.16 170.40 lo 644.16 170.40 lo eofill st gr
+gs np 651.12 170.16 t 651.12 172.80 lo 657.84 173.04 lo 658.08 170.16 lo 651.12 170.16 lo 651.12 170.16 lo eofill st gr
+gs np 658.08 170.16 t 657.84 173.04 lo 664.32 173.76 lo 664.80 171.12 lo 658.08 170.16 lo 658.08 170.16 lo eofill st gr
+gs np 664.80 171.12 t 664.32 173.76 lo 670.80 174.96 lo 671.28 172.32 lo 664.80 171.12 lo 664.80 171.12 lo eofill st gr
+gs np 671.28 172.32 t 670.80 174.96 lo 676.80 176.64 lo 677.52 174.00 lo 671.28 172.32 lo 671.28 172.32 lo eofill st gr
+gs np 677.52 174.00 t 676.80 176.64 lo 682.56 178.56 lo 683.52 175.92 lo 677.52 174.00 lo 677.52 174.00 lo eofill st gr
+gs np 683.52 175.92 t 682.56 178.56 lo 687.84 180.96 lo 689.04 178.32 lo 683.52 175.92 lo 683.52 175.92 lo eofill st gr
+gs np 689.04 178.32 t 687.84 180.96 lo 692.64 183.60 lo 694.08 181.20 lo 689.04 178.32 lo 689.04 178.32 lo eofill st gr
+gs np 694.08 181.20 t 692.64 183.60 lo 697.20 186.72 lo 698.88 184.32 lo 694.08 181.20 lo 694.08 181.20 lo eofill st gr
+gs np 698.88 184.32 t 697.20 186.72 lo 701.28 189.84 lo 703.20 187.92 lo 698.88 184.32 lo 698.88 184.32 lo eofill st gr
+gs np 703.20 187.92 t 701.28 189.84 lo 704.64 193.44 lo 706.80 191.52 lo 703.20 187.92 lo 703.20 187.92 lo eofill st gr
+gs np 706.80 191.52 t 704.64 193.44 lo 707.52 197.28 lo 709.92 195.60 lo 706.80 191.52 lo 706.80 191.52 lo eofill st gr
+gs np 709.92 195.60 t 707.52 197.28 lo 709.92 201.12 lo 712.32 199.92 lo 709.92 195.60 lo 709.92 195.60 lo eofill st gr
+gs np 712.32 199.92 t 709.92 201.12 lo 711.60 205.20 lo 714.24 204.48 lo 712.32 199.92 lo 712.32 199.92 lo eofill st gr
+gs np 714.24 204.48 t 711.60 205.20 lo 712.56 209.52 lo 715.44 209.04 lo 714.24 204.48 lo 714.24 204.48 lo eofill st gr
+gs np 715.44 209.04 t 712.56 209.52 lo 713.04 213.84 lo 715.92 214.08 lo 715.44 209.04 lo 715.44 209.04 lo eofill st gr
+gs np 715.92 214.08 t 713.04 213.84 lo 712.56 218.40 lo 715.44 218.88 lo 715.92 214.08 lo 715.92 214.08 lo eofill st gr
+gs np 715.44 218.88 t 712.56 218.40 lo 711.60 222.48 lo 714.24 223.44 lo 715.44 218.88 lo 715.44 218.88 lo eofill st gr
+gs np 714.24 223.44 t 711.60 222.48 lo 709.92 226.80 lo 712.32 228.00 lo 714.24 223.44 lo 714.24 223.44 lo eofill st gr
+gs np 712.32 228.00 t 709.92 226.80 lo 707.52 230.64 lo 709.92 232.32 lo 712.32 228.00 lo 712.32 228.00 lo eofill st gr
+gs np 709.92 232.32 t 707.52 230.64 lo 704.64 234.48 lo 706.80 236.16 lo 709.92 232.32 lo 709.92 232.32 lo eofill st gr
+gs np 706.80 236.16 t 704.64 234.48 lo 701.28 237.84 lo 703.20 240.00 lo 706.80 236.16 lo 706.80 236.16 lo eofill st gr
+gs np 703.20 240.00 t 701.28 237.84 lo 697.20 241.20 lo 698.88 243.60 lo 703.20 240.00 lo 703.20 240.00 lo eofill st gr
+gs np 698.88 243.60 t 697.20 241.20 lo 692.64 244.32 lo 694.08 246.72 lo 698.88 243.60 lo 698.88 243.60 lo eofill st gr
+gs np 694.08 246.72 t 692.64 244.32 lo 687.84 246.96 lo 689.04 249.36 lo 694.08 246.72 lo 694.08 246.72 lo eofill st gr
+gs np 689.04 249.36 t 687.84 246.96 lo 682.56 249.36 lo 683.52 252.00 lo 689.04 249.36 lo 689.04 249.36 lo eofill st gr
+gs np 683.52 252.00 t 682.56 249.36 lo 676.80 251.28 lo 677.52 253.92 lo 683.52 252.00 lo 683.52 252.00 lo eofill st gr
+gs np 677.52 253.92 t 676.80 251.28 lo 670.80 252.72 lo 671.28 255.60 lo 677.52 253.92 lo 677.52 253.92 lo eofill st gr
+gs np 671.28 255.60 t 670.80 252.72 lo 664.32 253.92 lo 664.80 256.80 lo 671.28 255.60 lo 671.28 255.60 lo eofill st gr
+gs np 664.80 256.80 t 664.32 253.92 lo 657.84 254.64 lo 658.08 257.52 lo 664.80 256.80 lo 664.80 256.80 lo eofill st gr
+gs np 658.08 257.52 t 657.84 254.64 lo 651.12 254.88 lo 651.12 257.76 lo 658.08 257.52 lo 658.08 257.52 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 624.96 203.04 t 624.96 225.36 lo 677.52 225.36 lo 677.52 203.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4453412031> 624.96 221.04 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 650.88 435.12 t 644.16 434.88 lo 637.44 434.16 lo 630.96 432.96 lo 624.72 431.28 lo 618.96 429.36 lo 613.68 426.96 lo 608.64 424.08 lo 604.08 421.20 lo 599.76 417.60 lo 596.40 414.00 lo 593.28 410.16 lo 590.88 406.08 lo 589.20 401.76 lo 588.00 397.20 lo 587.76 392.64 lo 588.00 388.08 lo 589.20 383.52 lo 590.88 379.20 lo 593.28 375.12 lo 596.40 371.28 lo 599.76 367.68 lo 604.08 364.08 lo 608.64 361.20 lo 613.68 358.32 lo 618.96 355.92 lo 624.72 354.00 lo 630.96 352.32 lo 637.44 351.12 lo 644.16 350.40 lo 650.88 350.16 lo 657.84 350.40 lo 664.56 351.12 lo 671.04 352.32 lo 677.04 354.00 lo 683.04 355.92 lo 688.32 358.32 lo 693.36 361.20 lo 697.92 364.08 lo 702.00 367.68 lo 705.60 371.28 lo 708.72 375.12 lo 711.12 379.20 lo 712.80 383.52 lo 714.00 388.08 lo 714.24 392.64 lo 714.00 397.20 lo 712.80 401.76 lo 711.12 406.08 lo 708.72 410.16 lo 705.60 414.00 lo 702.00 417.60 lo 697.92 421.20 lo 693.36 424.08 lo 688.32 426.96 lo 683.04 429.36 lo 677.04 431.28 lo 671.04 432.96 lo 664.56 434.16 lo 657.84 434.88 lo 650.88 435.12 lo 650.88 435.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 650.88 436.56 t 650.88 433.68 lo 644.16 433.44 lo 643.92 436.32 lo 650.88 436.56 lo 650.88 436.56 lo eofill st gr
+gs np 643.92 436.32 t 644.16 433.44 lo 637.68 432.72 lo 637.20 435.60 lo 643.92 436.32 lo 643.92 436.32 lo eofill st gr
+gs np 637.20 435.60 t 637.68 432.72 lo 631.20 431.52 lo 630.72 434.40 lo 637.20 435.60 lo 637.20 435.60 lo eofill st gr
+gs np 630.72 434.40 t 631.20 431.52 lo 625.20 430.08 lo 624.48 432.72 lo 630.72 434.40 lo 630.72 434.40 lo eofill st gr
+gs np 624.48 432.72 t 625.20 430.08 lo 619.44 427.92 lo 618.48 430.56 lo 624.48 432.72 lo 624.48 432.72 lo eofill st gr
+gs np 618.48 430.56 t 619.44 427.92 lo 614.16 425.52 lo 612.96 428.16 lo 618.48 430.56 lo 618.48 430.56 lo eofill st gr
+gs np 612.96 428.16 t 614.16 425.52 lo 609.36 422.88 lo 607.92 425.28 lo 612.96 428.16 lo 612.96 428.16 lo eofill st gr
+gs np 607.92 425.28 t 609.36 422.88 lo 604.80 420.00 lo 603.12 422.16 lo 607.92 425.28 lo 607.92 425.28 lo eofill st gr
+gs np 603.12 422.16 t 604.80 420.00 lo 600.72 416.64 lo 598.80 418.80 lo 603.12 422.16 lo 603.12 422.16 lo eofill st gr
+gs np 598.80 418.80 t 600.72 416.64 lo 597.36 413.04 lo 595.20 414.96 lo 598.80 418.80 lo 598.80 418.80 lo eofill st gr
+gs np 595.20 414.96 t 597.36 413.04 lo 594.48 409.44 lo 592.08 410.88 lo 595.20 414.96 lo 595.20 414.96 lo eofill st gr
+gs np 592.08 410.88 t 594.48 409.44 lo 592.08 405.36 lo 589.68 406.56 lo 592.08 410.88 lo 592.08 410.88 lo eofill st gr
+gs np 589.68 406.56 t 592.08 405.36 lo 590.40 401.28 lo 587.76 402.24 lo 589.68 406.56 lo 589.68 406.56 lo eofill st gr
+gs np 587.76 402.24 t 590.40 401.28 lo 589.44 396.96 lo 586.56 397.44 lo 587.76 402.24 lo 587.76 402.24 lo eofill st gr
+gs np 586.56 397.44 t 589.44 396.96 lo 588.96 392.64 lo 586.32 392.64 lo 586.56 397.44 lo 586.56 397.44 lo eofill st gr
+gs np 586.32 392.64 t 588.96 392.64 lo 589.44 388.32 lo 586.56 387.84 lo 586.32 392.64 lo 586.32 392.64 lo eofill st gr
+gs np 586.56 387.84 t 589.44 388.32 lo 590.40 384.00 lo 587.76 383.04 lo 586.56 387.84 lo 586.56 387.84 lo eofill st gr
+gs np 587.76 383.04 t 590.40 384.00 lo 592.08 379.92 lo 589.68 378.72 lo 587.76 383.04 lo 587.76 383.04 lo eofill st gr
+gs np 589.68 378.72 t 592.08 379.92 lo 594.48 375.84 lo 592.08 374.40 lo 589.68 378.72 lo 589.68 378.72 lo eofill st gr
+gs np 592.08 374.40 t 594.48 375.84 lo 597.36 372.24 lo 595.20 370.32 lo 592.08 374.40 lo 592.08 374.40 lo eofill st gr
+gs np 595.20 370.32 t 597.36 372.24 lo 600.72 368.64 lo 598.80 366.48 lo 595.20 370.32 lo 595.20 370.32 lo eofill st gr
+gs np 598.80 366.48 t 600.72 368.64 lo 604.80 365.28 lo 603.12 363.12 lo 598.80 366.48 lo 598.80 366.48 lo eofill st gr
+gs np 603.12 363.12 t 604.80 365.28 lo 609.36 362.40 lo 607.92 360.00 lo 603.12 363.12 lo 603.12 363.12 lo eofill st gr
+gs np 607.92 360.00 t 609.36 362.40 lo 614.16 359.76 lo 612.96 357.12 lo 607.92 360.00 lo 607.92 360.00 lo eofill st gr
+gs np 612.96 357.12 t 614.16 359.76 lo 619.44 357.36 lo 618.48 354.72 lo 612.96 357.12 lo 612.96 357.12 lo eofill st gr
+gs np 618.48 354.72 t 619.44 357.36 lo 625.20 355.20 lo 624.48 352.56 lo 618.48 354.72 lo 618.48 354.72 lo eofill st gr
+gs np 624.48 352.56 t 625.20 355.20 lo 631.20 353.76 lo 630.72 350.88 lo 624.48 352.56 lo 624.48 352.56 lo eofill st gr
+gs np 630.72 350.88 t 631.20 353.76 lo 637.68 352.56 lo 637.20 349.68 lo 630.72 350.88 lo 630.72 350.88 lo eofill st gr
+gs np 637.20 349.68 t 637.68 352.56 lo 644.16 351.84 lo 643.92 348.96 lo 637.20 349.68 lo 637.20 349.68 lo eofill st gr
+gs np 643.92 348.96 t 644.16 351.84 lo 650.88 351.60 lo 651.12 348.72 lo 643.92 348.96 lo 643.92 348.96 lo eofill st gr
+gs np 651.12 348.72 t 650.88 351.60 lo 657.84 351.84 lo 657.84 348.96 lo 651.12 348.72 lo 651.12 348.72 lo eofill st gr
+gs np 657.84 348.96 t 657.84 351.84 lo 664.32 352.56 lo 664.80 349.68 lo 657.84 348.96 lo 657.84 348.96 lo eofill st gr
+gs np 664.80 349.68 t 664.32 352.56 lo 670.56 353.76 lo 671.28 350.88 lo 664.80 349.68 lo 664.80 349.68 lo eofill st gr
+gs np 671.28 350.88 t 670.56 353.76 lo 676.80 355.20 lo 677.52 352.56 lo 671.28 350.88 lo 671.28 350.88 lo eofill st gr
+gs np 677.52 352.56 t 676.80 355.20 lo 682.32 357.36 lo 683.52 354.72 lo 677.52 352.56 lo 677.52 352.56 lo eofill st gr
+gs np 683.52 354.72 t 682.32 357.36 lo 687.60 359.76 lo 689.04 357.12 lo 683.52 354.72 lo 683.52 354.72 lo eofill st gr
+gs np 689.04 357.12 t 687.60 359.76 lo 692.64 362.40 lo 694.08 360.00 lo 689.04 357.12 lo 689.04 357.12 lo eofill st gr
+gs np 694.08 360.00 t 692.64 362.40 lo 697.20 365.28 lo 698.88 363.12 lo 694.08 360.00 lo 694.08 360.00 lo eofill st gr
+gs np 698.88 363.12 t 697.20 365.28 lo 701.04 368.64 lo 702.96 366.48 lo 698.88 363.12 lo 698.88 363.12 lo eofill st gr
+gs np 702.96 366.48 t 701.04 368.64 lo 704.64 372.24 lo 706.80 370.32 lo 702.96 366.48 lo 702.96 366.48 lo eofill st gr
+gs np 706.80 370.32 t 704.64 372.24 lo 707.52 375.84 lo 709.92 374.40 lo 706.80 370.32 lo 706.80 370.32 lo eofill st gr
+gs np 709.92 374.40 t 707.52 375.84 lo 709.92 379.92 lo 712.32 378.72 lo 709.92 374.40 lo 709.92 374.40 lo eofill st gr
+gs np 712.32 378.72 t 709.92 379.92 lo 711.36 384.00 lo 714.24 383.04 lo 712.32 378.72 lo 712.32 378.72 lo eofill st gr
+gs np 714.24 383.04 t 711.36 384.00 lo 712.56 388.32 lo 715.20 387.84 lo 714.24 383.04 lo 714.24 383.04 lo eofill st gr
+gs np 715.20 387.84 t 712.56 388.32 lo 712.80 392.64 lo 715.68 392.64 lo 715.20 387.84 lo 715.20 387.84 lo eofill st gr
+gs np 715.68 392.64 t 712.80 392.64 lo 712.56 396.96 lo 715.44 397.44 lo 715.68 392.64 lo 715.68 392.64 lo eofill st gr
+gs np 715.44 397.44 t 712.56 396.96 lo 711.36 401.28 lo 714.24 402.24 lo 715.44 397.44 lo 715.44 397.44 lo eofill st gr
+gs np 714.24 402.24 t 711.36 401.28 lo 709.68 405.36 lo 712.32 406.56 lo 714.24 402.24 lo 714.24 402.24 lo eofill st gr
+gs np 712.32 406.56 t 709.68 405.36 lo 707.52 409.44 lo 709.92 410.88 lo 712.32 406.56 lo 712.32 406.56 lo eofill st gr
+gs np 709.92 410.88 t 707.52 409.44 lo 704.64 413.04 lo 706.80 414.96 lo 709.92 410.88 lo 709.92 410.88 lo eofill st gr
+gs np 706.80 414.96 t 704.64 413.04 lo 701.04 416.64 lo 702.96 418.80 lo 706.80 414.96 lo 706.80 414.96 lo eofill st gr
+gs np 702.96 418.80 t 701.04 416.64 lo 697.20 420.00 lo 698.88 422.16 lo 702.96 418.80 lo 702.96 418.80 lo eofill st gr
+gs np 698.88 422.16 t 697.20 420.00 lo 692.64 422.88 lo 694.08 425.28 lo 698.88 422.16 lo 698.88 422.16 lo eofill st gr
+gs np 694.08 425.28 t 692.64 422.88 lo 687.84 425.52 lo 689.04 428.16 lo 694.08 425.28 lo 694.08 425.28 lo eofill st gr
+gs np 689.04 428.16 t 687.84 425.52 lo 682.32 427.92 lo 683.52 430.56 lo 689.04 428.16 lo 689.04 428.16 lo eofill st gr
+gs np 683.52 430.56 t 682.32 427.92 lo 676.80 430.08 lo 677.52 432.72 lo 683.52 430.56 lo 683.52 430.56 lo eofill st gr
+gs np 677.52 432.72 t 676.80 430.08 lo 670.56 431.52 lo 671.28 434.40 lo 677.52 432.72 lo 677.52 432.72 lo eofill st gr
+gs np 671.28 434.40 t 670.56 431.52 lo 664.32 432.72 lo 664.80 435.60 lo 671.28 434.40 lo 671.28 434.40 lo eofill st gr
+gs np 664.80 435.60 t 664.32 432.72 lo 657.84 433.44 lo 657.84 436.32 lo 664.80 435.60 lo 664.80 435.60 lo eofill st gr
+gs np 657.84 436.32 t 657.84 433.44 lo 650.88 433.68 lo 650.88 436.56 lo 657.84 436.32 lo 657.84 436.32 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 624.96 381.84 t 624.96 403.92 lo 677.52 403.92 lo 677.52 381.84 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<4453412032> 624.96 399.84 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 280.08 185.52 t 363.36 185.52 lo 363.36 236.40 lo 280.08 236.40 lo 280.08 185.52 lo 280.08 185.52 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 278.64 184.32 t 281.52 186.96 lo 362.16 186.96 lo 364.80 184.32 lo 278.64 184.32 lo 278.64 184.32 lo eofill st gr
+gs np 364.80 184.32 t 362.16 186.96 lo 362.16 234.96 lo 364.80 237.60 lo 364.80 184.32 lo 364.80 184.32 lo eofill st gr
+gs np 364.80 237.60 t 362.16 234.96 lo 281.52 234.96 lo 278.64 237.60 lo 364.80 237.60 lo 364.80 237.60 lo eofill st gr
+gs np 278.64 237.60 t 281.52 234.96 lo 281.52 186.96 lo 278.64 184.32 lo 278.64 237.60 lo 278.64 237.60 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 287.28 200.16 t 287.28 222.24 lo 356.64 222.24 lo 356.64 200.16 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<545745422041> 287.28 218.16 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 540.24 210.24 t 540.24 213.12 lo 541.68 213.12 lo 541.68 210.24 lo 540.24 210.24 lo 540.24 210.24 lo eofill st gr
+gs np 542.88 210.24 t 542.88 213.12 lo 544.32 213.12 lo 544.32 210.24 lo 542.88 210.24 lo 542.88 210.24 lo eofill st gr
+gs np 545.76 210.24 t 545.76 213.12 lo 547.20 213.12 lo 547.20 210.24 lo 545.76 210.24 lo 545.76 210.24 lo eofill st gr
+gs np 548.64 210.24 t 548.64 213.12 lo 550.08 213.12 lo 550.08 210.24 lo 548.64 210.24 lo 548.64 210.24 lo eofill st gr
+gs np 551.52 210.24 t 551.52 213.12 lo 552.96 213.12 lo 552.96 210.24 lo 551.52 210.24 lo 551.52 210.24 lo eofill st gr
+gs np 554.40 210.24 t 554.40 213.12 lo 555.84 213.12 lo 555.84 210.24 lo 554.40 210.24 lo 554.40 210.24 lo eofill st gr
+gs np 557.28 210.24 t 557.28 213.12 lo 558.72 213.12 lo 558.72 210.24 lo 557.28 210.24 lo 557.28 210.24 lo eofill st gr
+gs np 560.16 210.24 t 560.16 213.12 lo 561.60 213.12 lo 561.60 210.24 lo 560.16 210.24 lo 560.16 210.24 lo eofill st gr
+gs np 562.80 210.24 t 562.80 213.12 lo 564.24 213.12 lo 564.24 210.24 lo 562.80 210.24 lo 562.80 210.24 lo eofill st gr
+gs np 565.68 210.24 t 565.68 213.12 lo 567.12 213.12 lo 567.12 210.24 lo 565.68 210.24 lo 565.68 210.24 lo eofill st gr
+gs np 568.56 210.24 t 568.56 213.12 lo 569.76 213.12 lo 569.76 210.24 lo 568.56 210.24 lo 568.56 210.24 lo eofill st gr
+gs np 529.68 211.68 t 542.40 216.00 lo 542.40 207.36 lo 529.68 211.68 lo eofill st gr
+gs np 580.32 211.68 t 567.60 207.36 lo 567.60 216.00 lo 580.32 211.68 lo eofill st gr
+gs np 384.00 208.56 t 384.00 211.20 lo 385.44 211.20 lo 385.44 208.56 lo 384.00 208.56 lo 384.00 208.56 lo eofill st gr
+gs np 386.88 208.56 t 386.88 211.20 lo 388.32 211.20 lo 388.32 208.56 lo 386.88 208.56 lo 386.88 208.56 lo eofill st gr
+gs np 389.76 208.56 t 389.76 211.20 lo 391.20 211.20 lo 391.20 208.56 lo 389.76 208.56 lo 389.76 208.56 lo eofill st gr
+gs np 392.64 208.56 t 392.64 211.20 lo 394.08 211.20 lo 394.08 208.56 lo 392.64 208.56 lo 392.64 208.56 lo eofill st gr
+gs np 395.52 208.56 t 395.52 211.20 lo 396.96 211.20 lo 396.96 208.56 lo 395.52 208.56 lo 395.52 208.56 lo eofill st gr
+gs np 398.40 208.56 t 398.40 211.20 lo 399.84 211.20 lo 399.84 208.56 lo 398.40 208.56 lo 398.40 208.56 lo eofill st gr
+gs np 401.04 208.56 t 401.04 211.20 lo 402.48 211.20 lo 402.48 208.56 lo 401.04 208.56 lo 401.04 208.56 lo eofill st gr
+gs np 403.92 208.56 t 403.92 211.20 lo 405.36 211.20 lo 405.36 208.56 lo 403.92 208.56 lo 403.92 208.56 lo eofill st gr
+gs np 406.80 208.56 t 406.80 211.20 lo 408.24 211.20 lo 408.24 208.56 lo 406.80 208.56 lo 406.80 208.56 lo eofill st gr
+gs np 409.68 208.56 t 409.68 211.20 lo 411.12 211.20 lo 411.12 208.56 lo 409.68 208.56 lo 409.68 208.56 lo eofill st gr
+gs np 412.56 208.56 t 412.56 211.20 lo 413.76 211.20 lo 413.76 208.56 lo 412.56 208.56 lo 412.56 208.56 lo eofill st gr
+gs np 373.44 209.76 t 386.40 214.08 lo 386.40 205.68 lo 373.44 209.76 lo eofill st gr
+gs np 424.32 209.76 t 411.36 205.68 lo 411.36 214.08 lo 424.32 209.76 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 112.32 365.04 t 198.72 365.04 lo 198.72 418.80 lo 112.32 418.80 lo 112.32 365.04 lo 112.32 365.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 110.88 363.84 t 113.76 366.48 lo 197.52 366.48 lo 200.16 363.84 lo 110.88 363.84 lo 110.88 363.84 lo eofill st gr
+gs np 200.16 363.84 t 197.52 366.48 lo 197.52 417.36 lo 200.16 420.24 lo 200.16 363.84 lo 200.16 363.84 lo eofill st gr
+gs np 200.16 420.24 t 197.52 417.36 lo 113.76 417.36 lo 110.88 420.24 lo 200.16 420.24 lo 200.16 420.24 lo eofill st gr
+gs np 110.88 420.24 t 113.76 417.36 lo 113.76 366.48 lo 110.88 363.84 lo 110.88 420.24 lo 110.88 420.24 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 122.40 381.12 t 122.40 403.44 lo 189.12 403.44 lo 189.12 381.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<42726f77736572> 122.40 399.12 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+1.000 1.000 1.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 276.96 366.72 t 360.48 366.72 lo 360.48 417.36 lo 276.96 417.36 lo 276.96 366.72 lo 276.96 366.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 275.52 365.28 t 278.40 368.16 lo 359.04 368.16 lo 361.92 365.28 lo 275.52 365.28 lo 275.52 365.28 lo eofill st gr
+gs np 361.92 365.28 t 359.04 368.16 lo 359.04 415.92 lo 361.92 418.80 lo 361.92 365.28 lo 361.92 365.28 lo eofill st gr
+gs np 361.92 418.80 t 359.04 415.92 lo 278.40 415.92 lo 275.52 418.80 lo 361.92 418.80 lo 361.92 418.80 lo eofill st gr
+gs np 275.52 418.80 t 278.40 415.92 lo 278.40 368.16 lo 275.52 365.28 lo 275.52 418.80 lo 275.52 418.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 284.16 381.12 t 284.16 403.20 lo 353.76 403.20 lo 353.76 381.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<545745422042> 284.16 399.12 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 215.52 339.12 t 217.92 340.80 lo 218.64 339.60 lo 216.24 338.16 lo 215.52 339.12 lo 215.52 339.12 lo eofill st gr
+gs np 216.96 336.96 t 219.36 338.40 lo 220.08 337.20 lo 217.92 335.76 lo 216.96 336.96 lo 216.96 336.96 lo eofill st gr
+gs np 218.64 334.56 t 221.04 336.00 lo 221.76 335.04 lo 219.36 333.36 lo 218.64 334.56 lo 218.64 334.56 lo eofill st gr
+gs np 220.32 332.16 t 222.48 333.84 lo 223.44 332.64 lo 221.04 330.96 lo 220.32 332.16 lo 220.32 332.16 lo eofill st gr
+gs np 221.76 329.76 t 224.16 331.44 lo 224.88 330.24 lo 222.72 328.56 lo 221.76 329.76 lo 221.76 329.76 lo eofill st gr
+gs np 223.44 327.36 t 225.84 329.04 lo 226.56 327.84 lo 224.16 326.16 lo 223.44 327.36 lo 223.44 327.36 lo eofill st gr
+gs np 224.88 325.20 t 227.28 326.64 lo 228.24 325.44 lo 225.84 324.00 lo 224.88 325.20 lo 224.88 325.20 lo eofill st gr
+gs np 226.56 322.80 t 228.96 324.24 lo 229.68 323.04 lo 227.28 321.60 lo 226.56 322.80 lo 226.56 322.80 lo eofill st gr
+gs np 228.24 320.40 t 230.64 321.84 lo 231.36 320.88 lo 228.96 319.20 lo 228.24 320.40 lo 228.24 320.40 lo eofill st gr
+gs np 229.68 318.00 t 232.08 319.68 lo 233.04 318.48 lo 230.64 316.80 lo 229.68 318.00 lo 229.68 318.00 lo eofill st gr
+gs np 231.36 315.60 t 233.76 317.28 lo 234.48 316.08 lo 232.08 314.40 lo 231.36 315.60 lo 231.36 315.60 lo eofill st gr
+gs np 233.04 313.20 t 235.44 314.88 lo 236.16 313.68 lo 233.76 312.00 lo 233.04 313.20 lo 233.04 313.20 lo eofill st gr
+gs np 234.48 311.04 t 236.88 312.48 lo 237.60 311.28 lo 235.44 309.84 lo 234.48 311.04 lo 234.48 311.04 lo eofill st gr
+gs np 236.16 308.64 t 238.56 310.08 lo 239.28 308.88 lo 236.88 307.44 lo 236.16 308.64 lo 236.16 308.64 lo eofill st gr
+gs np 237.60 306.24 t 240.00 307.92 lo 240.96 306.72 lo 238.56 305.04 lo 237.60 306.24 lo 237.60 306.24 lo eofill st gr
+gs np 239.28 303.84 t 241.68 305.52 lo 242.40 304.32 lo 240.00 302.64 lo 239.28 303.84 lo 239.28 303.84 lo eofill st gr
+gs np 240.96 301.44 t 243.36 303.12 lo 244.08 301.92 lo 241.68 300.24 lo 240.96 301.44 lo 240.96 301.44 lo eofill st gr
+gs np 242.40 299.04 t 244.80 300.72 lo 245.76 299.52 lo 243.36 298.08 lo 242.40 299.04 lo 242.40 299.04 lo eofill st gr
+gs np 244.08 296.88 t 246.48 298.32 lo 247.20 297.12 lo 244.80 295.68 lo 244.08 296.88 lo 244.08 296.88 lo eofill st gr
+gs np 245.76 294.48 t 247.92 295.92 lo 248.88 294.96 lo 246.48 293.28 lo 245.76 294.48 lo 245.76 294.48 lo eofill st gr
+gs np 247.20 292.08 t 249.60 293.76 lo 250.32 292.56 lo 248.16 290.88 lo 247.20 292.08 lo 247.20 292.08 lo eofill st gr
+gs np 248.88 289.68 t 251.28 291.36 lo 252.00 290.16 lo 249.60 288.48 lo 248.88 289.68 lo 248.88 289.68 lo eofill st gr
+gs np 250.56 287.28 t 252.72 288.96 lo 253.68 287.76 lo 251.28 286.08 lo 250.56 287.28 lo 250.56 287.28 lo eofill st gr
+gs np 252.00 285.12 t 254.40 286.56 lo 255.12 285.36 lo 252.96 283.92 lo 252.00 285.12 lo 252.00 285.12 lo eofill st gr
+gs np 253.68 282.72 t 256.08 284.16 lo 256.80 282.96 lo 254.40 281.52 lo 253.68 282.72 lo 253.68 282.72 lo eofill st gr
+gs np 255.12 280.32 t 257.52 281.76 lo 258.24 280.80 lo 256.08 279.12 lo 255.12 280.32 lo 255.12 280.32 lo eofill st gr
+gs np 256.80 277.92 t 259.20 279.60 lo 259.92 278.40 lo 257.52 276.72 lo 256.80 277.92 lo 256.80 277.92 lo eofill st gr
+gs np 258.48 275.52 t 260.64 277.20 lo 261.60 276.00 lo 259.20 274.32 lo 258.48 275.52 lo 258.48 275.52 lo eofill st gr
+gs np 259.92 273.12 t 262.32 274.80 lo 263.04 273.60 lo 260.88 271.92 lo 259.92 273.12 lo 259.92 273.12 lo eofill st gr
+gs np 261.60 270.96 t 264.00 272.40 lo 264.72 271.20 lo 262.32 269.76 lo 261.60 270.96 lo 261.60 270.96 lo eofill st gr
+gs np 263.28 268.56 t 265.44 270.00 lo 266.40 268.80 lo 264.00 267.36 lo 263.28 268.56 lo 263.28 268.56 lo eofill st gr
+gs np 264.72 266.16 t 267.12 267.60 lo 267.84 266.64 lo 265.44 264.96 lo 264.72 266.16 lo 264.72 266.16 lo eofill st gr
+gs np 266.40 263.76 t 268.80 265.44 lo 269.28 264.48 lo 266.88 262.80 lo 266.40 263.76 lo 266.40 263.76 lo eofill st gr
+gs np 210.72 348.72 t 221.52 340.56 lo 214.32 335.76 lo 210.72 348.72 lo eofill st gr
+gs np 274.08 254.88 t 263.28 263.04 lo 270.48 267.84 lo 274.08 254.88 lo eofill st gr
+gs np 129.84 292.56 t 129.84 295.44 lo 226.32 295.92 lo 226.32 293.04 lo 129.84 292.56 lo 129.84 292.56 lo eofill st gr
+gs np 652.56 278.16 t 649.68 278.16 lo 649.68 279.60 lo 652.56 279.60 lo 652.56 278.16 lo 652.56 278.16 lo eofill st gr
+gs np 652.56 281.04 t 649.68 281.04 lo 649.68 282.48 lo 652.56 282.48 lo 652.56 281.04 lo 652.56 281.04 lo eofill st gr
+gs np 652.56 283.92 t 649.68 283.92 lo 649.68 285.36 lo 652.56 285.36 lo 652.56 283.92 lo 652.56 283.92 lo eofill st gr
+gs np 652.56 286.80 t 649.68 286.80 lo 649.68 288.00 lo 652.56 288.00 lo 652.56 286.80 lo 652.56 286.80 lo eofill st gr
+gs np 652.56 289.44 t 649.68 289.44 lo 649.68 290.88 lo 652.56 290.88 lo 652.56 289.44 lo 652.56 289.44 lo eofill st gr
+gs np 652.56 292.32 t 649.68 292.32 lo 649.68 293.76 lo 652.56 293.76 lo 652.56 292.32 lo 652.56 292.32 lo eofill st gr
+gs np 652.56 295.20 t 649.68 295.20 lo 649.68 296.64 lo 652.56 296.64 lo 652.56 295.20 lo 652.56 295.20 lo eofill st gr
+gs np 652.56 298.08 t 649.68 298.08 lo 649.68 299.52 lo 652.56 299.52 lo 652.56 298.08 lo 652.56 298.08 lo eofill st gr
+gs np 652.56 300.96 t 649.68 300.96 lo 649.68 302.40 lo 652.56 302.40 lo 652.56 300.96 lo 652.56 300.96 lo eofill st gr
+gs np 652.56 303.84 t 649.68 303.84 lo 649.68 305.28 lo 652.56 305.28 lo 652.56 303.84 lo 652.56 303.84 lo eofill st gr
+gs np 652.56 306.48 t 649.68 306.48 lo 649.68 307.92 lo 652.56 307.92 lo 652.56 306.48 lo 652.56 306.48 lo eofill st gr
+gs np 652.56 309.36 t 649.68 309.36 lo 649.68 310.80 lo 652.56 310.80 lo 652.56 309.36 lo 652.56 309.36 lo eofill st gr
+gs np 652.56 312.24 t 649.68 312.24 lo 649.68 313.68 lo 652.56 313.68 lo 652.56 312.24 lo 652.56 312.24 lo eofill st gr
+gs np 652.56 315.12 t 649.68 315.12 lo 649.68 316.56 lo 652.56 316.56 lo 652.56 315.12 lo 652.56 315.12 lo eofill st gr
+gs np 652.56 318.00 t 649.68 318.00 lo 649.68 319.44 lo 652.56 319.44 lo 652.56 318.00 lo 652.56 318.00 lo eofill st gr
+gs np 652.56 320.88 t 649.68 320.88 lo 649.68 322.32 lo 652.56 322.32 lo 652.56 320.88 lo 652.56 320.88 lo eofill st gr
+gs np 652.56 323.76 t 649.68 323.76 lo 649.68 325.20 lo 652.56 325.20 lo 652.56 323.76 lo 652.56 323.76 lo eofill st gr
+gs np 652.56 326.40 t 649.68 326.40 lo 649.68 327.84 lo 652.56 327.84 lo 652.56 326.40 lo 652.56 326.40 lo eofill st gr
+gs np 652.56 329.28 t 649.68 329.28 lo 649.68 330.72 lo 652.56 330.72 lo 652.56 329.28 lo 652.56 329.28 lo eofill st gr
+gs np 651.12 267.60 t 646.80 280.32 lo 655.20 280.32 lo 651.12 267.60 lo eofill st gr
+gs np 651.12 337.68 t 646.80 329.04 lo 655.20 329.04 lo 651.12 337.68 lo 651.12 337.68 lo eofill st gr
+gs np 274.56 293.28 t 274.56 296.16 lo 637.68 295.92 lo 637.68 293.04 lo 274.56 293.28 lo 274.56 293.28 lo eofill st gr
+gs np 538.32 390.96 t 538.32 393.84 lo 567.84 393.84 lo 567.84 390.96 lo 538.32 390.96 lo 538.32 390.96 lo eofill st gr
+gs np 527.76 392.40 t 540.72 396.72 lo 540.72 388.08 lo 527.76 392.40 lo eofill st gr
+gs np 578.40 392.40 t 565.68 388.08 lo 565.68 396.72 lo 578.40 392.40 lo eofill st gr
+gs np 382.32 389.28 t 382.32 391.92 lo 411.84 391.92 lo 411.84 389.28 lo 382.32 389.28 lo 382.32 389.28 lo eofill st gr
+gs np 371.76 390.72 t 384.48 394.80 lo 384.48 386.40 lo 371.76 390.72 lo eofill st gr
+gs np 422.40 390.72 t 409.68 386.40 lo 409.68 394.80 lo 422.40 390.72 lo eofill st gr
+gs np 221.76 388.80 t 221.76 391.68 lo 251.28 391.68 lo 251.28 388.80 lo 221.76 388.80 lo 221.76 388.80 lo eofill st gr
+gs np 211.20 390.24 t 224.16 394.56 lo 224.16 385.92 lo 211.20 390.24 lo eofill st gr
+gs np 262.08 390.24 t 249.12 385.92 lo 249.12 394.56 lo 262.08 390.24 lo eofill st gr
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 6 6
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<36> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<53746174696320476174657761792d537769746368696e67> 249.84 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 178.80 t 107.04 384.48 lo 741.84 384.48 lo 741.84 178.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+%%BeginResource: font StarBats
+%!PS-AdobeFont-1.0: StarBats 001.000\r%%CreationDate: 09.09.98 at 15:50 \r%%VMusage: 1024 36745  \r% Generated by Fontographer 4.1\r% \(c\) Copyright 1998 Star Division GmbH\r% ADL: 917 200 0\r%%EndComments\rFontDirectory/StarBats known{/StarBats findfont dup/UniqueID known{dup\r/UniqueID get 4092170 eq exch/FontType get 1 eq and}{pop false}ifelse\r{save true}{false}ifelse}{false}ifelse\r20 dict begin\r/FontInfo 16 dict dup begin\r  /version (001.000) readonly def\r  /FullName (StarBats) readonly def\r  /FamilyName (StarBats) readonly def\r  /Weight (Medium) readonly def\r  /ItalicAngle 0 def\r  /isFixedPitch false def\r  /UnderlinePosition -133 def\r  /UnderlineThickness 20 def\r  /Notice (\(c\) Copyright 1998 Star Division GmbH) readonly def\r  /em 1000 def\r  /ascent 917 def\r  /descent 200 def\rend readonly def\r/FontName /StarBats def\r/Encoding 256 array\rdup 0/.notdef put\rdup 1/.notdef put\rdup 2/.notdef put\rdup 3/glyph140 put\rdup 4/glyph141 put\rdup 5/ch5 put\rdup 6/ch6 put\rdup 7/.notdef put\rdup 8/.notdef put\rdup 9/.notdef put\rdup 10/.notdef put\rdup 11/.notdef put\rdup 12/.notdef put\rdup 13/.notdef put\rdup 14/.notdef put\rdup 15/.notdef put\rdup 16/.notdef put\rdup 17/.notdef put\rdup 18/.notdef put\rdup 19/.notdef put\rdup 20/.notdef put\rdup 21/.notdef put\rdup 22/.notdef put\rdup 23/.notdef put\rdup 24/.notdef put\rdup 25/.notdef put\rdup 26/.notdef put\rdup 27/.notdef put\rdup 28/.notdef put\rdup 29/.notdef put\rdup 30/.notdef put\rdup 31/.notdef put\rdup 32/space put\rdup 33/exclam put\rdup 34/quotedbl put\rdup 35/numbersign put\rdup 36/dollar put\rdup 37/percent put\rdup 38/ampersand put\rdup 39/quotesingle put\rdup 40/parenleft put\rdup 41/parenright put\rdup 42/asterisk put\rdup 43/plus put\rdup 44/comma put\rdup 45/hyphen put\rdup 46/period put\rdup 47/slash put\rdup 48/zero put\rdup 49/one put\rdup 50/two put\rdup 51/three put\rdup 52/four put\rdup 53/five put\rdup 54/six put\rdup 55/seven put\rdup 56/eight put\rdup 57/nine put\rdup 58/colon put\rdup 59/semicolon put\rdup 60/less put\rdup 61/equal put\rdup 62/greater put\rdup 63/question put\rdup 64/at put\rdup 65/A put\rdup 66/B put\rdup 67/C put\rdup 68/D put\rdup 69/E put\rdup 70/F put\rdup 71/G put\rdup 72/H put\rdup 73/I put\rdup 74/J put\rdup 75/K put\rdup 76/L put\rdup 77/M put\rdup 78/N put\rdup 79/O put\rdup 80/P put\rdup 81/Q put\rdup 82/R put\rdup 83/S put\rdup 84/T put\rdup 85/U put\rdup 86/V put\rdup 87/W put\rdup 88/X put\rdup 89/Y put\rdup 90/Z put\rdup 91/bracketleft put\rdup 92/backslash put\rdup 93/bracketright put\rdup 94/asciicircum put\rdup 95/underscore put\rdup 96/grave put\rdup 97/a put\rdup 98/b put\rdup 99/c put\rdup 100/d put\rdup 101/e put\rdup 102/f put\rdup 103/g put\rdup 104/h put\rdup 105/i put\rdup 106/j put\rdup 107/k put\rdup 108/l put\rdup 109/m put\rdup 110/n put\rdup 111/o put\rdup 112/p put\rdup 113/q put\rdup 114/r put\rdup 115/s put\rdup 116/t put\rdup 117/u put\rdup 118/v put\rdup 119/w put\rdup 120/x put\rdup 121/y put\rdup 122/z put\rdup 123/braceleft put\rdup 124/bar put\rdup 125/braceright put\rdup 126/asciitilde put\rdup 127/.notdef put\rdup 128/Euro put\rdup 129/.notdef put\rdup 130/quotesinglbase put\rdup 131/florin put\rdup 132/quotedblbase put\rdup 133/ellipsis put\rdup 134/.notdef put\rdup 135/daggerdbl put\rdup 136/circumflex put\rdup 137/perthousand put\rdup 138/Scaron put\rdup 139/guilsinglleft put\rdup 140/OE put\rdup 141/.notdef put\rdup 142/.notdef put\rdup 143/.notdef put\rdup 144/.notdef put\rdup 145/quoteleft put\rdup 146/quoteright put\rdup 147/quotedblleft put\rdup 148/quotedblright put\rdup 149/bullet put\rdup 150/endash put\rdup 151/emdash put\rdup 152/.notdef put\rdup 153/trademark put\rdup 154/scaron put\rdup 155/guilsinglright put\rdup 156/oe put\rdup 157/.notdef put\rdup 158/.notdef put\rdup 159/.notdef put\rdup 160/.notdef put\rdup 161/exclamdown put\rdup 162/cent put\rdup 163/sterling put\rdup 164/currency put\rdup 165/yen put\rdup 166/brokenbar put\rdup 167/section put\rdup 168/dieresis put\rdup 169/copyright put\rdup 170/ordfeminine put\rdup 171/guillemotleft put\rdup 172/Tom put\rdup 173/Pete put\rdup 174/registered put\rdup 175/macron put\rdup 176/degree put\rdup 177/plusminus put\rdup 178/twosuperior put\rdup 179/threesuperior put\rdup 180/acute put\rdup 181/mu1 put\rdup 182/paragraph put\rdup 183/middot put\rdup 184/cedilla put\rdup 185/onesuperior put\rdup 186/ordmasculine put\rdup 187/guillemotright put\rdup 188/onequarter put\rdup 189/onehalf put\rdup 190/threequarters put\rdup 191/questiondown put\rdup 192/Agrave put\rdup 193/Aacute put\rdup 194/Acircumflex put\rdup 195/Atilde put\rdup 196/Adieresis put\rdup 197/Aring put\rdup 198/AE put\rdup 199/Ccedilla put\rdup 200/STARling put\rdup 201/Idee put\rdup 202/nbspace put\rdup 203/Edieresis put\rdup 204/Igrave put\rdup 205/Iacute put\rdup 206/Icircumflex put\rdup 207/Idieresis put\rdup 208/Eth put\rdup 209/Ntilde put\rdup 210/Ograve put\rdup 211/Oacute put\rdup 212/Ocircumflex put\rdup 213/Otilde put\rdup 214/Odieresis put\rdup 215/multiply put\rdup 216/Oslash put\rdup 217/Ugrave put\rdup 218/Uacute put\rdup 219/Ucircumflex put\rdup 220/Udieresis put\rdup 221/Yacute put\rdup 222/Thorn put\rdup 223/germandbls put\rdup 224/agrave put\rdup 225/aacute put\rdup 226/acircumflex put\rdup 227/atilde put\rdup 228/adieresis put\rdup 229/aring put\rdup 230/ae put\rdup 231/ccedilla put\rdup 232/egrave put\rdup 233/eacute put\rdup 234/ecircumflex put\rdup 235/edieresis put\rdup 236/igrave put\rdup 237/iacute put\rdup 238/icircumflex put\rdup 239/idieresis put\rdup 240/eth put\rdup 241/ntilde put\rdup 242/ograve put\rdup 243/oacute put\rdup 244/ocircumflex put\rdup 245/otilde put\rdup 246/odieresis put\rdup 247/divide put\rdup 248/oslash put\rdup 249/ugrave put\rdup 250/uacute put\rdup 251/ucircumflex put\rdup 252/udieresis put\rdup 253/yacute put\rdup 254/thorn put\rdup 255/uni20AC put\r readonly def\r/PaintType 0 def\r/FontType 1 def\r/StrokeWidth 0 def\r/FontMatrix[0.001 0 0 0.001 0 0]readonly def\r/UniqueID 4092170 def\r/FontBBox{-12 -210 1083 917}readonly def\rcurrentdict end\rcurrentfile eexec\r
+d8061d93a824650eefe2785f13cd28a8a226cfb0a1a9915b91e00d2c2cb80ac548a1ab21bed4518a56748942842eff6121b01bc269e7837046266cb27dafd3a4fd0344e68245aa98a5f1b5bc9db554ebffb879f1c082989cf6c044b76f4814df51dcd03f9e3397f3c73d94f85771983bd52fbe6ecbcd9a2cbb7b3636cfb819daa5469925fc89a188732d68c6d06c906d183cb4bd495aed0c41fe6b7333ad90a1674478062c8996476573a0cdad62593c86e4741ecab7b8c75a6bf02971dfdc2c5a2e1c8f74ab1e91315c54e72426da3a62dede611d5967201fe8bfaa5a21c612c0b245fa35c6706b7b9aa3f73ce16604e3109770d367fb30fa663aa8d2b246de733d27174a0b818d54c58c3676435d43949eb9e5e335396296bc3f096fc154616c0b723b0b4a100ed45072f371f77f26e02f1dcc41376638097d79af0a4ddbfc37dd6cb60d0d34ea5a7536c655d95549b8a5a269e7e927c3d89f74b88e17973c2e8d64688089d329abe6b1009c0334d57a6dc34f22efdd933023231fa03fc81093ef255a199448f17d8f67dbc57c38b2fa163b8cef97a6f42e74af55319eb81a6fb9de18810ba9e3659a7144b80aa066a9f386de3030fc4985efffd13c0cab7049a09a71dc1dfa21a1540f4289b13dde08c0d3b4a01fd2bcb4e256b398c94036935bc270713a24c51042bac575ed4827e17e5dc2997753fcee0ecaaca582c85518edc0c3dee2851fa4d2581f7b399f07013ca3d1d4702cc27be134cfa8aa1cbfecac76f1b406b5b3126c3b7b60ec34340aac6433997656b3dcc1af6c8036f051edfc109a493243546721683fe5c0e48790848079c74ea0640c3f9c92cdd22fab8af9b5575a5d1d2cea0f1f715505cb02a1e200cbe4ea5563d0475cb13bda929286f9c11eab10ddd676314996954ae3c94bd14f364d5202e6ddd20b1b4c7abec1c061b2d8a1776577387a2f2dc424f56d44e58b96f91f7b871627089498d76bbc6664e1ebc9b26486cb727d4a5d62fe405324ceb0a5dbf51c9619f2913e4dcea44c5bac49d74bd049f28b83955e13f0fc77d998a307b0bb560757b21e4a982b59cd5723d66952b8a7ad0311ee6874842f454046538c475b86983b4b8d9c00e814009235a058f6d5fca9e8339555518ba2b64ee925cf0944deff5c14069a1ee1de2cadafaa6421f495c21c042690b3a7c9e6a5a137ee005240308e63e0b1d4bead90ec607d19c57ecc24c2ea9b8ed4af8e5ec19575ba230c19156ff9b23915a7b50666ec4b655a2946f97c5013cdfc31825f2c1040fb28bb8876b1accb1fc005010e5e5d061651dc9df17b7bb37c495a37df9659962680951290f3f4168dffb294f83b2a3c423526a97451e2504fc0c819f4d263834ef7c8588ea4d68c98eb5e3ee3c2de20a6da219b3256400a7c745059581d33158a505d5bb07c75bda324c2d8fe34eadb98520c7b82838835e92ddd1d89516478cb1ca795324f802e1f7a5547f671588fc3e5b909f5ab9d573bb0766569a36e89586b7410b76867cad6577022e9be567d1a5578361d83b817fb994758c679fcfd6b22c9fa7c6c76f2a72be566e42167247c831f826d9a10e03874b9747783adece88750be1206a07923cd9fe06b677b61c69a7dd9e0f9dc60771ac529f6adaeee9ee6652cdeca5789c7f242266d86f0154a1984402c720adbc3dc79b6eece6d378555d78873844ba1cf057f385e70474132e0bdfabe169a631e07d12fd21f18736013499081e58d72e9cd451df304a5bf52c1f1723a5ec8b7992d8fa3f33d5be97d4c114fd435a94607f8be09812bc1fa4db028644e2fcef5d86ffb947a14993a93185b054a7cd9ad734c62f2d9ce3c0f9e2e8678bae5b92315f60169aa85d4ae22488cfab72b841374ac3f39966b9e126ad64c0307b54085b6e25d51caef51fecae4c5ddbfb5c29b15cc90ec0795123a84d3c31173b49096d617707d9e192da82493ac9884759115c02ba4686ed464d523aad69167e24e5303ac3eb3da0eebcc420fdc256cc26d466f979c8e637344958f02ba9d3a481693fbf13283d7d276af546abf2f2bb4e6c6f835c97e532bd5b40e8b08eea4441e8a9e03021add36c4fe28180ea466082e4fd7facb03f7abd47c929c4e0d84132835e59f8276ac7fddec7755cba924dd1c97e02691f13f2e159b1e358ef2ba347e2298b0b39f5ffdab57daae22d94ba5064abf716c866b64add8e3981b76a77a3a8be0a462594b9e1257e7940b237875e000c0e23a0841a85da6eb5af931dc0ddfe912285d160f12a66ebc8717fd37c13d20cc132218d31680d596ffbbb2f2805fd931c61693bcbe365f0d19c8fea4ff3eceefe09c5e29b7fde3782b8adf4bb1aa7f89ce01fa59d1322a1ccc4d92705e274bdc287312b23ab830968143efe12c8d4ac45e0c72c11f630eb5ae0c835b7f7d32cf261c20f04b7df8e362cb15cf38c531a3988afc8eb957fcee0364049ccc8d8a6935200970293486bb69db1969a2aeb39829cc4bed803e0c266c77b0dffd349ff9ae8f95558a3977775b1bc2dba5be54800a9e9645155315b062d0b5a0491cf90a66e84b581070f30d5796f71e88db0352432e8df588d25c9c9b2dd12b976618551d5625e357737966d9a15fe3cd9d54bc275b6f5993ecfcfbb373c419e2f8ed32fcd56d30db1345987a445ad259e03053244a1ff80c9343538c74845a907b0480f013289cf475df6c989a81aa5ba904a63db328292553fd4fc3a783fb76ee6ae50be4809ea0aaac9a9ba429c9990eb45affca8587972c54fdd677cd14f81404c77e4358212f44826316a927983c968767e7be1c7a36f308b6cab1648780b4f1a568cbb0ea49f6a6352d6ab18d54d442c176037ad16e18a17d88cd8fda7e86895c89368239f0f75f8c26f850316a328c40efcf316d8829ddb0fb69b250e41b94144e0475acadf63e51f27f6ecb6af4ed78ddce68c055b7a1f78ec1174bf9d67f54838da11655980a909ae1b80a2e6282137c75e49d703e6d5b4be616e62b020a8d08efd14912337a75857920f1d3515ab2771d38d8d8f610c9801d0b0c8d3388c75d211ac4e4c0c491d3b70e1bf1b926a6fabf60487613e76e6f779c4aed60929561ed06c676de7d5052f60db62e446ca4e2775b966f74a2ab55466ecac93c65e48d5e6b88080f24534ca63dd1e6781920be3010f3e9ceb771c5509754ebf963de75b4b9c9116ba7f4e21d9d89d2df167d8c5674b2fa61f49f016b4269e602c6e144de4a382fb7f185dcd82942081d6362f335695587d2ed1071a70bb27d51200a1de03763bec6b2c7a86d8f200505c07f25fc6be9c044110607154cb69efcbfce495dc86dc634e20349712d3754ce99a8b33cc59ce272e39f481b729c878399e51976652b4a525d107ebbd809909ec95f07f2012672601eb9ada5e0b3292d68b6ff8d529a2dcd23f7150d77ba5b1a36701d5954d37ee96501f9efa8e037290f6dca8c024ec0a2ced95b8dcbfea0ddc55dac8ffa55e224d33fdae74502f8f0085fdb5d6d031d34a609db4ed63ceeb285f3697049800bd560e31bfdc6862a49da0ff4b4e84bac9f184e08181c7870058559f826977e851f7dde09163b8b3cc82be8103f7baea3072202ffce888f1bbe37cadb748e2a3b3b53cf38b4336a4eadd0afffd76389b1dd9d067888c4e647b07a7643b81fc08a15872f08f6295eb45e7838021253432f2bdfca6c2a85aa70efea06863d3ebfdc555f41abceb6fc1a5f92448e917ae97706dc04adf0b7bc817c1b93d2f924b118fac5fe6053093401a4676c6d7ce7b4ceae1f5c149b1d8d712d32d56bc8430c210a7124e192e387ed9696df38ac2763e3a065c3ae4726afe9c16b07891bf5243c16add2bf494f9ae8b7566d4ee600a7fcc945d4bdd305daf4df51b1c0222e5594c65af003b51549e0e790ef194943d4accef39419ba173d05788ff822d4e3d4fb5a612fb13292aa377e50a44a6953bb793d0c521c2179012a882b74ece2f79723fb75624ae9c446ba358a3effd738ccb59a856f1bb5afe8635e1033936d58da18ea1f7464758e4647ac03552bcd1be22ef9d4c0f4aea0d7d1c91234ac50d5192bda73b0e63a8303ee284009e6f42c0a8671cbac1c02ac67f096cdb67e83a8d3a8b0e2915fe4e498d50a80892a374cf637cbdc145c2a4a16e0449fd300f7f03b9c80b320addb404d3b7388e5473a6502c74a9d614b21f2526b2e4f9fd9c5adca0f01677b57de5a55d60d9c428c6833d7abb14514926e09bba6b07763aad75d0a934b7c44976be43c289fb238aeff7556183515a5c4b085447922adff5498d29e101a60ff02e893ce8fb8d446874914eb3d3009db46a579d14dfe884d22d9ca5bfde436f4bf334c8c8e73cad66d26b9b711b3a2a3ea84d6864945e529bf59d397ed0acca03a3bb32e470c46cd6639cdae83b4e8e6decd2e8574e1b9361e2600bdccd6c9231ddb2b5981f4148984e0d21d2bc7c54fa7b32144192d32a60bb17520e855b14ea6ba31068d4e209a5add8dd6cec44932063adac2280f985cc70099a1fffb3cdc3134604bb8e50ede70ce9db412a309a21a0541662050f545cf6f2fbb39e9106e83d34dd1a7f9f08b66e68052482a68778687aac8b793ca24cf3d258d7991c4d2c0eb760d1b83dec08277bce87bef9883ff7af63a927a509eb44ffdf2f8f2a529baee6c68478a1f8a10c81fc3fe0a88004843f05d15b34d04149508d7b29ff2b11ad5e150269dd78545f0f57ca1752f6197a8539ab3aef587645b5dda3dbf18060d30c3426f2fff04d9bf22f1591762597d72cd6225f01377293696235f084801440fb9590bf6468e73c11d7de5c7c9899d6a84a9bbe18c8238e117ae4e74ce9c087957935630399f186f4712caa2775ee026f1c9f334bfa2ea897f2cef8f6d2f200bb2fd7d9292c056149cb3091d54be657c5efb690dd7290b7f866330d8b64cdb134019ba3c608bebca348fac2ee3891d54ce18d427de0e8270ca0b19b5cb9ab69ff7bfce6b5c6431fc794f1a2ae04975dfca6d865e38a85d0092b339119f43ee8f11f999ff0132145ef65f2786d9dae9c45dff0ff2195bfc604db64e4da4b681dcb6a3e2be4f691bad02abb6347e7ffb00172df452182679d10029a878d14569825c6df61c229e158f92a6a0e0590722313729ecc3c93a9de9f044e62d3abdf500ea46557e90649aeb8cc582bfb6fa71042b330800d50aebe27e1b7605c3aca1f67c4116d93a1d59d7f9a9d7dacb2c949193b0e901291474ed0f6b746c680b337ccc6adcccddfee2ba9e31f588940931c6d697222b14220ece34f97d640f78eafe33d689d8c5e94ba3eaccb197728d58924f1325c5951246898b2477057915ce4caea524151e7f3cb049441ae88014b89fe7730eed66c4161b2e01d608d977d674edd37527433214b40081ec8a262da3f69f07dd54acc3a8dc5058a927bf7ac5d3ff18e0e526cda9eeacc331cfecac11d2bec5872fdd5cff5f7459a42f263304294b139fd7106149b962873b757a2db3ee8e030a8ea3af3366fa5f3226d9f9de3c48dcc0f701ac74385d2b753e655804a834456e17ee576872bb5e9815bd6ab6a4555ce5fdcfd0b1637357424813dfa6443a46200dbcd46f7a15d342c14e5b99c1e53953283d83e81311eb2537162005d2bc0f18b336e33f7190d4cc4ab8a86f596ac2522b6fe3aec0befaf024e35f811a309c8a03734e432ac4695d977d6fc14c93773edfe0eab4b5a0a6d55b4ccd205086b92107a434b119d15f145d0f3511f823e69a4b3777b659555f06116cd99075982c200e36eff85d7931c7b918af5504bb4129cf65c8a33964b3b6fd3b2340fd3737c73f7667632cbf81535b88096e99a5e98ffee00409948eb2b46010a275ffdf345bc0e359ae4c2b6b804a36ec5018db1ddfd43ed28e0982be3dd61a41fc78221bfaf4eea3c94e8819e2d296a355bf61cc29ad69e2baa9caa77f4587be6bccfb178d553bb99bdf52716e6a8e2626505b819cc595f5173d13340fde8dbb4db3313a66348c8cf5fddfe7d7fd04becc8fec0ee1385ce5329088e772f1939fd59e2dce71c2946044fdcd131e06695ebfe5ae6e512640d0ea79492c20880391bffb1b3c9851cfba1b5b16d5860baa2a2b1f4e0a571aa3551cd73256e171c2590687e3596108defc56ca6cefb27095380b0bfff828d897c5f4a1f7710cc1fbe37ce9254c27edb772093e789a7e2a941d676fa8f14edf641dcb06fbd638e74a3764be77ccb7f93b5f961be59a6df0c5305b6ab3a20ead2d3eadd749fff40762a25833c9efbe377d2aae40b18e7785a77f9eb4f05f987ac7572854859f5fc5f56240e94305543baf5df3fb905a1122d20d09d7133923783f4d1e30ce9bc990e1d4989280cdcae75b5a78ff48ec68254373f9a57663255c0d5a18bc78b3cf2002befdf0cbb3cb5e76243b963e16ef7a34a06016dbd728117ed141ce213dae5acc96930ef9320938084dec3f77ee4e595b496648896de03deef6fcf49f6477a04a0b190fa668ecb8dec555db55d7ba7d0151042dd4f205e50f53ca706d93c9ae1b67b51989ad1b3ebb27f2416588397429d2129bfe0d5fbc7888fe0ca49754024224ba6fbd089214122d5c5dfacf7fe314c34581b80fe2f0786f7a70788a1dc27bce9f69daf04f197e9fe3f735a339f6f88067636e23559d1a02cd1d8b70fb07146532a5b404a4491d8650a22ed0f49088e86054e76656f079074ae121f5039c5a128109551c3ad7bfb874de16f639a82f0cae1ba1e26cb21bb8ab0ffd0fdda61da950d00e9a9d319c32757cceb80c07716cecf71f96dc167d760bcb54c8c41387d7fb8b5f884a0f7f53acced99690e1316a8f2005edcce538b3b511a637736a08c932fe9f54e281535c9ebe5716228cef9648813df7f0ce70b5107833eb4025e11f93aa574ca8215ce3dc6a5069f03f22a2224d9d2f8c819714b3b02f32066785f9aaf616afa69a3c031f1d1ece51d541f60d6b8e739b63b0f6472b93e5e34cbca3474b47deec1d72ddf91baaafa42078c177469e8099ef4a80758225c7839a0ba643dc3c88fb01ca0f278f077675f0f3bf3319931f129dbd9ef04dd0daa8cf8bc6573b6b2091b64326a366df67a739f27f8c20f47ea3bea9a9880b0aa3b558c56f6596b0f51b124b78b717336142cc03823f2d75c0ad84c09868cbd0dcfae4ccf37b345a26d5e08b20c36505447042ee2ce81f450a835d7e0b679c0c9eae37ef6982001a8c52708c5db0ec2294a90b9876eb789ab09af859a0a879cc27d2f52dde9e9a6960fca2530244cc26d3a21cb294458d707dbe2441460d79d1783fb334a3d144339bdd635b676a1b260f5969bf089d59a526f56bdcf92bbb2d52cb268ccca6c66e4ceefa57c72cbdf8a4e1a2b57ff356f8fa49db680fdbaa3d4df9f1d6201307a44a9ebef9ab8c893518d71beceba645d6df155f6aa68163f8d66b40c1084b673ac16b287f763d40db303c4c9f9e76a3e8fff77d595e97f7e59e56b02aa8f005d0c6830931892207e25a11520efbce320b99362de47e093fdd48318cef9458ab6b4093d1480ab1424e82695527412d0c5e3c299eac02b67ee503a9d04d31431d172f50666fa59e778dc43ffb7eb3f78324a5cd88601f7109bf3bc03f0256ec90473715c9a626a8488a4ac0403438c7fb97438334506f3718c262c6fb671cc1501e1616281c50c1f1abb0e796b5a989d9419e9146784619689562ee006255b58c5030d4deb7bd4e723d5dddced22c58905adb6a1b319ff10a8610912023c965c87e8b9f50babf746950ca2b356c1a9cc1cb8180a3536b2a639a147f65a8178fbe711c5fffb8fba62069c74e02ee7bb219bde7f581ed080e33ada55e37013823fbe5eaf8f7b774209a75b047e7626b8b82733f525e57792ca6c79bd882c5bfa323fc5ed98227c892ff958a359fcf654cb8facb6827d717a899ab9b4d2093e7a3762ba0c9f7ad55124173a5bb29f9f8769484f698dc8f8b394816dd74eff3b1a7dbdf16096bd0ad1b5bd409d56783b6d418631be43d241d6b834e1e8107bd9e296f9aa43e90ef753d6ad527875f230f6b1d3914692840fd51e8048ef5ecc8e7d2da90645c8e0acbdb3803d677cb07714a5fbaf0caa48234e6abfd0cc1be8a80ea7e956ec40a54ce712c979d9d108c28566d3c71c93c25fd7c202c637aa06f1baa00ed6262f87062cbc03e7722983a7c87645ad8d6e0df84112139cd220b03e3b874dea9b9705efa254db06927ab7951eb72ea84b253e0bb877b77fb1810b078ba9f20280d7e85fd9d134ee7166cb1cd51525a5bde7cf96b26569af11b40dbf5b4b25a662c9e14dc084cc349bf451cc976d1de3ef735d001c18d7e6027fdba88d29016ba395ab7f6b1d232151acca1ee234a287c2d7843223db3df6e3e5325a9fc82d92b0baa4a28fc927a3c3d307f7a7ca1ec7a54e8b4a56c177aedb633425bc7676a10c0c2d51b5555f4757c2c9908cf39eee8f85913216c5df40fc6a04dc460e99f55844700b4e02ef7a81ddf4bfa798e5ea327d2c66db67c608afb6ea5753ade25c620d52a5ff2c1d43385737d41e7e6cc645b1f9dffacdc0e8cf72a9128abd66cfe77f2c273e7efb2c6d3ddf4848a023911b7287797cb7a3baff8df5f4d8baf2d30d8ef3daa330fe4728f2fc405bf82b6360d1c9f78d17fe13bad721756ec2bba578702ab8a41c094b22a2ea393e9d4d597e5d0c2f12ab5f21d4546ac61e0b96ad5bc47586bd42edd8caf964cd2b997e0bd816ffd593d5481a8ab543384f8090d7cc0d9d4dba9001992366bbd61949f2b33bb6633f45554e879ec6399f11a13be5d195c927f9e4fb503c2f7f1af69725add00166a3c6f0b72230416d09687ac6109eb06d16b8321ab293cc112cccae7bd8233a6206b814694eb0057b708a76f7c793115dbd09b6b6808cddd0dccbc2a20c5abd02a91f0846ac0856a5cf7be1319057e48631937a3bfff2d24f0fecb55e929c1c7d8dfddf2fb892926e20c9fe4a84bc1d9dfd203d438a7f989ba23836bd55b1089bcaadbbbf19e8cf001f75059a1dc3daace5ef08b0b55231f3b63ccbcb50805601c86e10e48f90dbae123b55d421df8301a9c67f4cdead045d1ace302b93f9337ada9ed3ea36369cf35577e868383d69cd425ece04e0cdc1940b296c35e1314d837d6fa900d661eed125ada136ae005179a03494e23a245d96e60cbd7a04f9503c227e835e58935e28bdba5446128f0db08dcd9b85049c5c67e357a3a511f37a71df23c25f971df40b9982b1b5ab845bd4870fbcdf4ea319afa2e225dcbe3b4b06b73429467ab402aeb48e3b661a0355cdeefdb754d43b66d1b576a1ec93994587b16fef1d493d53263ba10fae3dd01736b479e33dcf87dd9af58b353bc55b8a5382aff065773ca8e932d8e55a80537dc04193176a1c38082e3d4fbc38ffbac68bfcbd80ea1682b79961ca070d3f7938571303267b2be5afc70f196383a01fabd8952db19f7c5921fd66ef6f44523adb1bb09ed0cd03c14b8fa91b088ecc5152d6e288f2f388b5870733b489081581fcdc2e1483d3a2dd9b1bfabe1732b2ae37041d49727a2bde007820f328cc2118b610793e6a6996e1f336a061eef6b61120049fd0b9f0847409cb3a8ab404c563c1769de2660b073dcb30bb916f3679b5819958ce2f5330634e2361cff5c0915861ec791b0dedf34a845103f7e1041a366e6109b88bcdfea2e0d0d260f16717d67e20c9a0b624f15f1f05339a408dbc7fa3b8395895bf50691bbeaccbfe69bc22e136a37fb9d074d668eaaa2f98af8ee35119d46af0dd9939462cfd2ddeb85792ca7d38d61e2c5109d2c91fc8232503900396ae6a85b7a88c80136699e77c0d7408eb88538cc544a3db250e2bcccbfa8076d70b026d46cefa250c128f8ab95d1ed9f028d56b01489d81da013201747b80513f318b84fca9dd1c4d65f36a82d09d847d550e1854341338456714e0a93424e6146e34994f84cc6bee325ae41d716920dcc0bfec62368546c901a8d43bf94c9bd2cb56283888ca54b758135fbff776c9fa98d50271b172889414b7e948180c03700d2cf3ebf390f0f9c8985900a76be9171f7439c60e18a0db5a46983722ff1489f77d24f2112b9035e65cfd10fe4c560426e464b6759ae5f24116d16f9a3167eadd85389114535f44f8054d463c1b8bab08779d40b74ee854aa6d652aaf40c30d63622eda14aacdbc002c0891abcc764b676a3b049deaf49d6789c7f9cb12bb6f0d1619548bc12b6df69c98a4af5b085c76966b116d6a2cffe4a00733efe59a473985d5602319fab0f04dc3a55be53e9c87726d6ace09dd8343e3e111858a3ae45b35de08b1730fc628265f0afcd3924b9c143450128aaf68f41fd5bd4aedfaa9411bd33032a81405dc45005c62b682112ce0952e1926a47571a8790d639580797e33f991aa9c0b7178448591f044dc794e31acd413e6ec84b3ec0ac0df66e08e9a89727f91620f3f18f9238ada2abf4557d72553f01bebdf62bdf5742d25b47def93114918c643aa2bf8761441ba5e6699760f9370b5c29545606f6003e4c6e4725dbe4078b416022b20c1d2aa30d0dcbb724783777fcae6d2487bb793e9435218f93573064f47408d08a9c39bc44caa91c24177e8283e59cb9be2c46c5329b150478beed8c6e1e35bf56c3becbcadaef963bbc70128a1518c635420921fb37e2252910e270692e8bd641832740d67f2174ff3171ac73c23512bb0682a305899af28fce475f399ffcb310dd96cd469fbbb7629fbceccfc497fc2e469a14943fbd5c4d24c8c89b66f6638daa38cbf9dcb49dcf016d768acdf758356834503afa00b7f5c8116e147c5397c2aa8ec8a241bb2a5dcfd45627821a79dee1ad9b162796b53c59e3938c94a2a531b737b7d108b9f1f42a2164027e7d3922858aa7931dc0f7e0ec8e0fc30c27d4722a4d083115c916da5976680da42e3a7fdbcb8084abde4d1f95f62a2291847c4358cfe83b13b9ec2f1378f75f787b2b573a027b24e9eb8a47188be809666df8772e43672f910eeb1c23355987358a1bf34c3a88c2647a46eb85c1429e2e5123acfce3504e0ccf4b89e9b3de548e2bc16b8e765bb53568070a17b23aee93b0988b67e10dca6129f19083a22e950a6beaffbf958a232d2b40a7966f96d8d6c1d30d4e9d42ee28dbcf0bfde533a8b5c07c32c90c634bbb90471c53658d596fd066db06cf96e76f5563b2dbf17c284fb88a7e389b9340cb17c0707caee7791234d4b9cdc0406a59ad5aa3ebe06c7ac21851139171b188bbe7b43422e3847e30014dc2f4966126c2d23e1d54d0db34fb2f415347f14ccdb4f533d2f4ccfeae45f21b027cda966933daa5732464d7e125f32b05447fe1d15170654b53a5fc3ee1d2d8427096d1f71f2bfa3e240740c879ab752f0b14d1d17fd880f05d65ff64a05bc08f69d97fb63dd78346b9ca038d79764cabd013d57fb3506d4b0ccef1c92bbd704aaba9cb912e6034ec9ab77210531c9a1266c272ce3261dde19b9a574fe5a7a031416011100ef594396adaed9f884d18173f0fbf256e47d5c57a47864a3d592c2324c39bb6b9f8cd770e23e5884fbfc119eace855f4f21356a57f912c9e27fcd292534cf2ce0e0490aca08b4df6a3faa614239252279fd2c3df91e054129e1ba23fd9b7a90ed0cbc1f9f8790ebb11bec7b0b07a228054e1f8bb4241ab3a66bb6a224bafa455ebf835e5cc1b0f7701e2e64190091a577dd835afc77e72f3970721e1b6fd64ed65abe1b7376eb58e3273254b2da264df7a97286ac43f1c55f1b50710f54cf02da4023260084aa143dff539c5c7d5951767d0ca6b48d5ae8dcfd1727774ad1c5e7273c2aa5076c0a0fa3ff8f1bdd088fbfc17040808f3bbaa83a228b573694aa171d4fcdf13185e0a010788698eba537240a9ee729d7af975b4a8637901fa3aa401cee44a0940b4378ec67b101784d07fea844a50c542fe2a3e01bda791c2ba0ea9879bb298b7883e1b8ee13a88f9dd3b28813baed3f97c29bc8b9b2a0bdfd03df29f826498abe20f8bb7ef6be2930377c56430b7b0ffafa4193998c32fb12ab1ff63695a3201e227698fa8fcdb065c9c3a82d2f0b8a78ddc9afd5a1c5b135b019c22a46d8401559149293420d91aa98397741e9cf6bd30134bd8b5f3c5a1889e5cdb61aeb0f8a052417c5dcc3eda52fd90b2a8c2ade1a0cba31ccc88a78e1573f68ec6104fab6c417c631e90bb9ee10daba4cc047ce30b2eb735ec694521b7a87edf3e15fbacc941269090845894eacc56321d38ebd3bf3bdcffe80e3b21e4683736c81a61ced165e3a2fa10b969ddfa1f55d340612e7550144aa43868d2ce06491f2e5e089b1fb3880c17b6040343b795832e1638791ab2d12b1df0ae253aa1b3e9fe01bb06f7f306c7468bdb397cf4a9977caeb0a3c95adcceb5161f95c985b08d5d703bdd011d2d4a38f16795b54058fa2183ce076cff0762b3ebf56d8d8d0fafdd508449a2f5b0a8692eabfa509dcd0b38f09f4f99e56a0044c61c067a107857dac52e1a364ea053dcb290a7cc1c78420bf502fcd56c804c8729871aae4a4752eda8c1f78de3419afae90eccdc7572a00deb5e1a90d1b8676ac638f011b18cf42c99264d350b77a64a09c433a470f3a2ea988348f59abaa12a1384b0558890e955f1f385c05c740a0b44bb51e9cddd91bdc46c8804eca94cbf9e0fb0c18b770b70f81fe5c9c6554b3a781b22665de565d08fe0b3bf6a57943888d387c19c296827e60eb6b81685016bd1b1c8d95b29eb8c335fd76b208dbd5054b22e1fc0ab4743f7b95d623ca64c9f9afd5285978bc5635a54a70aa16e736372ed027e9518a4d0d0f9951996b210830e6d46ce43272dd0923483f986349321b2184555b6a6573bced5fc778d682085d1970f05cdbe85c936a4634c9821776b4ca2e8dbadf3715228a73c71aaa271ad02bdd76a00aca5bbd2036ef7bf949814e76561a22c2f2ebcc43c7f4af62f5a40e2df2ba612e77adaf6715e1c980aec44b1164ea20020dcb5d9fb7072052e733a0a5b69d175ba8cf48b780b371575e490571e05b3fbff92f1e0fb87abfb18f4f81c8838d5bb155942adcf8911fc3926a22d60bc9037d8eb026ea975c00937d79432be5e791ff1265b396443813020ad11f0e0ee66bcc4d68aca9ebc2b4b8aff28de824007d9d9d00a12ee894e55c565f957f5f0cff21e1219c0badbc99de37c17efaabbbdfa903ca892d5a99a7201813a2ca9cbf7b5d19d779c82af7a1be51cce30ff3820448d2e10b39154573358bb6376ce5413267f6de7d7cfcb8d4d9aeed7a0f6648834b1452c58f397ea28dba8cadd4ef29382d757b78649c6436aa3e38505e1543fad8d22a415f8c0b6afa7bf16cbe0aa85eb9042f0757c8f3ce4e0d432b2b0a328ab69529c5f8bf8da11b0b354858df07e4644aeda913eaec05fdc24b95f6f4307741897662f347ff5785bcb06c0aca0ea708cfee767f385962de34b05f897242256c1eaf5fd9382fa9f07c3b2acc2d0193cc7688fa71448b4374cc3805cec6e7b503a693be2438fb03037d7a70088dc9fe10ac37c84d29c8b5f04648bc23c998872af1df21a88cee43d52ab580248f6d11c0896d25c4ec8068afc138518f52a23c9c8ae8dfba103cc49368a2ba7a6111a8d0e154d007cecd32d9a71c3341ee238d7664d39a263ce2d5efefe4065c1654c4996e5eb10397d78ab6ad8155ab5c815707655d2a85a00187f8ed16ca19f0fbc8c116417420666e9edabb192cb81fc6e2a4fdf00bcbe0ab582a63de69af3d7e7c6ec7f23c09f02a81a221ca2d2edaa751bfd3949ecc3e81d6f518453b47911b0aa13ff53dd8a4af4b6d8f40cf4ed2f5c3e700749aa3211aab791b9e9e899b4e53f3cf1d1c62bbdc06ae2ac394be1a9694858919da321123184a8a07d01e084655b974e8ae6919709ffcc4826f62b6a5dd420b784eb881ae6e682b292d2e575a28eec33e21afe2fe17e024829ed46bb4babce2e65d97a656feae5f5bcd3f10312a5a102bac3e502a468c382349d47b6e7fc4435a8c56d61ca2c33d93ded9f2165c1f640cd23b0f36e64adfd4c5afcba0fe8cab87ba2040efc0c2f00d3fbab933303b1c34f15a60158e5ebf5c82ed18c84c54babe8e1e4910921d3cf829cad909acef813f174ea65802614fb567944b14630d1e4b063c49637e7110a2ca6de4f34935866b3ff0c3643014aba7f8ce5b2701abc1e0f9caa048e7d8fb937bff1c0319a1de8f126a16740d7f0a8833b60b56864f98ea428e2f105ceff6dd30a16bd24da9f75dea0f4ce864bd44bc52b73057527b73f35a7f9e7bfdde6435e68fdd781e82b69b22c09b139b35b5a47a385ecf05cbf2152cb5c686616f81585bafa01d067a5a086cee61113870dfa9bda1b2eb1975403b994e4669b30bd5354784b1c5126ea7313e3230fbab806e8cc7411149ac52029430ce0be92453dd7cb39026ef26451d2f230392670bdc181a0d0b24267d08861c5e5e0d00d85b84a0873c02f678f2522eb8bdb04c2624256e79396404f475be988e4ccdca00ff9c4aa86cc48ac5f05d2ff1ae536c5f576d719862d44049edeb7d25c2e78e328bff60bc1f09db639c10486d65a8da9638080ab92b3c9af7799a8149cc771857f3d36a495fd7e58236beccd8ecb68aa4fdd1f8b3fc21796e7327e0eb730e0cf78567e40a8c0842dc3a9f7451f347af2375ef47b560bf6f9cdc8e682ae9574b9d7c9cb4c764ee84a22303a35b49568d8dc89f74c0447b0f263ec71e4acc6de6e6116085b7edbb61ca4b198e2af4dba714c3fe6b9c821ca1880eb1b896b01d086e80a43ddc9619789c75ca44f8dc9d4013ed4d10c50976201e6f020d6993d42fc902b299000581b04d1db1a4c548a774fff638bccb298f45bd0a30ac11a107e6b9042c41634732855c7431610456d2d163129166cf90feb8df5a72ad9ca31a8613ca3df539f599996904716878028bd884b1a8d75fd0d3fcc6dd8e007f6f9761ba55a00fa6799b6a3ea67a6a55ff8843cfda811582ef1b553b27c05331aae09b5a46aab96566568153afaebb7b4ae5e71f7cfa6fe08aaa52aea18d1551068e25942f623c4b8e8a56f46e352cafe4885dcb1eb19c458580d2049ffd77af8380ff452acf5ab88fd52d7ef112c29ff6464e62465398fafd06ef81bd3fc2b4feecc6f45f0146c96d4a7c0f90e861a1d433c5deac14a019f50511d6ae9f363952c0ba815bbb3774c97c16038e82e39b76bd15f58f6c693a973d1cfcfdfd65ff61efd3d6ded93c3aef8a715097e97d24ddc94ba972fdd68c732e1a9001f3fcc1a71f1f9fcc1b98637899fdb949c281d858130712d5d5408f0208d62f5cd7f81dda2649edca15790c87cd4e24ba48a7ae328822f5a21e57f6fc5a6fcc71d532ca6817f6eea89f76b60e4fc7bd243c2d2163b46ec46ae4be40764f95d1a51efe6f6d8274b668c50cf1de75ca2b4791dbca7c9232d147d568cfeba0b44caf8154bd09fe8a55a8bf1bb1afa95226a827167b13f33b924ca637182b0bac8b56e03327986568016841bd25cfc769000a7c746b2d930d291ea94f371563b92535003c4bec0bea1b134915286a1665b643bd011015ef04ac9d5abd487c0c4d3c6b20a00646b476e518fc0b008960148a123365cb40be362b3b1694a8d5c05d23b018370f616496a52c2cd25021c3795baf897f812f62a5a5721ac8170e79b49cdf906bf71c83af3c445a82a9b0979506e7df0fff03405f717f51c69c995d11456b03cd8bf9395d33fbb127e4cf9d8fc8411a26d42617ff2d64e886ba9fe5c7d5b85b43fc4faf88e7b4eba7145234769d58d53a5c07d1468693b0f93bac6e2cf5a931b11506f556484824d227e448c0a3805f2217f136c1a7d56f3421588e286adec32d32422b95ce8fd81eda1c3e9beed20f03cbe487fdf2d65f59add2bce47cb5f225b2c6c09100225b4276d3cb5b6792be4b8f0489bb750f1188f371880930d79cca6b09b2e3f303f766081097bfbc5e538d3cd4ebf27befc9132225dd7428d444c764860a262e95221f0f1fe57f5ef3e4432d2be9b3c9954a88e58cb329ce9cd37f4fc8494ad1cef800a7bba8d2ce486f7ebd7a5bc9dc73458bda9e4c46c6297469cb8d4e3877ea8db014c04ebd313c6b1ab74abb69b03334d562422a6529b8e68f4262dd3ff05acf1c6d0074d35e4e977c665a26f86d6bae2c4d64114ecfb334c4d575adab7905729ecc6345e3726d7f2c361ab9d75de26315cfeeafcba9bff88c0ce812554b1c6ab0c5765c5618f1bd8dcde547b86af905406ea216e4eb454e59a835fd9648dc5c8c9da88d7a753a2516b50d93e7226868bd0c4c6c2eafa7a0696a8ac2f0f3e6958efc1e6504032b42962ba6eb3c5bf856cbc6bb090d481489c42a8e6d5721b6cc02b34d6650157752126de0cac4c31b7b073e2d6d546476682be55d764f5bb3154d70dfa9244a6fe5580db958e4a766f95a61987102d67707838b177d10d116ad56368c48e815b30fef5fd6554acfc0d9e64d3c4f6b8e9b8ef6af2e09c6126a92f0865045cf97c94070d2fa013be48df5e50bbadd9062fb6183b147f7dede8b571826f81d546abddf5de4f95a97bb75200ef5dec4abef4950b587763db4fcd61017a457c00230cb8aec3bd775980ba70362b6e8d064f81062eabc6149c115feca46efab3b703e76a9241c72f6b6810adda98e1baf07d6a7d8189f6ec869b54941c40080a91980fb827c61c1f7399539387fbec2d1d46a54b1f518859b3a385ca098b86039bba25d2e49b7968281e3e1c3e5c48f2012680d81ccedf131a8c8891b4134bdcfc70854fc7787d03671c9e55185793ff6926ae12f1dfe8cf246fcd33d88d159842e8dfc7c257836c98752b7152039eecefadd80ff76e816146635ed2d36fbcce101eee7daf1515676b9a2b203e1cfc8859d128852e25f9cf924c16d4a47272e495645a6dfde91cfeb39f4e6a1613a901e2bab7c975c885f6424b617475aceb396d0d3da14c102a69987f66f38599c60210dcebeddd8bbc80aefadb225df56b7f48d1ab0a8c92584a41b9fa726a7de8620cd32472c1b89ee1cd0e3da8b595f98672343417f766bd8d9c52f3cc1a9bd6e1c8c1e588c023ac6e5355e68aec6bcc303577faa7bff293265f9506c6107432145deedef7b254d5890c755a39f5b3aee4364373a931e98d5ec011d247fa9ef17a68b2df72810929a628f6ae634f4427c1538dd02e1c9962f33273cb6add06c81d6258de794f09700a9c8b2b6c3a30eeb00ece206d70dca75beff10e9619d80bf0a7d93f24cc82b33640aa992945eac34fff30584801e2ca0fde10854ec1c60cc5c4bf08753009063e7efe7e07a94cce2de1d2add68f2abf5e6fedeb161beb5cbac9ad02c043d3d157acf018751e1140776a7f32d71f34c05cbcdc9c08a7c7a03f596dd7164540566fc54fc1fdc2b23b14f002eff9066b55e30040ff5ac54b8fb6d9d643f939aca40e5005f1d5972feafcaa34f2a72d6ee03ed74fa5e70faa11ad4e8ad2d0f788900aba49c29090a73b3432d9ab5d933c115abe4718cc9e2a2d770e9cdc735ad5991455ee0496b0ef2465e39267af0e36c30da7f3ace53cf3f6010679001e39f6e2a55da65870e9793b447b418ea1e519dca3c2bf0e1d0b0b07ad96a0708f428173694f70a113c0a0f79b3251914d7f8af58d59d6e198bdd6155cc3a4468be06e0af9a1c94c488c9fc6b44e759e43695c0873c1415fbf56c065a3ed585a790bf38784ff3cd7baf3f4b22533d735684bbde582438d213bae7dffaf897289cd0052d6788718be4e3b7c071d3c6c7b75f6e0ff3437e48217e179e35db0f088e80c8aea5749c71fec4985d00647877c9db4a55b51f07198c232adae969c821be6ee6c2b1ebdadb00a8916b1f93b1724775ba9efb421df723d54cf22caeeaa1b6cc7567a4279647a6e099cfe285cb30cea5a1019f43cca22765a15759f20dd681057a0832833c15c54cb1e3f0196aff51abc2b0ccdf37edab8b536c2a4bb072293224e9d4e83ed427b8ab2b92f52a3fa6bc28269618922a022f67f778779bbd3d164aed6747c9639f1628a6643f47dee03112facf7431bfa1954ab2d58c7b02ee380b86bec76fb52093fa5419c17f20b123ef0b0b5c0efded93f18e2c0aef25c1665c3f91a3f7faf4dae9cbd84efd9ec0a5ac4521051118c1e28dc3282be83918c9b23e06363782ad6d6e99f69a016153f70845309cb9d8e85d0ef65aabb02b0648665ae39d5ca7ae9c4de2cb940ad8e9b5e0e59ebf2298c6e16fe35886fbbeecc719f000d9c9764f3f90f66c8f9a243bb25bf84ff7cafb76be8418da346319798866bda42213d5acf00d836b2a0487b7fef2fed4cddf10633bc7f2fc2c0e7e7c8785b9bc1eee0d2d5ba42fafd5360f9c84c1a9fcf8a76ad2916c31d66257c39a760621cd0ae7b4189e051036acd5aaded0acf934fef24fe71a14cadf03afd4b7c1752e0c2890930d3f74b2674bd6135555911face869062ba346fb8bfc45d09f224e69273d4d00d5451ba213c798811eac1b8fdbe4631313aa8e35ab728a1bb9db3c806c46db222980828ecc596b8a081368d73f184401ade2b7f6debae497ef70b13d2aba139f22f233b4299ebec79ec32f868786c60171f0633ba142938699a702eb57a26d9d6b2e955a90f1020e798b3903e9d9dd8f8c98888081174469697170c38d5737a58c8258c8a9361d270357e51b67011ebd39578f6963f18bd050d014b592dc375e006cd02405623bb724b1dade6b3cc632db58ea103ca4a3d939dee5df3307dcbbb3e3d0079fe70c6acfa53430f31075b1ce444454ab8208bc4dd2b71d3d8dec8bc4d49797d2bb3f6b35338e9f1100b6c079f327a639e33cc262fad9b18fb3746829af4c08ad4a84baf08f6cd31070997c6d4b78fce290807a05914db726d20735e0e7058f73856aba4dc8642c0fd52314e856f32e5d0dc7edb7fcf7c5d04e2fea3af94ebff28fa8e886d756049f0e8a4c2d22c94866366ab8b0350e1bab7094ed1337ce3002463e49fc894ccbfd05f133ab0500da55ee616f23b36a748c528ee8e2b792eaf869e606de86d3eb0a7822b7bcef21c010695c05adf371a88b0b36981910ce1317560bf020004077dba0bb55f26249beaa36e7da60d783cf89345b38e3c1b5928b9dcb5a677ec98cd4acdcf960d3ffd40e86c6fa43ffc198c2bb1ba99fc5fed92714591730fbc7a64ab5ef06e18b5f18bd37fa9c3d954239d6dcbba27c3081eb7944d53428bdfa189a83db26d864dfb4bd729a2ea41ec866b8814d8a0664f0dbfaad60dd54ec7c61358ebc416a6bf798fc65c408e48c785e9a0746548fa593858cdd067ae1e0b5a35e49a338dffb1aaba512f5fda377b8f3f4aa6c76f2d33a6d4fa73169a9a2cddbe44b49075efccb37acd99774e63769ae150647f354f0b4b93ff3028c66de35f1d715146cf5d5c1a854b45bb38a5fa45aa211f988b4c9daf94f61ceafbd989d168439c63b388672d2b0bf170b037e5c38e89df56f80d7c6645d7c045f4118fc79b7c667e0072500d627eac7bd3a17614934e238c2f575f4a978fd53246da9d3df02a28b9291cc09a71361b010d1605e86f4f58298cec9be2f7e17aedcecd5d87d7302b2290f1313eff056b100ff9890dd989f495182e2532c691d96aa97dbb2ce6481a0f76b4e26fcd97a02996c39347f90aadad5c4a65e62f9ba6f37fea8df342d5c6cdda448bbe7dfc4a461fa8cbe1c2dc0a78abcaa67129b998e6f9a913a6e7c84e36b936f4db32f000d06bcfe8ae2d5fac04cf45bf3fd3f117bb0b3da685e109a82f200a1e0d7f8522332e5524a3fbc6e864a86f9fbe30558b3263847d890afc1b64e835e1526ebf69d743a13717163fad0f9e058816a176051dac15dd0b7e2f0ece4d367abdb72a339898575595bad4acc3b46b597db68a5b6141f850d243fbe0b3cc113bf7eb27fe4359ddfc4ff3ef16bc7acaa0f3524f310679c03333d3fcaaf2e7507ba98f8dd1b770f36e426250b1ff8a9d4bc25c463ba8a7630a582aea3252e0ec28d656063d6177f74b1c88d457bf9059895e570cecdd6fa724d2015eca9c76ddae2798f82a181582723d0bd2fe875792e22bbd67b111812ef40703d6186261d6be2747c72746960fab45840f4ff6907949f20902b065fdee98d2c13ba04152bbc70eb415b14e172b028771339fb0ca708bf580bd2fb6a6d6efc0990ba5d213fa95f2efdd8b1c1b699841b8e154451c5de23871b54be129af8e3043ec5780cc395f325d33c4d932a30171ad6c362281b895db4b604d1d097b8f4162bca2f6da265e7a2d1130043a9d21c95effcca1ef06d47c6bbb7860392e5b77d17706b5accad18e8bd19ee8ab2e950a5d8f6789119a4dcb02ce64ad5fd29879e948be85c8c35669a06b2fef4fc27ad44a3a5cffff063f9268ba3b8c54a777bb750eac7e3f3ee767a4eeacb1b7019d3eac82fe5f943bd042063df081da663ad14e7f4661e550e495f413002a6d3eab63e159baaeb60fb7766baabab0d22b82221bc37ed6ca672ad60102c15d040e6085a1f4fe67bcf63da0a15205892a04dad9b3ea918adf24d6479fd16e935badebd0aeae1cb6d505ffc29abfff2708db39d1ff6420288b3b779d291e3ac4b944512eca4f63f4e1069281a089d91d3363d15975ffdd1b103e4e2c163bbeb915a5d08454857a9d29d24b72a7e7df6e3a7e90ed517abc95a448aa0179959285247f17cc8d0532fb13738a6a21738ebec71e2e68c55d8a8b77d456b385408650e627970ef13765744f4a72e4990912186a403f71bf2a9b8ac7211a0499266466c65de65157d36302cde084d348ba46da3efc430677bb5b34f75f39f16bc710dbe9c4a4869cc6e820ffc59239b1049720bc24f5e59395f0f0f153bdbf207df37311e0d85db2906f70645c876c000583812026239a535cc06a4a6c2201b19560bf574825662aaea2dfcfb3551752e89459e4082e9196dfbe1251fdb94b9f997689be8e8609d4d78fade40844bbad5caff8a07376bd83a13141c14d0ce0eb0a9b2e621cd7e031660970aa4be5f7dcb5d15c2bd2ede463c6fb2bb6bc1abcfcd7a1af96f1ae98ae81d315af3713d000ab889760c12443ac5fa79a48fafb39bef31b3c3b9c636927e868259e64ee02f2f9a5ba0b9f1c4b2a9e7cb48beb319433419798210d720f6879e4cefe84130bcaf22c1e270f3e7262a578ced12348bfacc7ee33573d2916ea63ae14659f467dd8e5f72115537fecc1406e977438fa47375d11d5327cf409aa1ec22b0d4905084e18135917ce073aa8bdbf4d9057bb2e7ae21cd46342745b6c1a43631a5a25baf33e59e461339e402f29d787463c8d5ac2a889e7d740b7baaa588024c683aef08e721ae1f880966e35e8288b4724d97f6feaa0d812a9e876d10c7c8c222742ed14764b183b66100f3644c98ee165abe1f36a2395279ac1cba57258cc5a26aa5520a16d77f075214e439b6eecf9791cf735066b66cf71442b377775018c9ab44312fb5a40c4833d198a2cfede24b5f8bf7e4231c62c5f33669a2ae631b3a116af83acc02b72e05819f01a5e1f0492b5b11ee1f3a73d8bd473bef885cf88b2e8e35189bbc8ae8c261521a0000cd0bebee7295e8d35df1cd49f078e68993fd10373a53eba652a3f4be4016b27961e93935a059a321c20970e694c4678813216632a684de2ba44885592672cf46e54c9ff27d01b29676ec1c058628ac1e7cb063885c6f6e428195a37698c7f1941c3066480ef3d4c8e1b601b6b65c61b21c10bb3d84d09f7e1eeb38b7c94d1fc658c57106b39cfcad009e4e4b93c6d969b0b7ee231234cc1383e71623de0c1930db8a8dbf266df0e2d924da51d9f49e836b82d2ce0bb30f50bffad57cb960f448965a23a6057140f7da0b5e29caa6f95025027be799a52fcc906cfd6f55cc96e712e11ba2bdfefd3ef150f1f04f6d8de5d7f5f9f9262ffd4c0509078cfeffc27d9bacdcbd99cfea305c080c296d6699654e909a3f8b05ec63ed6bf1c01f9b1b1ebcd5c3d34f8d5e8a5d3386626297e31f510a7dbf67751afc4f77effede7186e0ac5a05c4cc7bbaa0ca610433f49bc9518f1ab48049c1dc8e7ab9ac646e024225326431294d5335d627c3a6e9e8a06d8fbda1720dfd868c071682118c570782845edb082de727983c8e4be4aa9196046dd5a92f7e3e9a3d993613c76af2ed052681ad82d8446aecfbd169b3a659d27f0b012c45b9fd2d5b022492fb34176720daa6af6b61d245cdd44a017fcb0d82b4bc34d8c14d8c815b75616a4b8a0825658e903767625b4514c8ecb6bca7e3cf28d065a4b18456ee149ee611f6a6ed9fc8060a06b0f0a6e3de41e7d4628e915808b939e901cd0e48c11deb612f94b1eb4d589df95e2b19077aaff56d57afa46add91f6274ca2117fdf4ec9ad15f2ce0eddcadaddeb39117da645bc127188f7596ca6c7ec46914c17968e3c2c976a4d71f7f8e853a558d6f09cd504e0475641389dc5811d424893cbc25778b3f9ffe28d83db243f69d7fde1fc646d6726b7ed9ba058a2a69b0a368da3d7da417d71552e231c3334b7b37884f84d831e2952e80b10b205eb9b5c02697e110e3cbaecf4e5af641335a6f8c4d00e8d2862717d2164e4ef64ca969d66b23cdf3bf06f801fef9553859094bbc872153589e8153a49c233294fdffd46656c1304642139fecd39fbb08abd4b8730169b9615d4809910dbf0a2ccb1fa8d0c38c950265c77fc4904f97c11c5e59b9f92bc653e67bbb8ec57e1cb7111dbba62ee56eaf48210af4f5f238490a4aec16c6c60fb4d968915a5a6fb7e6767111a6dca6e279498aa016965c58939dc65f55863d7c21b6885c6c360b46772571acdd7b3eebfbeea2a681e8e10e4ea4d95e259a48bb53059650c9914c768f1b9cdc3998558b5c3fb2bb4a643c85cf4ac4582d554fa71a40235700747589a8f837ee85a9c66d18bb3d010bd28f47505c45bf7d61822152e6acd38b3103115e3f4f4839d9ed1fdc3a9abbdb8885274ebeef30278964b4833509fe21a75875b7a1e59aa1f293c9ebb12e2f8f2f112f99fa17c5eb3e7f4991416e2829f7fe1f851fc3fabfbb6c03ca56f72f11e5a21da6d3a6d9696e7de32137173b91c2f6891fe71089510ce634749312f9ac7124ad7b6757e4ff3d7594057e65742c447d56a91e718ce52eba5bd2d70c9fc35c463a9dc1c8591d8dd2092a7f6686bd784de00568fc57ace7ad9ae6805c37e8b751349b9b3ef1bc5cb2cd17d7a11f3ff522151311ed21e0b9c9c5ad9f1e4787e9cca1732f1666fc70b51e9764e66d1b9d30a1d88d75524d3fb53e5fb3a618b50200ed743ee6b165b147726120793dad8ab8b10e937e32de51ec7e3f2a3dbe047895ea4a6ae75739ec0e004cd0ee5fddea612d85a1ab88d7d2736c6e5272a40a3e47d013763d5a9b196a4c494ebb2ad4c6f72dee216b533bff8a61fb1a5dc95f39b4206ea2530a7844e77df2500fdbe7ef344d09898b7f3c5d8c79e3f9e9e99981c3df0e3dd7505696fde18c154f7e02d9bcfd47521d7381c93ba2cf41d78f561a3f53eccd577758e03fdf162e38e6b7ad8394b396bfd6aafce275591df4e8032d64784b7a731c408694c16a338d771eae93499d4051f8c668712f2c64fdd596bbb9a10a35766928428914a38b8a557856e13f97eda358b4489ff9ca5d523841f17f746948d5aee5698785e51492d8b8f6b6ec652b0c876ceffa2ed67efa633f66e21a5f435caa7a7dcea449d8e8a9bfbbbf8357cf2380a303ef8660522910a645ea39fe978baa4a3fcc588d283046b5267851f872aba05703ad893f89188b0714dbc4866be93dfb1d0d04e374ed83abfa660da4c6c609a3274e432b71475270e532f06da1210163895ef1d4a256adc7f300262158de51086124508d017712fc2eb1e2fd2d92222ad09b2f53009ab06d9bf5f3e71e7383297e63ca640e44389dbb99cf0f4845f71bcbd058bee28d4db1d80a328aba88bdd9a80b726bc51e53a92960a985e7b86ea2a8e88e6e3641180eee8cba7303d54eb60aa3860a0505a143ded66dc49565e0a80c0b31fb85f4966a2154c9d64eabf2dc8ef2a2014cee92a3ba64c27b3bffa528c9bf353195dca0e95329d8dc1d50b8d5f6cba99dfacd70180ba326bafc24a472a65a5929d7928b11443974187af4baf36da0e89ce5f08c5bd698fbfe81810bfd7762c0f5d975fe9c778e4f1166a5e3d8fe0de5a195e128bee49302ad6e1788ad555b9ad8ca4892d11df7867bb6edadc878894a0e199fb4bc05a34e04be99f27af0916cd68dd2fed1b2e9582cc30b8048e2f848d49d2955fd5ba97f0daef913749324112ce2864ba84998510a5281c1df35afedd4f98e3eb6c7b0c0a98b3477bc07e074614cc4d85fae7a151dab1a2ed42c43a38659b2fe859ddba5da7d4f2a8f63442bca4dd3e11b4b981071d764b8e02feed5b956eda0b872885ac801b678a54ee120e31429866ac759f6f373a0f1b95a3f1b42c1087371758e01278a69eff2eb0a2f1221629d020c7754b0ab0de3a0d6a0d2cb1e90f23fe08faff863bac1c837bf6696b734d066596022331c3d1cb3c3bb9be964e396a1e856553b6d968b73066aed50439d8e9a64a332d02a891c1d6e29a81e0bba8ef5a9f86683d83d72391b67b62d1780c77b6457a265da0b3599e0b7918e49208cb5cda359676c8d96191547ffa8cc717cc7b6a6f449349e1cc4beccfe7613f0d3b715e4882a69ef9173ac2c261cb62291602d61bf53ad9652186dbde45ffb908d1316e4ed3c1d0b21e95ea66745ca0f5d480f690d2c519b595ce82e967644cf7b72c9cdf158da5a7e8443a6c7b60c129f2063cfa9b9f8989065880eec8dacf623e93db8e99c09cd5d94df9ef277ea6471ac2911a3c86a92831fbcd52e3b3af31ff8445f043bc48bedb11069ca2b250ea31fdd4228cf2f7735b6012dd9027594afd09f0b5a38c1675fa7f6035d3b5669fc3375cdf438e635b62e7b4ddd003c8e366671bc8e9ef38d448a48e52feb48510daab05d38fa18c7d8c0b3a5e8420f933737a145de6130c74925bdcb3e305a07202f91385af1dc4808d026d33e6dc360391b8358dde02b04e6935c783280eb340fdfd4d015d2e525dd18cda917730df9d19b7eb51ec0f53b3aecdf46ee9f68fbfe0c71896553fc8e85115080ce5ae3937d69820757d54b4ea04476815a5321ecfa8667b5ad5059a4b5c9e4e0968a38900c7faf1d52b895c8420f1ec7fb4839fef81dc2825e602ce89f3c06902b61fc0aeba09483dadc596819019c54d2d1c52ef98bd2f7e6c3053daa2cc69529515d9cec00aa1a6aad3c4f093857fa82cfd78bb540772400277753a1196bd4005a91a3650f65460b3a9a36d6c53551053b95e24d1ec4d078cdce647198ca0463cd7cc0501369399fca08aa9df985e11bcafeb40899d419a851af6398eb3c15ce33a3d90055706c1da634e3120aa28de3eebb9bcb14e7dc2e11834b12347dc58b2292aa14513bb993b78f8121cfbd1778e1ee331461a556887a63c6a67d3265080f3bbf156f186a26bb800c35ac68c0a472eab420aa380146dc9076bc00c65e75e4dba58475e8b2c77b74f292db225fde4f6d2a959f162855519f07b77677a56c7e0e91c7154c9d20e400eca9e868e8cdc17027ee04164bd29678d7b8e6319730f060ca1b246489803918f62f9b7d759add3f3f4dad0a6ef1de4f4077945db34a570cdec7f7958103e0f73ff1ee8c466ea692d1dfaedf7e7a7e94484e1ca6204d044f468f4527844f765cf4eab0a33a680d770ad3507002e35ac84f6687ca59e4fcc3bb51955b2d4d98068d5d44a46ed5ef40704d3fb7d10154f4aebeb5d6a305de2cb6b2711c5770bf878f39f35779620b1d695c2904da2f6a595852630497caae4cc9a822c4751b51cb69d635e6ec47d6972a29c59515e2eaee01a5589c03bc24916b76c32ed9b78950e910211e331b033c052413e24ae325af29db647dd02ca06cc5224a8ddd55f26ac43a83d96e0beae9d7b9ffa31d515340cce114c66a177f8d7c291bdd49c1490e880d8f82ce4ea6f7651404d81367362f2a3e9b0ce311eaa8fb8525cf8690a8f943ce49bef0aa03caa44fcb439b8b7a31a72fbb61208a04697ca3bbf8b5a0606341a0e784d6cb82b093b274ebb4cede80485b612e321be1166e3c84f2bb1789b343863ebaf12ca70a92ac55a78c7998764400fcc9812fc3e8737af721a4d5cc5264f3a291f25e2b52abe5e07a38ed0932614e87fc1bee6b2a8b66b83fbaacf3f1b49270f8c78c5468ed6a7e4d2571d60cb9808c8df22161e553f1fc3361b0d4227e26d087c80693ae4c4477afa54cc53c3b15e1b3f4e137f9366aa52ae0ba3e5f2d50c84d243d55326218faf8ffc2d6e5202bd20e4823f1b4574181a7470dfd658471b2655b40395dc6359ae87a53f19edb007b977cff3c4b0dd1b2b23d4f4b5103cba48612cc2a8d1dcd208f85c903caeba0e6d3a7348a6129c86843df4bd2b5a50699955e9c1d6c6200dc5bb2d90df887813da1b9acc7678755e24da71ba4f60720b57ac93e7f8ca9e4c9c0be6a608008e5f5ebcb631542c9c2f6c408279633b43dd688ccb4679ea0e0d60267f194210ac7d7ff258f76525bb51e2ef7d72bb10161a72083e7de7ec3ce96f53ba4f83eed496525ee2ec23ba0e06713cb094637f2863d945432ccd307ef45e62b25266282b5227cbe0c9b27e2eb55c7c15510ecd3145c01ba5dfa6b57ba234d1548cd65e851953e0fe25805acbe0be413d12526dbf031d07f8e1177d3377a2575fee0dbf74eb62d01187af05ab977b1014a5f52a5a6f20de227f3a537eff328edc4a170dde3649d6778aae839e1e24793b44b4251518f4f39a2d87add841b3eadfca7f57d968e27587bcdf516b425e59866f31c19c2ff71c575fe262536499d92873266e559d4bd873147a449dfc72d80770e045c2d02bc3cf98270d5b66031cc3a8020e688c629886cd664a2e9e01491262a51d5472440257dff2e991101178abdfa061850683747fba1575df27f75a96a4d8aa64da924bb79ebe2e1e23ecefb00e88157f648c9ae937a5cba7d26dba81f9fcef54a4d550b6977656fd6be5226f77799b1b731f7f6f9ead317bb6a370075e4b5314829a0bcb4f67f35435df3a8303081a1d427409b01ba7b9824af827759643cc07c9ab6c20fdf9b94a54a3183d21b6f475f7b7cd8a515c1cef21b386368a39d855a92eabbf9e691ff24556ecaa9e551a8c415d89a0305c15cd8fa9838fca767318f14de9197e878c573bcc853a83107909311d62804fe87c3bfb056cfd43df4c09ea3a0d21f933bf722bfc924d1430ba51efba89d0c5e9450eb71f9e016ef8833d0a06e59829e66398b1114d39479f03d506394ca034388889b5333f1d0bc9fd8f09b7ec5cb4589aab56d96b2a2d16aaeb74d81a011ad5e54bb686c1a8df3a1447c7dc256cb670644010f68c1433c187b32920b9311ed70434f597258ee69a55ee5434c4c80623288f8cc9889498a5fc6653f4b823d6c3e6efe83d1bf4950ec13f9ffed06013b0721962ea59b8ca86cc06f05cdbdd0d2305d93abac05726b527177683bc28b149ffe1fafa89c009dcc0caf55e1d9bfcd1c4fe397d3c5fc0c6da383f4c41daa66263a471ffa9d981e47f85ed33653fdadce24b56b94fb30e567fc6184e01a8905a7aeb5925859118a1060295d50487ba0c1e76ca8f99e22f99a39b809b6505842261b0d4deaf7d83d2fb26bd39d2038bd1353a36ac970cadfdb87056420c78d63ea2b2a7b8289306c163ad35031750bb6adfaedbe1a7d51f5158cc4b04321c13926f56809b0335b6d88b5f779906cd0fcd5b7c0f0bf6d57490865b51ac8c9710997aa076ad1c40cc145e65c02d25485362c3f949763200c123e7cf1bd09cf556070bc874f0ab53e6988f439980de48974db3aa17f6137067fc13aaa24297473b2302d7b44265f473fe4455ee2f9d773feb52ca364a20df1ed7c6c78be155870a586e2132871ea4fad2b4add1d2c7040b46554c5b8586744dfde9612a76439e16bcaab8daf5cc20d89f880251a9fe6208c314095da7ac5ce369c57a576361cb1f66fe1da7513f997fd3c6e77b6d166592a749034ea50feefdc2f7a1bd4e6ec60fecdad23fcfcb829fcc8eaff523797d9dccc24145816b74161f3f6c47ab2b8632b0dbfaf01938edb025a9c9dbbe795dc542c24bd7135c7c5bf361c1c3bbf4a50497c9ef18ebab83833e4452a3df9657850d114a9d102ab023ae9cdb3db837d1b321a9bd69d9a278b97d1e086a2401c1ff69f5b228bf2b6cc7fd1e4aa6433c0bbd64a74a42591dc0ddf278cc12313d7d1b81c316018206e1f349b4ee5e3ad47562795c9478d29946e442c4494b6b6ae6415258f179cf340a9f99f9d16fab1a9f05726e37897d034d3f9b469daf9fe93e4c3994196a07c5f9128f04a17a8261a6e527629565c2890eb803722ec91e30c06ff14f407809e92f184c45440b20cac6f6be27fa691d140e8e584b623ba07dcd1ce6103c844f125671c253961ac00310fe5f4ab96bb88e7d7d7e1ecf63b5af80088110724d6a5ae7a4f6970cb920b3c055d82daf8e0b1ac53aa6679f5ac85959ab6264dcd6528d5a3f1a7c7fb9fc0e2ae9ed1e10a3331a450d6887fc51b0861b5f461369ae74099b381185fe076e2ea69b9eb54a699c9268fce1b3a07daf6b5dfcc4c02975307c9e725c3047e0fd1bca91f3133a5a14ba5cb001ed0523a95984b1a5c1a57bae0f3f556cf9c0ce59c2c4f892d0502ed46471a6745a5228adc2edf9f892b906b5c0e4e033feea3215e2b140993432d4c96c91e566cdea64a5a43648440d6cdce43c803ac6c3532d860473abb463d0737e6634aa9b20c78e73c3bbabb6cef59c8dd38fef882ca0c68866737731ac94fed1f8ffac930777301a35eed5c538ba913a1c63532c5fb6188b5c16ed280267439dca48f966c2a43b4ffc61261a17aee54da1afa7b5d2a92245beadff99989eb90a7c1acd3c6a066446987f64cbd6363bf750761e4d7c6c67f15118f782c7b9dff23b61bc124650ca02f0c8390dbe4ed73f994e1e5b45644838c0c6064624dc7761d3254dca99938bf376bb979921dfc19864a0fa2dbee6eb33800c50e4867e4ad14604e053b9a6339d5aabc5fdfcd160626a11e805572666d182eba3d983ae48df106572c7dec35eff7078d9ccd7e507c1e9a6ca2407231a0783bf13d201c4ddae4f9b77b4fb855f743aee3de013ba45d8a6420a476e52d38afb23c75f2f1bffc4f2ce861daa4ec733a757be06c5c63d086081020ded0e38a7ca7ffd27ba5cb21bc403666f301572e1763b2e60a7c0847244f540786740d26f0d1021a2b81ef853b2f07109f7094d4ae75f4e84cf1bd63ab94cb6a42c38b9825572036ab6961fc49dbb24094b2de3f3365613a04e557359ead16d4ab1e73be6dd71f37e88123c8b94c25c8b2bdeb89c517e413d9d09c6cba7aa3e573a1f5621948761455c665b713877db28d7c062ad721bca8b7b28ecc060b8ed68b461e9db67d4808e9e2446ff7a9f2e59161e6a0fc484afacee5843ceb45e6fcae60af3ddb9749f003d9889039039fcebab673512ecd739ff5b610a9a90029213e112cab2d83a709e19c7ab3ec16bb60b0a53f654f55ad2b734df700a100e5f2ccb0cca15802cffdfcc8076c8f22dbf9a8d42bc6e00b4548acc9bfff67c5d812ba4b35991d6c58fcdd60cd3f708e06ba59abe93bd44831cd6e403fe2d71b54ac7d813cfb4eb047bf799bc95f460fce9549b7a9a489f4ad105795689cfcdc9225ebe59299f6989b58a3e0065a9f646d82aa27fd954f015889562bdd4f897fe642be846cf3afbe2acd4e2e40e842ef4a44956b251a8bad504676ebbe99851701584f2f4f69aade1ffc639cfe3243729c938c15f26f8c8571b5ae94b02cd95b26715034390a1f1648cd35b1f0614baefcd2d7cf27530d6cf8e26f553ecdbebecbc1f6b0f2d3f152c5add956bae4422470d5522af30f13dbeed7580f2d3c9404cdbacd60bba697e85aee7e54ff7b4a6217cd29730c1ab867cf530de44478ab8c3e57c51866136b0497b89749c72c2fb8ae2b9cd77ad8c6d1af8878b66f64acf9df52b15d9bff07669794a751cf198cb5b52228d9e810321dde0381b9e294a60651e199db8bc0784ada92d86dbaf246584dc6c482ae93fe74cfed9d2e708f49de7513a07cb38724c7ae1cc3a2648c1c394fa85c56043060ca058bf7dd4dbe8c515a8057d7c56eed326905f25f00d091a9f6a2e5c528b670ed8d20a1338100dd2df256b7038ca7b92675138ae0283cb9840c9363a320d4ecca6e37bce9776ea21add8af8d470a33dea35c40e2fe88952bb3791de1677e7b9c32acb116e2282c2c78875c685ec1621da3bf69c3ffd3cccd9f0f0b08fe8f1d126f9db0440280a00dce41ed7a43ec3e6429f119ba69c536d6e384fc39715c54bd37d0de9232dc2cb4be2c437cd2b225d1e663e10e49c3de42bf6bde842fa49329adf64d81b1574c368a443aca940dfbe491a33b63db32b3190fe67dfb7fb86994eff1c294fbcc11ceb35ce80a600f80b8c79e60a88a9a38856535203daea2878362368f2e1441f5252878b016cd943828f2eb46da23adec24265b6af97693e065848af0157b3a6a6c65a04b0bcc8755eb1acfbec2792364ad0ad226d5c5a3e7f9ab49de80a49acf8aa5c7616bb4a67c26bcbf466eef8be47fc155ef610c790591cecdb2173295bec56ebf4fd91ef9fd499fdcb68f36e11e6c618b84692cd0ec332c32fa652d952e73c3e3dd35c55a9c05f9b049821cefafaf3a59d7680aa9ce02472e2fe5055125c9b9ba2a7b25d5f6906cf88628b994085604f93a3f72c71d81758c471ffe2e3aeb47a8c17fa5d75276d4fb1123b94098ab68066b45f387ffec1d1c79ce8d905705fa504c8d6811cdb28ff827c1848292ab86f43787157dd05764ec1482f6adcd99c3d54b85c1896083cc31b5c8026d377cf8a4ca5a18cd75f84ae7461a81045c0290558c20fa6956c4f58755dda891ac458a6c915a2076467e537eebe355505fcc2c973695d7dea386a52d2155de2dcf4747ee1374bfae34f1e26bc7f26036a53735013c670e5a97765f637723a0404931b578979b94f25de1d78b8bd6dbc8190112f05654fcc37a2e3af0cb2218c27af91d96b4dac8c15c7891b08e339780fd9cbb3fc54ee9521ec8039151ae5b447e7d818535cdf3f51fa49a9099af7774862866a17bd8cc15acd395773cde28240aef35970651d141b1b4dd950f79db94e41dc623161575815f52f34b2c009c622a8dc0f5e3841a36edfa29f450341137d0a61620dc62db96d6a54702d96b3c71782051a54cf1dd63fb6ffac8adc98f0f85c2d472018d4129e2458df225c357e4c77af6284500ccc6512dbf2368e1057a2a1bb6e95cf5e2421fe6f0b616ece11b16ee36e39ac2d9919423c7d59e77810173c6d6395a93592b4626886ff32925dfc8d6d252ca7b642a8f96bec5b034591c8a8dd5e5bef050e3250fca3698de501b4147c104889e5653931be758151adae8edd7c7a859048951f53eb462b6eb17b571b9324b9e45172bb5b1c93c6923255fba2305ca28cde0c57ec6da95269c836cd41e3cc9f24116267ca0ccff81d644843f10689364df823e60110d295da8a109b616f77464182f1e933abee28bfbe3e893bd059ee8983a0c28621dc1d734c04ab7e3c39650ed778a7afb22e811aae45b0cbd8f2be085e01ae9ae29d98ea42b353f053e1b3e62f0260fb4aaf91c94bedacb06c9814b67792cfc18fbf0c74004714de8146a771fee831a8819432a549765e3d98e0381c4a7595d38a2415dee9b38714ba48f3c1346c2e5a92f5a8a80ec390e78e5faf01ef784e7f9a89746988302cafe62ebc6bea14110f831a65c195a164741beda5d652b95a05b22573d231f7376b3b80335d3fa56e8e72c2dbc695f5252b01966864fc7228549da767b82d7752558f7ccdee1fd86cf25b09c0bf84e6286df14c5cfaedc4529f20863117eeab700bd3cbfdfffa778aed414080fc42a8bdef1901c6d770399857789d317faa24cad19459b7870e7acaa3d6eeab55af56976c683bf101caa052643c878fc505476e8e9e47a9cbe4a9de664d58c79c5c9b66a524c631975db9d4bab2706e97e207a4acaad781d453d39f7a13297459ca8fd3c5486210568907e32505764e8ae1315c2c38b82b8a2196ddb0ba106aadfe33e9c80d6fc404353b4e44bc6695535f505b2e850f3db9741e6aab44cffa74ab724f1a064f4a6db4f5ad8eec214dfd50f7a48b42faed430a590e582fd8af38c59dc0732f03a39130abf80bd7cb216224990b0290f837c605dea7c9ed496a879ca50756c22a92036789068b7ee0b4680d98b0e5a2a3e3087a6eb25e717d18f393ec21ccb7f3e4216999d30ca8589fc7306f11d49e2a2b7c43302697d17b789c3bfb8b1cdbf4517033b234913ce80685bcda0ee097f8a669054bbd016d0f6c307acc0cd308d59cbdf7f87e4aada45e74bfef42954633481911d034ea97cac9323a4799fa82d4714ea6c8afe0da1efa2e9d869e1aee36a5d67b2d0511f77de5d325ff0b42e06c2bd8551cc0cf5cac7c958f9a625ce53dbf76217b52e473d57d1c906e24aa8c34d192ee6fb88cef39afd66b847e6ea395eaddc45d12a1586eb769fbd21b955ce3a499ec868130c8a6f22abda5a5c86c7acf53fec0d1373feecfea2a35039b1dd5f875e715a28224a278ce96ee79c13593e2cba3025232e08e9214042ea99f9380e35587e160a00b41b70f1b0eb4dd71b07336f46079c25be95471de8b42a9f4fb03a1ac104d4ec1ac2c3acd51058d10ca9d3b7b5657d7dec74845d0447fa39bda1fe7dfeaf26daa8fae39fbcdf733ef7ce643572c5d5feefb350df7bd18c9235a41ecae829193e2f47b26408a7b8e9e844158ecaf50b395722a6a476a1bc1212d9b3430c09e802f0d3ef353abbcf29e0fe0358237e2049d1f93e660f5ded31e438b8e7393b68cc6880d4901044081464687079bb02607a4977416ce5d1823d1d9ebcf7562219a2bf767cdc7eaf0a159fd12431106a23e403812c4d948908132242e1c97fabbd69a565b58e922d13a728e92b04c877e05e6e4d877a9d0a3d094305d89495cae047517463b8cc04fff0adee7f44858a6acba6c5b763447b03a42c1918dfb70f54123c18920b0597363af65b66eee6962d91221d23565ea50462518a8e60fc5ff7964e11cd80d04bbb2412e29933c293db3ec78a04f38802ace93251af084677107f9b580f4890a1c6bd45e3225364a042ca09a6a6a5aa53d46f1e3b407fad951694d4c3742c43e10125e8699f48a8d133b8074995abb90e6c1d757aa773558d4a4aea451dafe0aa9b4c926efb29afea8d85959927d431b3809b69c2e65b59e30443c66cc6f864c6eafbd7ef32c8eb7a1dc6a663f5e02acc2249a3a98c91ca21a25544af94e246616c099a4aa12923ffc2ee23a3694098595e2b8a06cd236b39c4977c6e3a1e0a98b4120a0c360bb9127e332cf3dde68d99cb086b9b0ee25dc287e2d3f5420330516cac8a4e04449cb6076c795274f1c54b0ff8d554f38526b09eca3771606195c5c51c7c995548e91171002ea86bd4bca9c893691fae0f689feaf12201d31d0f2a1a3a9ae7e3b70d787bdc0c3a2a76c9b5713ccac9026491bf43b5323140ab2a0547d84ab83a48369baf87565bd8733c6fb9cad027f435f9ef0cbe3c402e5182fc8879b7216394b33b855f48ca8b1f1ac798bcdaa6dab95be3da780be57dff876a641e71f5da35da0490d0639b9c178c95fcb0e1602ee3f645367b2c684b90cae2d4722a1d54afab89642e008970d172d229c1fa4963635b5735e3c2c4ae30cc47a0a906c85f7b38a9335a24e87c2f74aa5c94902d4ddd087a9d5f65cc3fd5cc543545854a47a4d0a53ca653be46c4c0a5bec89c253344b000bc86379a86f2fabde29f2b56e08d6eb3278689e3611b97b22bbfee3d3242b7451af288f34c3ad642ed7352f182baede02a5deafa1844f1084bc4b5bd9ebac1e5766f7038c65868c970dcce1525c4ba4557cfc8647ec40f9043c4b7027350472693fb7371c7c212a368f1191f1cf1872aa3de694ebe05ae0a4f5ede7131856c643d7bec87cb58c02bc22d4df105cdd1810d4b9c07fb41f4cb824c03ac290c3a9d5a76492491616355679ad42bc98b06723ec035049726cc3ffc72072ff46ec39a9e829374b6545d5a2b5ccf34fec3f1755ca0e6e5b228e0674d8df64e3b8de4ba669490198692837079a8828cb0c2090ded5cdc360f67f21057826e4834901f4d306114805513678e4823b290a28beb8204ef99ca8e0d6429c7aa3e2d6dc5ea23ff89d325352fe7c3aa6f47f67d26cca3c51c383b62d27b009235af15ba039e84cc5755e61052f18ff2b16d2e7fab90e94cf30c36b68c2368727cdd247ada97ce1b5ca19e47f42a04c49c1636a68d74e5cdfb53a237d65d3dd421b24ba59ee8f6d47bb3e7bdf2472eefd148a9cff0422d8fdce5a87c43ff8c5b33ec890e619a190f147800cab6d1835ba2bfe2d932e9e595a87246346c5468f1f7db9bf08cb1158e2dac85ccd8ffe8189e30bf0487cdbd5d1fc1ffe34130b8b1a2191c0858d64f1e216a45fdd3e5591f787914cddb4557c88e6f5781d486fbd0c2dd7b68a9f3a9e05d2d29e7aef4f851d421a26d826fb69d1063815db49414296c7a930467649f5b875cac06134f9bcbc2d6bb9c88084a6ba106a6542bd03a786995d03f8c515cf66004b64f5f7bde8986aa02bdd84af0c9f6f9954e86f046950eb139b09f270be9f4b5fdc355a972f0e136144f1fef3be3d48dcf2929464b8bc255c4e814f000db912e999e59d37c272bd5adfa4f68b237bc851c2510b358d194adbd97f6ee38458de219fd1faffa0ab3dc0591aac11f61a3a9342c085d23b6c844eb3ce8c0dcdac17553eb1316d89ede3c84622224d63120f1a23cab58f5462386ddb407afc118398e304124df2358778987f85588356bf2a89874b9b4f83e326e36c9dbbc7d761fcb81ab62a72f0aa03107a5410dfbdc35b8c25e048c25ddcd79ad53ff6cc1b00c294b420c15627fb66d76f93fba4e560163f51766fa15d207b63ade8db5d216b17160b167c098cbc26f19837e15a6bf3ba37f93d5ecce0c14e2c7c780debfa99eba75add973226988bfac7abc0d4f0418469ba08cc4305c60672c97bf71e832de7d48b7cea61ac81e67de5e4971440342624fda46bf6b8af196827b9f85b0ddad4746b67c4ba2d7d4cbf1e7db99ef0a787646414d6a779a05643a821e6c7d22cdedf473e70050f4953d66df272f74676904ec5129fd5469762d8864a3a15819ea7c5a1716b628862e2a4c318d7b96384b75c0de290c035d3444bcd196a3f5ad1464eaa0e0c8a3190cd3d00f9c5cee18c86fed91624784685acbcf82fc86a928449460dc5b791da0e973f110c6e7230bd5b3ec98caafb6d4ae0bbc515664ec0251e66d8f210049797d280563418218f07e430ce2096600e2cb2c797230b403f21ee8e88d2c3b03ca7b3f272b0daf2ce1c2eb069768d92199b31fec315da1caf22e5a422410282772cb91f9a52f7148628889077b3f81d145b8721db54046fcebdf6d9c358c1578f120696e661f51d1d99a44448873e45f02fd7682faf0b7735c9867aa8673b06a91448f34e3f73f997337b47e4aa66248682d88f24daf2bfc0deec8d8a6dedf6b707da048eb899dabb34c4fe53de0fde66e2785d21c790ab1d1584bdfd96906a3ec1c269148a6943da1c537baca09b8adc5b6ec812888e232c76c29c0db0c1c18bbc93a81920c6509aff95fb46704b342b8eafe9581c43d61a65d135da188d4d942bfd0effa1db8e068cb6618f8bff6c0fe227619aaaae571601e749fcedaa100be7386a3c8b68694eaedccb2b9d2e0a6356a0f8bf1b7a2fdb3cc696321fb76a0c35e3f3784164ea184229a60deb76fb919e6860813203a9cd502bb542a216ebe2a9b458daf52df6591c6c5f16ec34b4a35f5c0b5edc4868fe788465f70bc7340ce661d43c178fb6aee2569d4e1f4152d1acc5a32879a6c28191828a8410d28959acd2e51a37619f3ec1c72e425a37065f49a1cccafd1f2b517c2f058133b0a36ff95b6d16274a7776df502bc3909e67bce5d1bd8ecd3d86dec0344c14448ced0428b06e309ff6b61ed1e128fae6728c921f3be87180fbdef2faa17014be6a9085452d7ab3133f51e41ed39d14972bcda0449751868f847a71166f6336df799fca7118e8b474e077d2ee6b73be947c9d3e53d662c915cfcff1f09d67268b0f2767ee0dec62708beb43be805c0b4511b97979176df458fb1a925ffbb05e4b7c58a20946a2ae788f8c4c1559011bdbed1cdb72b7cd8b3bc07f4c281a43ec59b2e169ea9fb9fe106257e8db9207c739374535f7731ff817fd6a97da5aa710192f4d4a88abcfc03ba764bc7e5b372ba36252ebaa2cfcdb05aed4e0b27401e1befc84ecdaa343a4a8185f6f0290ffe91d75b1b2518dd4550a4473e48499c5a92fb457ad30aa3943fb505c14649e7e1c73824a409b28b62cd7363d112292325edefd2f03c936d84995bd6a9d1654f69ff2305fddcef8421c6fa5e95e0804d21326f29090661e8b7d29acad4ed70088e0a02d9e0c20ef28bcf6c6e37f0ea5e8d101018274b1a9581cb0e4ffc249c6ff21507ec348c2b295e0a78295c70db6da3f61e3e060097394d4dd297c791ef4b56be9b01a29139fd0b69e035c332179ab95b905fa9206a6469c25f5b040e6d41fc75c41af2551b1e653bb4cdea718bf56be7aa323ffa7caea162d9737f25854562a0e86ff89bb5933016132a74321b229255a7722120b1cabcc76bdf4bab94b18a321414558f4363d700eaea6b036f292ab2ccc250a1acec76075af3157ad8e301d6c8a38a4cf5c3de2693876f0454db9353919500d13528f47452c4986d3fe2629a3449e8d878f64d29b34b275e4fe742363f99640c3fd23b3d389f23ffdb261c466726dbbcb3c34afa274b28901d1ad577fd38c81fb19bd7550062bb85d31b513614780a02b6b5e3b5b7887a79b97532d503b43d1c7c48c96829feacef3c031665551659f32875674e20f38721cdc1e641ce9fe4e9dfb9e42bf08fc28ed0b03ef218d0b0e127b5046a9b965d8287fc07d20d688150ca006c79be06c7fdc9bb7910613ff3b5ba73d67e8dd2657407b021cdbb78ea5106f1646e9fab0fe2816f78a750ded955e761ba85c819d46a9e2a5ff21cdfc247b7350b0f8ecb1b82b1f991dba6d8b1e63cc69d4a7da94a552e695c6ca72da158fdd2260128890e396f7aa3b62023deff2db64c9a39b6030e9b39d99e280a4fec1683e09bb3787305d649f7ebb7bec1c75b1a6ea0259b734c14a0a2558a99db4acabfd497d51adfa4a46fac0c29d21fc027f0488fb7a2952e576fc9efa0c6f3bbb9725ee8556fb5ab129aa3e3ce912b2df7fc3c15463f649844144f62493b9ca098c5bca1e14e2148aea9ef0b851400b32db71827c0b0b5f8347f36f3e78f2f165f8e3fdea653ba81865efca377df1273b6a1f5df53aada0cc162aa096083a8ff62f6bd1096861fb1aae2851b4e55feb071284c12c6993dba58a4e938ec33d897b5333d67da388a69569a5762165ac069b0f9c00cca0bd1139c96e8265c865c2f8e7c39063bc077f795749cb6076df4588e2b2d07853a1443fcab992c7be89857a004fa930864687868405f9d06cd44a0122e2df619de0c07ddb7bd136ef66b5a49f7c6251915d5361fbf75d8acc6471b2aec8c0d8499c78ea80511fe930ed6f8ff4406b5c061678c0e23dc998804dcd4c7fc166356e536d84a59bc35fd2c111c7aac8ac8c29f5310f40bf0161bc7950978b886f0ce03e2e053e0d426238e9401c126d362e59556ff6bbdd7886000b65fde3390be7c2e91df00f2e15bdf77fc84040f705fe1756c4402679479a18fea45b24ac145764d68c03b2ace1ad2a40c67b027b5a81c8e29ac5d69ea33c39e236c7f906f6a8445b7a88ddcedc5d7a5b3326e9192aaa4b13e12469a21b34c6709660dbbe4844ff9aab8c1af58a076ce7dbe92a63aeaa409de0aed0d76b0da0578f55c4d6cc5b77637710c3498c8cc4718da0efefb279511b4a026d613e50a3fa51401fc786f81708e619a9369b6d9d5daea06836850917d835304fa3d6dbb4dd72ac7e624587ec2437f466db42e2d5c8bb03eb389c0482c087b6c2ea1e81f13a0b3772e452c3d640583c9705267c10d4d5f88f8322d2df8a55ba2b2fd5c7cb1b905a0c2822bd46d86e73018d96953491224866bf73b315490b2cacc59a13c14ce68372fc66c6f76a3ad62c9cbf734bf90b44a0c04f2f7545d501c91ced47854b3a5d3773420c653558b73d3c59d7d3c1689db1782f2ef33fe06b7418229a34768351cf11f61eef9f3839d3e5530af4d089305a32ebd80c97223b67047148a36d8c3eca73f31f2d94c04d70e89173ee68501de0c945b74530795598204e145adc81502d83c2944ecc9a6c42db1d7cd91682e05051e93f714505d75c1553d85e4217ae2af8f40110cc1dc88a3b34653871ecc50420cedba771ff2502b58f3bf353d62b68c365f4c7a6603f3c2a238d3e98594f1ba6e1b08eada2918519a628a45ecae4b17fb39ec117fa16c9448fe1d21645120ba850e71e2947b54cf87c599a6a2827263640041367784ec51b9c37cdbb3627f76f21955d9876ea0283ed22b5a07cec34792d6f9dbb505184eec9ef7f35b8237fdaf2b05fad8d98ce61c635c10fb5d803f9096ed9c7205b421482557f2f7c6807df1f893568181371df13935446ce065beb87a55c2dea524b53c6d4fa06a7806e31ddd78bb4704c5764b66c793128a76b159d914f5d76543df761e1db72935277f57a7a7b2ab9e7fbee199d6b4638094cb89b66fbd8c82e179f53234e5abb6ec764690885115cedd1677f5c8b2887ad48de4af560fa3fdcf7350cc5e6b6b90a23541c6174d906278d63a7b850380c412984e8b16aceb3971f832e85ffeec27da4a05c46811bb9dc4f3693f6036a1fe551da2d57544f4c85708b06f137692d30fb2146cdfad11a65ecc4e0e1afa9f25ff22858b14efbec3557074fbbf067122a39370193dfeb1b41e38b24701506d64986a4cad8853a2a39028e29f46e08b4ea0a88d180c6762ff166212ce8280c6ae78665f9c70803a313030a3e69c41f93f246738e7d5f9862f9f1d126a5fa1d67b18c6a6480c8ee7f5f5b5d24740b6d55fb64acd9435b7d0b6e13abc83a76e075387f6b93296293815504948933d97c33edd95a62f0c28db4d179e49bafceec7973b5657285a7eb9420b22caad226aa8b055495eba5974a94b17f3c18928539f7f4b03e140aefb83f2d5c2b96f74bd2689ef465777f03672d0d744f2aa232e851e5da6dbbea3ab5948b65a60872de801be0665553d27f8b831cd1769bb4cd61140cec1c9bc6677091656eff149a9546ccd453beb00c4a1851f7a67921978c5ee2ca83cc84ad7c5687c556f227f97a6271f072cab034052b22046be0bfaebad6df055d007fc5d7b6cc63aacf4ec075a0e93fc4adf32819397db79d38193450e8fe88e8effb71030ce29e62d64497c1198f8190d3b8b25c8eae993fe86e3ec3519a7a56d533462bf20b7066894af483442d6145cd3702592f6ce789526904b9a916e1c26462338ce9dabbc4ced46be7db7203dbbb84a3bd575a5ce2a624141e7d57ee41481a24d9fce04a6597a376d843ec7f024393bfa4f043a3f0a0ee18c5c8d990cff3c9b6bd7caca182fdf365d03983d95c5bf21bd7cd1929e57817dcb8d82e932e9d4e293f7c7adbded7646c56728c99afde5bdd68e219a10fa986766ac55ba1f05e6e73f0ca5df6826258eb31d002bfd3e0500171cdc9f0dd4fcb9955a058f83b15444ec721c431b9dbf103c252bb34ff11e2eaf153ff5a061dc20f386297e36a7f3ca746aa3a135e479e0ba55cceedb69a7f7624fa975e048d763b3fc94aa7d96da972ddee7f91b7f00d6c1cfde389f4ab05c799aa106556611cd123a26ff6a23a4057a3b2ff2569dd14605968e76993965b7211c5b7405ff5c89cdcfb36283f7fa82ff1da9e26d0269fac8daf9015b93b3b536c5b00a2c7427e199d9807be9893b67f03a9a1970a1a046887e0a8dcf4e6a2cee57ff26b8a664f6c836b28b20082d0387e02d6d42adb8c5f126668c2292cda1123b85e39ffbd389d832138eaa1500b06f16b0d0e5505c970152194e30f8bc3a2ef01385533daec68f3246ef72956036ba3aead3d62e879dcacb7f505698c6687996ffeeefe7d2a0c3648968aec1e2b864a9b36b8f08211e8178883a27a079fe072f08ca49e5ef1ab910ff56ac7d4db6a0e25457c230cf920acad2698536ad3c6bbea096729e2687057b1d998103c0dde7df3d699a35e5b7a297dcae7d42dc5e6a138adada3247fd200f3060be71eaed95f6e17039650bd67ed21569598bba030ca1063affaef3ad2f17d74d33508a3c74b0a9a536a7c4109ffb9bd1e1ab3ea36555c2522f1cfad903c8a51e91cdff895146b56b83fff4680123b35a193c106e845f575c9b983e338793bddd57a0c46acd9298508e556d242d62cdb45e9c0f9bbdcce45a259ae0ffd57dfeaf85c64351e0cf392c4220a6d10c7e178ef8a88c4c1ad63c131cd92df268301730bcfc01f14882e51e9826b793fdfdf5f14ce7c44c59ed399e3a56ab3ede222dccd25736b85ffbf267efd69be2ad7e07a9b6360dcfee822e70f188722d0443239533c664b51d9d6bf46ccf8087116d5baf8dd6e0077800d84c309d7d749851f45d5f843cc369c00fadee5971af41f9451fdcb24138a1f19b9d3f166d6af9a4ac580b8b38c3ae8f0822640222d3563c611071c5ed0d370566ba597913dc6beed7470d7530b1b8ed213a3e6f37b15983e63f61de57cf0996250af0cb47c8c2cbe374678edd248d14f970fbe3c24a0a35a08b517af001b7fcf8cd9a01a4e909a1247600880a0db14025908498233325773bc70c907bffe93a537d60ef9590641987f23e28bf77550609aba6d5e1b13e79b1990ac9ab8b70e96ccf1c7d685606ea0194b40c68e3fcd64b3da521b770052221807de6c4186166a9d7efed120c978fcdb8380d5be361fcb52b5728831d367f29a8879a61d7eab88a95265b583c44068374cd3f26c23a1c62cf33b8f647c9891733ac9428d675510a6c9dfe5b0489c446a8601bd14bff6f637cb030b4dc60f8b17af638ac775a9339d7a4334cee79d830d735d3186adbc52e733f3fb410d20764d418f3863ed2acc874ca4be1aa47df5c24692638d703df3dfa0c7e7a1f3e9993b8f0e7607b4969532a97dcfd30531b19fc76c331b676881217067428c1403fce556557baeeb389b4146fa043d49680239df3182fa576d48c9d40492c78d029d149f1
+\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\rcleartomark{restore}if\r
+%%EndResource
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 203.04 C
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<53746174696320676174657761792d737769746368696e67206261736564206f6e20636f6e66696775726174696f6e2066696c6573> 146.88 202.08 C
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<47572d535749544348202020bb524f4f54ab202020> 158.16 282.48 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 178.80 t 107.04 384.48 lo 741.84 384.48 lo 741.84 178.80 lo
+cp clip np
+0.000 0.000 1.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<687474703a2f2f783530302d72656c61792e756e692d74756562696e67656e2e64653a383930312f> 372.96 282.48 C
+0.000 0.000 0.000 RGB
+<4d> 702.72 282.48 C
+<20202020202020202020202020202020202020202020202020bb633d4445ab2020202020> 158.16 312.72 C
+0.000 0.000 1.000 RGB
+<687474703a2f2f783530302d72656c61792e756e692d74756562696e67656e2e64653a383931312f> 374.16 312.72 C
+0.000 0.000 0.000 RGB
+<20202020202020202020202020202020202020202020202020bb6c3d44464e2c20633d4445ab2020> 158.16 343.20 C
+0.000 0.000 1.000 RGB
+<687474703a2f2f616d6269782e6469726563746f72792e64666e2e64653a383838392f> 420.72 343.20 C
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 7 7
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<37> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<44796e616d696320476174657761792d537769746368696e67> 229.68 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 188.64 t 107.04 354.24 lo 741.84 354.24 lo 741.84 188.64 lo
+cp clip np
+0.000 0.000 0.000 RGB
+%%BeginResource: font StarBats
+%!PS-AdobeFont-1.0: StarBats 001.000\r%%CreationDate: 09.09.98 at 15:50 \r%%VMusage: 1024 36745  \r% Generated by Fontographer 4.1\r% \(c\) Copyright 1998 Star Division GmbH\r% ADL: 917 200 0\r%%EndComments\rFontDirectory/StarBats known{/StarBats findfont dup/UniqueID known{dup\r/UniqueID get 4092170 eq exch/FontType get 1 eq and}{pop false}ifelse\r{save true}{false}ifelse}{false}ifelse\r20 dict begin\r/FontInfo 16 dict dup begin\r  /version (001.000) readonly def\r  /FullName (StarBats) readonly def\r  /FamilyName (StarBats) readonly def\r  /Weight (Medium) readonly def\r  /ItalicAngle 0 def\r  /isFixedPitch false def\r  /UnderlinePosition -133 def\r  /UnderlineThickness 20 def\r  /Notice (\(c\) Copyright 1998 Star Division GmbH) readonly def\r  /em 1000 def\r  /ascent 917 def\r  /descent 200 def\rend readonly def\r/FontName /StarBats def\r/Encoding 256 array\rdup 0/.notdef put\rdup 1/.notdef put\rdup 2/.notdef put\rdup 3/glyph140 put\rdup 4/glyph141 put\rdup 5/ch5 put\rdup 6/ch6 put\rdup 7/.notdef put\rdup 8/.notdef put\rdup 9/.notdef put\rdup 10/.notdef put\rdup 11/.notdef put\rdup 12/.notdef put\rdup 13/.notdef put\rdup 14/.notdef put\rdup 15/.notdef put\rdup 16/.notdef put\rdup 17/.notdef put\rdup 18/.notdef put\rdup 19/.notdef put\rdup 20/.notdef put\rdup 21/.notdef put\rdup 22/.notdef put\rdup 23/.notdef put\rdup 24/.notdef put\rdup 25/.notdef put\rdup 26/.notdef put\rdup 27/.notdef put\rdup 28/.notdef put\rdup 29/.notdef put\rdup 30/.notdef put\rdup 31/.notdef put\rdup 32/space put\rdup 33/exclam put\rdup 34/quotedbl put\rdup 35/numbersign put\rdup 36/dollar put\rdup 37/percent put\rdup 38/ampersand put\rdup 39/quotesingle put\rdup 40/parenleft put\rdup 41/parenright put\rdup 42/asterisk put\rdup 43/plus put\rdup 44/comma put\rdup 45/hyphen put\rdup 46/period put\rdup 47/slash put\rdup 48/zero put\rdup 49/one put\rdup 50/two put\rdup 51/three put\rdup 52/four put\rdup 53/five put\rdup 54/six put\rdup 55/seven put\rdup 56/eight put\rdup 57/nine put\rdup 58/colon put\rdup 59/semicolon put\rdup 60/less put\rdup 61/equal put\rdup 62/greater put\rdup 63/question put\rdup 64/at put\rdup 65/A put\rdup 66/B put\rdup 67/C put\rdup 68/D put\rdup 69/E put\rdup 70/F put\rdup 71/G put\rdup 72/H put\rdup 73/I put\rdup 74/J put\rdup 75/K put\rdup 76/L put\rdup 77/M put\rdup 78/N put\rdup 79/O put\rdup 80/P put\rdup 81/Q put\rdup 82/R put\rdup 83/S put\rdup 84/T put\rdup 85/U put\rdup 86/V put\rdup 87/W put\rdup 88/X put\rdup 89/Y put\rdup 90/Z put\rdup 91/bracketleft put\rdup 92/backslash put\rdup 93/bracketright put\rdup 94/asciicircum put\rdup 95/underscore put\rdup 96/grave put\rdup 97/a put\rdup 98/b put\rdup 99/c put\rdup 100/d put\rdup 101/e put\rdup 102/f put\rdup 103/g put\rdup 104/h put\rdup 105/i put\rdup 106/j put\rdup 107/k put\rdup 108/l put\rdup 109/m put\rdup 110/n put\rdup 111/o put\rdup 112/p put\rdup 113/q put\rdup 114/r put\rdup 115/s put\rdup 116/t put\rdup 117/u put\rdup 118/v put\rdup 119/w put\rdup 120/x put\rdup 121/y put\rdup 122/z put\rdup 123/braceleft put\rdup 124/bar put\rdup 125/braceright put\rdup 126/asciitilde put\rdup 127/.notdef put\rdup 128/Euro put\rdup 129/.notdef put\rdup 130/quotesinglbase put\rdup 131/florin put\rdup 132/quotedblbase put\rdup 133/ellipsis put\rdup 134/.notdef put\rdup 135/daggerdbl put\rdup 136/circumflex put\rdup 137/perthousand put\rdup 138/Scaron put\rdup 139/guilsinglleft put\rdup 140/OE put\rdup 141/.notdef put\rdup 142/.notdef put\rdup 143/.notdef put\rdup 144/.notdef put\rdup 145/quoteleft put\rdup 146/quoteright put\rdup 147/quotedblleft put\rdup 148/quotedblright put\rdup 149/bullet put\rdup 150/endash put\rdup 151/emdash put\rdup 152/.notdef put\rdup 153/trademark put\rdup 154/scaron put\rdup 155/guilsinglright put\rdup 156/oe put\rdup 157/.notdef put\rdup 158/.notdef put\rdup 159/.notdef put\rdup 160/.notdef put\rdup 161/exclamdown put\rdup 162/cent put\rdup 163/sterling put\rdup 164/currency put\rdup 165/yen put\rdup 166/brokenbar put\rdup 167/section put\rdup 168/dieresis put\rdup 169/copyright put\rdup 170/ordfeminine put\rdup 171/guillemotleft put\rdup 172/Tom put\rdup 173/Pete put\rdup 174/registered put\rdup 175/macron put\rdup 176/degree put\rdup 177/plusminus put\rdup 178/twosuperior put\rdup 179/threesuperior put\rdup 180/acute put\rdup 181/mu1 put\rdup 182/paragraph put\rdup 183/middot put\rdup 184/cedilla put\rdup 185/onesuperior put\rdup 186/ordmasculine put\rdup 187/guillemotright put\rdup 188/onequarter put\rdup 189/onehalf put\rdup 190/threequarters put\rdup 191/questiondown put\rdup 192/Agrave put\rdup 193/Aacute put\rdup 194/Acircumflex put\rdup 195/Atilde put\rdup 196/Adieresis put\rdup 197/Aring put\rdup 198/AE put\rdup 199/Ccedilla put\rdup 200/STARling put\rdup 201/Idee put\rdup 202/nbspace put\rdup 203/Edieresis put\rdup 204/Igrave put\rdup 205/Iacute put\rdup 206/Icircumflex put\rdup 207/Idieresis put\rdup 208/Eth put\rdup 209/Ntilde put\rdup 210/Ograve put\rdup 211/Oacute put\rdup 212/Ocircumflex put\rdup 213/Otilde put\rdup 214/Odieresis put\rdup 215/multiply put\rdup 216/Oslash put\rdup 217/Ugrave put\rdup 218/Uacute put\rdup 219/Ucircumflex put\rdup 220/Udieresis put\rdup 221/Yacute put\rdup 222/Thorn put\rdup 223/germandbls put\rdup 224/agrave put\rdup 225/aacute put\rdup 226/acircumflex put\rdup 227/atilde put\rdup 228/adieresis put\rdup 229/aring put\rdup 230/ae put\rdup 231/ccedilla put\rdup 232/egrave put\rdup 233/eacute put\rdup 234/ecircumflex put\rdup 235/edieresis put\rdup 236/igrave put\rdup 237/iacute put\rdup 238/icircumflex put\rdup 239/idieresis put\rdup 240/eth put\rdup 241/ntilde put\rdup 242/ograve put\rdup 243/oacute put\rdup 244/ocircumflex put\rdup 245/otilde put\rdup 246/odieresis put\rdup 247/divide put\rdup 248/oslash put\rdup 249/ugrave put\rdup 250/uacute put\rdup 251/ucircumflex put\rdup 252/udieresis put\rdup 253/yacute put\rdup 254/thorn put\rdup 255/uni20AC put\r readonly def\r/PaintType 0 def\r/FontType 1 def\r/StrokeWidth 0 def\r/FontMatrix[0.001 0 0 0.001 0 0]readonly def\r/UniqueID 4092170 def\r/FontBBox{-12 -210 1083 917}readonly def\rcurrentdict end\rcurrentfile eexec\r
+d8061d93a824650eefe2785f13cd28a8a226cfb0a1a9915b91e00d2c2cb80ac548a1ab21bed4518a56748942842eff6121b01bc269e7837046266cb27dafd3a4fd0344e68245aa98a5f1b5bc9db554ebffb879f1c082989cf6c044b76f4814df51dcd03f9e3397f3c73d94f85771983bd52fbe6ecbcd9a2cbb7b3636cfb819daa5469925fc89a188732d68c6d06c906d183cb4bd495aed0c41fe6b7333ad90a1674478062c8996476573a0cdad62593c86e4741ecab7b8c75a6bf02971dfdc2c5a2e1c8f74ab1e91315c54e72426da3a62dede611d5967201fe8bfaa5a21c612c0b245fa35c6706b7b9aa3f73ce16604e3109770d367fb30fa663aa8d2b246de733d27174a0b818d54c58c3676435d43949eb9e5e335396296bc3f096fc154616c0b723b0b4a100ed45072f371f77f26e02f1dcc41376638097d79af0a4ddbfc37dd6cb60d0d34ea5a7536c655d95549b8a5a269e7e927c3d89f74b88e17973c2e8d64688089d329abe6b1009c0334d57a6dc34f22efdd933023231fa03fc81093ef255a199448f17d8f67dbc57c38b2fa163b8cef97a6f42e74af55319eb81a6fb9de18810ba9e3659a7144b80aa066a9f386de3030fc4985efffd13c0cab7049a09a71dc1dfa21a1540f4289b13dde08c0d3b4a01fd2bcb4e256b398c94036935bc270713a24c51042bac575ed4827e17e5dc2997753fcee0ecaaca582c85518edc0c3dee2851fa4d2581f7b399f07013ca3d1d4702cc27be134cfa8aa1cbfecac76f1b406b5b3126c3b7b60ec34340aac6433997656b3dcc1af6c8036f051edfc109a493243546721683fe5c0e48790848079c74ea0640c3f9c92cdd22fab8af9b5575a5d1d2cea0f1f715505cb02a1e200cbe4ea5563d0475cb13bda929286f9c11eab10ddd676314996954ae3c94bd14f364d5202e6ddd20b1b4c7abec1c061b2d8a1776577387a2f2dc424f56d44e58b96f91f7b871627089498d76bbc6664e1ebc9b26486cb727d4a5d62fe405324ceb0a5dbf51c9619f2913e4dcea44c5bac49d74bd049f28b83955e13f0fc77d998a307b0bb560757b21e4a982b59cd5723d66952b8a7ad0311ee6874842f454046538c475b86983b4b8d9c00e814009235a058f6d5fca9e8339555518ba2b64ee925cf0944deff5c14069a1ee1de2cadafaa6421f495c21c042690b3a7c9e6a5a137ee005240308e63e0b1d4bead90ec607d19c57ecc24c2ea9b8ed4af8e5ec19575ba230c19156ff9b23915a7b50666ec4b655a2946f97c5013cdfc31825f2c1040fb28bb8876b1accb1fc005010e5e5d061651dc9df17b7bb37c495a37df9659962680951290f3f4168dffb294f83b2a3c423526a97451e2504fc0c819f4d263834ef7c8588ea4d68c98eb5e3ee3c2de20a6da219b3256400a7c745059581d33158a505d5bb07c75bda324c2d8fe34eadb98520c7b82838835e92ddd1d89516478cb1ca795324f802e1f7a5547f671588fc3e5b909f5ab9d573bb0766569a36e89586b7410b76867cad6577022e9be567d1a5578361d83b817fb994758c679fcfd6b22c9fa7c6c76f2a72be566e42167247c831f826d9a10e03874b9747783adece88750be1206a07923cd9fe06b677b61c69a7dd9e0f9dc60771ac529f6adaeee9ee6652cdeca5789c7f242266d86f0154a1984402c720adbc3dc79b6eece6d378555d78873844ba1cf057f385e70474132e0bdfabe169a631e07d12fd21f18736013499081e58d72e9cd451df304a5bf52c1f1723a5ec8b7992d8fa3f33d5be97d4c114fd435a94607f8be09812bc1fa4db028644e2fcef5d86ffb947a14993a93185b054a7cd9ad734c62f2d9ce3c0f9e2e8678bae5b92315f60169aa85d4ae22488cfab72b841374ac3f39966b9e126ad64c0307b54085b6e25d51caef51fecae4c5ddbfb5c29b15cc90ec0795123a84d3c31173b49096d617707d9e192da82493ac9884759115c02ba4686ed464d523aad69167e24e5303ac3eb3da0eebcc420fdc256cc26d466f979c8e637344958f02ba9d3a481693fbf13283d7d276af546abf2f2bb4e6c6f835c97e532bd5b40e8b08eea4441e8a9e03021add36c4fe28180ea466082e4fd7facb03f7abd47c929c4e0d84132835e59f8276ac7fddec7755cba924dd1c97e02691f13f2e159b1e358ef2ba347e2298b0b39f5ffdab57daae22d94ba5064abf716c866b64add8e3981b76a77a3a8be0a462594b9e1257e7940b237875e000c0e23a0841a85da6eb5af931dc0ddfe912285d160f12a66ebc8717fd37c13d20cc132218d31680d596ffbbb2f2805fd931c61693bcbe365f0d19c8fea4ff3eceefe09c5e29b7fde3782b8adf4bb1aa7f89ce01fa59d1322a1ccc4d92705e274bdc287312b23ab830968143efe12c8d4ac45e0c72c11f630eb5ae0c835b7f7d32cf261c20f04b7df8e362cb15cf38c531a3988afc8eb957fcee0364049ccc8d8a6935200970293486bb69db1969a2aeb39829cc4bed803e0c266c77b0dffd349ff9ae8f95558a3977775b1bc2dba5be54800a9e9645155315b062d0b5a0491cf90a66e84b581070f30d5796f71e88db0352432e8df588d25c9c9b2dd12b976618551d5625e357737966d9a15fe3cd9d54bc275b6f5993ecfcfbb373c419e2f8ed32fcd56d30db1345987a445ad259e03053244a1ff80c9343538c74845a907b0480f013289cf475df6c989a81aa5ba904a63db328292553fd4fc3a783fb76ee6ae50be4809ea0aaac9a9ba429c9990eb45affca8587972c54fdd677cd14f81404c77e4358212f44826316a927983c968767e7be1c7a36f308b6cab1648780b4f1a568cbb0ea49f6a6352d6ab18d54d442c176037ad16e18a17d88cd8fda7e86895c89368239f0f75f8c26f850316a328c40efcf316d8829ddb0fb69b250e41b94144e0475acadf63e51f27f6ecb6af4ed78ddce68c055b7a1f78ec1174bf9d67f54838da11655980a909ae1b80a2e6282137c75e49d703e6d5b4be616e62b020a8d08efd14912337a75857920f1d3515ab2771d38d8d8f610c9801d0b0c8d3388c75d211ac4e4c0c491d3b70e1bf1b926a6fabf60487613e76e6f779c4aed60929561ed06c676de7d5052f60db62e446ca4e2775b966f74a2ab55466ecac93c65e48d5e6b88080f24534ca63dd1e6781920be3010f3e9ceb771c5509754ebf963de75b4b9c9116ba7f4e21d9d89d2df167d8c5674b2fa61f49f016b4269e602c6e144de4a382fb7f185dcd82942081d6362f335695587d2ed1071a70bb27d51200a1de03763bec6b2c7a86d8f200505c07f25fc6be9c044110607154cb69efcbfce495dc86dc634e20349712d3754ce99a8b33cc59ce272e39f481b729c878399e51976652b4a525d107ebbd809909ec95f07f2012672601eb9ada5e0b3292d68b6ff8d529a2dcd23f7150d77ba5b1a36701d5954d37ee96501f9efa8e037290f6dca8c024ec0a2ced95b8dcbfea0ddc55dac8ffa55e224d33fdae74502f8f0085fdb5d6d031d34a609db4ed63ceeb285f3697049800bd560e31bfdc6862a49da0ff4b4e84bac9f184e08181c7870058559f826977e851f7dde09163b8b3cc82be8103f7baea3072202ffce888f1bbe37cadb748e2a3b3b53cf38b4336a4eadd0afffd76389b1dd9d067888c4e647b07a7643b81fc08a15872f08f6295eb45e7838021253432f2bdfca6c2a85aa70efea06863d3ebfdc555f41abceb6fc1a5f92448e917ae97706dc04adf0b7bc817c1b93d2f924b118fac5fe6053093401a4676c6d7ce7b4ceae1f5c149b1d8d712d32d56bc8430c210a7124e192e387ed9696df38ac2763e3a065c3ae4726afe9c16b07891bf5243c16add2bf494f9ae8b7566d4ee600a7fcc945d4bdd305daf4df51b1c0222e5594c65af003b51549e0e790ef194943d4accef39419ba173d05788ff822d4e3d4fb5a612fb13292aa377e50a44a6953bb793d0c521c2179012a882b74ece2f79723fb75624ae9c446ba358a3effd738ccb59a856f1bb5afe8635e1033936d58da18ea1f7464758e4647ac03552bcd1be22ef9d4c0f4aea0d7d1c91234ac50d5192bda73b0e63a8303ee284009e6f42c0a8671cbac1c02ac67f096cdb67e83a8d3a8b0e2915fe4e498d50a80892a374cf637cbdc145c2a4a16e0449fd300f7f03b9c80b320addb404d3b7388e5473a6502c74a9d614b21f2526b2e4f9fd9c5adca0f01677b57de5a55d60d9c428c6833d7abb14514926e09bba6b07763aad75d0a934b7c44976be43c289fb238aeff7556183515a5c4b085447922adff5498d29e101a60ff02e893ce8fb8d446874914eb3d3009db46a579d14dfe884d22d9ca5bfde436f4bf334c8c8e73cad66d26b9b711b3a2a3ea84d6864945e529bf59d397ed0acca03a3bb32e470c46cd6639cdae83b4e8e6decd2e8574e1b9361e2600bdccd6c9231ddb2b5981f4148984e0d21d2bc7c54fa7b32144192d32a60bb17520e855b14ea6ba31068d4e209a5add8dd6cec44932063adac2280f985cc70099a1fffb3cdc3134604bb8e50ede70ce9db412a309a21a0541662050f545cf6f2fbb39e9106e83d34dd1a7f9f08b66e68052482a68778687aac8b793ca24cf3d258d7991c4d2c0eb760d1b83dec08277bce87bef9883ff7af63a927a509eb44ffdf2f8f2a529baee6c68478a1f8a10c81fc3fe0a88004843f05d15b34d04149508d7b29ff2b11ad5e150269dd78545f0f57ca1752f6197a8539ab3aef587645b5dda3dbf18060d30c3426f2fff04d9bf22f1591762597d72cd6225f01377293696235f084801440fb9590bf6468e73c11d7de5c7c9899d6a84a9bbe18c8238e117ae4e74ce9c087957935630399f186f4712caa2775ee026f1c9f334bfa2ea897f2cef8f6d2f200bb2fd7d9292c056149cb3091d54be657c5efb690dd7290b7f866330d8b64cdb134019ba3c608bebca348fac2ee3891d54ce18d427de0e8270ca0b19b5cb9ab69ff7bfce6b5c6431fc794f1a2ae04975dfca6d865e38a85d0092b339119f43ee8f11f999ff0132145ef65f2786d9dae9c45dff0ff2195bfc604db64e4da4b681dcb6a3e2be4f691bad02abb6347e7ffb00172df452182679d10029a878d14569825c6df61c229e158f92a6a0e0590722313729ecc3c93a9de9f044e62d3abdf500ea46557e90649aeb8cc582bfb6fa71042b330800d50aebe27e1b7605c3aca1f67c4116d93a1d59d7f9a9d7dacb2c949193b0e901291474ed0f6b746c680b337ccc6adcccddfee2ba9e31f588940931c6d697222b14220ece34f97d640f78eafe33d689d8c5e94ba3eaccb197728d58924f1325c5951246898b2477057915ce4caea524151e7f3cb049441ae88014b89fe7730eed66c4161b2e01d608d977d674edd37527433214b40081ec8a262da3f69f07dd54acc3a8dc5058a927bf7ac5d3ff18e0e526cda9eeacc331cfecac11d2bec5872fdd5cff5f7459a42f263304294b139fd7106149b962873b757a2db3ee8e030a8ea3af3366fa5f3226d9f9de3c48dcc0f701ac74385d2b753e655804a834456e17ee576872bb5e9815bd6ab6a4555ce5fdcfd0b1637357424813dfa6443a46200dbcd46f7a15d342c14e5b99c1e53953283d83e81311eb2537162005d2bc0f18b336e33f7190d4cc4ab8a86f596ac2522b6fe3aec0befaf024e35f811a309c8a03734e432ac4695d977d6fc14c93773edfe0eab4b5a0a6d55b4ccd205086b92107a434b119d15f145d0f3511f823e69a4b3777b659555f06116cd99075982c200e36eff85d7931c7b918af5504bb4129cf65c8a33964b3b6fd3b2340fd3737c73f7667632cbf81535b88096e99a5e98ffee00409948eb2b46010a275ffdf345bc0e359ae4c2b6b804a36ec5018db1ddfd43ed28e0982be3dd61a41fc78221bfaf4eea3c94e8819e2d296a355bf61cc29ad69e2baa9caa77f4587be6bccfb178d553bb99bdf52716e6a8e2626505b819cc595f5173d13340fde8dbb4db3313a66348c8cf5fddfe7d7fd04becc8fec0ee1385ce5329088e772f1939fd59e2dce71c2946044fdcd131e06695ebfe5ae6e512640d0ea79492c20880391bffb1b3c9851cfba1b5b16d5860baa2a2b1f4e0a571aa3551cd73256e171c2590687e3596108defc56ca6cefb27095380b0bfff828d897c5f4a1f7710cc1fbe37ce9254c27edb772093e789a7e2a941d676fa8f14edf641dcb06fbd638e74a3764be77ccb7f93b5f961be59a6df0c5305b6ab3a20ead2d3eadd749fff40762a25833c9efbe377d2aae40b18e7785a77f9eb4f05f987ac7572854859f5fc5f56240e94305543baf5df3fb905a1122d20d09d7133923783f4d1e30ce9bc990e1d4989280cdcae75b5a78ff48ec68254373f9a57663255c0d5a18bc78b3cf2002befdf0cbb3cb5e76243b963e16ef7a34a06016dbd728117ed141ce213dae5acc96930ef9320938084dec3f77ee4e595b496648896de03deef6fcf49f6477a04a0b190fa668ecb8dec555db55d7ba7d0151042dd4f205e50f53ca706d93c9ae1b67b51989ad1b3ebb27f2416588397429d2129bfe0d5fbc7888fe0ca49754024224ba6fbd089214122d5c5dfacf7fe314c34581b80fe2f0786f7a70788a1dc27bce9f69daf04f197e9fe3f735a339f6f88067636e23559d1a02cd1d8b70fb07146532a5b404a4491d8650a22ed0f49088e86054e76656f079074ae121f5039c5a128109551c3ad7bfb874de16f639a82f0cae1ba1e26cb21bb8ab0ffd0fdda61da950d00e9a9d319c32757cceb80c07716cecf71f96dc167d760bcb54c8c41387d7fb8b5f884a0f7f53acced99690e1316a8f2005edcce538b3b511a637736a08c932fe9f54e281535c9ebe5716228cef9648813df7f0ce70b5107833eb4025e11f93aa574ca8215ce3dc6a5069f03f22a2224d9d2f8c819714b3b02f32066785f9aaf616afa69a3c031f1d1ece51d541f60d6b8e739b63b0f6472b93e5e34cbca3474b47deec1d72ddf91baaafa42078c177469e8099ef4a80758225c7839a0ba643dc3c88fb01ca0f278f077675f0f3bf3319931f129dbd9ef04dd0daa8cf8bc6573b6b2091b64326a366df67a739f27f8c20f47ea3bea9a9880b0aa3b558c56f6596b0f51b124b78b717336142cc03823f2d75c0ad84c09868cbd0dcfae4ccf37b345a26d5e08b20c36505447042ee2ce81f450a835d7e0b679c0c9eae37ef6982001a8c52708c5db0ec2294a90b9876eb789ab09af859a0a879cc27d2f52dde9e9a6960fca2530244cc26d3a21cb294458d707dbe2441460d79d1783fb334a3d144339bdd635b676a1b260f5969bf089d59a526f56bdcf92bbb2d52cb268ccca6c66e4ceefa57c72cbdf8a4e1a2b57ff356f8fa49db680fdbaa3d4df9f1d6201307a44a9ebef9ab8c893518d71beceba645d6df155f6aa68163f8d66b40c1084b673ac16b287f763d40db303c4c9f9e76a3e8fff77d595e97f7e59e56b02aa8f005d0c6830931892207e25a11520efbce320b99362de47e093fdd48318cef9458ab6b4093d1480ab1424e82695527412d0c5e3c299eac02b67ee503a9d04d31431d172f50666fa59e778dc43ffb7eb3f78324a5cd88601f7109bf3bc03f0256ec90473715c9a626a8488a4ac0403438c7fb97438334506f3718c262c6fb671cc1501e1616281c50c1f1abb0e796b5a989d9419e9146784619689562ee006255b58c5030d4deb7bd4e723d5dddced22c58905adb6a1b319ff10a8610912023c965c87e8b9f50babf746950ca2b356c1a9cc1cb8180a3536b2a639a147f65a8178fbe711c5fffb8fba62069c74e02ee7bb219bde7f581ed080e33ada55e37013823fbe5eaf8f7b774209a75b047e7626b8b82733f525e57792ca6c79bd882c5bfa323fc5ed98227c892ff958a359fcf654cb8facb6827d717a899ab9b4d2093e7a3762ba0c9f7ad55124173a5bb29f9f8769484f698dc8f8b394816dd74eff3b1a7dbdf16096bd0ad1b5bd409d56783b6d418631be43d241d6b834e1e8107bd9e296f9aa43e90ef753d6ad527875f230f6b1d3914692840fd51e8048ef5ecc8e7d2da90645c8e0acbdb3803d677cb07714a5fbaf0caa48234e6abfd0cc1be8a80ea7e956ec40a54ce712c979d9d108c28566d3c71c93c25fd7c202c637aa06f1baa00ed6262f87062cbc03e7722983a7c87645ad8d6e0df84112139cd220b03e3b874dea9b9705efa254db06927ab7951eb72ea84b253e0bb877b77fb1810b078ba9f20280d7e85fd9d134ee7166cb1cd51525a5bde7cf96b26569af11b40dbf5b4b25a662c9e14dc084cc349bf451cc976d1de3ef735d001c18d7e6027fdba88d29016ba395ab7f6b1d232151acca1ee234a287c2d7843223db3df6e3e5325a9fc82d92b0baa4a28fc927a3c3d307f7a7ca1ec7a54e8b4a56c177aedb633425bc7676a10c0c2d51b5555f4757c2c9908cf39eee8f85913216c5df40fc6a04dc460e99f55844700b4e02ef7a81ddf4bfa798e5ea327d2c66db67c608afb6ea5753ade25c620d52a5ff2c1d43385737d41e7e6cc645b1f9dffacdc0e8cf72a9128abd66cfe77f2c273e7efb2c6d3ddf4848a023911b7287797cb7a3baff8df5f4d8baf2d30d8ef3daa330fe4728f2fc405bf82b6360d1c9f78d17fe13bad721756ec2bba578702ab8a41c094b22a2ea393e9d4d597e5d0c2f12ab5f21d4546ac61e0b96ad5bc47586bd42edd8caf964cd2b997e0bd816ffd593d5481a8ab543384f8090d7cc0d9d4dba9001992366bbd61949f2b33bb6633f45554e879ec6399f11a13be5d195c927f9e4fb503c2f7f1af69725add00166a3c6f0b72230416d09687ac6109eb06d16b8321ab293cc112cccae7bd8233a6206b814694eb0057b708a76f7c793115dbd09b6b6808cddd0dccbc2a20c5abd02a91f0846ac0856a5cf7be1319057e48631937a3bfff2d24f0fecb55e929c1c7d8dfddf2fb892926e20c9fe4a84bc1d9dfd203d438a7f989ba23836bd55b1089bcaadbbbf19e8cf001f75059a1dc3daace5ef08b0b55231f3b63ccbcb50805601c86e10e48f90dbae123b55d421df8301a9c67f4cdead045d1ace302b93f9337ada9ed3ea36369cf35577e868383d69cd425ece04e0cdc1940b296c35e1314d837d6fa900d661eed125ada136ae005179a03494e23a245d96e60cbd7a04f9503c227e835e58935e28bdba5446128f0db08dcd9b85049c5c67e357a3a511f37a71df23c25f971df40b9982b1b5ab845bd4870fbcdf4ea319afa2e225dcbe3b4b06b73429467ab402aeb48e3b661a0355cdeefdb754d43b66d1b576a1ec93994587b16fef1d493d53263ba10fae3dd01736b479e33dcf87dd9af58b353bc55b8a5382aff065773ca8e932d8e55a80537dc04193176a1c38082e3d4fbc38ffbac68bfcbd80ea1682b79961ca070d3f7938571303267b2be5afc70f196383a01fabd8952db19f7c5921fd66ef6f44523adb1bb09ed0cd03c14b8fa91b088ecc5152d6e288f2f388b5870733b489081581fcdc2e1483d3a2dd9b1bfabe1732b2ae37041d49727a2bde007820f328cc2118b610793e6a6996e1f336a061eef6b61120049fd0b9f0847409cb3a8ab404c563c1769de2660b073dcb30bb916f3679b5819958ce2f5330634e2361cff5c0915861ec791b0dedf34a845103f7e1041a366e6109b88bcdfea2e0d0d260f16717d67e20c9a0b624f15f1f05339a408dbc7fa3b8395895bf50691bbeaccbfe69bc22e136a37fb9d074d668eaaa2f98af8ee35119d46af0dd9939462cfd2ddeb85792ca7d38d61e2c5109d2c91fc8232503900396ae6a85b7a88c80136699e77c0d7408eb88538cc544a3db250e2bcccbfa8076d70b026d46cefa250c128f8ab95d1ed9f028d56b01489d81da013201747b80513f318b84fca9dd1c4d65f36a82d09d847d550e1854341338456714e0a93424e6146e34994f84cc6bee325ae41d716920dcc0bfec62368546c901a8d43bf94c9bd2cb56283888ca54b758135fbff776c9fa98d50271b172889414b7e948180c03700d2cf3ebf390f0f9c8985900a76be9171f7439c60e18a0db5a46983722ff1489f77d24f2112b9035e65cfd10fe4c560426e464b6759ae5f24116d16f9a3167eadd85389114535f44f8054d463c1b8bab08779d40b74ee854aa6d652aaf40c30d63622eda14aacdbc002c0891abcc764b676a3b049deaf49d6789c7f9cb12bb6f0d1619548bc12b6df69c98a4af5b085c76966b116d6a2cffe4a00733efe59a473985d5602319fab0f04dc3a55be53e9c87726d6ace09dd8343e3e111858a3ae45b35de08b1730fc628265f0afcd3924b9c143450128aaf68f41fd5bd4aedfaa9411bd33032a81405dc45005c62b682112ce0952e1926a47571a8790d639580797e33f991aa9c0b7178448591f044dc794e31acd413e6ec84b3ec0ac0df66e08e9a89727f91620f3f18f9238ada2abf4557d72553f01bebdf62bdf5742d25b47def93114918c643aa2bf8761441ba5e6699760f9370b5c29545606f6003e4c6e4725dbe4078b416022b20c1d2aa30d0dcbb724783777fcae6d2487bb793e9435218f93573064f47408d08a9c39bc44caa91c24177e8283e59cb9be2c46c5329b150478beed8c6e1e35bf56c3becbcadaef963bbc70128a1518c635420921fb37e2252910e270692e8bd641832740d67f2174ff3171ac73c23512bb0682a305899af28fce475f399ffcb310dd96cd469fbbb7629fbceccfc497fc2e469a14943fbd5c4d24c8c89b66f6638daa38cbf9dcb49dcf016d768acdf758356834503afa00b7f5c8116e147c5397c2aa8ec8a241bb2a5dcfd45627821a79dee1ad9b162796b53c59e3938c94a2a531b737b7d108b9f1f42a2164027e7d3922858aa7931dc0f7e0ec8e0fc30c27d4722a4d083115c916da5976680da42e3a7fdbcb8084abde4d1f95f62a2291847c4358cfe83b13b9ec2f1378f75f787b2b573a027b24e9eb8a47188be809666df8772e43672f910eeb1c23355987358a1bf34c3a88c2647a46eb85c1429e2e5123acfce3504e0ccf4b89e9b3de548e2bc16b8e765bb53568070a17b23aee93b0988b67e10dca6129f19083a22e950a6beaffbf958a232d2b40a7966f96d8d6c1d30d4e9d42ee28dbcf0bfde533a8b5c07c32c90c634bbb90471c53658d596fd066db06cf96e76f5563b2dbf17c284fb88a7e389b9340cb17c0707caee7791234d4b9cdc0406a59ad5aa3ebe06c7ac21851139171b188bbe7b43422e3847e30014dc2f4966126c2d23e1d54d0db34fb2f415347f14ccdb4f533d2f4ccfeae45f21b027cda966933daa5732464d7e125f32b05447fe1d15170654b53a5fc3ee1d2d8427096d1f71f2bfa3e240740c879ab752f0b14d1d17fd880f05d65ff64a05bc08f69d97fb63dd78346b9ca038d79764cabd013d57fb3506d4b0ccef1c92bbd704aaba9cb912e6034ec9ab77210531c9a1266c272ce3261dde19b9a574fe5a7a031416011100ef594396adaed9f884d18173f0fbf256e47d5c57a47864a3d592c2324c39bb6b9f8cd770e23e5884fbfc119eace855f4f21356a57f912c9e27fcd292534cf2ce0e0490aca08b4df6a3faa614239252279fd2c3df91e054129e1ba23fd9b7a90ed0cbc1f9f8790ebb11bec7b0b07a228054e1f8bb4241ab3a66bb6a224bafa455ebf835e5cc1b0f7701e2e64190091a577dd835afc77e72f3970721e1b6fd64ed65abe1b7376eb58e3273254b2da264df7a97286ac43f1c55f1b50710f54cf02da4023260084aa143dff539c5c7d5951767d0ca6b48d5ae8dcfd1727774ad1c5e7273c2aa5076c0a0fa3ff8f1bdd088fbfc17040808f3bbaa83a228b573694aa171d4fcdf13185e0a010788698eba537240a9ee729d7af975b4a8637901fa3aa401cee44a0940b4378ec67b101784d07fea844a50c542fe2a3e01bda791c2ba0ea9879bb298b7883e1b8ee13a88f9dd3b28813baed3f97c29bc8b9b2a0bdfd03df29f826498abe20f8bb7ef6be2930377c56430b7b0ffafa4193998c32fb12ab1ff63695a3201e227698fa8fcdb065c9c3a82d2f0b8a78ddc9afd5a1c5b135b019c22a46d8401559149293420d91aa98397741e9cf6bd30134bd8b5f3c5a1889e5cdb61aeb0f8a052417c5dcc3eda52fd90b2a8c2ade1a0cba31ccc88a78e1573f68ec6104fab6c417c631e90bb9ee10daba4cc047ce30b2eb735ec694521b7a87edf3e15fbacc941269090845894eacc56321d38ebd3bf3bdcffe80e3b21e4683736c81a61ced165e3a2fa10b969ddfa1f55d340612e7550144aa43868d2ce06491f2e5e089b1fb3880c17b6040343b795832e1638791ab2d12b1df0ae253aa1b3e9fe01bb06f7f306c7468bdb397cf4a9977caeb0a3c95adcceb5161f95c985b08d5d703bdd011d2d4a38f16795b54058fa2183ce076cff0762b3ebf56d8d8d0fafdd508449a2f5b0a8692eabfa509dcd0b38f09f4f99e56a0044c61c067a107857dac52e1a364ea053dcb290a7cc1c78420bf502fcd56c804c8729871aae4a4752eda8c1f78de3419afae90eccdc7572a00deb5e1a90d1b8676ac638f011b18cf42c99264d350b77a64a09c433a470f3a2ea988348f59abaa12a1384b0558890e955f1f385c05c740a0b44bb51e9cddd91bdc46c8804eca94cbf9e0fb0c18b770b70f81fe5c9c6554b3a781b22665de565d08fe0b3bf6a57943888d387c19c296827e60eb6b81685016bd1b1c8d95b29eb8c335fd76b208dbd5054b22e1fc0ab4743f7b95d623ca64c9f9afd5285978bc5635a54a70aa16e736372ed027e9518a4d0d0f9951996b210830e6d46ce43272dd0923483f986349321b2184555b6a6573bced5fc778d682085d1970f05cdbe85c936a4634c9821776b4ca2e8dbadf3715228a73c71aaa271ad02bdd76a00aca5bbd2036ef7bf949814e76561a22c2f2ebcc43c7f4af62f5a40e2df2ba612e77adaf6715e1c980aec44b1164ea20020dcb5d9fb7072052e733a0a5b69d175ba8cf48b780b371575e490571e05b3fbff92f1e0fb87abfb18f4f81c8838d5bb155942adcf8911fc3926a22d60bc9037d8eb026ea975c00937d79432be5e791ff1265b396443813020ad11f0e0ee66bcc4d68aca9ebc2b4b8aff28de824007d9d9d00a12ee894e55c565f957f5f0cff21e1219c0badbc99de37c17efaabbbdfa903ca892d5a99a7201813a2ca9cbf7b5d19d779c82af7a1be51cce30ff3820448d2e10b39154573358bb6376ce5413267f6de7d7cfcb8d4d9aeed7a0f6648834b1452c58f397ea28dba8cadd4ef29382d757b78649c6436aa3e38505e1543fad8d22a415f8c0b6afa7bf16cbe0aa85eb9042f0757c8f3ce4e0d432b2b0a328ab69529c5f8bf8da11b0b354858df07e4644aeda913eaec05fdc24b95f6f4307741897662f347ff5785bcb06c0aca0ea708cfee767f385962de34b05f897242256c1eaf5fd9382fa9f07c3b2acc2d0193cc7688fa71448b4374cc3805cec6e7b503a693be2438fb03037d7a70088dc9fe10ac37c84d29c8b5f04648bc23c998872af1df21a88cee43d52ab580248f6d11c0896d25c4ec8068afc138518f52a23c9c8ae8dfba103cc49368a2ba7a6111a8d0e154d007cecd32d9a71c3341ee238d7664d39a263ce2d5efefe4065c1654c4996e5eb10397d78ab6ad8155ab5c815707655d2a85a00187f8ed16ca19f0fbc8c116417420666e9edabb192cb81fc6e2a4fdf00bcbe0ab582a63de69af3d7e7c6ec7f23c09f02a81a221ca2d2edaa751bfd3949ecc3e81d6f518453b47911b0aa13ff53dd8a4af4b6d8f40cf4ed2f5c3e700749aa3211aab791b9e9e899b4e53f3cf1d1c62bbdc06ae2ac394be1a9694858919da321123184a8a07d01e084655b974e8ae6919709ffcc4826f62b6a5dd420b784eb881ae6e682b292d2e575a28eec33e21afe2fe17e024829ed46bb4babce2e65d97a656feae5f5bcd3f10312a5a102bac3e502a468c382349d47b6e7fc4435a8c56d61ca2c33d93ded9f2165c1f640cd23b0f36e64adfd4c5afcba0fe8cab87ba2040efc0c2f00d3fbab933303b1c34f15a60158e5ebf5c82ed18c84c54babe8e1e4910921d3cf829cad909acef813f174ea65802614fb567944b14630d1e4b063c49637e7110a2ca6de4f34935866b3ff0c3643014aba7f8ce5b2701abc1e0f9caa048e7d8fb937bff1c0319a1de8f126a16740d7f0a8833b60b56864f98ea428e2f105ceff6dd30a16bd24da9f75dea0f4ce864bd44bc52b73057527b73f35a7f9e7bfdde6435e68fdd781e82b69b22c09b139b35b5a47a385ecf05cbf2152cb5c686616f81585bafa01d067a5a086cee61113870dfa9bda1b2eb1975403b994e4669b30bd5354784b1c5126ea7313e3230fbab806e8cc7411149ac52029430ce0be92453dd7cb39026ef26451d2f230392670bdc181a0d0b24267d08861c5e5e0d00d85b84a0873c02f678f2522eb8bdb04c2624256e79396404f475be988e4ccdca00ff9c4aa86cc48ac5f05d2ff1ae536c5f576d719862d44049edeb7d25c2e78e328bff60bc1f09db639c10486d65a8da9638080ab92b3c9af7799a8149cc771857f3d36a495fd7e58236beccd8ecb68aa4fdd1f8b3fc21796e7327e0eb730e0cf78567e40a8c0842dc3a9f7451f347af2375ef47b560bf6f9cdc8e682ae9574b9d7c9cb4c764ee84a22303a35b49568d8dc89f74c0447b0f263ec71e4acc6de6e6116085b7edbb61ca4b198e2af4dba714c3fe6b9c821ca1880eb1b896b01d086e80a43ddc9619789c75ca44f8dc9d4013ed4d10c50976201e6f020d6993d42fc902b299000581b04d1db1a4c548a774fff638bccb298f45bd0a30ac11a107e6b9042c41634732855c7431610456d2d163129166cf90feb8df5a72ad9ca31a8613ca3df539f599996904716878028bd884b1a8d75fd0d3fcc6dd8e007f6f9761ba55a00fa6799b6a3ea67a6a55ff8843cfda811582ef1b553b27c05331aae09b5a46aab96566568153afaebb7b4ae5e71f7cfa6fe08aaa52aea18d1551068e25942f623c4b8e8a56f46e352cafe4885dcb1eb19c458580d2049ffd77af8380ff452acf5ab88fd52d7ef112c29ff6464e62465398fafd06ef81bd3fc2b4feecc6f45f0146c96d4a7c0f90e861a1d433c5deac14a019f50511d6ae9f363952c0ba815bbb3774c97c16038e82e39b76bd15f58f6c693a973d1cfcfdfd65ff61efd3d6ded93c3aef8a715097e97d24ddc94ba972fdd68c732e1a9001f3fcc1a71f1f9fcc1b98637899fdb949c281d858130712d5d5408f0208d62f5cd7f81dda2649edca15790c87cd4e24ba48a7ae328822f5a21e57f6fc5a6fcc71d532ca6817f6eea89f76b60e4fc7bd243c2d2163b46ec46ae4be40764f95d1a51efe6f6d8274b668c50cf1de75ca2b4791dbca7c9232d147d568cfeba0b44caf8154bd09fe8a55a8bf1bb1afa95226a827167b13f33b924ca637182b0bac8b56e03327986568016841bd25cfc769000a7c746b2d930d291ea94f371563b92535003c4bec0bea1b134915286a1665b643bd011015ef04ac9d5abd487c0c4d3c6b20a00646b476e518fc0b008960148a123365cb40be362b3b1694a8d5c05d23b018370f616496a52c2cd25021c3795baf897f812f62a5a5721ac8170e79b49cdf906bf71c83af3c445a82a9b0979506e7df0fff03405f717f51c69c995d11456b03cd8bf9395d33fbb127e4cf9d8fc8411a26d42617ff2d64e886ba9fe5c7d5b85b43fc4faf88e7b4eba7145234769d58d53a5c07d1468693b0f93bac6e2cf5a931b11506f556484824d227e448c0a3805f2217f136c1a7d56f3421588e286adec32d32422b95ce8fd81eda1c3e9beed20f03cbe487fdf2d65f59add2bce47cb5f225b2c6c09100225b4276d3cb5b6792be4b8f0489bb750f1188f371880930d79cca6b09b2e3f303f766081097bfbc5e538d3cd4ebf27befc9132225dd7428d444c764860a262e95221f0f1fe57f5ef3e4432d2be9b3c9954a88e58cb329ce9cd37f4fc8494ad1cef800a7bba8d2ce486f7ebd7a5bc9dc73458bda9e4c46c6297469cb8d4e3877ea8db014c04ebd313c6b1ab74abb69b03334d562422a6529b8e68f4262dd3ff05acf1c6d0074d35e4e977c665a26f86d6bae2c4d64114ecfb334c4d575adab7905729ecc6345e3726d7f2c361ab9d75de26315cfeeafcba9bff88c0ce812554b1c6ab0c5765c5618f1bd8dcde547b86af905406ea216e4eb454e59a835fd9648dc5c8c9da88d7a753a2516b50d93e7226868bd0c4c6c2eafa7a0696a8ac2f0f3e6958efc1e6504032b42962ba6eb3c5bf856cbc6bb090d481489c42a8e6d5721b6cc02b34d6650157752126de0cac4c31b7b073e2d6d546476682be55d764f5bb3154d70dfa9244a6fe5580db958e4a766f95a61987102d67707838b177d10d116ad56368c48e815b30fef5fd6554acfc0d9e64d3c4f6b8e9b8ef6af2e09c6126a92f0865045cf97c94070d2fa013be48df5e50bbadd9062fb6183b147f7dede8b571826f81d546abddf5de4f95a97bb75200ef5dec4abef4950b587763db4fcd61017a457c00230cb8aec3bd775980ba70362b6e8d064f81062eabc6149c115feca46efab3b703e76a9241c72f6b6810adda98e1baf07d6a7d8189f6ec869b54941c40080a91980fb827c61c1f7399539387fbec2d1d46a54b1f518859b3a385ca098b86039bba25d2e49b7968281e3e1c3e5c48f2012680d81ccedf131a8c8891b4134bdcfc70854fc7787d03671c9e55185793ff6926ae12f1dfe8cf246fcd33d88d159842e8dfc7c257836c98752b7152039eecefadd80ff76e816146635ed2d36fbcce101eee7daf1515676b9a2b203e1cfc8859d128852e25f9cf924c16d4a47272e495645a6dfde91cfeb39f4e6a1613a901e2bab7c975c885f6424b617475aceb396d0d3da14c102a69987f66f38599c60210dcebeddd8bbc80aefadb225df56b7f48d1ab0a8c92584a41b9fa726a7de8620cd32472c1b89ee1cd0e3da8b595f98672343417f766bd8d9c52f3cc1a9bd6e1c8c1e588c023ac6e5355e68aec6bcc303577faa7bff293265f9506c6107432145deedef7b254d5890c755a39f5b3aee4364373a931e98d5ec011d247fa9ef17a68b2df72810929a628f6ae634f4427c1538dd02e1c9962f33273cb6add06c81d6258de794f09700a9c8b2b6c3a30eeb00ece206d70dca75beff10e9619d80bf0a7d93f24cc82b33640aa992945eac34fff30584801e2ca0fde10854ec1c60cc5c4bf08753009063e7efe7e07a94cce2de1d2add68f2abf5e6fedeb161beb5cbac9ad02c043d3d157acf018751e1140776a7f32d71f34c05cbcdc9c08a7c7a03f596dd7164540566fc54fc1fdc2b23b14f002eff9066b55e30040ff5ac54b8fb6d9d643f939aca40e5005f1d5972feafcaa34f2a72d6ee03ed74fa5e70faa11ad4e8ad2d0f788900aba49c29090a73b3432d9ab5d933c115abe4718cc9e2a2d770e9cdc735ad5991455ee0496b0ef2465e39267af0e36c30da7f3ace53cf3f6010679001e39f6e2a55da65870e9793b447b418ea1e519dca3c2bf0e1d0b0b07ad96a0708f428173694f70a113c0a0f79b3251914d7f8af58d59d6e198bdd6155cc3a4468be06e0af9a1c94c488c9fc6b44e759e43695c0873c1415fbf56c065a3ed585a790bf38784ff3cd7baf3f4b22533d735684bbde582438d213bae7dffaf897289cd0052d6788718be4e3b7c071d3c6c7b75f6e0ff3437e48217e179e35db0f088e80c8aea5749c71fec4985d00647877c9db4a55b51f07198c232adae969c821be6ee6c2b1ebdadb00a8916b1f93b1724775ba9efb421df723d54cf22caeeaa1b6cc7567a4279647a6e099cfe285cb30cea5a1019f43cca22765a15759f20dd681057a0832833c15c54cb1e3f0196aff51abc2b0ccdf37edab8b536c2a4bb072293224e9d4e83ed427b8ab2b92f52a3fa6bc28269618922a022f67f778779bbd3d164aed6747c9639f1628a6643f47dee03112facf7431bfa1954ab2d58c7b02ee380b86bec76fb52093fa5419c17f20b123ef0b0b5c0efded93f18e2c0aef25c1665c3f91a3f7faf4dae9cbd84efd9ec0a5ac4521051118c1e28dc3282be83918c9b23e06363782ad6d6e99f69a016153f70845309cb9d8e85d0ef65aabb02b0648665ae39d5ca7ae9c4de2cb940ad8e9b5e0e59ebf2298c6e16fe35886fbbeecc719f000d9c9764f3f90f66c8f9a243bb25bf84ff7cafb76be8418da346319798866bda42213d5acf00d836b2a0487b7fef2fed4cddf10633bc7f2fc2c0e7e7c8785b9bc1eee0d2d5ba42fafd5360f9c84c1a9fcf8a76ad2916c31d66257c39a760621cd0ae7b4189e051036acd5aaded0acf934fef24fe71a14cadf03afd4b7c1752e0c2890930d3f74b2674bd6135555911face869062ba346fb8bfc45d09f224e69273d4d00d5451ba213c798811eac1b8fdbe4631313aa8e35ab728a1bb9db3c806c46db222980828ecc596b8a081368d73f184401ade2b7f6debae497ef70b13d2aba139f22f233b4299ebec79ec32f868786c60171f0633ba142938699a702eb57a26d9d6b2e955a90f1020e798b3903e9d9dd8f8c98888081174469697170c38d5737a58c8258c8a9361d270357e51b67011ebd39578f6963f18bd050d014b592dc375e006cd02405623bb724b1dade6b3cc632db58ea103ca4a3d939dee5df3307dcbbb3e3d0079fe70c6acfa53430f31075b1ce444454ab8208bc4dd2b71d3d8dec8bc4d49797d2bb3f6b35338e9f1100b6c079f327a639e33cc262fad9b18fb3746829af4c08ad4a84baf08f6cd31070997c6d4b78fce290807a05914db726d20735e0e7058f73856aba4dc8642c0fd52314e856f32e5d0dc7edb7fcf7c5d04e2fea3af94ebff28fa8e886d756049f0e8a4c2d22c94866366ab8b0350e1bab7094ed1337ce3002463e49fc894ccbfd05f133ab0500da55ee616f23b36a748c528ee8e2b792eaf869e606de86d3eb0a7822b7bcef21c010695c05adf371a88b0b36981910ce1317560bf020004077dba0bb55f26249beaa36e7da60d783cf89345b38e3c1b5928b9dcb5a677ec98cd4acdcf960d3ffd40e86c6fa43ffc198c2bb1ba99fc5fed92714591730fbc7a64ab5ef06e18b5f18bd37fa9c3d954239d6dcbba27c3081eb7944d53428bdfa189a83db26d864dfb4bd729a2ea41ec866b8814d8a0664f0dbfaad60dd54ec7c61358ebc416a6bf798fc65c408e48c785e9a0746548fa593858cdd067ae1e0b5a35e49a338dffb1aaba512f5fda377b8f3f4aa6c76f2d33a6d4fa73169a9a2cddbe44b49075efccb37acd99774e63769ae150647f354f0b4b93ff3028c66de35f1d715146cf5d5c1a854b45bb38a5fa45aa211f988b4c9daf94f61ceafbd989d168439c63b388672d2b0bf170b037e5c38e89df56f80d7c6645d7c045f4118fc79b7c667e0072500d627eac7bd3a17614934e238c2f575f4a978fd53246da9d3df02a28b9291cc09a71361b010d1605e86f4f58298cec9be2f7e17aedcecd5d87d7302b2290f1313eff056b100ff9890dd989f495182e2532c691d96aa97dbb2ce6481a0f76b4e26fcd97a02996c39347f90aadad5c4a65e62f9ba6f37fea8df342d5c6cdda448bbe7dfc4a461fa8cbe1c2dc0a78abcaa67129b998e6f9a913a6e7c84e36b936f4db32f000d06bcfe8ae2d5fac04cf45bf3fd3f117bb0b3da685e109a82f200a1e0d7f8522332e5524a3fbc6e864a86f9fbe30558b3263847d890afc1b64e835e1526ebf69d743a13717163fad0f9e058816a176051dac15dd0b7e2f0ece4d367abdb72a339898575595bad4acc3b46b597db68a5b6141f850d243fbe0b3cc113bf7eb27fe4359ddfc4ff3ef16bc7acaa0f3524f310679c03333d3fcaaf2e7507ba98f8dd1b770f36e426250b1ff8a9d4bc25c463ba8a7630a582aea3252e0ec28d656063d6177f74b1c88d457bf9059895e570cecdd6fa724d2015eca9c76ddae2798f82a181582723d0bd2fe875792e22bbd67b111812ef40703d6186261d6be2747c72746960fab45840f4ff6907949f20902b065fdee98d2c13ba04152bbc70eb415b14e172b028771339fb0ca708bf580bd2fb6a6d6efc0990ba5d213fa95f2efdd8b1c1b699841b8e154451c5de23871b54be129af8e3043ec5780cc395f325d33c4d932a30171ad6c362281b895db4b604d1d097b8f4162bca2f6da265e7a2d1130043a9d21c95effcca1ef06d47c6bbb7860392e5b77d17706b5accad18e8bd19ee8ab2e950a5d8f6789119a4dcb02ce64ad5fd29879e948be85c8c35669a06b2fef4fc27ad44a3a5cffff063f9268ba3b8c54a777bb750eac7e3f3ee767a4eeacb1b7019d3eac82fe5f943bd042063df081da663ad14e7f4661e550e495f413002a6d3eab63e159baaeb60fb7766baabab0d22b82221bc37ed6ca672ad60102c15d040e6085a1f4fe67bcf63da0a15205892a04dad9b3ea918adf24d6479fd16e935badebd0aeae1cb6d505ffc29abfff2708db39d1ff6420288b3b779d291e3ac4b944512eca4f63f4e1069281a089d91d3363d15975ffdd1b103e4e2c163bbeb915a5d08454857a9d29d24b72a7e7df6e3a7e90ed517abc95a448aa0179959285247f17cc8d0532fb13738a6a21738ebec71e2e68c55d8a8b77d456b385408650e627970ef13765744f4a72e4990912186a403f71bf2a9b8ac7211a0499266466c65de65157d36302cde084d348ba46da3efc430677bb5b34f75f39f16bc710dbe9c4a4869cc6e820ffc59239b1049720bc24f5e59395f0f0f153bdbf207df37311e0d85db2906f70645c876c000583812026239a535cc06a4a6c2201b19560bf574825662aaea2dfcfb3551752e89459e4082e9196dfbe1251fdb94b9f997689be8e8609d4d78fade40844bbad5caff8a07376bd83a13141c14d0ce0eb0a9b2e621cd7e031660970aa4be5f7dcb5d15c2bd2ede463c6fb2bb6bc1abcfcd7a1af96f1ae98ae81d315af3713d000ab889760c12443ac5fa79a48fafb39bef31b3c3b9c636927e868259e64ee02f2f9a5ba0b9f1c4b2a9e7cb48beb319433419798210d720f6879e4cefe84130bcaf22c1e270f3e7262a578ced12348bfacc7ee33573d2916ea63ae14659f467dd8e5f72115537fecc1406e977438fa47375d11d5327cf409aa1ec22b0d4905084e18135917ce073aa8bdbf4d9057bb2e7ae21cd46342745b6c1a43631a5a25baf33e59e461339e402f29d787463c8d5ac2a889e7d740b7baaa588024c683aef08e721ae1f880966e35e8288b4724d97f6feaa0d812a9e876d10c7c8c222742ed14764b183b66100f3644c98ee165abe1f36a2395279ac1cba57258cc5a26aa5520a16d77f075214e439b6eecf9791cf735066b66cf71442b377775018c9ab44312fb5a40c4833d198a2cfede24b5f8bf7e4231c62c5f33669a2ae631b3a116af83acc02b72e05819f01a5e1f0492b5b11ee1f3a73d8bd473bef885cf88b2e8e35189bbc8ae8c261521a0000cd0bebee7295e8d35df1cd49f078e68993fd10373a53eba652a3f4be4016b27961e93935a059a321c20970e694c4678813216632a684de2ba44885592672cf46e54c9ff27d01b29676ec1c058628ac1e7cb063885c6f6e428195a37698c7f1941c3066480ef3d4c8e1b601b6b65c61b21c10bb3d84d09f7e1eeb38b7c94d1fc658c57106b39cfcad009e4e4b93c6d969b0b7ee231234cc1383e71623de0c1930db8a8dbf266df0e2d924da51d9f49e836b82d2ce0bb30f50bffad57cb960f448965a23a6057140f7da0b5e29caa6f95025027be799a52fcc906cfd6f55cc96e712e11ba2bdfefd3ef150f1f04f6d8de5d7f5f9f9262ffd4c0509078cfeffc27d9bacdcbd99cfea305c080c296d6699654e909a3f8b05ec63ed6bf1c01f9b1b1ebcd5c3d34f8d5e8a5d3386626297e31f510a7dbf67751afc4f77effede7186e0ac5a05c4cc7bbaa0ca610433f49bc9518f1ab48049c1dc8e7ab9ac646e024225326431294d5335d627c3a6e9e8a06d8fbda1720dfd868c071682118c570782845edb082de727983c8e4be4aa9196046dd5a92f7e3e9a3d993613c76af2ed052681ad82d8446aecfbd169b3a659d27f0b012c45b9fd2d5b022492fb34176720daa6af6b61d245cdd44a017fcb0d82b4bc34d8c14d8c815b75616a4b8a0825658e903767625b4514c8ecb6bca7e3cf28d065a4b18456ee149ee611f6a6ed9fc8060a06b0f0a6e3de41e7d4628e915808b939e901cd0e48c11deb612f94b1eb4d589df95e2b19077aaff56d57afa46add91f6274ca2117fdf4ec9ad15f2ce0eddcadaddeb39117da645bc127188f7596ca6c7ec46914c17968e3c2c976a4d71f7f8e853a558d6f09cd504e0475641389dc5811d424893cbc25778b3f9ffe28d83db243f69d7fde1fc646d6726b7ed9ba058a2a69b0a368da3d7da417d71552e231c3334b7b37884f84d831e2952e80b10b205eb9b5c02697e110e3cbaecf4e5af641335a6f8c4d00e8d2862717d2164e4ef64ca969d66b23cdf3bf06f801fef9553859094bbc872153589e8153a49c233294fdffd46656c1304642139fecd39fbb08abd4b8730169b9615d4809910dbf0a2ccb1fa8d0c38c950265c77fc4904f97c11c5e59b9f92bc653e67bbb8ec57e1cb7111dbba62ee56eaf48210af4f5f238490a4aec16c6c60fb4d968915a5a6fb7e6767111a6dca6e279498aa016965c58939dc65f55863d7c21b6885c6c360b46772571acdd7b3eebfbeea2a681e8e10e4ea4d95e259a48bb53059650c9914c768f1b9cdc3998558b5c3fb2bb4a643c85cf4ac4582d554fa71a40235700747589a8f837ee85a9c66d18bb3d010bd28f47505c45bf7d61822152e6acd38b3103115e3f4f4839d9ed1fdc3a9abbdb8885274ebeef30278964b4833509fe21a75875b7a1e59aa1f293c9ebb12e2f8f2f112f99fa17c5eb3e7f4991416e2829f7fe1f851fc3fabfbb6c03ca56f72f11e5a21da6d3a6d9696e7de32137173b91c2f6891fe71089510ce634749312f9ac7124ad7b6757e4ff3d7594057e65742c447d56a91e718ce52eba5bd2d70c9fc35c463a9dc1c8591d8dd2092a7f6686bd784de00568fc57ace7ad9ae6805c37e8b751349b9b3ef1bc5cb2cd17d7a11f3ff522151311ed21e0b9c9c5ad9f1e4787e9cca1732f1666fc70b51e9764e66d1b9d30a1d88d75524d3fb53e5fb3a618b50200ed743ee6b165b147726120793dad8ab8b10e937e32de51ec7e3f2a3dbe047895ea4a6ae75739ec0e004cd0ee5fddea612d85a1ab88d7d2736c6e5272a40a3e47d013763d5a9b196a4c494ebb2ad4c6f72dee216b533bff8a61fb1a5dc95f39b4206ea2530a7844e77df2500fdbe7ef344d09898b7f3c5d8c79e3f9e9e99981c3df0e3dd7505696fde18c154f7e02d9bcfd47521d7381c93ba2cf41d78f561a3f53eccd577758e03fdf162e38e6b7ad8394b396bfd6aafce275591df4e8032d64784b7a731c408694c16a338d771eae93499d4051f8c668712f2c64fdd596bbb9a10a35766928428914a38b8a557856e13f97eda358b4489ff9ca5d523841f17f746948d5aee5698785e51492d8b8f6b6ec652b0c876ceffa2ed67efa633f66e21a5f435caa7a7dcea449d8e8a9bfbbbf8357cf2380a303ef8660522910a645ea39fe978baa4a3fcc588d283046b5267851f872aba05703ad893f89188b0714dbc4866be93dfb1d0d04e374ed83abfa660da4c6c609a3274e432b71475270e532f06da1210163895ef1d4a256adc7f300262158de51086124508d017712fc2eb1e2fd2d92222ad09b2f53009ab06d9bf5f3e71e7383297e63ca640e44389dbb99cf0f4845f71bcbd058bee28d4db1d80a328aba88bdd9a80b726bc51e53a92960a985e7b86ea2a8e88e6e3641180eee8cba7303d54eb60aa3860a0505a143ded66dc49565e0a80c0b31fb85f4966a2154c9d64eabf2dc8ef2a2014cee92a3ba64c27b3bffa528c9bf353195dca0e95329d8dc1d50b8d5f6cba99dfacd70180ba326bafc24a472a65a5929d7928b11443974187af4baf36da0e89ce5f08c5bd698fbfe81810bfd7762c0f5d975fe9c778e4f1166a5e3d8fe0de5a195e128bee49302ad6e1788ad555b9ad8ca4892d11df7867bb6edadc878894a0e199fb4bc05a34e04be99f27af0916cd68dd2fed1b2e9582cc30b8048e2f848d49d2955fd5ba97f0daef913749324112ce2864ba84998510a5281c1df35afedd4f98e3eb6c7b0c0a98b3477bc07e074614cc4d85fae7a151dab1a2ed42c43a38659b2fe859ddba5da7d4f2a8f63442bca4dd3e11b4b981071d764b8e02feed5b956eda0b872885ac801b678a54ee120e31429866ac759f6f373a0f1b95a3f1b42c1087371758e01278a69eff2eb0a2f1221629d020c7754b0ab0de3a0d6a0d2cb1e90f23fe08faff863bac1c837bf6696b734d066596022331c3d1cb3c3bb9be964e396a1e856553b6d968b73066aed50439d8e9a64a332d02a891c1d6e29a81e0bba8ef5a9f86683d83d72391b67b62d1780c77b6457a265da0b3599e0b7918e49208cb5cda359676c8d96191547ffa8cc717cc7b6a6f449349e1cc4beccfe7613f0d3b715e4882a69ef9173ac2c261cb62291602d61bf53ad9652186dbde45ffb908d1316e4ed3c1d0b21e95ea66745ca0f5d480f690d2c519b595ce82e967644cf7b72c9cdf158da5a7e8443a6c7b60c129f2063cfa9b9f8989065880eec8dacf623e93db8e99c09cd5d94df9ef277ea6471ac2911a3c86a92831fbcd52e3b3af31ff8445f043bc48bedb11069ca2b250ea31fdd4228cf2f7735b6012dd9027594afd09f0b5a38c1675fa7f6035d3b5669fc3375cdf438e635b62e7b4ddd003c8e366671bc8e9ef38d448a48e52feb48510daab05d38fa18c7d8c0b3a5e8420f933737a145de6130c74925bdcb3e305a07202f91385af1dc4808d026d33e6dc360391b8358dde02b04e6935c783280eb340fdfd4d015d2e525dd18cda917730df9d19b7eb51ec0f53b3aecdf46ee9f68fbfe0c71896553fc8e85115080ce5ae3937d69820757d54b4ea04476815a5321ecfa8667b5ad5059a4b5c9e4e0968a38900c7faf1d52b895c8420f1ec7fb4839fef81dc2825e602ce89f3c06902b61fc0aeba09483dadc596819019c54d2d1c52ef98bd2f7e6c3053daa2cc69529515d9cec00aa1a6aad3c4f093857fa82cfd78bb540772400277753a1196bd4005a91a3650f65460b3a9a36d6c53551053b95e24d1ec4d078cdce647198ca0463cd7cc0501369399fca08aa9df985e11bcafeb40899d419a851af6398eb3c15ce33a3d90055706c1da634e3120aa28de3eebb9bcb14e7dc2e11834b12347dc58b2292aa14513bb993b78f8121cfbd1778e1ee331461a556887a63c6a67d3265080f3bbf156f186a26bb800c35ac68c0a472eab420aa380146dc9076bc00c65e75e4dba58475e8b2c77b74f292db225fde4f6d2a959f162855519f07b77677a56c7e0e91c7154c9d20e400eca9e868e8cdc17027ee04164bd29678d7b8e6319730f060ca1b246489803918f62f9b7d759add3f3f4dad0a6ef1de4f4077945db34a570cdec7f7958103e0f73ff1ee8c466ea692d1dfaedf7e7a7e94484e1ca6204d044f468f4527844f765cf4eab0a33a680d770ad3507002e35ac84f6687ca59e4fcc3bb51955b2d4d98068d5d44a46ed5ef40704d3fb7d10154f4aebeb5d6a305de2cb6b2711c5770bf878f39f35779620b1d695c2904da2f6a595852630497caae4cc9a822c4751b51cb69d635e6ec47d6972a29c59515e2eaee01a5589c03bc24916b76c32ed9b78950e910211e331b033c052413e24ae325af29db647dd02ca06cc5224a8ddd55f26ac43a83d96e0beae9d7b9ffa31d515340cce114c66a177f8d7c291bdd49c1490e880d8f82ce4ea6f7651404d81367362f2a3e9b0ce311eaa8fb8525cf8690a8f943ce49bef0aa03caa44fcb439b8b7a31a72fbb61208a04697ca3bbf8b5a0606341a0e784d6cb82b093b274ebb4cede80485b612e321be1166e3c84f2bb1789b343863ebaf12ca70a92ac55a78c7998764400fcc9812fc3e8737af721a4d5cc5264f3a291f25e2b52abe5e07a38ed0932614e87fc1bee6b2a8b66b83fbaacf3f1b49270f8c78c5468ed6a7e4d2571d60cb9808c8df22161e553f1fc3361b0d4227e26d087c80693ae4c4477afa54cc53c3b15e1b3f4e137f9366aa52ae0ba3e5f2d50c84d243d55326218faf8ffc2d6e5202bd20e4823f1b4574181a7470dfd658471b2655b40395dc6359ae87a53f19edb007b977cff3c4b0dd1b2b23d4f4b5103cba48612cc2a8d1dcd208f85c903caeba0e6d3a7348a6129c86843df4bd2b5a50699955e9c1d6c6200dc5bb2d90df887813da1b9acc7678755e24da71ba4f60720b57ac93e7f8ca9e4c9c0be6a608008e5f5ebcb631542c9c2f6c408279633b43dd688ccb4679ea0e0d60267f194210ac7d7ff258f76525bb51e2ef7d72bb10161a72083e7de7ec3ce96f53ba4f83eed496525ee2ec23ba0e06713cb094637f2863d945432ccd307ef45e62b25266282b5227cbe0c9b27e2eb55c7c15510ecd3145c01ba5dfa6b57ba234d1548cd65e851953e0fe25805acbe0be413d12526dbf031d07f8e1177d3377a2575fee0dbf74eb62d01187af05ab977b1014a5f52a5a6f20de227f3a537eff328edc4a170dde3649d6778aae839e1e24793b44b4251518f4f39a2d87add841b3eadfca7f57d968e27587bcdf516b425e59866f31c19c2ff71c575fe262536499d92873266e559d4bd873147a449dfc72d80770e045c2d02bc3cf98270d5b66031cc3a8020e688c629886cd664a2e9e01491262a51d5472440257dff2e991101178abdfa061850683747fba1575df27f75a96a4d8aa64da924bb79ebe2e1e23ecefb00e88157f648c9ae937a5cba7d26dba81f9fcef54a4d550b6977656fd6be5226f77799b1b731f7f6f9ead317bb6a370075e4b5314829a0bcb4f67f35435df3a8303081a1d427409b01ba7b9824af827759643cc07c9ab6c20fdf9b94a54a3183d21b6f475f7b7cd8a515c1cef21b386368a39d855a92eabbf9e691ff24556ecaa9e551a8c415d89a0305c15cd8fa9838fca767318f14de9197e878c573bcc853a83107909311d62804fe87c3bfb056cfd43df4c09ea3a0d21f933bf722bfc924d1430ba51efba89d0c5e9450eb71f9e016ef8833d0a06e59829e66398b1114d39479f03d506394ca034388889b5333f1d0bc9fd8f09b7ec5cb4589aab56d96b2a2d16aaeb74d81a011ad5e54bb686c1a8df3a1447c7dc256cb670644010f68c1433c187b32920b9311ed70434f597258ee69a55ee5434c4c80623288f8cc9889498a5fc6653f4b823d6c3e6efe83d1bf4950ec13f9ffed06013b0721962ea59b8ca86cc06f05cdbdd0d2305d93abac05726b527177683bc28b149ffe1fafa89c009dcc0caf55e1d9bfcd1c4fe397d3c5fc0c6da383f4c41daa66263a471ffa9d981e47f85ed33653fdadce24b56b94fb30e567fc6184e01a8905a7aeb5925859118a1060295d50487ba0c1e76ca8f99e22f99a39b809b6505842261b0d4deaf7d83d2fb26bd39d2038bd1353a36ac970cadfdb87056420c78d63ea2b2a7b8289306c163ad35031750bb6adfaedbe1a7d51f5158cc4b04321c13926f56809b0335b6d88b5f779906cd0fcd5b7c0f0bf6d57490865b51ac8c9710997aa076ad1c40cc145e65c02d25485362c3f949763200c123e7cf1bd09cf556070bc874f0ab53e6988f439980de48974db3aa17f6137067fc13aaa24297473b2302d7b44265f473fe4455ee2f9d773feb52ca364a20df1ed7c6c78be155870a586e2132871ea4fad2b4add1d2c7040b46554c5b8586744dfde9612a76439e16bcaab8daf5cc20d89f880251a9fe6208c314095da7ac5ce369c57a576361cb1f66fe1da7513f997fd3c6e77b6d166592a749034ea50feefdc2f7a1bd4e6ec60fecdad23fcfcb829fcc8eaff523797d9dccc24145816b74161f3f6c47ab2b8632b0dbfaf01938edb025a9c9dbbe795dc542c24bd7135c7c5bf361c1c3bbf4a50497c9ef18ebab83833e4452a3df9657850d114a9d102ab023ae9cdb3db837d1b321a9bd69d9a278b97d1e086a2401c1ff69f5b228bf2b6cc7fd1e4aa6433c0bbd64a74a42591dc0ddf278cc12313d7d1b81c316018206e1f349b4ee5e3ad47562795c9478d29946e442c4494b6b6ae6415258f179cf340a9f99f9d16fab1a9f05726e37897d034d3f9b469daf9fe93e4c3994196a07c5f9128f04a17a8261a6e527629565c2890eb803722ec91e30c06ff14f407809e92f184c45440b20cac6f6be27fa691d140e8e584b623ba07dcd1ce6103c844f125671c253961ac00310fe5f4ab96bb88e7d7d7e1ecf63b5af80088110724d6a5ae7a4f6970cb920b3c055d82daf8e0b1ac53aa6679f5ac85959ab6264dcd6528d5a3f1a7c7fb9fc0e2ae9ed1e10a3331a450d6887fc51b0861b5f461369ae74099b381185fe076e2ea69b9eb54a699c9268fce1b3a07daf6b5dfcc4c02975307c9e725c3047e0fd1bca91f3133a5a14ba5cb001ed0523a95984b1a5c1a57bae0f3f556cf9c0ce59c2c4f892d0502ed46471a6745a5228adc2edf9f892b906b5c0e4e033feea3215e2b140993432d4c96c91e566cdea64a5a43648440d6cdce43c803ac6c3532d860473abb463d0737e6634aa9b20c78e73c3bbabb6cef59c8dd38fef882ca0c68866737731ac94fed1f8ffac930777301a35eed5c538ba913a1c63532c5fb6188b5c16ed280267439dca48f966c2a43b4ffc61261a17aee54da1afa7b5d2a92245beadff99989eb90a7c1acd3c6a066446987f64cbd6363bf750761e4d7c6c67f15118f782c7b9dff23b61bc124650ca02f0c8390dbe4ed73f994e1e5b45644838c0c6064624dc7761d3254dca99938bf376bb979921dfc19864a0fa2dbee6eb33800c50e4867e4ad14604e053b9a6339d5aabc5fdfcd160626a11e805572666d182eba3d983ae48df106572c7dec35eff7078d9ccd7e507c1e9a6ca2407231a0783bf13d201c4ddae4f9b77b4fb855f743aee3de013ba45d8a6420a476e52d38afb23c75f2f1bffc4f2ce861daa4ec733a757be06c5c63d086081020ded0e38a7ca7ffd27ba5cb21bc403666f301572e1763b2e60a7c0847244f540786740d26f0d1021a2b81ef853b2f07109f7094d4ae75f4e84cf1bd63ab94cb6a42c38b9825572036ab6961fc49dbb24094b2de3f3365613a04e557359ead16d4ab1e73be6dd71f37e88123c8b94c25c8b2bdeb89c517e413d9d09c6cba7aa3e573a1f5621948761455c665b713877db28d7c062ad721bca8b7b28ecc060b8ed68b461e9db67d4808e9e2446ff7a9f2e59161e6a0fc484afacee5843ceb45e6fcae60af3ddb9749f003d9889039039fcebab673512ecd739ff5b610a9a90029213e112cab2d83a709e19c7ab3ec16bb60b0a53f654f55ad2b734df700a100e5f2ccb0cca15802cffdfcc8076c8f22dbf9a8d42bc6e00b4548acc9bfff67c5d812ba4b35991d6c58fcdd60cd3f708e06ba59abe93bd44831cd6e403fe2d71b54ac7d813cfb4eb047bf799bc95f460fce9549b7a9a489f4ad105795689cfcdc9225ebe59299f6989b58a3e0065a9f646d82aa27fd954f015889562bdd4f897fe642be846cf3afbe2acd4e2e40e842ef4a44956b251a8bad504676ebbe99851701584f2f4f69aade1ffc639cfe3243729c938c15f26f8c8571b5ae94b02cd95b26715034390a1f1648cd35b1f0614baefcd2d7cf27530d6cf8e26f553ecdbebecbc1f6b0f2d3f152c5add956bae4422470d5522af30f13dbeed7580f2d3c9404cdbacd60bba697e85aee7e54ff7b4a6217cd29730c1ab867cf530de44478ab8c3e57c51866136b0497b89749c72c2fb8ae2b9cd77ad8c6d1af8878b66f64acf9df52b15d9bff07669794a751cf198cb5b52228d9e810321dde0381b9e294a60651e199db8bc0784ada92d86dbaf246584dc6c482ae93fe74cfed9d2e708f49de7513a07cb38724c7ae1cc3a2648c1c394fa85c56043060ca058bf7dd4dbe8c515a8057d7c56eed326905f25f00d091a9f6a2e5c528b670ed8d20a1338100dd2df256b7038ca7b92675138ae0283cb9840c9363a320d4ecca6e37bce9776ea21add8af8d470a33dea35c40e2fe88952bb3791de1677e7b9c32acb116e2282c2c78875c685ec1621da3bf69c3ffd3cccd9f0f0b08fe8f1d126f9db0440280a00dce41ed7a43ec3e6429f119ba69c536d6e384fc39715c54bd37d0de9232dc2cb4be2c437cd2b225d1e663e10e49c3de42bf6bde842fa49329adf64d81b1574c368a443aca940dfbe491a33b63db32b3190fe67dfb7fb86994eff1c294fbcc11ceb35ce80a600f80b8c79e60a88a9a38856535203daea2878362368f2e1441f5252878b016cd943828f2eb46da23adec24265b6af97693e065848af0157b3a6a6c65a04b0bcc8755eb1acfbec2792364ad0ad226d5c5a3e7f9ab49de80a49acf8aa5c7616bb4a67c26bcbf466eef8be47fc155ef610c790591cecdb2173295bec56ebf4fd91ef9fd499fdcb68f36e11e6c618b84692cd0ec332c32fa652d952e73c3e3dd35c55a9c05f9b049821cefafaf3a59d7680aa9ce02472e2fe5055125c9b9ba2a7b25d5f6906cf88628b994085604f93a3f72c71d81758c471ffe2e3aeb47a8c17fa5d75276d4fb1123b94098ab68066b45f387ffec1d1c79ce8d905705fa504c8d6811cdb28ff827c1848292ab86f43787157dd05764ec1482f6adcd99c3d54b85c1896083cc31b5c8026d377cf8a4ca5a18cd75f84ae7461a81045c0290558c20fa6956c4f58755dda891ac458a6c915a2076467e537eebe355505fcc2c973695d7dea386a52d2155de2dcf4747ee1374bfae34f1e26bc7f26036a53735013c670e5a97765f637723a0404931b578979b94f25de1d78b8bd6dbc8190112f05654fcc37a2e3af0cb2218c27af91d96b4dac8c15c7891b08e339780fd9cbb3fc54ee9521ec8039151ae5b447e7d818535cdf3f51fa49a9099af7774862866a17bd8cc15acd395773cde28240aef35970651d141b1b4dd950f79db94e41dc623161575815f52f34b2c009c622a8dc0f5e3841a36edfa29f450341137d0a61620dc62db96d6a54702d96b3c71782051a54cf1dd63fb6ffac8adc98f0f85c2d472018d4129e2458df225c357e4c77af6284500ccc6512dbf2368e1057a2a1bb6e95cf5e2421fe6f0b616ece11b16ee36e39ac2d9919423c7d59e77810173c6d6395a93592b4626886ff32925dfc8d6d252ca7b642a8f96bec5b034591c8a8dd5e5bef050e3250fca3698de501b4147c104889e5653931be758151adae8edd7c7a859048951f53eb462b6eb17b571b9324b9e45172bb5b1c93c6923255fba2305ca28cde0c57ec6da95269c836cd41e3cc9f24116267ca0ccff81d644843f10689364df823e60110d295da8a109b616f77464182f1e933abee28bfbe3e893bd059ee8983a0c28621dc1d734c04ab7e3c39650ed778a7afb22e811aae45b0cbd8f2be085e01ae9ae29d98ea42b353f053e1b3e62f0260fb4aaf91c94bedacb06c9814b67792cfc18fbf0c74004714de8146a771fee831a8819432a549765e3d98e0381c4a7595d38a2415dee9b38714ba48f3c1346c2e5a92f5a8a80ec390e78e5faf01ef784e7f9a89746988302cafe62ebc6bea14110f831a65c195a164741beda5d652b95a05b22573d231f7376b3b80335d3fa56e8e72c2dbc695f5252b01966864fc7228549da767b82d7752558f7ccdee1fd86cf25b09c0bf84e6286df14c5cfaedc4529f20863117eeab700bd3cbfdfffa778aed414080fc42a8bdef1901c6d770399857789d317faa24cad19459b7870e7acaa3d6eeab55af56976c683bf101caa052643c878fc505476e8e9e47a9cbe4a9de664d58c79c5c9b66a524c631975db9d4bab2706e97e207a4acaad781d453d39f7a13297459ca8fd3c5486210568907e32505764e8ae1315c2c38b82b8a2196ddb0ba106aadfe33e9c80d6fc404353b4e44bc6695535f505b2e850f3db9741e6aab44cffa74ab724f1a064f4a6db4f5ad8eec214dfd50f7a48b42faed430a590e582fd8af38c59dc0732f03a39130abf80bd7cb216224990b0290f837c605dea7c9ed496a879ca50756c22a92036789068b7ee0b4680d98b0e5a2a3e3087a6eb25e717d18f393ec21ccb7f3e4216999d30ca8589fc7306f11d49e2a2b7c43302697d17b789c3bfb8b1cdbf4517033b234913ce80685bcda0ee097f8a669054bbd016d0f6c307acc0cd308d59cbdf7f87e4aada45e74bfef42954633481911d034ea97cac9323a4799fa82d4714ea6c8afe0da1efa2e9d869e1aee36a5d67b2d0511f77de5d325ff0b42e06c2bd8551cc0cf5cac7c958f9a625ce53dbf76217b52e473d57d1c906e24aa8c34d192ee6fb88cef39afd66b847e6ea395eaddc45d12a1586eb769fbd21b955ce3a499ec868130c8a6f22abda5a5c86c7acf53fec0d1373feecfea2a35039b1dd5f875e715a28224a278ce96ee79c13593e2cba3025232e08e9214042ea99f9380e35587e160a00b41b70f1b0eb4dd71b07336f46079c25be95471de8b42a9f4fb03a1ac104d4ec1ac2c3acd51058d10ca9d3b7b5657d7dec74845d0447fa39bda1fe7dfeaf26daa8fae39fbcdf733ef7ce643572c5d5feefb350df7bd18c9235a41ecae829193e2f47b26408a7b8e9e844158ecaf50b395722a6a476a1bc1212d9b3430c09e802f0d3ef353abbcf29e0fe0358237e2049d1f93e660f5ded31e438b8e7393b68cc6880d4901044081464687079bb02607a4977416ce5d1823d1d9ebcf7562219a2bf767cdc7eaf0a159fd12431106a23e403812c4d948908132242e1c97fabbd69a565b58e922d13a728e92b04c877e05e6e4d877a9d0a3d094305d89495cae047517463b8cc04fff0adee7f44858a6acba6c5b763447b03a42c1918dfb70f54123c18920b0597363af65b66eee6962d91221d23565ea50462518a8e60fc5ff7964e11cd80d04bbb2412e29933c293db3ec78a04f38802ace93251af084677107f9b580f4890a1c6bd45e3225364a042ca09a6a6a5aa53d46f1e3b407fad951694d4c3742c43e10125e8699f48a8d133b8074995abb90e6c1d757aa773558d4a4aea451dafe0aa9b4c926efb29afea8d85959927d431b3809b69c2e65b59e30443c66cc6f864c6eafbd7ef32c8eb7a1dc6a663f5e02acc2249a3a98c91ca21a25544af94e246616c099a4aa12923ffc2ee23a3694098595e2b8a06cd236b39c4977c6e3a1e0a98b4120a0c360bb9127e332cf3dde68d99cb086b9b0ee25dc287e2d3f5420330516cac8a4e04449cb6076c795274f1c54b0ff8d554f38526b09eca3771606195c5c51c7c995548e91171002ea86bd4bca9c893691fae0f689feaf12201d31d0f2a1a3a9ae7e3b70d787bdc0c3a2a76c9b5713ccac9026491bf43b5323140ab2a0547d84ab83a48369baf87565bd8733c6fb9cad027f435f9ef0cbe3c402e5182fc8879b7216394b33b855f48ca8b1f1ac798bcdaa6dab95be3da780be57dff876a641e71f5da35da0490d0639b9c178c95fcb0e1602ee3f645367b2c684b90cae2d4722a1d54afab89642e008970d172d229c1fa4963635b5735e3c2c4ae30cc47a0a906c85f7b38a9335a24e87c2f74aa5c94902d4ddd087a9d5f65cc3fd5cc543545854a47a4d0a53ca653be46c4c0a5bec89c253344b000bc86379a86f2fabde29f2b56e08d6eb3278689e3611b97b22bbfee3d3242b7451af288f34c3ad642ed7352f182baede02a5deafa1844f1084bc4b5bd9ebac1e5766f7038c65868c970dcce1525c4ba4557cfc8647ec40f9043c4b7027350472693fb7371c7c212a368f1191f1cf1872aa3de694ebe05ae0a4f5ede7131856c643d7bec87cb58c02bc22d4df105cdd1810d4b9c07fb41f4cb824c03ac290c3a9d5a76492491616355679ad42bc98b06723ec035049726cc3ffc72072ff46ec39a9e829374b6545d5a2b5ccf34fec3f1755ca0e6e5b228e0674d8df64e3b8de4ba669490198692837079a8828cb0c2090ded5cdc360f67f21057826e4834901f4d306114805513678e4823b290a28beb8204ef99ca8e0d6429c7aa3e2d6dc5ea23ff89d325352fe7c3aa6f47f67d26cca3c51c383b62d27b009235af15ba039e84cc5755e61052f18ff2b16d2e7fab90e94cf30c36b68c2368727cdd247ada97ce1b5ca19e47f42a04c49c1636a68d74e5cdfb53a237d65d3dd421b24ba59ee8f6d47bb3e7bdf2472eefd148a9cff0422d8fdce5a87c43ff8c5b33ec890e619a190f147800cab6d1835ba2bfe2d932e9e595a87246346c5468f1f7db9bf08cb1158e2dac85ccd8ffe8189e30bf0487cdbd5d1fc1ffe34130b8b1a2191c0858d64f1e216a45fdd3e5591f787914cddb4557c88e6f5781d486fbd0c2dd7b68a9f3a9e05d2d29e7aef4f851d421a26d826fb69d1063815db49414296c7a930467649f5b875cac06134f9bcbc2d6bb9c88084a6ba106a6542bd03a786995d03f8c515cf66004b64f5f7bde8986aa02bdd84af0c9f6f9954e86f046950eb139b09f270be9f4b5fdc355a972f0e136144f1fef3be3d48dcf2929464b8bc255c4e814f000db912e999e59d37c272bd5adfa4f68b237bc851c2510b358d194adbd97f6ee38458de219fd1faffa0ab3dc0591aac11f61a3a9342c085d23b6c844eb3ce8c0dcdac17553eb1316d89ede3c84622224d63120f1a23cab58f5462386ddb407afc118398e304124df2358778987f85588356bf2a89874b9b4f83e326e36c9dbbc7d761fcb81ab62a72f0aa03107a5410dfbdc35b8c25e048c25ddcd79ad53ff6cc1b00c294b420c15627fb66d76f93fba4e560163f51766fa15d207b63ade8db5d216b17160b167c098cbc26f19837e15a6bf3ba37f93d5ecce0c14e2c7c780debfa99eba75add973226988bfac7abc0d4f0418469ba08cc4305c60672c97bf71e832de7d48b7cea61ac81e67de5e4971440342624fda46bf6b8af196827b9f85b0ddad4746b67c4ba2d7d4cbf1e7db99ef0a787646414d6a779a05643a821e6c7d22cdedf473e70050f4953d66df272f74676904ec5129fd5469762d8864a3a15819ea7c5a1716b628862e2a4c318d7b96384b75c0de290c035d3444bcd196a3f5ad1464eaa0e0c8a3190cd3d00f9c5cee18c86fed91624784685acbcf82fc86a928449460dc5b791da0e973f110c6e7230bd5b3ec98caafb6d4ae0bbc515664ec0251e66d8f210049797d280563418218f07e430ce2096600e2cb2c797230b403f21ee8e88d2c3b03ca7b3f272b0daf2ce1c2eb069768d92199b31fec315da1caf22e5a422410282772cb91f9a52f7148628889077b3f81d145b8721db54046fcebdf6d9c358c1578f120696e661f51d1d99a44448873e45f02fd7682faf0b7735c9867aa8673b06a91448f34e3f73f997337b47e4aa66248682d88f24daf2bfc0deec8d8a6dedf6b707da048eb899dabb34c4fe53de0fde66e2785d21c790ab1d1584bdfd96906a3ec1c269148a6943da1c537baca09b8adc5b6ec812888e232c76c29c0db0c1c18bbc93a81920c6509aff95fb46704b342b8eafe9581c43d61a65d135da188d4d942bfd0effa1db8e068cb6618f8bff6c0fe227619aaaae571601e749fcedaa100be7386a3c8b68694eaedccb2b9d2e0a6356a0f8bf1b7a2fdb3cc696321fb76a0c35e3f3784164ea184229a60deb76fb919e6860813203a9cd502bb542a216ebe2a9b458daf52df6591c6c5f16ec34b4a35f5c0b5edc4868fe788465f70bc7340ce661d43c178fb6aee2569d4e1f4152d1acc5a32879a6c28191828a8410d28959acd2e51a37619f3ec1c72e425a37065f49a1cccafd1f2b517c2f058133b0a36ff95b6d16274a7776df502bc3909e67bce5d1bd8ecd3d86dec0344c14448ced0428b06e309ff6b61ed1e128fae6728c921f3be87180fbdef2faa17014be6a9085452d7ab3133f51e41ed39d14972bcda0449751868f847a71166f6336df799fca7118e8b474e077d2ee6b73be947c9d3e53d662c915cfcff1f09d67268b0f2767ee0dec62708beb43be805c0b4511b97979176df458fb1a925ffbb05e4b7c58a20946a2ae788f8c4c1559011bdbed1cdb72b7cd8b3bc07f4c281a43ec59b2e169ea9fb9fe106257e8db9207c739374535f7731ff817fd6a97da5aa710192f4d4a88abcfc03ba764bc7e5b372ba36252ebaa2cfcdb05aed4e0b27401e1befc84ecdaa343a4a8185f6f0290ffe91d75b1b2518dd4550a4473e48499c5a92fb457ad30aa3943fb505c14649e7e1c73824a409b28b62cd7363d112292325edefd2f03c936d84995bd6a9d1654f69ff2305fddcef8421c6fa5e95e0804d21326f29090661e8b7d29acad4ed70088e0a02d9e0c20ef28bcf6c6e37f0ea5e8d101018274b1a9581cb0e4ffc249c6ff21507ec348c2b295e0a78295c70db6da3f61e3e060097394d4dd297c791ef4b56be9b01a29139fd0b69e035c332179ab95b905fa9206a6469c25f5b040e6d41fc75c41af2551b1e653bb4cdea718bf56be7aa323ffa7caea162d9737f25854562a0e86ff89bb5933016132a74321b229255a7722120b1cabcc76bdf4bab94b18a321414558f4363d700eaea6b036f292ab2ccc250a1acec76075af3157ad8e301d6c8a38a4cf5c3de2693876f0454db9353919500d13528f47452c4986d3fe2629a3449e8d878f64d29b34b275e4fe742363f99640c3fd23b3d389f23ffdb261c466726dbbcb3c34afa274b28901d1ad577fd38c81fb19bd7550062bb85d31b513614780a02b6b5e3b5b7887a79b97532d503b43d1c7c48c96829feacef3c031665551659f32875674e20f38721cdc1e641ce9fe4e9dfb9e42bf08fc28ed0b03ef218d0b0e127b5046a9b965d8287fc07d20d688150ca006c79be06c7fdc9bb7910613ff3b5ba73d67e8dd2657407b021cdbb78ea5106f1646e9fab0fe2816f78a750ded955e761ba85c819d46a9e2a5ff21cdfc247b7350b0f8ecb1b82b1f991dba6d8b1e63cc69d4a7da94a552e695c6ca72da158fdd2260128890e396f7aa3b62023deff2db64c9a39b6030e9b39d99e280a4fec1683e09bb3787305d649f7ebb7bec1c75b1a6ea0259b734c14a0a2558a99db4acabfd497d51adfa4a46fac0c29d21fc027f0488fb7a2952e576fc9efa0c6f3bbb9725ee8556fb5ab129aa3e3ce912b2df7fc3c15463f649844144f62493b9ca098c5bca1e14e2148aea9ef0b851400b32db71827c0b0b5f8347f36f3e78f2f165f8e3fdea653ba81865efca377df1273b6a1f5df53aada0cc162aa096083a8ff62f6bd1096861fb1aae2851b4e55feb071284c12c6993dba58a4e938ec33d897b5333d67da388a69569a5762165ac069b0f9c00cca0bd1139c96e8265c865c2f8e7c39063bc077f795749cb6076df4588e2b2d07853a1443fcab992c7be89857a004fa930864687868405f9d06cd44a0122e2df619de0c07ddb7bd136ef66b5a49f7c6251915d5361fbf75d8acc6471b2aec8c0d8499c78ea80511fe930ed6f8ff4406b5c061678c0e23dc998804dcd4c7fc166356e536d84a59bc35fd2c111c7aac8ac8c29f5310f40bf0161bc7950978b886f0ce03e2e053e0d426238e9401c126d362e59556ff6bbdd7886000b65fde3390be7c2e91df00f2e15bdf77fc84040f705fe1756c4402679479a18fea45b24ac145764d68c03b2ace1ad2a40c67b027b5a81c8e29ac5d69ea33c39e236c7f906f6a8445b7a88ddcedc5d7a5b3326e9192aaa4b13e12469a21b34c6709660dbbe4844ff9aab8c1af58a076ce7dbe92a63aeaa409de0aed0d76b0da0578f55c4d6cc5b77637710c3498c8cc4718da0efefb279511b4a026d613e50a3fa51401fc786f81708e619a9369b6d9d5daea06836850917d835304fa3d6dbb4dd72ac7e624587ec2437f466db42e2d5c8bb03eb389c0482c087b6c2ea1e81f13a0b3772e452c3d640583c9705267c10d4d5f88f8322d2df8a55ba2b2fd5c7cb1b905a0c2822bd46d86e73018d96953491224866bf73b315490b2cacc59a13c14ce68372fc66c6f76a3ad62c9cbf734bf90b44a0c04f2f7545d501c91ced47854b3a5d3773420c653558b73d3c59d7d3c1689db1782f2ef33fe06b7418229a34768351cf11f61eef9f3839d3e5530af4d089305a32ebd80c97223b67047148a36d8c3eca73f31f2d94c04d70e89173ee68501de0c945b74530795598204e145adc81502d83c2944ecc9a6c42db1d7cd91682e05051e93f714505d75c1553d85e4217ae2af8f40110cc1dc88a3b34653871ecc50420cedba771ff2502b58f3bf353d62b68c365f4c7a6603f3c2a238d3e98594f1ba6e1b08eada2918519a628a45ecae4b17fb39ec117fa16c9448fe1d21645120ba850e71e2947b54cf87c599a6a2827263640041367784ec51b9c37cdbb3627f76f21955d9876ea0283ed22b5a07cec34792d6f9dbb505184eec9ef7f35b8237fdaf2b05fad8d98ce61c635c10fb5d803f9096ed9c7205b421482557f2f7c6807df1f893568181371df13935446ce065beb87a55c2dea524b53c6d4fa06a7806e31ddd78bb4704c5764b66c793128a76b159d914f5d76543df761e1db72935277f57a7a7b2ab9e7fbee199d6b4638094cb89b66fbd8c82e179f53234e5abb6ec764690885115cedd1677f5c8b2887ad48de4af560fa3fdcf7350cc5e6b6b90a23541c6174d906278d63a7b850380c412984e8b16aceb3971f832e85ffeec27da4a05c46811bb9dc4f3693f6036a1fe551da2d57544f4c85708b06f137692d30fb2146cdfad11a65ecc4e0e1afa9f25ff22858b14efbec3557074fbbf067122a39370193dfeb1b41e38b24701506d64986a4cad8853a2a39028e29f46e08b4ea0a88d180c6762ff166212ce8280c6ae78665f9c70803a313030a3e69c41f93f246738e7d5f9862f9f1d126a5fa1d67b18c6a6480c8ee7f5f5b5d24740b6d55fb64acd9435b7d0b6e13abc83a76e075387f6b93296293815504948933d97c33edd95a62f0c28db4d179e49bafceec7973b5657285a7eb9420b22caad226aa8b055495eba5974a94b17f3c18928539f7f4b03e140aefb83f2d5c2b96f74bd2689ef465777f03672d0d744f2aa232e851e5da6dbbea3ab5948b65a60872de801be0665553d27f8b831cd1769bb4cd61140cec1c9bc6677091656eff149a9546ccd453beb00c4a1851f7a67921978c5ee2ca83cc84ad7c5687c556f227f97a6271f072cab034052b22046be0bfaebad6df055d007fc5d7b6cc63aacf4ec075a0e93fc4adf32819397db79d38193450e8fe88e8effb71030ce29e62d64497c1198f8190d3b8b25c8eae993fe86e3ec3519a7a56d533462bf20b7066894af483442d6145cd3702592f6ce789526904b9a916e1c26462338ce9dabbc4ced46be7db7203dbbb84a3bd575a5ce2a624141e7d57ee41481a24d9fce04a6597a376d843ec7f024393bfa4f043a3f0a0ee18c5c8d990cff3c9b6bd7caca182fdf365d03983d95c5bf21bd7cd1929e57817dcb8d82e932e9d4e293f7c7adbded7646c56728c99afde5bdd68e219a10fa986766ac55ba1f05e6e73f0ca5df6826258eb31d002bfd3e0500171cdc9f0dd4fcb9955a058f83b15444ec721c431b9dbf103c252bb34ff11e2eaf153ff5a061dc20f386297e36a7f3ca746aa3a135e479e0ba55cceedb69a7f7624fa975e048d763b3fc94aa7d96da972ddee7f91b7f00d6c1cfde389f4ab05c799aa106556611cd123a26ff6a23a4057a3b2ff2569dd14605968e76993965b7211c5b7405ff5c89cdcfb36283f7fa82ff1da9e26d0269fac8daf9015b93b3b536c5b00a2c7427e199d9807be9893b67f03a9a1970a1a046887e0a8dcf4e6a2cee57ff26b8a664f6c836b28b20082d0387e02d6d42adb8c5f126668c2292cda1123b85e39ffbd389d832138eaa1500b06f16b0d0e5505c970152194e30f8bc3a2ef01385533daec68f3246ef72956036ba3aead3d62e879dcacb7f505698c6687996ffeeefe7d2a0c3648968aec1e2b864a9b36b8f08211e8178883a27a079fe072f08ca49e5ef1ab910ff56ac7d4db6a0e25457c230cf920acad2698536ad3c6bbea096729e2687057b1d998103c0dde7df3d699a35e5b7a297dcae7d42dc5e6a138adada3247fd200f3060be71eaed95f6e17039650bd67ed21569598bba030ca1063affaef3ad2f17d74d33508a3c74b0a9a536a7c4109ffb9bd1e1ab3ea36555c2522f1cfad903c8a51e91cdff895146b56b83fff4680123b35a193c106e845f575c9b983e338793bddd57a0c46acd9298508e556d242d62cdb45e9c0f9bbdcce45a259ae0ffd57dfeaf85c64351e0cf392c4220a6d10c7e178ef8a88c4c1ad63c131cd92df268301730bcfc01f14882e51e9826b793fdfdf5f14ce7c44c59ed399e3a56ab3ede222dccd25736b85ffbf267efd69be2ad7e07a9b6360dcfee822e70f188722d0443239533c664b51d9d6bf46ccf8087116d5baf8dd6e0077800d84c309d7d749851f45d5f843cc369c00fadee5971af41f9451fdcb24138a1f19b9d3f166d6af9a4ac580b8b38c3ae8f0822640222d3563c611071c5ed0d370566ba597913dc6beed7470d7530b1b8ed213a3e6f37b15983e63f61de57cf0996250af0cb47c8c2cbe374678edd248d14f970fbe3c24a0a35a08b517af001b7fcf8cd9a01a4e909a1247600880a0db14025908498233325773bc70c907bffe93a537d60ef9590641987f23e28bf77550609aba6d5e1b13e79b1990ac9ab8b70e96ccf1c7d685606ea0194b40c68e3fcd64b3da521b770052221807de6c4186166a9d7efed120c978fcdb8380d5be361fcb52b5728831d367f29a8879a61d7eab88a95265b583c44068374cd3f26c23a1c62cf33b8f647c9891733ac9428d675510a6c9dfe5b0489c446a8601bd14bff6f637cb030b4dc60f8b17af638ac775a9339d7a4334cee79d830d735d3186adbc52e733f3fb410d20764d418f3863ed2acc874ca4be1aa47df5c24692638d703df3dfa0c7e7a1f3e9993b8f0e7607b4969532a97dcfd30531b19fc76c331b676881217067428c1403fce556557baeeb389b4146fa043d49680239df3182fa576d48c9d40492c78d029d149f1
+\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\rcleartomark{restore}if\r
+%%EndResource
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 212.88 C
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<44796e616d696320676174657761792d737769746368696e67206261736564206f6e20582e3530302064617461> 146.88 211.92 C
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<582e35303020656e74727920bb6c> 158.16 292.32 C
+ski{/Helvetica-Oblique fcd /Helvetica-Oblique-ISO8859-1 fdf}if
+/Helvetica-Oblique-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<3d44464e2c20633d4445ab> 270.00 292.32 C
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<3a> 382.32 292.32 C
+<6c6162656c65645552493d20> 180.96 322.56 C
+0.000 0.000 1.000 RGB
+<687474703a2f2f616d6269782e6469726563746f72792e64666e2e64653a383838392f> 286.08 322.56 C
+0.000 0.000 0.000 RGB
+<20414d424958202867772d646529> 560.16 322.56 C
+<6c6162656c65645552493d20> 180.96 350.16 C
+0.000 0.000 1.000 RGB
+<687474703a2f2f616d6269782e6469726563746f72792e64666e2e64653a383839302f> 286.08 350.16 C
+0.000 0.000 0.000 RGB
+<20414d424958202867772d656e29> 560.16 350.16 C
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 8 8
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<38> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<416476616e7461676573206f6620476174657761792d537769746368696e67> 191.52 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 175.20 t 107.04 418.32 lo 741.84 418.32 lo 741.84 175.20 lo
+cp clip np
+0.000 0.000 0.000 RGB
+%%BeginResource: font StarBats
+%!PS-AdobeFont-1.0: StarBats 001.000\r%%CreationDate: 09.09.98 at 15:50 \r%%VMusage: 1024 36745  \r% Generated by Fontographer 4.1\r% \(c\) Copyright 1998 Star Division GmbH\r% ADL: 917 200 0\r%%EndComments\rFontDirectory/StarBats known{/StarBats findfont dup/UniqueID known{dup\r/UniqueID get 4092170 eq exch/FontType get 1 eq and}{pop false}ifelse\r{save true}{false}ifelse}{false}ifelse\r20 dict begin\r/FontInfo 16 dict dup begin\r  /version (001.000) readonly def\r  /FullName (StarBats) readonly def\r  /FamilyName (StarBats) readonly def\r  /Weight (Medium) readonly def\r  /ItalicAngle 0 def\r  /isFixedPitch false def\r  /UnderlinePosition -133 def\r  /UnderlineThickness 20 def\r  /Notice (\(c\) Copyright 1998 Star Division GmbH) readonly def\r  /em 1000 def\r  /ascent 917 def\r  /descent 200 def\rend readonly def\r/FontName /StarBats def\r/Encoding 256 array\rdup 0/.notdef put\rdup 1/.notdef put\rdup 2/.notdef put\rdup 3/glyph140 put\rdup 4/glyph141 put\rdup 5/ch5 put\rdup 6/ch6 put\rdup 7/.notdef put\rdup 8/.notdef put\rdup 9/.notdef put\rdup 10/.notdef put\rdup 11/.notdef put\rdup 12/.notdef put\rdup 13/.notdef put\rdup 14/.notdef put\rdup 15/.notdef put\rdup 16/.notdef put\rdup 17/.notdef put\rdup 18/.notdef put\rdup 19/.notdef put\rdup 20/.notdef put\rdup 21/.notdef put\rdup 22/.notdef put\rdup 23/.notdef put\rdup 24/.notdef put\rdup 25/.notdef put\rdup 26/.notdef put\rdup 27/.notdef put\rdup 28/.notdef put\rdup 29/.notdef put\rdup 30/.notdef put\rdup 31/.notdef put\rdup 32/space put\rdup 33/exclam put\rdup 34/quotedbl put\rdup 35/numbersign put\rdup 36/dollar put\rdup 37/percent put\rdup 38/ampersand put\rdup 39/quotesingle put\rdup 40/parenleft put\rdup 41/parenright put\rdup 42/asterisk put\rdup 43/plus put\rdup 44/comma put\rdup 45/hyphen put\rdup 46/period put\rdup 47/slash put\rdup 48/zero put\rdup 49/one put\rdup 50/two put\rdup 51/three put\rdup 52/four put\rdup 53/five put\rdup 54/six put\rdup 55/seven put\rdup 56/eight put\rdup 57/nine put\rdup 58/colon put\rdup 59/semicolon put\rdup 60/less put\rdup 61/equal put\rdup 62/greater put\rdup 63/question put\rdup 64/at put\rdup 65/A put\rdup 66/B put\rdup 67/C put\rdup 68/D put\rdup 69/E put\rdup 70/F put\rdup 71/G put\rdup 72/H put\rdup 73/I put\rdup 74/J put\rdup 75/K put\rdup 76/L put\rdup 77/M put\rdup 78/N put\rdup 79/O put\rdup 80/P put\rdup 81/Q put\rdup 82/R put\rdup 83/S put\rdup 84/T put\rdup 85/U put\rdup 86/V put\rdup 87/W put\rdup 88/X put\rdup 89/Y put\rdup 90/Z put\rdup 91/bracketleft put\rdup 92/backslash put\rdup 93/bracketright put\rdup 94/asciicircum put\rdup 95/underscore put\rdup 96/grave put\rdup 97/a put\rdup 98/b put\rdup 99/c put\rdup 100/d put\rdup 101/e put\rdup 102/f put\rdup 103/g put\rdup 104/h put\rdup 105/i put\rdup 106/j put\rdup 107/k put\rdup 108/l put\rdup 109/m put\rdup 110/n put\rdup 111/o put\rdup 112/p put\rdup 113/q put\rdup 114/r put\rdup 115/s put\rdup 116/t put\rdup 117/u put\rdup 118/v put\rdup 119/w put\rdup 120/x put\rdup 121/y put\rdup 122/z put\rdup 123/braceleft put\rdup 124/bar put\rdup 125/braceright put\rdup 126/asciitilde put\rdup 127/.notdef put\rdup 128/Euro put\rdup 129/.notdef put\rdup 130/quotesinglbase put\rdup 131/florin put\rdup 132/quotedblbase put\rdup 133/ellipsis put\rdup 134/.notdef put\rdup 135/daggerdbl put\rdup 136/circumflex put\rdup 137/perthousand put\rdup 138/Scaron put\rdup 139/guilsinglleft put\rdup 140/OE put\rdup 141/.notdef put\rdup 142/.notdef put\rdup 143/.notdef put\rdup 144/.notdef put\rdup 145/quoteleft put\rdup 146/quoteright put\rdup 147/quotedblleft put\rdup 148/quotedblright put\rdup 149/bullet put\rdup 150/endash put\rdup 151/emdash put\rdup 152/.notdef put\rdup 153/trademark put\rdup 154/scaron put\rdup 155/guilsinglright put\rdup 156/oe put\rdup 157/.notdef put\rdup 158/.notdef put\rdup 159/.notdef put\rdup 160/.notdef put\rdup 161/exclamdown put\rdup 162/cent put\rdup 163/sterling put\rdup 164/currency put\rdup 165/yen put\rdup 166/brokenbar put\rdup 167/section put\rdup 168/dieresis put\rdup 169/copyright put\rdup 170/ordfeminine put\rdup 171/guillemotleft put\rdup 172/Tom put\rdup 173/Pete put\rdup 174/registered put\rdup 175/macron put\rdup 176/degree put\rdup 177/plusminus put\rdup 178/twosuperior put\rdup 179/threesuperior put\rdup 180/acute put\rdup 181/mu1 put\rdup 182/paragraph put\rdup 183/middot put\rdup 184/cedilla put\rdup 185/onesuperior put\rdup 186/ordmasculine put\rdup 187/guillemotright put\rdup 188/onequarter put\rdup 189/onehalf put\rdup 190/threequarters put\rdup 191/questiondown put\rdup 192/Agrave put\rdup 193/Aacute put\rdup 194/Acircumflex put\rdup 195/Atilde put\rdup 196/Adieresis put\rdup 197/Aring put\rdup 198/AE put\rdup 199/Ccedilla put\rdup 200/STARling put\rdup 201/Idee put\rdup 202/nbspace put\rdup 203/Edieresis put\rdup 204/Igrave put\rdup 205/Iacute put\rdup 206/Icircumflex put\rdup 207/Idieresis put\rdup 208/Eth put\rdup 209/Ntilde put\rdup 210/Ograve put\rdup 211/Oacute put\rdup 212/Ocircumflex put\rdup 213/Otilde put\rdup 214/Odieresis put\rdup 215/multiply put\rdup 216/Oslash put\rdup 217/Ugrave put\rdup 218/Uacute put\rdup 219/Ucircumflex put\rdup 220/Udieresis put\rdup 221/Yacute put\rdup 222/Thorn put\rdup 223/germandbls put\rdup 224/agrave put\rdup 225/aacute put\rdup 226/acircumflex put\rdup 227/atilde put\rdup 228/adieresis put\rdup 229/aring put\rdup 230/ae put\rdup 231/ccedilla put\rdup 232/egrave put\rdup 233/eacute put\rdup 234/ecircumflex put\rdup 235/edieresis put\rdup 236/igrave put\rdup 237/iacute put\rdup 238/icircumflex put\rdup 239/idieresis put\rdup 240/eth put\rdup 241/ntilde put\rdup 242/ograve put\rdup 243/oacute put\rdup 244/ocircumflex put\rdup 245/otilde put\rdup 246/odieresis put\rdup 247/divide put\rdup 248/oslash put\rdup 249/ugrave put\rdup 250/uacute put\rdup 251/ucircumflex put\rdup 252/udieresis put\rdup 253/yacute put\rdup 254/thorn put\rdup 255/uni20AC put\r readonly def\r/PaintType 0 def\r/FontType 1 def\r/StrokeWidth 0 def\r/FontMatrix[0.001 0 0 0.001 0 0]readonly def\r/UniqueID 4092170 def\r/FontBBox{-12 -210 1083 917}readonly def\rcurrentdict end\rcurrentfile eexec\r
+d8061d93a824650eefe2785f13cd28a8a226cfb0a1a9915b91e00d2c2cb80ac548a1ab21bed4518a56748942842eff6121b01bc269e7837046266cb27dafd3a4fd0344e68245aa98a5f1b5bc9db554ebffb879f1c082989cf6c044b76f4814df51dcd03f9e3397f3c73d94f85771983bd52fbe6ecbcd9a2cbb7b3636cfb819daa5469925fc89a188732d68c6d06c906d183cb4bd495aed0c41fe6b7333ad90a1674478062c8996476573a0cdad62593c86e4741ecab7b8c75a6bf02971dfdc2c5a2e1c8f74ab1e91315c54e72426da3a62dede611d5967201fe8bfaa5a21c612c0b245fa35c6706b7b9aa3f73ce16604e3109770d367fb30fa663aa8d2b246de733d27174a0b818d54c58c3676435d43949eb9e5e335396296bc3f096fc154616c0b723b0b4a100ed45072f371f77f26e02f1dcc41376638097d79af0a4ddbfc37dd6cb60d0d34ea5a7536c655d95549b8a5a269e7e927c3d89f74b88e17973c2e8d64688089d329abe6b1009c0334d57a6dc34f22efdd933023231fa03fc81093ef255a199448f17d8f67dbc57c38b2fa163b8cef97a6f42e74af55319eb81a6fb9de18810ba9e3659a7144b80aa066a9f386de3030fc4985efffd13c0cab7049a09a71dc1dfa21a1540f4289b13dde08c0d3b4a01fd2bcb4e256b398c94036935bc270713a24c51042bac575ed4827e17e5dc2997753fcee0ecaaca582c85518edc0c3dee2851fa4d2581f7b399f07013ca3d1d4702cc27be134cfa8aa1cbfecac76f1b406b5b3126c3b7b60ec34340aac6433997656b3dcc1af6c8036f051edfc109a493243546721683fe5c0e48790848079c74ea0640c3f9c92cdd22fab8af9b5575a5d1d2cea0f1f715505cb02a1e200cbe4ea5563d0475cb13bda929286f9c11eab10ddd676314996954ae3c94bd14f364d5202e6ddd20b1b4c7abec1c061b2d8a1776577387a2f2dc424f56d44e58b96f91f7b871627089498d76bbc6664e1ebc9b26486cb727d4a5d62fe405324ceb0a5dbf51c9619f2913e4dcea44c5bac49d74bd049f28b83955e13f0fc77d998a307b0bb560757b21e4a982b59cd5723d66952b8a7ad0311ee6874842f454046538c475b86983b4b8d9c00e814009235a058f6d5fca9e8339555518ba2b64ee925cf0944deff5c14069a1ee1de2cadafaa6421f495c21c042690b3a7c9e6a5a137ee005240308e63e0b1d4bead90ec607d19c57ecc24c2ea9b8ed4af8e5ec19575ba230c19156ff9b23915a7b50666ec4b655a2946f97c5013cdfc31825f2c1040fb28bb8876b1accb1fc005010e5e5d061651dc9df17b7bb37c495a37df9659962680951290f3f4168dffb294f83b2a3c423526a97451e2504fc0c819f4d263834ef7c8588ea4d68c98eb5e3ee3c2de20a6da219b3256400a7c745059581d33158a505d5bb07c75bda324c2d8fe34eadb98520c7b82838835e92ddd1d89516478cb1ca795324f802e1f7a5547f671588fc3e5b909f5ab9d573bb0766569a36e89586b7410b76867cad6577022e9be567d1a5578361d83b817fb994758c679fcfd6b22c9fa7c6c76f2a72be566e42167247c831f826d9a10e03874b9747783adece88750be1206a07923cd9fe06b677b61c69a7dd9e0f9dc60771ac529f6adaeee9ee6652cdeca5789c7f242266d86f0154a1984402c720adbc3dc79b6eece6d378555d78873844ba1cf057f385e70474132e0bdfabe169a631e07d12fd21f18736013499081e58d72e9cd451df304a5bf52c1f1723a5ec8b7992d8fa3f33d5be97d4c114fd435a94607f8be09812bc1fa4db028644e2fcef5d86ffb947a14993a93185b054a7cd9ad734c62f2d9ce3c0f9e2e8678bae5b92315f60169aa85d4ae22488cfab72b841374ac3f39966b9e126ad64c0307b54085b6e25d51caef51fecae4c5ddbfb5c29b15cc90ec0795123a84d3c31173b49096d617707d9e192da82493ac9884759115c02ba4686ed464d523aad69167e24e5303ac3eb3da0eebcc420fdc256cc26d466f979c8e637344958f02ba9d3a481693fbf13283d7d276af546abf2f2bb4e6c6f835c97e532bd5b40e8b08eea4441e8a9e03021add36c4fe28180ea466082e4fd7facb03f7abd47c929c4e0d84132835e59f8276ac7fddec7755cba924dd1c97e02691f13f2e159b1e358ef2ba347e2298b0b39f5ffdab57daae22d94ba5064abf716c866b64add8e3981b76a77a3a8be0a462594b9e1257e7940b237875e000c0e23a0841a85da6eb5af931dc0ddfe912285d160f12a66ebc8717fd37c13d20cc132218d31680d596ffbbb2f2805fd931c61693bcbe365f0d19c8fea4ff3eceefe09c5e29b7fde3782b8adf4bb1aa7f89ce01fa59d1322a1ccc4d92705e274bdc287312b23ab830968143efe12c8d4ac45e0c72c11f630eb5ae0c835b7f7d32cf261c20f04b7df8e362cb15cf38c531a3988afc8eb957fcee0364049ccc8d8a6935200970293486bb69db1969a2aeb39829cc4bed803e0c266c77b0dffd349ff9ae8f95558a3977775b1bc2dba5be54800a9e9645155315b062d0b5a0491cf90a66e84b581070f30d5796f71e88db0352432e8df588d25c9c9b2dd12b976618551d5625e357737966d9a15fe3cd9d54bc275b6f5993ecfcfbb373c419e2f8ed32fcd56d30db1345987a445ad259e03053244a1ff80c9343538c74845a907b0480f013289cf475df6c989a81aa5ba904a63db328292553fd4fc3a783fb76ee6ae50be4809ea0aaac9a9ba429c9990eb45affca8587972c54fdd677cd14f81404c77e4358212f44826316a927983c968767e7be1c7a36f308b6cab1648780b4f1a568cbb0ea49f6a6352d6ab18d54d442c176037ad16e18a17d88cd8fda7e86895c89368239f0f75f8c26f850316a328c40efcf316d8829ddb0fb69b250e41b94144e0475acadf63e51f27f6ecb6af4ed78ddce68c055b7a1f78ec1174bf9d67f54838da11655980a909ae1b80a2e6282137c75e49d703e6d5b4be616e62b020a8d08efd14912337a75857920f1d3515ab2771d38d8d8f610c9801d0b0c8d3388c75d211ac4e4c0c491d3b70e1bf1b926a6fabf60487613e76e6f779c4aed60929561ed06c676de7d5052f60db62e446ca4e2775b966f74a2ab55466ecac93c65e48d5e6b88080f24534ca63dd1e6781920be3010f3e9ceb771c5509754ebf963de75b4b9c9116ba7f4e21d9d89d2df167d8c5674b2fa61f49f016b4269e602c6e144de4a382fb7f185dcd82942081d6362f335695587d2ed1071a70bb27d51200a1de03763bec6b2c7a86d8f200505c07f25fc6be9c044110607154cb69efcbfce495dc86dc634e20349712d3754ce99a8b33cc59ce272e39f481b729c878399e51976652b4a525d107ebbd809909ec95f07f2012672601eb9ada5e0b3292d68b6ff8d529a2dcd23f7150d77ba5b1a36701d5954d37ee96501f9efa8e037290f6dca8c024ec0a2ced95b8dcbfea0ddc55dac8ffa55e224d33fdae74502f8f0085fdb5d6d031d34a609db4ed63ceeb285f3697049800bd560e31bfdc6862a49da0ff4b4e84bac9f184e08181c7870058559f826977e851f7dde09163b8b3cc82be8103f7baea3072202ffce888f1bbe37cadb748e2a3b3b53cf38b4336a4eadd0afffd76389b1dd9d067888c4e647b07a7643b81fc08a15872f08f6295eb45e7838021253432f2bdfca6c2a85aa70efea06863d3ebfdc555f41abceb6fc1a5f92448e917ae97706dc04adf0b7bc817c1b93d2f924b118fac5fe6053093401a4676c6d7ce7b4ceae1f5c149b1d8d712d32d56bc8430c210a7124e192e387ed9696df38ac2763e3a065c3ae4726afe9c16b07891bf5243c16add2bf494f9ae8b7566d4ee600a7fcc945d4bdd305daf4df51b1c0222e5594c65af003b51549e0e790ef194943d4accef39419ba173d05788ff822d4e3d4fb5a612fb13292aa377e50a44a6953bb793d0c521c2179012a882b74ece2f79723fb75624ae9c446ba358a3effd738ccb59a856f1bb5afe8635e1033936d58da18ea1f7464758e4647ac03552bcd1be22ef9d4c0f4aea0d7d1c91234ac50d5192bda73b0e63a8303ee284009e6f42c0a8671cbac1c02ac67f096cdb67e83a8d3a8b0e2915fe4e498d50a80892a374cf637cbdc145c2a4a16e0449fd300f7f03b9c80b320addb404d3b7388e5473a6502c74a9d614b21f2526b2e4f9fd9c5adca0f01677b57de5a55d60d9c428c6833d7abb14514926e09bba6b07763aad75d0a934b7c44976be43c289fb238aeff7556183515a5c4b085447922adff5498d29e101a60ff02e893ce8fb8d446874914eb3d3009db46a579d14dfe884d22d9ca5bfde436f4bf334c8c8e73cad66d26b9b711b3a2a3ea84d6864945e529bf59d397ed0acca03a3bb32e470c46cd6639cdae83b4e8e6decd2e8574e1b9361e2600bdccd6c9231ddb2b5981f4148984e0d21d2bc7c54fa7b32144192d32a60bb17520e855b14ea6ba31068d4e209a5add8dd6cec44932063adac2280f985cc70099a1fffb3cdc3134604bb8e50ede70ce9db412a309a21a0541662050f545cf6f2fbb39e9106e83d34dd1a7f9f08b66e68052482a68778687aac8b793ca24cf3d258d7991c4d2c0eb760d1b83dec08277bce87bef9883ff7af63a927a509eb44ffdf2f8f2a529baee6c68478a1f8a10c81fc3fe0a88004843f05d15b34d04149508d7b29ff2b11ad5e150269dd78545f0f57ca1752f6197a8539ab3aef587645b5dda3dbf18060d30c3426f2fff04d9bf22f1591762597d72cd6225f01377293696235f084801440fb9590bf6468e73c11d7de5c7c9899d6a84a9bbe18c8238e117ae4e74ce9c087957935630399f186f4712caa2775ee026f1c9f334bfa2ea897f2cef8f6d2f200bb2fd7d9292c056149cb3091d54be657c5efb690dd7290b7f866330d8b64cdb134019ba3c608bebca348fac2ee3891d54ce18d427de0e8270ca0b19b5cb9ab69ff7bfce6b5c6431fc794f1a2ae04975dfca6d865e38a85d0092b339119f43ee8f11f999ff0132145ef65f2786d9dae9c45dff0ff2195bfc604db64e4da4b681dcb6a3e2be4f691bad02abb6347e7ffb00172df452182679d10029a878d14569825c6df61c229e158f92a6a0e0590722313729ecc3c93a9de9f044e62d3abdf500ea46557e90649aeb8cc582bfb6fa71042b330800d50aebe27e1b7605c3aca1f67c4116d93a1d59d7f9a9d7dacb2c949193b0e901291474ed0f6b746c680b337ccc6adcccddfee2ba9e31f588940931c6d697222b14220ece34f97d640f78eafe33d689d8c5e94ba3eaccb197728d58924f1325c5951246898b2477057915ce4caea524151e7f3cb049441ae88014b89fe7730eed66c4161b2e01d608d977d674edd37527433214b40081ec8a262da3f69f07dd54acc3a8dc5058a927bf7ac5d3ff18e0e526cda9eeacc331cfecac11d2bec5872fdd5cff5f7459a42f263304294b139fd7106149b962873b757a2db3ee8e030a8ea3af3366fa5f3226d9f9de3c48dcc0f701ac74385d2b753e655804a834456e17ee576872bb5e9815bd6ab6a4555ce5fdcfd0b1637357424813dfa6443a46200dbcd46f7a15d342c14e5b99c1e53953283d83e81311eb2537162005d2bc0f18b336e33f7190d4cc4ab8a86f596ac2522b6fe3aec0befaf024e35f811a309c8a03734e432ac4695d977d6fc14c93773edfe0eab4b5a0a6d55b4ccd205086b92107a434b119d15f145d0f3511f823e69a4b3777b659555f06116cd99075982c200e36eff85d7931c7b918af5504bb4129cf65c8a33964b3b6fd3b2340fd3737c73f7667632cbf81535b88096e99a5e98ffee00409948eb2b46010a275ffdf345bc0e359ae4c2b6b804a36ec5018db1ddfd43ed28e0982be3dd61a41fc78221bfaf4eea3c94e8819e2d296a355bf61cc29ad69e2baa9caa77f4587be6bccfb178d553bb99bdf52716e6a8e2626505b819cc595f5173d13340fde8dbb4db3313a66348c8cf5fddfe7d7fd04becc8fec0ee1385ce5329088e772f1939fd59e2dce71c2946044fdcd131e06695ebfe5ae6e512640d0ea79492c20880391bffb1b3c9851cfba1b5b16d5860baa2a2b1f4e0a571aa3551cd73256e171c2590687e3596108defc56ca6cefb27095380b0bfff828d897c5f4a1f7710cc1fbe37ce9254c27edb772093e789a7e2a941d676fa8f14edf641dcb06fbd638e74a3764be77ccb7f93b5f961be59a6df0c5305b6ab3a20ead2d3eadd749fff40762a25833c9efbe377d2aae40b18e7785a77f9eb4f05f987ac7572854859f5fc5f56240e94305543baf5df3fb905a1122d20d09d7133923783f4d1e30ce9bc990e1d4989280cdcae75b5a78ff48ec68254373f9a57663255c0d5a18bc78b3cf2002befdf0cbb3cb5e76243b963e16ef7a34a06016dbd728117ed141ce213dae5acc96930ef9320938084dec3f77ee4e595b496648896de03deef6fcf49f6477a04a0b190fa668ecb8dec555db55d7ba7d0151042dd4f205e50f53ca706d93c9ae1b67b51989ad1b3ebb27f2416588397429d2129bfe0d5fbc7888fe0ca49754024224ba6fbd089214122d5c5dfacf7fe314c34581b80fe2f0786f7a70788a1dc27bce9f69daf04f197e9fe3f735a339f6f88067636e23559d1a02cd1d8b70fb07146532a5b404a4491d8650a22ed0f49088e86054e76656f079074ae121f5039c5a128109551c3ad7bfb874de16f639a82f0cae1ba1e26cb21bb8ab0ffd0fdda61da950d00e9a9d319c32757cceb80c07716cecf71f96dc167d760bcb54c8c41387d7fb8b5f884a0f7f53acced99690e1316a8f2005edcce538b3b511a637736a08c932fe9f54e281535c9ebe5716228cef9648813df7f0ce70b5107833eb4025e11f93aa574ca8215ce3dc6a5069f03f22a2224d9d2f8c819714b3b02f32066785f9aaf616afa69a3c031f1d1ece51d541f60d6b8e739b63b0f6472b93e5e34cbca3474b47deec1d72ddf91baaafa42078c177469e8099ef4a80758225c7839a0ba643dc3c88fb01ca0f278f077675f0f3bf3319931f129dbd9ef04dd0daa8cf8bc6573b6b2091b64326a366df67a739f27f8c20f47ea3bea9a9880b0aa3b558c56f6596b0f51b124b78b717336142cc03823f2d75c0ad84c09868cbd0dcfae4ccf37b345a26d5e08b20c36505447042ee2ce81f450a835d7e0b679c0c9eae37ef6982001a8c52708c5db0ec2294a90b9876eb789ab09af859a0a879cc27d2f52dde9e9a6960fca2530244cc26d3a21cb294458d707dbe2441460d79d1783fb334a3d144339bdd635b676a1b260f5969bf089d59a526f56bdcf92bbb2d52cb268ccca6c66e4ceefa57c72cbdf8a4e1a2b57ff356f8fa49db680fdbaa3d4df9f1d6201307a44a9ebef9ab8c893518d71beceba645d6df155f6aa68163f8d66b40c1084b673ac16b287f763d40db303c4c9f9e76a3e8fff77d595e97f7e59e56b02aa8f005d0c6830931892207e25a11520efbce320b99362de47e093fdd48318cef9458ab6b4093d1480ab1424e82695527412d0c5e3c299eac02b67ee503a9d04d31431d172f50666fa59e778dc43ffb7eb3f78324a5cd88601f7109bf3bc03f0256ec90473715c9a626a8488a4ac0403438c7fb97438334506f3718c262c6fb671cc1501e1616281c50c1f1abb0e796b5a989d9419e9146784619689562ee006255b58c5030d4deb7bd4e723d5dddced22c58905adb6a1b319ff10a8610912023c965c87e8b9f50babf746950ca2b356c1a9cc1cb8180a3536b2a639a147f65a8178fbe711c5fffb8fba62069c74e02ee7bb219bde7f581ed080e33ada55e37013823fbe5eaf8f7b774209a75b047e7626b8b82733f525e57792ca6c79bd882c5bfa323fc5ed98227c892ff958a359fcf654cb8facb6827d717a899ab9b4d2093e7a3762ba0c9f7ad55124173a5bb29f9f8769484f698dc8f8b394816dd74eff3b1a7dbdf16096bd0ad1b5bd409d56783b6d418631be43d241d6b834e1e8107bd9e296f9aa43e90ef753d6ad527875f230f6b1d3914692840fd51e8048ef5ecc8e7d2da90645c8e0acbdb3803d677cb07714a5fbaf0caa48234e6abfd0cc1be8a80ea7e956ec40a54ce712c979d9d108c28566d3c71c93c25fd7c202c637aa06f1baa00ed6262f87062cbc03e7722983a7c87645ad8d6e0df84112139cd220b03e3b874dea9b9705efa254db06927ab7951eb72ea84b253e0bb877b77fb1810b078ba9f20280d7e85fd9d134ee7166cb1cd51525a5bde7cf96b26569af11b40dbf5b4b25a662c9e14dc084cc349bf451cc976d1de3ef735d001c18d7e6027fdba88d29016ba395ab7f6b1d232151acca1ee234a287c2d7843223db3df6e3e5325a9fc82d92b0baa4a28fc927a3c3d307f7a7ca1ec7a54e8b4a56c177aedb633425bc7676a10c0c2d51b5555f4757c2c9908cf39eee8f85913216c5df40fc6a04dc460e99f55844700b4e02ef7a81ddf4bfa798e5ea327d2c66db67c608afb6ea5753ade25c620d52a5ff2c1d43385737d41e7e6cc645b1f9dffacdc0e8cf72a9128abd66cfe77f2c273e7efb2c6d3ddf4848a023911b7287797cb7a3baff8df5f4d8baf2d30d8ef3daa330fe4728f2fc405bf82b6360d1c9f78d17fe13bad721756ec2bba578702ab8a41c094b22a2ea393e9d4d597e5d0c2f12ab5f21d4546ac61e0b96ad5bc47586bd42edd8caf964cd2b997e0bd816ffd593d5481a8ab543384f8090d7cc0d9d4dba9001992366bbd61949f2b33bb6633f45554e879ec6399f11a13be5d195c927f9e4fb503c2f7f1af69725add00166a3c6f0b72230416d09687ac6109eb06d16b8321ab293cc112cccae7bd8233a6206b814694eb0057b708a76f7c793115dbd09b6b6808cddd0dccbc2a20c5abd02a91f0846ac0856a5cf7be1319057e48631937a3bfff2d24f0fecb55e929c1c7d8dfddf2fb892926e20c9fe4a84bc1d9dfd203d438a7f989ba23836bd55b1089bcaadbbbf19e8cf001f75059a1dc3daace5ef08b0b55231f3b63ccbcb50805601c86e10e48f90dbae123b55d421df8301a9c67f4cdead045d1ace302b93f9337ada9ed3ea36369cf35577e868383d69cd425ece04e0cdc1940b296c35e1314d837d6fa900d661eed125ada136ae005179a03494e23a245d96e60cbd7a04f9503c227e835e58935e28bdba5446128f0db08dcd9b85049c5c67e357a3a511f37a71df23c25f971df40b9982b1b5ab845bd4870fbcdf4ea319afa2e225dcbe3b4b06b73429467ab402aeb48e3b661a0355cdeefdb754d43b66d1b576a1ec93994587b16fef1d493d53263ba10fae3dd01736b479e33dcf87dd9af58b353bc55b8a5382aff065773ca8e932d8e55a80537dc04193176a1c38082e3d4fbc38ffbac68bfcbd80ea1682b79961ca070d3f7938571303267b2be5afc70f196383a01fabd8952db19f7c5921fd66ef6f44523adb1bb09ed0cd03c14b8fa91b088ecc5152d6e288f2f388b5870733b489081581fcdc2e1483d3a2dd9b1bfabe1732b2ae37041d49727a2bde007820f328cc2118b610793e6a6996e1f336a061eef6b61120049fd0b9f0847409cb3a8ab404c563c1769de2660b073dcb30bb916f3679b5819958ce2f5330634e2361cff5c0915861ec791b0dedf34a845103f7e1041a366e6109b88bcdfea2e0d0d260f16717d67e20c9a0b624f15f1f05339a408dbc7fa3b8395895bf50691bbeaccbfe69bc22e136a37fb9d074d668eaaa2f98af8ee35119d46af0dd9939462cfd2ddeb85792ca7d38d61e2c5109d2c91fc8232503900396ae6a85b7a88c80136699e77c0d7408eb88538cc544a3db250e2bcccbfa8076d70b026d46cefa250c128f8ab95d1ed9f028d56b01489d81da013201747b80513f318b84fca9dd1c4d65f36a82d09d847d550e1854341338456714e0a93424e6146e34994f84cc6bee325ae41d716920dcc0bfec62368546c901a8d43bf94c9bd2cb56283888ca54b758135fbff776c9fa98d50271b172889414b7e948180c03700d2cf3ebf390f0f9c8985900a76be9171f7439c60e18a0db5a46983722ff1489f77d24f2112b9035e65cfd10fe4c560426e464b6759ae5f24116d16f9a3167eadd85389114535f44f8054d463c1b8bab08779d40b74ee854aa6d652aaf40c30d63622eda14aacdbc002c0891abcc764b676a3b049deaf49d6789c7f9cb12bb6f0d1619548bc12b6df69c98a4af5b085c76966b116d6a2cffe4a00733efe59a473985d5602319fab0f04dc3a55be53e9c87726d6ace09dd8343e3e111858a3ae45b35de08b1730fc628265f0afcd3924b9c143450128aaf68f41fd5bd4aedfaa9411bd33032a81405dc45005c62b682112ce0952e1926a47571a8790d639580797e33f991aa9c0b7178448591f044dc794e31acd413e6ec84b3ec0ac0df66e08e9a89727f91620f3f18f9238ada2abf4557d72553f01bebdf62bdf5742d25b47def93114918c643aa2bf8761441ba5e6699760f9370b5c29545606f6003e4c6e4725dbe4078b416022b20c1d2aa30d0dcbb724783777fcae6d2487bb793e9435218f93573064f47408d08a9c39bc44caa91c24177e8283e59cb9be2c46c5329b150478beed8c6e1e35bf56c3becbcadaef963bbc70128a1518c635420921fb37e2252910e270692e8bd641832740d67f2174ff3171ac73c23512bb0682a305899af28fce475f399ffcb310dd96cd469fbbb7629fbceccfc497fc2e469a14943fbd5c4d24c8c89b66f6638daa38cbf9dcb49dcf016d768acdf758356834503afa00b7f5c8116e147c5397c2aa8ec8a241bb2a5dcfd45627821a79dee1ad9b162796b53c59e3938c94a2a531b737b7d108b9f1f42a2164027e7d3922858aa7931dc0f7e0ec8e0fc30c27d4722a4d083115c916da5976680da42e3a7fdbcb8084abde4d1f95f62a2291847c4358cfe83b13b9ec2f1378f75f787b2b573a027b24e9eb8a47188be809666df8772e43672f910eeb1c23355987358a1bf34c3a88c2647a46eb85c1429e2e5123acfce3504e0ccf4b89e9b3de548e2bc16b8e765bb53568070a17b23aee93b0988b67e10dca6129f19083a22e950a6beaffbf958a232d2b40a7966f96d8d6c1d30d4e9d42ee28dbcf0bfde533a8b5c07c32c90c634bbb90471c53658d596fd066db06cf96e76f5563b2dbf17c284fb88a7e389b9340cb17c0707caee7791234d4b9cdc0406a59ad5aa3ebe06c7ac21851139171b188bbe7b43422e3847e30014dc2f4966126c2d23e1d54d0db34fb2f415347f14ccdb4f533d2f4ccfeae45f21b027cda966933daa5732464d7e125f32b05447fe1d15170654b53a5fc3ee1d2d8427096d1f71f2bfa3e240740c879ab752f0b14d1d17fd880f05d65ff64a05bc08f69d97fb63dd78346b9ca038d79764cabd013d57fb3506d4b0ccef1c92bbd704aaba9cb912e6034ec9ab77210531c9a1266c272ce3261dde19b9a574fe5a7a031416011100ef594396adaed9f884d18173f0fbf256e47d5c57a47864a3d592c2324c39bb6b9f8cd770e23e5884fbfc119eace855f4f21356a57f912c9e27fcd292534cf2ce0e0490aca08b4df6a3faa614239252279fd2c3df91e054129e1ba23fd9b7a90ed0cbc1f9f8790ebb11bec7b0b07a228054e1f8bb4241ab3a66bb6a224bafa455ebf835e5cc1b0f7701e2e64190091a577dd835afc77e72f3970721e1b6fd64ed65abe1b7376eb58e3273254b2da264df7a97286ac43f1c55f1b50710f54cf02da4023260084aa143dff539c5c7d5951767d0ca6b48d5ae8dcfd1727774ad1c5e7273c2aa5076c0a0fa3ff8f1bdd088fbfc17040808f3bbaa83a228b573694aa171d4fcdf13185e0a010788698eba537240a9ee729d7af975b4a8637901fa3aa401cee44a0940b4378ec67b101784d07fea844a50c542fe2a3e01bda791c2ba0ea9879bb298b7883e1b8ee13a88f9dd3b28813baed3f97c29bc8b9b2a0bdfd03df29f826498abe20f8bb7ef6be2930377c56430b7b0ffafa4193998c32fb12ab1ff63695a3201e227698fa8fcdb065c9c3a82d2f0b8a78ddc9afd5a1c5b135b019c22a46d8401559149293420d91aa98397741e9cf6bd30134bd8b5f3c5a1889e5cdb61aeb0f8a052417c5dcc3eda52fd90b2a8c2ade1a0cba31ccc88a78e1573f68ec6104fab6c417c631e90bb9ee10daba4cc047ce30b2eb735ec694521b7a87edf3e15fbacc941269090845894eacc56321d38ebd3bf3bdcffe80e3b21e4683736c81a61ced165e3a2fa10b969ddfa1f55d340612e7550144aa43868d2ce06491f2e5e089b1fb3880c17b6040343b795832e1638791ab2d12b1df0ae253aa1b3e9fe01bb06f7f306c7468bdb397cf4a9977caeb0a3c95adcceb5161f95c985b08d5d703bdd011d2d4a38f16795b54058fa2183ce076cff0762b3ebf56d8d8d0fafdd508449a2f5b0a8692eabfa509dcd0b38f09f4f99e56a0044c61c067a107857dac52e1a364ea053dcb290a7cc1c78420bf502fcd56c804c8729871aae4a4752eda8c1f78de3419afae90eccdc7572a00deb5e1a90d1b8676ac638f011b18cf42c99264d350b77a64a09c433a470f3a2ea988348f59abaa12a1384b0558890e955f1f385c05c740a0b44bb51e9cddd91bdc46c8804eca94cbf9e0fb0c18b770b70f81fe5c9c6554b3a781b22665de565d08fe0b3bf6a57943888d387c19c296827e60eb6b81685016bd1b1c8d95b29eb8c335fd76b208dbd5054b22e1fc0ab4743f7b95d623ca64c9f9afd5285978bc5635a54a70aa16e736372ed027e9518a4d0d0f9951996b210830e6d46ce43272dd0923483f986349321b2184555b6a6573bced5fc778d682085d1970f05cdbe85c936a4634c9821776b4ca2e8dbadf3715228a73c71aaa271ad02bdd76a00aca5bbd2036ef7bf949814e76561a22c2f2ebcc43c7f4af62f5a40e2df2ba612e77adaf6715e1c980aec44b1164ea20020dcb5d9fb7072052e733a0a5b69d175ba8cf48b780b371575e490571e05b3fbff92f1e0fb87abfb18f4f81c8838d5bb155942adcf8911fc3926a22d60bc9037d8eb026ea975c00937d79432be5e791ff1265b396443813020ad11f0e0ee66bcc4d68aca9ebc2b4b8aff28de824007d9d9d00a12ee894e55c565f957f5f0cff21e1219c0badbc99de37c17efaabbbdfa903ca892d5a99a7201813a2ca9cbf7b5d19d779c82af7a1be51cce30ff3820448d2e10b39154573358bb6376ce5413267f6de7d7cfcb8d4d9aeed7a0f6648834b1452c58f397ea28dba8cadd4ef29382d757b78649c6436aa3e38505e1543fad8d22a415f8c0b6afa7bf16cbe0aa85eb9042f0757c8f3ce4e0d432b2b0a328ab69529c5f8bf8da11b0b354858df07e4644aeda913eaec05fdc24b95f6f4307741897662f347ff5785bcb06c0aca0ea708cfee767f385962de34b05f897242256c1eaf5fd9382fa9f07c3b2acc2d0193cc7688fa71448b4374cc3805cec6e7b503a693be2438fb03037d7a70088dc9fe10ac37c84d29c8b5f04648bc23c998872af1df21a88cee43d52ab580248f6d11c0896d25c4ec8068afc138518f52a23c9c8ae8dfba103cc49368a2ba7a6111a8d0e154d007cecd32d9a71c3341ee238d7664d39a263ce2d5efefe4065c1654c4996e5eb10397d78ab6ad8155ab5c815707655d2a85a00187f8ed16ca19f0fbc8c116417420666e9edabb192cb81fc6e2a4fdf00bcbe0ab582a63de69af3d7e7c6ec7f23c09f02a81a221ca2d2edaa751bfd3949ecc3e81d6f518453b47911b0aa13ff53dd8a4af4b6d8f40cf4ed2f5c3e700749aa3211aab791b9e9e899b4e53f3cf1d1c62bbdc06ae2ac394be1a9694858919da321123184a8a07d01e084655b974e8ae6919709ffcc4826f62b6a5dd420b784eb881ae6e682b292d2e575a28eec33e21afe2fe17e024829ed46bb4babce2e65d97a656feae5f5bcd3f10312a5a102bac3e502a468c382349d47b6e7fc4435a8c56d61ca2c33d93ded9f2165c1f640cd23b0f36e64adfd4c5afcba0fe8cab87ba2040efc0c2f00d3fbab933303b1c34f15a60158e5ebf5c82ed18c84c54babe8e1e4910921d3cf829cad909acef813f174ea65802614fb567944b14630d1e4b063c49637e7110a2ca6de4f34935866b3ff0c3643014aba7f8ce5b2701abc1e0f9caa048e7d8fb937bff1c0319a1de8f126a16740d7f0a8833b60b56864f98ea428e2f105ceff6dd30a16bd24da9f75dea0f4ce864bd44bc52b73057527b73f35a7f9e7bfdde6435e68fdd781e82b69b22c09b139b35b5a47a385ecf05cbf2152cb5c686616f81585bafa01d067a5a086cee61113870dfa9bda1b2eb1975403b994e4669b30bd5354784b1c5126ea7313e3230fbab806e8cc7411149ac52029430ce0be92453dd7cb39026ef26451d2f230392670bdc181a0d0b24267d08861c5e5e0d00d85b84a0873c02f678f2522eb8bdb04c2624256e79396404f475be988e4ccdca00ff9c4aa86cc48ac5f05d2ff1ae536c5f576d719862d44049edeb7d25c2e78e328bff60bc1f09db639c10486d65a8da9638080ab92b3c9af7799a8149cc771857f3d36a495fd7e58236beccd8ecb68aa4fdd1f8b3fc21796e7327e0eb730e0cf78567e40a8c0842dc3a9f7451f347af2375ef47b560bf6f9cdc8e682ae9574b9d7c9cb4c764ee84a22303a35b49568d8dc89f74c0447b0f263ec71e4acc6de6e6116085b7edbb61ca4b198e2af4dba714c3fe6b9c821ca1880eb1b896b01d086e80a43ddc9619789c75ca44f8dc9d4013ed4d10c50976201e6f020d6993d42fc902b299000581b04d1db1a4c548a774fff638bccb298f45bd0a30ac11a107e6b9042c41634732855c7431610456d2d163129166cf90feb8df5a72ad9ca31a8613ca3df539f599996904716878028bd884b1a8d75fd0d3fcc6dd8e007f6f9761ba55a00fa6799b6a3ea67a6a55ff8843cfda811582ef1b553b27c05331aae09b5a46aab96566568153afaebb7b4ae5e71f7cfa6fe08aaa52aea18d1551068e25942f623c4b8e8a56f46e352cafe4885dcb1eb19c458580d2049ffd77af8380ff452acf5ab88fd52d7ef112c29ff6464e62465398fafd06ef81bd3fc2b4feecc6f45f0146c96d4a7c0f90e861a1d433c5deac14a019f50511d6ae9f363952c0ba815bbb3774c97c16038e82e39b76bd15f58f6c693a973d1cfcfdfd65ff61efd3d6ded93c3aef8a715097e97d24ddc94ba972fdd68c732e1a9001f3fcc1a71f1f9fcc1b98637899fdb949c281d858130712d5d5408f0208d62f5cd7f81dda2649edca15790c87cd4e24ba48a7ae328822f5a21e57f6fc5a6fcc71d532ca6817f6eea89f76b60e4fc7bd243c2d2163b46ec46ae4be40764f95d1a51efe6f6d8274b668c50cf1de75ca2b4791dbca7c9232d147d568cfeba0b44caf8154bd09fe8a55a8bf1bb1afa95226a827167b13f33b924ca637182b0bac8b56e03327986568016841bd25cfc769000a7c746b2d930d291ea94f371563b92535003c4bec0bea1b134915286a1665b643bd011015ef04ac9d5abd487c0c4d3c6b20a00646b476e518fc0b008960148a123365cb40be362b3b1694a8d5c05d23b018370f616496a52c2cd25021c3795baf897f812f62a5a5721ac8170e79b49cdf906bf71c83af3c445a82a9b0979506e7df0fff03405f717f51c69c995d11456b03cd8bf9395d33fbb127e4cf9d8fc8411a26d42617ff2d64e886ba9fe5c7d5b85b43fc4faf88e7b4eba7145234769d58d53a5c07d1468693b0f93bac6e2cf5a931b11506f556484824d227e448c0a3805f2217f136c1a7d56f3421588e286adec32d32422b95ce8fd81eda1c3e9beed20f03cbe487fdf2d65f59add2bce47cb5f225b2c6c09100225b4276d3cb5b6792be4b8f0489bb750f1188f371880930d79cca6b09b2e3f303f766081097bfbc5e538d3cd4ebf27befc9132225dd7428d444c764860a262e95221f0f1fe57f5ef3e4432d2be9b3c9954a88e58cb329ce9cd37f4fc8494ad1cef800a7bba8d2ce486f7ebd7a5bc9dc73458bda9e4c46c6297469cb8d4e3877ea8db014c04ebd313c6b1ab74abb69b03334d562422a6529b8e68f4262dd3ff05acf1c6d0074d35e4e977c665a26f86d6bae2c4d64114ecfb334c4d575adab7905729ecc6345e3726d7f2c361ab9d75de26315cfeeafcba9bff88c0ce812554b1c6ab0c5765c5618f1bd8dcde547b86af905406ea216e4eb454e59a835fd9648dc5c8c9da88d7a753a2516b50d93e7226868bd0c4c6c2eafa7a0696a8ac2f0f3e6958efc1e6504032b42962ba6eb3c5bf856cbc6bb090d481489c42a8e6d5721b6cc02b34d6650157752126de0cac4c31b7b073e2d6d546476682be55d764f5bb3154d70dfa9244a6fe5580db958e4a766f95a61987102d67707838b177d10d116ad56368c48e815b30fef5fd6554acfc0d9e64d3c4f6b8e9b8ef6af2e09c6126a92f0865045cf97c94070d2fa013be48df5e50bbadd9062fb6183b147f7dede8b571826f81d546abddf5de4f95a97bb75200ef5dec4abef4950b587763db4fcd61017a457c00230cb8aec3bd775980ba70362b6e8d064f81062eabc6149c115feca46efab3b703e76a9241c72f6b6810adda98e1baf07d6a7d8189f6ec869b54941c40080a91980fb827c61c1f7399539387fbec2d1d46a54b1f518859b3a385ca098b86039bba25d2e49b7968281e3e1c3e5c48f2012680d81ccedf131a8c8891b4134bdcfc70854fc7787d03671c9e55185793ff6926ae12f1dfe8cf246fcd33d88d159842e8dfc7c257836c98752b7152039eecefadd80ff76e816146635ed2d36fbcce101eee7daf1515676b9a2b203e1cfc8859d128852e25f9cf924c16d4a47272e495645a6dfde91cfeb39f4e6a1613a901e2bab7c975c885f6424b617475aceb396d0d3da14c102a69987f66f38599c60210dcebeddd8bbc80aefadb225df56b7f48d1ab0a8c92584a41b9fa726a7de8620cd32472c1b89ee1cd0e3da8b595f98672343417f766bd8d9c52f3cc1a9bd6e1c8c1e588c023ac6e5355e68aec6bcc303577faa7bff293265f9506c6107432145deedef7b254d5890c755a39f5b3aee4364373a931e98d5ec011d247fa9ef17a68b2df72810929a628f6ae634f4427c1538dd02e1c9962f33273cb6add06c81d6258de794f09700a9c8b2b6c3a30eeb00ece206d70dca75beff10e9619d80bf0a7d93f24cc82b33640aa992945eac34fff30584801e2ca0fde10854ec1c60cc5c4bf08753009063e7efe7e07a94cce2de1d2add68f2abf5e6fedeb161beb5cbac9ad02c043d3d157acf018751e1140776a7f32d71f34c05cbcdc9c08a7c7a03f596dd7164540566fc54fc1fdc2b23b14f002eff9066b55e30040ff5ac54b8fb6d9d643f939aca40e5005f1d5972feafcaa34f2a72d6ee03ed74fa5e70faa11ad4e8ad2d0f788900aba49c29090a73b3432d9ab5d933c115abe4718cc9e2a2d770e9cdc735ad5991455ee0496b0ef2465e39267af0e36c30da7f3ace53cf3f6010679001e39f6e2a55da65870e9793b447b418ea1e519dca3c2bf0e1d0b0b07ad96a0708f428173694f70a113c0a0f79b3251914d7f8af58d59d6e198bdd6155cc3a4468be06e0af9a1c94c488c9fc6b44e759e43695c0873c1415fbf56c065a3ed585a790bf38784ff3cd7baf3f4b22533d735684bbde582438d213bae7dffaf897289cd0052d6788718be4e3b7c071d3c6c7b75f6e0ff3437e48217e179e35db0f088e80c8aea5749c71fec4985d00647877c9db4a55b51f07198c232adae969c821be6ee6c2b1ebdadb00a8916b1f93b1724775ba9efb421df723d54cf22caeeaa1b6cc7567a4279647a6e099cfe285cb30cea5a1019f43cca22765a15759f20dd681057a0832833c15c54cb1e3f0196aff51abc2b0ccdf37edab8b536c2a4bb072293224e9d4e83ed427b8ab2b92f52a3fa6bc28269618922a022f67f778779bbd3d164aed6747c9639f1628a6643f47dee03112facf7431bfa1954ab2d58c7b02ee380b86bec76fb52093fa5419c17f20b123ef0b0b5c0efded93f18e2c0aef25c1665c3f91a3f7faf4dae9cbd84efd9ec0a5ac4521051118c1e28dc3282be83918c9b23e06363782ad6d6e99f69a016153f70845309cb9d8e85d0ef65aabb02b0648665ae39d5ca7ae9c4de2cb940ad8e9b5e0e59ebf2298c6e16fe35886fbbeecc719f000d9c9764f3f90f66c8f9a243bb25bf84ff7cafb76be8418da346319798866bda42213d5acf00d836b2a0487b7fef2fed4cddf10633bc7f2fc2c0e7e7c8785b9bc1eee0d2d5ba42fafd5360f9c84c1a9fcf8a76ad2916c31d66257c39a760621cd0ae7b4189e051036acd5aaded0acf934fef24fe71a14cadf03afd4b7c1752e0c2890930d3f74b2674bd6135555911face869062ba346fb8bfc45d09f224e69273d4d00d5451ba213c798811eac1b8fdbe4631313aa8e35ab728a1bb9db3c806c46db222980828ecc596b8a081368d73f184401ade2b7f6debae497ef70b13d2aba139f22f233b4299ebec79ec32f868786c60171f0633ba142938699a702eb57a26d9d6b2e955a90f1020e798b3903e9d9dd8f8c98888081174469697170c38d5737a58c8258c8a9361d270357e51b67011ebd39578f6963f18bd050d014b592dc375e006cd02405623bb724b1dade6b3cc632db58ea103ca4a3d939dee5df3307dcbbb3e3d0079fe70c6acfa53430f31075b1ce444454ab8208bc4dd2b71d3d8dec8bc4d49797d2bb3f6b35338e9f1100b6c079f327a639e33cc262fad9b18fb3746829af4c08ad4a84baf08f6cd31070997c6d4b78fce290807a05914db726d20735e0e7058f73856aba4dc8642c0fd52314e856f32e5d0dc7edb7fcf7c5d04e2fea3af94ebff28fa8e886d756049f0e8a4c2d22c94866366ab8b0350e1bab7094ed1337ce3002463e49fc894ccbfd05f133ab0500da55ee616f23b36a748c528ee8e2b792eaf869e606de86d3eb0a7822b7bcef21c010695c05adf371a88b0b36981910ce1317560bf020004077dba0bb55f26249beaa36e7da60d783cf89345b38e3c1b5928b9dcb5a677ec98cd4acdcf960d3ffd40e86c6fa43ffc198c2bb1ba99fc5fed92714591730fbc7a64ab5ef06e18b5f18bd37fa9c3d954239d6dcbba27c3081eb7944d53428bdfa189a83db26d864dfb4bd729a2ea41ec866b8814d8a0664f0dbfaad60dd54ec7c61358ebc416a6bf798fc65c408e48c785e9a0746548fa593858cdd067ae1e0b5a35e49a338dffb1aaba512f5fda377b8f3f4aa6c76f2d33a6d4fa73169a9a2cddbe44b49075efccb37acd99774e63769ae150647f354f0b4b93ff3028c66de35f1d715146cf5d5c1a854b45bb38a5fa45aa211f988b4c9daf94f61ceafbd989d168439c63b388672d2b0bf170b037e5c38e89df56f80d7c6645d7c045f4118fc79b7c667e0072500d627eac7bd3a17614934e238c2f575f4a978fd53246da9d3df02a28b9291cc09a71361b010d1605e86f4f58298cec9be2f7e17aedcecd5d87d7302b2290f1313eff056b100ff9890dd989f495182e2532c691d96aa97dbb2ce6481a0f76b4e26fcd97a02996c39347f90aadad5c4a65e62f9ba6f37fea8df342d5c6cdda448bbe7dfc4a461fa8cbe1c2dc0a78abcaa67129b998e6f9a913a6e7c84e36b936f4db32f000d06bcfe8ae2d5fac04cf45bf3fd3f117bb0b3da685e109a82f200a1e0d7f8522332e5524a3fbc6e864a86f9fbe30558b3263847d890afc1b64e835e1526ebf69d743a13717163fad0f9e058816a176051dac15dd0b7e2f0ece4d367abdb72a339898575595bad4acc3b46b597db68a5b6141f850d243fbe0b3cc113bf7eb27fe4359ddfc4ff3ef16bc7acaa0f3524f310679c03333d3fcaaf2e7507ba98f8dd1b770f36e426250b1ff8a9d4bc25c463ba8a7630a582aea3252e0ec28d656063d6177f74b1c88d457bf9059895e570cecdd6fa724d2015eca9c76ddae2798f82a181582723d0bd2fe875792e22bbd67b111812ef40703d6186261d6be2747c72746960fab45840f4ff6907949f20902b065fdee98d2c13ba04152bbc70eb415b14e172b028771339fb0ca708bf580bd2fb6a6d6efc0990ba5d213fa95f2efdd8b1c1b699841b8e154451c5de23871b54be129af8e3043ec5780cc395f325d33c4d932a30171ad6c362281b895db4b604d1d097b8f4162bca2f6da265e7a2d1130043a9d21c95effcca1ef06d47c6bbb7860392e5b77d17706b5accad18e8bd19ee8ab2e950a5d8f6789119a4dcb02ce64ad5fd29879e948be85c8c35669a06b2fef4fc27ad44a3a5cffff063f9268ba3b8c54a777bb750eac7e3f3ee767a4eeacb1b7019d3eac82fe5f943bd042063df081da663ad14e7f4661e550e495f413002a6d3eab63e159baaeb60fb7766baabab0d22b82221bc37ed6ca672ad60102c15d040e6085a1f4fe67bcf63da0a15205892a04dad9b3ea918adf24d6479fd16e935badebd0aeae1cb6d505ffc29abfff2708db39d1ff6420288b3b779d291e3ac4b944512eca4f63f4e1069281a089d91d3363d15975ffdd1b103e4e2c163bbeb915a5d08454857a9d29d24b72a7e7df6e3a7e90ed517abc95a448aa0179959285247f17cc8d0532fb13738a6a21738ebec71e2e68c55d8a8b77d456b385408650e627970ef13765744f4a72e4990912186a403f71bf2a9b8ac7211a0499266466c65de65157d36302cde084d348ba46da3efc430677bb5b34f75f39f16bc710dbe9c4a4869cc6e820ffc59239b1049720bc24f5e59395f0f0f153bdbf207df37311e0d85db2906f70645c876c000583812026239a535cc06a4a6c2201b19560bf574825662aaea2dfcfb3551752e89459e4082e9196dfbe1251fdb94b9f997689be8e8609d4d78fade40844bbad5caff8a07376bd83a13141c14d0ce0eb0a9b2e621cd7e031660970aa4be5f7dcb5d15c2bd2ede463c6fb2bb6bc1abcfcd7a1af96f1ae98ae81d315af3713d000ab889760c12443ac5fa79a48fafb39bef31b3c3b9c636927e868259e64ee02f2f9a5ba0b9f1c4b2a9e7cb48beb319433419798210d720f6879e4cefe84130bcaf22c1e270f3e7262a578ced12348bfacc7ee33573d2916ea63ae14659f467dd8e5f72115537fecc1406e977438fa47375d11d5327cf409aa1ec22b0d4905084e18135917ce073aa8bdbf4d9057bb2e7ae21cd46342745b6c1a43631a5a25baf33e59e461339e402f29d787463c8d5ac2a889e7d740b7baaa588024c683aef08e721ae1f880966e35e8288b4724d97f6feaa0d812a9e876d10c7c8c222742ed14764b183b66100f3644c98ee165abe1f36a2395279ac1cba57258cc5a26aa5520a16d77f075214e439b6eecf9791cf735066b66cf71442b377775018c9ab44312fb5a40c4833d198a2cfede24b5f8bf7e4231c62c5f33669a2ae631b3a116af83acc02b72e05819f01a5e1f0492b5b11ee1f3a73d8bd473bef885cf88b2e8e35189bbc8ae8c261521a0000cd0bebee7295e8d35df1cd49f078e68993fd10373a53eba652a3f4be4016b27961e93935a059a321c20970e694c4678813216632a684de2ba44885592672cf46e54c9ff27d01b29676ec1c058628ac1e7cb063885c6f6e428195a37698c7f1941c3066480ef3d4c8e1b601b6b65c61b21c10bb3d84d09f7e1eeb38b7c94d1fc658c57106b39cfcad009e4e4b93c6d969b0b7ee231234cc1383e71623de0c1930db8a8dbf266df0e2d924da51d9f49e836b82d2ce0bb30f50bffad57cb960f448965a23a6057140f7da0b5e29caa6f95025027be799a52fcc906cfd6f55cc96e712e11ba2bdfefd3ef150f1f04f6d8de5d7f5f9f9262ffd4c0509078cfeffc27d9bacdcbd99cfea305c080c296d6699654e909a3f8b05ec63ed6bf1c01f9b1b1ebcd5c3d34f8d5e8a5d3386626297e31f510a7dbf67751afc4f77effede7186e0ac5a05c4cc7bbaa0ca610433f49bc9518f1ab48049c1dc8e7ab9ac646e024225326431294d5335d627c3a6e9e8a06d8fbda1720dfd868c071682118c570782845edb082de727983c8e4be4aa9196046dd5a92f7e3e9a3d993613c76af2ed052681ad82d8446aecfbd169b3a659d27f0b012c45b9fd2d5b022492fb34176720daa6af6b61d245cdd44a017fcb0d82b4bc34d8c14d8c815b75616a4b8a0825658e903767625b4514c8ecb6bca7e3cf28d065a4b18456ee149ee611f6a6ed9fc8060a06b0f0a6e3de41e7d4628e915808b939e901cd0e48c11deb612f94b1eb4d589df95e2b19077aaff56d57afa46add91f6274ca2117fdf4ec9ad15f2ce0eddcadaddeb39117da645bc127188f7596ca6c7ec46914c17968e3c2c976a4d71f7f8e853a558d6f09cd504e0475641389dc5811d424893cbc25778b3f9ffe28d83db243f69d7fde1fc646d6726b7ed9ba058a2a69b0a368da3d7da417d71552e231c3334b7b37884f84d831e2952e80b10b205eb9b5c02697e110e3cbaecf4e5af641335a6f8c4d00e8d2862717d2164e4ef64ca969d66b23cdf3bf06f801fef9553859094bbc872153589e8153a49c233294fdffd46656c1304642139fecd39fbb08abd4b8730169b9615d4809910dbf0a2ccb1fa8d0c38c950265c77fc4904f97c11c5e59b9f92bc653e67bbb8ec57e1cb7111dbba62ee56eaf48210af4f5f238490a4aec16c6c60fb4d968915a5a6fb7e6767111a6dca6e279498aa016965c58939dc65f55863d7c21b6885c6c360b46772571acdd7b3eebfbeea2a681e8e10e4ea4d95e259a48bb53059650c9914c768f1b9cdc3998558b5c3fb2bb4a643c85cf4ac4582d554fa71a40235700747589a8f837ee85a9c66d18bb3d010bd28f47505c45bf7d61822152e6acd38b3103115e3f4f4839d9ed1fdc3a9abbdb8885274ebeef30278964b4833509fe21a75875b7a1e59aa1f293c9ebb12e2f8f2f112f99fa17c5eb3e7f4991416e2829f7fe1f851fc3fabfbb6c03ca56f72f11e5a21da6d3a6d9696e7de32137173b91c2f6891fe71089510ce634749312f9ac7124ad7b6757e4ff3d7594057e65742c447d56a91e718ce52eba5bd2d70c9fc35c463a9dc1c8591d8dd2092a7f6686bd784de00568fc57ace7ad9ae6805c37e8b751349b9b3ef1bc5cb2cd17d7a11f3ff522151311ed21e0b9c9c5ad9f1e4787e9cca1732f1666fc70b51e9764e66d1b9d30a1d88d75524d3fb53e5fb3a618b50200ed743ee6b165b147726120793dad8ab8b10e937e32de51ec7e3f2a3dbe047895ea4a6ae75739ec0e004cd0ee5fddea612d85a1ab88d7d2736c6e5272a40a3e47d013763d5a9b196a4c494ebb2ad4c6f72dee216b533bff8a61fb1a5dc95f39b4206ea2530a7844e77df2500fdbe7ef344d09898b7f3c5d8c79e3f9e9e99981c3df0e3dd7505696fde18c154f7e02d9bcfd47521d7381c93ba2cf41d78f561a3f53eccd577758e03fdf162e38e6b7ad8394b396bfd6aafce275591df4e8032d64784b7a731c408694c16a338d771eae93499d4051f8c668712f2c64fdd596bbb9a10a35766928428914a38b8a557856e13f97eda358b4489ff9ca5d523841f17f746948d5aee5698785e51492d8b8f6b6ec652b0c876ceffa2ed67efa633f66e21a5f435caa7a7dcea449d8e8a9bfbbbf8357cf2380a303ef8660522910a645ea39fe978baa4a3fcc588d283046b5267851f872aba05703ad893f89188b0714dbc4866be93dfb1d0d04e374ed83abfa660da4c6c609a3274e432b71475270e532f06da1210163895ef1d4a256adc7f300262158de51086124508d017712fc2eb1e2fd2d92222ad09b2f53009ab06d9bf5f3e71e7383297e63ca640e44389dbb99cf0f4845f71bcbd058bee28d4db1d80a328aba88bdd9a80b726bc51e53a92960a985e7b86ea2a8e88e6e3641180eee8cba7303d54eb60aa3860a0505a143ded66dc49565e0a80c0b31fb85f4966a2154c9d64eabf2dc8ef2a2014cee92a3ba64c27b3bffa528c9bf353195dca0e95329d8dc1d50b8d5f6cba99dfacd70180ba326bafc24a472a65a5929d7928b11443974187af4baf36da0e89ce5f08c5bd698fbfe81810bfd7762c0f5d975fe9c778e4f1166a5e3d8fe0de5a195e128bee49302ad6e1788ad555b9ad8ca4892d11df7867bb6edadc878894a0e199fb4bc05a34e04be99f27af0916cd68dd2fed1b2e9582cc30b8048e2f848d49d2955fd5ba97f0daef913749324112ce2864ba84998510a5281c1df35afedd4f98e3eb6c7b0c0a98b3477bc07e074614cc4d85fae7a151dab1a2ed42c43a38659b2fe859ddba5da7d4f2a8f63442bca4dd3e11b4b981071d764b8e02feed5b956eda0b872885ac801b678a54ee120e31429866ac759f6f373a0f1b95a3f1b42c1087371758e01278a69eff2eb0a2f1221629d020c7754b0ab0de3a0d6a0d2cb1e90f23fe08faff863bac1c837bf6696b734d066596022331c3d1cb3c3bb9be964e396a1e856553b6d968b73066aed50439d8e9a64a332d02a891c1d6e29a81e0bba8ef5a9f86683d83d72391b67b62d1780c77b6457a265da0b3599e0b7918e49208cb5cda359676c8d96191547ffa8cc717cc7b6a6f449349e1cc4beccfe7613f0d3b715e4882a69ef9173ac2c261cb62291602d61bf53ad9652186dbde45ffb908d1316e4ed3c1d0b21e95ea66745ca0f5d480f690d2c519b595ce82e967644cf7b72c9cdf158da5a7e8443a6c7b60c129f2063cfa9b9f8989065880eec8dacf623e93db8e99c09cd5d94df9ef277ea6471ac2911a3c86a92831fbcd52e3b3af31ff8445f043bc48bedb11069ca2b250ea31fdd4228cf2f7735b6012dd9027594afd09f0b5a38c1675fa7f6035d3b5669fc3375cdf438e635b62e7b4ddd003c8e366671bc8e9ef38d448a48e52feb48510daab05d38fa18c7d8c0b3a5e8420f933737a145de6130c74925bdcb3e305a07202f91385af1dc4808d026d33e6dc360391b8358dde02b04e6935c783280eb340fdfd4d015d2e525dd18cda917730df9d19b7eb51ec0f53b3aecdf46ee9f68fbfe0c71896553fc8e85115080ce5ae3937d69820757d54b4ea04476815a5321ecfa8667b5ad5059a4b5c9e4e0968a38900c7faf1d52b895c8420f1ec7fb4839fef81dc2825e602ce89f3c06902b61fc0aeba09483dadc596819019c54d2d1c52ef98bd2f7e6c3053daa2cc69529515d9cec00aa1a6aad3c4f093857fa82cfd78bb540772400277753a1196bd4005a91a3650f65460b3a9a36d6c53551053b95e24d1ec4d078cdce647198ca0463cd7cc0501369399fca08aa9df985e11bcafeb40899d419a851af6398eb3c15ce33a3d90055706c1da634e3120aa28de3eebb9bcb14e7dc2e11834b12347dc58b2292aa14513bb993b78f8121cfbd1778e1ee331461a556887a63c6a67d3265080f3bbf156f186a26bb800c35ac68c0a472eab420aa380146dc9076bc00c65e75e4dba58475e8b2c77b74f292db225fde4f6d2a959f162855519f07b77677a56c7e0e91c7154c9d20e400eca9e868e8cdc17027ee04164bd29678d7b8e6319730f060ca1b246489803918f62f9b7d759add3f3f4dad0a6ef1de4f4077945db34a570cdec7f7958103e0f73ff1ee8c466ea692d1dfaedf7e7a7e94484e1ca6204d044f468f4527844f765cf4eab0a33a680d770ad3507002e35ac84f6687ca59e4fcc3bb51955b2d4d98068d5d44a46ed5ef40704d3fb7d10154f4aebeb5d6a305de2cb6b2711c5770bf878f39f35779620b1d695c2904da2f6a595852630497caae4cc9a822c4751b51cb69d635e6ec47d6972a29c59515e2eaee01a5589c03bc24916b76c32ed9b78950e910211e331b033c052413e24ae325af29db647dd02ca06cc5224a8ddd55f26ac43a83d96e0beae9d7b9ffa31d515340cce114c66a177f8d7c291bdd49c1490e880d8f82ce4ea6f7651404d81367362f2a3e9b0ce311eaa8fb8525cf8690a8f943ce49bef0aa03caa44fcb439b8b7a31a72fbb61208a04697ca3bbf8b5a0606341a0e784d6cb82b093b274ebb4cede80485b612e321be1166e3c84f2bb1789b343863ebaf12ca70a92ac55a78c7998764400fcc9812fc3e8737af721a4d5cc5264f3a291f25e2b52abe5e07a38ed0932614e87fc1bee6b2a8b66b83fbaacf3f1b49270f8c78c5468ed6a7e4d2571d60cb9808c8df22161e553f1fc3361b0d4227e26d087c80693ae4c4477afa54cc53c3b15e1b3f4e137f9366aa52ae0ba3e5f2d50c84d243d55326218faf8ffc2d6e5202bd20e4823f1b4574181a7470dfd658471b2655b40395dc6359ae87a53f19edb007b977cff3c4b0dd1b2b23d4f4b5103cba48612cc2a8d1dcd208f85c903caeba0e6d3a7348a6129c86843df4bd2b5a50699955e9c1d6c6200dc5bb2d90df887813da1b9acc7678755e24da71ba4f60720b57ac93e7f8ca9e4c9c0be6a608008e5f5ebcb631542c9c2f6c408279633b43dd688ccb4679ea0e0d60267f194210ac7d7ff258f76525bb51e2ef7d72bb10161a72083e7de7ec3ce96f53ba4f83eed496525ee2ec23ba0e06713cb094637f2863d945432ccd307ef45e62b25266282b5227cbe0c9b27e2eb55c7c15510ecd3145c01ba5dfa6b57ba234d1548cd65e851953e0fe25805acbe0be413d12526dbf031d07f8e1177d3377a2575fee0dbf74eb62d01187af05ab977b1014a5f52a5a6f20de227f3a537eff328edc4a170dde3649d6778aae839e1e24793b44b4251518f4f39a2d87add841b3eadfca7f57d968e27587bcdf516b425e59866f31c19c2ff71c575fe262536499d92873266e559d4bd873147a449dfc72d80770e045c2d02bc3cf98270d5b66031cc3a8020e688c629886cd664a2e9e01491262a51d5472440257dff2e991101178abdfa061850683747fba1575df27f75a96a4d8aa64da924bb79ebe2e1e23ecefb00e88157f648c9ae937a5cba7d26dba81f9fcef54a4d550b6977656fd6be5226f77799b1b731f7f6f9ead317bb6a370075e4b5314829a0bcb4f67f35435df3a8303081a1d427409b01ba7b9824af827759643cc07c9ab6c20fdf9b94a54a3183d21b6f475f7b7cd8a515c1cef21b386368a39d855a92eabbf9e691ff24556ecaa9e551a8c415d89a0305c15cd8fa9838fca767318f14de9197e878c573bcc853a83107909311d62804fe87c3bfb056cfd43df4c09ea3a0d21f933bf722bfc924d1430ba51efba89d0c5e9450eb71f9e016ef8833d0a06e59829e66398b1114d39479f03d506394ca034388889b5333f1d0bc9fd8f09b7ec5cb4589aab56d96b2a2d16aaeb74d81a011ad5e54bb686c1a8df3a1447c7dc256cb670644010f68c1433c187b32920b9311ed70434f597258ee69a55ee5434c4c80623288f8cc9889498a5fc6653f4b823d6c3e6efe83d1bf4950ec13f9ffed06013b0721962ea59b8ca86cc06f05cdbdd0d2305d93abac05726b527177683bc28b149ffe1fafa89c009dcc0caf55e1d9bfcd1c4fe397d3c5fc0c6da383f4c41daa66263a471ffa9d981e47f85ed33653fdadce24b56b94fb30e567fc6184e01a8905a7aeb5925859118a1060295d50487ba0c1e76ca8f99e22f99a39b809b6505842261b0d4deaf7d83d2fb26bd39d2038bd1353a36ac970cadfdb87056420c78d63ea2b2a7b8289306c163ad35031750bb6adfaedbe1a7d51f5158cc4b04321c13926f56809b0335b6d88b5f779906cd0fcd5b7c0f0bf6d57490865b51ac8c9710997aa076ad1c40cc145e65c02d25485362c3f949763200c123e7cf1bd09cf556070bc874f0ab53e6988f439980de48974db3aa17f6137067fc13aaa24297473b2302d7b44265f473fe4455ee2f9d773feb52ca364a20df1ed7c6c78be155870a586e2132871ea4fad2b4add1d2c7040b46554c5b8586744dfde9612a76439e16bcaab8daf5cc20d89f880251a9fe6208c314095da7ac5ce369c57a576361cb1f66fe1da7513f997fd3c6e77b6d166592a749034ea50feefdc2f7a1bd4e6ec60fecdad23fcfcb829fcc8eaff523797d9dccc24145816b74161f3f6c47ab2b8632b0dbfaf01938edb025a9c9dbbe795dc542c24bd7135c7c5bf361c1c3bbf4a50497c9ef18ebab83833e4452a3df9657850d114a9d102ab023ae9cdb3db837d1b321a9bd69d9a278b97d1e086a2401c1ff69f5b228bf2b6cc7fd1e4aa6433c0bbd64a74a42591dc0ddf278cc12313d7d1b81c316018206e1f349b4ee5e3ad47562795c9478d29946e442c4494b6b6ae6415258f179cf340a9f99f9d16fab1a9f05726e37897d034d3f9b469daf9fe93e4c3994196a07c5f9128f04a17a8261a6e527629565c2890eb803722ec91e30c06ff14f407809e92f184c45440b20cac6f6be27fa691d140e8e584b623ba07dcd1ce6103c844f125671c253961ac00310fe5f4ab96bb88e7d7d7e1ecf63b5af80088110724d6a5ae7a4f6970cb920b3c055d82daf8e0b1ac53aa6679f5ac85959ab6264dcd6528d5a3f1a7c7fb9fc0e2ae9ed1e10a3331a450d6887fc51b0861b5f461369ae74099b381185fe076e2ea69b9eb54a699c9268fce1b3a07daf6b5dfcc4c02975307c9e725c3047e0fd1bca91f3133a5a14ba5cb001ed0523a95984b1a5c1a57bae0f3f556cf9c0ce59c2c4f892d0502ed46471a6745a5228adc2edf9f892b906b5c0e4e033feea3215e2b140993432d4c96c91e566cdea64a5a43648440d6cdce43c803ac6c3532d860473abb463d0737e6634aa9b20c78e73c3bbabb6cef59c8dd38fef882ca0c68866737731ac94fed1f8ffac930777301a35eed5c538ba913a1c63532c5fb6188b5c16ed280267439dca48f966c2a43b4ffc61261a17aee54da1afa7b5d2a92245beadff99989eb90a7c1acd3c6a066446987f64cbd6363bf750761e4d7c6c67f15118f782c7b9dff23b61bc124650ca02f0c8390dbe4ed73f994e1e5b45644838c0c6064624dc7761d3254dca99938bf376bb979921dfc19864a0fa2dbee6eb33800c50e4867e4ad14604e053b9a6339d5aabc5fdfcd160626a11e805572666d182eba3d983ae48df106572c7dec35eff7078d9ccd7e507c1e9a6ca2407231a0783bf13d201c4ddae4f9b77b4fb855f743aee3de013ba45d8a6420a476e52d38afb23c75f2f1bffc4f2ce861daa4ec733a757be06c5c63d086081020ded0e38a7ca7ffd27ba5cb21bc403666f301572e1763b2e60a7c0847244f540786740d26f0d1021a2b81ef853b2f07109f7094d4ae75f4e84cf1bd63ab94cb6a42c38b9825572036ab6961fc49dbb24094b2de3f3365613a04e557359ead16d4ab1e73be6dd71f37e88123c8b94c25c8b2bdeb89c517e413d9d09c6cba7aa3e573a1f5621948761455c665b713877db28d7c062ad721bca8b7b28ecc060b8ed68b461e9db67d4808e9e2446ff7a9f2e59161e6a0fc484afacee5843ceb45e6fcae60af3ddb9749f003d9889039039fcebab673512ecd739ff5b610a9a90029213e112cab2d83a709e19c7ab3ec16bb60b0a53f654f55ad2b734df700a100e5f2ccb0cca15802cffdfcc8076c8f22dbf9a8d42bc6e00b4548acc9bfff67c5d812ba4b35991d6c58fcdd60cd3f708e06ba59abe93bd44831cd6e403fe2d71b54ac7d813cfb4eb047bf799bc95f460fce9549b7a9a489f4ad105795689cfcdc9225ebe59299f6989b58a3e0065a9f646d82aa27fd954f015889562bdd4f897fe642be846cf3afbe2acd4e2e40e842ef4a44956b251a8bad504676ebbe99851701584f2f4f69aade1ffc639cfe3243729c938c15f26f8c8571b5ae94b02cd95b26715034390a1f1648cd35b1f0614baefcd2d7cf27530d6cf8e26f553ecdbebecbc1f6b0f2d3f152c5add956bae4422470d5522af30f13dbeed7580f2d3c9404cdbacd60bba697e85aee7e54ff7b4a6217cd29730c1ab867cf530de44478ab8c3e57c51866136b0497b89749c72c2fb8ae2b9cd77ad8c6d1af8878b66f64acf9df52b15d9bff07669794a751cf198cb5b52228d9e810321dde0381b9e294a60651e199db8bc0784ada92d86dbaf246584dc6c482ae93fe74cfed9d2e708f49de7513a07cb38724c7ae1cc3a2648c1c394fa85c56043060ca058bf7dd4dbe8c515a8057d7c56eed326905f25f00d091a9f6a2e5c528b670ed8d20a1338100dd2df256b7038ca7b92675138ae0283cb9840c9363a320d4ecca6e37bce9776ea21add8af8d470a33dea35c40e2fe88952bb3791de1677e7b9c32acb116e2282c2c78875c685ec1621da3bf69c3ffd3cccd9f0f0b08fe8f1d126f9db0440280a00dce41ed7a43ec3e6429f119ba69c536d6e384fc39715c54bd37d0de9232dc2cb4be2c437cd2b225d1e663e10e49c3de42bf6bde842fa49329adf64d81b1574c368a443aca940dfbe491a33b63db32b3190fe67dfb7fb86994eff1c294fbcc11ceb35ce80a600f80b8c79e60a88a9a38856535203daea2878362368f2e1441f5252878b016cd943828f2eb46da23adec24265b6af97693e065848af0157b3a6a6c65a04b0bcc8755eb1acfbec2792364ad0ad226d5c5a3e7f9ab49de80a49acf8aa5c7616bb4a67c26bcbf466eef8be47fc155ef610c790591cecdb2173295bec56ebf4fd91ef9fd499fdcb68f36e11e6c618b84692cd0ec332c32fa652d952e73c3e3dd35c55a9c05f9b049821cefafaf3a59d7680aa9ce02472e2fe5055125c9b9ba2a7b25d5f6906cf88628b994085604f93a3f72c71d81758c471ffe2e3aeb47a8c17fa5d75276d4fb1123b94098ab68066b45f387ffec1d1c79ce8d905705fa504c8d6811cdb28ff827c1848292ab86f43787157dd05764ec1482f6adcd99c3d54b85c1896083cc31b5c8026d377cf8a4ca5a18cd75f84ae7461a81045c0290558c20fa6956c4f58755dda891ac458a6c915a2076467e537eebe355505fcc2c973695d7dea386a52d2155de2dcf4747ee1374bfae34f1e26bc7f26036a53735013c670e5a97765f637723a0404931b578979b94f25de1d78b8bd6dbc8190112f05654fcc37a2e3af0cb2218c27af91d96b4dac8c15c7891b08e339780fd9cbb3fc54ee9521ec8039151ae5b447e7d818535cdf3f51fa49a9099af7774862866a17bd8cc15acd395773cde28240aef35970651d141b1b4dd950f79db94e41dc623161575815f52f34b2c009c622a8dc0f5e3841a36edfa29f450341137d0a61620dc62db96d6a54702d96b3c71782051a54cf1dd63fb6ffac8adc98f0f85c2d472018d4129e2458df225c357e4c77af6284500ccc6512dbf2368e1057a2a1bb6e95cf5e2421fe6f0b616ece11b16ee36e39ac2d9919423c7d59e77810173c6d6395a93592b4626886ff32925dfc8d6d252ca7b642a8f96bec5b034591c8a8dd5e5bef050e3250fca3698de501b4147c104889e5653931be758151adae8edd7c7a859048951f53eb462b6eb17b571b9324b9e45172bb5b1c93c6923255fba2305ca28cde0c57ec6da95269c836cd41e3cc9f24116267ca0ccff81d644843f10689364df823e60110d295da8a109b616f77464182f1e933abee28bfbe3e893bd059ee8983a0c28621dc1d734c04ab7e3c39650ed778a7afb22e811aae45b0cbd8f2be085e01ae9ae29d98ea42b353f053e1b3e62f0260fb4aaf91c94bedacb06c9814b67792cfc18fbf0c74004714de8146a771fee831a8819432a549765e3d98e0381c4a7595d38a2415dee9b38714ba48f3c1346c2e5a92f5a8a80ec390e78e5faf01ef784e7f9a89746988302cafe62ebc6bea14110f831a65c195a164741beda5d652b95a05b22573d231f7376b3b80335d3fa56e8e72c2dbc695f5252b01966864fc7228549da767b82d7752558f7ccdee1fd86cf25b09c0bf84e6286df14c5cfaedc4529f20863117eeab700bd3cbfdfffa778aed414080fc42a8bdef1901c6d770399857789d317faa24cad19459b7870e7acaa3d6eeab55af56976c683bf101caa052643c878fc505476e8e9e47a9cbe4a9de664d58c79c5c9b66a524c631975db9d4bab2706e97e207a4acaad781d453d39f7a13297459ca8fd3c5486210568907e32505764e8ae1315c2c38b82b8a2196ddb0ba106aadfe33e9c80d6fc404353b4e44bc6695535f505b2e850f3db9741e6aab44cffa74ab724f1a064f4a6db4f5ad8eec214dfd50f7a48b42faed430a590e582fd8af38c59dc0732f03a39130abf80bd7cb216224990b0290f837c605dea7c9ed496a879ca50756c22a92036789068b7ee0b4680d98b0e5a2a3e3087a6eb25e717d18f393ec21ccb7f3e4216999d30ca8589fc7306f11d49e2a2b7c43302697d17b789c3bfb8b1cdbf4517033b234913ce80685bcda0ee097f8a669054bbd016d0f6c307acc0cd308d59cbdf7f87e4aada45e74bfef42954633481911d034ea97cac9323a4799fa82d4714ea6c8afe0da1efa2e9d869e1aee36a5d67b2d0511f77de5d325ff0b42e06c2bd8551cc0cf5cac7c958f9a625ce53dbf76217b52e473d57d1c906e24aa8c34d192ee6fb88cef39afd66b847e6ea395eaddc45d12a1586eb769fbd21b955ce3a499ec868130c8a6f22abda5a5c86c7acf53fec0d1373feecfea2a35039b1dd5f875e715a28224a278ce96ee79c13593e2cba3025232e08e9214042ea99f9380e35587e160a00b41b70f1b0eb4dd71b07336f46079c25be95471de8b42a9f4fb03a1ac104d4ec1ac2c3acd51058d10ca9d3b7b5657d7dec74845d0447fa39bda1fe7dfeaf26daa8fae39fbcdf733ef7ce643572c5d5feefb350df7bd18c9235a41ecae829193e2f47b26408a7b8e9e844158ecaf50b395722a6a476a1bc1212d9b3430c09e802f0d3ef353abbcf29e0fe0358237e2049d1f93e660f5ded31e438b8e7393b68cc6880d4901044081464687079bb02607a4977416ce5d1823d1d9ebcf7562219a2bf767cdc7eaf0a159fd12431106a23e403812c4d948908132242e1c97fabbd69a565b58e922d13a728e92b04c877e05e6e4d877a9d0a3d094305d89495cae047517463b8cc04fff0adee7f44858a6acba6c5b763447b03a42c1918dfb70f54123c18920b0597363af65b66eee6962d91221d23565ea50462518a8e60fc5ff7964e11cd80d04bbb2412e29933c293db3ec78a04f38802ace93251af084677107f9b580f4890a1c6bd45e3225364a042ca09a6a6a5aa53d46f1e3b407fad951694d4c3742c43e10125e8699f48a8d133b8074995abb90e6c1d757aa773558d4a4aea451dafe0aa9b4c926efb29afea8d85959927d431b3809b69c2e65b59e30443c66cc6f864c6eafbd7ef32c8eb7a1dc6a663f5e02acc2249a3a98c91ca21a25544af94e246616c099a4aa12923ffc2ee23a3694098595e2b8a06cd236b39c4977c6e3a1e0a98b4120a0c360bb9127e332cf3dde68d99cb086b9b0ee25dc287e2d3f5420330516cac8a4e04449cb6076c795274f1c54b0ff8d554f38526b09eca3771606195c5c51c7c995548e91171002ea86bd4bca9c893691fae0f689feaf12201d31d0f2a1a3a9ae7e3b70d787bdc0c3a2a76c9b5713ccac9026491bf43b5323140ab2a0547d84ab83a48369baf87565bd8733c6fb9cad027f435f9ef0cbe3c402e5182fc8879b7216394b33b855f48ca8b1f1ac798bcdaa6dab95be3da780be57dff876a641e71f5da35da0490d0639b9c178c95fcb0e1602ee3f645367b2c684b90cae2d4722a1d54afab89642e008970d172d229c1fa4963635b5735e3c2c4ae30cc47a0a906c85f7b38a9335a24e87c2f74aa5c94902d4ddd087a9d5f65cc3fd5cc543545854a47a4d0a53ca653be46c4c0a5bec89c253344b000bc86379a86f2fabde29f2b56e08d6eb3278689e3611b97b22bbfee3d3242b7451af288f34c3ad642ed7352f182baede02a5deafa1844f1084bc4b5bd9ebac1e5766f7038c65868c970dcce1525c4ba4557cfc8647ec40f9043c4b7027350472693fb7371c7c212a368f1191f1cf1872aa3de694ebe05ae0a4f5ede7131856c643d7bec87cb58c02bc22d4df105cdd1810d4b9c07fb41f4cb824c03ac290c3a9d5a76492491616355679ad42bc98b06723ec035049726cc3ffc72072ff46ec39a9e829374b6545d5a2b5ccf34fec3f1755ca0e6e5b228e0674d8df64e3b8de4ba669490198692837079a8828cb0c2090ded5cdc360f67f21057826e4834901f4d306114805513678e4823b290a28beb8204ef99ca8e0d6429c7aa3e2d6dc5ea23ff89d325352fe7c3aa6f47f67d26cca3c51c383b62d27b009235af15ba039e84cc5755e61052f18ff2b16d2e7fab90e94cf30c36b68c2368727cdd247ada97ce1b5ca19e47f42a04c49c1636a68d74e5cdfb53a237d65d3dd421b24ba59ee8f6d47bb3e7bdf2472eefd148a9cff0422d8fdce5a87c43ff8c5b33ec890e619a190f147800cab6d1835ba2bfe2d932e9e595a87246346c5468f1f7db9bf08cb1158e2dac85ccd8ffe8189e30bf0487cdbd5d1fc1ffe34130b8b1a2191c0858d64f1e216a45fdd3e5591f787914cddb4557c88e6f5781d486fbd0c2dd7b68a9f3a9e05d2d29e7aef4f851d421a26d826fb69d1063815db49414296c7a930467649f5b875cac06134f9bcbc2d6bb9c88084a6ba106a6542bd03a786995d03f8c515cf66004b64f5f7bde8986aa02bdd84af0c9f6f9954e86f046950eb139b09f270be9f4b5fdc355a972f0e136144f1fef3be3d48dcf2929464b8bc255c4e814f000db912e999e59d37c272bd5adfa4f68b237bc851c2510b358d194adbd97f6ee38458de219fd1faffa0ab3dc0591aac11f61a3a9342c085d23b6c844eb3ce8c0dcdac17553eb1316d89ede3c84622224d63120f1a23cab58f5462386ddb407afc118398e304124df2358778987f85588356bf2a89874b9b4f83e326e36c9dbbc7d761fcb81ab62a72f0aa03107a5410dfbdc35b8c25e048c25ddcd79ad53ff6cc1b00c294b420c15627fb66d76f93fba4e560163f51766fa15d207b63ade8db5d216b17160b167c098cbc26f19837e15a6bf3ba37f93d5ecce0c14e2c7c780debfa99eba75add973226988bfac7abc0d4f0418469ba08cc4305c60672c97bf71e832de7d48b7cea61ac81e67de5e4971440342624fda46bf6b8af196827b9f85b0ddad4746b67c4ba2d7d4cbf1e7db99ef0a787646414d6a779a05643a821e6c7d22cdedf473e70050f4953d66df272f74676904ec5129fd5469762d8864a3a15819ea7c5a1716b628862e2a4c318d7b96384b75c0de290c035d3444bcd196a3f5ad1464eaa0e0c8a3190cd3d00f9c5cee18c86fed91624784685acbcf82fc86a928449460dc5b791da0e973f110c6e7230bd5b3ec98caafb6d4ae0bbc515664ec0251e66d8f210049797d280563418218f07e430ce2096600e2cb2c797230b403f21ee8e88d2c3b03ca7b3f272b0daf2ce1c2eb069768d92199b31fec315da1caf22e5a422410282772cb91f9a52f7148628889077b3f81d145b8721db54046fcebdf6d9c358c1578f120696e661f51d1d99a44448873e45f02fd7682faf0b7735c9867aa8673b06a91448f34e3f73f997337b47e4aa66248682d88f24daf2bfc0deec8d8a6dedf6b707da048eb899dabb34c4fe53de0fde66e2785d21c790ab1d1584bdfd96906a3ec1c269148a6943da1c537baca09b8adc5b6ec812888e232c76c29c0db0c1c18bbc93a81920c6509aff95fb46704b342b8eafe9581c43d61a65d135da188d4d942bfd0effa1db8e068cb6618f8bff6c0fe227619aaaae571601e749fcedaa100be7386a3c8b68694eaedccb2b9d2e0a6356a0f8bf1b7a2fdb3cc696321fb76a0c35e3f3784164ea184229a60deb76fb919e6860813203a9cd502bb542a216ebe2a9b458daf52df6591c6c5f16ec34b4a35f5c0b5edc4868fe788465f70bc7340ce661d43c178fb6aee2569d4e1f4152d1acc5a32879a6c28191828a8410d28959acd2e51a37619f3ec1c72e425a37065f49a1cccafd1f2b517c2f058133b0a36ff95b6d16274a7776df502bc3909e67bce5d1bd8ecd3d86dec0344c14448ced0428b06e309ff6b61ed1e128fae6728c921f3be87180fbdef2faa17014be6a9085452d7ab3133f51e41ed39d14972bcda0449751868f847a71166f6336df799fca7118e8b474e077d2ee6b73be947c9d3e53d662c915cfcff1f09d67268b0f2767ee0dec62708beb43be805c0b4511b97979176df458fb1a925ffbb05e4b7c58a20946a2ae788f8c4c1559011bdbed1cdb72b7cd8b3bc07f4c281a43ec59b2e169ea9fb9fe106257e8db9207c739374535f7731ff817fd6a97da5aa710192f4d4a88abcfc03ba764bc7e5b372ba36252ebaa2cfcdb05aed4e0b27401e1befc84ecdaa343a4a8185f6f0290ffe91d75b1b2518dd4550a4473e48499c5a92fb457ad30aa3943fb505c14649e7e1c73824a409b28b62cd7363d112292325edefd2f03c936d84995bd6a9d1654f69ff2305fddcef8421c6fa5e95e0804d21326f29090661e8b7d29acad4ed70088e0a02d9e0c20ef28bcf6c6e37f0ea5e8d101018274b1a9581cb0e4ffc249c6ff21507ec348c2b295e0a78295c70db6da3f61e3e060097394d4dd297c791ef4b56be9b01a29139fd0b69e035c332179ab95b905fa9206a6469c25f5b040e6d41fc75c41af2551b1e653bb4cdea718bf56be7aa323ffa7caea162d9737f25854562a0e86ff89bb5933016132a74321b229255a7722120b1cabcc76bdf4bab94b18a321414558f4363d700eaea6b036f292ab2ccc250a1acec76075af3157ad8e301d6c8a38a4cf5c3de2693876f0454db9353919500d13528f47452c4986d3fe2629a3449e8d878f64d29b34b275e4fe742363f99640c3fd23b3d389f23ffdb261c466726dbbcb3c34afa274b28901d1ad577fd38c81fb19bd7550062bb85d31b513614780a02b6b5e3b5b7887a79b97532d503b43d1c7c48c96829feacef3c031665551659f32875674e20f38721cdc1e641ce9fe4e9dfb9e42bf08fc28ed0b03ef218d0b0e127b5046a9b965d8287fc07d20d688150ca006c79be06c7fdc9bb7910613ff3b5ba73d67e8dd2657407b021cdbb78ea5106f1646e9fab0fe2816f78a750ded955e761ba85c819d46a9e2a5ff21cdfc247b7350b0f8ecb1b82b1f991dba6d8b1e63cc69d4a7da94a552e695c6ca72da158fdd2260128890e396f7aa3b62023deff2db64c9a39b6030e9b39d99e280a4fec1683e09bb3787305d649f7ebb7bec1c75b1a6ea0259b734c14a0a2558a99db4acabfd497d51adfa4a46fac0c29d21fc027f0488fb7a2952e576fc9efa0c6f3bbb9725ee8556fb5ab129aa3e3ce912b2df7fc3c15463f649844144f62493b9ca098c5bca1e14e2148aea9ef0b851400b32db71827c0b0b5f8347f36f3e78f2f165f8e3fdea653ba81865efca377df1273b6a1f5df53aada0cc162aa096083a8ff62f6bd1096861fb1aae2851b4e55feb071284c12c6993dba58a4e938ec33d897b5333d67da388a69569a5762165ac069b0f9c00cca0bd1139c96e8265c865c2f8e7c39063bc077f795749cb6076df4588e2b2d07853a1443fcab992c7be89857a004fa930864687868405f9d06cd44a0122e2df619de0c07ddb7bd136ef66b5a49f7c6251915d5361fbf75d8acc6471b2aec8c0d8499c78ea80511fe930ed6f8ff4406b5c061678c0e23dc998804dcd4c7fc166356e536d84a59bc35fd2c111c7aac8ac8c29f5310f40bf0161bc7950978b886f0ce03e2e053e0d426238e9401c126d362e59556ff6bbdd7886000b65fde3390be7c2e91df00f2e15bdf77fc84040f705fe1756c4402679479a18fea45b24ac145764d68c03b2ace1ad2a40c67b027b5a81c8e29ac5d69ea33c39e236c7f906f6a8445b7a88ddcedc5d7a5b3326e9192aaa4b13e12469a21b34c6709660dbbe4844ff9aab8c1af58a076ce7dbe92a63aeaa409de0aed0d76b0da0578f55c4d6cc5b77637710c3498c8cc4718da0efefb279511b4a026d613e50a3fa51401fc786f81708e619a9369b6d9d5daea06836850917d835304fa3d6dbb4dd72ac7e624587ec2437f466db42e2d5c8bb03eb389c0482c087b6c2ea1e81f13a0b3772e452c3d640583c9705267c10d4d5f88f8322d2df8a55ba2b2fd5c7cb1b905a0c2822bd46d86e73018d96953491224866bf73b315490b2cacc59a13c14ce68372fc66c6f76a3ad62c9cbf734bf90b44a0c04f2f7545d501c91ced47854b3a5d3773420c653558b73d3c59d7d3c1689db1782f2ef33fe06b7418229a34768351cf11f61eef9f3839d3e5530af4d089305a32ebd80c97223b67047148a36d8c3eca73f31f2d94c04d70e89173ee68501de0c945b74530795598204e145adc81502d83c2944ecc9a6c42db1d7cd91682e05051e93f714505d75c1553d85e4217ae2af8f40110cc1dc88a3b34653871ecc50420cedba771ff2502b58f3bf353d62b68c365f4c7a6603f3c2a238d3e98594f1ba6e1b08eada2918519a628a45ecae4b17fb39ec117fa16c9448fe1d21645120ba850e71e2947b54cf87c599a6a2827263640041367784ec51b9c37cdbb3627f76f21955d9876ea0283ed22b5a07cec34792d6f9dbb505184eec9ef7f35b8237fdaf2b05fad8d98ce61c635c10fb5d803f9096ed9c7205b421482557f2f7c6807df1f893568181371df13935446ce065beb87a55c2dea524b53c6d4fa06a7806e31ddd78bb4704c5764b66c793128a76b159d914f5d76543df761e1db72935277f57a7a7b2ab9e7fbee199d6b4638094cb89b66fbd8c82e179f53234e5abb6ec764690885115cedd1677f5c8b2887ad48de4af560fa3fdcf7350cc5e6b6b90a23541c6174d906278d63a7b850380c412984e8b16aceb3971f832e85ffeec27da4a05c46811bb9dc4f3693f6036a1fe551da2d57544f4c85708b06f137692d30fb2146cdfad11a65ecc4e0e1afa9f25ff22858b14efbec3557074fbbf067122a39370193dfeb1b41e38b24701506d64986a4cad8853a2a39028e29f46e08b4ea0a88d180c6762ff166212ce8280c6ae78665f9c70803a313030a3e69c41f93f246738e7d5f9862f9f1d126a5fa1d67b18c6a6480c8ee7f5f5b5d24740b6d55fb64acd9435b7d0b6e13abc83a76e075387f6b93296293815504948933d97c33edd95a62f0c28db4d179e49bafceec7973b5657285a7eb9420b22caad226aa8b055495eba5974a94b17f3c18928539f7f4b03e140aefb83f2d5c2b96f74bd2689ef465777f03672d0d744f2aa232e851e5da6dbbea3ab5948b65a60872de801be0665553d27f8b831cd1769bb4cd61140cec1c9bc6677091656eff149a9546ccd453beb00c4a1851f7a67921978c5ee2ca83cc84ad7c5687c556f227f97a6271f072cab034052b22046be0bfaebad6df055d007fc5d7b6cc63aacf4ec075a0e93fc4adf32819397db79d38193450e8fe88e8effb71030ce29e62d64497c1198f8190d3b8b25c8eae993fe86e3ec3519a7a56d533462bf20b7066894af483442d6145cd3702592f6ce789526904b9a916e1c26462338ce9dabbc4ced46be7db7203dbbb84a3bd575a5ce2a624141e7d57ee41481a24d9fce04a6597a376d843ec7f024393bfa4f043a3f0a0ee18c5c8d990cff3c9b6bd7caca182fdf365d03983d95c5bf21bd7cd1929e57817dcb8d82e932e9d4e293f7c7adbded7646c56728c99afde5bdd68e219a10fa986766ac55ba1f05e6e73f0ca5df6826258eb31d002bfd3e0500171cdc9f0dd4fcb9955a058f83b15444ec721c431b9dbf103c252bb34ff11e2eaf153ff5a061dc20f386297e36a7f3ca746aa3a135e479e0ba55cceedb69a7f7624fa975e048d763b3fc94aa7d96da972ddee7f91b7f00d6c1cfde389f4ab05c799aa106556611cd123a26ff6a23a4057a3b2ff2569dd14605968e76993965b7211c5b7405ff5c89cdcfb36283f7fa82ff1da9e26d0269fac8daf9015b93b3b536c5b00a2c7427e199d9807be9893b67f03a9a1970a1a046887e0a8dcf4e6a2cee57ff26b8a664f6c836b28b20082d0387e02d6d42adb8c5f126668c2292cda1123b85e39ffbd389d832138eaa1500b06f16b0d0e5505c970152194e30f8bc3a2ef01385533daec68f3246ef72956036ba3aead3d62e879dcacb7f505698c6687996ffeeefe7d2a0c3648968aec1e2b864a9b36b8f08211e8178883a27a079fe072f08ca49e5ef1ab910ff56ac7d4db6a0e25457c230cf920acad2698536ad3c6bbea096729e2687057b1d998103c0dde7df3d699a35e5b7a297dcae7d42dc5e6a138adada3247fd200f3060be71eaed95f6e17039650bd67ed21569598bba030ca1063affaef3ad2f17d74d33508a3c74b0a9a536a7c4109ffb9bd1e1ab3ea36555c2522f1cfad903c8a51e91cdff895146b56b83fff4680123b35a193c106e845f575c9b983e338793bddd57a0c46acd9298508e556d242d62cdb45e9c0f9bbdcce45a259ae0ffd57dfeaf85c64351e0cf392c4220a6d10c7e178ef8a88c4c1ad63c131cd92df268301730bcfc01f14882e51e9826b793fdfdf5f14ce7c44c59ed399e3a56ab3ede222dccd25736b85ffbf267efd69be2ad7e07a9b6360dcfee822e70f188722d0443239533c664b51d9d6bf46ccf8087116d5baf8dd6e0077800d84c309d7d749851f45d5f843cc369c00fadee5971af41f9451fdcb24138a1f19b9d3f166d6af9a4ac580b8b38c3ae8f0822640222d3563c611071c5ed0d370566ba597913dc6beed7470d7530b1b8ed213a3e6f37b15983e63f61de57cf0996250af0cb47c8c2cbe374678edd248d14f970fbe3c24a0a35a08b517af001b7fcf8cd9a01a4e909a1247600880a0db14025908498233325773bc70c907bffe93a537d60ef9590641987f23e28bf77550609aba6d5e1b13e79b1990ac9ab8b70e96ccf1c7d685606ea0194b40c68e3fcd64b3da521b770052221807de6c4186166a9d7efed120c978fcdb8380d5be361fcb52b5728831d367f29a8879a61d7eab88a95265b583c44068374cd3f26c23a1c62cf33b8f647c9891733ac9428d675510a6c9dfe5b0489c446a8601bd14bff6f637cb030b4dc60f8b17af638ac775a9339d7a4334cee79d830d735d3186adbc52e733f3fb410d20764d418f3863ed2acc874ca4be1aa47df5c24692638d703df3dfa0c7e7a1f3e9993b8f0e7607b4969532a97dcfd30531b19fc76c331b676881217067428c1403fce556557baeeb389b4146fa043d49680239df3182fa576d48c9d40492c78d029d149f1
+\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\rcleartomark{restore}if\r
+%%EndResource
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 199.44 C
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<526564756374696f6e206f66206e6574776f726b2074726166666963> 146.88 198.48 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 242.40 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<46617374657220726573706f6e73652074696d6573> 146.88 241.44 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 285.12 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<4c6f61642062616c616e63696e67> 146.88 284.16 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 327.84 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<52656c65617365206f6620726573736f757263657320626f756e6420746f2065787465726e616c2064617461206c6f6f6b7570> 146.88 326.88 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 370.80 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<4f7267616e697a6174696f6e2d73706563696669632061636365737320706f6c6963696573> 146.88 369.84 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 413.52 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<436f72706f72617465204964656e74697479> 146.88 412.56 C
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 9 9
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 659.52 497.04 t 659.52 513.12 lo 666.96 513.12 lo 666.96 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<39> 659.52 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<536f7274696e6720616e6420446973706c6179696e6720456e7472696573> 219.84 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 131.28 t 107.04 417.12 lo 741.84 417.12 lo 741.84 131.28 lo
+cp clip np
+0.000 0.000 0.000 RGB
+%%BeginResource: font StarBats
+%!PS-AdobeFont-1.0: StarBats 001.000\r%%CreationDate: 09.09.98 at 15:50 \r%%VMusage: 1024 36745  \r% Generated by Fontographer 4.1\r% \(c\) Copyright 1998 Star Division GmbH\r% ADL: 917 200 0\r%%EndComments\rFontDirectory/StarBats known{/StarBats findfont dup/UniqueID known{dup\r/UniqueID get 4092170 eq exch/FontType get 1 eq and}{pop false}ifelse\r{save true}{false}ifelse}{false}ifelse\r20 dict begin\r/FontInfo 16 dict dup begin\r  /version (001.000) readonly def\r  /FullName (StarBats) readonly def\r  /FamilyName (StarBats) readonly def\r  /Weight (Medium) readonly def\r  /ItalicAngle 0 def\r  /isFixedPitch false def\r  /UnderlinePosition -133 def\r  /UnderlineThickness 20 def\r  /Notice (\(c\) Copyright 1998 Star Division GmbH) readonly def\r  /em 1000 def\r  /ascent 917 def\r  /descent 200 def\rend readonly def\r/FontName /StarBats def\r/Encoding 256 array\rdup 0/.notdef put\rdup 1/.notdef put\rdup 2/.notdef put\rdup 3/glyph140 put\rdup 4/glyph141 put\rdup 5/ch5 put\rdup 6/ch6 put\rdup 7/.notdef put\rdup 8/.notdef put\rdup 9/.notdef put\rdup 10/.notdef put\rdup 11/.notdef put\rdup 12/.notdef put\rdup 13/.notdef put\rdup 14/.notdef put\rdup 15/.notdef put\rdup 16/.notdef put\rdup 17/.notdef put\rdup 18/.notdef put\rdup 19/.notdef put\rdup 20/.notdef put\rdup 21/.notdef put\rdup 22/.notdef put\rdup 23/.notdef put\rdup 24/.notdef put\rdup 25/.notdef put\rdup 26/.notdef put\rdup 27/.notdef put\rdup 28/.notdef put\rdup 29/.notdef put\rdup 30/.notdef put\rdup 31/.notdef put\rdup 32/space put\rdup 33/exclam put\rdup 34/quotedbl put\rdup 35/numbersign put\rdup 36/dollar put\rdup 37/percent put\rdup 38/ampersand put\rdup 39/quotesingle put\rdup 40/parenleft put\rdup 41/parenright put\rdup 42/asterisk put\rdup 43/plus put\rdup 44/comma put\rdup 45/hyphen put\rdup 46/period put\rdup 47/slash put\rdup 48/zero put\rdup 49/one put\rdup 50/two put\rdup 51/three put\rdup 52/four put\rdup 53/five put\rdup 54/six put\rdup 55/seven put\rdup 56/eight put\rdup 57/nine put\rdup 58/colon put\rdup 59/semicolon put\rdup 60/less put\rdup 61/equal put\rdup 62/greater put\rdup 63/question put\rdup 64/at put\rdup 65/A put\rdup 66/B put\rdup 67/C put\rdup 68/D put\rdup 69/E put\rdup 70/F put\rdup 71/G put\rdup 72/H put\rdup 73/I put\rdup 74/J put\rdup 75/K put\rdup 76/L put\rdup 77/M put\rdup 78/N put\rdup 79/O put\rdup 80/P put\rdup 81/Q put\rdup 82/R put\rdup 83/S put\rdup 84/T put\rdup 85/U put\rdup 86/V put\rdup 87/W put\rdup 88/X put\rdup 89/Y put\rdup 90/Z put\rdup 91/bracketleft put\rdup 92/backslash put\rdup 93/bracketright put\rdup 94/asciicircum put\rdup 95/underscore put\rdup 96/grave put\rdup 97/a put\rdup 98/b put\rdup 99/c put\rdup 100/d put\rdup 101/e put\rdup 102/f put\rdup 103/g put\rdup 104/h put\rdup 105/i put\rdup 106/j put\rdup 107/k put\rdup 108/l put\rdup 109/m put\rdup 110/n put\rdup 111/o put\rdup 112/p put\rdup 113/q put\rdup 114/r put\rdup 115/s put\rdup 116/t put\rdup 117/u put\rdup 118/v put\rdup 119/w put\rdup 120/x put\rdup 121/y put\rdup 122/z put\rdup 123/braceleft put\rdup 124/bar put\rdup 125/braceright put\rdup 126/asciitilde put\rdup 127/.notdef put\rdup 128/Euro put\rdup 129/.notdef put\rdup 130/quotesinglbase put\rdup 131/florin put\rdup 132/quotedblbase put\rdup 133/ellipsis put\rdup 134/.notdef put\rdup 135/daggerdbl put\rdup 136/circumflex put\rdup 137/perthousand put\rdup 138/Scaron put\rdup 139/guilsinglleft put\rdup 140/OE put\rdup 141/.notdef put\rdup 142/.notdef put\rdup 143/.notdef put\rdup 144/.notdef put\rdup 145/quoteleft put\rdup 146/quoteright put\rdup 147/quotedblleft put\rdup 148/quotedblright put\rdup 149/bullet put\rdup 150/endash put\rdup 151/emdash put\rdup 152/.notdef put\rdup 153/trademark put\rdup 154/scaron put\rdup 155/guilsinglright put\rdup 156/oe put\rdup 157/.notdef put\rdup 158/.notdef put\rdup 159/.notdef put\rdup 160/.notdef put\rdup 161/exclamdown put\rdup 162/cent put\rdup 163/sterling put\rdup 164/currency put\rdup 165/yen put\rdup 166/brokenbar put\rdup 167/section put\rdup 168/dieresis put\rdup 169/copyright put\rdup 170/ordfeminine put\rdup 171/guillemotleft put\rdup 172/Tom put\rdup 173/Pete put\rdup 174/registered put\rdup 175/macron put\rdup 176/degree put\rdup 177/plusminus put\rdup 178/twosuperior put\rdup 179/threesuperior put\rdup 180/acute put\rdup 181/mu1 put\rdup 182/paragraph put\rdup 183/middot put\rdup 184/cedilla put\rdup 185/onesuperior put\rdup 186/ordmasculine put\rdup 187/guillemotright put\rdup 188/onequarter put\rdup 189/onehalf put\rdup 190/threequarters put\rdup 191/questiondown put\rdup 192/Agrave put\rdup 193/Aacute put\rdup 194/Acircumflex put\rdup 195/Atilde put\rdup 196/Adieresis put\rdup 197/Aring put\rdup 198/AE put\rdup 199/Ccedilla put\rdup 200/STARling put\rdup 201/Idee put\rdup 202/nbspace put\rdup 203/Edieresis put\rdup 204/Igrave put\rdup 205/Iacute put\rdup 206/Icircumflex put\rdup 207/Idieresis put\rdup 208/Eth put\rdup 209/Ntilde put\rdup 210/Ograve put\rdup 211/Oacute put\rdup 212/Ocircumflex put\rdup 213/Otilde put\rdup 214/Odieresis put\rdup 215/multiply put\rdup 216/Oslash put\rdup 217/Ugrave put\rdup 218/Uacute put\rdup 219/Ucircumflex put\rdup 220/Udieresis put\rdup 221/Yacute put\rdup 222/Thorn put\rdup 223/germandbls put\rdup 224/agrave put\rdup 225/aacute put\rdup 226/acircumflex put\rdup 227/atilde put\rdup 228/adieresis put\rdup 229/aring put\rdup 230/ae put\rdup 231/ccedilla put\rdup 232/egrave put\rdup 233/eacute put\rdup 234/ecircumflex put\rdup 235/edieresis put\rdup 236/igrave put\rdup 237/iacute put\rdup 238/icircumflex put\rdup 239/idieresis put\rdup 240/eth put\rdup 241/ntilde put\rdup 242/ograve put\rdup 243/oacute put\rdup 244/ocircumflex put\rdup 245/otilde put\rdup 246/odieresis put\rdup 247/divide put\rdup 248/oslash put\rdup 249/ugrave put\rdup 250/uacute put\rdup 251/ucircumflex put\rdup 252/udieresis put\rdup 253/yacute put\rdup 254/thorn put\rdup 255/uni20AC put\r readonly def\r/PaintType 0 def\r/FontType 1 def\r/StrokeWidth 0 def\r/FontMatrix[0.001 0 0 0.001 0 0]readonly def\r/UniqueID 4092170 def\r/FontBBox{-12 -210 1083 917}readonly def\rcurrentdict end\rcurrentfile eexec\r
+d8061d93a824650eefe2785f13cd28a8a226cfb0a1a9915b91e00d2c2cb80ac548a1ab21bed4518a56748942842eff6121b01bc269e7837046266cb27dafd3a4fd0344e68245aa98a5f1b5bc9db554ebffb879f1c082989cf6c044b76f4814df51dcd03f9e3397f3c73d94f85771983bd52fbe6ecbcd9a2cbb7b3636cfb819daa5469925fc89a188732d68c6d06c906d183cb4bd495aed0c41fe6b7333ad90a1674478062c8996476573a0cdad62593c86e4741ecab7b8c75a6bf02971dfdc2c5a2e1c8f74ab1e91315c54e72426da3a62dede611d5967201fe8bfaa5a21c612c0b245fa35c6706b7b9aa3f73ce16604e3109770d367fb30fa663aa8d2b246de733d27174a0b818d54c58c3676435d43949eb9e5e335396296bc3f096fc154616c0b723b0b4a100ed45072f371f77f26e02f1dcc41376638097d79af0a4ddbfc37dd6cb60d0d34ea5a7536c655d95549b8a5a269e7e927c3d89f74b88e17973c2e8d64688089d329abe6b1009c0334d57a6dc34f22efdd933023231fa03fc81093ef255a199448f17d8f67dbc57c38b2fa163b8cef97a6f42e74af55319eb81a6fb9de18810ba9e3659a7144b80aa066a9f386de3030fc4985efffd13c0cab7049a09a71dc1dfa21a1540f4289b13dde08c0d3b4a01fd2bcb4e256b398c94036935bc270713a24c51042bac575ed4827e17e5dc2997753fcee0ecaaca582c85518edc0c3dee2851fa4d2581f7b399f07013ca3d1d4702cc27be134cfa8aa1cbfecac76f1b406b5b3126c3b7b60ec34340aac6433997656b3dcc1af6c8036f051edfc109a493243546721683fe5c0e48790848079c74ea0640c3f9c92cdd22fab8af9b5575a5d1d2cea0f1f715505cb02a1e200cbe4ea5563d0475cb13bda929286f9c11eab10ddd676314996954ae3c94bd14f364d5202e6ddd20b1b4c7abec1c061b2d8a1776577387a2f2dc424f56d44e58b96f91f7b871627089498d76bbc6664e1ebc9b26486cb727d4a5d62fe405324ceb0a5dbf51c9619f2913e4dcea44c5bac49d74bd049f28b83955e13f0fc77d998a307b0bb560757b21e4a982b59cd5723d66952b8a7ad0311ee6874842f454046538c475b86983b4b8d9c00e814009235a058f6d5fca9e8339555518ba2b64ee925cf0944deff5c14069a1ee1de2cadafaa6421f495c21c042690b3a7c9e6a5a137ee005240308e63e0b1d4bead90ec607d19c57ecc24c2ea9b8ed4af8e5ec19575ba230c19156ff9b23915a7b50666ec4b655a2946f97c5013cdfc31825f2c1040fb28bb8876b1accb1fc005010e5e5d061651dc9df17b7bb37c495a37df9659962680951290f3f4168dffb294f83b2a3c423526a97451e2504fc0c819f4d263834ef7c8588ea4d68c98eb5e3ee3c2de20a6da219b3256400a7c745059581d33158a505d5bb07c75bda324c2d8fe34eadb98520c7b82838835e92ddd1d89516478cb1ca795324f802e1f7a5547f671588fc3e5b909f5ab9d573bb0766569a36e89586b7410b76867cad6577022e9be567d1a5578361d83b817fb994758c679fcfd6b22c9fa7c6c76f2a72be566e42167247c831f826d9a10e03874b9747783adece88750be1206a07923cd9fe06b677b61c69a7dd9e0f9dc60771ac529f6adaeee9ee6652cdeca5789c7f242266d86f0154a1984402c720adbc3dc79b6eece6d378555d78873844ba1cf057f385e70474132e0bdfabe169a631e07d12fd21f18736013499081e58d72e9cd451df304a5bf52c1f1723a5ec8b7992d8fa3f33d5be97d4c114fd435a94607f8be09812bc1fa4db028644e2fcef5d86ffb947a14993a93185b054a7cd9ad734c62f2d9ce3c0f9e2e8678bae5b92315f60169aa85d4ae22488cfab72b841374ac3f39966b9e126ad64c0307b54085b6e25d51caef51fecae4c5ddbfb5c29b15cc90ec0795123a84d3c31173b49096d617707d9e192da82493ac9884759115c02ba4686ed464d523aad69167e24e5303ac3eb3da0eebcc420fdc256cc26d466f979c8e637344958f02ba9d3a481693fbf13283d7d276af546abf2f2bb4e6c6f835c97e532bd5b40e8b08eea4441e8a9e03021add36c4fe28180ea466082e4fd7facb03f7abd47c929c4e0d84132835e59f8276ac7fddec7755cba924dd1c97e02691f13f2e159b1e358ef2ba347e2298b0b39f5ffdab57daae22d94ba5064abf716c866b64add8e3981b76a77a3a8be0a462594b9e1257e7940b237875e000c0e23a0841a85da6eb5af931dc0ddfe912285d160f12a66ebc8717fd37c13d20cc132218d31680d596ffbbb2f2805fd931c61693bcbe365f0d19c8fea4ff3eceefe09c5e29b7fde3782b8adf4bb1aa7f89ce01fa59d1322a1ccc4d92705e274bdc287312b23ab830968143efe12c8d4ac45e0c72c11f630eb5ae0c835b7f7d32cf261c20f04b7df8e362cb15cf38c531a3988afc8eb957fcee0364049ccc8d8a6935200970293486bb69db1969a2aeb39829cc4bed803e0c266c77b0dffd349ff9ae8f95558a3977775b1bc2dba5be54800a9e9645155315b062d0b5a0491cf90a66e84b581070f30d5796f71e88db0352432e8df588d25c9c9b2dd12b976618551d5625e357737966d9a15fe3cd9d54bc275b6f5993ecfcfbb373c419e2f8ed32fcd56d30db1345987a445ad259e03053244a1ff80c9343538c74845a907b0480f013289cf475df6c989a81aa5ba904a63db328292553fd4fc3a783fb76ee6ae50be4809ea0aaac9a9ba429c9990eb45affca8587972c54fdd677cd14f81404c77e4358212f44826316a927983c968767e7be1c7a36f308b6cab1648780b4f1a568cbb0ea49f6a6352d6ab18d54d442c176037ad16e18a17d88cd8fda7e86895c89368239f0f75f8c26f850316a328c40efcf316d8829ddb0fb69b250e41b94144e0475acadf63e51f27f6ecb6af4ed78ddce68c055b7a1f78ec1174bf9d67f54838da11655980a909ae1b80a2e6282137c75e49d703e6d5b4be616e62b020a8d08efd14912337a75857920f1d3515ab2771d38d8d8f610c9801d0b0c8d3388c75d211ac4e4c0c491d3b70e1bf1b926a6fabf60487613e76e6f779c4aed60929561ed06c676de7d5052f60db62e446ca4e2775b966f74a2ab55466ecac93c65e48d5e6b88080f24534ca63dd1e6781920be3010f3e9ceb771c5509754ebf963de75b4b9c9116ba7f4e21d9d89d2df167d8c5674b2fa61f49f016b4269e602c6e144de4a382fb7f185dcd82942081d6362f335695587d2ed1071a70bb27d51200a1de03763bec6b2c7a86d8f200505c07f25fc6be9c044110607154cb69efcbfce495dc86dc634e20349712d3754ce99a8b33cc59ce272e39f481b729c878399e51976652b4a525d107ebbd809909ec95f07f2012672601eb9ada5e0b3292d68b6ff8d529a2dcd23f7150d77ba5b1a36701d5954d37ee96501f9efa8e037290f6dca8c024ec0a2ced95b8dcbfea0ddc55dac8ffa55e224d33fdae74502f8f0085fdb5d6d031d34a609db4ed63ceeb285f3697049800bd560e31bfdc6862a49da0ff4b4e84bac9f184e08181c7870058559f826977e851f7dde09163b8b3cc82be8103f7baea3072202ffce888f1bbe37cadb748e2a3b3b53cf38b4336a4eadd0afffd76389b1dd9d067888c4e647b07a7643b81fc08a15872f08f6295eb45e7838021253432f2bdfca6c2a85aa70efea06863d3ebfdc555f41abceb6fc1a5f92448e917ae97706dc04adf0b7bc817c1b93d2f924b118fac5fe6053093401a4676c6d7ce7b4ceae1f5c149b1d8d712d32d56bc8430c210a7124e192e387ed9696df38ac2763e3a065c3ae4726afe9c16b07891bf5243c16add2bf494f9ae8b7566d4ee600a7fcc945d4bdd305daf4df51b1c0222e5594c65af003b51549e0e790ef194943d4accef39419ba173d05788ff822d4e3d4fb5a612fb13292aa377e50a44a6953bb793d0c521c2179012a882b74ece2f79723fb75624ae9c446ba358a3effd738ccb59a856f1bb5afe8635e1033936d58da18ea1f7464758e4647ac03552bcd1be22ef9d4c0f4aea0d7d1c91234ac50d5192bda73b0e63a8303ee284009e6f42c0a8671cbac1c02ac67f096cdb67e83a8d3a8b0e2915fe4e498d50a80892a374cf637cbdc145c2a4a16e0449fd300f7f03b9c80b320addb404d3b7388e5473a6502c74a9d614b21f2526b2e4f9fd9c5adca0f01677b57de5a55d60d9c428c6833d7abb14514926e09bba6b07763aad75d0a934b7c44976be43c289fb238aeff7556183515a5c4b085447922adff5498d29e101a60ff02e893ce8fb8d446874914eb3d3009db46a579d14dfe884d22d9ca5bfde436f4bf334c8c8e73cad66d26b9b711b3a2a3ea84d6864945e529bf59d397ed0acca03a3bb32e470c46cd6639cdae83b4e8e6decd2e8574e1b9361e2600bdccd6c9231ddb2b5981f4148984e0d21d2bc7c54fa7b32144192d32a60bb17520e855b14ea6ba31068d4e209a5add8dd6cec44932063adac2280f985cc70099a1fffb3cdc3134604bb8e50ede70ce9db412a309a21a0541662050f545cf6f2fbb39e9106e83d34dd1a7f9f08b66e68052482a68778687aac8b793ca24cf3d258d7991c4d2c0eb760d1b83dec08277bce87bef9883ff7af63a927a509eb44ffdf2f8f2a529baee6c68478a1f8a10c81fc3fe0a88004843f05d15b34d04149508d7b29ff2b11ad5e150269dd78545f0f57ca1752f6197a8539ab3aef587645b5dda3dbf18060d30c3426f2fff04d9bf22f1591762597d72cd6225f01377293696235f084801440fb9590bf6468e73c11d7de5c7c9899d6a84a9bbe18c8238e117ae4e74ce9c087957935630399f186f4712caa2775ee026f1c9f334bfa2ea897f2cef8f6d2f200bb2fd7d9292c056149cb3091d54be657c5efb690dd7290b7f866330d8b64cdb134019ba3c608bebca348fac2ee3891d54ce18d427de0e8270ca0b19b5cb9ab69ff7bfce6b5c6431fc794f1a2ae04975dfca6d865e38a85d0092b339119f43ee8f11f999ff0132145ef65f2786d9dae9c45dff0ff2195bfc604db64e4da4b681dcb6a3e2be4f691bad02abb6347e7ffb00172df452182679d10029a878d14569825c6df61c229e158f92a6a0e0590722313729ecc3c93a9de9f044e62d3abdf500ea46557e90649aeb8cc582bfb6fa71042b330800d50aebe27e1b7605c3aca1f67c4116d93a1d59d7f9a9d7dacb2c949193b0e901291474ed0f6b746c680b337ccc6adcccddfee2ba9e31f588940931c6d697222b14220ece34f97d640f78eafe33d689d8c5e94ba3eaccb197728d58924f1325c5951246898b2477057915ce4caea524151e7f3cb049441ae88014b89fe7730eed66c4161b2e01d608d977d674edd37527433214b40081ec8a262da3f69f07dd54acc3a8dc5058a927bf7ac5d3ff18e0e526cda9eeacc331cfecac11d2bec5872fdd5cff5f7459a42f263304294b139fd7106149b962873b757a2db3ee8e030a8ea3af3366fa5f3226d9f9de3c48dcc0f701ac74385d2b753e655804a834456e17ee576872bb5e9815bd6ab6a4555ce5fdcfd0b1637357424813dfa6443a46200dbcd46f7a15d342c14e5b99c1e53953283d83e81311eb2537162005d2bc0f18b336e33f7190d4cc4ab8a86f596ac2522b6fe3aec0befaf024e35f811a309c8a03734e432ac4695d977d6fc14c93773edfe0eab4b5a0a6d55b4ccd205086b92107a434b119d15f145d0f3511f823e69a4b3777b659555f06116cd99075982c200e36eff85d7931c7b918af5504bb4129cf65c8a33964b3b6fd3b2340fd3737c73f7667632cbf81535b88096e99a5e98ffee00409948eb2b46010a275ffdf345bc0e359ae4c2b6b804a36ec5018db1ddfd43ed28e0982be3dd61a41fc78221bfaf4eea3c94e8819e2d296a355bf61cc29ad69e2baa9caa77f4587be6bccfb178d553bb99bdf52716e6a8e2626505b819cc595f5173d13340fde8dbb4db3313a66348c8cf5fddfe7d7fd04becc8fec0ee1385ce5329088e772f1939fd59e2dce71c2946044fdcd131e06695ebfe5ae6e512640d0ea79492c20880391bffb1b3c9851cfba1b5b16d5860baa2a2b1f4e0a571aa3551cd73256e171c2590687e3596108defc56ca6cefb27095380b0bfff828d897c5f4a1f7710cc1fbe37ce9254c27edb772093e789a7e2a941d676fa8f14edf641dcb06fbd638e74a3764be77ccb7f93b5f961be59a6df0c5305b6ab3a20ead2d3eadd749fff40762a25833c9efbe377d2aae40b18e7785a77f9eb4f05f987ac7572854859f5fc5f56240e94305543baf5df3fb905a1122d20d09d7133923783f4d1e30ce9bc990e1d4989280cdcae75b5a78ff48ec68254373f9a57663255c0d5a18bc78b3cf2002befdf0cbb3cb5e76243b963e16ef7a34a06016dbd728117ed141ce213dae5acc96930ef9320938084dec3f77ee4e595b496648896de03deef6fcf49f6477a04a0b190fa668ecb8dec555db55d7ba7d0151042dd4f205e50f53ca706d93c9ae1b67b51989ad1b3ebb27f2416588397429d2129bfe0d5fbc7888fe0ca49754024224ba6fbd089214122d5c5dfacf7fe314c34581b80fe2f0786f7a70788a1dc27bce9f69daf04f197e9fe3f735a339f6f88067636e23559d1a02cd1d8b70fb07146532a5b404a4491d8650a22ed0f49088e86054e76656f079074ae121f5039c5a128109551c3ad7bfb874de16f639a82f0cae1ba1e26cb21bb8ab0ffd0fdda61da950d00e9a9d319c32757cceb80c07716cecf71f96dc167d760bcb54c8c41387d7fb8b5f884a0f7f53acced99690e1316a8f2005edcce538b3b511a637736a08c932fe9f54e281535c9ebe5716228cef9648813df7f0ce70b5107833eb4025e11f93aa574ca8215ce3dc6a5069f03f22a2224d9d2f8c819714b3b02f32066785f9aaf616afa69a3c031f1d1ece51d541f60d6b8e739b63b0f6472b93e5e34cbca3474b47deec1d72ddf91baaafa42078c177469e8099ef4a80758225c7839a0ba643dc3c88fb01ca0f278f077675f0f3bf3319931f129dbd9ef04dd0daa8cf8bc6573b6b2091b64326a366df67a739f27f8c20f47ea3bea9a9880b0aa3b558c56f6596b0f51b124b78b717336142cc03823f2d75c0ad84c09868cbd0dcfae4ccf37b345a26d5e08b20c36505447042ee2ce81f450a835d7e0b679c0c9eae37ef6982001a8c52708c5db0ec2294a90b9876eb789ab09af859a0a879cc27d2f52dde9e9a6960fca2530244cc26d3a21cb294458d707dbe2441460d79d1783fb334a3d144339bdd635b676a1b260f5969bf089d59a526f56bdcf92bbb2d52cb268ccca6c66e4ceefa57c72cbdf8a4e1a2b57ff356f8fa49db680fdbaa3d4df9f1d6201307a44a9ebef9ab8c893518d71beceba645d6df155f6aa68163f8d66b40c1084b673ac16b287f763d40db303c4c9f9e76a3e8fff77d595e97f7e59e56b02aa8f005d0c6830931892207e25a11520efbce320b99362de47e093fdd48318cef9458ab6b4093d1480ab1424e82695527412d0c5e3c299eac02b67ee503a9d04d31431d172f50666fa59e778dc43ffb7eb3f78324a5cd88601f7109bf3bc03f0256ec90473715c9a626a8488a4ac0403438c7fb97438334506f3718c262c6fb671cc1501e1616281c50c1f1abb0e796b5a989d9419e9146784619689562ee006255b58c5030d4deb7bd4e723d5dddced22c58905adb6a1b319ff10a8610912023c965c87e8b9f50babf746950ca2b356c1a9cc1cb8180a3536b2a639a147f65a8178fbe711c5fffb8fba62069c74e02ee7bb219bde7f581ed080e33ada55e37013823fbe5eaf8f7b774209a75b047e7626b8b82733f525e57792ca6c79bd882c5bfa323fc5ed98227c892ff958a359fcf654cb8facb6827d717a899ab9b4d2093e7a3762ba0c9f7ad55124173a5bb29f9f8769484f698dc8f8b394816dd74eff3b1a7dbdf16096bd0ad1b5bd409d56783b6d418631be43d241d6b834e1e8107bd9e296f9aa43e90ef753d6ad527875f230f6b1d3914692840fd51e8048ef5ecc8e7d2da90645c8e0acbdb3803d677cb07714a5fbaf0caa48234e6abfd0cc1be8a80ea7e956ec40a54ce712c979d9d108c28566d3c71c93c25fd7c202c637aa06f1baa00ed6262f87062cbc03e7722983a7c87645ad8d6e0df84112139cd220b03e3b874dea9b9705efa254db06927ab7951eb72ea84b253e0bb877b77fb1810b078ba9f20280d7e85fd9d134ee7166cb1cd51525a5bde7cf96b26569af11b40dbf5b4b25a662c9e14dc084cc349bf451cc976d1de3ef735d001c18d7e6027fdba88d29016ba395ab7f6b1d232151acca1ee234a287c2d7843223db3df6e3e5325a9fc82d92b0baa4a28fc927a3c3d307f7a7ca1ec7a54e8b4a56c177aedb633425bc7676a10c0c2d51b5555f4757c2c9908cf39eee8f85913216c5df40fc6a04dc460e99f55844700b4e02ef7a81ddf4bfa798e5ea327d2c66db67c608afb6ea5753ade25c620d52a5ff2c1d43385737d41e7e6cc645b1f9dffacdc0e8cf72a9128abd66cfe77f2c273e7efb2c6d3ddf4848a023911b7287797cb7a3baff8df5f4d8baf2d30d8ef3daa330fe4728f2fc405bf82b6360d1c9f78d17fe13bad721756ec2bba578702ab8a41c094b22a2ea393e9d4d597e5d0c2f12ab5f21d4546ac61e0b96ad5bc47586bd42edd8caf964cd2b997e0bd816ffd593d5481a8ab543384f8090d7cc0d9d4dba9001992366bbd61949f2b33bb6633f45554e879ec6399f11a13be5d195c927f9e4fb503c2f7f1af69725add00166a3c6f0b72230416d09687ac6109eb06d16b8321ab293cc112cccae7bd8233a6206b814694eb0057b708a76f7c793115dbd09b6b6808cddd0dccbc2a20c5abd02a91f0846ac0856a5cf7be1319057e48631937a3bfff2d24f0fecb55e929c1c7d8dfddf2fb892926e20c9fe4a84bc1d9dfd203d438a7f989ba23836bd55b1089bcaadbbbf19e8cf001f75059a1dc3daace5ef08b0b55231f3b63ccbcb50805601c86e10e48f90dbae123b55d421df8301a9c67f4cdead045d1ace302b93f9337ada9ed3ea36369cf35577e868383d69cd425ece04e0cdc1940b296c35e1314d837d6fa900d661eed125ada136ae005179a03494e23a245d96e60cbd7a04f9503c227e835e58935e28bdba5446128f0db08dcd9b85049c5c67e357a3a511f37a71df23c25f971df40b9982b1b5ab845bd4870fbcdf4ea319afa2e225dcbe3b4b06b73429467ab402aeb48e3b661a0355cdeefdb754d43b66d1b576a1ec93994587b16fef1d493d53263ba10fae3dd01736b479e33dcf87dd9af58b353bc55b8a5382aff065773ca8e932d8e55a80537dc04193176a1c38082e3d4fbc38ffbac68bfcbd80ea1682b79961ca070d3f7938571303267b2be5afc70f196383a01fabd8952db19f7c5921fd66ef6f44523adb1bb09ed0cd03c14b8fa91b088ecc5152d6e288f2f388b5870733b489081581fcdc2e1483d3a2dd9b1bfabe1732b2ae37041d49727a2bde007820f328cc2118b610793e6a6996e1f336a061eef6b61120049fd0b9f0847409cb3a8ab404c563c1769de2660b073dcb30bb916f3679b5819958ce2f5330634e2361cff5c0915861ec791b0dedf34a845103f7e1041a366e6109b88bcdfea2e0d0d260f16717d67e20c9a0b624f15f1f05339a408dbc7fa3b8395895bf50691bbeaccbfe69bc22e136a37fb9d074d668eaaa2f98af8ee35119d46af0dd9939462cfd2ddeb85792ca7d38d61e2c5109d2c91fc8232503900396ae6a85b7a88c80136699e77c0d7408eb88538cc544a3db250e2bcccbfa8076d70b026d46cefa250c128f8ab95d1ed9f028d56b01489d81da013201747b80513f318b84fca9dd1c4d65f36a82d09d847d550e1854341338456714e0a93424e6146e34994f84cc6bee325ae41d716920dcc0bfec62368546c901a8d43bf94c9bd2cb56283888ca54b758135fbff776c9fa98d50271b172889414b7e948180c03700d2cf3ebf390f0f9c8985900a76be9171f7439c60e18a0db5a46983722ff1489f77d24f2112b9035e65cfd10fe4c560426e464b6759ae5f24116d16f9a3167eadd85389114535f44f8054d463c1b8bab08779d40b74ee854aa6d652aaf40c30d63622eda14aacdbc002c0891abcc764b676a3b049deaf49d6789c7f9cb12bb6f0d1619548bc12b6df69c98a4af5b085c76966b116d6a2cffe4a00733efe59a473985d5602319fab0f04dc3a55be53e9c87726d6ace09dd8343e3e111858a3ae45b35de08b1730fc628265f0afcd3924b9c143450128aaf68f41fd5bd4aedfaa9411bd33032a81405dc45005c62b682112ce0952e1926a47571a8790d639580797e33f991aa9c0b7178448591f044dc794e31acd413e6ec84b3ec0ac0df66e08e9a89727f91620f3f18f9238ada2abf4557d72553f01bebdf62bdf5742d25b47def93114918c643aa2bf8761441ba5e6699760f9370b5c29545606f6003e4c6e4725dbe4078b416022b20c1d2aa30d0dcbb724783777fcae6d2487bb793e9435218f93573064f47408d08a9c39bc44caa91c24177e8283e59cb9be2c46c5329b150478beed8c6e1e35bf56c3becbcadaef963bbc70128a1518c635420921fb37e2252910e270692e8bd641832740d67f2174ff3171ac73c23512bb0682a305899af28fce475f399ffcb310dd96cd469fbbb7629fbceccfc497fc2e469a14943fbd5c4d24c8c89b66f6638daa38cbf9dcb49dcf016d768acdf758356834503afa00b7f5c8116e147c5397c2aa8ec8a241bb2a5dcfd45627821a79dee1ad9b162796b53c59e3938c94a2a531b737b7d108b9f1f42a2164027e7d3922858aa7931dc0f7e0ec8e0fc30c27d4722a4d083115c916da5976680da42e3a7fdbcb8084abde4d1f95f62a2291847c4358cfe83b13b9ec2f1378f75f787b2b573a027b24e9eb8a47188be809666df8772e43672f910eeb1c23355987358a1bf34c3a88c2647a46eb85c1429e2e5123acfce3504e0ccf4b89e9b3de548e2bc16b8e765bb53568070a17b23aee93b0988b67e10dca6129f19083a22e950a6beaffbf958a232d2b40a7966f96d8d6c1d30d4e9d42ee28dbcf0bfde533a8b5c07c32c90c634bbb90471c53658d596fd066db06cf96e76f5563b2dbf17c284fb88a7e389b9340cb17c0707caee7791234d4b9cdc0406a59ad5aa3ebe06c7ac21851139171b188bbe7b43422e3847e30014dc2f4966126c2d23e1d54d0db34fb2f415347f14ccdb4f533d2f4ccfeae45f21b027cda966933daa5732464d7e125f32b05447fe1d15170654b53a5fc3ee1d2d8427096d1f71f2bfa3e240740c879ab752f0b14d1d17fd880f05d65ff64a05bc08f69d97fb63dd78346b9ca038d79764cabd013d57fb3506d4b0ccef1c92bbd704aaba9cb912e6034ec9ab77210531c9a1266c272ce3261dde19b9a574fe5a7a031416011100ef594396adaed9f884d18173f0fbf256e47d5c57a47864a3d592c2324c39bb6b9f8cd770e23e5884fbfc119eace855f4f21356a57f912c9e27fcd292534cf2ce0e0490aca08b4df6a3faa614239252279fd2c3df91e054129e1ba23fd9b7a90ed0cbc1f9f8790ebb11bec7b0b07a228054e1f8bb4241ab3a66bb6a224bafa455ebf835e5cc1b0f7701e2e64190091a577dd835afc77e72f3970721e1b6fd64ed65abe1b7376eb58e3273254b2da264df7a97286ac43f1c55f1b50710f54cf02da4023260084aa143dff539c5c7d5951767d0ca6b48d5ae8dcfd1727774ad1c5e7273c2aa5076c0a0fa3ff8f1bdd088fbfc17040808f3bbaa83a228b573694aa171d4fcdf13185e0a010788698eba537240a9ee729d7af975b4a8637901fa3aa401cee44a0940b4378ec67b101784d07fea844a50c542fe2a3e01bda791c2ba0ea9879bb298b7883e1b8ee13a88f9dd3b28813baed3f97c29bc8b9b2a0bdfd03df29f826498abe20f8bb7ef6be2930377c56430b7b0ffafa4193998c32fb12ab1ff63695a3201e227698fa8fcdb065c9c3a82d2f0b8a78ddc9afd5a1c5b135b019c22a46d8401559149293420d91aa98397741e9cf6bd30134bd8b5f3c5a1889e5cdb61aeb0f8a052417c5dcc3eda52fd90b2a8c2ade1a0cba31ccc88a78e1573f68ec6104fab6c417c631e90bb9ee10daba4cc047ce30b2eb735ec694521b7a87edf3e15fbacc941269090845894eacc56321d38ebd3bf3bdcffe80e3b21e4683736c81a61ced165e3a2fa10b969ddfa1f55d340612e7550144aa43868d2ce06491f2e5e089b1fb3880c17b6040343b795832e1638791ab2d12b1df0ae253aa1b3e9fe01bb06f7f306c7468bdb397cf4a9977caeb0a3c95adcceb5161f95c985b08d5d703bdd011d2d4a38f16795b54058fa2183ce076cff0762b3ebf56d8d8d0fafdd508449a2f5b0a8692eabfa509dcd0b38f09f4f99e56a0044c61c067a107857dac52e1a364ea053dcb290a7cc1c78420bf502fcd56c804c8729871aae4a4752eda8c1f78de3419afae90eccdc7572a00deb5e1a90d1b8676ac638f011b18cf42c99264d350b77a64a09c433a470f3a2ea988348f59abaa12a1384b0558890e955f1f385c05c740a0b44bb51e9cddd91bdc46c8804eca94cbf9e0fb0c18b770b70f81fe5c9c6554b3a781b22665de565d08fe0b3bf6a57943888d387c19c296827e60eb6b81685016bd1b1c8d95b29eb8c335fd76b208dbd5054b22e1fc0ab4743f7b95d623ca64c9f9afd5285978bc5635a54a70aa16e736372ed027e9518a4d0d0f9951996b210830e6d46ce43272dd0923483f986349321b2184555b6a6573bced5fc778d682085d1970f05cdbe85c936a4634c9821776b4ca2e8dbadf3715228a73c71aaa271ad02bdd76a00aca5bbd2036ef7bf949814e76561a22c2f2ebcc43c7f4af62f5a40e2df2ba612e77adaf6715e1c980aec44b1164ea20020dcb5d9fb7072052e733a0a5b69d175ba8cf48b780b371575e490571e05b3fbff92f1e0fb87abfb18f4f81c8838d5bb155942adcf8911fc3926a22d60bc9037d8eb026ea975c00937d79432be5e791ff1265b396443813020ad11f0e0ee66bcc4d68aca9ebc2b4b8aff28de824007d9d9d00a12ee894e55c565f957f5f0cff21e1219c0badbc99de37c17efaabbbdfa903ca892d5a99a7201813a2ca9cbf7b5d19d779c82af7a1be51cce30ff3820448d2e10b39154573358bb6376ce5413267f6de7d7cfcb8d4d9aeed7a0f6648834b1452c58f397ea28dba8cadd4ef29382d757b78649c6436aa3e38505e1543fad8d22a415f8c0b6afa7bf16cbe0aa85eb9042f0757c8f3ce4e0d432b2b0a328ab69529c5f8bf8da11b0b354858df07e4644aeda913eaec05fdc24b95f6f4307741897662f347ff5785bcb06c0aca0ea708cfee767f385962de34b05f897242256c1eaf5fd9382fa9f07c3b2acc2d0193cc7688fa71448b4374cc3805cec6e7b503a693be2438fb03037d7a70088dc9fe10ac37c84d29c8b5f04648bc23c998872af1df21a88cee43d52ab580248f6d11c0896d25c4ec8068afc138518f52a23c9c8ae8dfba103cc49368a2ba7a6111a8d0e154d007cecd32d9a71c3341ee238d7664d39a263ce2d5efefe4065c1654c4996e5eb10397d78ab6ad8155ab5c815707655d2a85a00187f8ed16ca19f0fbc8c116417420666e9edabb192cb81fc6e2a4fdf00bcbe0ab582a63de69af3d7e7c6ec7f23c09f02a81a221ca2d2edaa751bfd3949ecc3e81d6f518453b47911b0aa13ff53dd8a4af4b6d8f40cf4ed2f5c3e700749aa3211aab791b9e9e899b4e53f3cf1d1c62bbdc06ae2ac394be1a9694858919da321123184a8a07d01e084655b974e8ae6919709ffcc4826f62b6a5dd420b784eb881ae6e682b292d2e575a28eec33e21afe2fe17e024829ed46bb4babce2e65d97a656feae5f5bcd3f10312a5a102bac3e502a468c382349d47b6e7fc4435a8c56d61ca2c33d93ded9f2165c1f640cd23b0f36e64adfd4c5afcba0fe8cab87ba2040efc0c2f00d3fbab933303b1c34f15a60158e5ebf5c82ed18c84c54babe8e1e4910921d3cf829cad909acef813f174ea65802614fb567944b14630d1e4b063c49637e7110a2ca6de4f34935866b3ff0c3643014aba7f8ce5b2701abc1e0f9caa048e7d8fb937bff1c0319a1de8f126a16740d7f0a8833b60b56864f98ea428e2f105ceff6dd30a16bd24da9f75dea0f4ce864bd44bc52b73057527b73f35a7f9e7bfdde6435e68fdd781e82b69b22c09b139b35b5a47a385ecf05cbf2152cb5c686616f81585bafa01d067a5a086cee61113870dfa9bda1b2eb1975403b994e4669b30bd5354784b1c5126ea7313e3230fbab806e8cc7411149ac52029430ce0be92453dd7cb39026ef26451d2f230392670bdc181a0d0b24267d08861c5e5e0d00d85b84a0873c02f678f2522eb8bdb04c2624256e79396404f475be988e4ccdca00ff9c4aa86cc48ac5f05d2ff1ae536c5f576d719862d44049edeb7d25c2e78e328bff60bc1f09db639c10486d65a8da9638080ab92b3c9af7799a8149cc771857f3d36a495fd7e58236beccd8ecb68aa4fdd1f8b3fc21796e7327e0eb730e0cf78567e40a8c0842dc3a9f7451f347af2375ef47b560bf6f9cdc8e682ae9574b9d7c9cb4c764ee84a22303a35b49568d8dc89f74c0447b0f263ec71e4acc6de6e6116085b7edbb61ca4b198e2af4dba714c3fe6b9c821ca1880eb1b896b01d086e80a43ddc9619789c75ca44f8dc9d4013ed4d10c50976201e6f020d6993d42fc902b299000581b04d1db1a4c548a774fff638bccb298f45bd0a30ac11a107e6b9042c41634732855c7431610456d2d163129166cf90feb8df5a72ad9ca31a8613ca3df539f599996904716878028bd884b1a8d75fd0d3fcc6dd8e007f6f9761ba55a00fa6799b6a3ea67a6a55ff8843cfda811582ef1b553b27c05331aae09b5a46aab96566568153afaebb7b4ae5e71f7cfa6fe08aaa52aea18d1551068e25942f623c4b8e8a56f46e352cafe4885dcb1eb19c458580d2049ffd77af8380ff452acf5ab88fd52d7ef112c29ff6464e62465398fafd06ef81bd3fc2b4feecc6f45f0146c96d4a7c0f90e861a1d433c5deac14a019f50511d6ae9f363952c0ba815bbb3774c97c16038e82e39b76bd15f58f6c693a973d1cfcfdfd65ff61efd3d6ded93c3aef8a715097e97d24ddc94ba972fdd68c732e1a9001f3fcc1a71f1f9fcc1b98637899fdb949c281d858130712d5d5408f0208d62f5cd7f81dda2649edca15790c87cd4e24ba48a7ae328822f5a21e57f6fc5a6fcc71d532ca6817f6eea89f76b60e4fc7bd243c2d2163b46ec46ae4be40764f95d1a51efe6f6d8274b668c50cf1de75ca2b4791dbca7c9232d147d568cfeba0b44caf8154bd09fe8a55a8bf1bb1afa95226a827167b13f33b924ca637182b0bac8b56e03327986568016841bd25cfc769000a7c746b2d930d291ea94f371563b92535003c4bec0bea1b134915286a1665b643bd011015ef04ac9d5abd487c0c4d3c6b20a00646b476e518fc0b008960148a123365cb40be362b3b1694a8d5c05d23b018370f616496a52c2cd25021c3795baf897f812f62a5a5721ac8170e79b49cdf906bf71c83af3c445a82a9b0979506e7df0fff03405f717f51c69c995d11456b03cd8bf9395d33fbb127e4cf9d8fc8411a26d42617ff2d64e886ba9fe5c7d5b85b43fc4faf88e7b4eba7145234769d58d53a5c07d1468693b0f93bac6e2cf5a931b11506f556484824d227e448c0a3805f2217f136c1a7d56f3421588e286adec32d32422b95ce8fd81eda1c3e9beed20f03cbe487fdf2d65f59add2bce47cb5f225b2c6c09100225b4276d3cb5b6792be4b8f0489bb750f1188f371880930d79cca6b09b2e3f303f766081097bfbc5e538d3cd4ebf27befc9132225dd7428d444c764860a262e95221f0f1fe57f5ef3e4432d2be9b3c9954a88e58cb329ce9cd37f4fc8494ad1cef800a7bba8d2ce486f7ebd7a5bc9dc73458bda9e4c46c6297469cb8d4e3877ea8db014c04ebd313c6b1ab74abb69b03334d562422a6529b8e68f4262dd3ff05acf1c6d0074d35e4e977c665a26f86d6bae2c4d64114ecfb334c4d575adab7905729ecc6345e3726d7f2c361ab9d75de26315cfeeafcba9bff88c0ce812554b1c6ab0c5765c5618f1bd8dcde547b86af905406ea216e4eb454e59a835fd9648dc5c8c9da88d7a753a2516b50d93e7226868bd0c4c6c2eafa7a0696a8ac2f0f3e6958efc1e6504032b42962ba6eb3c5bf856cbc6bb090d481489c42a8e6d5721b6cc02b34d6650157752126de0cac4c31b7b073e2d6d546476682be55d764f5bb3154d70dfa9244a6fe5580db958e4a766f95a61987102d67707838b177d10d116ad56368c48e815b30fef5fd6554acfc0d9e64d3c4f6b8e9b8ef6af2e09c6126a92f0865045cf97c94070d2fa013be48df5e50bbadd9062fb6183b147f7dede8b571826f81d546abddf5de4f95a97bb75200ef5dec4abef4950b587763db4fcd61017a457c00230cb8aec3bd775980ba70362b6e8d064f81062eabc6149c115feca46efab3b703e76a9241c72f6b6810adda98e1baf07d6a7d8189f6ec869b54941c40080a91980fb827c61c1f7399539387fbec2d1d46a54b1f518859b3a385ca098b86039bba25d2e49b7968281e3e1c3e5c48f2012680d81ccedf131a8c8891b4134bdcfc70854fc7787d03671c9e55185793ff6926ae12f1dfe8cf246fcd33d88d159842e8dfc7c257836c98752b7152039eecefadd80ff76e816146635ed2d36fbcce101eee7daf1515676b9a2b203e1cfc8859d128852e25f9cf924c16d4a47272e495645a6dfde91cfeb39f4e6a1613a901e2bab7c975c885f6424b617475aceb396d0d3da14c102a69987f66f38599c60210dcebeddd8bbc80aefadb225df56b7f48d1ab0a8c92584a41b9fa726a7de8620cd32472c1b89ee1cd0e3da8b595f98672343417f766bd8d9c52f3cc1a9bd6e1c8c1e588c023ac6e5355e68aec6bcc303577faa7bff293265f9506c6107432145deedef7b254d5890c755a39f5b3aee4364373a931e98d5ec011d247fa9ef17a68b2df72810929a628f6ae634f4427c1538dd02e1c9962f33273cb6add06c81d6258de794f09700a9c8b2b6c3a30eeb00ece206d70dca75beff10e9619d80bf0a7d93f24cc82b33640aa992945eac34fff30584801e2ca0fde10854ec1c60cc5c4bf08753009063e7efe7e07a94cce2de1d2add68f2abf5e6fedeb161beb5cbac9ad02c043d3d157acf018751e1140776a7f32d71f34c05cbcdc9c08a7c7a03f596dd7164540566fc54fc1fdc2b23b14f002eff9066b55e30040ff5ac54b8fb6d9d643f939aca40e5005f1d5972feafcaa34f2a72d6ee03ed74fa5e70faa11ad4e8ad2d0f788900aba49c29090a73b3432d9ab5d933c115abe4718cc9e2a2d770e9cdc735ad5991455ee0496b0ef2465e39267af0e36c30da7f3ace53cf3f6010679001e39f6e2a55da65870e9793b447b418ea1e519dca3c2bf0e1d0b0b07ad96a0708f428173694f70a113c0a0f79b3251914d7f8af58d59d6e198bdd6155cc3a4468be06e0af9a1c94c488c9fc6b44e759e43695c0873c1415fbf56c065a3ed585a790bf38784ff3cd7baf3f4b22533d735684bbde582438d213bae7dffaf897289cd0052d6788718be4e3b7c071d3c6c7b75f6e0ff3437e48217e179e35db0f088e80c8aea5749c71fec4985d00647877c9db4a55b51f07198c232adae969c821be6ee6c2b1ebdadb00a8916b1f93b1724775ba9efb421df723d54cf22caeeaa1b6cc7567a4279647a6e099cfe285cb30cea5a1019f43cca22765a15759f20dd681057a0832833c15c54cb1e3f0196aff51abc2b0ccdf37edab8b536c2a4bb072293224e9d4e83ed427b8ab2b92f52a3fa6bc28269618922a022f67f778779bbd3d164aed6747c9639f1628a6643f47dee03112facf7431bfa1954ab2d58c7b02ee380b86bec76fb52093fa5419c17f20b123ef0b0b5c0efded93f18e2c0aef25c1665c3f91a3f7faf4dae9cbd84efd9ec0a5ac4521051118c1e28dc3282be83918c9b23e06363782ad6d6e99f69a016153f70845309cb9d8e85d0ef65aabb02b0648665ae39d5ca7ae9c4de2cb940ad8e9b5e0e59ebf2298c6e16fe35886fbbeecc719f000d9c9764f3f90f66c8f9a243bb25bf84ff7cafb76be8418da346319798866bda42213d5acf00d836b2a0487b7fef2fed4cddf10633bc7f2fc2c0e7e7c8785b9bc1eee0d2d5ba42fafd5360f9c84c1a9fcf8a76ad2916c31d66257c39a760621cd0ae7b4189e051036acd5aaded0acf934fef24fe71a14cadf03afd4b7c1752e0c2890930d3f74b2674bd6135555911face869062ba346fb8bfc45d09f224e69273d4d00d5451ba213c798811eac1b8fdbe4631313aa8e35ab728a1bb9db3c806c46db222980828ecc596b8a081368d73f184401ade2b7f6debae497ef70b13d2aba139f22f233b4299ebec79ec32f868786c60171f0633ba142938699a702eb57a26d9d6b2e955a90f1020e798b3903e9d9dd8f8c98888081174469697170c38d5737a58c8258c8a9361d270357e51b67011ebd39578f6963f18bd050d014b592dc375e006cd02405623bb724b1dade6b3cc632db58ea103ca4a3d939dee5df3307dcbbb3e3d0079fe70c6acfa53430f31075b1ce444454ab8208bc4dd2b71d3d8dec8bc4d49797d2bb3f6b35338e9f1100b6c079f327a639e33cc262fad9b18fb3746829af4c08ad4a84baf08f6cd31070997c6d4b78fce290807a05914db726d20735e0e7058f73856aba4dc8642c0fd52314e856f32e5d0dc7edb7fcf7c5d04e2fea3af94ebff28fa8e886d756049f0e8a4c2d22c94866366ab8b0350e1bab7094ed1337ce3002463e49fc894ccbfd05f133ab0500da55ee616f23b36a748c528ee8e2b792eaf869e606de86d3eb0a7822b7bcef21c010695c05adf371a88b0b36981910ce1317560bf020004077dba0bb55f26249beaa36e7da60d783cf89345b38e3c1b5928b9dcb5a677ec98cd4acdcf960d3ffd40e86c6fa43ffc198c2bb1ba99fc5fed92714591730fbc7a64ab5ef06e18b5f18bd37fa9c3d954239d6dcbba27c3081eb7944d53428bdfa189a83db26d864dfb4bd729a2ea41ec866b8814d8a0664f0dbfaad60dd54ec7c61358ebc416a6bf798fc65c408e48c785e9a0746548fa593858cdd067ae1e0b5a35e49a338dffb1aaba512f5fda377b8f3f4aa6c76f2d33a6d4fa73169a9a2cddbe44b49075efccb37acd99774e63769ae150647f354f0b4b93ff3028c66de35f1d715146cf5d5c1a854b45bb38a5fa45aa211f988b4c9daf94f61ceafbd989d168439c63b388672d2b0bf170b037e5c38e89df56f80d7c6645d7c045f4118fc79b7c667e0072500d627eac7bd3a17614934e238c2f575f4a978fd53246da9d3df02a28b9291cc09a71361b010d1605e86f4f58298cec9be2f7e17aedcecd5d87d7302b2290f1313eff056b100ff9890dd989f495182e2532c691d96aa97dbb2ce6481a0f76b4e26fcd97a02996c39347f90aadad5c4a65e62f9ba6f37fea8df342d5c6cdda448bbe7dfc4a461fa8cbe1c2dc0a78abcaa67129b998e6f9a913a6e7c84e36b936f4db32f000d06bcfe8ae2d5fac04cf45bf3fd3f117bb0b3da685e109a82f200a1e0d7f8522332e5524a3fbc6e864a86f9fbe30558b3263847d890afc1b64e835e1526ebf69d743a13717163fad0f9e058816a176051dac15dd0b7e2f0ece4d367abdb72a339898575595bad4acc3b46b597db68a5b6141f850d243fbe0b3cc113bf7eb27fe4359ddfc4ff3ef16bc7acaa0f3524f310679c03333d3fcaaf2e7507ba98f8dd1b770f36e426250b1ff8a9d4bc25c463ba8a7630a582aea3252e0ec28d656063d6177f74b1c88d457bf9059895e570cecdd6fa724d2015eca9c76ddae2798f82a181582723d0bd2fe875792e22bbd67b111812ef40703d6186261d6be2747c72746960fab45840f4ff6907949f20902b065fdee98d2c13ba04152bbc70eb415b14e172b028771339fb0ca708bf580bd2fb6a6d6efc0990ba5d213fa95f2efdd8b1c1b699841b8e154451c5de23871b54be129af8e3043ec5780cc395f325d33c4d932a30171ad6c362281b895db4b604d1d097b8f4162bca2f6da265e7a2d1130043a9d21c95effcca1ef06d47c6bbb7860392e5b77d17706b5accad18e8bd19ee8ab2e950a5d8f6789119a4dcb02ce64ad5fd29879e948be85c8c35669a06b2fef4fc27ad44a3a5cffff063f9268ba3b8c54a777bb750eac7e3f3ee767a4eeacb1b7019d3eac82fe5f943bd042063df081da663ad14e7f4661e550e495f413002a6d3eab63e159baaeb60fb7766baabab0d22b82221bc37ed6ca672ad60102c15d040e6085a1f4fe67bcf63da0a15205892a04dad9b3ea918adf24d6479fd16e935badebd0aeae1cb6d505ffc29abfff2708db39d1ff6420288b3b779d291e3ac4b944512eca4f63f4e1069281a089d91d3363d15975ffdd1b103e4e2c163bbeb915a5d08454857a9d29d24b72a7e7df6e3a7e90ed517abc95a448aa0179959285247f17cc8d0532fb13738a6a21738ebec71e2e68c55d8a8b77d456b385408650e627970ef13765744f4a72e4990912186a403f71bf2a9b8ac7211a0499266466c65de65157d36302cde084d348ba46da3efc430677bb5b34f75f39f16bc710dbe9c4a4869cc6e820ffc59239b1049720bc24f5e59395f0f0f153bdbf207df37311e0d85db2906f70645c876c000583812026239a535cc06a4a6c2201b19560bf574825662aaea2dfcfb3551752e89459e4082e9196dfbe1251fdb94b9f997689be8e8609d4d78fade40844bbad5caff8a07376bd83a13141c14d0ce0eb0a9b2e621cd7e031660970aa4be5f7dcb5d15c2bd2ede463c6fb2bb6bc1abcfcd7a1af96f1ae98ae81d315af3713d000ab889760c12443ac5fa79a48fafb39bef31b3c3b9c636927e868259e64ee02f2f9a5ba0b9f1c4b2a9e7cb48beb319433419798210d720f6879e4cefe84130bcaf22c1e270f3e7262a578ced12348bfacc7ee33573d2916ea63ae14659f467dd8e5f72115537fecc1406e977438fa47375d11d5327cf409aa1ec22b0d4905084e18135917ce073aa8bdbf4d9057bb2e7ae21cd46342745b6c1a43631a5a25baf33e59e461339e402f29d787463c8d5ac2a889e7d740b7baaa588024c683aef08e721ae1f880966e35e8288b4724d97f6feaa0d812a9e876d10c7c8c222742ed14764b183b66100f3644c98ee165abe1f36a2395279ac1cba57258cc5a26aa5520a16d77f075214e439b6eecf9791cf735066b66cf71442b377775018c9ab44312fb5a40c4833d198a2cfede24b5f8bf7e4231c62c5f33669a2ae631b3a116af83acc02b72e05819f01a5e1f0492b5b11ee1f3a73d8bd473bef885cf88b2e8e35189bbc8ae8c261521a0000cd0bebee7295e8d35df1cd49f078e68993fd10373a53eba652a3f4be4016b27961e93935a059a321c20970e694c4678813216632a684de2ba44885592672cf46e54c9ff27d01b29676ec1c058628ac1e7cb063885c6f6e428195a37698c7f1941c3066480ef3d4c8e1b601b6b65c61b21c10bb3d84d09f7e1eeb38b7c94d1fc658c57106b39cfcad009e4e4b93c6d969b0b7ee231234cc1383e71623de0c1930db8a8dbf266df0e2d924da51d9f49e836b82d2ce0bb30f50bffad57cb960f448965a23a6057140f7da0b5e29caa6f95025027be799a52fcc906cfd6f55cc96e712e11ba2bdfefd3ef150f1f04f6d8de5d7f5f9f9262ffd4c0509078cfeffc27d9bacdcbd99cfea305c080c296d6699654e909a3f8b05ec63ed6bf1c01f9b1b1ebcd5c3d34f8d5e8a5d3386626297e31f510a7dbf67751afc4f77effede7186e0ac5a05c4cc7bbaa0ca610433f49bc9518f1ab48049c1dc8e7ab9ac646e024225326431294d5335d627c3a6e9e8a06d8fbda1720dfd868c071682118c570782845edb082de727983c8e4be4aa9196046dd5a92f7e3e9a3d993613c76af2ed052681ad82d8446aecfbd169b3a659d27f0b012c45b9fd2d5b022492fb34176720daa6af6b61d245cdd44a017fcb0d82b4bc34d8c14d8c815b75616a4b8a0825658e903767625b4514c8ecb6bca7e3cf28d065a4b18456ee149ee611f6a6ed9fc8060a06b0f0a6e3de41e7d4628e915808b939e901cd0e48c11deb612f94b1eb4d589df95e2b19077aaff56d57afa46add91f6274ca2117fdf4ec9ad15f2ce0eddcadaddeb39117da645bc127188f7596ca6c7ec46914c17968e3c2c976a4d71f7f8e853a558d6f09cd504e0475641389dc5811d424893cbc25778b3f9ffe28d83db243f69d7fde1fc646d6726b7ed9ba058a2a69b0a368da3d7da417d71552e231c3334b7b37884f84d831e2952e80b10b205eb9b5c02697e110e3cbaecf4e5af641335a6f8c4d00e8d2862717d2164e4ef64ca969d66b23cdf3bf06f801fef9553859094bbc872153589e8153a49c233294fdffd46656c1304642139fecd39fbb08abd4b8730169b9615d4809910dbf0a2ccb1fa8d0c38c950265c77fc4904f97c11c5e59b9f92bc653e67bbb8ec57e1cb7111dbba62ee56eaf48210af4f5f238490a4aec16c6c60fb4d968915a5a6fb7e6767111a6dca6e279498aa016965c58939dc65f55863d7c21b6885c6c360b46772571acdd7b3eebfbeea2a681e8e10e4ea4d95e259a48bb53059650c9914c768f1b9cdc3998558b5c3fb2bb4a643c85cf4ac4582d554fa71a40235700747589a8f837ee85a9c66d18bb3d010bd28f47505c45bf7d61822152e6acd38b3103115e3f4f4839d9ed1fdc3a9abbdb8885274ebeef30278964b4833509fe21a75875b7a1e59aa1f293c9ebb12e2f8f2f112f99fa17c5eb3e7f4991416e2829f7fe1f851fc3fabfbb6c03ca56f72f11e5a21da6d3a6d9696e7de32137173b91c2f6891fe71089510ce634749312f9ac7124ad7b6757e4ff3d7594057e65742c447d56a91e718ce52eba5bd2d70c9fc35c463a9dc1c8591d8dd2092a7f6686bd784de00568fc57ace7ad9ae6805c37e8b751349b9b3ef1bc5cb2cd17d7a11f3ff522151311ed21e0b9c9c5ad9f1e4787e9cca1732f1666fc70b51e9764e66d1b9d30a1d88d75524d3fb53e5fb3a618b50200ed743ee6b165b147726120793dad8ab8b10e937e32de51ec7e3f2a3dbe047895ea4a6ae75739ec0e004cd0ee5fddea612d85a1ab88d7d2736c6e5272a40a3e47d013763d5a9b196a4c494ebb2ad4c6f72dee216b533bff8a61fb1a5dc95f39b4206ea2530a7844e77df2500fdbe7ef344d09898b7f3c5d8c79e3f9e9e99981c3df0e3dd7505696fde18c154f7e02d9bcfd47521d7381c93ba2cf41d78f561a3f53eccd577758e03fdf162e38e6b7ad8394b396bfd6aafce275591df4e8032d64784b7a731c408694c16a338d771eae93499d4051f8c668712f2c64fdd596bbb9a10a35766928428914a38b8a557856e13f97eda358b4489ff9ca5d523841f17f746948d5aee5698785e51492d8b8f6b6ec652b0c876ceffa2ed67efa633f66e21a5f435caa7a7dcea449d8e8a9bfbbbf8357cf2380a303ef8660522910a645ea39fe978baa4a3fcc588d283046b5267851f872aba05703ad893f89188b0714dbc4866be93dfb1d0d04e374ed83abfa660da4c6c609a3274e432b71475270e532f06da1210163895ef1d4a256adc7f300262158de51086124508d017712fc2eb1e2fd2d92222ad09b2f53009ab06d9bf5f3e71e7383297e63ca640e44389dbb99cf0f4845f71bcbd058bee28d4db1d80a328aba88bdd9a80b726bc51e53a92960a985e7b86ea2a8e88e6e3641180eee8cba7303d54eb60aa3860a0505a143ded66dc49565e0a80c0b31fb85f4966a2154c9d64eabf2dc8ef2a2014cee92a3ba64c27b3bffa528c9bf353195dca0e95329d8dc1d50b8d5f6cba99dfacd70180ba326bafc24a472a65a5929d7928b11443974187af4baf36da0e89ce5f08c5bd698fbfe81810bfd7762c0f5d975fe9c778e4f1166a5e3d8fe0de5a195e128bee49302ad6e1788ad555b9ad8ca4892d11df7867bb6edadc878894a0e199fb4bc05a34e04be99f27af0916cd68dd2fed1b2e9582cc30b8048e2f848d49d2955fd5ba97f0daef913749324112ce2864ba84998510a5281c1df35afedd4f98e3eb6c7b0c0a98b3477bc07e074614cc4d85fae7a151dab1a2ed42c43a38659b2fe859ddba5da7d4f2a8f63442bca4dd3e11b4b981071d764b8e02feed5b956eda0b872885ac801b678a54ee120e31429866ac759f6f373a0f1b95a3f1b42c1087371758e01278a69eff2eb0a2f1221629d020c7754b0ab0de3a0d6a0d2cb1e90f23fe08faff863bac1c837bf6696b734d066596022331c3d1cb3c3bb9be964e396a1e856553b6d968b73066aed50439d8e9a64a332d02a891c1d6e29a81e0bba8ef5a9f86683d83d72391b67b62d1780c77b6457a265da0b3599e0b7918e49208cb5cda359676c8d96191547ffa8cc717cc7b6a6f449349e1cc4beccfe7613f0d3b715e4882a69ef9173ac2c261cb62291602d61bf53ad9652186dbde45ffb908d1316e4ed3c1d0b21e95ea66745ca0f5d480f690d2c519b595ce82e967644cf7b72c9cdf158da5a7e8443a6c7b60c129f2063cfa9b9f8989065880eec8dacf623e93db8e99c09cd5d94df9ef277ea6471ac2911a3c86a92831fbcd52e3b3af31ff8445f043bc48bedb11069ca2b250ea31fdd4228cf2f7735b6012dd9027594afd09f0b5a38c1675fa7f6035d3b5669fc3375cdf438e635b62e7b4ddd003c8e366671bc8e9ef38d448a48e52feb48510daab05d38fa18c7d8c0b3a5e8420f933737a145de6130c74925bdcb3e305a07202f91385af1dc4808d026d33e6dc360391b8358dde02b04e6935c783280eb340fdfd4d015d2e525dd18cda917730df9d19b7eb51ec0f53b3aecdf46ee9f68fbfe0c71896553fc8e85115080ce5ae3937d69820757d54b4ea04476815a5321ecfa8667b5ad5059a4b5c9e4e0968a38900c7faf1d52b895c8420f1ec7fb4839fef81dc2825e602ce89f3c06902b61fc0aeba09483dadc596819019c54d2d1c52ef98bd2f7e6c3053daa2cc69529515d9cec00aa1a6aad3c4f093857fa82cfd78bb540772400277753a1196bd4005a91a3650f65460b3a9a36d6c53551053b95e24d1ec4d078cdce647198ca0463cd7cc0501369399fca08aa9df985e11bcafeb40899d419a851af6398eb3c15ce33a3d90055706c1da634e3120aa28de3eebb9bcb14e7dc2e11834b12347dc58b2292aa14513bb993b78f8121cfbd1778e1ee331461a556887a63c6a67d3265080f3bbf156f186a26bb800c35ac68c0a472eab420aa380146dc9076bc00c65e75e4dba58475e8b2c77b74f292db225fde4f6d2a959f162855519f07b77677a56c7e0e91c7154c9d20e400eca9e868e8cdc17027ee04164bd29678d7b8e6319730f060ca1b246489803918f62f9b7d759add3f3f4dad0a6ef1de4f4077945db34a570cdec7f7958103e0f73ff1ee8c466ea692d1dfaedf7e7a7e94484e1ca6204d044f468f4527844f765cf4eab0a33a680d770ad3507002e35ac84f6687ca59e4fcc3bb51955b2d4d98068d5d44a46ed5ef40704d3fb7d10154f4aebeb5d6a305de2cb6b2711c5770bf878f39f35779620b1d695c2904da2f6a595852630497caae4cc9a822c4751b51cb69d635e6ec47d6972a29c59515e2eaee01a5589c03bc24916b76c32ed9b78950e910211e331b033c052413e24ae325af29db647dd02ca06cc5224a8ddd55f26ac43a83d96e0beae9d7b9ffa31d515340cce114c66a177f8d7c291bdd49c1490e880d8f82ce4ea6f7651404d81367362f2a3e9b0ce311eaa8fb8525cf8690a8f943ce49bef0aa03caa44fcb439b8b7a31a72fbb61208a04697ca3bbf8b5a0606341a0e784d6cb82b093b274ebb4cede80485b612e321be1166e3c84f2bb1789b343863ebaf12ca70a92ac55a78c7998764400fcc9812fc3e8737af721a4d5cc5264f3a291f25e2b52abe5e07a38ed0932614e87fc1bee6b2a8b66b83fbaacf3f1b49270f8c78c5468ed6a7e4d2571d60cb9808c8df22161e553f1fc3361b0d4227e26d087c80693ae4c4477afa54cc53c3b15e1b3f4e137f9366aa52ae0ba3e5f2d50c84d243d55326218faf8ffc2d6e5202bd20e4823f1b4574181a7470dfd658471b2655b40395dc6359ae87a53f19edb007b977cff3c4b0dd1b2b23d4f4b5103cba48612cc2a8d1dcd208f85c903caeba0e6d3a7348a6129c86843df4bd2b5a50699955e9c1d6c6200dc5bb2d90df887813da1b9acc7678755e24da71ba4f60720b57ac93e7f8ca9e4c9c0be6a608008e5f5ebcb631542c9c2f6c408279633b43dd688ccb4679ea0e0d60267f194210ac7d7ff258f76525bb51e2ef7d72bb10161a72083e7de7ec3ce96f53ba4f83eed496525ee2ec23ba0e06713cb094637f2863d945432ccd307ef45e62b25266282b5227cbe0c9b27e2eb55c7c15510ecd3145c01ba5dfa6b57ba234d1548cd65e851953e0fe25805acbe0be413d12526dbf031d07f8e1177d3377a2575fee0dbf74eb62d01187af05ab977b1014a5f52a5a6f20de227f3a537eff328edc4a170dde3649d6778aae839e1e24793b44b4251518f4f39a2d87add841b3eadfca7f57d968e27587bcdf516b425e59866f31c19c2ff71c575fe262536499d92873266e559d4bd873147a449dfc72d80770e045c2d02bc3cf98270d5b66031cc3a8020e688c629886cd664a2e9e01491262a51d5472440257dff2e991101178abdfa061850683747fba1575df27f75a96a4d8aa64da924bb79ebe2e1e23ecefb00e88157f648c9ae937a5cba7d26dba81f9fcef54a4d550b6977656fd6be5226f77799b1b731f7f6f9ead317bb6a370075e4b5314829a0bcb4f67f35435df3a8303081a1d427409b01ba7b9824af827759643cc07c9ab6c20fdf9b94a54a3183d21b6f475f7b7cd8a515c1cef21b386368a39d855a92eabbf9e691ff24556ecaa9e551a8c415d89a0305c15cd8fa9838fca767318f14de9197e878c573bcc853a83107909311d62804fe87c3bfb056cfd43df4c09ea3a0d21f933bf722bfc924d1430ba51efba89d0c5e9450eb71f9e016ef8833d0a06e59829e66398b1114d39479f03d506394ca034388889b5333f1d0bc9fd8f09b7ec5cb4589aab56d96b2a2d16aaeb74d81a011ad5e54bb686c1a8df3a1447c7dc256cb670644010f68c1433c187b32920b9311ed70434f597258ee69a55ee5434c4c80623288f8cc9889498a5fc6653f4b823d6c3e6efe83d1bf4950ec13f9ffed06013b0721962ea59b8ca86cc06f05cdbdd0d2305d93abac05726b527177683bc28b149ffe1fafa89c009dcc0caf55e1d9bfcd1c4fe397d3c5fc0c6da383f4c41daa66263a471ffa9d981e47f85ed33653fdadce24b56b94fb30e567fc6184e01a8905a7aeb5925859118a1060295d50487ba0c1e76ca8f99e22f99a39b809b6505842261b0d4deaf7d83d2fb26bd39d2038bd1353a36ac970cadfdb87056420c78d63ea2b2a7b8289306c163ad35031750bb6adfaedbe1a7d51f5158cc4b04321c13926f56809b0335b6d88b5f779906cd0fcd5b7c0f0bf6d57490865b51ac8c9710997aa076ad1c40cc145e65c02d25485362c3f949763200c123e7cf1bd09cf556070bc874f0ab53e6988f439980de48974db3aa17f6137067fc13aaa24297473b2302d7b44265f473fe4455ee2f9d773feb52ca364a20df1ed7c6c78be155870a586e2132871ea4fad2b4add1d2c7040b46554c5b8586744dfde9612a76439e16bcaab8daf5cc20d89f880251a9fe6208c314095da7ac5ce369c57a576361cb1f66fe1da7513f997fd3c6e77b6d166592a749034ea50feefdc2f7a1bd4e6ec60fecdad23fcfcb829fcc8eaff523797d9dccc24145816b74161f3f6c47ab2b8632b0dbfaf01938edb025a9c9dbbe795dc542c24bd7135c7c5bf361c1c3bbf4a50497c9ef18ebab83833e4452a3df9657850d114a9d102ab023ae9cdb3db837d1b321a9bd69d9a278b97d1e086a2401c1ff69f5b228bf2b6cc7fd1e4aa6433c0bbd64a74a42591dc0ddf278cc12313d7d1b81c316018206e1f349b4ee5e3ad47562795c9478d29946e442c4494b6b6ae6415258f179cf340a9f99f9d16fab1a9f05726e37897d034d3f9b469daf9fe93e4c3994196a07c5f9128f04a17a8261a6e527629565c2890eb803722ec91e30c06ff14f407809e92f184c45440b20cac6f6be27fa691d140e8e584b623ba07dcd1ce6103c844f125671c253961ac00310fe5f4ab96bb88e7d7d7e1ecf63b5af80088110724d6a5ae7a4f6970cb920b3c055d82daf8e0b1ac53aa6679f5ac85959ab6264dcd6528d5a3f1a7c7fb9fc0e2ae9ed1e10a3331a450d6887fc51b0861b5f461369ae74099b381185fe076e2ea69b9eb54a699c9268fce1b3a07daf6b5dfcc4c02975307c9e725c3047e0fd1bca91f3133a5a14ba5cb001ed0523a95984b1a5c1a57bae0f3f556cf9c0ce59c2c4f892d0502ed46471a6745a5228adc2edf9f892b906b5c0e4e033feea3215e2b140993432d4c96c91e566cdea64a5a43648440d6cdce43c803ac6c3532d860473abb463d0737e6634aa9b20c78e73c3bbabb6cef59c8dd38fef882ca0c68866737731ac94fed1f8ffac930777301a35eed5c538ba913a1c63532c5fb6188b5c16ed280267439dca48f966c2a43b4ffc61261a17aee54da1afa7b5d2a92245beadff99989eb90a7c1acd3c6a066446987f64cbd6363bf750761e4d7c6c67f15118f782c7b9dff23b61bc124650ca02f0c8390dbe4ed73f994e1e5b45644838c0c6064624dc7761d3254dca99938bf376bb979921dfc19864a0fa2dbee6eb33800c50e4867e4ad14604e053b9a6339d5aabc5fdfcd160626a11e805572666d182eba3d983ae48df106572c7dec35eff7078d9ccd7e507c1e9a6ca2407231a0783bf13d201c4ddae4f9b77b4fb855f743aee3de013ba45d8a6420a476e52d38afb23c75f2f1bffc4f2ce861daa4ec733a757be06c5c63d086081020ded0e38a7ca7ffd27ba5cb21bc403666f301572e1763b2e60a7c0847244f540786740d26f0d1021a2b81ef853b2f07109f7094d4ae75f4e84cf1bd63ab94cb6a42c38b9825572036ab6961fc49dbb24094b2de3f3365613a04e557359ead16d4ab1e73be6dd71f37e88123c8b94c25c8b2bdeb89c517e413d9d09c6cba7aa3e573a1f5621948761455c665b713877db28d7c062ad721bca8b7b28ecc060b8ed68b461e9db67d4808e9e2446ff7a9f2e59161e6a0fc484afacee5843ceb45e6fcae60af3ddb9749f003d9889039039fcebab673512ecd739ff5b610a9a90029213e112cab2d83a709e19c7ab3ec16bb60b0a53f654f55ad2b734df700a100e5f2ccb0cca15802cffdfcc8076c8f22dbf9a8d42bc6e00b4548acc9bfff67c5d812ba4b35991d6c58fcdd60cd3f708e06ba59abe93bd44831cd6e403fe2d71b54ac7d813cfb4eb047bf799bc95f460fce9549b7a9a489f4ad105795689cfcdc9225ebe59299f6989b58a3e0065a9f646d82aa27fd954f015889562bdd4f897fe642be846cf3afbe2acd4e2e40e842ef4a44956b251a8bad504676ebbe99851701584f2f4f69aade1ffc639cfe3243729c938c15f26f8c8571b5ae94b02cd95b26715034390a1f1648cd35b1f0614baefcd2d7cf27530d6cf8e26f553ecdbebecbc1f6b0f2d3f152c5add956bae4422470d5522af30f13dbeed7580f2d3c9404cdbacd60bba697e85aee7e54ff7b4a6217cd29730c1ab867cf530de44478ab8c3e57c51866136b0497b89749c72c2fb8ae2b9cd77ad8c6d1af8878b66f64acf9df52b15d9bff07669794a751cf198cb5b52228d9e810321dde0381b9e294a60651e199db8bc0784ada92d86dbaf246584dc6c482ae93fe74cfed9d2e708f49de7513a07cb38724c7ae1cc3a2648c1c394fa85c56043060ca058bf7dd4dbe8c515a8057d7c56eed326905f25f00d091a9f6a2e5c528b670ed8d20a1338100dd2df256b7038ca7b92675138ae0283cb9840c9363a320d4ecca6e37bce9776ea21add8af8d470a33dea35c40e2fe88952bb3791de1677e7b9c32acb116e2282c2c78875c685ec1621da3bf69c3ffd3cccd9f0f0b08fe8f1d126f9db0440280a00dce41ed7a43ec3e6429f119ba69c536d6e384fc39715c54bd37d0de9232dc2cb4be2c437cd2b225d1e663e10e49c3de42bf6bde842fa49329adf64d81b1574c368a443aca940dfbe491a33b63db32b3190fe67dfb7fb86994eff1c294fbcc11ceb35ce80a600f80b8c79e60a88a9a38856535203daea2878362368f2e1441f5252878b016cd943828f2eb46da23adec24265b6af97693e065848af0157b3a6a6c65a04b0bcc8755eb1acfbec2792364ad0ad226d5c5a3e7f9ab49de80a49acf8aa5c7616bb4a67c26bcbf466eef8be47fc155ef610c790591cecdb2173295bec56ebf4fd91ef9fd499fdcb68f36e11e6c618b84692cd0ec332c32fa652d952e73c3e3dd35c55a9c05f9b049821cefafaf3a59d7680aa9ce02472e2fe5055125c9b9ba2a7b25d5f6906cf88628b994085604f93a3f72c71d81758c471ffe2e3aeb47a8c17fa5d75276d4fb1123b94098ab68066b45f387ffec1d1c79ce8d905705fa504c8d6811cdb28ff827c1848292ab86f43787157dd05764ec1482f6adcd99c3d54b85c1896083cc31b5c8026d377cf8a4ca5a18cd75f84ae7461a81045c0290558c20fa6956c4f58755dda891ac458a6c915a2076467e537eebe355505fcc2c973695d7dea386a52d2155de2dcf4747ee1374bfae34f1e26bc7f26036a53735013c670e5a97765f637723a0404931b578979b94f25de1d78b8bd6dbc8190112f05654fcc37a2e3af0cb2218c27af91d96b4dac8c15c7891b08e339780fd9cbb3fc54ee9521ec8039151ae5b447e7d818535cdf3f51fa49a9099af7774862866a17bd8cc15acd395773cde28240aef35970651d141b1b4dd950f79db94e41dc623161575815f52f34b2c009c622a8dc0f5e3841a36edfa29f450341137d0a61620dc62db96d6a54702d96b3c71782051a54cf1dd63fb6ffac8adc98f0f85c2d472018d4129e2458df225c357e4c77af6284500ccc6512dbf2368e1057a2a1bb6e95cf5e2421fe6f0b616ece11b16ee36e39ac2d9919423c7d59e77810173c6d6395a93592b4626886ff32925dfc8d6d252ca7b642a8f96bec5b034591c8a8dd5e5bef050e3250fca3698de501b4147c104889e5653931be758151adae8edd7c7a859048951f53eb462b6eb17b571b9324b9e45172bb5b1c93c6923255fba2305ca28cde0c57ec6da95269c836cd41e3cc9f24116267ca0ccff81d644843f10689364df823e60110d295da8a109b616f77464182f1e933abee28bfbe3e893bd059ee8983a0c28621dc1d734c04ab7e3c39650ed778a7afb22e811aae45b0cbd8f2be085e01ae9ae29d98ea42b353f053e1b3e62f0260fb4aaf91c94bedacb06c9814b67792cfc18fbf0c74004714de8146a771fee831a8819432a549765e3d98e0381c4a7595d38a2415dee9b38714ba48f3c1346c2e5a92f5a8a80ec390e78e5faf01ef784e7f9a89746988302cafe62ebc6bea14110f831a65c195a164741beda5d652b95a05b22573d231f7376b3b80335d3fa56e8e72c2dbc695f5252b01966864fc7228549da767b82d7752558f7ccdee1fd86cf25b09c0bf84e6286df14c5cfaedc4529f20863117eeab700bd3cbfdfffa778aed414080fc42a8bdef1901c6d770399857789d317faa24cad19459b7870e7acaa3d6eeab55af56976c683bf101caa052643c878fc505476e8e9e47a9cbe4a9de664d58c79c5c9b66a524c631975db9d4bab2706e97e207a4acaad781d453d39f7a13297459ca8fd3c5486210568907e32505764e8ae1315c2c38b82b8a2196ddb0ba106aadfe33e9c80d6fc404353b4e44bc6695535f505b2e850f3db9741e6aab44cffa74ab724f1a064f4a6db4f5ad8eec214dfd50f7a48b42faed430a590e582fd8af38c59dc0732f03a39130abf80bd7cb216224990b0290f837c605dea7c9ed496a879ca50756c22a92036789068b7ee0b4680d98b0e5a2a3e3087a6eb25e717d18f393ec21ccb7f3e4216999d30ca8589fc7306f11d49e2a2b7c43302697d17b789c3bfb8b1cdbf4517033b234913ce80685bcda0ee097f8a669054bbd016d0f6c307acc0cd308d59cbdf7f87e4aada45e74bfef42954633481911d034ea97cac9323a4799fa82d4714ea6c8afe0da1efa2e9d869e1aee36a5d67b2d0511f77de5d325ff0b42e06c2bd8551cc0cf5cac7c958f9a625ce53dbf76217b52e473d57d1c906e24aa8c34d192ee6fb88cef39afd66b847e6ea395eaddc45d12a1586eb769fbd21b955ce3a499ec868130c8a6f22abda5a5c86c7acf53fec0d1373feecfea2a35039b1dd5f875e715a28224a278ce96ee79c13593e2cba3025232e08e9214042ea99f9380e35587e160a00b41b70f1b0eb4dd71b07336f46079c25be95471de8b42a9f4fb03a1ac104d4ec1ac2c3acd51058d10ca9d3b7b5657d7dec74845d0447fa39bda1fe7dfeaf26daa8fae39fbcdf733ef7ce643572c5d5feefb350df7bd18c9235a41ecae829193e2f47b26408a7b8e9e844158ecaf50b395722a6a476a1bc1212d9b3430c09e802f0d3ef353abbcf29e0fe0358237e2049d1f93e660f5ded31e438b8e7393b68cc6880d4901044081464687079bb02607a4977416ce5d1823d1d9ebcf7562219a2bf767cdc7eaf0a159fd12431106a23e403812c4d948908132242e1c97fabbd69a565b58e922d13a728e92b04c877e05e6e4d877a9d0a3d094305d89495cae047517463b8cc04fff0adee7f44858a6acba6c5b763447b03a42c1918dfb70f54123c18920b0597363af65b66eee6962d91221d23565ea50462518a8e60fc5ff7964e11cd80d04bbb2412e29933c293db3ec78a04f38802ace93251af084677107f9b580f4890a1c6bd45e3225364a042ca09a6a6a5aa53d46f1e3b407fad951694d4c3742c43e10125e8699f48a8d133b8074995abb90e6c1d757aa773558d4a4aea451dafe0aa9b4c926efb29afea8d85959927d431b3809b69c2e65b59e30443c66cc6f864c6eafbd7ef32c8eb7a1dc6a663f5e02acc2249a3a98c91ca21a25544af94e246616c099a4aa12923ffc2ee23a3694098595e2b8a06cd236b39c4977c6e3a1e0a98b4120a0c360bb9127e332cf3dde68d99cb086b9b0ee25dc287e2d3f5420330516cac8a4e04449cb6076c795274f1c54b0ff8d554f38526b09eca3771606195c5c51c7c995548e91171002ea86bd4bca9c893691fae0f689feaf12201d31d0f2a1a3a9ae7e3b70d787bdc0c3a2a76c9b5713ccac9026491bf43b5323140ab2a0547d84ab83a48369baf87565bd8733c6fb9cad027f435f9ef0cbe3c402e5182fc8879b7216394b33b855f48ca8b1f1ac798bcdaa6dab95be3da780be57dff876a641e71f5da35da0490d0639b9c178c95fcb0e1602ee3f645367b2c684b90cae2d4722a1d54afab89642e008970d172d229c1fa4963635b5735e3c2c4ae30cc47a0a906c85f7b38a9335a24e87c2f74aa5c94902d4ddd087a9d5f65cc3fd5cc543545854a47a4d0a53ca653be46c4c0a5bec89c253344b000bc86379a86f2fabde29f2b56e08d6eb3278689e3611b97b22bbfee3d3242b7451af288f34c3ad642ed7352f182baede02a5deafa1844f1084bc4b5bd9ebac1e5766f7038c65868c970dcce1525c4ba4557cfc8647ec40f9043c4b7027350472693fb7371c7c212a368f1191f1cf1872aa3de694ebe05ae0a4f5ede7131856c643d7bec87cb58c02bc22d4df105cdd1810d4b9c07fb41f4cb824c03ac290c3a9d5a76492491616355679ad42bc98b06723ec035049726cc3ffc72072ff46ec39a9e829374b6545d5a2b5ccf34fec3f1755ca0e6e5b228e0674d8df64e3b8de4ba669490198692837079a8828cb0c2090ded5cdc360f67f21057826e4834901f4d306114805513678e4823b290a28beb8204ef99ca8e0d6429c7aa3e2d6dc5ea23ff89d325352fe7c3aa6f47f67d26cca3c51c383b62d27b009235af15ba039e84cc5755e61052f18ff2b16d2e7fab90e94cf30c36b68c2368727cdd247ada97ce1b5ca19e47f42a04c49c1636a68d74e5cdfb53a237d65d3dd421b24ba59ee8f6d47bb3e7bdf2472eefd148a9cff0422d8fdce5a87c43ff8c5b33ec890e619a190f147800cab6d1835ba2bfe2d932e9e595a87246346c5468f1f7db9bf08cb1158e2dac85ccd8ffe8189e30bf0487cdbd5d1fc1ffe34130b8b1a2191c0858d64f1e216a45fdd3e5591f787914cddb4557c88e6f5781d486fbd0c2dd7b68a9f3a9e05d2d29e7aef4f851d421a26d826fb69d1063815db49414296c7a930467649f5b875cac06134f9bcbc2d6bb9c88084a6ba106a6542bd03a786995d03f8c515cf66004b64f5f7bde8986aa02bdd84af0c9f6f9954e86f046950eb139b09f270be9f4b5fdc355a972f0e136144f1fef3be3d48dcf2929464b8bc255c4e814f000db912e999e59d37c272bd5adfa4f68b237bc851c2510b358d194adbd97f6ee38458de219fd1faffa0ab3dc0591aac11f61a3a9342c085d23b6c844eb3ce8c0dcdac17553eb1316d89ede3c84622224d63120f1a23cab58f5462386ddb407afc118398e304124df2358778987f85588356bf2a89874b9b4f83e326e36c9dbbc7d761fcb81ab62a72f0aa03107a5410dfbdc35b8c25e048c25ddcd79ad53ff6cc1b00c294b420c15627fb66d76f93fba4e560163f51766fa15d207b63ade8db5d216b17160b167c098cbc26f19837e15a6bf3ba37f93d5ecce0c14e2c7c780debfa99eba75add973226988bfac7abc0d4f0418469ba08cc4305c60672c97bf71e832de7d48b7cea61ac81e67de5e4971440342624fda46bf6b8af196827b9f85b0ddad4746b67c4ba2d7d4cbf1e7db99ef0a787646414d6a779a05643a821e6c7d22cdedf473e70050f4953d66df272f74676904ec5129fd5469762d8864a3a15819ea7c5a1716b628862e2a4c318d7b96384b75c0de290c035d3444bcd196a3f5ad1464eaa0e0c8a3190cd3d00f9c5cee18c86fed91624784685acbcf82fc86a928449460dc5b791da0e973f110c6e7230bd5b3ec98caafb6d4ae0bbc515664ec0251e66d8f210049797d280563418218f07e430ce2096600e2cb2c797230b403f21ee8e88d2c3b03ca7b3f272b0daf2ce1c2eb069768d92199b31fec315da1caf22e5a422410282772cb91f9a52f7148628889077b3f81d145b8721db54046fcebdf6d9c358c1578f120696e661f51d1d99a44448873e45f02fd7682faf0b7735c9867aa8673b06a91448f34e3f73f997337b47e4aa66248682d88f24daf2bfc0deec8d8a6dedf6b707da048eb899dabb34c4fe53de0fde66e2785d21c790ab1d1584bdfd96906a3ec1c269148a6943da1c537baca09b8adc5b6ec812888e232c76c29c0db0c1c18bbc93a81920c6509aff95fb46704b342b8eafe9581c43d61a65d135da188d4d942bfd0effa1db8e068cb6618f8bff6c0fe227619aaaae571601e749fcedaa100be7386a3c8b68694eaedccb2b9d2e0a6356a0f8bf1b7a2fdb3cc696321fb76a0c35e3f3784164ea184229a60deb76fb919e6860813203a9cd502bb542a216ebe2a9b458daf52df6591c6c5f16ec34b4a35f5c0b5edc4868fe788465f70bc7340ce661d43c178fb6aee2569d4e1f4152d1acc5a32879a6c28191828a8410d28959acd2e51a37619f3ec1c72e425a37065f49a1cccafd1f2b517c2f058133b0a36ff95b6d16274a7776df502bc3909e67bce5d1bd8ecd3d86dec0344c14448ced0428b06e309ff6b61ed1e128fae6728c921f3be87180fbdef2faa17014be6a9085452d7ab3133f51e41ed39d14972bcda0449751868f847a71166f6336df799fca7118e8b474e077d2ee6b73be947c9d3e53d662c915cfcff1f09d67268b0f2767ee0dec62708beb43be805c0b4511b97979176df458fb1a925ffbb05e4b7c58a20946a2ae788f8c4c1559011bdbed1cdb72b7cd8b3bc07f4c281a43ec59b2e169ea9fb9fe106257e8db9207c739374535f7731ff817fd6a97da5aa710192f4d4a88abcfc03ba764bc7e5b372ba36252ebaa2cfcdb05aed4e0b27401e1befc84ecdaa343a4a8185f6f0290ffe91d75b1b2518dd4550a4473e48499c5a92fb457ad30aa3943fb505c14649e7e1c73824a409b28b62cd7363d112292325edefd2f03c936d84995bd6a9d1654f69ff2305fddcef8421c6fa5e95e0804d21326f29090661e8b7d29acad4ed70088e0a02d9e0c20ef28bcf6c6e37f0ea5e8d101018274b1a9581cb0e4ffc249c6ff21507ec348c2b295e0a78295c70db6da3f61e3e060097394d4dd297c791ef4b56be9b01a29139fd0b69e035c332179ab95b905fa9206a6469c25f5b040e6d41fc75c41af2551b1e653bb4cdea718bf56be7aa323ffa7caea162d9737f25854562a0e86ff89bb5933016132a74321b229255a7722120b1cabcc76bdf4bab94b18a321414558f4363d700eaea6b036f292ab2ccc250a1acec76075af3157ad8e301d6c8a38a4cf5c3de2693876f0454db9353919500d13528f47452c4986d3fe2629a3449e8d878f64d29b34b275e4fe742363f99640c3fd23b3d389f23ffdb261c466726dbbcb3c34afa274b28901d1ad577fd38c81fb19bd7550062bb85d31b513614780a02b6b5e3b5b7887a79b97532d503b43d1c7c48c96829feacef3c031665551659f32875674e20f38721cdc1e641ce9fe4e9dfb9e42bf08fc28ed0b03ef218d0b0e127b5046a9b965d8287fc07d20d688150ca006c79be06c7fdc9bb7910613ff3b5ba73d67e8dd2657407b021cdbb78ea5106f1646e9fab0fe2816f78a750ded955e761ba85c819d46a9e2a5ff21cdfc247b7350b0f8ecb1b82b1f991dba6d8b1e63cc69d4a7da94a552e695c6ca72da158fdd2260128890e396f7aa3b62023deff2db64c9a39b6030e9b39d99e280a4fec1683e09bb3787305d649f7ebb7bec1c75b1a6ea0259b734c14a0a2558a99db4acabfd497d51adfa4a46fac0c29d21fc027f0488fb7a2952e576fc9efa0c6f3bbb9725ee8556fb5ab129aa3e3ce912b2df7fc3c15463f649844144f62493b9ca098c5bca1e14e2148aea9ef0b851400b32db71827c0b0b5f8347f36f3e78f2f165f8e3fdea653ba81865efca377df1273b6a1f5df53aada0cc162aa096083a8ff62f6bd1096861fb1aae2851b4e55feb071284c12c6993dba58a4e938ec33d897b5333d67da388a69569a5762165ac069b0f9c00cca0bd1139c96e8265c865c2f8e7c39063bc077f795749cb6076df4588e2b2d07853a1443fcab992c7be89857a004fa930864687868405f9d06cd44a0122e2df619de0c07ddb7bd136ef66b5a49f7c6251915d5361fbf75d8acc6471b2aec8c0d8499c78ea80511fe930ed6f8ff4406b5c061678c0e23dc998804dcd4c7fc166356e536d84a59bc35fd2c111c7aac8ac8c29f5310f40bf0161bc7950978b886f0ce03e2e053e0d426238e9401c126d362e59556ff6bbdd7886000b65fde3390be7c2e91df00f2e15bdf77fc84040f705fe1756c4402679479a18fea45b24ac145764d68c03b2ace1ad2a40c67b027b5a81c8e29ac5d69ea33c39e236c7f906f6a8445b7a88ddcedc5d7a5b3326e9192aaa4b13e12469a21b34c6709660dbbe4844ff9aab8c1af58a076ce7dbe92a63aeaa409de0aed0d76b0da0578f55c4d6cc5b77637710c3498c8cc4718da0efefb279511b4a026d613e50a3fa51401fc786f81708e619a9369b6d9d5daea06836850917d835304fa3d6dbb4dd72ac7e624587ec2437f466db42e2d5c8bb03eb389c0482c087b6c2ea1e81f13a0b3772e452c3d640583c9705267c10d4d5f88f8322d2df8a55ba2b2fd5c7cb1b905a0c2822bd46d86e73018d96953491224866bf73b315490b2cacc59a13c14ce68372fc66c6f76a3ad62c9cbf734bf90b44a0c04f2f7545d501c91ced47854b3a5d3773420c653558b73d3c59d7d3c1689db1782f2ef33fe06b7418229a34768351cf11f61eef9f3839d3e5530af4d089305a32ebd80c97223b67047148a36d8c3eca73f31f2d94c04d70e89173ee68501de0c945b74530795598204e145adc81502d83c2944ecc9a6c42db1d7cd91682e05051e93f714505d75c1553d85e4217ae2af8f40110cc1dc88a3b34653871ecc50420cedba771ff2502b58f3bf353d62b68c365f4c7a6603f3c2a238d3e98594f1ba6e1b08eada2918519a628a45ecae4b17fb39ec117fa16c9448fe1d21645120ba850e71e2947b54cf87c599a6a2827263640041367784ec51b9c37cdbb3627f76f21955d9876ea0283ed22b5a07cec34792d6f9dbb505184eec9ef7f35b8237fdaf2b05fad8d98ce61c635c10fb5d803f9096ed9c7205b421482557f2f7c6807df1f893568181371df13935446ce065beb87a55c2dea524b53c6d4fa06a7806e31ddd78bb4704c5764b66c793128a76b159d914f5d76543df761e1db72935277f57a7a7b2ab9e7fbee199d6b4638094cb89b66fbd8c82e179f53234e5abb6ec764690885115cedd1677f5c8b2887ad48de4af560fa3fdcf7350cc5e6b6b90a23541c6174d906278d63a7b850380c412984e8b16aceb3971f832e85ffeec27da4a05c46811bb9dc4f3693f6036a1fe551da2d57544f4c85708b06f137692d30fb2146cdfad11a65ecc4e0e1afa9f25ff22858b14efbec3557074fbbf067122a39370193dfeb1b41e38b24701506d64986a4cad8853a2a39028e29f46e08b4ea0a88d180c6762ff166212ce8280c6ae78665f9c70803a313030a3e69c41f93f246738e7d5f9862f9f1d126a5fa1d67b18c6a6480c8ee7f5f5b5d24740b6d55fb64acd9435b7d0b6e13abc83a76e075387f6b93296293815504948933d97c33edd95a62f0c28db4d179e49bafceec7973b5657285a7eb9420b22caad226aa8b055495eba5974a94b17f3c18928539f7f4b03e140aefb83f2d5c2b96f74bd2689ef465777f03672d0d744f2aa232e851e5da6dbbea3ab5948b65a60872de801be0665553d27f8b831cd1769bb4cd61140cec1c9bc6677091656eff149a9546ccd453beb00c4a1851f7a67921978c5ee2ca83cc84ad7c5687c556f227f97a6271f072cab034052b22046be0bfaebad6df055d007fc5d7b6cc63aacf4ec075a0e93fc4adf32819397db79d38193450e8fe88e8effb71030ce29e62d64497c1198f8190d3b8b25c8eae993fe86e3ec3519a7a56d533462bf20b7066894af483442d6145cd3702592f6ce789526904b9a916e1c26462338ce9dabbc4ced46be7db7203dbbb84a3bd575a5ce2a624141e7d57ee41481a24d9fce04a6597a376d843ec7f024393bfa4f043a3f0a0ee18c5c8d990cff3c9b6bd7caca182fdf365d03983d95c5bf21bd7cd1929e57817dcb8d82e932e9d4e293f7c7adbded7646c56728c99afde5bdd68e219a10fa986766ac55ba1f05e6e73f0ca5df6826258eb31d002bfd3e0500171cdc9f0dd4fcb9955a058f83b15444ec721c431b9dbf103c252bb34ff11e2eaf153ff5a061dc20f386297e36a7f3ca746aa3a135e479e0ba55cceedb69a7f7624fa975e048d763b3fc94aa7d96da972ddee7f91b7f00d6c1cfde389f4ab05c799aa106556611cd123a26ff6a23a4057a3b2ff2569dd14605968e76993965b7211c5b7405ff5c89cdcfb36283f7fa82ff1da9e26d0269fac8daf9015b93b3b536c5b00a2c7427e199d9807be9893b67f03a9a1970a1a046887e0a8dcf4e6a2cee57ff26b8a664f6c836b28b20082d0387e02d6d42adb8c5f126668c2292cda1123b85e39ffbd389d832138eaa1500b06f16b0d0e5505c970152194e30f8bc3a2ef01385533daec68f3246ef72956036ba3aead3d62e879dcacb7f505698c6687996ffeeefe7d2a0c3648968aec1e2b864a9b36b8f08211e8178883a27a079fe072f08ca49e5ef1ab910ff56ac7d4db6a0e25457c230cf920acad2698536ad3c6bbea096729e2687057b1d998103c0dde7df3d699a35e5b7a297dcae7d42dc5e6a138adada3247fd200f3060be71eaed95f6e17039650bd67ed21569598bba030ca1063affaef3ad2f17d74d33508a3c74b0a9a536a7c4109ffb9bd1e1ab3ea36555c2522f1cfad903c8a51e91cdff895146b56b83fff4680123b35a193c106e845f575c9b983e338793bddd57a0c46acd9298508e556d242d62cdb45e9c0f9bbdcce45a259ae0ffd57dfeaf85c64351e0cf392c4220a6d10c7e178ef8a88c4c1ad63c131cd92df268301730bcfc01f14882e51e9826b793fdfdf5f14ce7c44c59ed399e3a56ab3ede222dccd25736b85ffbf267efd69be2ad7e07a9b6360dcfee822e70f188722d0443239533c664b51d9d6bf46ccf8087116d5baf8dd6e0077800d84c309d7d749851f45d5f843cc369c00fadee5971af41f9451fdcb24138a1f19b9d3f166d6af9a4ac580b8b38c3ae8f0822640222d3563c611071c5ed0d370566ba597913dc6beed7470d7530b1b8ed213a3e6f37b15983e63f61de57cf0996250af0cb47c8c2cbe374678edd248d14f970fbe3c24a0a35a08b517af001b7fcf8cd9a01a4e909a1247600880a0db14025908498233325773bc70c907bffe93a537d60ef9590641987f23e28bf77550609aba6d5e1b13e79b1990ac9ab8b70e96ccf1c7d685606ea0194b40c68e3fcd64b3da521b770052221807de6c4186166a9d7efed120c978fcdb8380d5be361fcb52b5728831d367f29a8879a61d7eab88a95265b583c44068374cd3f26c23a1c62cf33b8f647c9891733ac9428d675510a6c9dfe5b0489c446a8601bd14bff6f637cb030b4dc60f8b17af638ac775a9339d7a4334cee79d830d735d3186adbc52e733f3fb410d20764d418f3863ed2acc874ca4be1aa47df5c24692638d703df3dfa0c7e7a1f3e9993b8f0e7607b4969532a97dcfd30531b19fc76c331b676881217067428c1403fce556557baeeb389b4146fa043d49680239df3182fa576d48c9d40492c78d029d149f1
+\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\rcleartomark{restore}if\r
+%%EndResource
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 155.52 C
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<54574542277320534f525420636f6e66696775726174696f6e20706172616d6574657220646566696e657320> 146.88 154.56 C
+<636c617373696669636174696f6e206f6620656e747269657320616e6420646973706c6179207479706573> 146.88 183.12 C
+<534f52542020746f635f666163756c747920466163756c747920202020202020202020352020202020206f7267207461745f736f7274> 158.16 226.08 C
+<202020202020202020202020746f635f63656e7420202020bb43656e7472616c20666163696c697479ab2032206f7267207461745f736f7274> 158.16 263.04 C
+<2020202020202020202020206f7267616e697a6174696f6e616c556e69742020556e69742031352020202020206f7267> 158.16 300.24 C
+<2020202020202020202020202e2e2e> 158.16 337.44 C
+<202020202020202020202020746f635f70726f6673202050726f666573736f727320202020203239202020202070657273> 158.16 374.40 C
+<202020202020202020202020706572736f6e20202020202053746166662020202020202020202020202020203330202020202070657273> 158.16 411.60 C
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 10 10
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 656.16 497.04 t 656.16 513.12 lo 670.32 513.12 lo 670.32 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<3130> 656.16 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 87.12 46.80 t 87.12 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<44796e616d6963205265636f6e66696775726174696f6e206f6620446973706c617920506172616d6574657273> 92.88 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 215.52 t 107.04 344.40 lo 741.84 344.40 lo 741.84 215.52 lo
+cp clip np
+0.000 0.000 0.000 RGB
+%%BeginResource: font StarBats
+%!PS-AdobeFont-1.0: StarBats 001.000\r%%CreationDate: 09.09.98 at 15:50 \r%%VMusage: 1024 36745  \r% Generated by Fontographer 4.1\r% \(c\) Copyright 1998 Star Division GmbH\r% ADL: 917 200 0\r%%EndComments\rFontDirectory/StarBats known{/StarBats findfont dup/UniqueID known{dup\r/UniqueID get 4092170 eq exch/FontType get 1 eq and}{pop false}ifelse\r{save true}{false}ifelse}{false}ifelse\r20 dict begin\r/FontInfo 16 dict dup begin\r  /version (001.000) readonly def\r  /FullName (StarBats) readonly def\r  /FamilyName (StarBats) readonly def\r  /Weight (Medium) readonly def\r  /ItalicAngle 0 def\r  /isFixedPitch false def\r  /UnderlinePosition -133 def\r  /UnderlineThickness 20 def\r  /Notice (\(c\) Copyright 1998 Star Division GmbH) readonly def\r  /em 1000 def\r  /ascent 917 def\r  /descent 200 def\rend readonly def\r/FontName /StarBats def\r/Encoding 256 array\rdup 0/.notdef put\rdup 1/.notdef put\rdup 2/.notdef put\rdup 3/glyph140 put\rdup 4/glyph141 put\rdup 5/ch5 put\rdup 6/ch6 put\rdup 7/.notdef put\rdup 8/.notdef put\rdup 9/.notdef put\rdup 10/.notdef put\rdup 11/.notdef put\rdup 12/.notdef put\rdup 13/.notdef put\rdup 14/.notdef put\rdup 15/.notdef put\rdup 16/.notdef put\rdup 17/.notdef put\rdup 18/.notdef put\rdup 19/.notdef put\rdup 20/.notdef put\rdup 21/.notdef put\rdup 22/.notdef put\rdup 23/.notdef put\rdup 24/.notdef put\rdup 25/.notdef put\rdup 26/.notdef put\rdup 27/.notdef put\rdup 28/.notdef put\rdup 29/.notdef put\rdup 30/.notdef put\rdup 31/.notdef put\rdup 32/space put\rdup 33/exclam put\rdup 34/quotedbl put\rdup 35/numbersign put\rdup 36/dollar put\rdup 37/percent put\rdup 38/ampersand put\rdup 39/quotesingle put\rdup 40/parenleft put\rdup 41/parenright put\rdup 42/asterisk put\rdup 43/plus put\rdup 44/comma put\rdup 45/hyphen put\rdup 46/period put\rdup 47/slash put\rdup 48/zero put\rdup 49/one put\rdup 50/two put\rdup 51/three put\rdup 52/four put\rdup 53/five put\rdup 54/six put\rdup 55/seven put\rdup 56/eight put\rdup 57/nine put\rdup 58/colon put\rdup 59/semicolon put\rdup 60/less put\rdup 61/equal put\rdup 62/greater put\rdup 63/question put\rdup 64/at put\rdup 65/A put\rdup 66/B put\rdup 67/C put\rdup 68/D put\rdup 69/E put\rdup 70/F put\rdup 71/G put\rdup 72/H put\rdup 73/I put\rdup 74/J put\rdup 75/K put\rdup 76/L put\rdup 77/M put\rdup 78/N put\rdup 79/O put\rdup 80/P put\rdup 81/Q put\rdup 82/R put\rdup 83/S put\rdup 84/T put\rdup 85/U put\rdup 86/V put\rdup 87/W put\rdup 88/X put\rdup 89/Y put\rdup 90/Z put\rdup 91/bracketleft put\rdup 92/backslash put\rdup 93/bracketright put\rdup 94/asciicircum put\rdup 95/underscore put\rdup 96/grave put\rdup 97/a put\rdup 98/b put\rdup 99/c put\rdup 100/d put\rdup 101/e put\rdup 102/f put\rdup 103/g put\rdup 104/h put\rdup 105/i put\rdup 106/j put\rdup 107/k put\rdup 108/l put\rdup 109/m put\rdup 110/n put\rdup 111/o put\rdup 112/p put\rdup 113/q put\rdup 114/r put\rdup 115/s put\rdup 116/t put\rdup 117/u put\rdup 118/v put\rdup 119/w put\rdup 120/x put\rdup 121/y put\rdup 122/z put\rdup 123/braceleft put\rdup 124/bar put\rdup 125/braceright put\rdup 126/asciitilde put\rdup 127/.notdef put\rdup 128/Euro put\rdup 129/.notdef put\rdup 130/quotesinglbase put\rdup 131/florin put\rdup 132/quotedblbase put\rdup 133/ellipsis put\rdup 134/.notdef put\rdup 135/daggerdbl put\rdup 136/circumflex put\rdup 137/perthousand put\rdup 138/Scaron put\rdup 139/guilsinglleft put\rdup 140/OE put\rdup 141/.notdef put\rdup 142/.notdef put\rdup 143/.notdef put\rdup 144/.notdef put\rdup 145/quoteleft put\rdup 146/quoteright put\rdup 147/quotedblleft put\rdup 148/quotedblright put\rdup 149/bullet put\rdup 150/endash put\rdup 151/emdash put\rdup 152/.notdef put\rdup 153/trademark put\rdup 154/scaron put\rdup 155/guilsinglright put\rdup 156/oe put\rdup 157/.notdef put\rdup 158/.notdef put\rdup 159/.notdef put\rdup 160/.notdef put\rdup 161/exclamdown put\rdup 162/cent put\rdup 163/sterling put\rdup 164/currency put\rdup 165/yen put\rdup 166/brokenbar put\rdup 167/section put\rdup 168/dieresis put\rdup 169/copyright put\rdup 170/ordfeminine put\rdup 171/guillemotleft put\rdup 172/Tom put\rdup 173/Pete put\rdup 174/registered put\rdup 175/macron put\rdup 176/degree put\rdup 177/plusminus put\rdup 178/twosuperior put\rdup 179/threesuperior put\rdup 180/acute put\rdup 181/mu1 put\rdup 182/paragraph put\rdup 183/middot put\rdup 184/cedilla put\rdup 185/onesuperior put\rdup 186/ordmasculine put\rdup 187/guillemotright put\rdup 188/onequarter put\rdup 189/onehalf put\rdup 190/threequarters put\rdup 191/questiondown put\rdup 192/Agrave put\rdup 193/Aacute put\rdup 194/Acircumflex put\rdup 195/Atilde put\rdup 196/Adieresis put\rdup 197/Aring put\rdup 198/AE put\rdup 199/Ccedilla put\rdup 200/STARling put\rdup 201/Idee put\rdup 202/nbspace put\rdup 203/Edieresis put\rdup 204/Igrave put\rdup 205/Iacute put\rdup 206/Icircumflex put\rdup 207/Idieresis put\rdup 208/Eth put\rdup 209/Ntilde put\rdup 210/Ograve put\rdup 211/Oacute put\rdup 212/Ocircumflex put\rdup 213/Otilde put\rdup 214/Odieresis put\rdup 215/multiply put\rdup 216/Oslash put\rdup 217/Ugrave put\rdup 218/Uacute put\rdup 219/Ucircumflex put\rdup 220/Udieresis put\rdup 221/Yacute put\rdup 222/Thorn put\rdup 223/germandbls put\rdup 224/agrave put\rdup 225/aacute put\rdup 226/acircumflex put\rdup 227/atilde put\rdup 228/adieresis put\rdup 229/aring put\rdup 230/ae put\rdup 231/ccedilla put\rdup 232/egrave put\rdup 233/eacute put\rdup 234/ecircumflex put\rdup 235/edieresis put\rdup 236/igrave put\rdup 237/iacute put\rdup 238/icircumflex put\rdup 239/idieresis put\rdup 240/eth put\rdup 241/ntilde put\rdup 242/ograve put\rdup 243/oacute put\rdup 244/ocircumflex put\rdup 245/otilde put\rdup 246/odieresis put\rdup 247/divide put\rdup 248/oslash put\rdup 249/ugrave put\rdup 250/uacute put\rdup 251/ucircumflex put\rdup 252/udieresis put\rdup 253/yacute put\rdup 254/thorn put\rdup 255/uni20AC put\r readonly def\r/PaintType 0 def\r/FontType 1 def\r/StrokeWidth 0 def\r/FontMatrix[0.001 0 0 0.001 0 0]readonly def\r/UniqueID 4092170 def\r/FontBBox{-12 -210 1083 917}readonly def\rcurrentdict end\rcurrentfile eexec\r
+d8061d93a824650eefe2785f13cd28a8a226cfb0a1a9915b91e00d2c2cb80ac548a1ab21bed4518a56748942842eff6121b01bc269e7837046266cb27dafd3a4fd0344e68245aa98a5f1b5bc9db554ebffb879f1c082989cf6c044b76f4814df51dcd03f9e3397f3c73d94f85771983bd52fbe6ecbcd9a2cbb7b3636cfb819daa5469925fc89a188732d68c6d06c906d183cb4bd495aed0c41fe6b7333ad90a1674478062c8996476573a0cdad62593c86e4741ecab7b8c75a6bf02971dfdc2c5a2e1c8f74ab1e91315c54e72426da3a62dede611d5967201fe8bfaa5a21c612c0b245fa35c6706b7b9aa3f73ce16604e3109770d367fb30fa663aa8d2b246de733d27174a0b818d54c58c3676435d43949eb9e5e335396296bc3f096fc154616c0b723b0b4a100ed45072f371f77f26e02f1dcc41376638097d79af0a4ddbfc37dd6cb60d0d34ea5a7536c655d95549b8a5a269e7e927c3d89f74b88e17973c2e8d64688089d329abe6b1009c0334d57a6dc34f22efdd933023231fa03fc81093ef255a199448f17d8f67dbc57c38b2fa163b8cef97a6f42e74af55319eb81a6fb9de18810ba9e3659a7144b80aa066a9f386de3030fc4985efffd13c0cab7049a09a71dc1dfa21a1540f4289b13dde08c0d3b4a01fd2bcb4e256b398c94036935bc270713a24c51042bac575ed4827e17e5dc2997753fcee0ecaaca582c85518edc0c3dee2851fa4d2581f7b399f07013ca3d1d4702cc27be134cfa8aa1cbfecac76f1b406b5b3126c3b7b60ec34340aac6433997656b3dcc1af6c8036f051edfc109a493243546721683fe5c0e48790848079c74ea0640c3f9c92cdd22fab8af9b5575a5d1d2cea0f1f715505cb02a1e200cbe4ea5563d0475cb13bda929286f9c11eab10ddd676314996954ae3c94bd14f364d5202e6ddd20b1b4c7abec1c061b2d8a1776577387a2f2dc424f56d44e58b96f91f7b871627089498d76bbc6664e1ebc9b26486cb727d4a5d62fe405324ceb0a5dbf51c9619f2913e4dcea44c5bac49d74bd049f28b83955e13f0fc77d998a307b0bb560757b21e4a982b59cd5723d66952b8a7ad0311ee6874842f454046538c475b86983b4b8d9c00e814009235a058f6d5fca9e8339555518ba2b64ee925cf0944deff5c14069a1ee1de2cadafaa6421f495c21c042690b3a7c9e6a5a137ee005240308e63e0b1d4bead90ec607d19c57ecc24c2ea9b8ed4af8e5ec19575ba230c19156ff9b23915a7b50666ec4b655a2946f97c5013cdfc31825f2c1040fb28bb8876b1accb1fc005010e5e5d061651dc9df17b7bb37c495a37df9659962680951290f3f4168dffb294f83b2a3c423526a97451e2504fc0c819f4d263834ef7c8588ea4d68c98eb5e3ee3c2de20a6da219b3256400a7c745059581d33158a505d5bb07c75bda324c2d8fe34eadb98520c7b82838835e92ddd1d89516478cb1ca795324f802e1f7a5547f671588fc3e5b909f5ab9d573bb0766569a36e89586b7410b76867cad6577022e9be567d1a5578361d83b817fb994758c679fcfd6b22c9fa7c6c76f2a72be566e42167247c831f826d9a10e03874b9747783adece88750be1206a07923cd9fe06b677b61c69a7dd9e0f9dc60771ac529f6adaeee9ee6652cdeca5789c7f242266d86f0154a1984402c720adbc3dc79b6eece6d378555d78873844ba1cf057f385e70474132e0bdfabe169a631e07d12fd21f18736013499081e58d72e9cd451df304a5bf52c1f1723a5ec8b7992d8fa3f33d5be97d4c114fd435a94607f8be09812bc1fa4db028644e2fcef5d86ffb947a14993a93185b054a7cd9ad734c62f2d9ce3c0f9e2e8678bae5b92315f60169aa85d4ae22488cfab72b841374ac3f39966b9e126ad64c0307b54085b6e25d51caef51fecae4c5ddbfb5c29b15cc90ec0795123a84d3c31173b49096d617707d9e192da82493ac9884759115c02ba4686ed464d523aad69167e24e5303ac3eb3da0eebcc420fdc256cc26d466f979c8e637344958f02ba9d3a481693fbf13283d7d276af546abf2f2bb4e6c6f835c97e532bd5b40e8b08eea4441e8a9e03021add36c4fe28180ea466082e4fd7facb03f7abd47c929c4e0d84132835e59f8276ac7fddec7755cba924dd1c97e02691f13f2e159b1e358ef2ba347e2298b0b39f5ffdab57daae22d94ba5064abf716c866b64add8e3981b76a77a3a8be0a462594b9e1257e7940b237875e000c0e23a0841a85da6eb5af931dc0ddfe912285d160f12a66ebc8717fd37c13d20cc132218d31680d596ffbbb2f2805fd931c61693bcbe365f0d19c8fea4ff3eceefe09c5e29b7fde3782b8adf4bb1aa7f89ce01fa59d1322a1ccc4d92705e274bdc287312b23ab830968143efe12c8d4ac45e0c72c11f630eb5ae0c835b7f7d32cf261c20f04b7df8e362cb15cf38c531a3988afc8eb957fcee0364049ccc8d8a6935200970293486bb69db1969a2aeb39829cc4bed803e0c266c77b0dffd349ff9ae8f95558a3977775b1bc2dba5be54800a9e9645155315b062d0b5a0491cf90a66e84b581070f30d5796f71e88db0352432e8df588d25c9c9b2dd12b976618551d5625e357737966d9a15fe3cd9d54bc275b6f5993ecfcfbb373c419e2f8ed32fcd56d30db1345987a445ad259e03053244a1ff80c9343538c74845a907b0480f013289cf475df6c989a81aa5ba904a63db328292553fd4fc3a783fb76ee6ae50be4809ea0aaac9a9ba429c9990eb45affca8587972c54fdd677cd14f81404c77e4358212f44826316a927983c968767e7be1c7a36f308b6cab1648780b4f1a568cbb0ea49f6a6352d6ab18d54d442c176037ad16e18a17d88cd8fda7e86895c89368239f0f75f8c26f850316a328c40efcf316d8829ddb0fb69b250e41b94144e0475acadf63e51f27f6ecb6af4ed78ddce68c055b7a1f78ec1174bf9d67f54838da11655980a909ae1b80a2e6282137c75e49d703e6d5b4be616e62b020a8d08efd14912337a75857920f1d3515ab2771d38d8d8f610c9801d0b0c8d3388c75d211ac4e4c0c491d3b70e1bf1b926a6fabf60487613e76e6f779c4aed60929561ed06c676de7d5052f60db62e446ca4e2775b966f74a2ab55466ecac93c65e48d5e6b88080f24534ca63dd1e6781920be3010f3e9ceb771c5509754ebf963de75b4b9c9116ba7f4e21d9d89d2df167d8c5674b2fa61f49f016b4269e602c6e144de4a382fb7f185dcd82942081d6362f335695587d2ed1071a70bb27d51200a1de03763bec6b2c7a86d8f200505c07f25fc6be9c044110607154cb69efcbfce495dc86dc634e20349712d3754ce99a8b33cc59ce272e39f481b729c878399e51976652b4a525d107ebbd809909ec95f07f2012672601eb9ada5e0b3292d68b6ff8d529a2dcd23f7150d77ba5b1a36701d5954d37ee96501f9efa8e037290f6dca8c024ec0a2ced95b8dcbfea0ddc55dac8ffa55e224d33fdae74502f8f0085fdb5d6d031d34a609db4ed63ceeb285f3697049800bd560e31bfdc6862a49da0ff4b4e84bac9f184e08181c7870058559f826977e851f7dde09163b8b3cc82be8103f7baea3072202ffce888f1bbe37cadb748e2a3b3b53cf38b4336a4eadd0afffd76389b1dd9d067888c4e647b07a7643b81fc08a15872f08f6295eb45e7838021253432f2bdfca6c2a85aa70efea06863d3ebfdc555f41abceb6fc1a5f92448e917ae97706dc04adf0b7bc817c1b93d2f924b118fac5fe6053093401a4676c6d7ce7b4ceae1f5c149b1d8d712d32d56bc8430c210a7124e192e387ed9696df38ac2763e3a065c3ae4726afe9c16b07891bf5243c16add2bf494f9ae8b7566d4ee600a7fcc945d4bdd305daf4df51b1c0222e5594c65af003b51549e0e790ef194943d4accef39419ba173d05788ff822d4e3d4fb5a612fb13292aa377e50a44a6953bb793d0c521c2179012a882b74ece2f79723fb75624ae9c446ba358a3effd738ccb59a856f1bb5afe8635e1033936d58da18ea1f7464758e4647ac03552bcd1be22ef9d4c0f4aea0d7d1c91234ac50d5192bda73b0e63a8303ee284009e6f42c0a8671cbac1c02ac67f096cdb67e83a8d3a8b0e2915fe4e498d50a80892a374cf637cbdc145c2a4a16e0449fd300f7f03b9c80b320addb404d3b7388e5473a6502c74a9d614b21f2526b2e4f9fd9c5adca0f01677b57de5a55d60d9c428c6833d7abb14514926e09bba6b07763aad75d0a934b7c44976be43c289fb238aeff7556183515a5c4b085447922adff5498d29e101a60ff02e893ce8fb8d446874914eb3d3009db46a579d14dfe884d22d9ca5bfde436f4bf334c8c8e73cad66d26b9b711b3a2a3ea84d6864945e529bf59d397ed0acca03a3bb32e470c46cd6639cdae83b4e8e6decd2e8574e1b9361e2600bdccd6c9231ddb2b5981f4148984e0d21d2bc7c54fa7b32144192d32a60bb17520e855b14ea6ba31068d4e209a5add8dd6cec44932063adac2280f985cc70099a1fffb3cdc3134604bb8e50ede70ce9db412a309a21a0541662050f545cf6f2fbb39e9106e83d34dd1a7f9f08b66e68052482a68778687aac8b793ca24cf3d258d7991c4d2c0eb760d1b83dec08277bce87bef9883ff7af63a927a509eb44ffdf2f8f2a529baee6c68478a1f8a10c81fc3fe0a88004843f05d15b34d04149508d7b29ff2b11ad5e150269dd78545f0f57ca1752f6197a8539ab3aef587645b5dda3dbf18060d30c3426f2fff04d9bf22f1591762597d72cd6225f01377293696235f084801440fb9590bf6468e73c11d7de5c7c9899d6a84a9bbe18c8238e117ae4e74ce9c087957935630399f186f4712caa2775ee026f1c9f334bfa2ea897f2cef8f6d2f200bb2fd7d9292c056149cb3091d54be657c5efb690dd7290b7f866330d8b64cdb134019ba3c608bebca348fac2ee3891d54ce18d427de0e8270ca0b19b5cb9ab69ff7bfce6b5c6431fc794f1a2ae04975dfca6d865e38a85d0092b339119f43ee8f11f999ff0132145ef65f2786d9dae9c45dff0ff2195bfc604db64e4da4b681dcb6a3e2be4f691bad02abb6347e7ffb00172df452182679d10029a878d14569825c6df61c229e158f92a6a0e0590722313729ecc3c93a9de9f044e62d3abdf500ea46557e90649aeb8cc582bfb6fa71042b330800d50aebe27e1b7605c3aca1f67c4116d93a1d59d7f9a9d7dacb2c949193b0e901291474ed0f6b746c680b337ccc6adcccddfee2ba9e31f588940931c6d697222b14220ece34f97d640f78eafe33d689d8c5e94ba3eaccb197728d58924f1325c5951246898b2477057915ce4caea524151e7f3cb049441ae88014b89fe7730eed66c4161b2e01d608d977d674edd37527433214b40081ec8a262da3f69f07dd54acc3a8dc5058a927bf7ac5d3ff18e0e526cda9eeacc331cfecac11d2bec5872fdd5cff5f7459a42f263304294b139fd7106149b962873b757a2db3ee8e030a8ea3af3366fa5f3226d9f9de3c48dcc0f701ac74385d2b753e655804a834456e17ee576872bb5e9815bd6ab6a4555ce5fdcfd0b1637357424813dfa6443a46200dbcd46f7a15d342c14e5b99c1e53953283d83e81311eb2537162005d2bc0f18b336e33f7190d4cc4ab8a86f596ac2522b6fe3aec0befaf024e35f811a309c8a03734e432ac4695d977d6fc14c93773edfe0eab4b5a0a6d55b4ccd205086b92107a434b119d15f145d0f3511f823e69a4b3777b659555f06116cd99075982c200e36eff85d7931c7b918af5504bb4129cf65c8a33964b3b6fd3b2340fd3737c73f7667632cbf81535b88096e99a5e98ffee00409948eb2b46010a275ffdf345bc0e359ae4c2b6b804a36ec5018db1ddfd43ed28e0982be3dd61a41fc78221bfaf4eea3c94e8819e2d296a355bf61cc29ad69e2baa9caa77f4587be6bccfb178d553bb99bdf52716e6a8e2626505b819cc595f5173d13340fde8dbb4db3313a66348c8cf5fddfe7d7fd04becc8fec0ee1385ce5329088e772f1939fd59e2dce71c2946044fdcd131e06695ebfe5ae6e512640d0ea79492c20880391bffb1b3c9851cfba1b5b16d5860baa2a2b1f4e0a571aa3551cd73256e171c2590687e3596108defc56ca6cefb27095380b0bfff828d897c5f4a1f7710cc1fbe37ce9254c27edb772093e789a7e2a941d676fa8f14edf641dcb06fbd638e74a3764be77ccb7f93b5f961be59a6df0c5305b6ab3a20ead2d3eadd749fff40762a25833c9efbe377d2aae40b18e7785a77f9eb4f05f987ac7572854859f5fc5f56240e94305543baf5df3fb905a1122d20d09d7133923783f4d1e30ce9bc990e1d4989280cdcae75b5a78ff48ec68254373f9a57663255c0d5a18bc78b3cf2002befdf0cbb3cb5e76243b963e16ef7a34a06016dbd728117ed141ce213dae5acc96930ef9320938084dec3f77ee4e595b496648896de03deef6fcf49f6477a04a0b190fa668ecb8dec555db55d7ba7d0151042dd4f205e50f53ca706d93c9ae1b67b51989ad1b3ebb27f2416588397429d2129bfe0d5fbc7888fe0ca49754024224ba6fbd089214122d5c5dfacf7fe314c34581b80fe2f0786f7a70788a1dc27bce9f69daf04f197e9fe3f735a339f6f88067636e23559d1a02cd1d8b70fb07146532a5b404a4491d8650a22ed0f49088e86054e76656f079074ae121f5039c5a128109551c3ad7bfb874de16f639a82f0cae1ba1e26cb21bb8ab0ffd0fdda61da950d00e9a9d319c32757cceb80c07716cecf71f96dc167d760bcb54c8c41387d7fb8b5f884a0f7f53acced99690e1316a8f2005edcce538b3b511a637736a08c932fe9f54e281535c9ebe5716228cef9648813df7f0ce70b5107833eb4025e11f93aa574ca8215ce3dc6a5069f03f22a2224d9d2f8c819714b3b02f32066785f9aaf616afa69a3c031f1d1ece51d541f60d6b8e739b63b0f6472b93e5e34cbca3474b47deec1d72ddf91baaafa42078c177469e8099ef4a80758225c7839a0ba643dc3c88fb01ca0f278f077675f0f3bf3319931f129dbd9ef04dd0daa8cf8bc6573b6b2091b64326a366df67a739f27f8c20f47ea3bea9a9880b0aa3b558c56f6596b0f51b124b78b717336142cc03823f2d75c0ad84c09868cbd0dcfae4ccf37b345a26d5e08b20c36505447042ee2ce81f450a835d7e0b679c0c9eae37ef6982001a8c52708c5db0ec2294a90b9876eb789ab09af859a0a879cc27d2f52dde9e9a6960fca2530244cc26d3a21cb294458d707dbe2441460d79d1783fb334a3d144339bdd635b676a1b260f5969bf089d59a526f56bdcf92bbb2d52cb268ccca6c66e4ceefa57c72cbdf8a4e1a2b57ff356f8fa49db680fdbaa3d4df9f1d6201307a44a9ebef9ab8c893518d71beceba645d6df155f6aa68163f8d66b40c1084b673ac16b287f763d40db303c4c9f9e76a3e8fff77d595e97f7e59e56b02aa8f005d0c6830931892207e25a11520efbce320b99362de47e093fdd48318cef9458ab6b4093d1480ab1424e82695527412d0c5e3c299eac02b67ee503a9d04d31431d172f50666fa59e778dc43ffb7eb3f78324a5cd88601f7109bf3bc03f0256ec90473715c9a626a8488a4ac0403438c7fb97438334506f3718c262c6fb671cc1501e1616281c50c1f1abb0e796b5a989d9419e9146784619689562ee006255b58c5030d4deb7bd4e723d5dddced22c58905adb6a1b319ff10a8610912023c965c87e8b9f50babf746950ca2b356c1a9cc1cb8180a3536b2a639a147f65a8178fbe711c5fffb8fba62069c74e02ee7bb219bde7f581ed080e33ada55e37013823fbe5eaf8f7b774209a75b047e7626b8b82733f525e57792ca6c79bd882c5bfa323fc5ed98227c892ff958a359fcf654cb8facb6827d717a899ab9b4d2093e7a3762ba0c9f7ad55124173a5bb29f9f8769484f698dc8f8b394816dd74eff3b1a7dbdf16096bd0ad1b5bd409d56783b6d418631be43d241d6b834e1e8107bd9e296f9aa43e90ef753d6ad527875f230f6b1d3914692840fd51e8048ef5ecc8e7d2da90645c8e0acbdb3803d677cb07714a5fbaf0caa48234e6abfd0cc1be8a80ea7e956ec40a54ce712c979d9d108c28566d3c71c93c25fd7c202c637aa06f1baa00ed6262f87062cbc03e7722983a7c87645ad8d6e0df84112139cd220b03e3b874dea9b9705efa254db06927ab7951eb72ea84b253e0bb877b77fb1810b078ba9f20280d7e85fd9d134ee7166cb1cd51525a5bde7cf96b26569af11b40dbf5b4b25a662c9e14dc084cc349bf451cc976d1de3ef735d001c18d7e6027fdba88d29016ba395ab7f6b1d232151acca1ee234a287c2d7843223db3df6e3e5325a9fc82d92b0baa4a28fc927a3c3d307f7a7ca1ec7a54e8b4a56c177aedb633425bc7676a10c0c2d51b5555f4757c2c9908cf39eee8f85913216c5df40fc6a04dc460e99f55844700b4e02ef7a81ddf4bfa798e5ea327d2c66db67c608afb6ea5753ade25c620d52a5ff2c1d43385737d41e7e6cc645b1f9dffacdc0e8cf72a9128abd66cfe77f2c273e7efb2c6d3ddf4848a023911b7287797cb7a3baff8df5f4d8baf2d30d8ef3daa330fe4728f2fc405bf82b6360d1c9f78d17fe13bad721756ec2bba578702ab8a41c094b22a2ea393e9d4d597e5d0c2f12ab5f21d4546ac61e0b96ad5bc47586bd42edd8caf964cd2b997e0bd816ffd593d5481a8ab543384f8090d7cc0d9d4dba9001992366bbd61949f2b33bb6633f45554e879ec6399f11a13be5d195c927f9e4fb503c2f7f1af69725add00166a3c6f0b72230416d09687ac6109eb06d16b8321ab293cc112cccae7bd8233a6206b814694eb0057b708a76f7c793115dbd09b6b6808cddd0dccbc2a20c5abd02a91f0846ac0856a5cf7be1319057e48631937a3bfff2d24f0fecb55e929c1c7d8dfddf2fb892926e20c9fe4a84bc1d9dfd203d438a7f989ba23836bd55b1089bcaadbbbf19e8cf001f75059a1dc3daace5ef08b0b55231f3b63ccbcb50805601c86e10e48f90dbae123b55d421df8301a9c67f4cdead045d1ace302b93f9337ada9ed3ea36369cf35577e868383d69cd425ece04e0cdc1940b296c35e1314d837d6fa900d661eed125ada136ae005179a03494e23a245d96e60cbd7a04f9503c227e835e58935e28bdba5446128f0db08dcd9b85049c5c67e357a3a511f37a71df23c25f971df40b9982b1b5ab845bd4870fbcdf4ea319afa2e225dcbe3b4b06b73429467ab402aeb48e3b661a0355cdeefdb754d43b66d1b576a1ec93994587b16fef1d493d53263ba10fae3dd01736b479e33dcf87dd9af58b353bc55b8a5382aff065773ca8e932d8e55a80537dc04193176a1c38082e3d4fbc38ffbac68bfcbd80ea1682b79961ca070d3f7938571303267b2be5afc70f196383a01fabd8952db19f7c5921fd66ef6f44523adb1bb09ed0cd03c14b8fa91b088ecc5152d6e288f2f388b5870733b489081581fcdc2e1483d3a2dd9b1bfabe1732b2ae37041d49727a2bde007820f328cc2118b610793e6a6996e1f336a061eef6b61120049fd0b9f0847409cb3a8ab404c563c1769de2660b073dcb30bb916f3679b5819958ce2f5330634e2361cff5c0915861ec791b0dedf34a845103f7e1041a366e6109b88bcdfea2e0d0d260f16717d67e20c9a0b624f15f1f05339a408dbc7fa3b8395895bf50691bbeaccbfe69bc22e136a37fb9d074d668eaaa2f98af8ee35119d46af0dd9939462cfd2ddeb85792ca7d38d61e2c5109d2c91fc8232503900396ae6a85b7a88c80136699e77c0d7408eb88538cc544a3db250e2bcccbfa8076d70b026d46cefa250c128f8ab95d1ed9f028d56b01489d81da013201747b80513f318b84fca9dd1c4d65f36a82d09d847d550e1854341338456714e0a93424e6146e34994f84cc6bee325ae41d716920dcc0bfec62368546c901a8d43bf94c9bd2cb56283888ca54b758135fbff776c9fa98d50271b172889414b7e948180c03700d2cf3ebf390f0f9c8985900a76be9171f7439c60e18a0db5a46983722ff1489f77d24f2112b9035e65cfd10fe4c560426e464b6759ae5f24116d16f9a3167eadd85389114535f44f8054d463c1b8bab08779d40b74ee854aa6d652aaf40c30d63622eda14aacdbc002c0891abcc764b676a3b049deaf49d6789c7f9cb12bb6f0d1619548bc12b6df69c98a4af5b085c76966b116d6a2cffe4a00733efe59a473985d5602319fab0f04dc3a55be53e9c87726d6ace09dd8343e3e111858a3ae45b35de08b1730fc628265f0afcd3924b9c143450128aaf68f41fd5bd4aedfaa9411bd33032a81405dc45005c62b682112ce0952e1926a47571a8790d639580797e33f991aa9c0b7178448591f044dc794e31acd413e6ec84b3ec0ac0df66e08e9a89727f91620f3f18f9238ada2abf4557d72553f01bebdf62bdf5742d25b47def93114918c643aa2bf8761441ba5e6699760f9370b5c29545606f6003e4c6e4725dbe4078b416022b20c1d2aa30d0dcbb724783777fcae6d2487bb793e9435218f93573064f47408d08a9c39bc44caa91c24177e8283e59cb9be2c46c5329b150478beed8c6e1e35bf56c3becbcadaef963bbc70128a1518c635420921fb37e2252910e270692e8bd641832740d67f2174ff3171ac73c23512bb0682a305899af28fce475f399ffcb310dd96cd469fbbb7629fbceccfc497fc2e469a14943fbd5c4d24c8c89b66f6638daa38cbf9dcb49dcf016d768acdf758356834503afa00b7f5c8116e147c5397c2aa8ec8a241bb2a5dcfd45627821a79dee1ad9b162796b53c59e3938c94a2a531b737b7d108b9f1f42a2164027e7d3922858aa7931dc0f7e0ec8e0fc30c27d4722a4d083115c916da5976680da42e3a7fdbcb8084abde4d1f95f62a2291847c4358cfe83b13b9ec2f1378f75f787b2b573a027b24e9eb8a47188be809666df8772e43672f910eeb1c23355987358a1bf34c3a88c2647a46eb85c1429e2e5123acfce3504e0ccf4b89e9b3de548e2bc16b8e765bb53568070a17b23aee93b0988b67e10dca6129f19083a22e950a6beaffbf958a232d2b40a7966f96d8d6c1d30d4e9d42ee28dbcf0bfde533a8b5c07c32c90c634bbb90471c53658d596fd066db06cf96e76f5563b2dbf17c284fb88a7e389b9340cb17c0707caee7791234d4b9cdc0406a59ad5aa3ebe06c7ac21851139171b188bbe7b43422e3847e30014dc2f4966126c2d23e1d54d0db34fb2f415347f14ccdb4f533d2f4ccfeae45f21b027cda966933daa5732464d7e125f32b05447fe1d15170654b53a5fc3ee1d2d8427096d1f71f2bfa3e240740c879ab752f0b14d1d17fd880f05d65ff64a05bc08f69d97fb63dd78346b9ca038d79764cabd013d57fb3506d4b0ccef1c92bbd704aaba9cb912e6034ec9ab77210531c9a1266c272ce3261dde19b9a574fe5a7a031416011100ef594396adaed9f884d18173f0fbf256e47d5c57a47864a3d592c2324c39bb6b9f8cd770e23e5884fbfc119eace855f4f21356a57f912c9e27fcd292534cf2ce0e0490aca08b4df6a3faa614239252279fd2c3df91e054129e1ba23fd9b7a90ed0cbc1f9f8790ebb11bec7b0b07a228054e1f8bb4241ab3a66bb6a224bafa455ebf835e5cc1b0f7701e2e64190091a577dd835afc77e72f3970721e1b6fd64ed65abe1b7376eb58e3273254b2da264df7a97286ac43f1c55f1b50710f54cf02da4023260084aa143dff539c5c7d5951767d0ca6b48d5ae8dcfd1727774ad1c5e7273c2aa5076c0a0fa3ff8f1bdd088fbfc17040808f3bbaa83a228b573694aa171d4fcdf13185e0a010788698eba537240a9ee729d7af975b4a8637901fa3aa401cee44a0940b4378ec67b101784d07fea844a50c542fe2a3e01bda791c2ba0ea9879bb298b7883e1b8ee13a88f9dd3b28813baed3f97c29bc8b9b2a0bdfd03df29f826498abe20f8bb7ef6be2930377c56430b7b0ffafa4193998c32fb12ab1ff63695a3201e227698fa8fcdb065c9c3a82d2f0b8a78ddc9afd5a1c5b135b019c22a46d8401559149293420d91aa98397741e9cf6bd30134bd8b5f3c5a1889e5cdb61aeb0f8a052417c5dcc3eda52fd90b2a8c2ade1a0cba31ccc88a78e1573f68ec6104fab6c417c631e90bb9ee10daba4cc047ce30b2eb735ec694521b7a87edf3e15fbacc941269090845894eacc56321d38ebd3bf3bdcffe80e3b21e4683736c81a61ced165e3a2fa10b969ddfa1f55d340612e7550144aa43868d2ce06491f2e5e089b1fb3880c17b6040343b795832e1638791ab2d12b1df0ae253aa1b3e9fe01bb06f7f306c7468bdb397cf4a9977caeb0a3c95adcceb5161f95c985b08d5d703bdd011d2d4a38f16795b54058fa2183ce076cff0762b3ebf56d8d8d0fafdd508449a2f5b0a8692eabfa509dcd0b38f09f4f99e56a0044c61c067a107857dac52e1a364ea053dcb290a7cc1c78420bf502fcd56c804c8729871aae4a4752eda8c1f78de3419afae90eccdc7572a00deb5e1a90d1b8676ac638f011b18cf42c99264d350b77a64a09c433a470f3a2ea988348f59abaa12a1384b0558890e955f1f385c05c740a0b44bb51e9cddd91bdc46c8804eca94cbf9e0fb0c18b770b70f81fe5c9c6554b3a781b22665de565d08fe0b3bf6a57943888d387c19c296827e60eb6b81685016bd1b1c8d95b29eb8c335fd76b208dbd5054b22e1fc0ab4743f7b95d623ca64c9f9afd5285978bc5635a54a70aa16e736372ed027e9518a4d0d0f9951996b210830e6d46ce43272dd0923483f986349321b2184555b6a6573bced5fc778d682085d1970f05cdbe85c936a4634c9821776b4ca2e8dbadf3715228a73c71aaa271ad02bdd76a00aca5bbd2036ef7bf949814e76561a22c2f2ebcc43c7f4af62f5a40e2df2ba612e77adaf6715e1c980aec44b1164ea20020dcb5d9fb7072052e733a0a5b69d175ba8cf48b780b371575e490571e05b3fbff92f1e0fb87abfb18f4f81c8838d5bb155942adcf8911fc3926a22d60bc9037d8eb026ea975c00937d79432be5e791ff1265b396443813020ad11f0e0ee66bcc4d68aca9ebc2b4b8aff28de824007d9d9d00a12ee894e55c565f957f5f0cff21e1219c0badbc99de37c17efaabbbdfa903ca892d5a99a7201813a2ca9cbf7b5d19d779c82af7a1be51cce30ff3820448d2e10b39154573358bb6376ce5413267f6de7d7cfcb8d4d9aeed7a0f6648834b1452c58f397ea28dba8cadd4ef29382d757b78649c6436aa3e38505e1543fad8d22a415f8c0b6afa7bf16cbe0aa85eb9042f0757c8f3ce4e0d432b2b0a328ab69529c5f8bf8da11b0b354858df07e4644aeda913eaec05fdc24b95f6f4307741897662f347ff5785bcb06c0aca0ea708cfee767f385962de34b05f897242256c1eaf5fd9382fa9f07c3b2acc2d0193cc7688fa71448b4374cc3805cec6e7b503a693be2438fb03037d7a70088dc9fe10ac37c84d29c8b5f04648bc23c998872af1df21a88cee43d52ab580248f6d11c0896d25c4ec8068afc138518f52a23c9c8ae8dfba103cc49368a2ba7a6111a8d0e154d007cecd32d9a71c3341ee238d7664d39a263ce2d5efefe4065c1654c4996e5eb10397d78ab6ad8155ab5c815707655d2a85a00187f8ed16ca19f0fbc8c116417420666e9edabb192cb81fc6e2a4fdf00bcbe0ab582a63de69af3d7e7c6ec7f23c09f02a81a221ca2d2edaa751bfd3949ecc3e81d6f518453b47911b0aa13ff53dd8a4af4b6d8f40cf4ed2f5c3e700749aa3211aab791b9e9e899b4e53f3cf1d1c62bbdc06ae2ac394be1a9694858919da321123184a8a07d01e084655b974e8ae6919709ffcc4826f62b6a5dd420b784eb881ae6e682b292d2e575a28eec33e21afe2fe17e024829ed46bb4babce2e65d97a656feae5f5bcd3f10312a5a102bac3e502a468c382349d47b6e7fc4435a8c56d61ca2c33d93ded9f2165c1f640cd23b0f36e64adfd4c5afcba0fe8cab87ba2040efc0c2f00d3fbab933303b1c34f15a60158e5ebf5c82ed18c84c54babe8e1e4910921d3cf829cad909acef813f174ea65802614fb567944b14630d1e4b063c49637e7110a2ca6de4f34935866b3ff0c3643014aba7f8ce5b2701abc1e0f9caa048e7d8fb937bff1c0319a1de8f126a16740d7f0a8833b60b56864f98ea428e2f105ceff6dd30a16bd24da9f75dea0f4ce864bd44bc52b73057527b73f35a7f9e7bfdde6435e68fdd781e82b69b22c09b139b35b5a47a385ecf05cbf2152cb5c686616f81585bafa01d067a5a086cee61113870dfa9bda1b2eb1975403b994e4669b30bd5354784b1c5126ea7313e3230fbab806e8cc7411149ac52029430ce0be92453dd7cb39026ef26451d2f230392670bdc181a0d0b24267d08861c5e5e0d00d85b84a0873c02f678f2522eb8bdb04c2624256e79396404f475be988e4ccdca00ff9c4aa86cc48ac5f05d2ff1ae536c5f576d719862d44049edeb7d25c2e78e328bff60bc1f09db639c10486d65a8da9638080ab92b3c9af7799a8149cc771857f3d36a495fd7e58236beccd8ecb68aa4fdd1f8b3fc21796e7327e0eb730e0cf78567e40a8c0842dc3a9f7451f347af2375ef47b560bf6f9cdc8e682ae9574b9d7c9cb4c764ee84a22303a35b49568d8dc89f74c0447b0f263ec71e4acc6de6e6116085b7edbb61ca4b198e2af4dba714c3fe6b9c821ca1880eb1b896b01d086e80a43ddc9619789c75ca44f8dc9d4013ed4d10c50976201e6f020d6993d42fc902b299000581b04d1db1a4c548a774fff638bccb298f45bd0a30ac11a107e6b9042c41634732855c7431610456d2d163129166cf90feb8df5a72ad9ca31a8613ca3df539f599996904716878028bd884b1a8d75fd0d3fcc6dd8e007f6f9761ba55a00fa6799b6a3ea67a6a55ff8843cfda811582ef1b553b27c05331aae09b5a46aab96566568153afaebb7b4ae5e71f7cfa6fe08aaa52aea18d1551068e25942f623c4b8e8a56f46e352cafe4885dcb1eb19c458580d2049ffd77af8380ff452acf5ab88fd52d7ef112c29ff6464e62465398fafd06ef81bd3fc2b4feecc6f45f0146c96d4a7c0f90e861a1d433c5deac14a019f50511d6ae9f363952c0ba815bbb3774c97c16038e82e39b76bd15f58f6c693a973d1cfcfdfd65ff61efd3d6ded93c3aef8a715097e97d24ddc94ba972fdd68c732e1a9001f3fcc1a71f1f9fcc1b98637899fdb949c281d858130712d5d5408f0208d62f5cd7f81dda2649edca15790c87cd4e24ba48a7ae328822f5a21e57f6fc5a6fcc71d532ca6817f6eea89f76b60e4fc7bd243c2d2163b46ec46ae4be40764f95d1a51efe6f6d8274b668c50cf1de75ca2b4791dbca7c9232d147d568cfeba0b44caf8154bd09fe8a55a8bf1bb1afa95226a827167b13f33b924ca637182b0bac8b56e03327986568016841bd25cfc769000a7c746b2d930d291ea94f371563b92535003c4bec0bea1b134915286a1665b643bd011015ef04ac9d5abd487c0c4d3c6b20a00646b476e518fc0b008960148a123365cb40be362b3b1694a8d5c05d23b018370f616496a52c2cd25021c3795baf897f812f62a5a5721ac8170e79b49cdf906bf71c83af3c445a82a9b0979506e7df0fff03405f717f51c69c995d11456b03cd8bf9395d33fbb127e4cf9d8fc8411a26d42617ff2d64e886ba9fe5c7d5b85b43fc4faf88e7b4eba7145234769d58d53a5c07d1468693b0f93bac6e2cf5a931b11506f556484824d227e448c0a3805f2217f136c1a7d56f3421588e286adec32d32422b95ce8fd81eda1c3e9beed20f03cbe487fdf2d65f59add2bce47cb5f225b2c6c09100225b4276d3cb5b6792be4b8f0489bb750f1188f371880930d79cca6b09b2e3f303f766081097bfbc5e538d3cd4ebf27befc9132225dd7428d444c764860a262e95221f0f1fe57f5ef3e4432d2be9b3c9954a88e58cb329ce9cd37f4fc8494ad1cef800a7bba8d2ce486f7ebd7a5bc9dc73458bda9e4c46c6297469cb8d4e3877ea8db014c04ebd313c6b1ab74abb69b03334d562422a6529b8e68f4262dd3ff05acf1c6d0074d35e4e977c665a26f86d6bae2c4d64114ecfb334c4d575adab7905729ecc6345e3726d7f2c361ab9d75de26315cfeeafcba9bff88c0ce812554b1c6ab0c5765c5618f1bd8dcde547b86af905406ea216e4eb454e59a835fd9648dc5c8c9da88d7a753a2516b50d93e7226868bd0c4c6c2eafa7a0696a8ac2f0f3e6958efc1e6504032b42962ba6eb3c5bf856cbc6bb090d481489c42a8e6d5721b6cc02b34d6650157752126de0cac4c31b7b073e2d6d546476682be55d764f5bb3154d70dfa9244a6fe5580db958e4a766f95a61987102d67707838b177d10d116ad56368c48e815b30fef5fd6554acfc0d9e64d3c4f6b8e9b8ef6af2e09c6126a92f0865045cf97c94070d2fa013be48df5e50bbadd9062fb6183b147f7dede8b571826f81d546abddf5de4f95a97bb75200ef5dec4abef4950b587763db4fcd61017a457c00230cb8aec3bd775980ba70362b6e8d064f81062eabc6149c115feca46efab3b703e76a9241c72f6b6810adda98e1baf07d6a7d8189f6ec869b54941c40080a91980fb827c61c1f7399539387fbec2d1d46a54b1f518859b3a385ca098b86039bba25d2e49b7968281e3e1c3e5c48f2012680d81ccedf131a8c8891b4134bdcfc70854fc7787d03671c9e55185793ff6926ae12f1dfe8cf246fcd33d88d159842e8dfc7c257836c98752b7152039eecefadd80ff76e816146635ed2d36fbcce101eee7daf1515676b9a2b203e1cfc8859d128852e25f9cf924c16d4a47272e495645a6dfde91cfeb39f4e6a1613a901e2bab7c975c885f6424b617475aceb396d0d3da14c102a69987f66f38599c60210dcebeddd8bbc80aefadb225df56b7f48d1ab0a8c92584a41b9fa726a7de8620cd32472c1b89ee1cd0e3da8b595f98672343417f766bd8d9c52f3cc1a9bd6e1c8c1e588c023ac6e5355e68aec6bcc303577faa7bff293265f9506c6107432145deedef7b254d5890c755a39f5b3aee4364373a931e98d5ec011d247fa9ef17a68b2df72810929a628f6ae634f4427c1538dd02e1c9962f33273cb6add06c81d6258de794f09700a9c8b2b6c3a30eeb00ece206d70dca75beff10e9619d80bf0a7d93f24cc82b33640aa992945eac34fff30584801e2ca0fde10854ec1c60cc5c4bf08753009063e7efe7e07a94cce2de1d2add68f2abf5e6fedeb161beb5cbac9ad02c043d3d157acf018751e1140776a7f32d71f34c05cbcdc9c08a7c7a03f596dd7164540566fc54fc1fdc2b23b14f002eff9066b55e30040ff5ac54b8fb6d9d643f939aca40e5005f1d5972feafcaa34f2a72d6ee03ed74fa5e70faa11ad4e8ad2d0f788900aba49c29090a73b3432d9ab5d933c115abe4718cc9e2a2d770e9cdc735ad5991455ee0496b0ef2465e39267af0e36c30da7f3ace53cf3f6010679001e39f6e2a55da65870e9793b447b418ea1e519dca3c2bf0e1d0b0b07ad96a0708f428173694f70a113c0a0f79b3251914d7f8af58d59d6e198bdd6155cc3a4468be06e0af9a1c94c488c9fc6b44e759e43695c0873c1415fbf56c065a3ed585a790bf38784ff3cd7baf3f4b22533d735684bbde582438d213bae7dffaf897289cd0052d6788718be4e3b7c071d3c6c7b75f6e0ff3437e48217e179e35db0f088e80c8aea5749c71fec4985d00647877c9db4a55b51f07198c232adae969c821be6ee6c2b1ebdadb00a8916b1f93b1724775ba9efb421df723d54cf22caeeaa1b6cc7567a4279647a6e099cfe285cb30cea5a1019f43cca22765a15759f20dd681057a0832833c15c54cb1e3f0196aff51abc2b0ccdf37edab8b536c2a4bb072293224e9d4e83ed427b8ab2b92f52a3fa6bc28269618922a022f67f778779bbd3d164aed6747c9639f1628a6643f47dee03112facf7431bfa1954ab2d58c7b02ee380b86bec76fb52093fa5419c17f20b123ef0b0b5c0efded93f18e2c0aef25c1665c3f91a3f7faf4dae9cbd84efd9ec0a5ac4521051118c1e28dc3282be83918c9b23e06363782ad6d6e99f69a016153f70845309cb9d8e85d0ef65aabb02b0648665ae39d5ca7ae9c4de2cb940ad8e9b5e0e59ebf2298c6e16fe35886fbbeecc719f000d9c9764f3f90f66c8f9a243bb25bf84ff7cafb76be8418da346319798866bda42213d5acf00d836b2a0487b7fef2fed4cddf10633bc7f2fc2c0e7e7c8785b9bc1eee0d2d5ba42fafd5360f9c84c1a9fcf8a76ad2916c31d66257c39a760621cd0ae7b4189e051036acd5aaded0acf934fef24fe71a14cadf03afd4b7c1752e0c2890930d3f74b2674bd6135555911face869062ba346fb8bfc45d09f224e69273d4d00d5451ba213c798811eac1b8fdbe4631313aa8e35ab728a1bb9db3c806c46db222980828ecc596b8a081368d73f184401ade2b7f6debae497ef70b13d2aba139f22f233b4299ebec79ec32f868786c60171f0633ba142938699a702eb57a26d9d6b2e955a90f1020e798b3903e9d9dd8f8c98888081174469697170c38d5737a58c8258c8a9361d270357e51b67011ebd39578f6963f18bd050d014b592dc375e006cd02405623bb724b1dade6b3cc632db58ea103ca4a3d939dee5df3307dcbbb3e3d0079fe70c6acfa53430f31075b1ce444454ab8208bc4dd2b71d3d8dec8bc4d49797d2bb3f6b35338e9f1100b6c079f327a639e33cc262fad9b18fb3746829af4c08ad4a84baf08f6cd31070997c6d4b78fce290807a05914db726d20735e0e7058f73856aba4dc8642c0fd52314e856f32e5d0dc7edb7fcf7c5d04e2fea3af94ebff28fa8e886d756049f0e8a4c2d22c94866366ab8b0350e1bab7094ed1337ce3002463e49fc894ccbfd05f133ab0500da55ee616f23b36a748c528ee8e2b792eaf869e606de86d3eb0a7822b7bcef21c010695c05adf371a88b0b36981910ce1317560bf020004077dba0bb55f26249beaa36e7da60d783cf89345b38e3c1b5928b9dcb5a677ec98cd4acdcf960d3ffd40e86c6fa43ffc198c2bb1ba99fc5fed92714591730fbc7a64ab5ef06e18b5f18bd37fa9c3d954239d6dcbba27c3081eb7944d53428bdfa189a83db26d864dfb4bd729a2ea41ec866b8814d8a0664f0dbfaad60dd54ec7c61358ebc416a6bf798fc65c408e48c785e9a0746548fa593858cdd067ae1e0b5a35e49a338dffb1aaba512f5fda377b8f3f4aa6c76f2d33a6d4fa73169a9a2cddbe44b49075efccb37acd99774e63769ae150647f354f0b4b93ff3028c66de35f1d715146cf5d5c1a854b45bb38a5fa45aa211f988b4c9daf94f61ceafbd989d168439c63b388672d2b0bf170b037e5c38e89df56f80d7c6645d7c045f4118fc79b7c667e0072500d627eac7bd3a17614934e238c2f575f4a978fd53246da9d3df02a28b9291cc09a71361b010d1605e86f4f58298cec9be2f7e17aedcecd5d87d7302b2290f1313eff056b100ff9890dd989f495182e2532c691d96aa97dbb2ce6481a0f76b4e26fcd97a02996c39347f90aadad5c4a65e62f9ba6f37fea8df342d5c6cdda448bbe7dfc4a461fa8cbe1c2dc0a78abcaa67129b998e6f9a913a6e7c84e36b936f4db32f000d06bcfe8ae2d5fac04cf45bf3fd3f117bb0b3da685e109a82f200a1e0d7f8522332e5524a3fbc6e864a86f9fbe30558b3263847d890afc1b64e835e1526ebf69d743a13717163fad0f9e058816a176051dac15dd0b7e2f0ece4d367abdb72a339898575595bad4acc3b46b597db68a5b6141f850d243fbe0b3cc113bf7eb27fe4359ddfc4ff3ef16bc7acaa0f3524f310679c03333d3fcaaf2e7507ba98f8dd1b770f36e426250b1ff8a9d4bc25c463ba8a7630a582aea3252e0ec28d656063d6177f74b1c88d457bf9059895e570cecdd6fa724d2015eca9c76ddae2798f82a181582723d0bd2fe875792e22bbd67b111812ef40703d6186261d6be2747c72746960fab45840f4ff6907949f20902b065fdee98d2c13ba04152bbc70eb415b14e172b028771339fb0ca708bf580bd2fb6a6d6efc0990ba5d213fa95f2efdd8b1c1b699841b8e154451c5de23871b54be129af8e3043ec5780cc395f325d33c4d932a30171ad6c362281b895db4b604d1d097b8f4162bca2f6da265e7a2d1130043a9d21c95effcca1ef06d47c6bbb7860392e5b77d17706b5accad18e8bd19ee8ab2e950a5d8f6789119a4dcb02ce64ad5fd29879e948be85c8c35669a06b2fef4fc27ad44a3a5cffff063f9268ba3b8c54a777bb750eac7e3f3ee767a4eeacb1b7019d3eac82fe5f943bd042063df081da663ad14e7f4661e550e495f413002a6d3eab63e159baaeb60fb7766baabab0d22b82221bc37ed6ca672ad60102c15d040e6085a1f4fe67bcf63da0a15205892a04dad9b3ea918adf24d6479fd16e935badebd0aeae1cb6d505ffc29abfff2708db39d1ff6420288b3b779d291e3ac4b944512eca4f63f4e1069281a089d91d3363d15975ffdd1b103e4e2c163bbeb915a5d08454857a9d29d24b72a7e7df6e3a7e90ed517abc95a448aa0179959285247f17cc8d0532fb13738a6a21738ebec71e2e68c55d8a8b77d456b385408650e627970ef13765744f4a72e4990912186a403f71bf2a9b8ac7211a0499266466c65de65157d36302cde084d348ba46da3efc430677bb5b34f75f39f16bc710dbe9c4a4869cc6e820ffc59239b1049720bc24f5e59395f0f0f153bdbf207df37311e0d85db2906f70645c876c000583812026239a535cc06a4a6c2201b19560bf574825662aaea2dfcfb3551752e89459e4082e9196dfbe1251fdb94b9f997689be8e8609d4d78fade40844bbad5caff8a07376bd83a13141c14d0ce0eb0a9b2e621cd7e031660970aa4be5f7dcb5d15c2bd2ede463c6fb2bb6bc1abcfcd7a1af96f1ae98ae81d315af3713d000ab889760c12443ac5fa79a48fafb39bef31b3c3b9c636927e868259e64ee02f2f9a5ba0b9f1c4b2a9e7cb48beb319433419798210d720f6879e4cefe84130bcaf22c1e270f3e7262a578ced12348bfacc7ee33573d2916ea63ae14659f467dd8e5f72115537fecc1406e977438fa47375d11d5327cf409aa1ec22b0d4905084e18135917ce073aa8bdbf4d9057bb2e7ae21cd46342745b6c1a43631a5a25baf33e59e461339e402f29d787463c8d5ac2a889e7d740b7baaa588024c683aef08e721ae1f880966e35e8288b4724d97f6feaa0d812a9e876d10c7c8c222742ed14764b183b66100f3644c98ee165abe1f36a2395279ac1cba57258cc5a26aa5520a16d77f075214e439b6eecf9791cf735066b66cf71442b377775018c9ab44312fb5a40c4833d198a2cfede24b5f8bf7e4231c62c5f33669a2ae631b3a116af83acc02b72e05819f01a5e1f0492b5b11ee1f3a73d8bd473bef885cf88b2e8e35189bbc8ae8c261521a0000cd0bebee7295e8d35df1cd49f078e68993fd10373a53eba652a3f4be4016b27961e93935a059a321c20970e694c4678813216632a684de2ba44885592672cf46e54c9ff27d01b29676ec1c058628ac1e7cb063885c6f6e428195a37698c7f1941c3066480ef3d4c8e1b601b6b65c61b21c10bb3d84d09f7e1eeb38b7c94d1fc658c57106b39cfcad009e4e4b93c6d969b0b7ee231234cc1383e71623de0c1930db8a8dbf266df0e2d924da51d9f49e836b82d2ce0bb30f50bffad57cb960f448965a23a6057140f7da0b5e29caa6f95025027be799a52fcc906cfd6f55cc96e712e11ba2bdfefd3ef150f1f04f6d8de5d7f5f9f9262ffd4c0509078cfeffc27d9bacdcbd99cfea305c080c296d6699654e909a3f8b05ec63ed6bf1c01f9b1b1ebcd5c3d34f8d5e8a5d3386626297e31f510a7dbf67751afc4f77effede7186e0ac5a05c4cc7bbaa0ca610433f49bc9518f1ab48049c1dc8e7ab9ac646e024225326431294d5335d627c3a6e9e8a06d8fbda1720dfd868c071682118c570782845edb082de727983c8e4be4aa9196046dd5a92f7e3e9a3d993613c76af2ed052681ad82d8446aecfbd169b3a659d27f0b012c45b9fd2d5b022492fb34176720daa6af6b61d245cdd44a017fcb0d82b4bc34d8c14d8c815b75616a4b8a0825658e903767625b4514c8ecb6bca7e3cf28d065a4b18456ee149ee611f6a6ed9fc8060a06b0f0a6e3de41e7d4628e915808b939e901cd0e48c11deb612f94b1eb4d589df95e2b19077aaff56d57afa46add91f6274ca2117fdf4ec9ad15f2ce0eddcadaddeb39117da645bc127188f7596ca6c7ec46914c17968e3c2c976a4d71f7f8e853a558d6f09cd504e0475641389dc5811d424893cbc25778b3f9ffe28d83db243f69d7fde1fc646d6726b7ed9ba058a2a69b0a368da3d7da417d71552e231c3334b7b37884f84d831e2952e80b10b205eb9b5c02697e110e3cbaecf4e5af641335a6f8c4d00e8d2862717d2164e4ef64ca969d66b23cdf3bf06f801fef9553859094bbc872153589e8153a49c233294fdffd46656c1304642139fecd39fbb08abd4b8730169b9615d4809910dbf0a2ccb1fa8d0c38c950265c77fc4904f97c11c5e59b9f92bc653e67bbb8ec57e1cb7111dbba62ee56eaf48210af4f5f238490a4aec16c6c60fb4d968915a5a6fb7e6767111a6dca6e279498aa016965c58939dc65f55863d7c21b6885c6c360b46772571acdd7b3eebfbeea2a681e8e10e4ea4d95e259a48bb53059650c9914c768f1b9cdc3998558b5c3fb2bb4a643c85cf4ac4582d554fa71a40235700747589a8f837ee85a9c66d18bb3d010bd28f47505c45bf7d61822152e6acd38b3103115e3f4f4839d9ed1fdc3a9abbdb8885274ebeef30278964b4833509fe21a75875b7a1e59aa1f293c9ebb12e2f8f2f112f99fa17c5eb3e7f4991416e2829f7fe1f851fc3fabfbb6c03ca56f72f11e5a21da6d3a6d9696e7de32137173b91c2f6891fe71089510ce634749312f9ac7124ad7b6757e4ff3d7594057e65742c447d56a91e718ce52eba5bd2d70c9fc35c463a9dc1c8591d8dd2092a7f6686bd784de00568fc57ace7ad9ae6805c37e8b751349b9b3ef1bc5cb2cd17d7a11f3ff522151311ed21e0b9c9c5ad9f1e4787e9cca1732f1666fc70b51e9764e66d1b9d30a1d88d75524d3fb53e5fb3a618b50200ed743ee6b165b147726120793dad8ab8b10e937e32de51ec7e3f2a3dbe047895ea4a6ae75739ec0e004cd0ee5fddea612d85a1ab88d7d2736c6e5272a40a3e47d013763d5a9b196a4c494ebb2ad4c6f72dee216b533bff8a61fb1a5dc95f39b4206ea2530a7844e77df2500fdbe7ef344d09898b7f3c5d8c79e3f9e9e99981c3df0e3dd7505696fde18c154f7e02d9bcfd47521d7381c93ba2cf41d78f561a3f53eccd577758e03fdf162e38e6b7ad8394b396bfd6aafce275591df4e8032d64784b7a731c408694c16a338d771eae93499d4051f8c668712f2c64fdd596bbb9a10a35766928428914a38b8a557856e13f97eda358b4489ff9ca5d523841f17f746948d5aee5698785e51492d8b8f6b6ec652b0c876ceffa2ed67efa633f66e21a5f435caa7a7dcea449d8e8a9bfbbbf8357cf2380a303ef8660522910a645ea39fe978baa4a3fcc588d283046b5267851f872aba05703ad893f89188b0714dbc4866be93dfb1d0d04e374ed83abfa660da4c6c609a3274e432b71475270e532f06da1210163895ef1d4a256adc7f300262158de51086124508d017712fc2eb1e2fd2d92222ad09b2f53009ab06d9bf5f3e71e7383297e63ca640e44389dbb99cf0f4845f71bcbd058bee28d4db1d80a328aba88bdd9a80b726bc51e53a92960a985e7b86ea2a8e88e6e3641180eee8cba7303d54eb60aa3860a0505a143ded66dc49565e0a80c0b31fb85f4966a2154c9d64eabf2dc8ef2a2014cee92a3ba64c27b3bffa528c9bf353195dca0e95329d8dc1d50b8d5f6cba99dfacd70180ba326bafc24a472a65a5929d7928b11443974187af4baf36da0e89ce5f08c5bd698fbfe81810bfd7762c0f5d975fe9c778e4f1166a5e3d8fe0de5a195e128bee49302ad6e1788ad555b9ad8ca4892d11df7867bb6edadc878894a0e199fb4bc05a34e04be99f27af0916cd68dd2fed1b2e9582cc30b8048e2f848d49d2955fd5ba97f0daef913749324112ce2864ba84998510a5281c1df35afedd4f98e3eb6c7b0c0a98b3477bc07e074614cc4d85fae7a151dab1a2ed42c43a38659b2fe859ddba5da7d4f2a8f63442bca4dd3e11b4b981071d764b8e02feed5b956eda0b872885ac801b678a54ee120e31429866ac759f6f373a0f1b95a3f1b42c1087371758e01278a69eff2eb0a2f1221629d020c7754b0ab0de3a0d6a0d2cb1e90f23fe08faff863bac1c837bf6696b734d066596022331c3d1cb3c3bb9be964e396a1e856553b6d968b73066aed50439d8e9a64a332d02a891c1d6e29a81e0bba8ef5a9f86683d83d72391b67b62d1780c77b6457a265da0b3599e0b7918e49208cb5cda359676c8d96191547ffa8cc717cc7b6a6f449349e1cc4beccfe7613f0d3b715e4882a69ef9173ac2c261cb62291602d61bf53ad9652186dbde45ffb908d1316e4ed3c1d0b21e95ea66745ca0f5d480f690d2c519b595ce82e967644cf7b72c9cdf158da5a7e8443a6c7b60c129f2063cfa9b9f8989065880eec8dacf623e93db8e99c09cd5d94df9ef277ea6471ac2911a3c86a92831fbcd52e3b3af31ff8445f043bc48bedb11069ca2b250ea31fdd4228cf2f7735b6012dd9027594afd09f0b5a38c1675fa7f6035d3b5669fc3375cdf438e635b62e7b4ddd003c8e366671bc8e9ef38d448a48e52feb48510daab05d38fa18c7d8c0b3a5e8420f933737a145de6130c74925bdcb3e305a07202f91385af1dc4808d026d33e6dc360391b8358dde02b04e6935c783280eb340fdfd4d015d2e525dd18cda917730df9d19b7eb51ec0f53b3aecdf46ee9f68fbfe0c71896553fc8e85115080ce5ae3937d69820757d54b4ea04476815a5321ecfa8667b5ad5059a4b5c9e4e0968a38900c7faf1d52b895c8420f1ec7fb4839fef81dc2825e602ce89f3c06902b61fc0aeba09483dadc596819019c54d2d1c52ef98bd2f7e6c3053daa2cc69529515d9cec00aa1a6aad3c4f093857fa82cfd78bb540772400277753a1196bd4005a91a3650f65460b3a9a36d6c53551053b95e24d1ec4d078cdce647198ca0463cd7cc0501369399fca08aa9df985e11bcafeb40899d419a851af6398eb3c15ce33a3d90055706c1da634e3120aa28de3eebb9bcb14e7dc2e11834b12347dc58b2292aa14513bb993b78f8121cfbd1778e1ee331461a556887a63c6a67d3265080f3bbf156f186a26bb800c35ac68c0a472eab420aa380146dc9076bc00c65e75e4dba58475e8b2c77b74f292db225fde4f6d2a959f162855519f07b77677a56c7e0e91c7154c9d20e400eca9e868e8cdc17027ee04164bd29678d7b8e6319730f060ca1b246489803918f62f9b7d759add3f3f4dad0a6ef1de4f4077945db34a570cdec7f7958103e0f73ff1ee8c466ea692d1dfaedf7e7a7e94484e1ca6204d044f468f4527844f765cf4eab0a33a680d770ad3507002e35ac84f6687ca59e4fcc3bb51955b2d4d98068d5d44a46ed5ef40704d3fb7d10154f4aebeb5d6a305de2cb6b2711c5770bf878f39f35779620b1d695c2904da2f6a595852630497caae4cc9a822c4751b51cb69d635e6ec47d6972a29c59515e2eaee01a5589c03bc24916b76c32ed9b78950e910211e331b033c052413e24ae325af29db647dd02ca06cc5224a8ddd55f26ac43a83d96e0beae9d7b9ffa31d515340cce114c66a177f8d7c291bdd49c1490e880d8f82ce4ea6f7651404d81367362f2a3e9b0ce311eaa8fb8525cf8690a8f943ce49bef0aa03caa44fcb439b8b7a31a72fbb61208a04697ca3bbf8b5a0606341a0e784d6cb82b093b274ebb4cede80485b612e321be1166e3c84f2bb1789b343863ebaf12ca70a92ac55a78c7998764400fcc9812fc3e8737af721a4d5cc5264f3a291f25e2b52abe5e07a38ed0932614e87fc1bee6b2a8b66b83fbaacf3f1b49270f8c78c5468ed6a7e4d2571d60cb9808c8df22161e553f1fc3361b0d4227e26d087c80693ae4c4477afa54cc53c3b15e1b3f4e137f9366aa52ae0ba3e5f2d50c84d243d55326218faf8ffc2d6e5202bd20e4823f1b4574181a7470dfd658471b2655b40395dc6359ae87a53f19edb007b977cff3c4b0dd1b2b23d4f4b5103cba48612cc2a8d1dcd208f85c903caeba0e6d3a7348a6129c86843df4bd2b5a50699955e9c1d6c6200dc5bb2d90df887813da1b9acc7678755e24da71ba4f60720b57ac93e7f8ca9e4c9c0be6a608008e5f5ebcb631542c9c2f6c408279633b43dd688ccb4679ea0e0d60267f194210ac7d7ff258f76525bb51e2ef7d72bb10161a72083e7de7ec3ce96f53ba4f83eed496525ee2ec23ba0e06713cb094637f2863d945432ccd307ef45e62b25266282b5227cbe0c9b27e2eb55c7c15510ecd3145c01ba5dfa6b57ba234d1548cd65e851953e0fe25805acbe0be413d12526dbf031d07f8e1177d3377a2575fee0dbf74eb62d01187af05ab977b1014a5f52a5a6f20de227f3a537eff328edc4a170dde3649d6778aae839e1e24793b44b4251518f4f39a2d87add841b3eadfca7f57d968e27587bcdf516b425e59866f31c19c2ff71c575fe262536499d92873266e559d4bd873147a449dfc72d80770e045c2d02bc3cf98270d5b66031cc3a8020e688c629886cd664a2e9e01491262a51d5472440257dff2e991101178abdfa061850683747fba1575df27f75a96a4d8aa64da924bb79ebe2e1e23ecefb00e88157f648c9ae937a5cba7d26dba81f9fcef54a4d550b6977656fd6be5226f77799b1b731f7f6f9ead317bb6a370075e4b5314829a0bcb4f67f35435df3a8303081a1d427409b01ba7b9824af827759643cc07c9ab6c20fdf9b94a54a3183d21b6f475f7b7cd8a515c1cef21b386368a39d855a92eabbf9e691ff24556ecaa9e551a8c415d89a0305c15cd8fa9838fca767318f14de9197e878c573bcc853a83107909311d62804fe87c3bfb056cfd43df4c09ea3a0d21f933bf722bfc924d1430ba51efba89d0c5e9450eb71f9e016ef8833d0a06e59829e66398b1114d39479f03d506394ca034388889b5333f1d0bc9fd8f09b7ec5cb4589aab56d96b2a2d16aaeb74d81a011ad5e54bb686c1a8df3a1447c7dc256cb670644010f68c1433c187b32920b9311ed70434f597258ee69a55ee5434c4c80623288f8cc9889498a5fc6653f4b823d6c3e6efe83d1bf4950ec13f9ffed06013b0721962ea59b8ca86cc06f05cdbdd0d2305d93abac05726b527177683bc28b149ffe1fafa89c009dcc0caf55e1d9bfcd1c4fe397d3c5fc0c6da383f4c41daa66263a471ffa9d981e47f85ed33653fdadce24b56b94fb30e567fc6184e01a8905a7aeb5925859118a1060295d50487ba0c1e76ca8f99e22f99a39b809b6505842261b0d4deaf7d83d2fb26bd39d2038bd1353a36ac970cadfdb87056420c78d63ea2b2a7b8289306c163ad35031750bb6adfaedbe1a7d51f5158cc4b04321c13926f56809b0335b6d88b5f779906cd0fcd5b7c0f0bf6d57490865b51ac8c9710997aa076ad1c40cc145e65c02d25485362c3f949763200c123e7cf1bd09cf556070bc874f0ab53e6988f439980de48974db3aa17f6137067fc13aaa24297473b2302d7b44265f473fe4455ee2f9d773feb52ca364a20df1ed7c6c78be155870a586e2132871ea4fad2b4add1d2c7040b46554c5b8586744dfde9612a76439e16bcaab8daf5cc20d89f880251a9fe6208c314095da7ac5ce369c57a576361cb1f66fe1da7513f997fd3c6e77b6d166592a749034ea50feefdc2f7a1bd4e6ec60fecdad23fcfcb829fcc8eaff523797d9dccc24145816b74161f3f6c47ab2b8632b0dbfaf01938edb025a9c9dbbe795dc542c24bd7135c7c5bf361c1c3bbf4a50497c9ef18ebab83833e4452a3df9657850d114a9d102ab023ae9cdb3db837d1b321a9bd69d9a278b97d1e086a2401c1ff69f5b228bf2b6cc7fd1e4aa6433c0bbd64a74a42591dc0ddf278cc12313d7d1b81c316018206e1f349b4ee5e3ad47562795c9478d29946e442c4494b6b6ae6415258f179cf340a9f99f9d16fab1a9f05726e37897d034d3f9b469daf9fe93e4c3994196a07c5f9128f04a17a8261a6e527629565c2890eb803722ec91e30c06ff14f407809e92f184c45440b20cac6f6be27fa691d140e8e584b623ba07dcd1ce6103c844f125671c253961ac00310fe5f4ab96bb88e7d7d7e1ecf63b5af80088110724d6a5ae7a4f6970cb920b3c055d82daf8e0b1ac53aa6679f5ac85959ab6264dcd6528d5a3f1a7c7fb9fc0e2ae9ed1e10a3331a450d6887fc51b0861b5f461369ae74099b381185fe076e2ea69b9eb54a699c9268fce1b3a07daf6b5dfcc4c02975307c9e725c3047e0fd1bca91f3133a5a14ba5cb001ed0523a95984b1a5c1a57bae0f3f556cf9c0ce59c2c4f892d0502ed46471a6745a5228adc2edf9f892b906b5c0e4e033feea3215e2b140993432d4c96c91e566cdea64a5a43648440d6cdce43c803ac6c3532d860473abb463d0737e6634aa9b20c78e73c3bbabb6cef59c8dd38fef882ca0c68866737731ac94fed1f8ffac930777301a35eed5c538ba913a1c63532c5fb6188b5c16ed280267439dca48f966c2a43b4ffc61261a17aee54da1afa7b5d2a92245beadff99989eb90a7c1acd3c6a066446987f64cbd6363bf750761e4d7c6c67f15118f782c7b9dff23b61bc124650ca02f0c8390dbe4ed73f994e1e5b45644838c0c6064624dc7761d3254dca99938bf376bb979921dfc19864a0fa2dbee6eb33800c50e4867e4ad14604e053b9a6339d5aabc5fdfcd160626a11e805572666d182eba3d983ae48df106572c7dec35eff7078d9ccd7e507c1e9a6ca2407231a0783bf13d201c4ddae4f9b77b4fb855f743aee3de013ba45d8a6420a476e52d38afb23c75f2f1bffc4f2ce861daa4ec733a757be06c5c63d086081020ded0e38a7ca7ffd27ba5cb21bc403666f301572e1763b2e60a7c0847244f540786740d26f0d1021a2b81ef853b2f07109f7094d4ae75f4e84cf1bd63ab94cb6a42c38b9825572036ab6961fc49dbb24094b2de3f3365613a04e557359ead16d4ab1e73be6dd71f37e88123c8b94c25c8b2bdeb89c517e413d9d09c6cba7aa3e573a1f5621948761455c665b713877db28d7c062ad721bca8b7b28ecc060b8ed68b461e9db67d4808e9e2446ff7a9f2e59161e6a0fc484afacee5843ceb45e6fcae60af3ddb9749f003d9889039039fcebab673512ecd739ff5b610a9a90029213e112cab2d83a709e19c7ab3ec16bb60b0a53f654f55ad2b734df700a100e5f2ccb0cca15802cffdfcc8076c8f22dbf9a8d42bc6e00b4548acc9bfff67c5d812ba4b35991d6c58fcdd60cd3f708e06ba59abe93bd44831cd6e403fe2d71b54ac7d813cfb4eb047bf799bc95f460fce9549b7a9a489f4ad105795689cfcdc9225ebe59299f6989b58a3e0065a9f646d82aa27fd954f015889562bdd4f897fe642be846cf3afbe2acd4e2e40e842ef4a44956b251a8bad504676ebbe99851701584f2f4f69aade1ffc639cfe3243729c938c15f26f8c8571b5ae94b02cd95b26715034390a1f1648cd35b1f0614baefcd2d7cf27530d6cf8e26f553ecdbebecbc1f6b0f2d3f152c5add956bae4422470d5522af30f13dbeed7580f2d3c9404cdbacd60bba697e85aee7e54ff7b4a6217cd29730c1ab867cf530de44478ab8c3e57c51866136b0497b89749c72c2fb8ae2b9cd77ad8c6d1af8878b66f64acf9df52b15d9bff07669794a751cf198cb5b52228d9e810321dde0381b9e294a60651e199db8bc0784ada92d86dbaf246584dc6c482ae93fe74cfed9d2e708f49de7513a07cb38724c7ae1cc3a2648c1c394fa85c56043060ca058bf7dd4dbe8c515a8057d7c56eed326905f25f00d091a9f6a2e5c528b670ed8d20a1338100dd2df256b7038ca7b92675138ae0283cb9840c9363a320d4ecca6e37bce9776ea21add8af8d470a33dea35c40e2fe88952bb3791de1677e7b9c32acb116e2282c2c78875c685ec1621da3bf69c3ffd3cccd9f0f0b08fe8f1d126f9db0440280a00dce41ed7a43ec3e6429f119ba69c536d6e384fc39715c54bd37d0de9232dc2cb4be2c437cd2b225d1e663e10e49c3de42bf6bde842fa49329adf64d81b1574c368a443aca940dfbe491a33b63db32b3190fe67dfb7fb86994eff1c294fbcc11ceb35ce80a600f80b8c79e60a88a9a38856535203daea2878362368f2e1441f5252878b016cd943828f2eb46da23adec24265b6af97693e065848af0157b3a6a6c65a04b0bcc8755eb1acfbec2792364ad0ad226d5c5a3e7f9ab49de80a49acf8aa5c7616bb4a67c26bcbf466eef8be47fc155ef610c790591cecdb2173295bec56ebf4fd91ef9fd499fdcb68f36e11e6c618b84692cd0ec332c32fa652d952e73c3e3dd35c55a9c05f9b049821cefafaf3a59d7680aa9ce02472e2fe5055125c9b9ba2a7b25d5f6906cf88628b994085604f93a3f72c71d81758c471ffe2e3aeb47a8c17fa5d75276d4fb1123b94098ab68066b45f387ffec1d1c79ce8d905705fa504c8d6811cdb28ff827c1848292ab86f43787157dd05764ec1482f6adcd99c3d54b85c1896083cc31b5c8026d377cf8a4ca5a18cd75f84ae7461a81045c0290558c20fa6956c4f58755dda891ac458a6c915a2076467e537eebe355505fcc2c973695d7dea386a52d2155de2dcf4747ee1374bfae34f1e26bc7f26036a53735013c670e5a97765f637723a0404931b578979b94f25de1d78b8bd6dbc8190112f05654fcc37a2e3af0cb2218c27af91d96b4dac8c15c7891b08e339780fd9cbb3fc54ee9521ec8039151ae5b447e7d818535cdf3f51fa49a9099af7774862866a17bd8cc15acd395773cde28240aef35970651d141b1b4dd950f79db94e41dc623161575815f52f34b2c009c622a8dc0f5e3841a36edfa29f450341137d0a61620dc62db96d6a54702d96b3c71782051a54cf1dd63fb6ffac8adc98f0f85c2d472018d4129e2458df225c357e4c77af6284500ccc6512dbf2368e1057a2a1bb6e95cf5e2421fe6f0b616ece11b16ee36e39ac2d9919423c7d59e77810173c6d6395a93592b4626886ff32925dfc8d6d252ca7b642a8f96bec5b034591c8a8dd5e5bef050e3250fca3698de501b4147c104889e5653931be758151adae8edd7c7a859048951f53eb462b6eb17b571b9324b9e45172bb5b1c93c6923255fba2305ca28cde0c57ec6da95269c836cd41e3cc9f24116267ca0ccff81d644843f10689364df823e60110d295da8a109b616f77464182f1e933abee28bfbe3e893bd059ee8983a0c28621dc1d734c04ab7e3c39650ed778a7afb22e811aae45b0cbd8f2be085e01ae9ae29d98ea42b353f053e1b3e62f0260fb4aaf91c94bedacb06c9814b67792cfc18fbf0c74004714de8146a771fee831a8819432a549765e3d98e0381c4a7595d38a2415dee9b38714ba48f3c1346c2e5a92f5a8a80ec390e78e5faf01ef784e7f9a89746988302cafe62ebc6bea14110f831a65c195a164741beda5d652b95a05b22573d231f7376b3b80335d3fa56e8e72c2dbc695f5252b01966864fc7228549da767b82d7752558f7ccdee1fd86cf25b09c0bf84e6286df14c5cfaedc4529f20863117eeab700bd3cbfdfffa778aed414080fc42a8bdef1901c6d770399857789d317faa24cad19459b7870e7acaa3d6eeab55af56976c683bf101caa052643c878fc505476e8e9e47a9cbe4a9de664d58c79c5c9b66a524c631975db9d4bab2706e97e207a4acaad781d453d39f7a13297459ca8fd3c5486210568907e32505764e8ae1315c2c38b82b8a2196ddb0ba106aadfe33e9c80d6fc404353b4e44bc6695535f505b2e850f3db9741e6aab44cffa74ab724f1a064f4a6db4f5ad8eec214dfd50f7a48b42faed430a590e582fd8af38c59dc0732f03a39130abf80bd7cb216224990b0290f837c605dea7c9ed496a879ca50756c22a92036789068b7ee0b4680d98b0e5a2a3e3087a6eb25e717d18f393ec21ccb7f3e4216999d30ca8589fc7306f11d49e2a2b7c43302697d17b789c3bfb8b1cdbf4517033b234913ce80685bcda0ee097f8a669054bbd016d0f6c307acc0cd308d59cbdf7f87e4aada45e74bfef42954633481911d034ea97cac9323a4799fa82d4714ea6c8afe0da1efa2e9d869e1aee36a5d67b2d0511f77de5d325ff0b42e06c2bd8551cc0cf5cac7c958f9a625ce53dbf76217b52e473d57d1c906e24aa8c34d192ee6fb88cef39afd66b847e6ea395eaddc45d12a1586eb769fbd21b955ce3a499ec868130c8a6f22abda5a5c86c7acf53fec0d1373feecfea2a35039b1dd5f875e715a28224a278ce96ee79c13593e2cba3025232e08e9214042ea99f9380e35587e160a00b41b70f1b0eb4dd71b07336f46079c25be95471de8b42a9f4fb03a1ac104d4ec1ac2c3acd51058d10ca9d3b7b5657d7dec74845d0447fa39bda1fe7dfeaf26daa8fae39fbcdf733ef7ce643572c5d5feefb350df7bd18c9235a41ecae829193e2f47b26408a7b8e9e844158ecaf50b395722a6a476a1bc1212d9b3430c09e802f0d3ef353abbcf29e0fe0358237e2049d1f93e660f5ded31e438b8e7393b68cc6880d4901044081464687079bb02607a4977416ce5d1823d1d9ebcf7562219a2bf767cdc7eaf0a159fd12431106a23e403812c4d948908132242e1c97fabbd69a565b58e922d13a728e92b04c877e05e6e4d877a9d0a3d094305d89495cae047517463b8cc04fff0adee7f44858a6acba6c5b763447b03a42c1918dfb70f54123c18920b0597363af65b66eee6962d91221d23565ea50462518a8e60fc5ff7964e11cd80d04bbb2412e29933c293db3ec78a04f38802ace93251af084677107f9b580f4890a1c6bd45e3225364a042ca09a6a6a5aa53d46f1e3b407fad951694d4c3742c43e10125e8699f48a8d133b8074995abb90e6c1d757aa773558d4a4aea451dafe0aa9b4c926efb29afea8d85959927d431b3809b69c2e65b59e30443c66cc6f864c6eafbd7ef32c8eb7a1dc6a663f5e02acc2249a3a98c91ca21a25544af94e246616c099a4aa12923ffc2ee23a3694098595e2b8a06cd236b39c4977c6e3a1e0a98b4120a0c360bb9127e332cf3dde68d99cb086b9b0ee25dc287e2d3f5420330516cac8a4e04449cb6076c795274f1c54b0ff8d554f38526b09eca3771606195c5c51c7c995548e91171002ea86bd4bca9c893691fae0f689feaf12201d31d0f2a1a3a9ae7e3b70d787bdc0c3a2a76c9b5713ccac9026491bf43b5323140ab2a0547d84ab83a48369baf87565bd8733c6fb9cad027f435f9ef0cbe3c402e5182fc8879b7216394b33b855f48ca8b1f1ac798bcdaa6dab95be3da780be57dff876a641e71f5da35da0490d0639b9c178c95fcb0e1602ee3f645367b2c684b90cae2d4722a1d54afab89642e008970d172d229c1fa4963635b5735e3c2c4ae30cc47a0a906c85f7b38a9335a24e87c2f74aa5c94902d4ddd087a9d5f65cc3fd5cc543545854a47a4d0a53ca653be46c4c0a5bec89c253344b000bc86379a86f2fabde29f2b56e08d6eb3278689e3611b97b22bbfee3d3242b7451af288f34c3ad642ed7352f182baede02a5deafa1844f1084bc4b5bd9ebac1e5766f7038c65868c970dcce1525c4ba4557cfc8647ec40f9043c4b7027350472693fb7371c7c212a368f1191f1cf1872aa3de694ebe05ae0a4f5ede7131856c643d7bec87cb58c02bc22d4df105cdd1810d4b9c07fb41f4cb824c03ac290c3a9d5a76492491616355679ad42bc98b06723ec035049726cc3ffc72072ff46ec39a9e829374b6545d5a2b5ccf34fec3f1755ca0e6e5b228e0674d8df64e3b8de4ba669490198692837079a8828cb0c2090ded5cdc360f67f21057826e4834901f4d306114805513678e4823b290a28beb8204ef99ca8e0d6429c7aa3e2d6dc5ea23ff89d325352fe7c3aa6f47f67d26cca3c51c383b62d27b009235af15ba039e84cc5755e61052f18ff2b16d2e7fab90e94cf30c36b68c2368727cdd247ada97ce1b5ca19e47f42a04c49c1636a68d74e5cdfb53a237d65d3dd421b24ba59ee8f6d47bb3e7bdf2472eefd148a9cff0422d8fdce5a87c43ff8c5b33ec890e619a190f147800cab6d1835ba2bfe2d932e9e595a87246346c5468f1f7db9bf08cb1158e2dac85ccd8ffe8189e30bf0487cdbd5d1fc1ffe34130b8b1a2191c0858d64f1e216a45fdd3e5591f787914cddb4557c88e6f5781d486fbd0c2dd7b68a9f3a9e05d2d29e7aef4f851d421a26d826fb69d1063815db49414296c7a930467649f5b875cac06134f9bcbc2d6bb9c88084a6ba106a6542bd03a786995d03f8c515cf66004b64f5f7bde8986aa02bdd84af0c9f6f9954e86f046950eb139b09f270be9f4b5fdc355a972f0e136144f1fef3be3d48dcf2929464b8bc255c4e814f000db912e999e59d37c272bd5adfa4f68b237bc851c2510b358d194adbd97f6ee38458de219fd1faffa0ab3dc0591aac11f61a3a9342c085d23b6c844eb3ce8c0dcdac17553eb1316d89ede3c84622224d63120f1a23cab58f5462386ddb407afc118398e304124df2358778987f85588356bf2a89874b9b4f83e326e36c9dbbc7d761fcb81ab62a72f0aa03107a5410dfbdc35b8c25e048c25ddcd79ad53ff6cc1b00c294b420c15627fb66d76f93fba4e560163f51766fa15d207b63ade8db5d216b17160b167c098cbc26f19837e15a6bf3ba37f93d5ecce0c14e2c7c780debfa99eba75add973226988bfac7abc0d4f0418469ba08cc4305c60672c97bf71e832de7d48b7cea61ac81e67de5e4971440342624fda46bf6b8af196827b9f85b0ddad4746b67c4ba2d7d4cbf1e7db99ef0a787646414d6a779a05643a821e6c7d22cdedf473e70050f4953d66df272f74676904ec5129fd5469762d8864a3a15819ea7c5a1716b628862e2a4c318d7b96384b75c0de290c035d3444bcd196a3f5ad1464eaa0e0c8a3190cd3d00f9c5cee18c86fed91624784685acbcf82fc86a928449460dc5b791da0e973f110c6e7230bd5b3ec98caafb6d4ae0bbc515664ec0251e66d8f210049797d280563418218f07e430ce2096600e2cb2c797230b403f21ee8e88d2c3b03ca7b3f272b0daf2ce1c2eb069768d92199b31fec315da1caf22e5a422410282772cb91f9a52f7148628889077b3f81d145b8721db54046fcebdf6d9c358c1578f120696e661f51d1d99a44448873e45f02fd7682faf0b7735c9867aa8673b06a91448f34e3f73f997337b47e4aa66248682d88f24daf2bfc0deec8d8a6dedf6b707da048eb899dabb34c4fe53de0fde66e2785d21c790ab1d1584bdfd96906a3ec1c269148a6943da1c537baca09b8adc5b6ec812888e232c76c29c0db0c1c18bbc93a81920c6509aff95fb46704b342b8eafe9581c43d61a65d135da188d4d942bfd0effa1db8e068cb6618f8bff6c0fe227619aaaae571601e749fcedaa100be7386a3c8b68694eaedccb2b9d2e0a6356a0f8bf1b7a2fdb3cc696321fb76a0c35e3f3784164ea184229a60deb76fb919e6860813203a9cd502bb542a216ebe2a9b458daf52df6591c6c5f16ec34b4a35f5c0b5edc4868fe788465f70bc7340ce661d43c178fb6aee2569d4e1f4152d1acc5a32879a6c28191828a8410d28959acd2e51a37619f3ec1c72e425a37065f49a1cccafd1f2b517c2f058133b0a36ff95b6d16274a7776df502bc3909e67bce5d1bd8ecd3d86dec0344c14448ced0428b06e309ff6b61ed1e128fae6728c921f3be87180fbdef2faa17014be6a9085452d7ab3133f51e41ed39d14972bcda0449751868f847a71166f6336df799fca7118e8b474e077d2ee6b73be947c9d3e53d662c915cfcff1f09d67268b0f2767ee0dec62708beb43be805c0b4511b97979176df458fb1a925ffbb05e4b7c58a20946a2ae788f8c4c1559011bdbed1cdb72b7cd8b3bc07f4c281a43ec59b2e169ea9fb9fe106257e8db9207c739374535f7731ff817fd6a97da5aa710192f4d4a88abcfc03ba764bc7e5b372ba36252ebaa2cfcdb05aed4e0b27401e1befc84ecdaa343a4a8185f6f0290ffe91d75b1b2518dd4550a4473e48499c5a92fb457ad30aa3943fb505c14649e7e1c73824a409b28b62cd7363d112292325edefd2f03c936d84995bd6a9d1654f69ff2305fddcef8421c6fa5e95e0804d21326f29090661e8b7d29acad4ed70088e0a02d9e0c20ef28bcf6c6e37f0ea5e8d101018274b1a9581cb0e4ffc249c6ff21507ec348c2b295e0a78295c70db6da3f61e3e060097394d4dd297c791ef4b56be9b01a29139fd0b69e035c332179ab95b905fa9206a6469c25f5b040e6d41fc75c41af2551b1e653bb4cdea718bf56be7aa323ffa7caea162d9737f25854562a0e86ff89bb5933016132a74321b229255a7722120b1cabcc76bdf4bab94b18a321414558f4363d700eaea6b036f292ab2ccc250a1acec76075af3157ad8e301d6c8a38a4cf5c3de2693876f0454db9353919500d13528f47452c4986d3fe2629a3449e8d878f64d29b34b275e4fe742363f99640c3fd23b3d389f23ffdb261c466726dbbcb3c34afa274b28901d1ad577fd38c81fb19bd7550062bb85d31b513614780a02b6b5e3b5b7887a79b97532d503b43d1c7c48c96829feacef3c031665551659f32875674e20f38721cdc1e641ce9fe4e9dfb9e42bf08fc28ed0b03ef218d0b0e127b5046a9b965d8287fc07d20d688150ca006c79be06c7fdc9bb7910613ff3b5ba73d67e8dd2657407b021cdbb78ea5106f1646e9fab0fe2816f78a750ded955e761ba85c819d46a9e2a5ff21cdfc247b7350b0f8ecb1b82b1f991dba6d8b1e63cc69d4a7da94a552e695c6ca72da158fdd2260128890e396f7aa3b62023deff2db64c9a39b6030e9b39d99e280a4fec1683e09bb3787305d649f7ebb7bec1c75b1a6ea0259b734c14a0a2558a99db4acabfd497d51adfa4a46fac0c29d21fc027f0488fb7a2952e576fc9efa0c6f3bbb9725ee8556fb5ab129aa3e3ce912b2df7fc3c15463f649844144f62493b9ca098c5bca1e14e2148aea9ef0b851400b32db71827c0b0b5f8347f36f3e78f2f165f8e3fdea653ba81865efca377df1273b6a1f5df53aada0cc162aa096083a8ff62f6bd1096861fb1aae2851b4e55feb071284c12c6993dba58a4e938ec33d897b5333d67da388a69569a5762165ac069b0f9c00cca0bd1139c96e8265c865c2f8e7c39063bc077f795749cb6076df4588e2b2d07853a1443fcab992c7be89857a004fa930864687868405f9d06cd44a0122e2df619de0c07ddb7bd136ef66b5a49f7c6251915d5361fbf75d8acc6471b2aec8c0d8499c78ea80511fe930ed6f8ff4406b5c061678c0e23dc998804dcd4c7fc166356e536d84a59bc35fd2c111c7aac8ac8c29f5310f40bf0161bc7950978b886f0ce03e2e053e0d426238e9401c126d362e59556ff6bbdd7886000b65fde3390be7c2e91df00f2e15bdf77fc84040f705fe1756c4402679479a18fea45b24ac145764d68c03b2ace1ad2a40c67b027b5a81c8e29ac5d69ea33c39e236c7f906f6a8445b7a88ddcedc5d7a5b3326e9192aaa4b13e12469a21b34c6709660dbbe4844ff9aab8c1af58a076ce7dbe92a63aeaa409de0aed0d76b0da0578f55c4d6cc5b77637710c3498c8cc4718da0efefb279511b4a026d613e50a3fa51401fc786f81708e619a9369b6d9d5daea06836850917d835304fa3d6dbb4dd72ac7e624587ec2437f466db42e2d5c8bb03eb389c0482c087b6c2ea1e81f13a0b3772e452c3d640583c9705267c10d4d5f88f8322d2df8a55ba2b2fd5c7cb1b905a0c2822bd46d86e73018d96953491224866bf73b315490b2cacc59a13c14ce68372fc66c6f76a3ad62c9cbf734bf90b44a0c04f2f7545d501c91ced47854b3a5d3773420c653558b73d3c59d7d3c1689db1782f2ef33fe06b7418229a34768351cf11f61eef9f3839d3e5530af4d089305a32ebd80c97223b67047148a36d8c3eca73f31f2d94c04d70e89173ee68501de0c945b74530795598204e145adc81502d83c2944ecc9a6c42db1d7cd91682e05051e93f714505d75c1553d85e4217ae2af8f40110cc1dc88a3b34653871ecc50420cedba771ff2502b58f3bf353d62b68c365f4c7a6603f3c2a238d3e98594f1ba6e1b08eada2918519a628a45ecae4b17fb39ec117fa16c9448fe1d21645120ba850e71e2947b54cf87c599a6a2827263640041367784ec51b9c37cdbb3627f76f21955d9876ea0283ed22b5a07cec34792d6f9dbb505184eec9ef7f35b8237fdaf2b05fad8d98ce61c635c10fb5d803f9096ed9c7205b421482557f2f7c6807df1f893568181371df13935446ce065beb87a55c2dea524b53c6d4fa06a7806e31ddd78bb4704c5764b66c793128a76b159d914f5d76543df761e1db72935277f57a7a7b2ab9e7fbee199d6b4638094cb89b66fbd8c82e179f53234e5abb6ec764690885115cedd1677f5c8b2887ad48de4af560fa3fdcf7350cc5e6b6b90a23541c6174d906278d63a7b850380c412984e8b16aceb3971f832e85ffeec27da4a05c46811bb9dc4f3693f6036a1fe551da2d57544f4c85708b06f137692d30fb2146cdfad11a65ecc4e0e1afa9f25ff22858b14efbec3557074fbbf067122a39370193dfeb1b41e38b24701506d64986a4cad8853a2a39028e29f46e08b4ea0a88d180c6762ff166212ce8280c6ae78665f9c70803a313030a3e69c41f93f246738e7d5f9862f9f1d126a5fa1d67b18c6a6480c8ee7f5f5b5d24740b6d55fb64acd9435b7d0b6e13abc83a76e075387f6b93296293815504948933d97c33edd95a62f0c28db4d179e49bafceec7973b5657285a7eb9420b22caad226aa8b055495eba5974a94b17f3c18928539f7f4b03e140aefb83f2d5c2b96f74bd2689ef465777f03672d0d744f2aa232e851e5da6dbbea3ab5948b65a60872de801be0665553d27f8b831cd1769bb4cd61140cec1c9bc6677091656eff149a9546ccd453beb00c4a1851f7a67921978c5ee2ca83cc84ad7c5687c556f227f97a6271f072cab034052b22046be0bfaebad6df055d007fc5d7b6cc63aacf4ec075a0e93fc4adf32819397db79d38193450e8fe88e8effb71030ce29e62d64497c1198f8190d3b8b25c8eae993fe86e3ec3519a7a56d533462bf20b7066894af483442d6145cd3702592f6ce789526904b9a916e1c26462338ce9dabbc4ced46be7db7203dbbb84a3bd575a5ce2a624141e7d57ee41481a24d9fce04a6597a376d843ec7f024393bfa4f043a3f0a0ee18c5c8d990cff3c9b6bd7caca182fdf365d03983d95c5bf21bd7cd1929e57817dcb8d82e932e9d4e293f7c7adbded7646c56728c99afde5bdd68e219a10fa986766ac55ba1f05e6e73f0ca5df6826258eb31d002bfd3e0500171cdc9f0dd4fcb9955a058f83b15444ec721c431b9dbf103c252bb34ff11e2eaf153ff5a061dc20f386297e36a7f3ca746aa3a135e479e0ba55cceedb69a7f7624fa975e048d763b3fc94aa7d96da972ddee7f91b7f00d6c1cfde389f4ab05c799aa106556611cd123a26ff6a23a4057a3b2ff2569dd14605968e76993965b7211c5b7405ff5c89cdcfb36283f7fa82ff1da9e26d0269fac8daf9015b93b3b536c5b00a2c7427e199d9807be9893b67f03a9a1970a1a046887e0a8dcf4e6a2cee57ff26b8a664f6c836b28b20082d0387e02d6d42adb8c5f126668c2292cda1123b85e39ffbd389d832138eaa1500b06f16b0d0e5505c970152194e30f8bc3a2ef01385533daec68f3246ef72956036ba3aead3d62e879dcacb7f505698c6687996ffeeefe7d2a0c3648968aec1e2b864a9b36b8f08211e8178883a27a079fe072f08ca49e5ef1ab910ff56ac7d4db6a0e25457c230cf920acad2698536ad3c6bbea096729e2687057b1d998103c0dde7df3d699a35e5b7a297dcae7d42dc5e6a138adada3247fd200f3060be71eaed95f6e17039650bd67ed21569598bba030ca1063affaef3ad2f17d74d33508a3c74b0a9a536a7c4109ffb9bd1e1ab3ea36555c2522f1cfad903c8a51e91cdff895146b56b83fff4680123b35a193c106e845f575c9b983e338793bddd57a0c46acd9298508e556d242d62cdb45e9c0f9bbdcce45a259ae0ffd57dfeaf85c64351e0cf392c4220a6d10c7e178ef8a88c4c1ad63c131cd92df268301730bcfc01f14882e51e9826b793fdfdf5f14ce7c44c59ed399e3a56ab3ede222dccd25736b85ffbf267efd69be2ad7e07a9b6360dcfee822e70f188722d0443239533c664b51d9d6bf46ccf8087116d5baf8dd6e0077800d84c309d7d749851f45d5f843cc369c00fadee5971af41f9451fdcb24138a1f19b9d3f166d6af9a4ac580b8b38c3ae8f0822640222d3563c611071c5ed0d370566ba597913dc6beed7470d7530b1b8ed213a3e6f37b15983e63f61de57cf0996250af0cb47c8c2cbe374678edd248d14f970fbe3c24a0a35a08b517af001b7fcf8cd9a01a4e909a1247600880a0db14025908498233325773bc70c907bffe93a537d60ef9590641987f23e28bf77550609aba6d5e1b13e79b1990ac9ab8b70e96ccf1c7d685606ea0194b40c68e3fcd64b3da521b770052221807de6c4186166a9d7efed120c978fcdb8380d5be361fcb52b5728831d367f29a8879a61d7eab88a95265b583c44068374cd3f26c23a1c62cf33b8f647c9891733ac9428d675510a6c9dfe5b0489c446a8601bd14bff6f637cb030b4dc60f8b17af638ac775a9339d7a4334cee79d830d735d3186adbc52e733f3fb410d20764d418f3863ed2acc874ca4be1aa47df5c24692638d703df3dfa0c7e7a1f3e9993b8f0e7607b4969532a97dcfd30531b19fc76c331b676881217067428c1403fce556557baeeb389b4146fa043d49680239df3182fa576d48c9d40492c78d029d149f1
+\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\rcleartomark{restore}if\r
+%%EndResource
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 239.76 C
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<534f52542063616e2062652072652d636f6e666967757265642064796e616d6963616c6c7920627920> 146.88 238.80 C
+<747765625f736f7274696e6720582e35303020656e7472696573> 146.88 267.36 C
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 311.28 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<446973706c6179206f6620656e74726965732063616e2062652072652d636f6e666967757265642064796e616d6963616c6c7920627920> 146.88 310.32 C
+<747765625f646973706c61795f3c545950453e20582e35303020656e7472696573> 146.88 338.88 C
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%BeginSetup
+%%BeginFeature: *PageRegion A4
+  a4
+%%EndFeature
+%%EndSetup
+%%Page: 11 11
+%%BeginPageSetup
+/#copies 1 def
+sv
+90 rotate
+1.00 -1.00 sl
+18.96 18.00 tl
+%%EndPageSetup
+%%BoundingBox: (atend)
+gs
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.72 537.84 t 66.72 25.20 lo 66.72 25.20 lo 66.72 537.84 lo 66.72 537.84 lo eofill st gr
+gs np 66.72 537.84 t 66.72 25.20 lo 68.64 25.20 lo 68.64 537.84 lo 66.72 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.122 0.122 0.122 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 68.64 537.84 t 68.64 25.20 lo 70.80 25.20 lo 70.80 537.84 lo 68.64 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.247 0.247 0.247 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 70.80 537.84 t 70.80 25.20 lo 72.96 25.20 lo 72.96 537.84 lo 70.80 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.373 0.373 0.373 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 72.96 537.84 t 72.96 25.20 lo 75.12 25.20 lo 75.12 537.84 lo 72.96 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.498 0.498 0.498 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 75.12 537.84 t 75.12 25.20 lo 77.28 25.20 lo 77.28 537.84 lo 75.12 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.624 0.624 0.624 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 77.28 537.84 t 77.28 25.20 lo 79.44 25.20 lo 79.44 537.84 lo 77.28 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 25.68 t 67.20 537.84 lo 80.88 537.84 lo 80.88 25.68 lo
+cp clip np
+0.749 0.749 0.749 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 79.44 537.84 t 79.44 25.20 lo 81.60 25.20 lo 81.60 537.84 lo 79.44 537.84 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.000 0.000 0.000 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 98.88 lo 66.96 98.88 lo 66.96 98.88 lo eofill st gr
+gs np 66.96 98.88 t 741.60 98.88 lo 741.60 100.80 lo 66.96 100.80 lo 66.96 98.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.110 0.110 0.110 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 100.80 t 741.60 100.80 lo 741.60 102.72 lo 66.96 102.72 lo 66.96 100.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.220 0.220 0.220 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 102.72 t 741.60 102.72 lo 741.60 104.88 lo 66.96 104.88 lo 66.96 102.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.333 0.333 0.333 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 104.88 t 741.60 104.88 lo 741.60 106.80 lo 66.96 106.80 lo 66.96 104.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.443 0.443 0.443 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 106.80 t 741.60 106.80 lo 741.60 108.72 lo 66.96 108.72 lo 66.96 106.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.553 0.553 0.553 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 108.72 t 741.60 108.72 lo 741.60 110.88 lo 66.96 110.88 lo 66.96 108.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.667 0.667 0.667 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 110.88 t 741.60 110.88 lo 741.60 112.80 lo 66.96 112.80 lo 66.96 110.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 67.20 99.12 t 67.20 114.72 lo 741.60 114.72 lo 741.60 99.12 lo
+cp clip np
+0.776 0.776 0.776 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 66.96 112.80 t 741.60 112.80 lo 741.60 114.96 lo 66.96 114.96 lo 66.96 112.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 494.64 lo 94.08 494.64 lo 94.08 494.64 lo eofill st gr
+gs np 94.08 494.64 t 395.52 494.64 lo 395.52 496.56 lo 94.08 496.56 lo 94.08 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 496.56 t 395.52 496.56 lo 395.52 498.72 lo 94.08 498.72 lo 94.08 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 498.72 t 395.52 498.72 lo 395.52 500.64 lo 94.08 500.64 lo 94.08 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 500.64 t 395.52 500.64 lo 395.52 502.80 lo 94.08 502.80 lo 94.08 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 502.80 t 395.52 502.80 lo 395.52 504.72 lo 94.08 504.72 lo 94.08 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 504.72 t 395.52 504.72 lo 395.52 506.88 lo 94.08 506.88 lo 94.08 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 506.88 t 395.52 506.88 lo 395.52 509.04 lo 94.08 509.04 lo 94.08 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 509.04 t 395.52 509.04 lo 395.52 510.96 lo 94.08 510.96 lo 94.08 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 510.96 t 395.52 510.96 lo 395.52 513.12 lo 94.08 513.12 lo 94.08 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 94.32 494.88 t 94.32 515.04 lo 395.52 515.04 lo 395.52 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 94.08 513.12 t 395.52 513.12 lo 395.52 515.04 lo 94.08 515.04 lo 94.08 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 130.08 497.04 t 130.08 513.12 lo 360.00 513.12 lo 360.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Times-Roman fcd /Times-Roman-ISO8859-1 fdf}if
+/Times-Roman-ISO8859-1 ff [13.68 0 0 -13.68 0 0] mf sf
+<4b757274205370616e6965722c205a44562c20556e69766572736974e4742054fc62696e67656e> 130.08 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 494.64 lo 411.60 494.64 lo 411.60 494.64 lo eofill st gr
+gs np 411.60 494.64 t 571.92 494.64 lo 571.92 496.56 lo 411.60 496.56 lo 411.60 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 496.56 t 571.92 496.56 lo 571.92 498.72 lo 411.60 498.72 lo 411.60 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 498.72 t 571.92 498.72 lo 571.92 500.64 lo 411.60 500.64 lo 411.60 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 500.64 t 571.92 500.64 lo 571.92 502.80 lo 411.60 502.80 lo 411.60 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 502.80 t 571.92 502.80 lo 571.92 504.72 lo 411.60 504.72 lo 411.60 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 504.72 t 571.92 504.72 lo 571.92 506.88 lo 411.60 506.88 lo 411.60 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 506.88 t 571.92 506.88 lo 571.92 509.04 lo 411.60 509.04 lo 411.60 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 509.04 t 571.92 509.04 lo 571.92 510.96 lo 411.60 510.96 lo 411.60 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 510.96 t 571.92 510.96 lo 571.92 513.12 lo 411.60 513.12 lo 411.60 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 411.84 494.88 t 411.84 515.04 lo 571.92 515.04 lo 571.92 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 411.60 513.12 t 571.92 513.12 lo 571.92 515.04 lo 411.60 515.04 lo 411.60 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 456.00 497.04 t 456.00 513.12 lo 528.00 513.12 lo 528.00 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<31382d30312d31393939> 456.00 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.702 0.702 0.702 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 494.64 lo 585.84 494.64 lo 585.84 494.64 lo eofill st gr
+gs np 585.84 494.64 t 740.16 494.64 lo 740.16 496.56 lo 585.84 496.56 lo 585.84 494.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.718 0.718 0.718 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 496.56 t 740.16 496.56 lo 740.16 498.72 lo 585.84 498.72 lo 585.84 496.56 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.737 0.737 0.737 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 498.72 t 740.16 498.72 lo 740.16 500.64 lo 585.84 500.64 lo 585.84 498.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.753 0.753 0.753 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 500.64 t 740.16 500.64 lo 740.16 502.80 lo 585.84 502.80 lo 585.84 500.64 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.773 0.773 0.773 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 502.80 t 740.16 502.80 lo 740.16 504.72 lo 585.84 504.72 lo 585.84 502.80 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.792 0.792 0.792 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 504.72 t 740.16 504.72 lo 740.16 506.88 lo 585.84 506.88 lo 585.84 504.72 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.808 0.808 0.808 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 506.88 t 740.16 506.88 lo 740.16 509.04 lo 585.84 509.04 lo 585.84 506.88 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.827 0.827 0.827 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 509.04 t 740.16 509.04 lo 740.16 510.96 lo 585.84 510.96 lo 585.84 509.04 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.847 0.847 0.847 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 510.96 t 740.16 510.96 lo 740.16 513.12 lo 585.84 513.12 lo 585.84 510.96 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 586.08 494.88 t 586.08 515.04 lo 740.16 515.04 lo 740.16 494.88 lo
+cp clip np
+0.863 0.863 0.863 RGB
+0.240 sw
+[] 0 setdash
+0 sc
+0 sj
+gs np 585.84 513.12 t 740.16 513.12 lo 740.16 515.04 lo 585.84 515.04 lo 585.84 513.12 lo eofill st gr
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 656.16 497.04 t 656.16 513.12 lo 670.32 513.12 lo 670.32 497.04 lo
+cp clip np
+0.000 0.000 0.000 RGB
+/Times-Roman-ISO8859-1 ff [13.92 0 0 -13.92 0 0] mf sf
+<3131> 656.16 509.76 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 46.80 t 107.04 80.88 lo 741.84 80.88 lo 741.84 46.80 lo
+cp clip np
+0.000 0.000 0.000 RGB
+ski{/Helvetica-BoldOblique fcd /Helvetica-BoldOblique-ISO8859-1 fdf}if
+/Helvetica-BoldOblique-ISO8859-1 ff [28.08 0 0 -28.08 0 0] mf sf
+<5457454220446973747269627574696f6e> 300.24 73.92 C
+gr gs
+0 0 t 0 559.92 lo 804.96 559.92 lo 804.96 0 lo cp clip np
+ 107.04 198.96 t 107.04 397.92 lo 741.84 397.92 lo 741.84 198.96 lo
+cp clip np
+0.000 0.000 0.000 RGB
+%%BeginResource: font StarBats
+%!PS-AdobeFont-1.0: StarBats 001.000\r%%CreationDate: 09.09.98 at 15:50 \r%%VMusage: 1024 36745  \r% Generated by Fontographer 4.1\r% \(c\) Copyright 1998 Star Division GmbH\r% ADL: 917 200 0\r%%EndComments\rFontDirectory/StarBats known{/StarBats findfont dup/UniqueID known{dup\r/UniqueID get 4092170 eq exch/FontType get 1 eq and}{pop false}ifelse\r{save true}{false}ifelse}{false}ifelse\r20 dict begin\r/FontInfo 16 dict dup begin\r  /version (001.000) readonly def\r  /FullName (StarBats) readonly def\r  /FamilyName (StarBats) readonly def\r  /Weight (Medium) readonly def\r  /ItalicAngle 0 def\r  /isFixedPitch false def\r  /UnderlinePosition -133 def\r  /UnderlineThickness 20 def\r  /Notice (\(c\) Copyright 1998 Star Division GmbH) readonly def\r  /em 1000 def\r  /ascent 917 def\r  /descent 200 def\rend readonly def\r/FontName /StarBats def\r/Encoding 256 array\rdup 0/.notdef put\rdup 1/.notdef put\rdup 2/.notdef put\rdup 3/glyph140 put\rdup 4/glyph141 put\rdup 5/ch5 put\rdup 6/ch6 put\rdup 7/.notdef put\rdup 8/.notdef put\rdup 9/.notdef put\rdup 10/.notdef put\rdup 11/.notdef put\rdup 12/.notdef put\rdup 13/.notdef put\rdup 14/.notdef put\rdup 15/.notdef put\rdup 16/.notdef put\rdup 17/.notdef put\rdup 18/.notdef put\rdup 19/.notdef put\rdup 20/.notdef put\rdup 21/.notdef put\rdup 22/.notdef put\rdup 23/.notdef put\rdup 24/.notdef put\rdup 25/.notdef put\rdup 26/.notdef put\rdup 27/.notdef put\rdup 28/.notdef put\rdup 29/.notdef put\rdup 30/.notdef put\rdup 31/.notdef put\rdup 32/space put\rdup 33/exclam put\rdup 34/quotedbl put\rdup 35/numbersign put\rdup 36/dollar put\rdup 37/percent put\rdup 38/ampersand put\rdup 39/quotesingle put\rdup 40/parenleft put\rdup 41/parenright put\rdup 42/asterisk put\rdup 43/plus put\rdup 44/comma put\rdup 45/hyphen put\rdup 46/period put\rdup 47/slash put\rdup 48/zero put\rdup 49/one put\rdup 50/two put\rdup 51/three put\rdup 52/four put\rdup 53/five put\rdup 54/six put\rdup 55/seven put\rdup 56/eight put\rdup 57/nine put\rdup 58/colon put\rdup 59/semicolon put\rdup 60/less put\rdup 61/equal put\rdup 62/greater put\rdup 63/question put\rdup 64/at put\rdup 65/A put\rdup 66/B put\rdup 67/C put\rdup 68/D put\rdup 69/E put\rdup 70/F put\rdup 71/G put\rdup 72/H put\rdup 73/I put\rdup 74/J put\rdup 75/K put\rdup 76/L put\rdup 77/M put\rdup 78/N put\rdup 79/O put\rdup 80/P put\rdup 81/Q put\rdup 82/R put\rdup 83/S put\rdup 84/T put\rdup 85/U put\rdup 86/V put\rdup 87/W put\rdup 88/X put\rdup 89/Y put\rdup 90/Z put\rdup 91/bracketleft put\rdup 92/backslash put\rdup 93/bracketright put\rdup 94/asciicircum put\rdup 95/underscore put\rdup 96/grave put\rdup 97/a put\rdup 98/b put\rdup 99/c put\rdup 100/d put\rdup 101/e put\rdup 102/f put\rdup 103/g put\rdup 104/h put\rdup 105/i put\rdup 106/j put\rdup 107/k put\rdup 108/l put\rdup 109/m put\rdup 110/n put\rdup 111/o put\rdup 112/p put\rdup 113/q put\rdup 114/r put\rdup 115/s put\rdup 116/t put\rdup 117/u put\rdup 118/v put\rdup 119/w put\rdup 120/x put\rdup 121/y put\rdup 122/z put\rdup 123/braceleft put\rdup 124/bar put\rdup 125/braceright put\rdup 126/asciitilde put\rdup 127/.notdef put\rdup 128/Euro put\rdup 129/.notdef put\rdup 130/quotesinglbase put\rdup 131/florin put\rdup 132/quotedblbase put\rdup 133/ellipsis put\rdup 134/.notdef put\rdup 135/daggerdbl put\rdup 136/circumflex put\rdup 137/perthousand put\rdup 138/Scaron put\rdup 139/guilsinglleft put\rdup 140/OE put\rdup 141/.notdef put\rdup 142/.notdef put\rdup 143/.notdef put\rdup 144/.notdef put\rdup 145/quoteleft put\rdup 146/quoteright put\rdup 147/quotedblleft put\rdup 148/quotedblright put\rdup 149/bullet put\rdup 150/endash put\rdup 151/emdash put\rdup 152/.notdef put\rdup 153/trademark put\rdup 154/scaron put\rdup 155/guilsinglright put\rdup 156/oe put\rdup 157/.notdef put\rdup 158/.notdef put\rdup 159/.notdef put\rdup 160/.notdef put\rdup 161/exclamdown put\rdup 162/cent put\rdup 163/sterling put\rdup 164/currency put\rdup 165/yen put\rdup 166/brokenbar put\rdup 167/section put\rdup 168/dieresis put\rdup 169/copyright put\rdup 170/ordfeminine put\rdup 171/guillemotleft put\rdup 172/Tom put\rdup 173/Pete put\rdup 174/registered put\rdup 175/macron put\rdup 176/degree put\rdup 177/plusminus put\rdup 178/twosuperior put\rdup 179/threesuperior put\rdup 180/acute put\rdup 181/mu1 put\rdup 182/paragraph put\rdup 183/middot put\rdup 184/cedilla put\rdup 185/onesuperior put\rdup 186/ordmasculine put\rdup 187/guillemotright put\rdup 188/onequarter put\rdup 189/onehalf put\rdup 190/threequarters put\rdup 191/questiondown put\rdup 192/Agrave put\rdup 193/Aacute put\rdup 194/Acircumflex put\rdup 195/Atilde put\rdup 196/Adieresis put\rdup 197/Aring put\rdup 198/AE put\rdup 199/Ccedilla put\rdup 200/STARling put\rdup 201/Idee put\rdup 202/nbspace put\rdup 203/Edieresis put\rdup 204/Igrave put\rdup 205/Iacute put\rdup 206/Icircumflex put\rdup 207/Idieresis put\rdup 208/Eth put\rdup 209/Ntilde put\rdup 210/Ograve put\rdup 211/Oacute put\rdup 212/Ocircumflex put\rdup 213/Otilde put\rdup 214/Odieresis put\rdup 215/multiply put\rdup 216/Oslash put\rdup 217/Ugrave put\rdup 218/Uacute put\rdup 219/Ucircumflex put\rdup 220/Udieresis put\rdup 221/Yacute put\rdup 222/Thorn put\rdup 223/germandbls put\rdup 224/agrave put\rdup 225/aacute put\rdup 226/acircumflex put\rdup 227/atilde put\rdup 228/adieresis put\rdup 229/aring put\rdup 230/ae put\rdup 231/ccedilla put\rdup 232/egrave put\rdup 233/eacute put\rdup 234/ecircumflex put\rdup 235/edieresis put\rdup 236/igrave put\rdup 237/iacute put\rdup 238/icircumflex put\rdup 239/idieresis put\rdup 240/eth put\rdup 241/ntilde put\rdup 242/ograve put\rdup 243/oacute put\rdup 244/ocircumflex put\rdup 245/otilde put\rdup 246/odieresis put\rdup 247/divide put\rdup 248/oslash put\rdup 249/ugrave put\rdup 250/uacute put\rdup 251/ucircumflex put\rdup 252/udieresis put\rdup 253/yacute put\rdup 254/thorn put\rdup 255/uni20AC put\r readonly def\r/PaintType 0 def\r/FontType 1 def\r/StrokeWidth 0 def\r/FontMatrix[0.001 0 0 0.001 0 0]readonly def\r/UniqueID 4092170 def\r/FontBBox{-12 -210 1083 917}readonly def\rcurrentdict end\rcurrentfile eexec\r
+d8061d93a824650eefe2785f13cd28a8a226cfb0a1a9915b91e00d2c2cb80ac548a1ab21bed4518a56748942842eff6121b01bc269e7837046266cb27dafd3a4fd0344e68245aa98a5f1b5bc9db554ebffb879f1c082989cf6c044b76f4814df51dcd03f9e3397f3c73d94f85771983bd52fbe6ecbcd9a2cbb7b3636cfb819daa5469925fc89a188732d68c6d06c906d183cb4bd495aed0c41fe6b7333ad90a1674478062c8996476573a0cdad62593c86e4741ecab7b8c75a6bf02971dfdc2c5a2e1c8f74ab1e91315c54e72426da3a62dede611d5967201fe8bfaa5a21c612c0b245fa35c6706b7b9aa3f73ce16604e3109770d367fb30fa663aa8d2b246de733d27174a0b818d54c58c3676435d43949eb9e5e335396296bc3f096fc154616c0b723b0b4a100ed45072f371f77f26e02f1dcc41376638097d79af0a4ddbfc37dd6cb60d0d34ea5a7536c655d95549b8a5a269e7e927c3d89f74b88e17973c2e8d64688089d329abe6b1009c0334d57a6dc34f22efdd933023231fa03fc81093ef255a199448f17d8f67dbc57c38b2fa163b8cef97a6f42e74af55319eb81a6fb9de18810ba9e3659a7144b80aa066a9f386de3030fc4985efffd13c0cab7049a09a71dc1dfa21a1540f4289b13dde08c0d3b4a01fd2bcb4e256b398c94036935bc270713a24c51042bac575ed4827e17e5dc2997753fcee0ecaaca582c85518edc0c3dee2851fa4d2581f7b399f07013ca3d1d4702cc27be134cfa8aa1cbfecac76f1b406b5b3126c3b7b60ec34340aac6433997656b3dcc1af6c8036f051edfc109a493243546721683fe5c0e48790848079c74ea0640c3f9c92cdd22fab8af9b5575a5d1d2cea0f1f715505cb02a1e200cbe4ea5563d0475cb13bda929286f9c11eab10ddd676314996954ae3c94bd14f364d5202e6ddd20b1b4c7abec1c061b2d8a1776577387a2f2dc424f56d44e58b96f91f7b871627089498d76bbc6664e1ebc9b26486cb727d4a5d62fe405324ceb0a5dbf51c9619f2913e4dcea44c5bac49d74bd049f28b83955e13f0fc77d998a307b0bb560757b21e4a982b59cd5723d66952b8a7ad0311ee6874842f454046538c475b86983b4b8d9c00e814009235a058f6d5fca9e8339555518ba2b64ee925cf0944deff5c14069a1ee1de2cadafaa6421f495c21c042690b3a7c9e6a5a137ee005240308e63e0b1d4bead90ec607d19c57ecc24c2ea9b8ed4af8e5ec19575ba230c19156ff9b23915a7b50666ec4b655a2946f97c5013cdfc31825f2c1040fb28bb8876b1accb1fc005010e5e5d061651dc9df17b7bb37c495a37df9659962680951290f3f4168dffb294f83b2a3c423526a97451e2504fc0c819f4d263834ef7c8588ea4d68c98eb5e3ee3c2de20a6da219b3256400a7c745059581d33158a505d5bb07c75bda324c2d8fe34eadb98520c7b82838835e92ddd1d89516478cb1ca795324f802e1f7a5547f671588fc3e5b909f5ab9d573bb0766569a36e89586b7410b76867cad6577022e9be567d1a5578361d83b817fb994758c679fcfd6b22c9fa7c6c76f2a72be566e42167247c831f826d9a10e03874b9747783adece88750be1206a07923cd9fe06b677b61c69a7dd9e0f9dc60771ac529f6adaeee9ee6652cdeca5789c7f242266d86f0154a1984402c720adbc3dc79b6eece6d378555d78873844ba1cf057f385e70474132e0bdfabe169a631e07d12fd21f18736013499081e58d72e9cd451df304a5bf52c1f1723a5ec8b7992d8fa3f33d5be97d4c114fd435a94607f8be09812bc1fa4db028644e2fcef5d86ffb947a14993a93185b054a7cd9ad734c62f2d9ce3c0f9e2e8678bae5b92315f60169aa85d4ae22488cfab72b841374ac3f39966b9e126ad64c0307b54085b6e25d51caef51fecae4c5ddbfb5c29b15cc90ec0795123a84d3c31173b49096d617707d9e192da82493ac9884759115c02ba4686ed464d523aad69167e24e5303ac3eb3da0eebcc420fdc256cc26d466f979c8e637344958f02ba9d3a481693fbf13283d7d276af546abf2f2bb4e6c6f835c97e532bd5b40e8b08eea4441e8a9e03021add36c4fe28180ea466082e4fd7facb03f7abd47c929c4e0d84132835e59f8276ac7fddec7755cba924dd1c97e02691f13f2e159b1e358ef2ba347e2298b0b39f5ffdab57daae22d94ba5064abf716c866b64add8e3981b76a77a3a8be0a462594b9e1257e7940b237875e000c0e23a0841a85da6eb5af931dc0ddfe912285d160f12a66ebc8717fd37c13d20cc132218d31680d596ffbbb2f2805fd931c61693bcbe365f0d19c8fea4ff3eceefe09c5e29b7fde3782b8adf4bb1aa7f89ce01fa59d1322a1ccc4d92705e274bdc287312b23ab830968143efe12c8d4ac45e0c72c11f630eb5ae0c835b7f7d32cf261c20f04b7df8e362cb15cf38c531a3988afc8eb957fcee0364049ccc8d8a6935200970293486bb69db1969a2aeb39829cc4bed803e0c266c77b0dffd349ff9ae8f95558a3977775b1bc2dba5be54800a9e9645155315b062d0b5a0491cf90a66e84b581070f30d5796f71e88db0352432e8df588d25c9c9b2dd12b976618551d5625e357737966d9a15fe3cd9d54bc275b6f5993ecfcfbb373c419e2f8ed32fcd56d30db1345987a445ad259e03053244a1ff80c9343538c74845a907b0480f013289cf475df6c989a81aa5ba904a63db328292553fd4fc3a783fb76ee6ae50be4809ea0aaac9a9ba429c9990eb45affca8587972c54fdd677cd14f81404c77e4358212f44826316a927983c968767e7be1c7a36f308b6cab1648780b4f1a568cbb0ea49f6a6352d6ab18d54d442c176037ad16e18a17d88cd8fda7e86895c89368239f0f75f8c26f850316a328c40efcf316d8829ddb0fb69b250e41b94144e0475acadf63e51f27f6ecb6af4ed78ddce68c055b7a1f78ec1174bf9d67f54838da11655980a909ae1b80a2e6282137c75e49d703e6d5b4be616e62b020a8d08efd14912337a75857920f1d3515ab2771d38d8d8f610c9801d0b0c8d3388c75d211ac4e4c0c491d3b70e1bf1b926a6fabf60487613e76e6f779c4aed60929561ed06c676de7d5052f60db62e446ca4e2775b966f74a2ab55466ecac93c65e48d5e6b88080f24534ca63dd1e6781920be3010f3e9ceb771c5509754ebf963de75b4b9c9116ba7f4e21d9d89d2df167d8c5674b2fa61f49f016b4269e602c6e144de4a382fb7f185dcd82942081d6362f335695587d2ed1071a70bb27d51200a1de03763bec6b2c7a86d8f200505c07f25fc6be9c044110607154cb69efcbfce495dc86dc634e20349712d3754ce99a8b33cc59ce272e39f481b729c878399e51976652b4a525d107ebbd809909ec95f07f2012672601eb9ada5e0b3292d68b6ff8d529a2dcd23f7150d77ba5b1a36701d5954d37ee96501f9efa8e037290f6dca8c024ec0a2ced95b8dcbfea0ddc55dac8ffa55e224d33fdae74502f8f0085fdb5d6d031d34a609db4ed63ceeb285f3697049800bd560e31bfdc6862a49da0ff4b4e84bac9f184e08181c7870058559f826977e851f7dde09163b8b3cc82be8103f7baea3072202ffce888f1bbe37cadb748e2a3b3b53cf38b4336a4eadd0afffd76389b1dd9d067888c4e647b07a7643b81fc08a15872f08f6295eb45e7838021253432f2bdfca6c2a85aa70efea06863d3ebfdc555f41abceb6fc1a5f92448e917ae97706dc04adf0b7bc817c1b93d2f924b118fac5fe6053093401a4676c6d7ce7b4ceae1f5c149b1d8d712d32d56bc8430c210a7124e192e387ed9696df38ac2763e3a065c3ae4726afe9c16b07891bf5243c16add2bf494f9ae8b7566d4ee600a7fcc945d4bdd305daf4df51b1c0222e5594c65af003b51549e0e790ef194943d4accef39419ba173d05788ff822d4e3d4fb5a612fb13292aa377e50a44a6953bb793d0c521c2179012a882b74ece2f79723fb75624ae9c446ba358a3effd738ccb59a856f1bb5afe8635e1033936d58da18ea1f7464758e4647ac03552bcd1be22ef9d4c0f4aea0d7d1c91234ac50d5192bda73b0e63a8303ee284009e6f42c0a8671cbac1c02ac67f096cdb67e83a8d3a8b0e2915fe4e498d50a80892a374cf637cbdc145c2a4a16e0449fd300f7f03b9c80b320addb404d3b7388e5473a6502c74a9d614b21f2526b2e4f9fd9c5adca0f01677b57de5a55d60d9c428c6833d7abb14514926e09bba6b07763aad75d0a934b7c44976be43c289fb238aeff7556183515a5c4b085447922adff5498d29e101a60ff02e893ce8fb8d446874914eb3d3009db46a579d14dfe884d22d9ca5bfde436f4bf334c8c8e73cad66d26b9b711b3a2a3ea84d6864945e529bf59d397ed0acca03a3bb32e470c46cd6639cdae83b4e8e6decd2e8574e1b9361e2600bdccd6c9231ddb2b5981f4148984e0d21d2bc7c54fa7b32144192d32a60bb17520e855b14ea6ba31068d4e209a5add8dd6cec44932063adac2280f985cc70099a1fffb3cdc3134604bb8e50ede70ce9db412a309a21a0541662050f545cf6f2fbb39e9106e83d34dd1a7f9f08b66e68052482a68778687aac8b793ca24cf3d258d7991c4d2c0eb760d1b83dec08277bce87bef9883ff7af63a927a509eb44ffdf2f8f2a529baee6c68478a1f8a10c81fc3fe0a88004843f05d15b34d04149508d7b29ff2b11ad5e150269dd78545f0f57ca1752f6197a8539ab3aef587645b5dda3dbf18060d30c3426f2fff04d9bf22f1591762597d72cd6225f01377293696235f084801440fb9590bf6468e73c11d7de5c7c9899d6a84a9bbe18c8238e117ae4e74ce9c087957935630399f186f4712caa2775ee026f1c9f334bfa2ea897f2cef8f6d2f200bb2fd7d9292c056149cb3091d54be657c5efb690dd7290b7f866330d8b64cdb134019ba3c608bebca348fac2ee3891d54ce18d427de0e8270ca0b19b5cb9ab69ff7bfce6b5c6431fc794f1a2ae04975dfca6d865e38a85d0092b339119f43ee8f11f999ff0132145ef65f2786d9dae9c45dff0ff2195bfc604db64e4da4b681dcb6a3e2be4f691bad02abb6347e7ffb00172df452182679d10029a878d14569825c6df61c229e158f92a6a0e0590722313729ecc3c93a9de9f044e62d3abdf500ea46557e90649aeb8cc582bfb6fa71042b330800d50aebe27e1b7605c3aca1f67c4116d93a1d59d7f9a9d7dacb2c949193b0e901291474ed0f6b746c680b337ccc6adcccddfee2ba9e31f588940931c6d697222b14220ece34f97d640f78eafe33d689d8c5e94ba3eaccb197728d58924f1325c5951246898b2477057915ce4caea524151e7f3cb049441ae88014b89fe7730eed66c4161b2e01d608d977d674edd37527433214b40081ec8a262da3f69f07dd54acc3a8dc5058a927bf7ac5d3ff18e0e526cda9eeacc331cfecac11d2bec5872fdd5cff5f7459a42f263304294b139fd7106149b962873b757a2db3ee8e030a8ea3af3366fa5f3226d9f9de3c48dcc0f701ac74385d2b753e655804a834456e17ee576872bb5e9815bd6ab6a4555ce5fdcfd0b1637357424813dfa6443a46200dbcd46f7a15d342c14e5b99c1e53953283d83e81311eb2537162005d2bc0f18b336e33f7190d4cc4ab8a86f596ac2522b6fe3aec0befaf024e35f811a309c8a03734e432ac4695d977d6fc14c93773edfe0eab4b5a0a6d55b4ccd205086b92107a434b119d15f145d0f3511f823e69a4b3777b659555f06116cd99075982c200e36eff85d7931c7b918af5504bb4129cf65c8a33964b3b6fd3b2340fd3737c73f7667632cbf81535b88096e99a5e98ffee00409948eb2b46010a275ffdf345bc0e359ae4c2b6b804a36ec5018db1ddfd43ed28e0982be3dd61a41fc78221bfaf4eea3c94e8819e2d296a355bf61cc29ad69e2baa9caa77f4587be6bccfb178d553bb99bdf52716e6a8e2626505b819cc595f5173d13340fde8dbb4db3313a66348c8cf5fddfe7d7fd04becc8fec0ee1385ce5329088e772f1939fd59e2dce71c2946044fdcd131e06695ebfe5ae6e512640d0ea79492c20880391bffb1b3c9851cfba1b5b16d5860baa2a2b1f4e0a571aa3551cd73256e171c2590687e3596108defc56ca6cefb27095380b0bfff828d897c5f4a1f7710cc1fbe37ce9254c27edb772093e789a7e2a941d676fa8f14edf641dcb06fbd638e74a3764be77ccb7f93b5f961be59a6df0c5305b6ab3a20ead2d3eadd749fff40762a25833c9efbe377d2aae40b18e7785a77f9eb4f05f987ac7572854859f5fc5f56240e94305543baf5df3fb905a1122d20d09d7133923783f4d1e30ce9bc990e1d4989280cdcae75b5a78ff48ec68254373f9a57663255c0d5a18bc78b3cf2002befdf0cbb3cb5e76243b963e16ef7a34a06016dbd728117ed141ce213dae5acc96930ef9320938084dec3f77ee4e595b496648896de03deef6fcf49f6477a04a0b190fa668ecb8dec555db55d7ba7d0151042dd4f205e50f53ca706d93c9ae1b67b51989ad1b3ebb27f2416588397429d2129bfe0d5fbc7888fe0ca49754024224ba6fbd089214122d5c5dfacf7fe314c34581b80fe2f0786f7a70788a1dc27bce9f69daf04f197e9fe3f735a339f6f88067636e23559d1a02cd1d8b70fb07146532a5b404a4491d8650a22ed0f49088e86054e76656f079074ae121f5039c5a128109551c3ad7bfb874de16f639a82f0cae1ba1e26cb21bb8ab0ffd0fdda61da950d00e9a9d319c32757cceb80c07716cecf71f96dc167d760bcb54c8c41387d7fb8b5f884a0f7f53acced99690e1316a8f2005edcce538b3b511a637736a08c932fe9f54e281535c9ebe5716228cef9648813df7f0ce70b5107833eb4025e11f93aa574ca8215ce3dc6a5069f03f22a2224d9d2f8c819714b3b02f32066785f9aaf616afa69a3c031f1d1ece51d541f60d6b8e739b63b0f6472b93e5e34cbca3474b47deec1d72ddf91baaafa42078c177469e8099ef4a80758225c7839a0ba643dc3c88fb01ca0f278f077675f0f3bf3319931f129dbd9ef04dd0daa8cf8bc6573b6b2091b64326a366df67a739f27f8c20f47ea3bea9a9880b0aa3b558c56f6596b0f51b124b78b717336142cc03823f2d75c0ad84c09868cbd0dcfae4ccf37b345a26d5e08b20c36505447042ee2ce81f450a835d7e0b679c0c9eae37ef6982001a8c52708c5db0ec2294a90b9876eb789ab09af859a0a879cc27d2f52dde9e9a6960fca2530244cc26d3a21cb294458d707dbe2441460d79d1783fb334a3d144339bdd635b676a1b260f5969bf089d59a526f56bdcf92bbb2d52cb268ccca6c66e4ceefa57c72cbdf8a4e1a2b57ff356f8fa49db680fdbaa3d4df9f1d6201307a44a9ebef9ab8c893518d71beceba645d6df155f6aa68163f8d66b40c1084b673ac16b287f763d40db303c4c9f9e76a3e8fff77d595e97f7e59e56b02aa8f005d0c6830931892207e25a11520efbce320b99362de47e093fdd48318cef9458ab6b4093d1480ab1424e82695527412d0c5e3c299eac02b67ee503a9d04d31431d172f50666fa59e778dc43ffb7eb3f78324a5cd88601f7109bf3bc03f0256ec90473715c9a626a8488a4ac0403438c7fb97438334506f3718c262c6fb671cc1501e1616281c50c1f1abb0e796b5a989d9419e9146784619689562ee006255b58c5030d4deb7bd4e723d5dddced22c58905adb6a1b319ff10a8610912023c965c87e8b9f50babf746950ca2b356c1a9cc1cb8180a3536b2a639a147f65a8178fbe711c5fffb8fba62069c74e02ee7bb219bde7f581ed080e33ada55e37013823fbe5eaf8f7b774209a75b047e7626b8b82733f525e57792ca6c79bd882c5bfa323fc5ed98227c892ff958a359fcf654cb8facb6827d717a899ab9b4d2093e7a3762ba0c9f7ad55124173a5bb29f9f8769484f698dc8f8b394816dd74eff3b1a7dbdf16096bd0ad1b5bd409d56783b6d418631be43d241d6b834e1e8107bd9e296f9aa43e90ef753d6ad527875f230f6b1d3914692840fd51e8048ef5ecc8e7d2da90645c8e0acbdb3803d677cb07714a5fbaf0caa48234e6abfd0cc1be8a80ea7e956ec40a54ce712c979d9d108c28566d3c71c93c25fd7c202c637aa06f1baa00ed6262f87062cbc03e7722983a7c87645ad8d6e0df84112139cd220b03e3b874dea9b9705efa254db06927ab7951eb72ea84b253e0bb877b77fb1810b078ba9f20280d7e85fd9d134ee7166cb1cd51525a5bde7cf96b26569af11b40dbf5b4b25a662c9e14dc084cc349bf451cc976d1de3ef735d001c18d7e6027fdba88d29016ba395ab7f6b1d232151acca1ee234a287c2d7843223db3df6e3e5325a9fc82d92b0baa4a28fc927a3c3d307f7a7ca1ec7a54e8b4a56c177aedb633425bc7676a10c0c2d51b5555f4757c2c9908cf39eee8f85913216c5df40fc6a04dc460e99f55844700b4e02ef7a81ddf4bfa798e5ea327d2c66db67c608afb6ea5753ade25c620d52a5ff2c1d43385737d41e7e6cc645b1f9dffacdc0e8cf72a9128abd66cfe77f2c273e7efb2c6d3ddf4848a023911b7287797cb7a3baff8df5f4d8baf2d30d8ef3daa330fe4728f2fc405bf82b6360d1c9f78d17fe13bad721756ec2bba578702ab8a41c094b22a2ea393e9d4d597e5d0c2f12ab5f21d4546ac61e0b96ad5bc47586bd42edd8caf964cd2b997e0bd816ffd593d5481a8ab543384f8090d7cc0d9d4dba9001992366bbd61949f2b33bb6633f45554e879ec6399f11a13be5d195c927f9e4fb503c2f7f1af69725add00166a3c6f0b72230416d09687ac6109eb06d16b8321ab293cc112cccae7bd8233a6206b814694eb0057b708a76f7c793115dbd09b6b6808cddd0dccbc2a20c5abd02a91f0846ac0856a5cf7be1319057e48631937a3bfff2d24f0fecb55e929c1c7d8dfddf2fb892926e20c9fe4a84bc1d9dfd203d438a7f989ba23836bd55b1089bcaadbbbf19e8cf001f75059a1dc3daace5ef08b0b55231f3b63ccbcb50805601c86e10e48f90dbae123b55d421df8301a9c67f4cdead045d1ace302b93f9337ada9ed3ea36369cf35577e868383d69cd425ece04e0cdc1940b296c35e1314d837d6fa900d661eed125ada136ae005179a03494e23a245d96e60cbd7a04f9503c227e835e58935e28bdba5446128f0db08dcd9b85049c5c67e357a3a511f37a71df23c25f971df40b9982b1b5ab845bd4870fbcdf4ea319afa2e225dcbe3b4b06b73429467ab402aeb48e3b661a0355cdeefdb754d43b66d1b576a1ec93994587b16fef1d493d53263ba10fae3dd01736b479e33dcf87dd9af58b353bc55b8a5382aff065773ca8e932d8e55a80537dc04193176a1c38082e3d4fbc38ffbac68bfcbd80ea1682b79961ca070d3f7938571303267b2be5afc70f196383a01fabd8952db19f7c5921fd66ef6f44523adb1bb09ed0cd03c14b8fa91b088ecc5152d6e288f2f388b5870733b489081581fcdc2e1483d3a2dd9b1bfabe1732b2ae37041d49727a2bde007820f328cc2118b610793e6a6996e1f336a061eef6b61120049fd0b9f0847409cb3a8ab404c563c1769de2660b073dcb30bb916f3679b5819958ce2f5330634e2361cff5c0915861ec791b0dedf34a845103f7e1041a366e6109b88bcdfea2e0d0d260f16717d67e20c9a0b624f15f1f05339a408dbc7fa3b8395895bf50691bbeaccbfe69bc22e136a37fb9d074d668eaaa2f98af8ee35119d46af0dd9939462cfd2ddeb85792ca7d38d61e2c5109d2c91fc8232503900396ae6a85b7a88c80136699e77c0d7408eb88538cc544a3db250e2bcccbfa8076d70b026d46cefa250c128f8ab95d1ed9f028d56b01489d81da013201747b80513f318b84fca9dd1c4d65f36a82d09d847d550e1854341338456714e0a93424e6146e34994f84cc6bee325ae41d716920dcc0bfec62368546c901a8d43bf94c9bd2cb56283888ca54b758135fbff776c9fa98d50271b172889414b7e948180c03700d2cf3ebf390f0f9c8985900a76be9171f7439c60e18a0db5a46983722ff1489f77d24f2112b9035e65cfd10fe4c560426e464b6759ae5f24116d16f9a3167eadd85389114535f44f8054d463c1b8bab08779d40b74ee854aa6d652aaf40c30d63622eda14aacdbc002c0891abcc764b676a3b049deaf49d6789c7f9cb12bb6f0d1619548bc12b6df69c98a4af5b085c76966b116d6a2cffe4a00733efe59a473985d5602319fab0f04dc3a55be53e9c87726d6ace09dd8343e3e111858a3ae45b35de08b1730fc628265f0afcd3924b9c143450128aaf68f41fd5bd4aedfaa9411bd33032a81405dc45005c62b682112ce0952e1926a47571a8790d639580797e33f991aa9c0b7178448591f044dc794e31acd413e6ec84b3ec0ac0df66e08e9a89727f91620f3f18f9238ada2abf4557d72553f01bebdf62bdf5742d25b47def93114918c643aa2bf8761441ba5e6699760f9370b5c29545606f6003e4c6e4725dbe4078b416022b20c1d2aa30d0dcbb724783777fcae6d2487bb793e9435218f93573064f47408d08a9c39bc44caa91c24177e8283e59cb9be2c46c5329b150478beed8c6e1e35bf56c3becbcadaef963bbc70128a1518c635420921fb37e2252910e270692e8bd641832740d67f2174ff3171ac73c23512bb0682a305899af28fce475f399ffcb310dd96cd469fbbb7629fbceccfc497fc2e469a14943fbd5c4d24c8c89b66f6638daa38cbf9dcb49dcf016d768acdf758356834503afa00b7f5c8116e147c5397c2aa8ec8a241bb2a5dcfd45627821a79dee1ad9b162796b53c59e3938c94a2a531b737b7d108b9f1f42a2164027e7d3922858aa7931dc0f7e0ec8e0fc30c27d4722a4d083115c916da5976680da42e3a7fdbcb8084abde4d1f95f62a2291847c4358cfe83b13b9ec2f1378f75f787b2b573a027b24e9eb8a47188be809666df8772e43672f910eeb1c23355987358a1bf34c3a88c2647a46eb85c1429e2e5123acfce3504e0ccf4b89e9b3de548e2bc16b8e765bb53568070a17b23aee93b0988b67e10dca6129f19083a22e950a6beaffbf958a232d2b40a7966f96d8d6c1d30d4e9d42ee28dbcf0bfde533a8b5c07c32c90c634bbb90471c53658d596fd066db06cf96e76f5563b2dbf17c284fb88a7e389b9340cb17c0707caee7791234d4b9cdc0406a59ad5aa3ebe06c7ac21851139171b188bbe7b43422e3847e30014dc2f4966126c2d23e1d54d0db34fb2f415347f14ccdb4f533d2f4ccfeae45f21b027cda966933daa5732464d7e125f32b05447fe1d15170654b53a5fc3ee1d2d8427096d1f71f2bfa3e240740c879ab752f0b14d1d17fd880f05d65ff64a05bc08f69d97fb63dd78346b9ca038d79764cabd013d57fb3506d4b0ccef1c92bbd704aaba9cb912e6034ec9ab77210531c9a1266c272ce3261dde19b9a574fe5a7a031416011100ef594396adaed9f884d18173f0fbf256e47d5c57a47864a3d592c2324c39bb6b9f8cd770e23e5884fbfc119eace855f4f21356a57f912c9e27fcd292534cf2ce0e0490aca08b4df6a3faa614239252279fd2c3df91e054129e1ba23fd9b7a90ed0cbc1f9f8790ebb11bec7b0b07a228054e1f8bb4241ab3a66bb6a224bafa455ebf835e5cc1b0f7701e2e64190091a577dd835afc77e72f3970721e1b6fd64ed65abe1b7376eb58e3273254b2da264df7a97286ac43f1c55f1b50710f54cf02da4023260084aa143dff539c5c7d5951767d0ca6b48d5ae8dcfd1727774ad1c5e7273c2aa5076c0a0fa3ff8f1bdd088fbfc17040808f3bbaa83a228b573694aa171d4fcdf13185e0a010788698eba537240a9ee729d7af975b4a8637901fa3aa401cee44a0940b4378ec67b101784d07fea844a50c542fe2a3e01bda791c2ba0ea9879bb298b7883e1b8ee13a88f9dd3b28813baed3f97c29bc8b9b2a0bdfd03df29f826498abe20f8bb7ef6be2930377c56430b7b0ffafa4193998c32fb12ab1ff63695a3201e227698fa8fcdb065c9c3a82d2f0b8a78ddc9afd5a1c5b135b019c22a46d8401559149293420d91aa98397741e9cf6bd30134bd8b5f3c5a1889e5cdb61aeb0f8a052417c5dcc3eda52fd90b2a8c2ade1a0cba31ccc88a78e1573f68ec6104fab6c417c631e90bb9ee10daba4cc047ce30b2eb735ec694521b7a87edf3e15fbacc941269090845894eacc56321d38ebd3bf3bdcffe80e3b21e4683736c81a61ced165e3a2fa10b969ddfa1f55d340612e7550144aa43868d2ce06491f2e5e089b1fb3880c17b6040343b795832e1638791ab2d12b1df0ae253aa1b3e9fe01bb06f7f306c7468bdb397cf4a9977caeb0a3c95adcceb5161f95c985b08d5d703bdd011d2d4a38f16795b54058fa2183ce076cff0762b3ebf56d8d8d0fafdd508449a2f5b0a8692eabfa509dcd0b38f09f4f99e56a0044c61c067a107857dac52e1a364ea053dcb290a7cc1c78420bf502fcd56c804c8729871aae4a4752eda8c1f78de3419afae90eccdc7572a00deb5e1a90d1b8676ac638f011b18cf42c99264d350b77a64a09c433a470f3a2ea988348f59abaa12a1384b0558890e955f1f385c05c740a0b44bb51e9cddd91bdc46c8804eca94cbf9e0fb0c18b770b70f81fe5c9c6554b3a781b22665de565d08fe0b3bf6a57943888d387c19c296827e60eb6b81685016bd1b1c8d95b29eb8c335fd76b208dbd5054b22e1fc0ab4743f7b95d623ca64c9f9afd5285978bc5635a54a70aa16e736372ed027e9518a4d0d0f9951996b210830e6d46ce43272dd0923483f986349321b2184555b6a6573bced5fc778d682085d1970f05cdbe85c936a4634c9821776b4ca2e8dbadf3715228a73c71aaa271ad02bdd76a00aca5bbd2036ef7bf949814e76561a22c2f2ebcc43c7f4af62f5a40e2df2ba612e77adaf6715e1c980aec44b1164ea20020dcb5d9fb7072052e733a0a5b69d175ba8cf48b780b371575e490571e05b3fbff92f1e0fb87abfb18f4f81c8838d5bb155942adcf8911fc3926a22d60bc9037d8eb026ea975c00937d79432be5e791ff1265b396443813020ad11f0e0ee66bcc4d68aca9ebc2b4b8aff28de824007d9d9d00a12ee894e55c565f957f5f0cff21e1219c0badbc99de37c17efaabbbdfa903ca892d5a99a7201813a2ca9cbf7b5d19d779c82af7a1be51cce30ff3820448d2e10b39154573358bb6376ce5413267f6de7d7cfcb8d4d9aeed7a0f6648834b1452c58f397ea28dba8cadd4ef29382d757b78649c6436aa3e38505e1543fad8d22a415f8c0b6afa7bf16cbe0aa85eb9042f0757c8f3ce4e0d432b2b0a328ab69529c5f8bf8da11b0b354858df07e4644aeda913eaec05fdc24b95f6f4307741897662f347ff5785bcb06c0aca0ea708cfee767f385962de34b05f897242256c1eaf5fd9382fa9f07c3b2acc2d0193cc7688fa71448b4374cc3805cec6e7b503a693be2438fb03037d7a70088dc9fe10ac37c84d29c8b5f04648bc23c998872af1df21a88cee43d52ab580248f6d11c0896d25c4ec8068afc138518f52a23c9c8ae8dfba103cc49368a2ba7a6111a8d0e154d007cecd32d9a71c3341ee238d7664d39a263ce2d5efefe4065c1654c4996e5eb10397d78ab6ad8155ab5c815707655d2a85a00187f8ed16ca19f0fbc8c116417420666e9edabb192cb81fc6e2a4fdf00bcbe0ab582a63de69af3d7e7c6ec7f23c09f02a81a221ca2d2edaa751bfd3949ecc3e81d6f518453b47911b0aa13ff53dd8a4af4b6d8f40cf4ed2f5c3e700749aa3211aab791b9e9e899b4e53f3cf1d1c62bbdc06ae2ac394be1a9694858919da321123184a8a07d01e084655b974e8ae6919709ffcc4826f62b6a5dd420b784eb881ae6e682b292d2e575a28eec33e21afe2fe17e024829ed46bb4babce2e65d97a656feae5f5bcd3f10312a5a102bac3e502a468c382349d47b6e7fc4435a8c56d61ca2c33d93ded9f2165c1f640cd23b0f36e64adfd4c5afcba0fe8cab87ba2040efc0c2f00d3fbab933303b1c34f15a60158e5ebf5c82ed18c84c54babe8e1e4910921d3cf829cad909acef813f174ea65802614fb567944b14630d1e4b063c49637e7110a2ca6de4f34935866b3ff0c3643014aba7f8ce5b2701abc1e0f9caa048e7d8fb937bff1c0319a1de8f126a16740d7f0a8833b60b56864f98ea428e2f105ceff6dd30a16bd24da9f75dea0f4ce864bd44bc52b73057527b73f35a7f9e7bfdde6435e68fdd781e82b69b22c09b139b35b5a47a385ecf05cbf2152cb5c686616f81585bafa01d067a5a086cee61113870dfa9bda1b2eb1975403b994e4669b30bd5354784b1c5126ea7313e3230fbab806e8cc7411149ac52029430ce0be92453dd7cb39026ef26451d2f230392670bdc181a0d0b24267d08861c5e5e0d00d85b84a0873c02f678f2522eb8bdb04c2624256e79396404f475be988e4ccdca00ff9c4aa86cc48ac5f05d2ff1ae536c5f576d719862d44049edeb7d25c2e78e328bff60bc1f09db639c10486d65a8da9638080ab92b3c9af7799a8149cc771857f3d36a495fd7e58236beccd8ecb68aa4fdd1f8b3fc21796e7327e0eb730e0cf78567e40a8c0842dc3a9f7451f347af2375ef47b560bf6f9cdc8e682ae9574b9d7c9cb4c764ee84a22303a35b49568d8dc89f74c0447b0f263ec71e4acc6de6e6116085b7edbb61ca4b198e2af4dba714c3fe6b9c821ca1880eb1b896b01d086e80a43ddc9619789c75ca44f8dc9d4013ed4d10c50976201e6f020d6993d42fc902b299000581b04d1db1a4c548a774fff638bccb298f45bd0a30ac11a107e6b9042c41634732855c7431610456d2d163129166cf90feb8df5a72ad9ca31a8613ca3df539f599996904716878028bd884b1a8d75fd0d3fcc6dd8e007f6f9761ba55a00fa6799b6a3ea67a6a55ff8843cfda811582ef1b553b27c05331aae09b5a46aab96566568153afaebb7b4ae5e71f7cfa6fe08aaa52aea18d1551068e25942f623c4b8e8a56f46e352cafe4885dcb1eb19c458580d2049ffd77af8380ff452acf5ab88fd52d7ef112c29ff6464e62465398fafd06ef81bd3fc2b4feecc6f45f0146c96d4a7c0f90e861a1d433c5deac14a019f50511d6ae9f363952c0ba815bbb3774c97c16038e82e39b76bd15f58f6c693a973d1cfcfdfd65ff61efd3d6ded93c3aef8a715097e97d24ddc94ba972fdd68c732e1a9001f3fcc1a71f1f9fcc1b98637899fdb949c281d858130712d5d5408f0208d62f5cd7f81dda2649edca15790c87cd4e24ba48a7ae328822f5a21e57f6fc5a6fcc71d532ca6817f6eea89f76b60e4fc7bd243c2d2163b46ec46ae4be40764f95d1a51efe6f6d8274b668c50cf1de75ca2b4791dbca7c9232d147d568cfeba0b44caf8154bd09fe8a55a8bf1bb1afa95226a827167b13f33b924ca637182b0bac8b56e03327986568016841bd25cfc769000a7c746b2d930d291ea94f371563b92535003c4bec0bea1b134915286a1665b643bd011015ef04ac9d5abd487c0c4d3c6b20a00646b476e518fc0b008960148a123365cb40be362b3b1694a8d5c05d23b018370f616496a52c2cd25021c3795baf897f812f62a5a5721ac8170e79b49cdf906bf71c83af3c445a82a9b0979506e7df0fff03405f717f51c69c995d11456b03cd8bf9395d33fbb127e4cf9d8fc8411a26d42617ff2d64e886ba9fe5c7d5b85b43fc4faf88e7b4eba7145234769d58d53a5c07d1468693b0f93bac6e2cf5a931b11506f556484824d227e448c0a3805f2217f136c1a7d56f3421588e286adec32d32422b95ce8fd81eda1c3e9beed20f03cbe487fdf2d65f59add2bce47cb5f225b2c6c09100225b4276d3cb5b6792be4b8f0489bb750f1188f371880930d79cca6b09b2e3f303f766081097bfbc5e538d3cd4ebf27befc9132225dd7428d444c764860a262e95221f0f1fe57f5ef3e4432d2be9b3c9954a88e58cb329ce9cd37f4fc8494ad1cef800a7bba8d2ce486f7ebd7a5bc9dc73458bda9e4c46c6297469cb8d4e3877ea8db014c04ebd313c6b1ab74abb69b03334d562422a6529b8e68f4262dd3ff05acf1c6d0074d35e4e977c665a26f86d6bae2c4d64114ecfb334c4d575adab7905729ecc6345e3726d7f2c361ab9d75de26315cfeeafcba9bff88c0ce812554b1c6ab0c5765c5618f1bd8dcde547b86af905406ea216e4eb454e59a835fd9648dc5c8c9da88d7a753a2516b50d93e7226868bd0c4c6c2eafa7a0696a8ac2f0f3e6958efc1e6504032b42962ba6eb3c5bf856cbc6bb090d481489c42a8e6d5721b6cc02b34d6650157752126de0cac4c31b7b073e2d6d546476682be55d764f5bb3154d70dfa9244a6fe5580db958e4a766f95a61987102d67707838b177d10d116ad56368c48e815b30fef5fd6554acfc0d9e64d3c4f6b8e9b8ef6af2e09c6126a92f0865045cf97c94070d2fa013be48df5e50bbadd9062fb6183b147f7dede8b571826f81d546abddf5de4f95a97bb75200ef5dec4abef4950b587763db4fcd61017a457c00230cb8aec3bd775980ba70362b6e8d064f81062eabc6149c115feca46efab3b703e76a9241c72f6b6810adda98e1baf07d6a7d8189f6ec869b54941c40080a91980fb827c61c1f7399539387fbec2d1d46a54b1f518859b3a385ca098b86039bba25d2e49b7968281e3e1c3e5c48f2012680d81ccedf131a8c8891b4134bdcfc70854fc7787d03671c9e55185793ff6926ae12f1dfe8cf246fcd33d88d159842e8dfc7c257836c98752b7152039eecefadd80ff76e816146635ed2d36fbcce101eee7daf1515676b9a2b203e1cfc8859d128852e25f9cf924c16d4a47272e495645a6dfde91cfeb39f4e6a1613a901e2bab7c975c885f6424b617475aceb396d0d3da14c102a69987f66f38599c60210dcebeddd8bbc80aefadb225df56b7f48d1ab0a8c92584a41b9fa726a7de8620cd32472c1b89ee1cd0e3da8b595f98672343417f766bd8d9c52f3cc1a9bd6e1c8c1e588c023ac6e5355e68aec6bcc303577faa7bff293265f9506c6107432145deedef7b254d5890c755a39f5b3aee4364373a931e98d5ec011d247fa9ef17a68b2df72810929a628f6ae634f4427c1538dd02e1c9962f33273cb6add06c81d6258de794f09700a9c8b2b6c3a30eeb00ece206d70dca75beff10e9619d80bf0a7d93f24cc82b33640aa992945eac34fff30584801e2ca0fde10854ec1c60cc5c4bf08753009063e7efe7e07a94cce2de1d2add68f2abf5e6fedeb161beb5cbac9ad02c043d3d157acf018751e1140776a7f32d71f34c05cbcdc9c08a7c7a03f596dd7164540566fc54fc1fdc2b23b14f002eff9066b55e30040ff5ac54b8fb6d9d643f939aca40e5005f1d5972feafcaa34f2a72d6ee03ed74fa5e70faa11ad4e8ad2d0f788900aba49c29090a73b3432d9ab5d933c115abe4718cc9e2a2d770e9cdc735ad5991455ee0496b0ef2465e39267af0e36c30da7f3ace53cf3f6010679001e39f6e2a55da65870e9793b447b418ea1e519dca3c2bf0e1d0b0b07ad96a0708f428173694f70a113c0a0f79b3251914d7f8af58d59d6e198bdd6155cc3a4468be06e0af9a1c94c488c9fc6b44e759e43695c0873c1415fbf56c065a3ed585a790bf38784ff3cd7baf3f4b22533d735684bbde582438d213bae7dffaf897289cd0052d6788718be4e3b7c071d3c6c7b75f6e0ff3437e48217e179e35db0f088e80c8aea5749c71fec4985d00647877c9db4a55b51f07198c232adae969c821be6ee6c2b1ebdadb00a8916b1f93b1724775ba9efb421df723d54cf22caeeaa1b6cc7567a4279647a6e099cfe285cb30cea5a1019f43cca22765a15759f20dd681057a0832833c15c54cb1e3f0196aff51abc2b0ccdf37edab8b536c2a4bb072293224e9d4e83ed427b8ab2b92f52a3fa6bc28269618922a022f67f778779bbd3d164aed6747c9639f1628a6643f47dee03112facf7431bfa1954ab2d58c7b02ee380b86bec76fb52093fa5419c17f20b123ef0b0b5c0efded93f18e2c0aef25c1665c3f91a3f7faf4dae9cbd84efd9ec0a5ac4521051118c1e28dc3282be83918c9b23e06363782ad6d6e99f69a016153f70845309cb9d8e85d0ef65aabb02b0648665ae39d5ca7ae9c4de2cb940ad8e9b5e0e59ebf2298c6e16fe35886fbbeecc719f000d9c9764f3f90f66c8f9a243bb25bf84ff7cafb76be8418da346319798866bda42213d5acf00d836b2a0487b7fef2fed4cddf10633bc7f2fc2c0e7e7c8785b9bc1eee0d2d5ba42fafd5360f9c84c1a9fcf8a76ad2916c31d66257c39a760621cd0ae7b4189e051036acd5aaded0acf934fef24fe71a14cadf03afd4b7c1752e0c2890930d3f74b2674bd6135555911face869062ba346fb8bfc45d09f224e69273d4d00d5451ba213c798811eac1b8fdbe4631313aa8e35ab728a1bb9db3c806c46db222980828ecc596b8a081368d73f184401ade2b7f6debae497ef70b13d2aba139f22f233b4299ebec79ec32f868786c60171f0633ba142938699a702eb57a26d9d6b2e955a90f1020e798b3903e9d9dd8f8c98888081174469697170c38d5737a58c8258c8a9361d270357e51b67011ebd39578f6963f18bd050d014b592dc375e006cd02405623bb724b1dade6b3cc632db58ea103ca4a3d939dee5df3307dcbbb3e3d0079fe70c6acfa53430f31075b1ce444454ab8208bc4dd2b71d3d8dec8bc4d49797d2bb3f6b35338e9f1100b6c079f327a639e33cc262fad9b18fb3746829af4c08ad4a84baf08f6cd31070997c6d4b78fce290807a05914db726d20735e0e7058f73856aba4dc8642c0fd52314e856f32e5d0dc7edb7fcf7c5d04e2fea3af94ebff28fa8e886d756049f0e8a4c2d22c94866366ab8b0350e1bab7094ed1337ce3002463e49fc894ccbfd05f133ab0500da55ee616f23b36a748c528ee8e2b792eaf869e606de86d3eb0a7822b7bcef21c010695c05adf371a88b0b36981910ce1317560bf020004077dba0bb55f26249beaa36e7da60d783cf89345b38e3c1b5928b9dcb5a677ec98cd4acdcf960d3ffd40e86c6fa43ffc198c2bb1ba99fc5fed92714591730fbc7a64ab5ef06e18b5f18bd37fa9c3d954239d6dcbba27c3081eb7944d53428bdfa189a83db26d864dfb4bd729a2ea41ec866b8814d8a0664f0dbfaad60dd54ec7c61358ebc416a6bf798fc65c408e48c785e9a0746548fa593858cdd067ae1e0b5a35e49a338dffb1aaba512f5fda377b8f3f4aa6c76f2d33a6d4fa73169a9a2cddbe44b49075efccb37acd99774e63769ae150647f354f0b4b93ff3028c66de35f1d715146cf5d5c1a854b45bb38a5fa45aa211f988b4c9daf94f61ceafbd989d168439c63b388672d2b0bf170b037e5c38e89df56f80d7c6645d7c045f4118fc79b7c667e0072500d627eac7bd3a17614934e238c2f575f4a978fd53246da9d3df02a28b9291cc09a71361b010d1605e86f4f58298cec9be2f7e17aedcecd5d87d7302b2290f1313eff056b100ff9890dd989f495182e2532c691d96aa97dbb2ce6481a0f76b4e26fcd97a02996c39347f90aadad5c4a65e62f9ba6f37fea8df342d5c6cdda448bbe7dfc4a461fa8cbe1c2dc0a78abcaa67129b998e6f9a913a6e7c84e36b936f4db32f000d06bcfe8ae2d5fac04cf45bf3fd3f117bb0b3da685e109a82f200a1e0d7f8522332e5524a3fbc6e864a86f9fbe30558b3263847d890afc1b64e835e1526ebf69d743a13717163fad0f9e058816a176051dac15dd0b7e2f0ece4d367abdb72a339898575595bad4acc3b46b597db68a5b6141f850d243fbe0b3cc113bf7eb27fe4359ddfc4ff3ef16bc7acaa0f3524f310679c03333d3fcaaf2e7507ba98f8dd1b770f36e426250b1ff8a9d4bc25c463ba8a7630a582aea3252e0ec28d656063d6177f74b1c88d457bf9059895e570cecdd6fa724d2015eca9c76ddae2798f82a181582723d0bd2fe875792e22bbd67b111812ef40703d6186261d6be2747c72746960fab45840f4ff6907949f20902b065fdee98d2c13ba04152bbc70eb415b14e172b028771339fb0ca708bf580bd2fb6a6d6efc0990ba5d213fa95f2efdd8b1c1b699841b8e154451c5de23871b54be129af8e3043ec5780cc395f325d33c4d932a30171ad6c362281b895db4b604d1d097b8f4162bca2f6da265e7a2d1130043a9d21c95effcca1ef06d47c6bbb7860392e5b77d17706b5accad18e8bd19ee8ab2e950a5d8f6789119a4dcb02ce64ad5fd29879e948be85c8c35669a06b2fef4fc27ad44a3a5cffff063f9268ba3b8c54a777bb750eac7e3f3ee767a4eeacb1b7019d3eac82fe5f943bd042063df081da663ad14e7f4661e550e495f413002a6d3eab63e159baaeb60fb7766baabab0d22b82221bc37ed6ca672ad60102c15d040e6085a1f4fe67bcf63da0a15205892a04dad9b3ea918adf24d6479fd16e935badebd0aeae1cb6d505ffc29abfff2708db39d1ff6420288b3b779d291e3ac4b944512eca4f63f4e1069281a089d91d3363d15975ffdd1b103e4e2c163bbeb915a5d08454857a9d29d24b72a7e7df6e3a7e90ed517abc95a448aa0179959285247f17cc8d0532fb13738a6a21738ebec71e2e68c55d8a8b77d456b385408650e627970ef13765744f4a72e4990912186a403f71bf2a9b8ac7211a0499266466c65de65157d36302cde084d348ba46da3efc430677bb5b34f75f39f16bc710dbe9c4a4869cc6e820ffc59239b1049720bc24f5e59395f0f0f153bdbf207df37311e0d85db2906f70645c876c000583812026239a535cc06a4a6c2201b19560bf574825662aaea2dfcfb3551752e89459e4082e9196dfbe1251fdb94b9f997689be8e8609d4d78fade40844bbad5caff8a07376bd83a13141c14d0ce0eb0a9b2e621cd7e031660970aa4be5f7dcb5d15c2bd2ede463c6fb2bb6bc1abcfcd7a1af96f1ae98ae81d315af3713d000ab889760c12443ac5fa79a48fafb39bef31b3c3b9c636927e868259e64ee02f2f9a5ba0b9f1c4b2a9e7cb48beb319433419798210d720f6879e4cefe84130bcaf22c1e270f3e7262a578ced12348bfacc7ee33573d2916ea63ae14659f467dd8e5f72115537fecc1406e977438fa47375d11d5327cf409aa1ec22b0d4905084e18135917ce073aa8bdbf4d9057bb2e7ae21cd46342745b6c1a43631a5a25baf33e59e461339e402f29d787463c8d5ac2a889e7d740b7baaa588024c683aef08e721ae1f880966e35e8288b4724d97f6feaa0d812a9e876d10c7c8c222742ed14764b183b66100f3644c98ee165abe1f36a2395279ac1cba57258cc5a26aa5520a16d77f075214e439b6eecf9791cf735066b66cf71442b377775018c9ab44312fb5a40c4833d198a2cfede24b5f8bf7e4231c62c5f33669a2ae631b3a116af83acc02b72e05819f01a5e1f0492b5b11ee1f3a73d8bd473bef885cf88b2e8e35189bbc8ae8c261521a0000cd0bebee7295e8d35df1cd49f078e68993fd10373a53eba652a3f4be4016b27961e93935a059a321c20970e694c4678813216632a684de2ba44885592672cf46e54c9ff27d01b29676ec1c058628ac1e7cb063885c6f6e428195a37698c7f1941c3066480ef3d4c8e1b601b6b65c61b21c10bb3d84d09f7e1eeb38b7c94d1fc658c57106b39cfcad009e4e4b93c6d969b0b7ee231234cc1383e71623de0c1930db8a8dbf266df0e2d924da51d9f49e836b82d2ce0bb30f50bffad57cb960f448965a23a6057140f7da0b5e29caa6f95025027be799a52fcc906cfd6f55cc96e712e11ba2bdfefd3ef150f1f04f6d8de5d7f5f9f9262ffd4c0509078cfeffc27d9bacdcbd99cfea305c080c296d6699654e909a3f8b05ec63ed6bf1c01f9b1b1ebcd5c3d34f8d5e8a5d3386626297e31f510a7dbf67751afc4f77effede7186e0ac5a05c4cc7bbaa0ca610433f49bc9518f1ab48049c1dc8e7ab9ac646e024225326431294d5335d627c3a6e9e8a06d8fbda1720dfd868c071682118c570782845edb082de727983c8e4be4aa9196046dd5a92f7e3e9a3d993613c76af2ed052681ad82d8446aecfbd169b3a659d27f0b012c45b9fd2d5b022492fb34176720daa6af6b61d245cdd44a017fcb0d82b4bc34d8c14d8c815b75616a4b8a0825658e903767625b4514c8ecb6bca7e3cf28d065a4b18456ee149ee611f6a6ed9fc8060a06b0f0a6e3de41e7d4628e915808b939e901cd0e48c11deb612f94b1eb4d589df95e2b19077aaff56d57afa46add91f6274ca2117fdf4ec9ad15f2ce0eddcadaddeb39117da645bc127188f7596ca6c7ec46914c17968e3c2c976a4d71f7f8e853a558d6f09cd504e0475641389dc5811d424893cbc25778b3f9ffe28d83db243f69d7fde1fc646d6726b7ed9ba058a2a69b0a368da3d7da417d71552e231c3334b7b37884f84d831e2952e80b10b205eb9b5c02697e110e3cbaecf4e5af641335a6f8c4d00e8d2862717d2164e4ef64ca969d66b23cdf3bf06f801fef9553859094bbc872153589e8153a49c233294fdffd46656c1304642139fecd39fbb08abd4b8730169b9615d4809910dbf0a2ccb1fa8d0c38c950265c77fc4904f97c11c5e59b9f92bc653e67bbb8ec57e1cb7111dbba62ee56eaf48210af4f5f238490a4aec16c6c60fb4d968915a5a6fb7e6767111a6dca6e279498aa016965c58939dc65f55863d7c21b6885c6c360b46772571acdd7b3eebfbeea2a681e8e10e4ea4d95e259a48bb53059650c9914c768f1b9cdc3998558b5c3fb2bb4a643c85cf4ac4582d554fa71a40235700747589a8f837ee85a9c66d18bb3d010bd28f47505c45bf7d61822152e6acd38b3103115e3f4f4839d9ed1fdc3a9abbdb8885274ebeef30278964b4833509fe21a75875b7a1e59aa1f293c9ebb12e2f8f2f112f99fa17c5eb3e7f4991416e2829f7fe1f851fc3fabfbb6c03ca56f72f11e5a21da6d3a6d9696e7de32137173b91c2f6891fe71089510ce634749312f9ac7124ad7b6757e4ff3d7594057e65742c447d56a91e718ce52eba5bd2d70c9fc35c463a9dc1c8591d8dd2092a7f6686bd784de00568fc57ace7ad9ae6805c37e8b751349b9b3ef1bc5cb2cd17d7a11f3ff522151311ed21e0b9c9c5ad9f1e4787e9cca1732f1666fc70b51e9764e66d1b9d30a1d88d75524d3fb53e5fb3a618b50200ed743ee6b165b147726120793dad8ab8b10e937e32de51ec7e3f2a3dbe047895ea4a6ae75739ec0e004cd0ee5fddea612d85a1ab88d7d2736c6e5272a40a3e47d013763d5a9b196a4c494ebb2ad4c6f72dee216b533bff8a61fb1a5dc95f39b4206ea2530a7844e77df2500fdbe7ef344d09898b7f3c5d8c79e3f9e9e99981c3df0e3dd7505696fde18c154f7e02d9bcfd47521d7381c93ba2cf41d78f561a3f53eccd577758e03fdf162e38e6b7ad8394b396bfd6aafce275591df4e8032d64784b7a731c408694c16a338d771eae93499d4051f8c668712f2c64fdd596bbb9a10a35766928428914a38b8a557856e13f97eda358b4489ff9ca5d523841f17f746948d5aee5698785e51492d8b8f6b6ec652b0c876ceffa2ed67efa633f66e21a5f435caa7a7dcea449d8e8a9bfbbbf8357cf2380a303ef8660522910a645ea39fe978baa4a3fcc588d283046b5267851f872aba05703ad893f89188b0714dbc4866be93dfb1d0d04e374ed83abfa660da4c6c609a3274e432b71475270e532f06da1210163895ef1d4a256adc7f300262158de51086124508d017712fc2eb1e2fd2d92222ad09b2f53009ab06d9bf5f3e71e7383297e63ca640e44389dbb99cf0f4845f71bcbd058bee28d4db1d80a328aba88bdd9a80b726bc51e53a92960a985e7b86ea2a8e88e6e3641180eee8cba7303d54eb60aa3860a0505a143ded66dc49565e0a80c0b31fb85f4966a2154c9d64eabf2dc8ef2a2014cee92a3ba64c27b3bffa528c9bf353195dca0e95329d8dc1d50b8d5f6cba99dfacd70180ba326bafc24a472a65a5929d7928b11443974187af4baf36da0e89ce5f08c5bd698fbfe81810bfd7762c0f5d975fe9c778e4f1166a5e3d8fe0de5a195e128bee49302ad6e1788ad555b9ad8ca4892d11df7867bb6edadc878894a0e199fb4bc05a34e04be99f27af0916cd68dd2fed1b2e9582cc30b8048e2f848d49d2955fd5ba97f0daef913749324112ce2864ba84998510a5281c1df35afedd4f98e3eb6c7b0c0a98b3477bc07e074614cc4d85fae7a151dab1a2ed42c43a38659b2fe859ddba5da7d4f2a8f63442bca4dd3e11b4b981071d764b8e02feed5b956eda0b872885ac801b678a54ee120e31429866ac759f6f373a0f1b95a3f1b42c1087371758e01278a69eff2eb0a2f1221629d020c7754b0ab0de3a0d6a0d2cb1e90f23fe08faff863bac1c837bf6696b734d066596022331c3d1cb3c3bb9be964e396a1e856553b6d968b73066aed50439d8e9a64a332d02a891c1d6e29a81e0bba8ef5a9f86683d83d72391b67b62d1780c77b6457a265da0b3599e0b7918e49208cb5cda359676c8d96191547ffa8cc717cc7b6a6f449349e1cc4beccfe7613f0d3b715e4882a69ef9173ac2c261cb62291602d61bf53ad9652186dbde45ffb908d1316e4ed3c1d0b21e95ea66745ca0f5d480f690d2c519b595ce82e967644cf7b72c9cdf158da5a7e8443a6c7b60c129f2063cfa9b9f8989065880eec8dacf623e93db8e99c09cd5d94df9ef277ea6471ac2911a3c86a92831fbcd52e3b3af31ff8445f043bc48bedb11069ca2b250ea31fdd4228cf2f7735b6012dd9027594afd09f0b5a38c1675fa7f6035d3b5669fc3375cdf438e635b62e7b4ddd003c8e366671bc8e9ef38d448a48e52feb48510daab05d38fa18c7d8c0b3a5e8420f933737a145de6130c74925bdcb3e305a07202f91385af1dc4808d026d33e6dc360391b8358dde02b04e6935c783280eb340fdfd4d015d2e525dd18cda917730df9d19b7eb51ec0f53b3aecdf46ee9f68fbfe0c71896553fc8e85115080ce5ae3937d69820757d54b4ea04476815a5321ecfa8667b5ad5059a4b5c9e4e0968a38900c7faf1d52b895c8420f1ec7fb4839fef81dc2825e602ce89f3c06902b61fc0aeba09483dadc596819019c54d2d1c52ef98bd2f7e6c3053daa2cc69529515d9cec00aa1a6aad3c4f093857fa82cfd78bb540772400277753a1196bd4005a91a3650f65460b3a9a36d6c53551053b95e24d1ec4d078cdce647198ca0463cd7cc0501369399fca08aa9df985e11bcafeb40899d419a851af6398eb3c15ce33a3d90055706c1da634e3120aa28de3eebb9bcb14e7dc2e11834b12347dc58b2292aa14513bb993b78f8121cfbd1778e1ee331461a556887a63c6a67d3265080f3bbf156f186a26bb800c35ac68c0a472eab420aa380146dc9076bc00c65e75e4dba58475e8b2c77b74f292db225fde4f6d2a959f162855519f07b77677a56c7e0e91c7154c9d20e400eca9e868e8cdc17027ee04164bd29678d7b8e6319730f060ca1b246489803918f62f9b7d759add3f3f4dad0a6ef1de4f4077945db34a570cdec7f7958103e0f73ff1ee8c466ea692d1dfaedf7e7a7e94484e1ca6204d044f468f4527844f765cf4eab0a33a680d770ad3507002e35ac84f6687ca59e4fcc3bb51955b2d4d98068d5d44a46ed5ef40704d3fb7d10154f4aebeb5d6a305de2cb6b2711c5770bf878f39f35779620b1d695c2904da2f6a595852630497caae4cc9a822c4751b51cb69d635e6ec47d6972a29c59515e2eaee01a5589c03bc24916b76c32ed9b78950e910211e331b033c052413e24ae325af29db647dd02ca06cc5224a8ddd55f26ac43a83d96e0beae9d7b9ffa31d515340cce114c66a177f8d7c291bdd49c1490e880d8f82ce4ea6f7651404d81367362f2a3e9b0ce311eaa8fb8525cf8690a8f943ce49bef0aa03caa44fcb439b8b7a31a72fbb61208a04697ca3bbf8b5a0606341a0e784d6cb82b093b274ebb4cede80485b612e321be1166e3c84f2bb1789b343863ebaf12ca70a92ac55a78c7998764400fcc9812fc3e8737af721a4d5cc5264f3a291f25e2b52abe5e07a38ed0932614e87fc1bee6b2a8b66b83fbaacf3f1b49270f8c78c5468ed6a7e4d2571d60cb9808c8df22161e553f1fc3361b0d4227e26d087c80693ae4c4477afa54cc53c3b15e1b3f4e137f9366aa52ae0ba3e5f2d50c84d243d55326218faf8ffc2d6e5202bd20e4823f1b4574181a7470dfd658471b2655b40395dc6359ae87a53f19edb007b977cff3c4b0dd1b2b23d4f4b5103cba48612cc2a8d1dcd208f85c903caeba0e6d3a7348a6129c86843df4bd2b5a50699955e9c1d6c6200dc5bb2d90df887813da1b9acc7678755e24da71ba4f60720b57ac93e7f8ca9e4c9c0be6a608008e5f5ebcb631542c9c2f6c408279633b43dd688ccb4679ea0e0d60267f194210ac7d7ff258f76525bb51e2ef7d72bb10161a72083e7de7ec3ce96f53ba4f83eed496525ee2ec23ba0e06713cb094637f2863d945432ccd307ef45e62b25266282b5227cbe0c9b27e2eb55c7c15510ecd3145c01ba5dfa6b57ba234d1548cd65e851953e0fe25805acbe0be413d12526dbf031d07f8e1177d3377a2575fee0dbf74eb62d01187af05ab977b1014a5f52a5a6f20de227f3a537eff328edc4a170dde3649d6778aae839e1e24793b44b4251518f4f39a2d87add841b3eadfca7f57d968e27587bcdf516b425e59866f31c19c2ff71c575fe262536499d92873266e559d4bd873147a449dfc72d80770e045c2d02bc3cf98270d5b66031cc3a8020e688c629886cd664a2e9e01491262a51d5472440257dff2e991101178abdfa061850683747fba1575df27f75a96a4d8aa64da924bb79ebe2e1e23ecefb00e88157f648c9ae937a5cba7d26dba81f9fcef54a4d550b6977656fd6be5226f77799b1b731f7f6f9ead317bb6a370075e4b5314829a0bcb4f67f35435df3a8303081a1d427409b01ba7b9824af827759643cc07c9ab6c20fdf9b94a54a3183d21b6f475f7b7cd8a515c1cef21b386368a39d855a92eabbf9e691ff24556ecaa9e551a8c415d89a0305c15cd8fa9838fca767318f14de9197e878c573bcc853a83107909311d62804fe87c3bfb056cfd43df4c09ea3a0d21f933bf722bfc924d1430ba51efba89d0c5e9450eb71f9e016ef8833d0a06e59829e66398b1114d39479f03d506394ca034388889b5333f1d0bc9fd8f09b7ec5cb4589aab56d96b2a2d16aaeb74d81a011ad5e54bb686c1a8df3a1447c7dc256cb670644010f68c1433c187b32920b9311ed70434f597258ee69a55ee5434c4c80623288f8cc9889498a5fc6653f4b823d6c3e6efe83d1bf4950ec13f9ffed06013b0721962ea59b8ca86cc06f05cdbdd0d2305d93abac05726b527177683bc28b149ffe1fafa89c009dcc0caf55e1d9bfcd1c4fe397d3c5fc0c6da383f4c41daa66263a471ffa9d981e47f85ed33653fdadce24b56b94fb30e567fc6184e01a8905a7aeb5925859118a1060295d50487ba0c1e76ca8f99e22f99a39b809b6505842261b0d4deaf7d83d2fb26bd39d2038bd1353a36ac970cadfdb87056420c78d63ea2b2a7b8289306c163ad35031750bb6adfaedbe1a7d51f5158cc4b04321c13926f56809b0335b6d88b5f779906cd0fcd5b7c0f0bf6d57490865b51ac8c9710997aa076ad1c40cc145e65c02d25485362c3f949763200c123e7cf1bd09cf556070bc874f0ab53e6988f439980de48974db3aa17f6137067fc13aaa24297473b2302d7b44265f473fe4455ee2f9d773feb52ca364a20df1ed7c6c78be155870a586e2132871ea4fad2b4add1d2c7040b46554c5b8586744dfde9612a76439e16bcaab8daf5cc20d89f880251a9fe6208c314095da7ac5ce369c57a576361cb1f66fe1da7513f997fd3c6e77b6d166592a749034ea50feefdc2f7a1bd4e6ec60fecdad23fcfcb829fcc8eaff523797d9dccc24145816b74161f3f6c47ab2b8632b0dbfaf01938edb025a9c9dbbe795dc542c24bd7135c7c5bf361c1c3bbf4a50497c9ef18ebab83833e4452a3df9657850d114a9d102ab023ae9cdb3db837d1b321a9bd69d9a278b97d1e086a2401c1ff69f5b228bf2b6cc7fd1e4aa6433c0bbd64a74a42591dc0ddf278cc12313d7d1b81c316018206e1f349b4ee5e3ad47562795c9478d29946e442c4494b6b6ae6415258f179cf340a9f99f9d16fab1a9f05726e37897d034d3f9b469daf9fe93e4c3994196a07c5f9128f04a17a8261a6e527629565c2890eb803722ec91e30c06ff14f407809e92f184c45440b20cac6f6be27fa691d140e8e584b623ba07dcd1ce6103c844f125671c253961ac00310fe5f4ab96bb88e7d7d7e1ecf63b5af80088110724d6a5ae7a4f6970cb920b3c055d82daf8e0b1ac53aa6679f5ac85959ab6264dcd6528d5a3f1a7c7fb9fc0e2ae9ed1e10a3331a450d6887fc51b0861b5f461369ae74099b381185fe076e2ea69b9eb54a699c9268fce1b3a07daf6b5dfcc4c02975307c9e725c3047e0fd1bca91f3133a5a14ba5cb001ed0523a95984b1a5c1a57bae0f3f556cf9c0ce59c2c4f892d0502ed46471a6745a5228adc2edf9f892b906b5c0e4e033feea3215e2b140993432d4c96c91e566cdea64a5a43648440d6cdce43c803ac6c3532d860473abb463d0737e6634aa9b20c78e73c3bbabb6cef59c8dd38fef882ca0c68866737731ac94fed1f8ffac930777301a35eed5c538ba913a1c63532c5fb6188b5c16ed280267439dca48f966c2a43b4ffc61261a17aee54da1afa7b5d2a92245beadff99989eb90a7c1acd3c6a066446987f64cbd6363bf750761e4d7c6c67f15118f782c7b9dff23b61bc124650ca02f0c8390dbe4ed73f994e1e5b45644838c0c6064624dc7761d3254dca99938bf376bb979921dfc19864a0fa2dbee6eb33800c50e4867e4ad14604e053b9a6339d5aabc5fdfcd160626a11e805572666d182eba3d983ae48df106572c7dec35eff7078d9ccd7e507c1e9a6ca2407231a0783bf13d201c4ddae4f9b77b4fb855f743aee3de013ba45d8a6420a476e52d38afb23c75f2f1bffc4f2ce861daa4ec733a757be06c5c63d086081020ded0e38a7ca7ffd27ba5cb21bc403666f301572e1763b2e60a7c0847244f540786740d26f0d1021a2b81ef853b2f07109f7094d4ae75f4e84cf1bd63ab94cb6a42c38b9825572036ab6961fc49dbb24094b2de3f3365613a04e557359ead16d4ab1e73be6dd71f37e88123c8b94c25c8b2bdeb89c517e413d9d09c6cba7aa3e573a1f5621948761455c665b713877db28d7c062ad721bca8b7b28ecc060b8ed68b461e9db67d4808e9e2446ff7a9f2e59161e6a0fc484afacee5843ceb45e6fcae60af3ddb9749f003d9889039039fcebab673512ecd739ff5b610a9a90029213e112cab2d83a709e19c7ab3ec16bb60b0a53f654f55ad2b734df700a100e5f2ccb0cca15802cffdfcc8076c8f22dbf9a8d42bc6e00b4548acc9bfff67c5d812ba4b35991d6c58fcdd60cd3f708e06ba59abe93bd44831cd6e403fe2d71b54ac7d813cfb4eb047bf799bc95f460fce9549b7a9a489f4ad105795689cfcdc9225ebe59299f6989b58a3e0065a9f646d82aa27fd954f015889562bdd4f897fe642be846cf3afbe2acd4e2e40e842ef4a44956b251a8bad504676ebbe99851701584f2f4f69aade1ffc639cfe3243729c938c15f26f8c8571b5ae94b02cd95b26715034390a1f1648cd35b1f0614baefcd2d7cf27530d6cf8e26f553ecdbebecbc1f6b0f2d3f152c5add956bae4422470d5522af30f13dbeed7580f2d3c9404cdbacd60bba697e85aee7e54ff7b4a6217cd29730c1ab867cf530de44478ab8c3e57c51866136b0497b89749c72c2fb8ae2b9cd77ad8c6d1af8878b66f64acf9df52b15d9bff07669794a751cf198cb5b52228d9e810321dde0381b9e294a60651e199db8bc0784ada92d86dbaf246584dc6c482ae93fe74cfed9d2e708f49de7513a07cb38724c7ae1cc3a2648c1c394fa85c56043060ca058bf7dd4dbe8c515a8057d7c56eed326905f25f00d091a9f6a2e5c528b670ed8d20a1338100dd2df256b7038ca7b92675138ae0283cb9840c9363a320d4ecca6e37bce9776ea21add8af8d470a33dea35c40e2fe88952bb3791de1677e7b9c32acb116e2282c2c78875c685ec1621da3bf69c3ffd3cccd9f0f0b08fe8f1d126f9db0440280a00dce41ed7a43ec3e6429f119ba69c536d6e384fc39715c54bd37d0de9232dc2cb4be2c437cd2b225d1e663e10e49c3de42bf6bde842fa49329adf64d81b1574c368a443aca940dfbe491a33b63db32b3190fe67dfb7fb86994eff1c294fbcc11ceb35ce80a600f80b8c79e60a88a9a38856535203daea2878362368f2e1441f5252878b016cd943828f2eb46da23adec24265b6af97693e065848af0157b3a6a6c65a04b0bcc8755eb1acfbec2792364ad0ad226d5c5a3e7f9ab49de80a49acf8aa5c7616bb4a67c26bcbf466eef8be47fc155ef610c790591cecdb2173295bec56ebf4fd91ef9fd499fdcb68f36e11e6c618b84692cd0ec332c32fa652d952e73c3e3dd35c55a9c05f9b049821cefafaf3a59d7680aa9ce02472e2fe5055125c9b9ba2a7b25d5f6906cf88628b994085604f93a3f72c71d81758c471ffe2e3aeb47a8c17fa5d75276d4fb1123b94098ab68066b45f387ffec1d1c79ce8d905705fa504c8d6811cdb28ff827c1848292ab86f43787157dd05764ec1482f6adcd99c3d54b85c1896083cc31b5c8026d377cf8a4ca5a18cd75f84ae7461a81045c0290558c20fa6956c4f58755dda891ac458a6c915a2076467e537eebe355505fcc2c973695d7dea386a52d2155de2dcf4747ee1374bfae34f1e26bc7f26036a53735013c670e5a97765f637723a0404931b578979b94f25de1d78b8bd6dbc8190112f05654fcc37a2e3af0cb2218c27af91d96b4dac8c15c7891b08e339780fd9cbb3fc54ee9521ec8039151ae5b447e7d818535cdf3f51fa49a9099af7774862866a17bd8cc15acd395773cde28240aef35970651d141b1b4dd950f79db94e41dc623161575815f52f34b2c009c622a8dc0f5e3841a36edfa29f450341137d0a61620dc62db96d6a54702d96b3c71782051a54cf1dd63fb6ffac8adc98f0f85c2d472018d4129e2458df225c357e4c77af6284500ccc6512dbf2368e1057a2a1bb6e95cf5e2421fe6f0b616ece11b16ee36e39ac2d9919423c7d59e77810173c6d6395a93592b4626886ff32925dfc8d6d252ca7b642a8f96bec5b034591c8a8dd5e5bef050e3250fca3698de501b4147c104889e5653931be758151adae8edd7c7a859048951f53eb462b6eb17b571b9324b9e45172bb5b1c93c6923255fba2305ca28cde0c57ec6da95269c836cd41e3cc9f24116267ca0ccff81d644843f10689364df823e60110d295da8a109b616f77464182f1e933abee28bfbe3e893bd059ee8983a0c28621dc1d734c04ab7e3c39650ed778a7afb22e811aae45b0cbd8f2be085e01ae9ae29d98ea42b353f053e1b3e62f0260fb4aaf91c94bedacb06c9814b67792cfc18fbf0c74004714de8146a771fee831a8819432a549765e3d98e0381c4a7595d38a2415dee9b38714ba48f3c1346c2e5a92f5a8a80ec390e78e5faf01ef784e7f9a89746988302cafe62ebc6bea14110f831a65c195a164741beda5d652b95a05b22573d231f7376b3b80335d3fa56e8e72c2dbc695f5252b01966864fc7228549da767b82d7752558f7ccdee1fd86cf25b09c0bf84e6286df14c5cfaedc4529f20863117eeab700bd3cbfdfffa778aed414080fc42a8bdef1901c6d770399857789d317faa24cad19459b7870e7acaa3d6eeab55af56976c683bf101caa052643c878fc505476e8e9e47a9cbe4a9de664d58c79c5c9b66a524c631975db9d4bab2706e97e207a4acaad781d453d39f7a13297459ca8fd3c5486210568907e32505764e8ae1315c2c38b82b8a2196ddb0ba106aadfe33e9c80d6fc404353b4e44bc6695535f505b2e850f3db9741e6aab44cffa74ab724f1a064f4a6db4f5ad8eec214dfd50f7a48b42faed430a590e582fd8af38c59dc0732f03a39130abf80bd7cb216224990b0290f837c605dea7c9ed496a879ca50756c22a92036789068b7ee0b4680d98b0e5a2a3e3087a6eb25e717d18f393ec21ccb7f3e4216999d30ca8589fc7306f11d49e2a2b7c43302697d17b789c3bfb8b1cdbf4517033b234913ce80685bcda0ee097f8a669054bbd016d0f6c307acc0cd308d59cbdf7f87e4aada45e74bfef42954633481911d034ea97cac9323a4799fa82d4714ea6c8afe0da1efa2e9d869e1aee36a5d67b2d0511f77de5d325ff0b42e06c2bd8551cc0cf5cac7c958f9a625ce53dbf76217b52e473d57d1c906e24aa8c34d192ee6fb88cef39afd66b847e6ea395eaddc45d12a1586eb769fbd21b955ce3a499ec868130c8a6f22abda5a5c86c7acf53fec0d1373feecfea2a35039b1dd5f875e715a28224a278ce96ee79c13593e2cba3025232e08e9214042ea99f9380e35587e160a00b41b70f1b0eb4dd71b07336f46079c25be95471de8b42a9f4fb03a1ac104d4ec1ac2c3acd51058d10ca9d3b7b5657d7dec74845d0447fa39bda1fe7dfeaf26daa8fae39fbcdf733ef7ce643572c5d5feefb350df7bd18c9235a41ecae829193e2f47b26408a7b8e9e844158ecaf50b395722a6a476a1bc1212d9b3430c09e802f0d3ef353abbcf29e0fe0358237e2049d1f93e660f5ded31e438b8e7393b68cc6880d4901044081464687079bb02607a4977416ce5d1823d1d9ebcf7562219a2bf767cdc7eaf0a159fd12431106a23e403812c4d948908132242e1c97fabbd69a565b58e922d13a728e92b04c877e05e6e4d877a9d0a3d094305d89495cae047517463b8cc04fff0adee7f44858a6acba6c5b763447b03a42c1918dfb70f54123c18920b0597363af65b66eee6962d91221d23565ea50462518a8e60fc5ff7964e11cd80d04bbb2412e29933c293db3ec78a04f38802ace93251af084677107f9b580f4890a1c6bd45e3225364a042ca09a6a6a5aa53d46f1e3b407fad951694d4c3742c43e10125e8699f48a8d133b8074995abb90e6c1d757aa773558d4a4aea451dafe0aa9b4c926efb29afea8d85959927d431b3809b69c2e65b59e30443c66cc6f864c6eafbd7ef32c8eb7a1dc6a663f5e02acc2249a3a98c91ca21a25544af94e246616c099a4aa12923ffc2ee23a3694098595e2b8a06cd236b39c4977c6e3a1e0a98b4120a0c360bb9127e332cf3dde68d99cb086b9b0ee25dc287e2d3f5420330516cac8a4e04449cb6076c795274f1c54b0ff8d554f38526b09eca3771606195c5c51c7c995548e91171002ea86bd4bca9c893691fae0f689feaf12201d31d0f2a1a3a9ae7e3b70d787bdc0c3a2a76c9b5713ccac9026491bf43b5323140ab2a0547d84ab83a48369baf87565bd8733c6fb9cad027f435f9ef0cbe3c402e5182fc8879b7216394b33b855f48ca8b1f1ac798bcdaa6dab95be3da780be57dff876a641e71f5da35da0490d0639b9c178c95fcb0e1602ee3f645367b2c684b90cae2d4722a1d54afab89642e008970d172d229c1fa4963635b5735e3c2c4ae30cc47a0a906c85f7b38a9335a24e87c2f74aa5c94902d4ddd087a9d5f65cc3fd5cc543545854a47a4d0a53ca653be46c4c0a5bec89c253344b000bc86379a86f2fabde29f2b56e08d6eb3278689e3611b97b22bbfee3d3242b7451af288f34c3ad642ed7352f182baede02a5deafa1844f1084bc4b5bd9ebac1e5766f7038c65868c970dcce1525c4ba4557cfc8647ec40f9043c4b7027350472693fb7371c7c212a368f1191f1cf1872aa3de694ebe05ae0a4f5ede7131856c643d7bec87cb58c02bc22d4df105cdd1810d4b9c07fb41f4cb824c03ac290c3a9d5a76492491616355679ad42bc98b06723ec035049726cc3ffc72072ff46ec39a9e829374b6545d5a2b5ccf34fec3f1755ca0e6e5b228e0674d8df64e3b8de4ba669490198692837079a8828cb0c2090ded5cdc360f67f21057826e4834901f4d306114805513678e4823b290a28beb8204ef99ca8e0d6429c7aa3e2d6dc5ea23ff89d325352fe7c3aa6f47f67d26cca3c51c383b62d27b009235af15ba039e84cc5755e61052f18ff2b16d2e7fab90e94cf30c36b68c2368727cdd247ada97ce1b5ca19e47f42a04c49c1636a68d74e5cdfb53a237d65d3dd421b24ba59ee8f6d47bb3e7bdf2472eefd148a9cff0422d8fdce5a87c43ff8c5b33ec890e619a190f147800cab6d1835ba2bfe2d932e9e595a87246346c5468f1f7db9bf08cb1158e2dac85ccd8ffe8189e30bf0487cdbd5d1fc1ffe34130b8b1a2191c0858d64f1e216a45fdd3e5591f787914cddb4557c88e6f5781d486fbd0c2dd7b68a9f3a9e05d2d29e7aef4f851d421a26d826fb69d1063815db49414296c7a930467649f5b875cac06134f9bcbc2d6bb9c88084a6ba106a6542bd03a786995d03f8c515cf66004b64f5f7bde8986aa02bdd84af0c9f6f9954e86f046950eb139b09f270be9f4b5fdc355a972f0e136144f1fef3be3d48dcf2929464b8bc255c4e814f000db912e999e59d37c272bd5adfa4f68b237bc851c2510b358d194adbd97f6ee38458de219fd1faffa0ab3dc0591aac11f61a3a9342c085d23b6c844eb3ce8c0dcdac17553eb1316d89ede3c84622224d63120f1a23cab58f5462386ddb407afc118398e304124df2358778987f85588356bf2a89874b9b4f83e326e36c9dbbc7d761fcb81ab62a72f0aa03107a5410dfbdc35b8c25e048c25ddcd79ad53ff6cc1b00c294b420c15627fb66d76f93fba4e560163f51766fa15d207b63ade8db5d216b17160b167c098cbc26f19837e15a6bf3ba37f93d5ecce0c14e2c7c780debfa99eba75add973226988bfac7abc0d4f0418469ba08cc4305c60672c97bf71e832de7d48b7cea61ac81e67de5e4971440342624fda46bf6b8af196827b9f85b0ddad4746b67c4ba2d7d4cbf1e7db99ef0a787646414d6a779a05643a821e6c7d22cdedf473e70050f4953d66df272f74676904ec5129fd5469762d8864a3a15819ea7c5a1716b628862e2a4c318d7b96384b75c0de290c035d3444bcd196a3f5ad1464eaa0e0c8a3190cd3d00f9c5cee18c86fed91624784685acbcf82fc86a928449460dc5b791da0e973f110c6e7230bd5b3ec98caafb6d4ae0bbc515664ec0251e66d8f210049797d280563418218f07e430ce2096600e2cb2c797230b403f21ee8e88d2c3b03ca7b3f272b0daf2ce1c2eb069768d92199b31fec315da1caf22e5a422410282772cb91f9a52f7148628889077b3f81d145b8721db54046fcebdf6d9c358c1578f120696e661f51d1d99a44448873e45f02fd7682faf0b7735c9867aa8673b06a91448f34e3f73f997337b47e4aa66248682d88f24daf2bfc0deec8d8a6dedf6b707da048eb899dabb34c4fe53de0fde66e2785d21c790ab1d1584bdfd96906a3ec1c269148a6943da1c537baca09b8adc5b6ec812888e232c76c29c0db0c1c18bbc93a81920c6509aff95fb46704b342b8eafe9581c43d61a65d135da188d4d942bfd0effa1db8e068cb6618f8bff6c0fe227619aaaae571601e749fcedaa100be7386a3c8b68694eaedccb2b9d2e0a6356a0f8bf1b7a2fdb3cc696321fb76a0c35e3f3784164ea184229a60deb76fb919e6860813203a9cd502bb542a216ebe2a9b458daf52df6591c6c5f16ec34b4a35f5c0b5edc4868fe788465f70bc7340ce661d43c178fb6aee2569d4e1f4152d1acc5a32879a6c28191828a8410d28959acd2e51a37619f3ec1c72e425a37065f49a1cccafd1f2b517c2f058133b0a36ff95b6d16274a7776df502bc3909e67bce5d1bd8ecd3d86dec0344c14448ced0428b06e309ff6b61ed1e128fae6728c921f3be87180fbdef2faa17014be6a9085452d7ab3133f51e41ed39d14972bcda0449751868f847a71166f6336df799fca7118e8b474e077d2ee6b73be947c9d3e53d662c915cfcff1f09d67268b0f2767ee0dec62708beb43be805c0b4511b97979176df458fb1a925ffbb05e4b7c58a20946a2ae788f8c4c1559011bdbed1cdb72b7cd8b3bc07f4c281a43ec59b2e169ea9fb9fe106257e8db9207c739374535f7731ff817fd6a97da5aa710192f4d4a88abcfc03ba764bc7e5b372ba36252ebaa2cfcdb05aed4e0b27401e1befc84ecdaa343a4a8185f6f0290ffe91d75b1b2518dd4550a4473e48499c5a92fb457ad30aa3943fb505c14649e7e1c73824a409b28b62cd7363d112292325edefd2f03c936d84995bd6a9d1654f69ff2305fddcef8421c6fa5e95e0804d21326f29090661e8b7d29acad4ed70088e0a02d9e0c20ef28bcf6c6e37f0ea5e8d101018274b1a9581cb0e4ffc249c6ff21507ec348c2b295e0a78295c70db6da3f61e3e060097394d4dd297c791ef4b56be9b01a29139fd0b69e035c332179ab95b905fa9206a6469c25f5b040e6d41fc75c41af2551b1e653bb4cdea718bf56be7aa323ffa7caea162d9737f25854562a0e86ff89bb5933016132a74321b229255a7722120b1cabcc76bdf4bab94b18a321414558f4363d700eaea6b036f292ab2ccc250a1acec76075af3157ad8e301d6c8a38a4cf5c3de2693876f0454db9353919500d13528f47452c4986d3fe2629a3449e8d878f64d29b34b275e4fe742363f99640c3fd23b3d389f23ffdb261c466726dbbcb3c34afa274b28901d1ad577fd38c81fb19bd7550062bb85d31b513614780a02b6b5e3b5b7887a79b97532d503b43d1c7c48c96829feacef3c031665551659f32875674e20f38721cdc1e641ce9fe4e9dfb9e42bf08fc28ed0b03ef218d0b0e127b5046a9b965d8287fc07d20d688150ca006c79be06c7fdc9bb7910613ff3b5ba73d67e8dd2657407b021cdbb78ea5106f1646e9fab0fe2816f78a750ded955e761ba85c819d46a9e2a5ff21cdfc247b7350b0f8ecb1b82b1f991dba6d8b1e63cc69d4a7da94a552e695c6ca72da158fdd2260128890e396f7aa3b62023deff2db64c9a39b6030e9b39d99e280a4fec1683e09bb3787305d649f7ebb7bec1c75b1a6ea0259b734c14a0a2558a99db4acabfd497d51adfa4a46fac0c29d21fc027f0488fb7a2952e576fc9efa0c6f3bbb9725ee8556fb5ab129aa3e3ce912b2df7fc3c15463f649844144f62493b9ca098c5bca1e14e2148aea9ef0b851400b32db71827c0b0b5f8347f36f3e78f2f165f8e3fdea653ba81865efca377df1273b6a1f5df53aada0cc162aa096083a8ff62f6bd1096861fb1aae2851b4e55feb071284c12c6993dba58a4e938ec33d897b5333d67da388a69569a5762165ac069b0f9c00cca0bd1139c96e8265c865c2f8e7c39063bc077f795749cb6076df4588e2b2d07853a1443fcab992c7be89857a004fa930864687868405f9d06cd44a0122e2df619de0c07ddb7bd136ef66b5a49f7c6251915d5361fbf75d8acc6471b2aec8c0d8499c78ea80511fe930ed6f8ff4406b5c061678c0e23dc998804dcd4c7fc166356e536d84a59bc35fd2c111c7aac8ac8c29f5310f40bf0161bc7950978b886f0ce03e2e053e0d426238e9401c126d362e59556ff6bbdd7886000b65fde3390be7c2e91df00f2e15bdf77fc84040f705fe1756c4402679479a18fea45b24ac145764d68c03b2ace1ad2a40c67b027b5a81c8e29ac5d69ea33c39e236c7f906f6a8445b7a88ddcedc5d7a5b3326e9192aaa4b13e12469a21b34c6709660dbbe4844ff9aab8c1af58a076ce7dbe92a63aeaa409de0aed0d76b0da0578f55c4d6cc5b77637710c3498c8cc4718da0efefb279511b4a026d613e50a3fa51401fc786f81708e619a9369b6d9d5daea06836850917d835304fa3d6dbb4dd72ac7e624587ec2437f466db42e2d5c8bb03eb389c0482c087b6c2ea1e81f13a0b3772e452c3d640583c9705267c10d4d5f88f8322d2df8a55ba2b2fd5c7cb1b905a0c2822bd46d86e73018d96953491224866bf73b315490b2cacc59a13c14ce68372fc66c6f76a3ad62c9cbf734bf90b44a0c04f2f7545d501c91ced47854b3a5d3773420c653558b73d3c59d7d3c1689db1782f2ef33fe06b7418229a34768351cf11f61eef9f3839d3e5530af4d089305a32ebd80c97223b67047148a36d8c3eca73f31f2d94c04d70e89173ee68501de0c945b74530795598204e145adc81502d83c2944ecc9a6c42db1d7cd91682e05051e93f714505d75c1553d85e4217ae2af8f40110cc1dc88a3b34653871ecc50420cedba771ff2502b58f3bf353d62b68c365f4c7a6603f3c2a238d3e98594f1ba6e1b08eada2918519a628a45ecae4b17fb39ec117fa16c9448fe1d21645120ba850e71e2947b54cf87c599a6a2827263640041367784ec51b9c37cdbb3627f76f21955d9876ea0283ed22b5a07cec34792d6f9dbb505184eec9ef7f35b8237fdaf2b05fad8d98ce61c635c10fb5d803f9096ed9c7205b421482557f2f7c6807df1f893568181371df13935446ce065beb87a55c2dea524b53c6d4fa06a7806e31ddd78bb4704c5764b66c793128a76b159d914f5d76543df761e1db72935277f57a7a7b2ab9e7fbee199d6b4638094cb89b66fbd8c82e179f53234e5abb6ec764690885115cedd1677f5c8b2887ad48de4af560fa3fdcf7350cc5e6b6b90a23541c6174d906278d63a7b850380c412984e8b16aceb3971f832e85ffeec27da4a05c46811bb9dc4f3693f6036a1fe551da2d57544f4c85708b06f137692d30fb2146cdfad11a65ecc4e0e1afa9f25ff22858b14efbec3557074fbbf067122a39370193dfeb1b41e38b24701506d64986a4cad8853a2a39028e29f46e08b4ea0a88d180c6762ff166212ce8280c6ae78665f9c70803a313030a3e69c41f93f246738e7d5f9862f9f1d126a5fa1d67b18c6a6480c8ee7f5f5b5d24740b6d55fb64acd9435b7d0b6e13abc83a76e075387f6b93296293815504948933d97c33edd95a62f0c28db4d179e49bafceec7973b5657285a7eb9420b22caad226aa8b055495eba5974a94b17f3c18928539f7f4b03e140aefb83f2d5c2b96f74bd2689ef465777f03672d0d744f2aa232e851e5da6dbbea3ab5948b65a60872de801be0665553d27f8b831cd1769bb4cd61140cec1c9bc6677091656eff149a9546ccd453beb00c4a1851f7a67921978c5ee2ca83cc84ad7c5687c556f227f97a6271f072cab034052b22046be0bfaebad6df055d007fc5d7b6cc63aacf4ec075a0e93fc4adf32819397db79d38193450e8fe88e8effb71030ce29e62d64497c1198f8190d3b8b25c8eae993fe86e3ec3519a7a56d533462bf20b7066894af483442d6145cd3702592f6ce789526904b9a916e1c26462338ce9dabbc4ced46be7db7203dbbb84a3bd575a5ce2a624141e7d57ee41481a24d9fce04a6597a376d843ec7f024393bfa4f043a3f0a0ee18c5c8d990cff3c9b6bd7caca182fdf365d03983d95c5bf21bd7cd1929e57817dcb8d82e932e9d4e293f7c7adbded7646c56728c99afde5bdd68e219a10fa986766ac55ba1f05e6e73f0ca5df6826258eb31d002bfd3e0500171cdc9f0dd4fcb9955a058f83b15444ec721c431b9dbf103c252bb34ff11e2eaf153ff5a061dc20f386297e36a7f3ca746aa3a135e479e0ba55cceedb69a7f7624fa975e048d763b3fc94aa7d96da972ddee7f91b7f00d6c1cfde389f4ab05c799aa106556611cd123a26ff6a23a4057a3b2ff2569dd14605968e76993965b7211c5b7405ff5c89cdcfb36283f7fa82ff1da9e26d0269fac8daf9015b93b3b536c5b00a2c7427e199d9807be9893b67f03a9a1970a1a046887e0a8dcf4e6a2cee57ff26b8a664f6c836b28b20082d0387e02d6d42adb8c5f126668c2292cda1123b85e39ffbd389d832138eaa1500b06f16b0d0e5505c970152194e30f8bc3a2ef01385533daec68f3246ef72956036ba3aead3d62e879dcacb7f505698c6687996ffeeefe7d2a0c3648968aec1e2b864a9b36b8f08211e8178883a27a079fe072f08ca49e5ef1ab910ff56ac7d4db6a0e25457c230cf920acad2698536ad3c6bbea096729e2687057b1d998103c0dde7df3d699a35e5b7a297dcae7d42dc5e6a138adada3247fd200f3060be71eaed95f6e17039650bd67ed21569598bba030ca1063affaef3ad2f17d74d33508a3c74b0a9a536a7c4109ffb9bd1e1ab3ea36555c2522f1cfad903c8a51e91cdff895146b56b83fff4680123b35a193c106e845f575c9b983e338793bddd57a0c46acd9298508e556d242d62cdb45e9c0f9bbdcce45a259ae0ffd57dfeaf85c64351e0cf392c4220a6d10c7e178ef8a88c4c1ad63c131cd92df268301730bcfc01f14882e51e9826b793fdfdf5f14ce7c44c59ed399e3a56ab3ede222dccd25736b85ffbf267efd69be2ad7e07a9b6360dcfee822e70f188722d0443239533c664b51d9d6bf46ccf8087116d5baf8dd6e0077800d84c309d7d749851f45d5f843cc369c00fadee5971af41f9451fdcb24138a1f19b9d3f166d6af9a4ac580b8b38c3ae8f0822640222d3563c611071c5ed0d370566ba597913dc6beed7470d7530b1b8ed213a3e6f37b15983e63f61de57cf0996250af0cb47c8c2cbe374678edd248d14f970fbe3c24a0a35a08b517af001b7fcf8cd9a01a4e909a1247600880a0db14025908498233325773bc70c907bffe93a537d60ef9590641987f23e28bf77550609aba6d5e1b13e79b1990ac9ab8b70e96ccf1c7d685606ea0194b40c68e3fcd64b3da521b770052221807de6c4186166a9d7efed120c978fcdb8380d5be361fcb52b5728831d367f29a8879a61d7eab88a95265b583c44068374cd3f26c23a1c62cf33b8f647c9891733ac9428d675510a6c9dfe5b0489c446a8601bd14bff6f637cb030b4dc60f8b17af638ac775a9339d7a4334cee79d830d735d3186adbc52e733f3fb410d20764d418f3863ed2acc874ca4be1aa47df5c24692638d703df3dfa0c7e7a1f3e9993b8f0e7607b4969532a97dcfd30531b19fc76c331b676881217067428c1403fce556557baeeb389b4146fa043d49680239df3182fa576d48c9d40492c78d029d149f1
+\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000000000000000000000000000000000000000000000000000000000\rcleartomark{restore}if\r
+%%EndResource
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 223.20 C
+ski{/Helvetica fcd /Helvetica-ISO8859-1 fdf}if
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<545745422076696120465450> 146.88 222.24 C
+0.000 0.000 1.000 RGB
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<6674703a2f2f667470> 158.16 259.92 C
+0.000 0.000 0.000 RGB
+<2d783530302e756e692d74756562696e67656e2e64652f747765622f747765622e7461722e5a> 213.60 259.92 C
+0.000 0.000 1.000 RGB
+<6674703a2f2f6674702d783530302e756e692d74756562696e67656e2e64652f747765622f747765622e74677a> 158.16 290.16 C
+0.000 0.000 0.000 RGB
+/StarBats ff [24.00 0 0 -24.00 0 0] mf sf
+<22> 112.80 357.12 C
+/Helvetica-ISO8859-1 ff [24.00 0 0 -24.00 0 0] mf sf
+<537570706f7274206d61696c696e67206c697374> 146.88 356.16 C
+/Helvetica-ISO8859-1 ff [18.00 0 0 -18.00 0 0] mf sf
+<747765622d737570706f7274406d61696c3530302e756e692d74756562696e67656e2e6465> 158.16 393.60 C
+gr
+%%PageTrailer
+rs
+%%BoundingBox: 18 18 555 759
+showpage
+%%Trailer
+%%Pages: 11
+end
+%%DocumentSuppliedResources: font StarBats StarBats StarBats StarBats StarBats StarBats StarBats 
+%%EOF
diff --git a/contrib/tweb/doc/Presentation/README b/contrib/tweb/doc/Presentation/README
new file mode 100644 (file)
index 0000000..c91988b
--- /dev/null
@@ -0,0 +1,12 @@
+doc/Presentation/README
+=======================
+
+This directory contains documentation concerning TWEB that was presented 
+at different occasions.
+
+- DANTE-01-99.ps
+
+  Presentation of the dynamic features of TWEB (i.e., gateway-switching
+  and dynamic re-configuration) at the DANTE NameFlow meeting, January,
+  18th, 1999, in Utrecht, NL.
+
diff --git a/contrib/tweb/html.c b/contrib/tweb/html.c
new file mode 100644 (file)
index 0000000..7406c62
--- /dev/null
@@ -0,0 +1,939 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* html.c.....                                                              *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - HTML-Procedures                  *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 28 1999                ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: html.c,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "html.h"
+#include "init_exp.h"
+#include "support_exp.h"
+
+#ifdef TUETEL
+#include "tueTel_exp.h"
+#endif
+
+PUBLIC void print_attr(ld, fp, dn, label, tattr, e, flag, doNotShow, glob)
+LDAP *ld;
+FILE *fp;
+char *dn;
+char *label;
+char *tattr;
+LDAPMessage *e;
+int  flag;
+char *doNotShow;
+GLOB_STRUCT *glob;
+{
+    char    **val;
+    int    i, gotone = 0, firstline = TRUE, valid_label = FALSE;
+    static char *nlabel;
+    char    imageChar = 'J';
+    char strbuf[BUFSIZ];
+    int first_of_same = TRUE;
+
+    nlabel = ldap_friendly_name(glob->friendlyfile, label, &fm); 
+
+    if ( (val = ldap_get_values( ld, e, tattr )) == NULL )
+        return;
+
+        /* check if only 1 value and this one is in "doNotShow"
+        if((doNotShow) && (val[1] == NULL) && (strcmp(val[0],doNotShow) == 0))
+            return;
+        */
+
+    for ( i = 0; val[i]; i++ ) {
+
+        sprintf(strbuf, "(%s)", glob->la[0]);
+        if(!strncasecmp(val[i], strbuf, 4)) {
+            strcpy(val[i], val[i]+4);
+        }
+        else if(val[i][0] == '(' && val[i][3] == ')' ) {
+            val[i][0] = '\0';
+            continue;
+        }
+
+        if (!doNotShow || strncasecmp (val[i], doNotShow, strlen (val[i])))
+            valid_label = TRUE;
+        else
+            val[i][0] = '\0';
+    }
+
+    if(!valid_label) {
+
+        ldap_value_free (val);
+        return;
+
+    }
+
+    fprintf( fp, "\n<DT><B>%s</B><DD>", nlabel );
+
+        /* handle photo-requests */
+        if((flag == BMP) || (flag == JPEG2GIF) || (flag == JPEG)) {
+            photof(fp, flag, imageChar, dn, tattr);
+            return;
+        }
+
+    for ( i = 0; val[i] != NULL; i++ ) {
+
+        char *vali;
+
+        if(!*label ) first_of_same = FALSE;
+
+        if(!*val[i]) continue;
+
+        vali = char2html(val[i]);
+
+        if (flag == URL) {
+            urlf(fp, vali);
+
+#ifdef TUE_TEL
+        } else if (flag == TFUNCPERS) {
+            tfuncpersf(fp, vali, ld, glob);
+#endif
+
+        } else if (flag == DYNAMICDN) {
+            dynamicdnf(fp, vali, glob);
+
+        } else if (flag == INDEXURL) {
+            indexurlf(fp, vali, dn, glob);
+
+        } else if (flag == URI) {
+            urif(fp, vali, glob);
+
+        } else if (flag == PGPKEY) {
+            pgpkeyf(fp, vali, &firstline);
+
+        } else if ( ( flag == MULTILINE ) || (strchr(vali, '$') && 
+                                    strncmp(vali, "{T.61}", 6) != 0 )) {
+            multilinef(fp, vali, &first_of_same, &firstline, &gotone, nlabel);
+
+        } else if (flag == BOOLEAN) {
+            booleanf(fp, val[i], glob);
+
+        } else if (flag == DATE) {
+            datef(fp, val[i]);
+
+        } else if (flag == MAILTO) {
+            mailtof(fp, val[i], vali);
+
+        } else if (flag == HREF) {
+            hreff(fp, val[i], vali, glob);
+
+        } else if (flag == MOVETO) {
+            movetof(fp, val[i], vali, glob);
+
+        } else if (flag == PRE) {
+            pref(fp, vali, glob);
+
+        } else if (flag == HEADER) {
+            headerf(fp, vali, glob);
+
+        } else if (flag == REFERRAL) {
+            referralf(fp, vali, glob);
+
+#ifdef TUE_TEL
+        } else if(flag == FAXTABLE) {
+            faxtablef(fp, val, &firstline);
+#endif
+
+        } else
+            defaultf(fp, vali, &firstline);
+    }
+    ldap_value_free( val );
+}
+/* end of function: print_attr */
+
+PUBLIC void form_attr(ld, fp, label, tattr, e, multiline, add_empty, glob)
+LDAP *ld;
+FILE *fp;
+char *label;
+char *tattr;
+LDAPMessage *e;
+int  multiline;
+int  add_empty;
+GLOB_STRUCT *glob;
+{
+        char    **val, *s;
+        char    buffer[1024];
+        int     i, gotone = 0, line = 0;
+        static char *nlabel;
+        nlabel = ldap_friendly_name(glob->friendlyfile, label, &fm);
+        if ( (val = ldap_get_values( ld, e, tattr )) == NULL ) {
+        if (add_empty > 0)
+            if(multiline)
+                fprintf( fp, "<DT><B>%s</B><DD><TEXTAREA NAME=\"%s=\" ROWS=4 COLS=30></TEXTAREA><BR>\n", 
+                                           nlabel, tattr);
+            else
+                        fprintf( fp, "<DT><B>%s</B><DD><INPUT NAME=\"%s=\" SIZE=30 ><BR>\n", 
+                                           nlabel, tattr);
+                return;
+    }
+        fprintf( fp, "\n<DT><B>%s</B><DD>", nlabel );
+    buffer[0] ='\0';
+        for ( i = 0; val[i] != NULL; i++ ) {
+                if ( multiline ) {
+                        char    *s, *p;
+                    buffer[0] ='\0';
+                        if ( gotone )
+                                fprintf( fp, "<DT><B>%s</B><DD>", nlabel);
+                        p = s = val[i];
+                        while ( ( s = strchr( s, '$' )) ) {
+                                *s++ = '\0';
+                                while ( isspace( *s ) )
+                                        s++;
+                                if ( line == 0 ) {
+                                        sprintf(buffer, "%s", p);
+                                        line++;
+                                } else {
+                                        sprintf(buffer, "%s\n%s", buffer, p);
+                    line++;
+                                }
+                                p = s;
+                        }
+            if (line++ == 0) {
+                sprintf(buffer, "%s", p);
+            } else {
+                sprintf(buffer, "%s\n%s", buffer, p);
+            }
+            s = form_encode(buffer);
+                fprintf( fp, 
+                "<TEXTAREA NAME=\"%s=%s\" ROWS=%d COLS=30>%s</TEXTAREA><BR>\n", 
+                                 tattr, s, line + 1, s);
+                        /* fprintf( fp, "<INPUT NAME=\"%s=%s\" SIZE=30,%d VALUE=\"%s\"> <BR>\n", tattr, s, line + 1, s); */
+                        gotone = 1;
+                        line = 0;
+                } else {
+            s = form_encode(val[i]);
+                        fprintf( fp, "<INPUT NAME=\"%s=%s\" SIZE=\"%d\" VALUE=\"%s\"><BR>\n", tattr, s, 
+             strlen(val[i]) > 30 ? strlen(val[i]) + 3 : 30, s);
+                }
+        }
+    if (add_empty > i)
+        fprintf( fp, "<INPUT NAME=\"%s=\" SIZE=30 ><BR>\n", tattr);
+        ldap_value_free( val );
+}
+/* end of function: form_attr */
+
+PUBLIC void do_pict(ld, fp, dn, type, glob)
+LDAP *ld;
+FILE *fp;
+char *dn;
+int type;
+GLOB_STRUCT *glob;
+{
+    int        rc, i;
+    struct berval    **val;
+    char            cmd[128], buffer[1024];
+    char        *s;
+    FILE        *op, *tp;
+    LDAPMessage    *res, *e;
+    struct stat    st;
+        char            *cPtr, *ptype;
+    char            *tattr;
+
+    if ( (rc = ldap_search_s( ld, dn, LDAP_SCOPE_BASE, "objectClass=*",
+        NULL, 0, &res )) != LDAP_SUCCESS ) {
+        do_error(fp, rc, NOT_FOUND, glob);
+        return;
+    }
+
+    if ( (e = ldap_first_entry( ld, res )) == NULL ) {
+        do_error(fp, -2, SERVER_ERROR, glob);
+        return;
+    }
+
+        /*
+         *  old behaviour: use "photo" or "jpegPhoto" attribute
+         *  as indicated by type-argument.
+         */
+        tattr = (type == 0 ? "photo" : "jpegPhoto");
+
+        /* NEW: if attr is added to URL via "+" use that attribute */
+        if( ( cPtr = strQuoteChr(dn,'+')) )
+             tattr = ++cPtr;
+
+    if ( (val = ldap_get_values_len( ld, e, tattr)) == NULL )
+        return;
+
+    s  = tmpnam( NULL );
+    tp = fopen( s, "w+");
+
+    if (type == 0) {  /* g3fax photo -> xbm */
+        sprintf(cmd, "%s > %s", G3TOXBM, s);
+        if (debug) fprintf(stderr, "%ld bytes FAX!! %s\n", 
+                                     val[0]->bv_len, cmd);
+                ptype = "x-xbitmap";
+    } else if (type == 1) {    /* jpeg -> gif */
+        sprintf(cmd, "%s > %s", JPEGTOGIF, s);
+        if (debug) fprintf(stderr, "%ld bytes JPEG!! %s\n", 
+                                     val[0]->bv_len, cmd);
+                ptype = "gif";
+    } else {              /* jpeg direct */
+        sprintf(cmd, "cat > %s", s);
+        if (debug) fprintf(stderr, "%ld bytes JPEG!! %s\n", 
+                                     val[0]->bv_len, cmd);
+                ptype = "jpeg";
+           }
+
+        
+        
+    if (http == 1) {
+        fprintf(fp, "HTTP/1.0 %d OK<br>MIME-Version: 1.0<br>", 
+                            DOCUMENT_FOLLOWS );
+        fprintf(fp, "Content-type: image/%s<br>", ptype );
+    }
+        if (request == HEAD) {                
+        fflush(fp);
+        exit_tweb (1);                                   
+        }                          
+    if ((op = popen(cmd, "w")) == NULL ) 
+         return;
+    fwrite(val[0]->bv_val, val[0]->bv_len, 1, op);
+    pclose(op);
+    if (stat(s, &st) == 0 && http == 1) {
+        fprintf(fp, "Content-length: %lu<br>", st.st_size);
+        if (debug) fprintf(stderr, "Image size: %lu\n", st.st_size);
+    }
+    fprintf(fp, "<br>\n\n");
+
+    while (( i = fread(buffer, 1, 1024, tp))) fwrite(buffer, 1, i, fp);
+    fclose(tp);
+    if (unlink(s) == -1) {
+        if (debug) perror("Couldn't unlink temp image file");
+    }
+    fflush(fp);
+}
+/* end of function: do_pict */
+
+
+
+PUBLIC void do_audio(ld, fp, dn, type, glob)
+LDAP *ld;
+FILE *fp;
+char *dn;
+int type;
+GLOB_STRUCT *glob;
+{
+    int        rc;
+    struct berval    **val;
+    LDAPMessage    *res, *e;
+    struct timeval    timeout;
+
+    timeout.tv_sec = glob->timeout;
+    timeout.tv_usec = 0;
+    if ( (rc = ldap_search_st( ld, dn, LDAP_SCOPE_BASE, "objectClass=*",
+        NULL, 0, &timeout, &res )) != LDAP_SUCCESS ) {
+        do_error(fp, rc, NOT_FOUND, glob);
+        return;
+    }
+
+    if ( (e = ldap_first_entry( ld, res )) == NULL ) {
+        do_error(fp, -2, SERVER_ERROR, glob);
+        return;
+    }
+    if ( (val = ldap_get_values_len( ld, e, "audio" )) == NULL )
+        return;
+    if (http == 1) {
+        fprintf(fp, "HTTP/1.0 %d OK\nMIME-Version: 1.0\nServer: %s\n", 
+                  DOCUMENT_FOLLOWS, version);
+        fprintf(fp, "Content-type:  audio/basic<P>Content-length: %ld\n\n", 
+                  val[0]->bv_len);
+    }
+        if (request == HEAD) {                
+        fflush(fp);
+        exit_tweb (1);                                   
+        }                          
+    fwrite(val[0]->bv_val, val[0]->bv_len, 1, fp);
+    fflush(fp);
+}
+/* end of function: do_audio */
+
+PUBLIC void do_sizelimit(fp, type, glob)
+FILE *fp;
+int type;
+GLOB_STRUCT *glob;
+
+{
+    fprintf(fp, type ? glob->la[21] : glob->la[20]);
+}
+/* end of function: do_sizelimit */
+
+PUBLIC void do_error(fp, code, status, glob)
+FILE *fp;
+int code;
+int status;
+GLOB_STRUCT *glob;
+{
+    char *s = "";
+
+           if (http == 1) {
+        switch (status) {
+              case BAD_REQUEST:      s = "Bad request"; break;
+            case AUTH_REQUIRED:      s = "Authorization required"; break;
+            case FORBIDDEN:      s = "Forbidden"; break;
+            case NOT_FOUND:      s = "Not found"; break;
+            case SERVER_ERROR:      s = "Server error"; break;
+            case NOT_IMPLEMENTED: s = "Not implemented"; break;
+            default:          s = "Unknown error";
+        }
+
+        fprintf(fp, "HTTP/1.0 %03d %s\nMIME-Version: 1.0\nContent-Type: text/html\n\n", status, s);
+            }
+
+        if (request == HEAD) {
+        fflush(fp);
+                   exit_tweb (1);
+        }
+
+        fprintf( fp, HTML_HEAD_TITLE, glob->la[22], glob->la[100]);
+        fprintf( fp, "\n<H2>%s %s</H2>\n%s <P>%s <EM> %d: %s.</EM><P>%s<br></BODY></HTML>", glob->la[23], s, glob->la[24], glob->la[25], code, ldap_err2string( code ), glob->la[26] );
+}
+/* end of function: do_error */
+
+PUBLIC void explain_error (fp, error, status, glob )
+FILE *fp;
+char *error;
+int status;
+GLOB_STRUCT *glob;
+
+{
+        char *s = "Unknown error";
+        if (http == 1) {    
+                switch (status) {
+                case BAD_REQUEST:       s = "Bad request"; break;
+                case AUTH_REQUIRED:     s = "Authorization required"; break;
+                case FORBIDDEN:         s = "Forbidden"; break;   
+                case NOT_FOUND:         s = "Not found"; break;
+                case SERVER_ERROR:      s = "Server error"; break;              
+                case NOT_IMPLEMENTED:   s = "Not implemented"; break;
+                default:                s = "Unknown error";                  
+                }                                                    
+        fprintf(fp, "HTTP/1.0 %03d %s\n",status, s);
+                fprintf(fp, "MIME-Version: 1.0\n");
+                fprintf(fp, "Content-Type: text/html\n\n");
+        }                                           
+        if (request == HEAD) {                   
+        fflush(fp);
+                exit_tweb (1);               
+        }
+        fprintf( fp, HTML_HEAD_TITLE, glob->la[22], glob->la[100]);
+    fprintf( fp, "<H2>%s: %s</H2>\n", glob->la[22], s);
+    fprintf( fp, "%s</BODY>\n</HTML>", error);
+}    
+/* end of function: explain_error */
+
+/* Make "Move upwards" Header */
+PUBLIC void make_header (fp, dn, action, glob)
+FILE *fp;
+ char *dn;
+int action;
+GLOB_STRUCT *glob;
+{
+    char **s, **t, hrdn[1024];
+    int  cnt, i, j;
+    pGW_SWITCH_LINE gw_ptr;
+    char url[BUFSIZ];
+
+    if(glob->pull_down_menus) {
+        make_header_pull_down(fp, dn, action, glob);
+        return;
+    }
+
+    hrdn[0] = '\0';
+    if ( strlen(dn) == 0)        /* the root */
+        return;
+    s = ldap_explode_dn( dn, 1 );
+    t = ldap_explode_dn( dn, 0 );
+
+    strcpy(url, "M");
+    for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
+        if (!strcasecmp(gw_ptr->dn, "ROOT"))
+            strcpy(url, gw_ptr->url);
+
+    fprintf( fp, "<strong>%s </strong><MENU>\n<LI> <A HREF=\"%s\">%s</A>\n",
+        glob->la[27], url, glob->la[77]);
+
+
+    for (cnt=0; t[cnt]; cnt++);
+    for (i = cnt - 1; i > 0 && s[i]; i--) {
+        strcpy(hrdn, hex_encode(t[i]));
+        for (j = i + 1; j < cnt ; j++) {
+            strcat(hrdn, hex_encode(", "));
+            strcat(hrdn,hex_encode(t[j]));
+        }
+        
+        strcpy(url, "/");
+        for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
+            if (!dn_cmp(hex_encode (gw_ptr->dn), hrdn))
+                strcpy(url, url_complete(gw_ptr->url, hrdn, "M"));
+        if(strcmp(url, "/"))
+            fprintf( fp, "<LI> <A HREF=\"%s\">%s</A>\n",
+                         url, i == cnt - 1 ? 
+                         ldap_friendly_name( glob->friendlyfile, s[i], &fm ) : 
+                         s[i]);
+        else
+            fprintf( fp, "<LI> <A HREF=\"%sM%s\">%s</A>\n",
+                         url, hrdn, i == cnt - 1 ?
+                         ldap_friendly_name( glob->friendlyfile, s[i], &fm ) :
+                         s[i]);
+            hrdn[0] = '\0';
+    }
+    fprintf( fp, "</MENU>\n");
+    ldap_value_free(s);
+    ldap_value_free(t);
+}
+/* end of function: make_header */
+
+/* Make "Move upwards" Header with pull-down-menus*/
+PUBLIC void make_header_pull_down (fp, dn, action, glob)
+FILE *fp;
+ char *dn;
+int action;
+GLOB_STRUCT *glob;
+{
+    char **s, **t, hrdn[1024];
+    int  cnt, i, j;
+    pGW_SWITCH_LINE gw_ptr;
+    char url[BUFSIZ];
+
+    hrdn[0] = '\0';
+    if ( strlen(dn) == 0)        /* the root */
+        return;
+    s = ldap_explode_dn( dn, 1 );
+    t = ldap_explode_dn( dn, 0 );
+
+    strcpy(url, "M");
+    for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
+        if (!strcasecmp(gw_ptr->dn, "ROOT"))
+            strcpy(url, gw_ptr->url);
+
+    fprintf( fp, "<FORM ACTION=\"/D\">\n");
+    fprintf( fp, 
+       "<INPUT TYPE=submit VALUE=\"%s\"> -&gt; <SELECT NAME=\"H\">\n",
+                                   glob->la[27]);
+    fprintf( fp, "<OPTION VALUE=\"%s\">%s\n", url, glob->la[77]);
+
+    for (cnt=0; t[cnt]; cnt++);
+    for (i = cnt - 1; i > 0 && s[i]; i--) {
+        strcpy(hrdn, hex_encode(t[i]));
+        for (j = i + 1; j < cnt ; j++) {
+            strcat(hrdn, hex_encode(", "));
+            strcat(hrdn,hex_encode(t[j]));
+        }
+        
+        strcpy(url, "/");
+        for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next)
+            if (!dn_cmp(hex_encode (gw_ptr->dn), hrdn))
+                strcpy(url, url_complete(gw_ptr->url, hrdn, "M"));
+        if(strcmp(url, "/"))
+            fprintf( fp, "<OPTION VALUE=\"%s\" %s>%s\n", url,
+                                i==1 ? "SELECTED" : "", i == cnt - 1 ?
+                     ldap_friendly_name( glob->friendlyfile, s[i], &fm ) :s[i]);
+        else
+            fprintf( fp, "<OPTION VALUE=\"%sM%s\" %s>%s\n",
+                     url, hrdn, i==1 ? "SELECTED" : "", i == cnt - 1 ? 
+                     ldap_friendly_name( glob->friendlyfile, s[i], &fm ) :s[i]);
+            hrdn[0] = '\0';
+    }
+    fprintf( fp, "</SELECT></FORM>\n");
+
+    ldap_value_free(s);
+    ldap_value_free(t);
+}
+/* end of function: make_header_pull_down */
+
+PUBLIC char * url_complete (gwp_url, rdn, separator)
+char *gwp_url, *rdn, *separator;
+{
+    static char url[BUFSIZ];
+    char *strptr;
+
+    strcpy(url, gwp_url);
+
+    if(!strchr (gwp_url, '=')) {
+
+        if (!strncasecmp (url, "http://", 7)) {
+
+            if ( ( strptr = strchr (url+7, '/')) ) *(++strptr) = '\0';
+            else strcat (url, "/");
+
+        } else *url = '\0';
+
+        sprintf (url, "%s%s%s", url, separator, rdn);
+
+    }
+
+    return(url);
+
+}
+/* end of function: url_complete */
+
+PRIVATE void photof(fp, flag, imageChar, dn, tattr)
+FILE *fp;
+int  flag;
+char    imageChar;
+char *dn;
+char *tattr;
+{
+    switch(flag) {
+        case BMP     : imageChar = 'G'; break;
+        case JPEG2GIF: imageChar = 'I'; break;
+        case JPEG    : imageChar = 'J'; break;
+    }
+    fprintf( fp, "<IMG ALT=\"Photo\" SRC=\"%c%s\"+%s>\n",
+               imageChar, hex_encode(dn), tattr);
+}
+/* end of function: photof */
+
+PRIVATE void urlf(fp, vali)
+FILE *fp;
+char *vali;
+{
+    char *cp;
+
+    if ((cp = strchr(vali, '$')) != NULL) {
+        *cp++ = '\0';
+        fprintf( fp, "%s%c\n", vali,
+           (vali[0] ? ':' : ' '));
+        fprintf(fp," <A HREF=\"%s\"> %s</A><BR>\n",
+             cp, cp);
+    } else
+        fprintf( fp, "%s<BR>\n", vali);
+}
+/* end of function: urlf */
+
+PRIVATE void dynamicdnf(fp, vali, glob)
+FILE *fp;
+char *vali;
+GLOB_STRUCT *glob;
+{
+    fprintf(fp," <A HREF=\"%s/M%s\"> %s</A><BR>\n",
+
+#ifdef TUE_TEL
+               dn2server(vali, glob),
+#else
+               "",
+#endif
+
+               vali, vali);
+}
+/* end of function: dynamicdnf */
+
+/* Allow href dn-lable flexible configuration via INDEXURL */
+PRIVATE void indexurlf(fp, vali, entrydn, glob)
+FILE *fp;
+char *vali;
+char *entrydn;
+GLOB_STRUCT *glob;
+{
+    char *cp;
+    char dnbuf[BUFSIZ], *strptr, **dn;
+    char rulebuf[BUFSIZ], *disp_item;
+    int arrsize, first;
+    char entrydnbuf[BUFSIZ], dit_dnbuf[BUFSIZ];
+    int index;
+
+    if (((cp = strchr(vali, ' ')) != NULL) && glob->index_url) {
+
+        *cp++ = '\0';
+        index = atoi(cp);
+
+        if ( index < 0 || index >= INDEX_RULE_SIZE )
+            return;
+        if (!glob->index_url->rarr[index].rule) {
+            return;
+        }
+
+        /* case entrydn out of range */
+        strcpy(entrydnbuf, entrydn);
+        strcpy(dit_dnbuf, glob->index_url->rarr[index].dit_dn);
+        dn_normalize(entrydnbuf);
+        dn_normalize(dit_dnbuf);
+        if(!dn_issuffix(entrydnbuf, dit_dnbuf)){
+            fprintf(fp," <A HREF=\"%s\"> %s</A><BR>\n", vali, cp);
+            return;
+        }
+
+        /* return if url doesn't contain cn= ( no dn ) */
+        if(!(strptr = strstr(vali, "cn=")))
+            return;
+        strcpy(dnbuf, strptr);
+        hex_decode(dnbuf);
+        dn = ldap_explode_dn(dnbuf, 1);
+
+        for(arrsize=0; dn[arrsize]; arrsize++)
+            ;
+
+        if(arrsize && glob->strip_pin)
+            trimright(dn[0], " 1234567890");
+
+        fprintf(fp," <A HREF=\"%s\">", vali);
+        strcpy(rulebuf, glob->index_url->rarr[index].rule);
+        first = 1;
+
+        for(disp_item = strtok(rulebuf, ","); disp_item;
+                                              disp_item = strtok(NULL, ",")) {
+            if(abs(atoi(disp_item)) >= arrsize) continue;
+
+            if(*disp_item == '-') {
+                fprintf(fp,"%s%s", !first ? ", " : "",
+                                   dn[arrsize + atoi(disp_item) - 1]);
+            } else {
+                fprintf(fp,"%s%s", !first ? ", " : "", dn[atoi(disp_item)]);
+            }
+            first = 0;
+        }
+
+        fprintf(fp,"</A><BR>\n");
+    } else
+        fprintf( fp, "%s<BR>\n", vali);
+}
+/* end of function: indexurlf */
+
+PRIVATE void urif(fp, vali, glob)
+FILE *fp;
+char *vali;
+GLOB_STRUCT *glob;
+{
+    char *cp;
+
+    if(glob->gw_switch->dynamic && strstr(vali, "(gw"))
+        return;
+    if ((cp = strchr(vali, ' ')) != NULL) {
+        *cp++ = '\0';
+        fprintf(fp," <A HREF=\"%s\"> %s</A><BR>\n", vali, cp);
+    } else
+        fprintf( fp, "%s<BR>\n", vali);
+}
+/* end of function: urif */
+
+/* function for ldap-referrals etc. */
+PRIVATE void referralf(fp, vali, glob)
+FILE *fp;
+char *vali;
+GLOB_STRUCT *glob;
+{
+    char *cp;
+
+    if(glob->gw_switch->dynamic && strstr(vali, "(gw"))
+        return;
+    if ((cp = strchr(vali, ' ')) != NULL) {
+        *cp++ = '\0';
+        fprintf(fp," <A HREF=\"http://%s:%d/W%s\"> %s</A><BR>\n",
+                glob->hostname, glob->webport, vali, cp);
+    } else
+        fprintf(fp," <A HREF=\"http://%s:%d/W%s\"> %s</A><BR>\n",
+                glob->hostname, glob->webport, vali, vali);
+}
+/* end of function: referralf */
+
+PRIVATE void pgpkeyf(fp, vali, firstline)
+FILE *fp;
+char *vali;
+int *firstline;
+{
+    char    *s, *p;
+
+    fprintf( fp, "<TT>\n");
+    p = s = vali;
+    while ( ( s = strstr( s, " $" )) ) {
+        *s++ = '\0';   /*  delete BLANK  */
+        *s++ = '\0';   /*  delete DOLLAR */
+        while ( isspace( *s ) )
+            s++;
+        if ( *firstline == TRUE ) {
+            fprintf( fp, "<DT>%s<BR>\n", p );
+            *firstline = FALSE;
+        } else if (!strncasecmp(p, "Version", 7)) {
+            fprintf( fp, "%s<BR><BR>\n", p );
+        } else {
+            fprintf( fp, "%s<BR>\n", p );
+        }
+        p = s;
+    }
+    if ( *firstline == TRUE ) {
+        fprintf( fp,"<DT>%s<BR>", p );
+        *firstline = FALSE;
+    } else {
+        fprintf( fp, "%s\n", p );
+    }
+    fprintf( fp, "</TT>\n");
+}
+/* end of function: pgpkeyf */
+
+PRIVATE void multilinef(fp, vali, first_of_same, firstline, gotone, nlabel)
+FILE *fp;
+char *vali;
+int *first_of_same;
+int *firstline;
+int *gotone;
+char *nlabel;
+{
+    char    *s, *p;
+
+    if ( !*first_of_same && *gotone)
+        fprintf( fp, "<BR>");
+    if ( *gotone && *first_of_same)
+        fprintf( fp, "<DT><B>%s</B><DD>", nlabel);
+    else if (!*first_of_same)
+        fprintf( fp, "<BR>");
+    p = s = vali;
+
+    /*  PATCH to process MULTILINE correctly:
+        replace  strstr() instead of strchr(), in order not to missinterpret 
+        DOLLAR in Text ; /KSp, 95/06/28
+    */
+
+    /*
+    while ( s = strchr( s, '$' ) ) {
+    */
+    while ( ( s = strstr( s, " $" )) ) {
+        *s++ = '\0';   /*  delete BLANK  */
+        *s++ = '\0';   /*  delete DOLLAR */
+        while ( isspace( *s ) )
+            s++;
+
+        /*
+        if (dosyslog)
+            syslog (LOG_INFO, "multiLineAttr: %s", p);
+        */
+
+        fprintf( fp, "%s<BR>\n", p );
+        if ( *firstline == TRUE )
+            *firstline = FALSE;
+        p = s;
+    }
+    if ( *firstline ) {
+        fprintf( fp, "%s<BR>\n", p );
+    } else {
+        fprintf( fp, "%s", p );
+    }
+    *gotone = 1;
+    *firstline = FALSE;
+    *first_of_same = FALSE;
+}
+/* end of function: multilinef */
+
+PRIVATE void booleanf(fp, val_i, glob)
+FILE *fp;
+char *val_i;
+GLOB_STRUCT *glob;
+{
+    if (!strcmp(val_i, "TRUE")) fprintf( fp, "%s<BR>\n", glob->la[78]);
+    else fprintf( fp, "%s<BR>\n", glob->la[79]);
+}
+/* end of function: booleanf */
+
+PRIVATE void datef(fp, val_i)
+FILE *fp;
+char **val_i;
+{
+    fprintf( fp, "%s<BR>\n", format_date(&val_i, "%A, %d-%h-%y %T GMT"));
+}
+/* end of function: datef */
+
+PRIVATE void mailtof(fp, val_i, vali)
+FILE *fp;
+char *val_i;
+char *vali;
+{
+   fprintf (fp, "<A HREF=\"mailto:%s\">%s</A><BR>\n", val_i, vali);
+}
+/* end of function: mailtof */
+
+PRIVATE void hreff(fp, val_i, vali, glob)
+FILE *fp;
+char *val_i;
+char *vali;
+GLOB_STRUCT *glob;
+{
+    char    *ufn;
+    char    op = 'R';
+
+    ufn = friendly_dn( val_i, glob );
+    fprintf( fp, "<A HREF=\"/%c%s\">%s</A><BR>\n", op,
+        hex_encode(val_i), ufn ? ufn : vali);
+    if ( ufn ) {
+        free( ufn );
+    }
+}
+/* end of function: hreff */
+
+PRIVATE void movetof(fp, val_i, vali, glob)
+FILE *fp;
+char *val_i;
+char *vali;
+GLOB_STRUCT *glob;
+{
+    char    *ufn;
+    char     op = 'M';
+
+    ufn = friendly_dn( val_i, glob );
+    fprintf( fp, "<A HREF=\"/%c%s\">%s</A><BR>\n", op,
+        hex_encode(val_i), ufn ? ufn : vali);
+    if ( ufn ) {
+        free( ufn );
+    }
+}
+/* end of function: movetof */
+
+
+PRIVATE void headerf(fp, vali, firstline)
+FILE *fp;
+char *vali;
+int *firstline;
+{
+    fprintf( fp, "<DT>");
+    fprintf( fp, "<H1>");
+    fprintf( fp,"%s", vali );
+    fprintf( fp, "</H1>\n");
+}
+/* end of function: headerf */
+
+PRIVATE void pref(fp, vali, firstline)
+FILE *fp;
+char *vali;
+int *firstline;
+{
+    fprintf( fp, "<DT>");
+    fprintf( fp, "<PRE>");
+    fprintf( fp,"%s", vali );
+    fprintf( fp, "</PRE>\n");
+}
+/* end of function: pref */
+
+PRIVATE void defaultf(fp, vali, firstline)
+FILE *fp;
+char *vali;
+int *firstline;
+{
+    if ( *firstline == TRUE ) {
+        fprintf( fp,"%s", vali );
+        *firstline = FALSE;
+    } else {
+        fprintf( fp, "<BR>\n%s", vali );
+    }
+}
+/* end of function: defaultf */
+
diff --git a/contrib/tweb/html.h b/contrib/tweb/html.h
new file mode 100644 (file)
index 0000000..a749e4f
--- /dev/null
@@ -0,0 +1,50 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* html.h.....                                                              *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            April 19 1996                Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 14 1999                ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: html.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _HTML_
+#define _HTML_
+
+#include "html_exp.h"
+#include "dn_exp.h"
+
+PRIVATE void photof();
+PRIVATE void urlf();
+PRIVATE void urif();
+PRIVATE void referralf();
+PRIVATE void dynamicdnf();
+PRIVATE void indexurlf();
+PRIVATE void pgpkeyf();
+PRIVATE void multilinef();
+PRIVATE void booleanf();
+PRIVATE void datef();
+PRIVATE void mailtof();
+PRIVATE void hreff();
+PRIVATE void movetof();
+PRIVATE void pref();
+PRIVATE void headerf();
+PRIVATE void defaultf();
+PRIVATE void make_header_pull_down();
+
+#endif /* _HTML_ */
diff --git a/contrib/tweb/html_exp.h b/contrib/tweb/html_exp.h
new file mode 100644 (file)
index 0000000..815c423
--- /dev/null
@@ -0,0 +1,41 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* html_exp.h.                                                              *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 13 1996             Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 21 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: html_exp.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _HTML_EXP_
+#define _HTML_EXP_
+
+PUBLIC void print_attr(/*ld, fp, dn, label, tattr, e, flag, doNotShow, glob*/);
+PUBLIC void form_attr(/*ld, fp, label, tattr, e, multiline, add_empty, glob*/);
+PUBLIC void do_pict(/*ld, fp, dn, type, glob*/);
+PUBLIC void do_audio(/*ld, fp, dn, type, glob*/);
+PUBLIC void do_sizelimit(/*fp, type, glob*/);
+PUBLIC void do_error(/*fp, code, status, glob*/);
+PUBLIC void explain_error (/*fp, error, status, glob */);
+PUBLIC void make_header (/*fp, dn, action, glob*/);
+PUBLIC char * url_complete (/*gwp_url, rdn, separator*/);
+
+
+
+#endif /* _HTML_EXP_ */
diff --git a/contrib/tweb/init.c b/contrib/tweb/init.c
new file mode 100644 (file)
index 0000000..667114f
--- /dev/null
@@ -0,0 +1,1858 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* init.c.....                                                              *
+*                                                                          *
+* Function:..Initialisation-Routine for TWEB                               *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            July 21 1995                 Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 11 1999                ZZZZZ  DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: init.c,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "init.h"
+
+
+PUBLIC void getopts (argc, argv, glob)
+int argc;
+char **argv;
+GLOB_STRUCT *glob;
+{
+    int            i;
+    extern char        *optarg;
+    char hname[BUFSIZ];
+    struct hostent *hstruct;
+
+    while ( (i = getopt( argc, argv, "P:ad:f:l:p:x:b:L:" )) != EOF ) {
+        switch( i ) {
+        case 'a':
+            searchaliases = 0;
+            break;
+        case 'b':
+            if(glob->basedn && glob->basedn->dn)
+                free(glob->basedn->dn);
+            glob->basedn->dn = strdup( optarg );
+            break;
+        case 'd':
+            debug = atoi( optarg );
+#ifdef LDAP_DEBUG
+            ldap_debug = debug;
+#else
+            fprintf( stderr, 
+                             "warning: ldap debugging requires LDAP_DEBUG\n" );
+#endif
+            break;
+
+        case 'f':
+            glob->filterfile = strdup( optarg );
+            break;
+
+        case 'l':
+            dosyslog = cnvt_str2int( optarg, syslog_types, LOG_LOCAL3 );
+            break;
+
+        case 'p':
+            glob->webport = atoi( optarg );
+            break;
+
+        case 'P':
+            glob->ldapport = atoi( optarg );
+            break;
+
+        case 'x':
+            if(glob->ldapd)
+                free(glob->ldapd);
+            glob->ldapd = str_tolower( strdup( optarg ));
+            break;
+        case 'L':
+            break;
+        default:
+            usage(argv[0]);
+        }
+    }
+    if ( (glob->myname = strrchr( argv[0], '/' )) == NULL )
+        glob->myname = argv[0];
+    else
+        glob->myname++;
+
+    if(!glob->hostname) {
+        gethostname(hname, BUFSIZ);
+        hstruct = gethostbyname(hname);
+        glob->hostname = str_tolower( strdup( hstruct->h_name ));
+    }
+
+}
+/* end of function: getopts */
+
+PRIVATE void usage(name)
+char    *name;
+{
+        fprintf(stderr, USAGE, name);
+        exit( 1 );
+}
+/* end of function: usage */
+
+PUBLIC void check (glob)
+GLOB_STRUCT *glob;
+{
+    if(!glob->webport || !glob->ldapd || !glob->ldapport ||
+                        !glob->basedn || !glob->sort) {
+        fprintf(stderr,
+"\nMissing must-attribute: webport || ldapd || ldapport || basedn->dn || sort\n!\n\n");
+        exit(1);
+    }
+
+    if(glob->grant){
+        trim(glob->grant, "|");
+        glob->comp_grant = tweb_regcomp(glob->grant);
+    }
+
+    if(glob->refuse){
+        trim(glob->refuse, "|");
+        glob->comp_refuse = tweb_regcomp(glob->refuse);
+    }
+
+    if(glob->allow_string){
+        trim(glob->allow_string, "|");
+        glob->comp_allow = tweb_regcomp(glob->allow_string);
+    }
+
+    if(glob->deny_string){
+        trim(glob->deny_string, "|");
+        glob->comp_deny = tweb_regcomp(glob->deny_string);
+    }
+
+    if(!glob->webdn){
+        glob->webdn   = "c=DE";
+        if(glob->webpw) free(glob->webpw);
+        glob->webpw   = NULL;
+    }
+    if(!glob->webdn2){
+        glob->webdn2   = "c=BR";
+        if(glob->webpw2) free(glob->webpw2);
+        glob->webpw2   = NULL;
+    }
+
+    if(!glob->timeout)
+        glob->timeout = DEFAULT_TIMEOUT;
+    if(!glob->maxcount)
+        glob->maxcount = DEFAULT_MAXCOUNT;
+
+    if(!glob->subtree_search)
+        glob->subtree_search =
+                str2charray( "organization:organizationalUnit", ":");
+
+    glob->cache_expire = glob->cache_expire % MAX_EXPIRE;
+
+    f_test(glob);
+    if(glob->sort) {
+        pSORT_LINE s_ptr;
+        pDISPLAY d_ptr;
+
+        for(s_ptr = glob->sort; s_ptr; s_ptr = s_ptr->next)
+            for(d_ptr = glob->display; d_ptr; d_ptr = d_ptr->next) {
+                if(!strcmp(d_ptr->ocs, s_ptr->display_class)) {
+                    s_ptr->display_class_ptr = d_ptr;
+                    break;
+                }
+                if(!strcmp(d_ptr->ocs, "default"))
+                    s_ptr->display_class_ptr = d_ptr;
+            }
+    }
+
+    if( glob->ldapd && !strcmp(glob->ldapd, "x500-relay.uni-tuebingen.de") 
+            && !strcmp(glob->lang, "0")) {
+       fprintf( stderr,
+            "\n\n\tYou missed to set LDAP-HOST and LDAP-PORT to\n\
+             a machine of your own.\n\n\tPlease change as soon as \
+             possible to avoid\n\
+             overload of host x500-relay.uni-tuebingen.de !\n\n");
+    }
+
+}
+/* end of function: check */
+
+PUBLIC void init(argv, lang, glob)
+char **argv;
+char *lang;
+GLOB_STRUCT *glob;
+{
+FILE *fp;
+static char file[BUFSIZ];
+
+    glob->argv0 = strdup(argv[0]);
+    glob->gw_switch = (pGW_SWITCH) ch_calloc(1, sizeof(GW_SWITCH));
+    glob->basedn = (BASEDN_LINE *) ch_calloc(1, sizeof(BASEDN_LINE));
+    glob->basedn->dn = strdup("");
+    glob->menu_filter = strdup("(& (objectClass=top)(!(objectClass=dSA)) )");
+
+#ifdef RCINIT
+    strcpy(file, RCINIT);
+#else
+    sprintf( file, "%s.rc", argv[0] );
+#endif
+    glob->acfilename = file;
+    if(!(fp = fopen(file, "r"))) {
+        fprintf(stderr, "\n\nATTENTION!!!\n\nCould not open file %s !\n", file);
+        exit(1);
+    }
+    main_loop(fp, glob);
+    fclose(fp);
+
+#ifdef CONFINIT
+    strcpy(file, CONFINIT);
+#else
+    sprintf( file, "%s.conf.%s", argv[0], glob->lang );
+#endif
+    glob->acfilename = file;
+    if(!(fp = fopen(file, "r"))) {
+        fprintf(stderr, "\n\nATTENTION!!!\n\nCould not open file %s !\n", file);
+        exit(1);
+    }
+    main_loop(fp, glob);
+    fclose(fp);
+    return;
+}
+/* end of function: init */
+
+#define  STRINGP(x)   ((x) ? (x) : "(NULL)")
+
+PUBLIC void output(fp, glob, html_flag)
+FILE *fp;
+GLOB_STRUCT *glob;
+int html_flag;
+{
+    pDISPLAY d_ptr;
+    pSEARCH_ONLY_LINE so_ptr;
+    pGW_SWITCH_LINE gw_ptr;
+    pSORT_LINE s_ptr;
+    pDISPLAY_LINE dis_ptr;
+    pMODIFY_LINE mod_ptr;
+    pMODIF m_ptr;
+    pCACHING_TERMS_LINE ca_ptr;
+    pIND_ATTRS i_ptr;
+    IND_ATTR_ARR *idx;
+    pTABLE_DISPLAY ta_ptr;
+    pFORM_BUTTON fo_ptr;
+    int i;
+    char hb[BUFSIZ], he[BUFSIZ], li[BUFSIZ], lb[BUFSIZ], le[BUFSIZ];
+
+    strcpy(lb, html_flag ? "<UL>" : "");
+    strcpy(le, html_flag ? "</UL>" : "");
+    strcpy(li, html_flag ? "<LI>" : "");
+    strcpy(hb, html_flag ? "</UL><B>" : "");
+    strcpy(he, html_flag ? "</B><UL>" : "");
+
+/*for(i=0; glob->sort_attribs[i]; i++)
+    fprintf(fp,"%s<p>\n", glob->sort_attribs[i]);
+*/
+
+    fprintf(fp,
+        "%s\n\n\n###############CONFIGURATION-DISPLAY###############\n\n%s",
+        html_flag ? "<B>" : "", he);
+    fprintf(fp, "\n%s\n\n%s", version, html_flag ? "<p>" : "");
+/*    fprintf(fp, "%s\n%s\n\n%s", html_flag ? "<B>" : "", version, he);
+*/
+
+    fprintf(fp, "%sWEBDN%s%s %s\n", hb, he, li, STRINGP( glob->webdn ));
+    fprintf(fp, "%sWEBDN2%s%s %s\n", hb, he, li, STRINGP( glob->webdn2 ));
+    if(!html_flag){
+        fprintf(fp, "WEBPW: %s\n", STRINGP( glob->webpw ));
+        fprintf(fp, "WEBPW2: %s\n", STRINGP( glob->webpw2 ));
+    }
+    fprintf(fp, "%sTWEBHOST%s%s %s:%d\n", hb, he, li, STRINGP( glob->hostname ),
+            glob->virtualport ? glob->virtualport : glob->webport);
+    fprintf(fp, "%sWEBPORT%s%s %d\n", hb, he, li, glob->webport);
+    fprintf(fp, "%sTIMEOUT%s%s %d\n", hb, he, li, glob->timeout);
+    fprintf(fp, "%sLDAPD%s%s %s\n", hb, he, li, STRINGP( glob->ldapd ));
+    fprintf(fp, "%sLDAPPORT%s%s %d\n\n", hb, he, li, glob->ldapport);
+    fprintf(fp, "%sETCDIR%s%s %s\n", hb, he, li, STRINGP( glob->etcdir ));
+    fprintf(fp, "%sHELPFILE%s%s %s\n", hb, he, li, STRINGP( glob->helpfile ));
+    fprintf(fp, "%sFILTERFILE%s%s %s\n", hb, he, li,
+        STRINGP( glob->filterfile ));
+    fprintf(fp, "%sFRIENDLYFILE%s%s %s\n", hb, he, li,
+        STRINGP( glob->friendlyfile ));
+    fprintf(fp, "%sHEADER%s%s %s\n", hb, he, li, STRINGP( glob->header ));
+    fprintf(fp, "%sFOOTER%s%s %s\n", hb, he, li, STRINGP( glob->footer ));
+    fprintf(fp, "%sGRANT%s%s %s\n", hb, he, li, STRINGP( glob->grant ));
+    fprintf(fp, "%sREFUSE%s%s %s\n", hb, he, li, STRINGP( glob->refuse ));
+
+    fprintf(fp, "%s\nPULL-DOWN-MENUS%s%s %s\n",
+        hb, he, li, glob->pull_down_menus?"YES":"NO");
+    fprintf(fp, "%s\nDISP-SEA-RDN%s%s %s\n",
+         hb, he, li, glob->disp_sea_rdn?"YES":"NO");
+    fprintf(fp, "%s\nNO-PROXY%s%s %s\n", hb, he, li, glob->no_proxy?"YES":"NO");
+    fprintf(fp, "%s\nALLOW-PROXY%s\n%s", hb, he, li);
+    for(i = 0; glob->allow_proxy && glob->allow_proxy[i]; i++) 
+        fprintf(fp, "%s:", glob->allow_proxy[i]);
+
+    fprintf(fp, "%sALLOW-STRING%s%s %s\n", hb, he, li,
+        STRINGP( glob->allow_string ));
+    fprintf(fp, "%sDENY-STRING%s%s %s\n", hb, he, li,
+        STRINGP( glob->deny_string ));
+    fprintf(fp, "%sALLOW-MSG%s%s %s\n", hb, he, li, STRINGP( glob->allow_msg ));
+    fprintf(fp, "%s\nBASEDN%s%s \t%s\t%s\t%s\n", hb, he, li,
+         STRINGP( glob->basedn->dn ), STRINGP( glob->basedn->head ),
+        STRINGP( glob->basedn->foot ));
+/*    fprintf(fp, "%s\nBASEDNARRAY%s%s \t%s\t%s\n", hb, he, li, glob->basedn->dnarray[0], glob->basedn->dnarray[1]); */
+    fprintf(fp, "%s\nMAXCOUNT%s%s %d\n", hb, he, li, glob->maxcount);
+    if (glob->comrefuse)
+        fprintf(fp, "%s\nCOMREFUSE%s%s %d\t%d\t%d\t%d\t%lu\t%s\n",
+                    hb, he, li, glob->comrefuse->tmin, glob->comrefuse->tdiff,
+                    glob->comrefuse->maxAccept, glob->comrefuse->suspendCycle,
+                    glob->comrefuse->statCycle,
+                    STRINGP( glob->comrefuse->statFile ));
+    fprintf(fp, "%s\nMAX-PERSON%s%s %d\t%s\t%s\n", hb, he, li,
+         glob->max_person, glob->strict?"STRICT":"",
+         glob->no_browse?"NO-BROWSE":"");
+    fprintf(fp, "%s\nLEGAL%s%s %s %s\n", hb, he, li, glob->legal?"YES":"NO",
+                 glob->legal_top ? "ON-TOP" : "");
+/*    fprintf(fp, "%s\nSHOW-DEFOC%s%s %s\n", hb, he, li, glob->show_defoc?"YES":"NO");
+*/
+
+#ifdef AMBIXGW
+    fprintf(fp, "%s\nSELBSTEINTRAG%s\n", hb, he);
+    for(i = 0; i<9; i++) 
+        if (glob->selbsteintrag[i])
+            fprintf(fp, "%s\t%s\n", li, glob->selbsteintrag[i]);
+#endif
+
+    fprintf(fp, "%s\nSTRIP-PIN%s%s %s\n", hb, he, li,
+        STRINGP( glob->strip_pin ));
+    fprintf(fp, "%s\nPREFER-REF-URIS%s%s %s\n", hb, he, li,
+         glob->prefer_ref_uris?"YES":"NO");
+    fprintf(fp, "%s\nSTRICT-BASEDN%s%s %s\n", hb, he, li,
+         glob->strict_basedn?"YES":"NO");
+    fprintf(fp, "%s\nNO-SHOW-RDN%s%s %s\n\n", hb, he, li,
+        STRINGP( glob->no_show_rdn ));
+    fprintf(fp, "%s\nNO-MODIFY%s%s %s\n\n", hb, he, li,
+        STRINGP( glob->no_modify ));
+
+#ifdef TUE_TEL
+    fprintf(fp, "%sPHONEWORLD%s%s %s\n", hb, he, li,
+        STRINGP( glob->phoneworld ));
+#endif
+
+    fprintf(fp, "%s\nLANGUAGE%s\n", hb, he);
+    for(i = 0; glob->language[i]; i++) 
+        fprintf(fp, "%s\t%s\n", li, glob->language[i]);
+
+    fprintf(fp, "%s\nCACHE-EXPIRE-DEFAULT%s%s %d\n", hb, he, li,
+         glob->cache_expire);
+    fprintf(fp, "%s\nCACHING-TERMS%s\n", hb, he);
+    for(ca_ptr = glob->caching_terms; ca_ptr; ca_ptr = ca_ptr->next) {
+        fprintf(fp, "%s\t%d\t%s\t%s\t%s\n", li, ca_ptr->time,
+         STRINGP( ca_ptr->access_type ), ca_ptr->rdn_oc ? "RDN" : "OC",
+        STRINGP( ca_ptr->pattern ));
+    }
+
+#ifdef TUE_TEL
+    if(glob->ton_urls) {
+        fprintf(fp, "%s\nTON-URLS%s\n", hb, he);
+        fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n",li,
+       STRINGP( glob->ton_urls->attribute ),
+                 STRINGP( glob->ton_urls->rdn_attr ),
+        STRINGP( glob->ton_urls->redirect ),
+                 STRINGP( glob->ton_urls->x_disp ),
+        STRINGP( glob->ton_urls->base ),
+                 glob->ton_urls->admin?"ADMIN":
+                       glob->ton_urls->pass_oc? glob->ton_urls->pass_oc : "");
+    }
+#endif
+    if(glob->ip_refuse) {
+        fprintf(fp, "%s\nIP-REFUSE%s\n", hb, he);
+        fprintf(fp, "%s\t%s\t%d\n",li,
+       STRINGP( glob->ip_refuse->dat_file ), glob->ip_refuse->rereadcycle);
+    }
+
+    fprintf(fp, "%s\nSEARCH-ONLY%s\n", hb, he);
+    for(so_ptr = glob->search_only; so_ptr; so_ptr = so_ptr->next) {
+        fprintf(fp, "%s\t%s\t%s\t%s\n", li, STRINGP( so_ptr->dn ),
+         STRINGP( so_ptr->head ), STRINGP( so_ptr->foot ));
+    }
+
+    fprintf(fp, "%s\nSUBTREE-SEARCH%s\n%s", hb, he, li);
+    for(i = 0; glob->subtree_search && glob->subtree_search[i]; i++) 
+        fprintf(fp, "%s:", glob->subtree_search[i]);
+
+    if(glob->index_url) {
+        fprintf(fp, "%s\nINDEX-URL%s\n", hb, he);
+        fprintf(fp, "%s\t%s\t%d\n", li, STRINGP( glob->index_url->dat_file ),
+                glob->index_url->rereadcycle );
+    }
+
+#ifdef TUE_TEL
+    if(glob->dit_config) {
+        fprintf(fp, "%s\nDIT-CONFIG%s\n", hb, he);
+        fprintf(fp, "%s\t%s\t%s\t%s\n", li, STRINGP( glob->dit_config->attr ),
+                STRINGP( glob->dit_config->fetch_dn ),
+                glob->dit_config->not_browse ? "NOT-BROWSE" : "");
+    }
+#endif
+
+    fprintf(fp, "%s\nDYNAMIC-GW%s%s %s\n", hb, he, li,
+         glob->gw_switch->dynamic?"YES":"NO");
+    fprintf(fp, "%s\nGW-SWITCH%s\n", hb, he);
+    for(gw_ptr = glob->gw_switch->list; gw_ptr; gw_ptr = gw_ptr->next) {
+        fprintf(fp, "%s\t%s\t%s\n", li, STRINGP( gw_ptr->dn ),
+        STRINGP( gw_ptr->url ));
+    }
+
+    fprintf(fp, "%s\nSORT%s\n", hb, he);
+    for(s_ptr = glob->sort; s_ptr; s_ptr = s_ptr->next) {
+        fprintf(fp, "%s\t%s\t%s\t%d\t%s\t%s\n", li,
+        STRINGP( s_ptr->object_class ),
+         STRINGP( s_ptr->label ), s_ptr->priority,
+        STRINGP( s_ptr->display_class ), STRINGP( s_ptr->sort_attr ));
+    }
+
+    fprintf(fp, "%s\nTABLES%s\n", hb, he);
+    for(ta_ptr = glob->tables; ta_ptr; ta_ptr = ta_ptr->next) {
+        fprintf(fp, "%s\t%s\t%s\t%s\t%s\n", li, ta_ptr->allow ? "ALLOW" : "ALL",
+         STRINGP( ta_ptr->select_oc ), STRINGP( ta_ptr->button_label ),
+        STRINGP( ta_ptr->dn_extension ));
+    }
+
+    fprintf(fp, "%s\nFORM-BUTTON%s\n", hb, he);
+    for(fo_ptr = glob->form_button; fo_ptr; fo_ptr = fo_ptr->next) {
+        fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", li,
+            fo_ptr->read_menu ? "READ" : "MENU",
+            STRINGP( fo_ptr->object_class ), STRINGP( fo_ptr->method ),
+            STRINGP( fo_ptr->script_url ), STRINGP( fo_ptr->text ),
+            STRINGP( fo_ptr->dn_name ), STRINGP( fo_ptr->form_name ),
+            STRINGP( fo_ptr->button_label ));
+    }
+
+    fprintf(fp, "%s\nINDIRECT-ATTRS%s", hb, he);
+    for(i_ptr = glob->ind_attrs; i_ptr; i_ptr = i_ptr->next) {
+        fprintf(fp, "%s %s\n%s", li, STRINGP( i_ptr->ref_attr ), lb );
+        for(idx = i_ptr->ia_arr, i=0; idx[i].key; i++)
+            fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%d\t%s\n", li, idx[i].key,
+             idx[i].replace == 2 ? "FUNCTION" : idx[i].replace ? "REPLACE" :
+             "APPEND", STRINGP( idx[i].attr ), STRINGP( idx[i].host ),
+        idx[i].port, STRINGP( idx[i].base ));
+        fprintf(fp, le);
+    }
+    fprintf(fp, le);
+
+    fprintf(fp, "%s\nMODIFY%s", hb, he);
+    for(m_ptr = glob->modify; m_ptr; m_ptr = m_ptr->next) {
+        fprintf(fp, "%s %s\n%s", li, STRINGP( m_ptr->ocs ), lb );
+        for(mod_ptr = m_ptr->modattr; mod_ptr; mod_ptr = mod_ptr->next)
+            fprintf(fp, "%s\t%s\t%s\t%d\n", li, STRINGP( mod_ptr->attribute ),
+         STRINGP( mod_ptr->label ), mod_ptr->count);
+    }
+    fprintf(fp, le);
+
+    fprintf(fp, "%s\nDISPLAY-OBJECT%s", hb, he);
+    for(d_ptr = glob->display; d_ptr; d_ptr = d_ptr->next) {
+        fprintf(fp, "%s\n\n %s\n%s", li, STRINGP( d_ptr->ocs) , lb );
+        fprintf(fp, "%sFIRST-PAGE:\n%s", li, lb);
+        for(dis_ptr = d_ptr->first_page; dis_ptr; dis_ptr = dis_ptr->next)
+            fprintf(fp, "%s\t%s\t%s\t%s\n", li, STRINGP( dis_ptr->attribute ),
+         STRINGP( dis_ptr->label ), STRINGP( dis_ptr->type ));
+        fprintf(fp, "%s%sSECOND-PAGE:\n%s", le, li, lb);
+        for(dis_ptr = d_ptr->second_page; dis_ptr; dis_ptr = dis_ptr->next)
+            fprintf(fp, "%s\t%s\t%s\t%s\n", li, STRINGP( dis_ptr->attribute ),
+         STRINGP( dis_ptr->label ), STRINGP( dis_ptr->type ));
+        fprintf(fp, "%s%s", le, le);
+    }
+    fprintf(fp, le);
+}
+/* end of function: output */
+
+PRIVATE void main_loop(fp,glob)
+FILE *fp;
+GLOB_STRUCT *glob;
+{
+FILELINE inLine;
+extern PARSE_ENTRY parse_table[];
+
+    while(do_readf(&inLine, fp)){
+        parse(&inLine, parse_table, glob, 0);
+    }
+}
+/* end of function: main_loop */
+
+PUBLIC int do_readf(inLine, fp)
+FILE *fp;
+FILELINE *inLine;
+{
+static FILE *fo;
+static int lineCount = 0;
+
+    if(fp)
+        fo = fp;
+
+    do {
+        char *comment;
+
+        if(!fgets(inLine->value, BUFSIZ-1, fo)){
+            lineCount = 0;
+            return(0);
+        }
+        lineCount++;
+        if( (comment = strchr(inLine->value, '#')) )
+            *comment = '\0';
+        trim(inLine->value, " \t\n");
+    } while(!*inLine->value);
+
+    inLine->count = lineCount;
+/*    printf("%d: %s\n", inLine->count, inLine->value);
+*/
+    return (inLine->count);
+}
+/* end of function: do_readf */
+
+PRIVATE int parse(inLine, p_table, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *p_table;
+GLOB_STRUCT *glob;
+int level;
+{
+int lineCount = inLine->count;
+
+    while(1){
+        switch(parse2(inLine, p_table, glob, level)){
+            case NOTOK:
+                printf("Error in init-file line %d:\n%s\n ", inLine->count, inLine->value);
+                exit(1);
+            case DONE:
+                if(lineCount == inLine->count)
+                    return (DONE);
+                else
+                    lineCount = inLine->count;
+                break;
+            default:
+                return (OK);
+        }
+    }
+}
+/* end of function: parse */
+
+PRIVATE int parse2(inLine, p_table, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *p_table;
+GLOB_STRUCT *glob;
+int level;
+{
+PARSE_ENTRY *disp;
+char keyWord[BUFSIZ];
+
+    sscanf(inLine->value, "%s", keyWord);
+    str_toupper( keyWord );
+    for(disp=p_table; disp->keyWord; disp++) {
+        if(!strcmp(keyWord, disp->keyWord)){
+            return ((*disp->keyFunc)(inLine, disp, glob, level));
+        }
+    }
+    return (level?DONE:NOTOK);
+}
+/* end of function: parse2 */
+
+PUBLIC int get_str_param(inLine, str, glob, lower)
+FILELINE *inLine;
+char **str;
+GLOB_STRUCT *glob;
+int          lower;
+{
+char tmp[4*BUFSIZ];
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    }else
+        if (sscanf(inLine->value, "%*s%s", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    do {
+        if(*str) {
+            *str = realloc(*str, strlen(*str) + strlen(tmp) +1 );
+            strcat(*str, lower ? str_tolower( tmp ) : tmp );
+        } else {
+            *str = strdup( lower ? str_tolower( tmp ) : tmp );
+        }
+            
+        if(!do_readf(inLine, NULL))
+            return (OK);
+
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%*[^\"]\"%[^\"]", tmp) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        }else
+            if (sscanf(inLine->value, "%s", tmp) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+     } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+
+    return (DONE);
+}
+/* end of function: get_str_param */
+
+PRIVATE int get_int_param(inLine, integer, glob)
+FILELINE *inLine;
+int *integer;
+GLOB_STRUCT *glob;
+{
+char tmp[BUFSIZ];
+
+    if (sscanf(inLine->value, "%*s%s", tmp) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    *integer = atoi(tmp);
+    return (OK);
+}
+/* end of function: get_int_param */
+
+
+PRIVATE int webdn(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->webdn, glob, 0));
+}
+/* end of function: webdn */
+
+PRIVATE int webpw(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->webpw, glob, 0));
+}
+/* end of function: webpw */
+
+PRIVATE int webdn2(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->webdn2, glob, 0));
+}
+/* end of function: webdn2 */
+
+PRIVATE int webpw2(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->webpw2, glob, 0));
+}
+/* end of function: webpw2 */
+
+
+PRIVATE int webport(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_int_param(inLine, &glob->webport, glob));
+}
+/* end of function: webport */
+
+PRIVATE int timeout(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_int_param(inLine, &glob->timeout, glob));
+}
+/* end of function: timeout */
+
+PRIVATE int hostname(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char hostname[BUFSIZ];
+char *virtualport;
+
+    if (sscanf(inLine->value, "%*s%s", hostname) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    if( ( virtualport = strchr(hostname, ':')) ) {
+        *virtualport++ = '\0';
+        glob->virtualport = atoi( virtualport );
+    }
+    glob->hostname = strdup( hostname );
+    return (OK);
+}
+/* end of function: hostname */
+
+PRIVATE int ldapd(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->ldapd, glob, 1));
+}
+/* end of function: ldapd */
+
+PRIVATE int ldapportf(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_int_param(inLine, &glob->ldapport, glob));
+}
+/* end of function: ldapportf */
+
+PRIVATE int etcdir(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->etcdir, glob, 0));
+}
+/* end of function: etcdir */
+
+PRIVATE int filterfilef(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->filterfile, glob, 0));
+}
+/* end of function: filterfile */
+
+PRIVATE int helpfilef(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->helpfile, glob, 0));
+}
+/* end of function: helpfile */
+
+PRIVATE int friendlyfilef(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->friendlyfile, glob, 0));
+}
+/* end of function: friendlyfile */
+
+PRIVATE int index_url(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char dat_file[BUFSIZ];
+    char rereadcycle[BUFSIZ];
+
+    if (sscanf(inLine->value, "%*s%s%s", dat_file, rereadcycle) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n",
+                glob->acfilename, inLine->count, inLine->value);
+
+    glob->index_url  = (INDEX_URL *) ch_calloc(1, sizeof(INDEX_URL));
+    glob->index_url->dat_file = strdup( dat_file );
+    glob->index_url->rereadcycle = atoi(rereadcycle);
+
+    get_index_url_rules(glob);
+
+    return (OK);
+}  /*  index_url  */
+
+PUBLIC void get_index_url_rules(glob)
+GLOB_STRUCT *glob;
+{
+char index[BUFSIZ];
+char rule[BUFSIZ];
+char dit_dn[BUFSIZ];
+FILE *dfp;
+char  inLine[BUFSIZ];
+int idx;
+
+    if ( !glob->index_url || !glob->index_url->dat_file )
+        return;
+    if(!(dfp = fopen(glob->index_url->dat_file, "r")))
+        return;
+
+    for ( idx = 0; idx < INDEX_RULE_SIZE; idx++ ) {
+        free( glob->index_url->rarr[idx].rule );
+        free( glob->index_url->rarr[idx].dit_dn );
+    }
+
+    while(fgets(inLine, BUFSIZ-1, dfp)) {
+
+        if(strchr(inLine, '"')) {
+            if (sscanf(inLine, "%s%s%*[^\"]\"%[^\"]\"",
+                                    index, rule, dit_dn) < 1)
+                syslog (LOG_INFO, "Error in index_url-file");
+        } else {
+            if (sscanf(inLine, "%s%s%s",
+                                   index, rule, dit_dn) < 1)
+                syslog (LOG_INFO, "Error in index_url-file");
+        }
+        idx = atoi(index);
+        if ( idx < 0 || idx >= INDEX_RULE_SIZE )
+            continue;
+        glob->index_url->rarr[idx].rule = str_tolower( strdup( rule ));
+        glob->index_url->rarr[idx].dit_dn = strdup( dit_dn );
+    }
+    fclose( dfp );
+}
+/* end of function: get_index_url_rules */
+
+PUBLIC void re_read_index_url_rules( glob )
+GLOB_STRUCT   *glob;
+{
+       static int index_url_rules_reload = 0;
+
+       if ( glob->index_url && glob->index_url->rereadcycle && !( ++index_url_rules_reload % glob->index_url->rereadcycle )) {
+               get_index_url_rules( glob );
+       }
+
+}  /*  re_read_index_url_rules  */
+
+
+PRIVATE int allow_proxy(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char tmp[BUFSIZ];
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    }else
+        if (sscanf(inLine->value, "%*s%s", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    glob->allow_proxy = str2charray( str_tolower(tmp), ":");
+    return (OK);
+}
+/* end of function: allow_proxy */
+
+PRIVATE int subtree_search(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char tmp[BUFSIZ];
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    }else
+        if (sscanf(inLine->value, "%*s%s", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    glob->subtree_search = str2charray( tmp, ":");
+    return (OK);
+}
+/* end of function: subtree_search */
+
+PRIVATE int grant(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->grant, glob, 1));
+}
+/* end of function: grant */
+
+PRIVATE int refuse(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->refuse, glob, 1));
+}
+/* end of function: refuse */
+
+PRIVATE int allow_string(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->allow_string, glob, 1));
+}
+/* end of function: allow_string */
+
+PRIVATE int deny_string(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->deny_string, glob, 1));
+}
+/* end of function: deny_string */
+
+
+PRIVATE int show_defoc(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    glob->show_defoc = 1;
+    return (OK);
+}
+/* end of function: show_defoc */
+
+PRIVATE int max_person(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char tmp[BUFSIZ];
+char tmp2[BUFSIZ];
+char tmp3[BUFSIZ];
+
+    if (sscanf(inLine->value, "%*s%s%s%s", tmp, tmp2, tmp3) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    glob->max_person = atoi(tmp);
+    glob->strict = (!strcasecmp (tmp2, "strict") || !strcasecmp (tmp3, "strict")) ? TRUE : FALSE;
+    glob->no_browse = (!strcasecmp (tmp2, "no-browse") || !strcasecmp (tmp3, "no-browse")) ? TRUE : FALSE;
+
+    return (OK);
+}
+/* end of function: max_person */
+
+PRIVATE int comrefuse(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char tmp[BUFSIZ];
+    char tmp2[BUFSIZ];
+    char tmp3[BUFSIZ];
+    char tmp4[BUFSIZ];
+    char tmp5[BUFSIZ];
+    char tmp6[BUFSIZ];
+
+    if (sscanf(inLine->value, "%*s%s%s%s%s%s%s",
+                      tmp, tmp2, tmp3, tmp4, tmp5, tmp6) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    comRefuseP = glob->comrefuse = 
+                           (COMREFUSE *) ch_calloc(1, sizeof(COMREFUSE));
+    glob->comrefuse->tmin = atoi(tmp);
+    glob->comrefuse->tdiff = atoi(tmp2) - glob->comrefuse->tmin;
+    glob->comrefuse->maxAccept = atoi(tmp3);
+    glob->comrefuse->suspendCycle = -1 * atoi(tmp4);
+    glob->comrefuse->statCycle = (time_t) atol (tmp5);
+    sprintf (tmp6, "%s.%s-%d", tmp6, glob->lang, (int) getpid());
+    glob->comrefuse->statFile = strdup (tmp6);
+
+    return (OK);
+}
+/* end of function: comrefuse */
+
+PRIVATE int display(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char tmp[BUFSIZ];
+pDISPLAY *d_ptr;
+
+    for(d_ptr = &glob->display; *d_ptr; d_ptr = &(*d_ptr)->next)
+        ;
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    *d_ptr = (pDISPLAY) ch_calloc(1, sizeof(DISPLAY));
+    (*d_ptr)->ocs = str_tolower( strdup( tmp ));
+    if(strcmp(tmp, "default"))
+        glob->default_display_type = *d_ptr;
+    if(!do_readf(inLine, NULL))
+                        return (OK);
+    return (parse(inLine,disp->subTable, glob, ++level));
+}
+/* end of function: display */
+
+PRIVATE int basednf(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char dn[BUFSIZ];
+char head[BUFSIZ];
+char foot[BUFSIZ];
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]\"%s%s", dn, head, foot) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+     } else
+        if (sscanf(inLine->value, "%*s%s%s%s", dn, head, foot) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+       if ( !strcasecmp( dn, "ROOT" )) *dn = '\0';
+    glob->basedn->dn = strdup( dn );
+    glob->basedn->dnarray = dn2charray( dn );
+    glob->basedn->head = strdup(head);
+    glob->basedn->foot = strdup(foot);
+    return (OK);
+}
+/* end of function: basednf */
+
+PRIVATE int search_only(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char dn[BUFSIZ];
+char head[BUFSIZ];
+char foot[BUFSIZ];
+pSEARCH_ONLY_LINE *so_ptr;
+
+    so_ptr = &glob->search_only;
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]\"%s%s", dn, head, foot) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s%s%s", dn, head, foot) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    do {
+        *so_ptr = (pSEARCH_ONLY_LINE) ch_calloc(1, sizeof(SEARCH_ONLY_LINE));
+        (*so_ptr)->dn = str_tolower( strdup( dn ));
+        (*so_ptr)->head = strdup(head);
+        (*so_ptr)->foot = strdup(foot);
+        so_ptr = &(*so_ptr)->next;
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%*[^\"]\"%[^\"]\"%s%s", dn, head, foot) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%s%s", dn, head, foot) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+    return (DONE);
+}
+/* end of function: search_only */
+
+PRIVATE int dynamic_gw(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    glob->gw_switch->dynamic = 1;
+    return (OK);
+}
+/* end of function: dynamic_gw */
+
+PRIVATE int caching_terms(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char time[BUFSIZ];
+char access_type[BUFSIZ];
+char rdn_oc[BUFSIZ];
+char pattern[BUFSIZ];
+pCACHING_TERMS_LINE *ca_ptr;
+
+    ca_ptr = &glob->caching_terms;
+
+    if (sscanf(inLine->value, "%*s%s%s%s%s", 
+               time, access_type, rdn_oc, pattern) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", 
+                glob->acfilename, inLine->count, inLine->value);
+    do {
+        *ca_ptr = (pCACHING_TERMS_LINE) ch_calloc(1, sizeof(CACHING_TERMS_LINE));
+        (*ca_ptr)->time = atoi(time);
+        (*ca_ptr)->access_type = str_toupper(strdup(trim (access_type,WSPACE)));
+        (*ca_ptr)->rdn_oc = !strncasecmp(rdn_oc, "RDN", 3) ? 1 : 0;
+        (*ca_ptr)->pattern = str_tolower(strdup(trim (pattern, WSPACE)));
+        ca_ptr = &(*ca_ptr)->next;
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if (sscanf(inLine->value, "%s%s%s%s", 
+                   time, access_type, rdn_oc, pattern) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n",
+                    glob->acfilename, inLine->count, inLine->value);
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+    return (DONE);
+}
+/* end of function: caching_terms */
+
+PRIVATE int gw_switch(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char dn[BUFSIZ];
+char url[BUFSIZ];
+pGW_SWITCH_LINE *gw_ptr;
+
+        for(gw_ptr = &glob->gw_switch->list; *gw_ptr; gw_ptr = &(*gw_ptr)->next)
+                ;
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]\"%[\40-\177]", dn, url) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s%[\40-\177]", dn, url) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    do {
+        *gw_ptr = (pGW_SWITCH_LINE) ch_calloc(1, sizeof(GW_SWITCH_LINE));
+        (*gw_ptr)->dn = str_tolower( strdup( dn ));
+        (*gw_ptr)->url = strdup(trim (url, WSPACE));
+        gw_ptr = &(*gw_ptr)->next;
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%*[^\"]\"%[^\"]\"%[\40-\177]", dn, url) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%[\40-\177]", dn, url) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+    return (DONE);
+}
+/* end of function: gw_switch */
+
+PRIVATE int table_disp(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char allow[BUFSIZ];
+    char select_oc[BUFSIZ];
+    char button_label[BUFSIZ];
+    char dn_extension[BUFSIZ];
+    pTABLE_DISPLAY *ta_ptr;
+
+        for(ta_ptr = &glob->tables; *ta_ptr; ta_ptr = &(*ta_ptr)->next)
+                ;
+        if (sscanf(inLine->value, "%*s%s%s%s%s", allow, select_oc, button_label, dn_extension) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    do {
+        *ta_ptr = (pTABLE_DISPLAY) ch_calloc(1, sizeof(TABLE_DISPLAY));
+        (*ta_ptr)->allow = !strcasecmp(allow, "ALLOW") ? 1 : 0;
+        (*ta_ptr)->select_oc = str_tolower( strdup( select_oc ));
+        (*ta_ptr)->button_label = strdup( button_label );
+        (*ta_ptr)->dn_extension = str_tolower( strdup( dn_extension ));
+        ta_ptr = &(*ta_ptr)->next;
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if (sscanf(inLine->value, "%s%s%s%s", allow, select_oc, button_label, dn_extension) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+    return (DONE);
+}
+/* end of function: table_disp */
+
+PRIVATE int modify(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char tmp[BUFSIZ];
+    pMODIF *m_ptr;
+
+    sprintf (tmp, "|");
+    for(m_ptr = &glob->modify; *m_ptr; m_ptr = &(*m_ptr)->next)
+                ;
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*[^\"]\"%[^\"]", tmp+1) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s", tmp+1) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    *m_ptr = (pMODIF) ch_calloc(1, sizeof(MODIF));
+    strcat (tmp, "|");
+    (*m_ptr)->ocs = str_tolower (tr1 (strdup(tmp), ' ', '|'));
+
+    if(!do_readf(inLine, NULL)) return (NOTOK);
+    return (parse(inLine,disp->subTable, glob, ++level));
+}
+/* end of function: modify */
+
+PRIVATE int ind_attrs(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char tmp[BUFSIZ];
+    pIND_ATTRS *i_ptr;
+
+    for(i_ptr = &glob->ind_attrs; *i_ptr; i_ptr = &(*i_ptr)->next)
+                ;
+    if (sscanf(inLine->value, "%*s%s", tmp) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    *i_ptr = (pIND_ATTRS) ch_calloc(1, sizeof(IND_ATTRS));
+    (*i_ptr)->ref_attr = str_tolower(strdup(tmp));
+
+    if(!do_readf(inLine, NULL)) return (NOTOK);
+    return (parse(inLine,disp->subTable, glob, ++level));
+}
+/* end of function: ind_attrs */
+
+PRIVATE int cache_expire(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_int_param(inLine, &glob->cache_expire, glob));
+}
+/* end of function: cache_expire */
+
+PRIVATE int maxcount(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_int_param(inLine, &glob->maxcount, glob));
+}
+/* end of function: maxcount */
+
+PRIVATE int language(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char tmp[BUFSIZ];
+int slots = 2, i = 0;
+
+    glob->language = (char **) ch_calloc(slots+1, sizeof(char **));
+    if (sscanf(inLine->value, "%*s%s", tmp) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    do {
+        if(i == slots){
+            slots *= 2;
+            glob->language =  (char **) ch_realloc((char *)glob->language, (slots+1)*sizeof(char **));
+        }
+        glob->language[i++] = strdup(tmp);
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if (sscanf(inLine->value, "%s", tmp) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+    return (DONE);
+}
+/* end of function: language */
+
+PRIVATE int strict_basedn(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    glob->strict_basedn = 1;
+    return (OK);
+}
+/* end of function: strict_basedn */
+
+PRIVATE int pull_down_menus(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    glob->pull_down_menus = 1;
+    return (OK);
+}
+/* end of function: pull_down_menus */
+
+PRIVATE int no_proxy(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    glob->no_proxy = 1;
+    return (OK);
+}
+/* end of function: no_proxy */
+
+PRIVATE int disp_sea_rdn(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    glob->disp_sea_rdn = 1;
+    return (OK);
+}
+/* end of function: disp_sea_rdn */
+
+PRIVATE int prefer_ref_uris(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    glob->prefer_ref_uris = 1;
+    return (OK);
+}
+/* end of function: prefer_ref_uris */
+
+PRIVATE int strip_pin(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+
+    return(get_str_param(inLine, &glob->strip_pin, glob, 1));
+}
+/* end of function: strip_pin */
+
+PRIVATE int legal(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char tmp[BUFSIZ];
+
+    sscanf(inLine->value, "%*s%s", tmp);
+    glob->legal = 1;
+    glob->legal_top = tmp && !strcasecmp(tmp, "ON-TOP");
+    return (OK);
+}
+/* end of function: legal */
+
+PRIVATE int no_modify(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->no_modify, glob, 1));
+}
+/* end of function: no_modify */
+
+PRIVATE int no_show_rdn(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->no_show_rdn, glob, 1));
+}
+/* end of function: no_show_rdn */
+
+PRIVATE int sort(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char object_class[BUFSIZ];
+    char label[BUFSIZ];
+    char priority[BUFSIZ];
+    char display_class[BUFSIZ];
+    char sort_attr[BUFSIZ];
+    pSORT_LINE *s_ptr;
+
+    s_ptr = &glob->sort;
+    strcpy(sort_attr, "sn");
+    strcpy( display_class, "default" );
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*s%s%*[^\"]\"%[^\"]\"%s%s%s", object_class, label, priority, display_class, sort_attr) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    } else
+        if (sscanf(inLine->value, "%*s%s%s%s%s%s", object_class, label, priority, display_class, sort_attr) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    do {
+        char tmpBuf[BUFSIZ];
+
+        *s_ptr = (pSORT_LINE) ch_calloc(1, sizeof(SORT_LINE));
+        sprintf (tmpBuf, "|%s|", object_class);
+        (*s_ptr)->object_class = str_tolower (strdup(tmpBuf));
+        (*s_ptr)->label = strdup(label);
+        (*s_ptr)->priority = atoi(priority);
+        (*s_ptr)->display_class = str_tolower( strdup( display_class ));
+        (*s_ptr)->sort_attr = strdup( str_tolower( sort_attr ));
+        s_ptr = &(*s_ptr)->next;
+
+        if(!charray_inlist(glob->sort_attribs, sort_attr))
+            charray_add(&glob->sort_attribs, sort_attr );
+
+        if(!do_readf(inLine, NULL))
+            return (OK);
+
+        strcpy(sort_attr, "sn");
+        strcpy( display_class, "default" );
+
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%s%*[^\"]\"%[^\"]\"%s%s%s", object_class, label, priority, display_class, sort_attr) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%s%s%s%s", object_class, label, priority, display_class, sort_attr) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+
+    return (DONE);
+}
+/* end of function: sort */
+
+PRIVATE int form_button(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char read_menu[BUFSIZ];
+    char object_class[BUFSIZ];
+    char method[BUFSIZ];
+    char script_url[BUFSIZ];
+    char text[BUFSIZ];
+    char dn_name[BUFSIZ];
+    char form_name[BUFSIZ];
+    char button_label[BUFSIZ];
+    pFORM_BUTTON *f_ptr;
+
+    f_ptr = &glob->form_button;
+/*    for(f_ptr = &glob->form_button; (*f_ptr)->next; f_ptr = &(*f_ptr)->next)
+            ;
+*/
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*s%s%s%s%s%*[^\"]\"%[^\"]\"%s%s%s", read_menu, object_class, method, script_url, text, dn_name, form_name, button_label) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    } else
+        if (sscanf(inLine->value, "%*s%s%s%s%s%s%s%s%s", read_menu, object_class, method, script_url, text, dn_name, form_name, button_label) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    do {
+
+        *f_ptr = (pFORM_BUTTON) ch_calloc(1, sizeof(FORM_BUTTON));
+        (*f_ptr)->read_menu = strcasecmp(read_menu, "READ") ? 0 : 1;
+        (*f_ptr)->object_class = strdup(object_class);
+        (*f_ptr)->method = strdup(method);
+        (*f_ptr)->script_url = strdup(script_url);
+        (*f_ptr)->text = strdup(text);
+        (*f_ptr)->dn_name = strdup(dn_name);
+        (*f_ptr)->form_name = strdup(form_name);
+        (*f_ptr)->button_label = strdup(button_label);
+        f_ptr = &(*f_ptr)->next;
+
+        if(!do_readf(inLine, NULL))
+            return (OK);
+
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%s%s%s%s%*[^\"]\"%[^\"]\"%s%s%s", read_menu, object_class, method, script_url, text, dn_name, form_name, button_label) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%s%s%s%s%s%s%s", read_menu, object_class, method, script_url, text, dn_name, form_name, button_label) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+
+    return (DONE);
+}
+/* end of function: form_button */
+
+PRIVATE int firstPage(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char attribute[BUFSIZ];
+char label[BUFSIZ];
+char type[BUFSIZ];
+pDISPLAY_LINE *dis_ptr;
+pDISPLAY d_ptr;
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*s%s%*[^\"]\"%[^\"]\"%s", attribute, label, type) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s%s%s", attribute, label, type) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    for(d_ptr = glob->display; d_ptr->next; d_ptr = d_ptr->next)
+        ;
+    dis_ptr = &d_ptr->first_page;
+    do {
+        *dis_ptr = (pDISPLAY_LINE) ch_calloc(1, sizeof(DISPLAY_LINE));
+        (*dis_ptr)->attribute = str_tolower( strdup( attribute ));
+        (*dis_ptr)->label = strdup(label);
+        (*dis_ptr)->type = strdup( str_toupper( type ));
+        (*dis_ptr)->ty = cnvt_str2int (type, disp_types, "DEFAULT");
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%s%*[^\"]\"%[^\"]\"%s", attribute, label, type) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%s%s", attribute, label, type) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        dis_ptr = &(*dis_ptr)->next;
+
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+
+    return (parse(inLine,disp->subTable, glob, ++level));
+}
+/* end of function: firstPage */
+
+PRIVATE int secondPage(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char attribute[BUFSIZ];
+char label[BUFSIZ];
+char type[BUFSIZ];
+pDISPLAY_LINE *dis_ptr;
+pDISPLAY d_ptr;
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*s%s%*[^\"]\"%[^\"]\"%s", attribute, label, type) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s%s%s", attribute, label, type) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    for(d_ptr = glob->display; d_ptr->next; d_ptr = d_ptr->next)
+        ;
+    dis_ptr = &d_ptr->second_page;
+    do {
+        *dis_ptr = (pDISPLAY_LINE) ch_calloc(1, sizeof(DISPLAY_LINE));
+        (*dis_ptr)->attribute = str_tolower( strdup( attribute ));
+        (*dis_ptr)->label = strdup(label);
+        (*dis_ptr)->type = strdup( str_toupper( type ));
+        (*dis_ptr)->ty = cnvt_str2int (type, disp_types, "DEFAULT");
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%s%*[^\"]\"%[^\"]\"%s", attribute, label, type) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%s%s", attribute, label, type) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        dis_ptr = &(*dis_ptr)->next;
+
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+/*puts("leaving secondpage!");
+*/
+
+    return (DONE);
+}
+/* end of function: secondPage */
+
+PRIVATE int modattr(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char attribute[BUFSIZ];
+char label[BUFSIZ];
+char count[BUFSIZ];
+pMODIFY_LINE *mod_ptr;
+pMODIF m_ptr;
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*s%s%*[^\"]\"%[^\"]\"%s", attribute, label, count) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s%s%s", attribute, label, count) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+        for(m_ptr = glob->modify; m_ptr->next; m_ptr = m_ptr->next)
+                ;
+    mod_ptr = &m_ptr->modattr;
+    do {
+        *mod_ptr = (pMODIFY_LINE) ch_calloc(1, sizeof(MODIFY_LINE));
+        (*mod_ptr)->attribute = str_tolower( strdup( attribute ));
+        (*mod_ptr)->label = strdup(label);
+        (*mod_ptr)->count = atoi(count);
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%s%*[^\"]\"%[^\"]\"%s", attribute, label, count) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%s%s", attribute, label, count) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        mod_ptr = &(*mod_ptr)->next;
+
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+/*puts("leaving secondpage!");
+*/
+
+    return (DONE);
+}
+/* end of function: modattr */
+
+PRIVATE int ind_attribute(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+char key[BUFSIZ];
+char replace[BUFSIZ];
+char attribute[BUFSIZ];
+char host[BUFSIZ];
+char port[BUFSIZ];
+char base[BUFSIZ];
+pIND_ATTRS i_ptr;
+IND_ATTR_ARR **idx;
+int i;
+
+    if(strchr(inLine->value, '"')) {
+        if (sscanf(inLine->value, "%*s%s%s%s%s%s%*[^\"]\"%[^\"]\"", key,
+                              replace, attribute, host, port, base) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+    } else
+        if (sscanf(inLine->value, "%*s%s%s%s%s%s%s", key, replace, attribute,
+                                   host, port, base) < 1)
+            fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    for(i_ptr = glob->ind_attrs; i_ptr->next; i_ptr = i_ptr->next)
+        ;
+    
+    idx = &i_ptr->ia_arr;
+
+    *idx = (IND_ATTR_ARR *) ch_malloc( 100 * sizeof(IND_ATTR_ARR) );
+    i = 0;
+
+    do {
+        (*idx)[i].key = strdup(key);
+        (*idx)[i].replace = !strcasecmp(replace, "function") ? 2 :
+                            !strcasecmp(replace, "replace") ? 1 : 0;
+        (*idx)[i].attr = strdup(attribute);
+        (*idx)[i].host = strdup(host);
+        (*idx)[i].port = atoi(port);
+        (*idx)[i].base = strdup(base);
+        (*idx)[++i].key = NULL;
+        
+        if(!do_readf(inLine, NULL))
+                        return (OK);
+        if(strchr(inLine->value, '"')) {
+            if (sscanf(inLine->value, "%s%s%s%s%s%*[^\"]\"%[^\"]\"", key, replace, attribute, host, port, base) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+        } else
+            if (sscanf(inLine->value, "%s%s%s%s%s%s", key, replace, attribute, host, port, base) < 1)
+                fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n", glob->acfilename, inLine->count, inLine->value);
+
+    } while(inLine->value[0] == ' ' || inLine->value[0] == '\t');
+
+    return (DONE);
+}
+/* end of function: ind_attribute */
+
+
+PUBLIC void langinit(glob)
+GLOB_STRUCT *glob;
+{
+    FILE *fp;
+    char inLine[BUFSIZ], lCountS[BUFSIZ], phrase[BUFSIZ], file[BUFSIZ];
+
+    sprintf( file, "%s.lang.%s", glob->argv0, glob->lang );
+    if(!(fp = fopen(file, "r"))) {
+        fprintf(stderr, "\n\nATTENTION!!!\n\nCould not open file %s !\n", file);
+        exit(0);
+    }
+    while(fgets(inLine, BUFSIZ-1, fp)) {
+
+        /* Comment-sign is accepted in the first column only */
+        if(*inLine == '#')
+            *inLine = '\0';
+        if(*inLine == '\t') {
+            strcat(strcat(glob->la[atoi(lCountS)], " "), trim(inLine, " \t\n"));
+            continue;
+        }
+        if(!*(trim(inLine, " \t\n"))) continue;
+        sscanf(trim(inLine, " \t\n"), "%s %[^\n]", lCountS, phrase);
+        if(*glob->la[atoi(lCountS)])
+            fprintf(stderr, "\nWarning: glob->la[%s] existed already with value <%s> and was overwritten with value <%s> !\n\n", lCountS, glob->la[atoi(lCountS)], phrase );
+        strcpy(glob->la[atoi(lCountS)], phrase);
+    }
+
+}
+/* end of function: langinit */
+
+PUBLIC void langoutput(fp, glob, html_flag)
+FILE *fp;
+GLOB_STRUCT *glob;
+int html_flag;
+{
+    int i;
+
+    fprintf(fp, "%s\n\n\nLanguage Settings\n\n%s",html_flag ? "<H2>" : "", html_flag ? "</H2>" : "\n");
+    for(i=0 ; i<LANG_ARR_SIZE; i++)
+        if(*glob->la[i]) fprintf(fp, "%s%d%s\t%s%s", html_flag ? "<H2>" : "", i, html_flag ? "</H2>" : "", glob->la[i], html_flag ? "<br>" : "\n");
+}
+/* end of function: langoutput */
+
+PUBLIC void get_lang(argc, argv, lang)
+int argc;
+char **argv;
+char *lang;
+{
+    int    i;
+
+    for(i=1;i<argc;i++)
+        if (strstr(argv[i] , "-L")){
+            strcpy(lang, argv[i]+2);
+        }
+    if(!*lang){
+        usage(argv[0]);
+        exit(0);
+    }
+}
+/* end of function: get_lang */
+
+PRIVATE int header(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->header, glob, 0));
+}
+/* end of function: header */
+
+PRIVATE int footer(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->footer, glob, 0));
+}
+/* end of function: footer */
+
+PRIVATE int allow_msg(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    return(get_str_param(inLine, &glob->allow_msg, glob, 0));
+}
+/* end of function: allow_msg */
+
+PRIVATE int ip_refuse(inLine, disp, glob, level)
+FILELINE *inLine;
+PARSE_ENTRY *disp;
+GLOB_STRUCT *glob;
+int level;
+{
+    char dat_file[BUFSIZ];
+    char rereadcycle[BUFSIZ];
+
+    if (sscanf(inLine->value, "%*s%s%s", dat_file, rereadcycle) < 1)
+        fprintf(stderr, "\nWarning: Error in init-file %s, line %d:\n%s\n",
+                glob->acfilename, inLine->count, inLine->value);
+
+    glob->ip_refuse  = (IP_REFUSE *) ch_calloc(1, sizeof(IP_REFUSE));
+    glob->ip_refuse->dat_file = strdup( dat_file );
+    glob->ip_refuse->rereadcycle = atoi(rereadcycle);
+
+    return (OK);
+}  /*  ip_refuse  */
+
+PUBLIC void file_test(filename, etcdir)
+char **filename;
+char *etcdir;
+{
+    FILE *fp;
+    char newfname[BUFSIZ];
+
+    if(*filename){
+        if(!(fp = fopen(*filename, "r"))) {
+            sprintf(newfname, "%s%s", etcdir, *filename);
+            if(!(fp = fopen(newfname, "r"))) {
+                sprintf(newfname, "%s.%s", newfname, globP->lang);
+                fp = fopen(newfname, "r");
+            }
+        }
+        if(fp) {
+            free(*filename);
+            *filename = strdup(newfname);
+            fclose(fp);
+        } else {
+            fprintf(stderr, "\n\nCould not open file %s !\n\n",
+                            *filename);
+        }
+    }
+}
+/* end of function: file_test */
+
+PRIVATE void f_test(glob)
+GLOB_STRUCT *glob;
+{
+    pSEARCH_ONLY_LINE so_ptr;
+
+    file_test(&glob->helpfile, glob->etcdir);
+    file_test(&glob->filterfile, glob->etcdir);
+    file_test(&glob->friendlyfile, glob->etcdir);
+    file_test(&glob->header, glob->etcdir);
+    file_test(&glob->footer, glob->etcdir);
+    file_test(&glob->allow_msg, glob->etcdir);
+    if(glob->basedn) {
+        file_test(&glob->basedn->head, glob->etcdir);
+        file_test(&glob->basedn->foot, glob->etcdir);
+    }
+    for(so_ptr = glob->search_only; so_ptr; so_ptr = so_ptr->next) {
+        file_test(&so_ptr->head, glob->etcdir);
+        file_test(&so_ptr->foot, glob->etcdir);
+    }
+}
+/* end of function: f_test */
+
+
diff --git a/contrib/tweb/init.h b/contrib/tweb/init.h
new file mode 100644 (file)
index 0000000..8de4f42
--- /dev/null
@@ -0,0 +1,289 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* init.h.....                                                              *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            July 21 1995                 Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 14 1999                ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: init.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _INIT_
+#define _INIT_
+
+#include <getopt.h>
+#include "strng_exp.h"
+#include "init_exp.h"
+#include "charray_exp.h"
+#include "ch_malloc_exp.h"
+#include "support_exp.h"
+
+#ifdef TUE_TEL
+#  include "tueTel_exp.h"
+#endif
+
+#ifdef AMBIXGW
+#  include "ambix_exp.h"
+#endif
+
+
+/* Usage-Text */
+#define USAGE "\nUSAGE: %s -Lx[yz..] [-p webport] [-x ldaphost]\
+         \n\t\t[-P ldapport] [-b basedn] [-f filterfile] [-l logger] [-d]\n\
+    \n\
+    A short description of TWEB WWW2X.500-Gateway: \n\n\
+    (does not compensate reading the README files\n\
+    and the correct configuration)\n\
+    \n\
+    Options:\n\n\
+    -L:\ttells TWEB the numbers of the languages that have to be started,\n\
+    \twherewith are also created the language-buttons\n\
+    \tExample: tweb -L01 starts TWEB in german und english\n\
+    -p:\tnames the port on which the gateway is to be reached\n\
+    -x:\tnames the LDAP-Hosts\n\
+    -P:\tnames the port of the LDAP-Server\n\
+    -b:\tnames the DN where the gateway shall start by default\n\
+    -f:\tnames the ldapfilter-file\n\
+    -l:\tswitches on logging for example LOCAL3\n\
+    -d:\tswitches on debugging (no sub-processes!)\n\
+    \n"
+
+
+/* Funktions in the init-module */
+PRIVATE int webdn();
+PRIVATE int webpw();
+PRIVATE int webdn2();
+PRIVATE int webpw2();
+PRIVATE int webport();
+PRIVATE int timeout();
+PRIVATE int ldapd();
+PRIVATE int ldapportf();
+PRIVATE int hostname();
+PRIVATE int header();
+PRIVATE int footer();
+PRIVATE int index_url();
+PRIVATE int allow_msg();
+PRIVATE int helpfilef();
+PRIVATE int filterfilef();
+PRIVATE int etcdir();
+PRIVATE int friendlyfilef();
+PRIVATE int grant();
+PRIVATE int refuse();
+PRIVATE int allow_string();
+PRIVATE int allow_proxy();
+PRIVATE int subtree_search();
+PRIVATE int deny_string();
+PRIVATE int show_defoc();
+PRIVATE int display();
+PRIVATE int basednf();
+PRIVATE int search_only();
+PRIVATE int gw_switch();
+PRIVATE int modify();
+PRIVATE int ind_attrs();
+PRIVATE int ind_attribute();
+PRIVATE int maxcount();
+PRIVATE int cache_expire();
+PRIVATE int max_person();
+PRIVATE int caching_terms();
+PRIVATE int comrefuse();
+PRIVATE int language();
+PRIVATE void f_test();
+PRIVATE void main_loop();
+PRIVATE int strip_pin();
+PRIVATE int prefer_ref_uris();
+PRIVATE int pull_down_menus();
+PRIVATE int no_proxy();
+PRIVATE int disp_sea_rdn();
+PRIVATE int strict_basedn();
+PRIVATE int dynamic_gw();
+PRIVATE int legal();
+PRIVATE int no_show_rdn();
+PRIVATE int no_modify();
+PRIVATE int sort();
+PRIVATE int firstPage();
+PRIVATE int secondPage();
+PRIVATE int modattr();
+PRIVATE void usage();
+PRIVATE int parse();
+PRIVATE int parse2();
+PRIVATE int table_disp();
+PRIVATE int form_button();
+PRIVATE int ip_refuse();
+
+
+/* Sub-tables to analyse the DISPLAY-Keys */
+static PARSE_ENTRY first_table[] = {
+    {"SECOND-PAGE",        secondPage,        NULL},
+    { NULL, NULL, NULL }
+};
+
+static PARSE_ENTRY display_table[] = {
+    {"FIRST-PAGE",         firstPage,        first_table},
+    { NULL, NULL, NULL }
+};
+
+
+/* Sub-tables to analyse the MODIFY-Keys */
+static PARSE_ENTRY modify_table[] = {
+    {"MODATTR",            modattr,          NULL},
+    { NULL, NULL, NULL }
+};
+
+/* Sub-tables to analyse the IND_ATTRS-Keys */
+static PARSE_ENTRY ind_attrs_table[] = {
+    {"IND_ATTRS",            ind_attribute,          NULL},
+    { NULL, NULL, NULL }
+};
+
+
+/* The main-table for key-word-parsing */
+static PARSE_ENTRY parse_table[] = {
+    {"WEBDN",              webdn,            NULL},
+    {"WEBPW",              webpw,            NULL},
+    {"WEBDN2",             webdn2,           NULL},
+    {"WEBPW2",             webpw2,           NULL},
+    {"WEBPORT",            webport,          NULL},
+    {"TIMEOUT",            timeout,          NULL},
+    {"TWEBHOST",           hostname,         NULL},
+    {"LDAPD",              ldapd,            NULL},
+    {"LDAPPORT",           ldapportf,        NULL},
+    {"HEADER",             header,           NULL},
+    {"FOOTER",             footer,           NULL},
+    {"INDEX-URL",          index_url,        NULL},
+    {"ALLOW-MSG",          allow_msg,        NULL},
+    {"HELPFILE",           helpfilef,        NULL},
+    {"FILTERFILE",         filterfilef,      NULL},
+    {"ETCDIR",             etcdir,           NULL},
+    {"FRIENDLYFILE",       friendlyfilef,    NULL},
+    {"GRANT",              grant,            NULL},
+    {"REFUSE",             refuse,           NULL},
+    {"ALLOW-STRING",       allow_string,     NULL},
+    {"ALLOW-PROXY",        allow_proxy,      NULL},
+    {"SUBTREE-SEARCH",     subtree_search,   NULL},
+    {"DENY-STRING",        deny_string,      NULL},
+    {"SHOW-DEFAULT-OC",    show_defoc,       NULL},
+    {"DISPLAY-OBJECT" ,    display,          display_table},
+    {"BASEDN",             basednf,          NULL},
+    {"SEARCH-ONLY",        search_only,      NULL},
+    {"GW-SWITCH",          gw_switch,        NULL},
+    {"MODIFY",             modify,           modify_table},
+    {"INDIRECT-ATTRS",     ind_attrs,        ind_attrs_table},
+    {"MAXCOUNT",           maxcount,         NULL},
+    {"CACHE-EXPIRE-DEFAULT", cache_expire,   NULL},
+    {"MAX-PERSON",         max_person,       NULL},
+    {"CACHING-TERMS",      caching_terms,    NULL},
+    {"COMREFUSE",          comrefuse,        NULL},
+    {"LANGUAGE",           language,         NULL},
+    {"STRIP-PIN",          strip_pin,        NULL},
+    {"PREFER-REF-URIS",    prefer_ref_uris,  NULL},
+    {"PULL-DOWN-MENUS",    pull_down_menus,  NULL},
+    {"NO-PROXY",           no_proxy,         NULL},
+    {"DISP-SEA-RDN",       disp_sea_rdn,     NULL},
+    {"STRICT-BASEDN",      strict_basedn,    NULL},
+    {"DYNAMIC-GW",         dynamic_gw,       NULL},
+    {"LEGAL",              legal,            NULL},
+    {"NO-SHOW-RDN",        no_show_rdn,      NULL},
+    {"NO-MODIFY",          no_modify,        NULL},
+    {"SORT",               sort,             NULL},
+    {"TABLES",             table_disp,       NULL},
+    {"FORM-BUTTON",        form_button,      NULL},
+
+#ifdef AMBIXGW
+    {"SELBSTEINTRAG",      selbsteintrag,    NULL},
+#endif
+
+#ifdef TUE_TEL
+    {"DIT-CONFIG",         dit_config,       NULL},
+    {"PHONEWORLD",         phoneworld,       NULL},
+    {"TON-URLS",           ton_urls,         NULL},
+#endif
+    {"IP-REFUSE",          ip_refuse,        NULL},
+
+    { NULL, NULL, NULL }
+};
+
+
+/* tables to compute DISPLAY-types to integer */
+STRDISP  disp_types[] = {
+
+    { "DEFAULT",         3, 0 },
+    { "MAILTO",          4, 6 },
+    { "MULTILINE",       5, 1 },
+    { "JPEG",            4, 9 },
+    { "JPEG2GIF",        8, 10 },
+    { "BMP",             3, 8 },
+    { "HREF",            4, 2 },
+    { "URL",             3, 5 },
+    { "FINGER",          6, 3 },
+    { "DATE",            4, 4 },
+    { "MOVETO",          4, 7 },
+    { "BOOLEAN",         9, 11 },
+    { "URI",             3, 12 },
+    { "PGPKEY",          6, 13 },
+    { "INDEXURL",        8, 14 },
+    { "DYNAMICDN",       9, 15 },
+    { "REFERRAL",        8, 20 },
+    { "PRE",             3, 21 },
+    { "HEADER",          6, 22 },
+
+#ifdef TUE_TEL
+    { "PHONREFSHORT",   12, 16 },
+    { "PHONREFLONG",    11, 17 },
+    { "TFUNCPERS",       9, 18 },
+    { "FAXTABLE",        8, 19 },
+#endif
+
+    { NULL, 0, 0 }
+
+};
+
+/* tables to compute syslog-options to integer */
+static STRDISP  syslog_types[] = {
+
+    { "LOCAL0",         6, LOG_LOCAL0 },
+    { "LOCAL1",         6, LOG_LOCAL1 },
+    { "LOCAL2",         6, LOG_LOCAL2 },
+    { "LOCAL3",         6, LOG_LOCAL3 },
+    { "LOCAL4",         6, LOG_LOCAL4 },
+    { "LOCAL5",         6, LOG_LOCAL5 },
+    { "LOCAL6",         6, LOG_LOCAL6 },
+    { "LOCAL7",         6, LOG_LOCAL7 },
+    { NULL, 0, 0 }
+
+};
+
+
+/* Defaults */
+#define  DEFAULT_TIMEOUT   120
+#define  DEFAULT_MAXCOUNT  200
+#define  MAX_EXPIRE        604800
+
+
+/*  Variable for the Anti-Hack-Code */
+extern COMREFUSE  *comRefuseP;
+
+struct timeval timestore[5];    /* Time assigned to events:
+                                    0 -> after accept, 1-> after dns,
+                                    2 -> after check4access,
+                                    3 -> before list_output/print_attr */
+
+int items_displayed = 0;         /* number of items showed on
+                                    do_menu/do_search*/
+
+#endif /* _INIT_ */
+
diff --git a/contrib/tweb/init_exp.h b/contrib/tweb/init_exp.h
new file mode 100644 (file)
index 0000000..5ef68fa
--- /dev/null
@@ -0,0 +1,382 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* init_exp.h.                                                              *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            July 21 1995                 Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 11 1999                ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+/*
+ * $Id: init_exp.h,v 1.6 1999/09/10 15:01:17 zrnsk01 Exp $
+ *
+ */
+
+
+#ifndef _INIT_EXP_
+#define _INIT_EXP_
+
+#ifdef TUE_TEL
+#  include  "tueTel_exp.h"
+#endif
+
+#include "regular_exp.h"
+
+PUBLIC int  get_str_param(/* FILELINE *inLine, char **str,
+                             GLOB_STRUCT *glob, int lower */);
+
+PUBLIC void getopts ();
+PUBLIC void check ();
+PUBLIC void init();
+PUBLIC void output();
+PUBLIC void langinit();
+PUBLIC void langoutput();
+PUBLIC void get_lang();
+PUBLIC void file_test();
+PUBLIC int  do_readf();
+PUBLIC void get_index_url_rules();
+PUBLIC void re_read_index_url_rules();
+
+extern  STRDISP  disp_types[];
+
+
+/* A pointer to an integer-function */
+typedef int (*IFP)();
+
+
+/* One line in the config-file, with line-counter */
+typedef struct _fileline {
+    char value[BUFSIZ];
+    int count;
+} FILELINE;
+
+
+/* Table-structure to parse the key-words in the config- und rc-files */
+typedef struct _parse_keys {
+    char *keyWord;
+    IFP   keyFunc;
+    struct _parse_keys *subTable;
+} PARSE_ENTRY;
+
+
+/* Maximum number of sub-lists in order to display result-lists */
+#define MAX_OCS 128
+
+/* List of attributes which will be displayed (on 1./2. page) */
+typedef struct _display_line {
+    char *attribute;              /* the X.500-Attribute */
+    char *label;                  /* the Label of the Web-Page */
+    char *type;                   /* the Format-Type as String (C-Option) */
+    int ty;                       /* the Format-Type as Int (print-Funkt.) */
+    struct _display_line *next;   /* the next Attribute */
+} DISPLAY_LINE, *pDISPLAY_LINE;
+
+
+/* List of Object-Classes which shall be displayed */
+typedef struct _display {
+    char *ocs;                    /* the X.500-Object-Class(es) */
+    DISPLAY_LINE *first_page;     /* Attribute on the first page */
+    DISPLAY_LINE *second_page;    /* Attribute on the second page */
+    struct _display *next;        /* the next Objekt-Class(es) */
+} DISPLAY, *pDISPLAY;
+
+
+/* List of attributes which may be modified */
+typedef struct _modify_line {
+    char *attribute;              /* the X.500-attribute */
+    char *label;                  /* the Label in the modification-formulare */
+    int   count;                  /* the maximmum number of attribute-values */
+    struct _modify_line *next;    /* the next attribute */
+} MODIFY_LINE, *pMODIFY_LINE;
+
+/* List of Object-Class(es) which may be modified */
+typedef struct _modify {
+    char *ocs;                    /* the X.500-Object-Class(es) */
+    MODIFY_LINE *modattr;         /* the modifyable attributes */
+    struct _modify *next;         /* the next Object-Class(es) */
+} MODIF, *pMODIF;
+
+/*attributes which are read from another entry */
+typedef struct _ind_attr_arr {
+    char *key;                    /* pers for person etc. */
+    int replace;                  /* 2 -> function, 1 -> replace, 0 -> append */
+    char *attr;                   /* functionname / referenced attribute */
+    char *host;                   /* on which host to look */
+    int port;                     /* on which port to look */
+    char *base;                   /* where to look for ref-entry */
+    LDAPMessage **e;              /* Pointer to the result */
+    LDAP *ld;                     /* Pointer to the matching LDAP-Struct */
+} IND_ATTR_ARR;
+
+typedef struct _ind_attrs {
+    char *ref_attr;               /* name of the reference-attribute */
+    IND_ATTR_ARR *valid_nodes;    /* valid nodes array (only in 1st element) */
+    IND_ATTR_ARR *ia_arr;         /* supported keys, attrs and bases */
+    struct _ind_attrs *next;      /* the next ind_attr */
+} IND_ATTRS, *pIND_ATTRS;
+
+
+/* Support-structure to sort the result-lists */
+typedef struct _dncompare {
+    char *string;                 /* Sort-String */
+    char *href;                   /* Hyper-Link for the sorted entry */
+    char *raw;                    /* Raw data:                                                                         -> <name>[<attr>=<value>&..%..$.. */
+} DNLIST, *pDNLIST;
+
+
+/* Structure to sort the result-lists object-class/attribute-related */
+typedef struct _sort_line {
+    char *object_class;           /* Object-class by which is sorted */
+    char *label;                  /* Label to display sub-lists */
+    int   priority;               /* Sequence for list-output */
+    char *display_class;          /* dedicated display-class */
+    DISPLAY *display_class_ptr;   /* Pointer therefor */
+    char *sort_attr;              /* Attribut by which sorting is done */
+    pDNLIST *dnList;              /* Entries in the sub-list */
+    int  dnLast;                  /* Amount of entries in the sub-list */
+    int restricted;               /* 1 -> sub-list was restricted : 0 -> not*/
+    struct _sort_line *next;      /* the next Object-Class */
+} SORT_LINE, *pSORT_LINE;
+
+/* Structure to handle caching */
+
+typedef struct _caching_terms_line {
+    int time;                     /* time to cache */
+    char *access_type;            /* type of access */
+    int rdn_oc;                   /* 1 -> rdn, 0 -> oc -lookup */
+    char *pattern;                /* mach-pattern: oc/rdn */
+    struct _caching_terms_line *next; /* the next line */
+} CACHING_TERMS_LINE, *pCACHING_TERMS_LINE;
+
+
+/* DN of the TWEB-Homepage, including header and footer thereof */
+typedef struct _basedn_line {
+    char *dn;
+    char **dnarray;
+    char *head;
+    char *foot;
+} BASEDN_LINE;
+
+/* List of rules for table-button and table display */
+typedef struct _table_display {
+    int allow;            /* 1 -> tables only if allowed, 0 -> in any case */
+    char *select_oc;      /* table-button only if
+                             objectclass contains select_oc */
+    char *button_label;   /* label for table-request-button */
+    char *dn_extension;   /* extension behind button Xdn?MENU */
+    struct _table_display *next;
+} TABLE_DISPLAY, *pTABLE_DISPLAY;
+
+/* List of organisational units where only searching is permitted,
+   including header and footer thereof */
+typedef struct _search_only_line {
+    char *dn;
+    char *head;
+    char *foot;
+    struct _search_only_line *next;
+} SEARCH_ONLY_LINE, *pSEARCH_ONLY_LINE;
+
+/* Anti-Hack Structure */
+typedef struct _comrefuse {
+    int      tmin;
+    int      tdiff;
+    int      maxAccept;
+    int      suspendCycle;
+    time_t   statCycle;
+    char    *statFile;
+} COMREFUSE;
+    
+
+/* static list of Gateway-Switches */
+typedef struct _gw_switch_line {
+    char *dn;                     /* the DN of the organization(al unit) */
+    char *url;                    /* the URL of the gateway to be called */
+    struct _gw_switch_line *next; /* the next Gateway-Switch */
+} GW_SWITCH_LINE, *pGW_SWITCH_LINE;
+
+/* the head of the Gateway-Switch-list */
+typedef struct _gw_switch {
+    int dynamic;                  /* is dynamic switching allowed */
+    char *lagws;                  /* language dependant recognition of
+                                     GW-Switch-entries in X.500
+                                     (language independant recognition is
+                                      implemented by macro) */
+    GW_SWITCH_LINE *list;         /* the static list of switches */
+} GW_SWITCH, *pGW_SWITCH;
+
+/* static list of already available ldap-connections */
+typedef struct _ld_list {
+    LDAP *ld;                     /* pointer to the ldap-structure */
+    char *host;                   /* The corresponding host */
+    int port;                     /* The corresponding port */
+    struct _ld_list *next;        /* the next */
+} LD_LIST, *pLD_LIST;
+
+typedef struct _index_url_rule {
+    char *rule;                   /* Atribute providing data */
+    char *dit_dn;               /* DN supporting config */
+} INDEX_URL_RULE;
+
+typedef struct _index_url {
+    char *dat_file;             /* File providing data */
+#define INDEX_RULE_SIZE     20
+    INDEX_URL_RULE rarr[INDEX_RULE_SIZE];  /* array with rules */
+    int rereadcycle;            /* frequency to reread */
+} INDEX_URL;
+
+/* Structure to hold config of buttons leading to form-scripts */
+typedef struct _form_button {
+    int   read_menu;              /* 1-> button in do_read; 0-> in do_menu */
+    char *object_class;           /* display the button on presence of this
+                                     object-class*/
+    char *method;                 /* cgi method: GET ..  */
+    char *script_url;             /* URL of CGI-Script */
+    char *text;                   /* text in front of button */
+    char *dn_name;                /* name of dn in hidden form  */
+    char *form_name;              /* name of form (submit-button) */
+    char *button_label;           /* label of submit-button  */
+    struct _form_button *next;    /* the next FORM_BUTTON definition */
+} FORM_BUTTON, *pFORM_BUTTON;
+
+typedef struct _ip_refuse {
+    char *dat_file;             /* File providing data */
+    char *refu_str;             /* String of refused clients */
+#define REFU_BUFSIZ     256
+#define REFU_STRDELIM   "&"
+
+    int rereadcycle;            /* frequency to reread */
+} IP_REFUSE;
+
+/* the central structure of TWEB with the configuration of the gateway */
+typedef struct _glob_struct {
+    char *webdn;                 /* GW-DN in case of authorisded access */
+    char *webpw;                 /* GW-PW in case of authorisded access */
+    char *webdn2;                /* GW-DN in case of non-authorisded access */
+    char *webpw2;                /* GW-PW in case of non-authorisded access */
+    int  webport;                /* the Port the GW is listening on */
+    int  timeout;                /* how long does the gateway wait for the DSA*/
+    time_t stat_slice;           /* Time for the anti-Hack + Statistic */
+    char *ldapd;                 /* the computer LDAPD is running on */
+    int  ldapport;               /* the Port thereof */
+    char *grant;                 /* ':'-separated list of domains with access */
+    char *refuse;                /* ':'-separated list of domains
+                                    without access */
+    char *allow_string;          /* ':'-separated list of domains
+                                    supported with authorised access */
+    char *deny_string;           /* ':'-separated list of domains
+                                    supported with restricted access */
+    regexp *comp_grant;          /* compiled regular expressions for GRANT */
+    regexp *comp_refuse;          /* compiled regular expressions for REFUSE */
+    regexp *comp_allow;          /* compiled regular expressions for ALLOW_ST */
+    regexp *comp_deny;           /* compiled regular expressions for DENY_ST. */
+    char **allow_proxy;          /* ':'-separated list of proxy-servers
+                                    supported with authorised access */
+    char **subtree_search;       /* ':'-separated list of objectclasses
+                                     where to make subtree_search instead of
+                                     single_level_search */
+    DISPLAY *display;            /* presentation of Objects */
+       DISPLAY *default_display_type; /* pointer to the default display descript */
+    BASEDN_LINE *basedn;         /* the entry-page of TWEB */
+    SEARCH_ONLY_LINE *search_only; /* where only searching is supported */
+    GW_SWITCH *gw_switch;        /* the Gateway-Switching */
+    MODIF *modify;               /* what may be modified within TWEB */
+    IND_ATTRS *ind_attrs;        /*attributes which are read from 
+                                   another entry */
+    int cache_expire;            /* caching-time for proxies in seconds */
+    CACHING_TERMS_LINE *caching_terms; /* cache-control-rules */
+    int maxcount;                /* maximum amount of result-lists */
+    int max_person;              /* maximum amount of persons displayed */
+    COMREFUSE *comrefuse;        /* Anti-Hack Structure */
+    TABLE_DISPLAY *tables;       /* listings also as tables by button-request */
+    INDEX_URL *index_url;        /* how to display search-results of index
+                                    -> display-type INDEX-URL */
+    FORM_BUTTON *form_button;    /* display buttons leading to forms */
+    char *tables_marker;         /* flag for menu with tables += their config */
+    char **language;             /* the language links on a html-page */
+    char lang[2];                /* the number of the "own" language */
+    char *olang;                 /* the other languages */
+    char *no_show_rdn;           /* String with "unvisible" DN parts */
+    char *no_modify;             /* Objectclasses without MODIFY-button */
+    SORT_LINE *sort;             /* how shall the results be sorted */
+    SORT_LINE *sorty[MAX_OCS];   /* Array with the sorted lists */
+    char **sort_attribs;         /* Array with the sort-attributes */
+    char *myname;                /* the programname */
+    char *argv0;                 /* ARGV[0] */
+    char *hostname;              /* the name of the computer TWEB 
+                                    is running on*/
+    int virtualport;             /* port if defined is set in every link
+                                    instead of webport (may always
+                                    lead requests over www4ward) */
+    char *header;                /* the header for the standardpage */
+    char *footer;                /* the footer for the standardpage */
+    char *allow_msg;             /* file containing allow-message */
+    char *helpfile;              /* the helpfile */
+    char *filterfile;            /* the filterfile for LDAP-search */
+    char *etcdir;                /* the directory containing the supportfiles */
+    char *friendlyfile;          /* the file for "more friendly" DNs */
+    char *acfilename;            /* the name of the actual config-file */
+    time_t nowtime;              /* actual time in tics */
+    time_t expiretime;           /* time for cache to expire in tics */
+    char *nowtimestr;            /* actual timestring in GMT */
+    char *strip_pin;             /* truncation of PINs at named sort_ocs */
+    char *expiretimestr;         /* timestring for cache to expire in GMT */
+    char *server_connection_msg; /* TCP Connection-message */
+    char *user_agent_msg;        /* User-Agent message */
+    char *menu_filter;           /* menu_filter */
+#define LANG_ARR_SIZE 110
+    char la[LANG_ARR_SIZE][BUFSIZ];  /* language-specific text-fragments */
+    LD_LIST *ld_list;            /* List of open LDAP-Connections */
+    char **raw_attrs;            /* Attributes to be shown with raw_access */
+       size_t  svc_cnt;             /* A counter for the number of requests */
+
+#ifdef TUE_TEL
+    DIT_CONFIG *dit_config;      /* container for relations between DNs and
+                                    responsible host:port */
+    TON_URLS *ton_urls;          /* TONs in addition to DNs */
+    char *phoneworld;            /* visibility of phonebook */
+#endif
+    IP_REFUSE *ip_refuse;        /* refuse certain hosts by ip-addr */
+
+#ifdef AMBIXGW
+    char *selbsteintrag[10];     /* some strings for AMBIX-selfentry */
+#endif
+
+    unsigned show_defoc     : 1, /* respect unknown OCs while sorting */
+             strict         : 1, /* restriction of person-lists also in the
+                                    authorised case */
+             restricted     : 1, /* hard restriction of the extent of the list*/
+             persRestricted : 1, /* restriction of person-lists (legal) */
+             prefer_ref_uris : 1, /* take over labeledURIS from 
+                                    referenced objects */
+             is_proxy       : 1, /* did the request come from a proxy-server */
+             pull_down_menus : 1, /* move upwards with pull-down-menus */
+             no_proxy       : 1, /* no local proxy-servers */
+             strict_basedn  : 1, /* no access outside BASEDN */
+             no_browse      : 1, /* no person-lists while browsing */
+             noauth         : 1, /* dynamic flag for question of authorisation*/
+             caching        : 1, /* shall be cached by proxy-server */
+             legal          : 1, /* display privacy-text */
+             legal_top      : 1, /* display privacy-text on top */
+             unknown_host   : 1, /* connection from unknown */
+             allowed        : 1; /* access allowed for decide_access */
+    unsigned raw_data       : 1, /* provide raw-data instead of html */
+             ldap_referral_mode : 1, /* TWEB displayes foreign ldap-url */
+             disp_sea_rdn   : 1; /* display only rdns as search-result */
+} GLOB_STRUCT, *pGLOB_STRUCT;
+
+
+/* the function the gateway is initialized with */
+void init();
+
+#endif /* _INIT_EXP_ */
+
diff --git a/contrib/tweb/queries.c b/contrib/tweb/queries.c
new file mode 100644 (file)
index 0000000..1e0ebb4
--- /dev/null
@@ -0,0 +1,735 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 
+*                                                                          *
+* queries.c..                                                              *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - Server-Functions                 *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 11 1999                ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: queries.c,v 1.6 1999/09/10 15:01:18 zrnsk01 Exp $
+ *
+ */
+
+#include "queries.h"
+
+
+PUBLIC void do_queries( s, glob , ip_addr, ip_port, hp)
+int            s;
+GLOB_STRUCT   *glob;
+char          *ip_addr;
+unsigned int   ip_port;
+struct hostent *hp;
+{
+    char        buf[100*BUFSIZ], *query, *tail;
+    int        len;
+    FILE        *fp;
+    int        rc, tblsize;
+    struct timeval    timeout;
+    fd_set        readfds;
+    LDAP        *ld;
+    char tstring[100];
+
+    /* get time for performance log */
+    gettimeofday(&timestore[2], NULL);
+
+    /*  open output-port to waiting client */
+    if ( (fp = fdopen( s, "a+")) == NULL ) {
+        perror( "fdopen" );
+        exit_tweb( 1 );
+    }
+
+    tblsize = getdtablesize();
+    timeout.tv_sec = glob->timeout;
+    timeout.tv_usec = 0;
+    FD_ZERO( &readfds );
+    FD_SET( fileno( fp ), &readfds );
+
+    time(&glob->nowtime);
+    time(&glob->expiretime);
+    if(glob->cache_expire) {
+        glob->expiretime += glob->cache_expire;
+        glob->caching =TRUE;
+    }
+    free(glob->nowtimestr);
+    free(glob->expiretimestr);
+
+    strftime(tstring, 99, GMT_FORMAT, gmtime(&glob->nowtime));
+    glob->nowtimestr = strdup(tstring);
+    strftime(tstring, 99, GMT_FORMAT2, gmtime(&glob->expiretime));
+    glob->expiretimestr = strdup(tstring);
+
+    /*  get client-query out from the system */
+    if((rc=select(tblsize,(fd_set *)&readfds,NULL,NULL,&timeout))<=0)
+        exit_tweb( 1 );
+
+    if ( fgets( buf, sizeof(buf), fp ) == NULL )
+        exit_tweb( 1 );
+
+    /* Analyse Web-Client-Type / proxy + log-message */
+    checkwwwclient(fp, ip_addr, ip_port, hp, glob);
+
+    len = strlen( buf );
+    if ( debug ) {
+        fprintf( stderr, "got %d bytes\n", len );
+        lber_bprint( buf, len );
+    }
+
+    /* strip of white spaces */
+    query = trim (buf, WSPACE);
+
+    rewind (fp);
+
+
+    /*  strip "HTTP" from the end of the request */
+    if ((tail = strstr(query, " HTTP")) != NULL || 
+            (tail = strstr(query, " http")) != NULL) {
+        http = 1;
+        *tail = '\0';
+    }
+
+    /*  recognize GET/HEAD */
+    if (!strncasecmp (query, "get", 3)) {
+
+        request = GET;
+        query += 3;
+
+    } else if (!strncasecmp (query, "head", 4)) {
+
+        request = HEAD;
+        query += 4;
+
+    } else {
+
+        /*  Error because of neither GET- nor HEAD-request */
+        do_error(fp, -2, NOT_IMPLEMENTED, glob);
+        /* fprintf(fp, "HTTP/1.0 501 %s<br>", glob->la[5]); */
+        rewind(fp);
+        exit_tweb( 1 );
+    }
+
+        /* strip off leading white space and '/' */
+    while ( isspace( *query ) || *query == '/') {
+        ++query;
+    }
+
+
+    /*  Now the real request is to be analized and served */
+
+    /* refuse robots if according robots.txt file exists */
+
+    if (!strcasecmp(query, "robots.txt")){
+        if (http == 1) PRINT_PLAIN_HEADER;
+        disp_file(glob, ROBOTS_TXT_FILE, fp);
+        exit_tweb(0);
+    }
+
+#ifdef TUE_TEL
+    if( glob->ton_urls && *query == cTON) {
+        if(!glob->ton_urls->admin)
+            glob->allowed = 0;
+        if(glob->ton_urls->pass_oc) {
+            glob->max_person = 10000;
+            glob->no_browse = FALSE;
+        }
+    }
+#endif
+
+    decide_access(glob);
+
+    /* get time for performance log */
+    gettimeofday(&timestore[3], NULL);
+
+    /* perform handling of pulldown/form retcodes
+                          -> gwswitch-redirect || pass */
+    if(*query == cPULLDOWN) {
+        if(strstr(query, "http")) {
+            /* redirection */
+            query += 4;
+            hex_decode(query);
+            PRINT_REDIRECT_HEADER;
+            PRINT_HTML_FOOTER;
+            exit_tweb(0);
+        } else {
+            /* pass */
+            query += 7;
+            hex_decode(query);
+        }
+    }
+
+    /* perform handling of buttons/form retcodes
+                          -> gwswitch-redirect || pass */
+    if(*query == cBUTTON) {
+        char *strptr;
+
+        query += 2;
+        strptr = strrchr( query, '=' );
+        *strptr = '\0';
+
+        if(strstr(query, "http")) {
+            /* redirection */
+            hex_decode(query);
+            PRINT_REDIRECT_HEADER;
+            PRINT_HTML_FOOTER;
+            exit_tweb(0);
+        } else {
+            /* pass */
+            hex_decode(query);
+        }
+    }
+
+
+    /*  1. requests that may be served without DSA */
+    switch (*query) {
+
+
+        /*  display Help-File */
+        case cHELP:
+            if (dosyslog)
+                syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
+                                  cHELP, ip_addr, ip_port, glob->svc_cnt);
+            if (http == 1) PRINT_HTML_HEADER;
+            fprintf(fp, "<HTML><HEAD>");
+            disp_file(glob, glob->helpfile, fp);
+            PRINT_HTML_FOOTER;
+            rewind(fp);
+            exit_tweb( 0 );
+
+        /*  request error-explanation */
+        case cERROR:
+            if (dosyslog)
+                syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
+                                  cERROR, ip_addr, ip_port, glob->svc_cnt);
+/*            fprintf(fp, HTML_HEAD_TITLE, "Errors", glob->la[100]);
+*/
+            do_error( fp, 0 , 1, glob );
+            rewind(fp);
+            exit_tweb( 0 );
+
+        /*  RCC: remote configuration control */
+        case cCONFIG:
+            if (dosyslog)
+                syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
+                                  cCONFIG, ip_addr, ip_port, glob->svc_cnt);
+            if (http == 1) PRINT_HTML_HEADER;
+            fprintf(fp, HTML_HEAD_TITLE, "Configuration", glob->la[100]);
+            output(fp, glob, TRUE);
+            langoutput(fp, glob, TRUE);
+            PRINT_HTML_FOOTER;
+            rewind(fp);
+            exit_tweb(0);
+
+        /* query access-statistic */
+        case cSTATS:
+            if (dosyslog)
+                syslog (LOG_INFO, "working on query: %c (%s,%u) <%08d>",
+                                  cSTATS, ip_addr, ip_port, glob->svc_cnt);
+            if (http == 1) PRINT_HTML_HEADER;
+            fprintf(fp, HTML_HEAD_TITLE, "Statistics", glob->la[100]);
+            fprintf(fp,
+    "\n<strong>#############STATISTIC-DISPLAY#############</strong><br>\n" );
+            fprintf( fp, "\n%s\n\n<p>\n", version );
+            (void) put_hackStats (fp, 0);
+            PRINT_HTML_FOOTER;
+            rewind (fp);
+            exit_tweb (0);
+
+    /* NOT REACHED */
+    }
+
+    /* with ldap-referral use this host + port + use do_read */
+    /* query looks like this: Wldap://host:port/dn */
+    if ( *query == cREFERRAL ) {
+        char *host, *port, *dn = NULL;
+
+        glob->ldap_referral_mode = 1;
+        if ( ( host = strstr( query, "ldap://" ) ) ) {
+            host += 7;
+            if ( ( port = strchr( host, ':' ) ) ) {
+                *port++ = '\0';
+                 if ( ( dn = strchr( port, '/' ) ) ) {
+                     *dn = '\0';
+                     glob->ldapd = strdup ( host );
+                     glob->ldapport = atoi ( port );
+                     *dn = cREAD;
+                     query = dn;
+                 }
+            }
+        }
+        if ( !dn )
+            exit_tweb( 1 );
+    }
+
+    /*  from here on there is needed a connection to the DSA */
+    if ( (ld = ldap_open( glob->ldapd, glob->ldapport )) == NULL ) {
+        if ( debug ) perror( "ldap_open" );
+        do_error( fp, LDAP_SERVER_DOWN, SERVER_ERROR, glob);
+        rewind(fp);
+        exit_tweb( 1 );
+    }
+
+    if(glob->caching_terms)
+        trade_cache(fp, ld, query, glob);
+
+    /* performance of STRICT-BASEDN (blind out accesses != BASEDN) */
+
+    if(glob->strict_basedn)
+        strict_basednf(fp, ld, query, glob);
+
+
+    /*  2. queries with binding of the owner */
+    switch (*query) {
+
+        /*  request of the modification-formulare */
+        case cGETMOD:
+            /*  log the request without password */
+            hex_decode(query);
+            if (dosyslog) {
+                char qbuf[BUFSIZ], *qbufp;
+
+                strcpy(qbuf, query);
+                if( ( qbufp = strchr(qbuf, '?')) )
+                    *qbufp = '\0';
+                syslog (LOG_INFO, "working on query: %s (%s,%u) <%08d>",
+                                  qbuf, ip_addr, ip_port, glob->svc_cnt);
+            }
+            rewind(fp);
+
+            /*  follow aliases while searching */
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+            ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS );
+
+#  endif
+#else
+            ld->ld_deref = LDAP_DEREF_ALWAYS;
+#endif
+
+            if ( !searchaliases )
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+            ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_FINDING );
+
+#  endif
+#else
+                     ld->ld_deref = LDAP_DEREF_FINDING;
+#endif
+    
+            /*  send WWW-Formulare with contence of the desired entry
+                to the client */
+            do_form( ld, fp, ++query, glob);
+            ldap_unbind (ld);
+            close_ldap_connections(glob);
+            rewind(fp);
+            exit_tweb (0);
+
+        /*  return of the modification-formulare */
+        case cDOMOD:
+
+            /*  log the request in readable form without password if desired */
+            if (dosyslog) {
+
+                char qbuf[100*BUFSIZ], *qbufp;
+
+                strcpy(qbuf, query);
+                if( ( qbufp = strchr (qbuf, '?')) )
+                    *qbufp = '\0';
+                hex_decode(qbuf+1);
+                syslog (LOG_INFO, "working on query: %s (%s,%u) <%08d>",
+                                  qbuf, ip_addr, ip_port, glob->svc_cnt);
+
+            }
+
+            /*  perform modification with the original request */
+            do_modify( ld, fp, ++query, glob);
+            ldap_unbind (ld);
+            close_ldap_connections(glob);
+            rewind(fp);
+            exit_tweb (0);
+
+    /* NOT REACHED */
+    }
+
+
+    /*  perform all the other requests */
+
+    /*  log the request in readable form first */
+    hex_decode(query);
+    if (dosyslog)
+        syslog (LOG_INFO, "working on query: %s (%s,%u) <%08d>",
+               *query ? trimright(query, WSPACE) : "BASEDN", ip_addr, ip_port,
+                               glob->svc_cnt);
+
+    /*  accesses with resolvation of alias-entries */
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+    ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS );
+
+#  endif
+#else
+    ld->ld_deref = LDAP_DEREF_ALWAYS;
+#endif
+
+    if ( !searchaliases )
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+             ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_FINDING );
+
+#  endif
+#else
+             ld->ld_deref = LDAP_DEREF_FINDING;
+#endif
+    
+    /*  bind to DSA by order of the user as Web-DN
+        (if with DN1 or DN2 was decided at check4access) */
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+    /*  a dummy call as long as socket connections are not settled
+     *  with OpenLDAP
+     */
+    if ( dosyslog )
+           syslog( LOG_INFO, "do_queries(): calling ldap_simple_bind_s()...\n" );
+
+#  else
+
+    if ( dosyslog )
+           syslog( LOG_INFO, "do_queries(): calling ldap_simple_bind_s()...\n" );
+
+#  endif
+#endif
+
+    if ( (rc=ldap_simple_bind_s( ld, glob->webdn, glob->webpw ))
+                                                     != LDAP_SUCCESS ) {
+        if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
+        do_error( fp, rc, SERVER_ERROR, glob);
+        rewind(fp);
+        exit_tweb( 1 );
+    }
+
+    /*  3. requests to the GW by order of the user */
+    switch ( *query++ ) {
+
+        /*  read entry */
+        case cREAD:
+            do_read( ld, fp, query, 0, glob );
+            break;
+
+        /*  display second page */
+        case cREADALL:
+            do_read( ld, fp, query, 1, glob);
+            break;
+
+        /*  search entries */
+        case cSEARCH:
+            do_search( ld, fp, query, glob );
+            break;
+
+        /*  list entries (browsing) */
+        case cLIST:
+            do_menu( ld, fp, query, "", glob );
+            break;
+
+#ifdef TUE_TEL
+        /*  list entries (browsing TON instead of DN) */
+        case cTON:
+            if(glob->ton_urls)
+                do_ton( ld, fp, query, glob );
+            break;
+#endif
+
+        /*  request GIF-photo (Photo in X.500 as JPEG) */
+        case cGIF:
+            do_pict( ld, fp, query, 1, glob);
+            break;
+
+        /*  display JPEG-Photo */
+        case cJPEG:
+            do_pict( ld, fp, query, 2, glob);
+            break;
+
+        /*  display X.500-G3FAX-Photo */
+        case cG3FAX:
+            do_pict( ld, fp, query, 0, glob);
+            break;
+
+        /*  play Audio-attribute */
+        case cAUDIO:
+            do_audio( ld, fp, query, 0, glob);
+            break;
+
+        /*  eXtended query format */
+        case cEXTENDED:
+            do_xtend( ld, fp, query, 0, glob);
+            break;
+
+        /*  Default (empty query) is browsing of BASEDN */
+        default:
+            do_menu( ld, fp, glob->basedn->dn, "", glob );
+            break;
+    }
+
+    /*  Job done, terminate connection to the DSA and bye! */
+    ldap_unbind (ld);
+    close_ldap_connections(glob);
+    rewind(fp);
+    exit_tweb( 0 );
+    /* NOT REACHED */
+}
+/* end of function: do_queries */
+
+PUBLIC void timeoutf(sig)
+int sig;
+{
+    /* fprintf(stderr, "timeout!"); */
+    exit_tweb(0);
+}
+/* end of function: timeoutf */
+
+
+PRIVATE void strict_basednf(fp, ld, query, glob)
+FILE *fp;
+LDAP *ld;
+char *query;
+GLOB_STRUCT   *glob;
+{
+    char dnbuf[BUFSIZ], basednbuf[BUFSIZ], *strptr;
+    LDAPMessage *res, *e;
+    int rc, flag = 0, i, j;
+    struct timeval timeout;
+    char *url = NULL, **uri, *urlnola = NULL;
+    pGW_SWITCH_LINE gw_ptr;
+    char  *url_tmp;
+    char **dnarray, **bdnarray;
+
+#ifdef TUE_TEL
+    /* Patch for TONS */
+    if( glob->ton_urls && (*query == cTON))
+        return;
+#endif
+
+    /* Patch for FORMs/PULLDOWNs (cPULLDOWN) */
+    if( glob->pull_down_menus && (*query == cPULLDOWN))
+        return;
+
+    /* Patch for FORMs/BUTTONs (cBUTTONs) */
+    if( glob->pull_down_menus && (*query == cBUTTON))
+        return;
+
+    if(*query)
+        strcpy(dnbuf, query+1);
+    else
+        strcpy(dnbuf, "\0");
+    hex_decode(dnbuf);
+    strcpy(basednbuf, glob->basedn->dn);
+
+    if( ( strptr = strchr(dnbuf, '?')) )
+        *strptr = '\0';
+
+    if( *query && !dn_issuffix( dn_normalize(dnbuf), dn_normalize(basednbuf))) {
+
+        dnarray = dn2charray(dnbuf);
+        bdnarray = glob->basedn->dnarray;
+
+        strcpy(dnbuf, "\0");
+        if (glob->gw_switch) {
+            for(gw_ptr = glob->gw_switch->list;
+                              !flag && gw_ptr; gw_ptr = gw_ptr->next) {
+                if (!dn_cmp ("root", gw_ptr->dn)) {
+                    flag = 1;
+                    url = gw_ptr->url;
+                }
+            }
+        }
+        if(!flag) {
+            fprintf(stderr, "Fehler:strict_basedn w/o root-switch!!!!\n");
+            exit_tweb(0);
+        }
+
+        for(j=0; bdnarray[j] && dnarray[j]; j++) {
+            char *dnbufb;
+
+            flag = 0;
+
+            dnbufb = strdup(dnbuf);
+            sprintf(dnbuf, "%s%s%s", dnarray[j], *dnbuf ? "," : "" , dnbufb);
+
+            if ( glob->gw_switch && glob->gw_switch->dynamic) {
+
+                if ( (rc=ldap_simple_bind_s( ld, glob->webdn, glob->webpw ))
+                                                         != LDAP_SUCCESS ) {
+                    if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
+                    do_error( fp, rc, SERVER_ERROR, glob);
+                    rewind(fp);
+                    exit_tweb( 1 );
+                }
+
+                timeout.tv_sec = glob->timeout;
+                timeout.tv_usec = 0;
+
+                if ( (rc = ldap_search_st( ld, dnbuf, LDAP_SCOPE_BASE, "objectClass=*",
+                    NULL, 0, &timeout, &res )) != LDAP_SUCCESS ) {
+/*                    do_error(fp, rc, NOT_FOUND, glob);
+*/
+                    continue;
+                }
+
+
+                if ( (e = ldap_first_entry( ld, res )) == NULL ) {
+                    do_error(fp, -2, SERVER_ERROR, glob);
+                    return;
+                }
+
+
+                uri = ldap_get_values( ld, e, "labeledURI" );
+                for(i=0; uri && uri[i] && *uri[i]; i++) {
+                    char *sp;
+
+                    if( ( sp = strchr(uri[i], ' ')) ) {
+                        *sp++ = '\0';
+                        if(strstr(sp, glob->gw_switch->lagws)) {
+                            flag = 1;
+                            url = uri[i];
+                            break;
+                        } else if(strstr(sp, GWS))
+                            urlnola = uri[i];
+                    }
+                }
+            }
+            if(!flag && urlnola) {
+                url = urlnola;
+                flag = 1;
+            }
+            if (glob->gw_switch) {
+
+                for(gw_ptr = glob->gw_switch->list;
+                                  !flag && gw_ptr; gw_ptr = gw_ptr->next) {
+                    if (!dn_cmp (dnbuf, gw_ptr->dn)) {
+                        flag = 1;
+                        url = gw_ptr->url;
+                    }
+                }
+            }
+            if(strcmp(bdnarray[j], dnarray[j]))
+                break;
+        }
+
+        if (http == 1) PRINT_HTML_HEADER;
+        fprintf( fp, HTML_HEAD_TITLE, "ACCESS DENIED", glob->la[100]);
+        disp_file(glob, glob->header, fp);
+        fprintf( fp, "%s\n", glob->la[96]);
+        url_tmp = strdup(url_complete(url, query, ""));
+        fprintf( fp, "<P><A HREF=\"%s\"><b>%s</b></A>\n",
+           url_tmp, url_tmp);
+        disp_file(glob, glob->footer, fp);
+        PRINT_HTML_FOOTER;
+        ldap_unbind (ld);
+        close_ldap_connections(glob);
+        exit_tweb(0);
+    }
+}
+/* end of function: strict_basednf */
+
+PRIVATE void trade_cache(fp, ld, query, glob)
+FILE *fp;
+LDAP *ld;
+char *query;
+GLOB_STRUCT   *glob;
+{
+    pCACHING_TERMS_LINE ca_ptr;
+    char dnbuf[BUFSIZ], rdn[BUFSIZ], *strptr;
+    char tstring[100];
+    int resflag;
+    int rc;
+    struct timeval timeout;
+    LDAPMessage *res, *e;
+    char **vals = NULL;
+
+    resflag = 0;
+    if(*query)
+        strcpy(dnbuf, query+1);
+    else
+        strcpy(dnbuf, glob->basedn->dn);
+    hex_decode(dnbuf);
+    if( ( strptr = strchr(dnbuf, '?')) )
+        *strptr = '\0';
+    strcpy(rdn, dnbuf);
+    if( ( strptr = strQuoteChr(rdn, ',')) )
+        *strptr = '\0';
+
+    for(ca_ptr = glob->caching_terms; ca_ptr; ca_ptr = ca_ptr->next) {
+        if((toupper(*query) == toupper(*ca_ptr->access_type)) ||
+            ( !*query && (toupper(*ca_ptr->access_type) == 'M'))) {
+            
+            if(ca_ptr->rdn_oc && (strstr(str_tolower(rdn), ca_ptr->pattern) ||
+                                 (*ca_ptr->pattern == '*'))) {
+                time(&glob->expiretime);
+                glob->expiretime += ca_ptr->time;
+                free(glob->expiretimestr);
+                strftime(tstring, 99, GMT_FORMAT2, gmtime(&glob->expiretime));
+                glob->expiretimestr = strdup(tstring);
+                glob->caching = TRUE;
+            }
+            if(!ca_ptr->rdn_oc) {
+                if(!resflag) {
+
+                    if ( (rc=ldap_simple_bind_s( ld, glob->webdn, glob->webpw ))
+                                                         != LDAP_SUCCESS ) {
+                        if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
+                            do_error( fp, rc, SERVER_ERROR, glob);
+                        rewind(fp);
+                        exit_tweb( 1 );
+                    }
+
+                    timeout.tv_sec = glob->timeout;
+                    timeout.tv_usec = 0;
+
+                    if ( (rc = ldap_search_st( ld, dnbuf, LDAP_SCOPE_BASE, "objectClass=*",
+                        NULL, 0, &timeout, &res )) != LDAP_SUCCESS ) {
+                        do_error(fp, rc, NOT_FOUND, glob);
+                        return;
+                    }
+
+
+                    if ( (e = ldap_first_entry( ld, res )) == NULL ) {
+                        do_error(fp, -2, SERVER_ERROR, glob);
+                        return;
+                    }
+
+
+                    vals = ldap_get_values( ld, e, "objectClass" );
+                    resflag = 1;
+                }
+                if(charray_inlist( vals, ca_ptr->pattern )) {
+                    time(&glob->expiretime);
+                    glob->expiretime += ca_ptr->time;
+                    free(glob->expiretimestr);
+                    strftime(tstring, 99, GMT_FORMAT2, gmtime(&glob->expiretime));
+                    glob->expiretimestr = strdup(tstring);
+                    glob->caching = TRUE;
+                }
+            }
+
+        }
+    }
+
+}
+/* end of function: trade_cache */
diff --git a/contrib/tweb/queries.h b/contrib/tweb/queries.h
new file mode 100644 (file)
index 0000000..c5adc34
--- /dev/null
@@ -0,0 +1,85 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* queries.h..                                                              *
+*                                                                          *
+* Funktion:..WorldWideWeb-X.500-Gateway - Server-Functions                 *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:    :           Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 10 1999                ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: queries.h,v 1.6 1999/09/10 15:01:18 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _QUERIES_
+#define _QUERIES_
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "init_exp.h"
+#include "checkclient_exp.h"
+#include "support_exp.h"
+
+#include "queries_exp.h"
+#include "x500_exp.h"
+#include "html_exp.h"
+#include "server_exp.h"
+#include "dn_exp.h"
+#include "charray_exp.h"
+
+#ifdef TUE_TEL
+#include "tueTel_exp.h"
+#endif
+
+
+/*  Macros for request-recognition */
+
+/*  1. without DSA */
+#define cHELP         'H'
+#define cERROR        'E'
+#define cCONFIG       'C'
+#define cSTATS        'K'
+#define cPULLDOWN     'D'
+#define cBUTTON       'B'
+
+/*  2. with user-bind */
+#define cGETMOD       'F'
+#define cDOMOD        'Y'
+
+/*  3. with GW-bind */
+#define cREAD         'R'
+#define cREADALL      'L'
+#define cSEARCH       'S'
+#define cLIST         'M'
+#ifdef TUE_TEL
+#define cTON          'T'
+#endif
+#define cGIF          'I'
+#define cJPEG         'J'
+#define cG3FAX        'G'
+#define cAUDIO        'A'
+#define cREFERRAL     'W'
+#define cEXTENDED     'X'
+
+#define GMT_FORMAT "%a, %d %b %Y %T GMT"
+#define GMT_FORMAT2 "Expires: %a, %d %b %Y %T GMT\n"
+#define ROBOTS_TXT_FILE "robots.txt"
+
+PRIVATE void strict_basednf();
+PRIVATE void trade_cache();
+
+#endif /* _QUERIES_ */
+
diff --git a/contrib/tweb/queries_exp.h b/contrib/tweb/queries_exp.h
new file mode 100644 (file)
index 0000000..14dd9a1
--- /dev/null
@@ -0,0 +1,33 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* queries_exp.h                                                            *
+*                                                                          *
+* Function:..File for TWEB-SOFTWARE                                        *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 13 1996             Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 21 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: queries_exp.h,v 1.6 1999/09/10 15:01:18 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _QUERIES_EXP_
+#define _QUERIES_EXP_
+
+PUBLIC void do_queries(/* s, glob , ip_addr, ip_port*/);
+PUBLIC void timeoutf(/*sig*/);
+
+
+#endif /* _QUERIES_EXP_ */
diff --git a/contrib/tweb/regular.c b/contrib/tweb/regular.c
new file mode 100644 (file)
index 0000000..3c16d2a
--- /dev/null
@@ -0,0 +1,1211 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* regular.c..                                                              *
+*                                                                          *
+* Function:..Routine for TWEB -> regular expressions                       *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            January 20 1998              Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 31 1998           ZZZZZ  DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+/*
+ * $Id: regular.c,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "regular_exp.h"
+#include "regular.h"
+#include "support_exp.h"
+
+
+PUBLIC void tweb_regerror(s)
+char *s;
+{
+#ifdef ERRAVAIL
+       error("regexp: %s", s);
+#else
+/*     fprintf(stderr, "regexp(3): %s", s);
+       exit(1);
+*/
+       /* TWEB: error-logging by syslog */
+       if (dosyslog) syslog (LOG_INFO,
+           "ALLOW/DENY/GRANT/REFUSE - regexp-error: %s", s);
+       exit_tweb( 1 );
+#endif
+       /* NOTREACHED */
+}
+/*
+ * tweb_regsub
+ *
+ *     Copyright (c) 1986 by University of Toronto.
+ *     Written by Henry Spencer.  Not derived from licensed software.
+ *
+ *     Permission is granted to anyone to use this software for any
+ *     purpose on any computer system, and to redistribute it freely,
+ *     subject to the following restrictions:
+ *
+ *     1. The author is not responsible for the consequences of use of
+ *             this software, no matter how awful, even if they arise
+ *             from defects in it.
+ *
+ *     2. The origin of this software must not be misrepresented, either
+ *             by explicit claim or by omission.
+ *
+ *     3. Altered versions must be plainly marked as such, and must not
+ *             be misrepresented as being the original software.
+ */
+
+#ifndef CHARBITS
+#define        UCHARAT(p)      ((int)*(unsigned char *)(p))
+#else
+#define        UCHARAT(p)      ((int)*(p)&CHARBITS)
+#endif
+
+/*
+ - tweb_regsub - perform substitutions after a regexp match
+ */
+PUBLIC void tweb_regsub(prog, source, dest)
+regexp *prog;
+char *source;
+char *dest;
+{
+       register char *src;
+       register char *dst;
+       register char c;
+       register int no;
+       register int len;
+       extern char *strncpy();
+
+       if (prog == NULL || source == NULL || dest == NULL) {
+               tweb_regerror("NULL parm to tweb_regsub");
+               return;
+       }
+       if (UCHARAT(prog->program) != MAGIC) {
+               tweb_regerror("damaged regexp fed to tweb_regsub");
+               return;
+       }
+
+       src = source;
+       dst = dest;
+       while ((c = *src++) != '\0') {
+               if (c == '&')
+                       no = 0;
+               else if (c == '\\' && '0' <= *src && *src <= '9')
+                       no = *src++ - '0';
+               else
+                       no = -1;
+
+               if (no < 0) {   /* Ordinary character. */
+                       if (c == '\\' && (*src == '\\' || *src == '&'))
+                               c = *src++;
+                       *dst++ = c;
+               } else if (prog->startp[no] != NULL && prog->endp[no] != NULL) {
+                       len = prog->endp[no] - prog->startp[no];
+                       (void) strncpy(dst, prog->startp[no], len);
+                       dst += len;
+                       if (len != 0 && *(dst-1) == '\0') {     /* strncpy hit NUL. */
+                               tweb_regerror("damaged match string");
+                               return;
+                       }
+               }
+       }
+       *dst++ = '\0';
+}
+/*
+ * tweb_regcomp and tweb_regexec -- tweb_regsub and tweb_regerror are elsewhere
+ *
+ *     Copyright (c) 1986 by University of Toronto.
+ *     Written by Henry Spencer.  Not derived from licensed software.
+ *
+ *     Permission is granted to anyone to use this software for any
+ *     purpose on any computer system, and to redistribute it freely,
+ *     subject to the following restrictions:
+ *
+ *     1. The author is not responsible for the consequences of use of
+ *             this software, no matter how awful, even if they arise
+ *             from defects in it.
+ *
+ *     2. The origin of this software must not be misrepresented, either
+ *             by explicit claim or by omission.
+ *
+ *     3. Altered versions must be plainly marked as such, and must not
+ *             be misrepresented as being the original software.
+ *
+ * Beware that some of this code is subtly aware of the way operator
+ * precedence is structured in regular expressions.  Serious changes in
+ * regular-expression syntax might require a total rethink.
+ */
+
+/*
+ * The "internal use only" fields in regexp.h are present to pass info from
+ * compile to execute that permits the execute phase to run lots faster on
+ * simple cases.  They are:
+ *
+ * regstart    char that must begin a match; '\0' if none obvious
+ * reganch     is the match anchored (at beginning-of-line only)?
+ * regmust     string (pointer into program) that match must include, or NULL
+ * regmlen     length of regmust string
+ *
+ * Regstart and reganch permit very fast decisions on suitable starting points
+ * for a match, cutting down the work a lot.  Regmust permits fast rejection
+ * of lines that cannot possibly match.  The regmust tests are costly enough
+ * that tweb_regcomp() supplies a regmust only if the r.e. contains something
+ * potentially expensive (at present, the only such thing detected is * or +
+ * at the start of the r.e., which can involve a lot of backup).  Regmlen is
+ * supplied because the test in tweb_regexec() needs it and tweb_regcomp() is computing
+ * it anyway.
+ */
+
+/*
+ * Structure for regexp "program".  This is essentially a linear encoding
+ * of a nondeterministic finite-state machine (aka syntax charts or
+ * "railroad normal form" in parsing technology).  Each node is an opcode
+ * plus a "next" pointer, possibly plus an operand.  "Next" pointers of
+ * all nodes except BRANCH implement concatenation; a "next" pointer with
+ * a BRANCH on both ends of it is connecting two alternatives.  (Here we
+ * have one of the subtle syntax dependencies:  an individual BRANCH (as
+ * opposed to a collection of them) is never concatenated with anything
+ * because of operator precedence.)  The operand of some types of node is
+ * a literal string; for others, it is a node leading into a sub-FSM.  In
+ * particular, the operand of a BRANCH node is the first node of the branch.
+ * (NB this is *not* a tree structure:  the tail of the branch connects
+ * to the thing following the set of BRANCHes.)  The opcodes are:
+ */
+/*#include "regular.h"*/
+
+/*
+ - tweb_regcomp - compile a regular expression into internal code
+e*
+ * We can't allocate space until we know how big the compiled form will be,
+ * but we can't compile it (and thus know how big it is) until we've got a
+ * place to put the code.  So we cheat:  we compile it twice, once with code
+ * generation turned off and size counting turned on, and once "for real".
+ * This also means that we don't allocate space until we are sure that the
+ * thing really will compile successfully, and we never have to move the
+ * code and thus invalidate pointers into it.  (Note that it has to be in
+ * one piece because free() must be able to free it all.)
+ *
+ * Beware that the optimization-preparation code in here knows about some
+ * of the structure of the compiled regexp.
+ */
+PUBLIC regexp * tweb_regcomp(exp)
+char *exp;
+{
+       register regexp *r;
+       register char *scan;
+       register char *longest;
+       register int len;
+       int flags;
+
+       if (exp == NULL)
+               FAIL("NULL argument");
+
+       /* First pass: determine size, legality. */
+       regparse = exp;
+       regnpar = 1;
+       regsize = 0L;
+       regcode = &regdummy;
+       tweb_regc(MAGIC);
+       if (tweb_reg(0, &flags) == NULL)
+               return(NULL);
+
+       /* Small enough for pointer-storage convention? */
+       if (regsize >= 32767L)          /* Probably could be 65535L. */
+               FAIL("regexp too big");
+
+       /* Allocate space. */
+       r = (regexp *)malloc(sizeof(regexp) + (unsigned)regsize);
+       if (r == NULL)
+               FAIL("out of space");
+
+       /* Second pass: emit code. */
+       regparse = exp;
+       regnpar = 1;
+       regcode = r->program;
+       tweb_regc(MAGIC);
+       if (tweb_reg(0, &flags) == NULL)
+               return(NULL);
+
+       /* Dig out information for optimizations. */
+       r->regstart = '\0';     /* Worst-case defaults. */
+       r->reganch = 0;
+       r->regmust = NULL;
+       r->regmlen = 0;
+       scan = r->program+1;                    /* First BRANCH. */
+       if (OP(tweb_regnext(scan)) == END) {            /* Only one top-level choice. */
+               scan = OPERAND(scan);
+
+               /* Starting-point info. */
+               if (OP(scan) == EXACTLY)
+                       r->regstart = *OPERAND(scan);
+               else if (OP(scan) == BOL)
+                       r->reganch++;
+
+               /*
+                * If there's something expensive in the r.e., find the
+                * longest literal string that must appear and make it the
+                * regmust.  Resolve ties in favor of later strings, since
+                * the regstart check works with the beginning of the r.e.
+                * and avoiding duplication strengthens checking.  Not a
+                * strong reason, but sufficient in the absence of others.
+                */
+               if (flags&SPSTART) {
+                       longest = NULL;
+                       len = 0;
+                       for (; scan != NULL; scan = tweb_regnext(scan))
+                               if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) {
+                                       longest = OPERAND(scan);
+                                       len = strlen(OPERAND(scan));
+                               }
+                       r->regmust = longest;
+                       r->regmlen = len;
+               }
+       }
+
+       return(r);
+}
+
+/*
+ - reg - regular expression, i.e. main body or parenthesized thing
+ *
+ * Caller must absorb opening parenthesis.
+ *
+ * Combining parenthesis handling with the base level of regular expression
+ * is a trifle forced, but the need to tie the tails of the branches to what
+ * follows makes it hard to avoid.
+ */
+PRIVATE char * tweb_reg(paren, flagp)
+int paren;                     /* Parenthesized? */
+int *flagp;
+{
+       register char *ret;
+       register char *br;
+       register char *ender;
+       register int parno = 0;
+       int flags;
+
+       *flagp = HASWIDTH;      /* Tentatively. */
+
+       /* Make an OPEN node, if parenthesized. */
+       if (paren) {
+               if (regnpar >= NSUBEXP)
+                       FAIL("too many ()");
+               parno = regnpar;
+               regnpar++;
+               ret = tweb_regnode(OPEN+parno);
+       } else
+               ret = NULL;
+
+       /* Pick up the branches, linking them together. */
+       br = tweb_regbranch(&flags);
+       if (br == NULL)
+               return(NULL);
+       if (ret != NULL)
+               tweb_regtail(ret, br);  /* OPEN -> first. */
+       else
+               ret = br;
+       if (!(flags&HASWIDTH))
+               *flagp &= ~HASWIDTH;
+       *flagp |= flags&SPSTART;
+       while (*regparse == '|') {
+               regparse++;
+               br = tweb_regbranch(&flags);
+               if (br == NULL)
+                       return(NULL);
+               tweb_regtail(ret, br);  /* BRANCH -> BRANCH. */
+               if (!(flags&HASWIDTH))
+                       *flagp &= ~HASWIDTH;
+               *flagp |= flags&SPSTART;
+       }
+
+       /* Make a closing node, and hook it on the end. */
+       ender = tweb_regnode((paren) ? CLOSE+parno : END);      
+       tweb_regtail(ret, ender);
+
+       /* Hook the tails of the branches to the closing node. */
+       for (br = ret; br != NULL; br = tweb_regnext(br))
+               tweb_regoptail(br, ender);
+
+       /* Check for proper termination. */
+       if (paren && *regparse++ != ')') {
+               FAIL("unmatched ()");
+       } else if (!paren && *regparse != '\0') {
+               if (*regparse == ')') {
+                       FAIL("unmatched ()");
+               } else
+                       FAIL("junk on end");    /* "Can't happen". */
+               /* NOTREACHED */
+       }
+
+       return(ret);
+}
+
+/*
+ - tweb_regbranch - one alternative of an | operator
+ *
+ * Implements the concatenation operator.
+ */
+PRIVATE char * tweb_regbranch(flagp)
+int *flagp;
+{
+       register char *ret;
+       register char *chain;
+       register char *latest;
+       int flags;
+
+       *flagp = WORST;         /* Tentatively. */
+
+       ret = tweb_regnode(BRANCH);
+       chain = NULL;
+       while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
+               latest = tweb_regpiece(&flags);
+               if (latest == NULL)
+                       return(NULL);
+               *flagp |= flags&HASWIDTH;
+               if (chain == NULL)      /* First piece. */
+                       *flagp |= flags&SPSTART;
+               else
+                       tweb_regtail(chain, latest);
+               chain = latest;
+       }
+       if (chain == NULL)      /* Loop ran zero times. */
+               (void) tweb_regnode(NOTHING);
+
+       return(ret);
+}
+
+/*
+ - tweb_regpiece - something followed by possible [*+?]
+ *
+ * Note that the branching code sequences used for ? and the general cases
+ * of * and + are somewhat optimized:  they use the same NOTHING node as
+ * both the endmarker for their branch list and the body of the last branch.
+ * It might seem that this node could be dispensed with entirely, but the
+ * endmarker role is not redundant.
+ */
+PRIVATE char * tweb_regpiece(flagp)
+int *flagp;
+{
+       register char *ret;
+       register char op;
+       register char *next;
+       int flags;
+
+       ret = tweb_regatom(&flags);
+       if (ret == NULL)
+               return(NULL);
+
+       op = *regparse;
+       if (!ISMULT(op)) {
+               *flagp = flags;
+               return(ret);
+       }
+
+       if (!(flags&HASWIDTH) && op != '?')
+               FAIL("*+ operand could be empty");
+       *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
+
+       if (op == '*' && (flags&SIMPLE))
+               tweb_reginsert(STAR, ret);
+       else if (op == '*') {
+               /* Emit x* as (x&|), where & means "self". */
+               tweb_reginsert(BRANCH, ret);                    /* Either x */
+               tweb_regoptail(ret, tweb_regnode(BACK));                /* and loop */
+               tweb_regoptail(ret, ret);                       /* back */
+               tweb_regtail(ret, tweb_regnode(BRANCH));                /* or */
+               tweb_regtail(ret, tweb_regnode(NOTHING));               /* null. */
+       } else if (op == '+' && (flags&SIMPLE))
+               tweb_reginsert(PLUS, ret);
+       else if (op == '+') {
+               /* Emit x+ as x(&|), where & means "self". */
+               next = tweb_regnode(BRANCH);                    /* Either */
+               tweb_regtail(ret, next);
+               tweb_regtail(tweb_regnode(BACK), ret);          /* loop back */
+               tweb_regtail(next, tweb_regnode(BRANCH));               /* or */
+               tweb_regtail(ret, tweb_regnode(NOTHING));               /* null. */
+       } else if (op == '?') {
+               /* Emit x? as (x|) */
+               tweb_reginsert(BRANCH, ret);                    /* Either x */
+               tweb_regtail(ret, tweb_regnode(BRANCH));                /* or */
+               next = tweb_regnode(NOTHING);           /* null. */
+               tweb_regtail(ret, next);
+               tweb_regoptail(ret, next);
+       }
+       regparse++;
+       if (ISMULT(*regparse))
+               FAIL("nested *?+");
+
+       return(ret);
+}
+
+/*
+ - tweb_regatom - the lowest level
+ *
+ * Optimization:  gobbles an entire sequence of ordinary characters so that
+ * it can turn them into a single node, which is smaller to store and
+ * faster to run.  Backslashed characters are exceptions, each becoming a
+ * separate node; the code is simpler that way and it's not worth fixing.
+ */
+PRIVATE char * tweb_regatom(flagp)
+int *flagp;
+{
+       register char *ret;
+       int flags;
+
+       *flagp = WORST;         /* Tentatively. */
+
+       switch (*regparse++) {
+       case '^':
+               ret = tweb_regnode(BOL);
+               break;
+       case '$':
+               ret = tweb_regnode(EOL);
+               break;
+       case '.':
+               ret = tweb_regnode(ANY);
+               *flagp |= HASWIDTH|SIMPLE;
+               break;
+       case '[': {
+                       register int class;
+                       register int classend;
+
+                       if (*regparse == '^') { /* Complement of range. */
+                               ret = tweb_regnode(ANYBUT);
+                               regparse++;
+                       } else
+                               ret = tweb_regnode(ANYOF);
+                       if (*regparse == ']' || *regparse == '-')
+                               tweb_regc(*regparse++);
+                       while (*regparse != '\0' && *regparse != ']') {
+                               if (*regparse == '-') {
+                                       regparse++;
+                                       if (*regparse == ']' || *regparse == '\0')
+                                               tweb_regc('-');
+                                       else {
+                                               class = UCHARAT(regparse-2)+1;
+                                               classend = UCHARAT(regparse);
+                                               if (class > classend+1)
+                                                       FAIL("invalid [] range");
+                                               for (; class <= classend; class++)
+                                                       tweb_regc(class);
+                                               regparse++;
+                                       }
+                               } else
+                                       tweb_regc(*regparse++);
+                       }
+                       tweb_regc('\0');
+                       if (*regparse != ']')
+                               FAIL("unmatched []");
+                       regparse++;
+                       *flagp |= HASWIDTH|SIMPLE;
+               }
+               break;
+       case '(':
+               ret = tweb_reg(1, &flags);
+               if (ret == NULL)
+                       return(NULL);
+               *flagp |= flags&(HASWIDTH|SPSTART);
+               break;
+       case '\0':
+       case '|':
+       case ')':
+               FAIL("internal urp");   /* Supposed to be caught earlier. */
+               break;
+       case '?':
+       case '+':
+       case '*':
+               FAIL("?+* follows nothing");
+               break;
+       case '\\':
+               if (*regparse == '\0')
+                       FAIL("trailing \\");
+               ret = tweb_regnode(EXACTLY);
+               tweb_regc(*regparse++);
+               tweb_regc('\0');
+               *flagp |= HASWIDTH|SIMPLE;
+               break;
+       default: {
+                       register int len;
+                       register char ender;
+
+                       regparse--;
+                       len = strcspn(regparse, META);
+                       if (len <= 0)
+                               FAIL("internal disaster");
+                       ender = *(regparse+len);
+                       if (len > 1 && ISMULT(ender))
+                               len--;          /* Back off clear of ?+* operand. */
+                       *flagp |= HASWIDTH;
+                       if (len == 1)
+                               *flagp |= SIMPLE;
+                       ret = tweb_regnode(EXACTLY);
+                       while (len > 0) {
+                               tweb_regc(*regparse++);
+                               len--;
+                       }
+                       tweb_regc('\0');
+               }
+               break;
+       }
+
+       return(ret);
+}
+
+/*
+ - tweb_regnode - emit a node
+ */
+PRIVATE char * tweb_regnode(op)
+char op;
+{
+       register char *ret;
+       register char *ptr;
+
+       ret = regcode;
+       if (ret == &regdummy) {
+               regsize += 3;
+               return(ret);
+       }
+
+       ptr = ret;
+       *ptr++ = op;
+       *ptr++ = '\0';          /* Null "next" pointer. */
+       *ptr++ = '\0';
+       regcode = ptr;
+
+       return(ret);
+}
+
+/*
+ - regc - emit (if appropriate) a byte of code
+ */
+PRIVATE void tweb_regc(b)
+char b;
+{
+       if (regcode != &regdummy)
+               *regcode++ = b;
+       else
+               regsize++;
+}
+
+/*
+ - tweb_reginsert - insert an operator in front of already-emitted operand
+ *
+ * Means relocating the operand.
+ */
+PRIVATE void tweb_reginsert(op, opnd)
+char op;
+char *opnd;
+{
+       register char *src;
+       register char *dst;
+       register char *place;
+
+       if (regcode == &regdummy) {
+               regsize += 3;
+               return;
+       }
+
+       src = regcode;
+       regcode += 3;
+       dst = regcode;
+       while (src > opnd)
+               *--dst = *--src;
+
+       place = opnd;           /* Op node, where operand used to be. */
+       *place++ = op;
+       *place++ = '\0';
+       *place++ = '\0';
+}
+
+/*
+ - tweb_regtail - set the next-pointer at the end of a node chain
+ */
+PRIVATE void tweb_regtail(p, val)
+char *p;
+char *val;
+{
+       register char *scan;
+       register char *temp;
+       register int offset;
+
+       if (p == &regdummy)
+               return;
+
+       /* Find last node. */
+       scan = p;
+       for (;;) {
+               temp = tweb_regnext(scan);
+               if (temp == NULL)
+                       break;
+               scan = temp;
+       }
+
+       if (OP(scan) == BACK)
+               offset = scan - val;
+       else
+               offset = val - scan;
+       *(scan+1) = (offset>>8)&0377;
+       *(scan+2) = offset&0377;
+}
+
+/*
+ - tweb_regoptail - tweb_regtail on operand of first argument; nop if operandless
+ */
+PRIVATE void tweb_regoptail(p, val)
+char *p;
+char *val;
+{
+       /* "Operandless" and "op != BRANCH" are synonymous in practice. */
+       if (p == NULL || p == &regdummy || OP(p) != BRANCH)
+               return;
+       tweb_regtail(OPERAND(p), val);
+}
+
+/*
+ * tweb_regexec and friends
+ */
+
+/*
+ * Global work variables for tweb_regexec().
+ */
+static char *reginput;         /* String-input pointer. */
+static char *regbol;           /* Beginning of input, for ^ check. */
+static char **regstartp;       /* Pointer to startp array. */
+static char **regendp;         /* Ditto for endp. */
+
+/*
+ * Forwards.
+ */
+STATIC int tweb_regtry();
+STATIC int tweb_regmatch();
+STATIC int tweb_regrepeat();
+
+#ifdef DEBUG
+int regnarrate = 0;
+void tweb_regdump();
+STATIC char *tweb_regprop();
+#endif
+
+/*
+ - tweb_regexec - match a regexp against a string
+ */
+int
+PUBLIC tweb_regexec(prog, string)
+register regexp *prog;
+register char *string;
+{
+       register char *s;
+       extern char *strchr();
+
+       /* Be paranoid... */
+       if (prog == NULL || string == NULL) {
+               tweb_regerror("NULL parameter");
+               return(0);
+       }
+
+       /* Check validity of program. */
+       if (UCHARAT(prog->program) != MAGIC) {
+               tweb_regerror("corrupted program");
+               return(0);
+       }
+
+       /* If there is a "must appear" string, look for it. */
+       if (prog->regmust != NULL) {
+               s = string;
+               while ((s = strchr(s, prog->regmust[0])) != NULL) {
+                       if (strncmp(s, prog->regmust, prog->regmlen) == 0)
+                               break;  /* Found it. */
+                       s++;
+               }
+               if (s == NULL)  /* Not present. */
+                       return(0);
+       }
+
+       /* Mark beginning of line for ^ . */
+       regbol = string;
+
+       /* Simplest case:  anchored match need be tried only once. */
+       if (prog->reganch)
+               return(tweb_regtry(prog, string));
+
+       /* Messy cases:  unanchored match. */
+       s = string;
+       if (prog->regstart != '\0')
+               /* We know what char it must start with. */
+               while ((s = strchr(s, prog->regstart)) != NULL) {
+                       if (tweb_regtry(prog, s))
+                               return(1);
+                       s++;
+               }
+       else
+               /* We don't -- general case. */
+               do {
+                       if (tweb_regtry(prog, s))
+                               return(1);
+               } while (*s++ != '\0');
+
+       /* Failure. */
+       return(0);
+}
+
+/*
+ - tweb_regtry - try match at specific point
+ */
+PRIVATE int tweb_regtry(prog, string)
+regexp *prog;
+char *string;
+{
+       register int i;
+       register char **sp;
+       register char **ep;
+
+       reginput = string;
+       regstartp = prog->startp;
+       regendp = prog->endp;
+
+       sp = prog->startp;
+       ep = prog->endp;
+       for (i = NSUBEXP; i > 0; i--) {
+               *sp++ = NULL;
+               *ep++ = NULL;
+       }
+       if (tweb_regmatch(prog->program + 1)) {
+               prog->startp[0] = string;
+               prog->endp[0] = reginput;
+               return(1);
+       } else
+               return(0);
+}
+
+/*
+ - tweb_regmatch - main matching routine
+ *
+ * Conceptually the strategy is simple:  check to see whether the current
+ * node matches, call self recursively to see whether the rest matches,
+ * and then act accordingly.  In practice we make some effort to avoid
+ * recursion, in particular by going through "ordinary" nodes (that don't
+ * need to know whether the rest of the match failed) by a loop instead of
+ * by recursion.
+ */
+PRIVATE int tweb_regmatch(prog)
+char *prog;
+{
+       register char *scan;    /* Current node. */
+       char *next;             /* Next node. */
+       extern char *strchr();
+
+       scan = prog;
+#ifdef DEBUG
+       if (scan != NULL && regnarrate)
+               fprintf(stderr, "%s(\n", tweb_regprop(scan));
+#endif
+       while (scan != NULL) {
+#ifdef DEBUG
+               if (regnarrate)
+                       fprintf(stderr, "%s...\n", tweb_regprop(scan));
+#endif
+               next = tweb_regnext(scan);
+
+               switch (OP(scan)) {
+               case BOL:
+                       if (reginput != regbol)
+                               return(0);
+                       break;
+               case EOL:
+                       if (*reginput != '\0')
+                               return(0);
+                       break;
+               case ANY:
+                       if (*reginput == '\0')
+                               return(0);
+                       reginput++;
+                       break;
+               case EXACTLY: {
+                               register int len;
+                               register char *opnd;
+
+                               opnd = OPERAND(scan);
+                               /* Inline the first character, for speed. */
+                               if (*opnd != *reginput)
+                                       return(0);
+                               len = strlen(opnd);
+                               if (len > 1 && strncmp(opnd, reginput, len) != 0)
+                                       return(0);
+                               reginput += len;
+                       }
+                       break;
+               case ANYOF:
+                       if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) == NULL)
+                               return(0);
+                       reginput++;
+                       break;
+               case ANYBUT:
+                       if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL)
+                               return(0);
+                       reginput++;
+                       break;
+               case NOTHING:
+                       break;
+               case BACK:
+                       break;
+               case OPEN+1:
+               case OPEN+2:
+               case OPEN+3:
+               case OPEN+4:
+               case OPEN+5:
+               case OPEN+6:
+               case OPEN+7:
+               case OPEN+8:
+               case OPEN+9: {
+                               register int no;
+                               register char *save;
+
+                               no = OP(scan) - OPEN;
+                               save = reginput;
+
+                               if (tweb_regmatch(next)) {
+                                       /*
+                                        * Don't set startp if some later
+                                        * invocation of the same parentheses
+                                        * already has.
+                                        */
+                                       if (regstartp[no] == NULL)
+                                               regstartp[no] = save;
+                                       return(1);
+                               } else
+                                       return(0);
+                       }
+                       break;
+               case CLOSE+1:
+               case CLOSE+2:
+               case CLOSE+3:
+               case CLOSE+4:
+               case CLOSE+5:
+               case CLOSE+6:
+               case CLOSE+7:
+               case CLOSE+8:
+               case CLOSE+9: {
+                               register int no;
+                               register char *save;
+
+                               no = OP(scan) - CLOSE;
+                               save = reginput;
+
+                               if (tweb_regmatch(next)) {
+                                       /*
+                                        * Don't set endp if some later
+                                        * invocation of the same parentheses
+                                        * already has.
+                                        */
+                                       if (regendp[no] == NULL)
+                                               regendp[no] = save;
+                                       return(1);
+                               } else
+                                       return(0);
+                       }
+                       break;
+               case BRANCH: {
+                               register char *save;
+
+                               if (OP(next) != BRANCH)         /* No choice. */
+                                       next = OPERAND(scan);   /* Avoid recursion. */
+                               else {
+                                       do {
+                                               save = reginput;
+                                               if (tweb_regmatch(OPERAND(scan)))
+                                                       return(1);
+                                               reginput = save;
+                                               scan = tweb_regnext(scan);
+                                       } while (scan != NULL && OP(scan) == BRANCH);
+                                       return(0);
+                                       /* NOTREACHED */
+                               }
+                       }
+                       break;
+               case STAR:
+               case PLUS: {
+                               register char nextch;
+                               register int no;
+                               register char *save;
+                               register int min;
+
+                               /*
+                                * Lookahead to avoid useless match attempts
+                                * when we know what character comes next.
+                                */
+                               nextch = '\0';
+                               if (OP(next) == EXACTLY)
+                                       nextch = *OPERAND(next);
+                               min = (OP(scan) == STAR) ? 0 : 1;
+                               save = reginput;
+                               no = tweb_regrepeat(OPERAND(scan));
+                               while (no >= min) {
+                                       /* If it could work, try it. */
+                                       if (nextch == '\0' || *reginput == nextch)
+                                               if (tweb_regmatch(next))
+                                                       return(1);
+                                       /* Couldn't or didn't -- back up. */
+                                       no--;
+                                       reginput = save + no;
+                               }
+                               return(0);
+                       }
+                       break;
+               case END:
+                       return(1);      /* Success! */
+                       break;
+               default:
+                       tweb_regerror("memory corruption");
+                       return(0);
+                       break;
+               }
+
+               scan = next;
+       }
+
+       /*
+        * We get here only if there's trouble -- normally "case END" is
+        * the terminating point.
+        */
+       tweb_regerror("corrupted pointers");
+       return(0);
+}
+
+/*
+ - tweb_regrepeat - repeatedly match something simple, report how many
+ */
+PRIVATE int tweb_regrepeat(p)
+char *p;
+{
+       register int count = 0;
+       register char *scan;
+       register char *opnd;
+       extern char *strchr();
+
+       scan = reginput;
+       opnd = OPERAND(p);
+       switch (OP(p)) {
+       case ANY:
+               count = strlen(scan);
+               scan += count;
+               break;
+       case EXACTLY:
+               while (*opnd == *scan) {
+                       count++;
+                       scan++;
+               }
+               break;
+       case ANYOF:
+               while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
+                       count++;
+                       scan++;
+               }
+               break;
+       case ANYBUT:
+               while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
+                       count++;
+                       scan++;
+               }
+               break;
+       default:                /* Oh dear.  Called inappropriately. */
+               tweb_regerror("internal foulup");
+               count = 0;      /* Best compromise. */
+               break;
+       }
+       reginput = scan;
+
+       return(count);
+}
+
+/*
+ - tweb_regnext - dig the "next" pointer out of a node
+ */
+PRIVATE char * tweb_regnext(p)
+register char *p;
+{
+       register int offset;
+
+       if (p == &regdummy)
+               return(NULL);
+
+       offset = NEXT(p);
+       if (offset == 0)
+               return(NULL);
+
+       if (OP(p) == BACK)
+               return(p-offset);
+       else
+               return(p+offset);
+}
+
+#ifdef DEBUG
+
+PRIVATE char *tweb_regprop();
+
+/*
+ - tweb_regdump - dump a regexp onto stdout in vaguely comprehensible form
+ */
+PUBLIC void tweb_regdump(r)
+regexp *r;
+{
+       register char *s;
+       register char op = EXACTLY;     /* Arbitrary non-END op. */
+       register char *next;
+       extern char *strchr();
+
+
+       s = r->program + 1;
+       while (op != END) {     /* While that wasn't END last time... */
+               op = OP(s);
+               printf("%2d%s", s-r->program, tweb_regprop(s)); /* Where, what. */
+               next = tweb_regnext(s);
+               if (next == NULL)               /* Next ptr. */
+                       printf("(0)");
+               else 
+                       printf("(%d)", (s-r->program)+(next-s));
+               s += 3;
+               if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
+                       /* Literal string, where present. */
+                       while (*s != '\0') {
+                               putchar(*s);
+                               s++;
+                       }
+                       s++;
+               }
+               putchar('\n');
+       }
+
+       /* Header fields of interest. */
+       if (r->regstart != '\0')
+               printf("start `%c' ", r->regstart);
+       if (r->reganch)
+               printf("anchored ");
+       if (r->regmust != NULL)
+               printf("must have \"%s\"", r->regmust);
+       printf("\n");
+}
+
+/*
+ - tweb_regprop - printable representation of opcode
+ */
+PRIVATE char * tweb_regprop(op)
+char *op;
+{
+       register char *p;
+       static char buf[50];
+
+       (void) strcpy(buf, ":");
+
+       switch (OP(op)) {
+       case BOL:
+               p = "BOL";
+               break;
+       case EOL:
+               p = "EOL";
+               break;
+       case ANY:
+               p = "ANY";
+               break;
+       case ANYOF:
+               p = "ANYOF";
+               break;
+       case ANYBUT:
+               p = "ANYBUT";
+               break;
+       case BRANCH:
+               p = "BRANCH";
+               break;
+       case EXACTLY:
+               p = "EXACTLY";
+               break;
+       case NOTHING:
+               p = "NOTHING";
+               break;
+       case BACK:
+               p = "BACK";
+               break;
+       case END:
+               p = "END";
+               break;
+       case OPEN+1:
+       case OPEN+2:
+       case OPEN+3:
+       case OPEN+4:
+       case OPEN+5:
+       case OPEN+6:
+       case OPEN+7:
+       case OPEN+8:
+       case OPEN+9:
+               sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN);
+               p = NULL;
+               break;
+       case CLOSE+1:
+       case CLOSE+2:
+       case CLOSE+3:
+       case CLOSE+4:
+       case CLOSE+5:
+       case CLOSE+6:
+       case CLOSE+7:
+       case CLOSE+8:
+       case CLOSE+9:
+               sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE);
+               p = NULL;
+               break;
+       case STAR:
+               p = "STAR";
+               break;
+       case PLUS:
+               p = "PLUS";
+               break;
+       default:
+               tweb_regerror("corrupted opcode");
+               break;
+       }
+       if (p != NULL)
+               (void) strcat(buf, p);
+       return(buf);
+}
+#endif
+
+/*
+ * The following is provided for those people who do not have strcspn() in
+ * their C libraries.  They should get off their butts and do something
+ * about it; at least one public-domain implementation of those (highly
+ * useful) string routines has been published on Usenet.
+ */
+#ifdef strcspn
+/*
+ * strcspn - find length of initial segment of s1 consisting entirely
+ * of characters not from s2
+ */
+
+PRIVATE int strcspn(s1, s2)
+char *s1;
+char *s2;
+{
+       register char *scan1;
+       register char *scan2;
+       register int count;
+
+       count = 0;
+       for (scan1 = s1; *scan1 != '\0'; scan1++) {
+               for (scan2 = s2; *scan2 != '\0';)       /* ++ moved down. */
+                       if (*scan1 == *scan2++)
+                               return(count);
+               count++;
+       }
+       return(count);
+}
+#endif
diff --git a/contrib/tweb/regular.h b/contrib/tweb/regular.h
new file mode 100644 (file)
index 0000000..cce8d1c
--- /dev/null
@@ -0,0 +1,137 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* regular.h..                                                              *
+*                                                                          *
+* Function:..Routine for TWEB                                              *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            January 20 1998              Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 31 1998           ZZZZZ  DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+/*
+ * $Id: regular.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _REGULAR_
+#define _REGULAR_
+
+
+/* definition  number  opnd?   meaning */
+#define        END     0       /* no   End of program. */
+#define        BOL     1       /* no   Match "" at beginning of line. */
+#define        EOL     2       /* no   Match "" at end of line. */
+#define        ANY     3       /* no   Match any one character. */
+#define        ANYOF   4       /* str  Match any character in this string. */
+#define        ANYBUT  5       /* str  Match any character not in this string. */
+#define        BRANCH  6       /* node Match this alternative, or the next... */
+#define        BACK    7       /* no   Match "", "next" ptr points backward. */
+#define        EXACTLY 8       /* str  Match this string. */
+#define        NOTHING 9       /* no   Match empty string. */
+#define        STAR    10      /* node Match this (simple) thing 0 or more times. */
+#define        PLUS    11      /* node Match this (simple) thing 1 or more times. */
+#define        OPEN    20      /* no   Mark this point in input as start of #n. */
+                       /*      OPEN+1 is number 1, etc. */
+#define        CLOSE   ((OPEN)+(NSUBEXP)+1)    /* no   Analogous to OPEN. */
+
+/*
+ * Opcode notes:
+ *
+ * BRANCH      The set of branches constituting a single choice are hooked
+ *             together with their "next" pointers, since precedence prevents
+ *             anything being concatenated to any individual branch.  The
+ *             "next" pointer of the last BRANCH in a choice points to the
+ *             thing following the whole choice.  This is also where the
+ *             final "next" pointer of each individual branch points; each
+ *             branch starts with the operand node of a BRANCH node.
+ *
+ * BACK                Normal "next" pointers all implicitly point forward; BACK
+ *             exists to make loop structures possible.
+ *
+ * STAR,PLUS   '?', and complex '*' and '+', are implemented as circular
+ *             BRANCH structures using BACK.  Simple cases (one character
+ *             per match) are implemented with STAR and PLUS for speed
+ *             and to minimize recursive plunges.
+ *
+ * OPEN,CLOSE  ...are numbered at compile time.
+ */
+
+/*
+ * A node is one char of opcode followed by two chars of "next" pointer.
+ * "Next" pointers are stored as two 8-bit pieces, high order first.  The
+ * value is a positive offset from the opcode of the node containing it.
+ * An operand, if any, simply follows the node.  (Note that much of the
+ * code generation knows about this implicit relationship.)
+ *
+ * Using two bytes for the "next" pointer is vast overkill for most things,
+ * but allows patterns to get big without disasters.
+ */
+#define        OP(p)   (*(p))
+#define        NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
+#define        OPERAND(p)      ((p) + 3)
+
+/*
+ * See regmagic.h for one further detail of program structure.
+ */
+
+
+/*
+ * Utility definitions.
+ */
+#ifndef CHARBITS
+#define        UCHARAT(p)      ((int)*(unsigned char *)(p))
+#else
+#define        UCHARAT(p)      ((int)*(p)&CHARBITS)
+#endif
+
+#define        FAIL(m) { tweb_regerror(m); return(NULL); }
+#define        ISMULT(c)       ((c) == '*' || (c) == '+' || (c) == '?')
+#define        META    "^$.[()|?+*\\"
+
+/*
+ * Flags to be passed up and down.
+ */
+#define        HASWIDTH        01      /* Known never to match null string. */
+#define        SIMPLE          02      /* Simple enough to be STAR/PLUS operand. */
+#define        SPSTART         04      /* Starts with * or +. */
+#define        WORST           0       /* Worst case. */
+
+/*
+ * Global work variables for regcomp().
+ */
+PRIVATE char *regparse;                /* Input-scan pointer. */
+PRIVATE int regnpar;           /* () count. */
+PRIVATE char regdummy;
+PRIVATE char *regcode;         /* Code-emit pointer; &regdummy = don't. */
+PRIVATE long regsize;          /* Code size. */
+
+/*
+ * Forward declarations for regcomp()'s friends.
+ */
+#ifndef STATIC
+#define        STATIC  static
+#endif
+PRIVATE char *tweb_reg();
+PRIVATE char *tweb_regbranch();
+PRIVATE char *tweb_regpiece();
+PRIVATE char *tweb_regatom();
+PRIVATE char *tweb_regnode();
+PRIVATE char *tweb_regnext();
+PRIVATE void tweb_regc();
+PRIVATE void tweb_reginsert();
+PRIVATE void tweb_regtail();
+PRIVATE void tweb_regoptail();
+#ifdef STRCSPN
+STATIC int tweb_strcspn();
+#endif
+
+#endif /* _REGULAR_ */
diff --git a/contrib/tweb/regular_exp.h b/contrib/tweb/regular_exp.h
new file mode 100644 (file)
index 0000000..24bb661
--- /dev/null
@@ -0,0 +1,56 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* regular_exp.h                                                            *
+*                                                                          *
+* Function:..Routine for TWEB                                              *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            January 20 1998              Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            January 20 1998            ZZZZZ  DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+/*
+ * $Id: regular_exp.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+
+#ifndef _REGULAR_EXP_
+#define _REGULAR_EXP_
+
+/*
+ * Definitions etc. for regexp(3) routines.
+ *
+ * Caveat:  this is V8 regexp(3) [actually, a reimplementation thereof],
+ * not the System V one.
+ */
+#define NSUBEXP  10
+typedef struct regexp {
+       char *startp[NSUBEXP];
+       char *endp[NSUBEXP];
+       char regstart;          /* Internal use only. */
+       char reganch;           /* Internal use only. */
+       char *regmust;          /* Internal use only. */
+       int regmlen;            /* Internal use only. */
+       char program[1];        /* Unwarranted chumminess with compiler. */
+} regexp;
+
+extern regexp *tweb_regcomp();
+extern int tweb_regexec();
+extern void tweb_regsub();
+extern void tweb_regerror();
+/*
+ * The first byte of the regexp internal "program" is actually this magic
+ * number; the start node begins in the second byte.
+ */
+#define        MAGIC   0234
+
+#endif /* _REGULAR_EXP_ */
diff --git a/contrib/tweb/server.c b/contrib/tweb/server.c
new file mode 100644 (file)
index 0000000..a5ebcf5
--- /dev/null
@@ -0,0 +1,432 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 
+*                                                                          *
+* server.c...                                                              *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - Server-Funktions                 *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 6 1999                 ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: server.c,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "init_exp.h"
+#include "checkclient_exp.h"
+#include "server.h"
+#include "charray_exp.h"
+
+#if defined( TUE_TEL ) || defined( AMBIXGW )
+#include "tueTest_exp.h"
+#endif
+
+
+/**
+ **  start_server()
+ **
+ **    Start the Web-X.500-Server.
+ **/
+
+PUBLIC void start_server(glob)
+GLOB_STRUCT *glob;
+{
+
+    int            s, ns, rc;
+    int            tblsize;
+    int            pid = getpid();
+    fd_set            readfds;
+    struct hostent        *hp;
+    struct sockaddr_in    from;
+    int            fromlen;
+    void            wait4child();
+    long int       idx;
+
+    glob->stat_slice = time(&glob->stat_slice);
+    stat_slice = &glob->stat_slice;
+    /* if logging is desired via syslog establish connection to syslogd
+       and write first log-message */
+    if ( dosyslog ) {
+
+        openlog( glob->myname, LOG_PID | LOG_NOWAIT, dosyslog );
+        syslog( LOG_INFO, "initializing" );
+
+    }
+
+    /* set up the socket to listen on */
+        /*  the actual port to listen is composed by the base-port
+            and the language-offset */
+        s = set_socket( glob->webport + atoi(glob->lang) );
+
+        /* arrange to reap children */
+        (void) signal( SIGCHLD, wait4child );
+
+    if ( dosyslog )
+        syslog (LOG_INFO, "socket: %d", s);
+
+    /*  Read LDAP-filter for search-operations */
+    if ( (filtd = ldap_init_getfilter( glob->filterfile )) == NULL ) {
+        fprintf(stderr,"Cannot open filter file (%s)\n", glob->filterfile );
+        exit( 1 );
+    }
+
+/*  ###  Code for the static server ### */
+
+    tblsize = getdtablesize();
+    syslog (LOG_INFO, "listening for calls...");
+
+    /*  Initialisation of the Anti-Hack-code */
+    srand(pid);
+    if (glob->comrefuse) hackTimer();
+    bzero((char *) conArr, CARRSIZE * sizeof(int));
+    bzero((char *) shadowconArr, CARRSIZE * sizeof(long int));
+    bzero((char *) sumconArr, CARRSIZE * sizeof(long int));
+
+#ifdef TUE_TEL
+    /* initialisation of dit_config 1st time  */
+    if(glob->dit_config) {
+        init_dit_config();
+    }
+#endif
+
+    /* initialisation of ip_refuse 1st time  */
+    if(glob->ip_refuse) {
+        get_ip_refuse_clients(glob);
+    }
+
+    /*  the server runs in an infinite loop !!! */
+    for ( ;; ) {
+
+        /*  listen on the server-port for incoming connections */
+        FD_ZERO( &readfds );
+        FD_SET( s, &readfds );
+
+        if ((rc=select(tblsize,(fd_set *)&readfds,NULL,NULL,0))==-1) {
+            if ( debug ) perror( "select" );
+            continue;
+        } else if ( rc == 0 ) {
+            continue;
+        }
+
+        if ( ! FD_ISSET( s, &readfds ) )
+            continue;
+
+
+        /*  got connection for the server: get data */
+        fromlen = sizeof(from);
+
+               /* increment the counter for total connections */
+               glob->svc_cnt++;
+
+        /*  get new file-descriptors for the connection */
+        if ( (ns = accept( s, (struct sockaddr *)  &from, &fromlen )) == -1 ) {
+
+            /*  new fd could not be assigned -> log & bye */
+            if ( debug ) perror( "accept" );
+            if ( dosyslog ) {
+                syslog (LOG_INFO,
+                    "problem with accept, errno=%d, %s <%08d>",
+                    errno, strerror(errno), glob->svc_cnt);
+            }
+            continue;
+        }
+
+        /* get time for performance log */
+        gettimeofday(&timestore[0], NULL);
+
+        /*  get client-address via DNS */
+        hp = gethostbyaddr( (char *) &(from.sin_addr.s_addr),
+            sizeof(from.sin_addr.s_addr), AF_INET );
+
+        /* check ip-address for ip_refuse and bye if matched */
+               if ( check_ip_denial( &from, glob ) == NOTOK ) {
+
+                       if ( dosyslog )
+                               syslog( LOG_INFO, "IP-REFUSE: access denied for %s <%08d>",
+                                                       inet_ntoa( from.sin_addr ), glob->svc_cnt);
+
+            close (ns);
+            continue;
+
+        }
+
+        /* get time for performance log */
+        gettimeofday(&timestore[1], NULL);
+
+        /* Anti-Hack-part */
+
+        /*  divide Host-IP-addresses in index-groups and count connection */
+        idx = IP_HACK(from.sin_addr.s_addr);
+        sumconArr[idx]++;
+
+        /*  count try if already locked and bye */
+        if(conArr[idx] < 0) {
+
+            shadowconArr[idx]++;
+            close (ns);
+            continue;
+
+        }
+
+        /*  if not yet locked and maximum amount of connections is exeeded ->
+            lock & message & bye
+        */
+        if (glob->comrefuse && (++conArr[idx] > glob->comrefuse->maxAccept)){
+
+            if (dosyslog)
+                syslog(LOG_INFO,
+"connection refused for %s (IDX=%d): %d attempts, %d cycles suspended <%08d>",
+                             hp ? hp->h_name : "unknown", idx, conArr[idx],
+                             glob->comrefuse->suspendCycle, glob->svc_cnt);
+
+            /*  lock for x timecycles */
+            conArr[idx] = glob->comrefuse->suspendCycle;
+
+            /*  bye, bye baby */
+            close (ns);
+            continue;
+
+        }
+
+        /* END of Anti-Hack-part */
+
+        /*  Log the connection */
+        if ( dosyslog ) {
+            char msg[BUFSIZ];
+
+            sprintf(msg, "TCP connection from %s (%s,%u)",
+                (hp == NULL) ? "unknown" : hp->h_name,
+                inet_ntoa( from.sin_addr ), from.sin_port );
+            glob->server_connection_msg = strdup(msg);
+        }
+
+        if ( debug ) {
+            fprintf( stderr, "connection from %s (%s)\n",    
+                (hp == NULL) ? "unknown" : hp->h_name,
+                inet_ntoa( from.sin_addr ) );
+        }
+
+        glob->unknown_host = !hp;
+    
+        /*  OK, now fork a sub-process performing the further communication
+            to the client; the father-process is listening for further
+            connections */
+        switch( pid = fork() ) {
+        case 0:        /* child */
+
+            /*  the connection to the client should last at most OUT_TIME
+                thereafter terminate connection */
+            signal(SIGALRM, timeoutf);
+            alarm(OUT_TIME);
+
+            /*  the s-filedescriptor is not needed any more */
+            close( s );
+
+            /*  Serve client-request */
+            do_queries( ns, glob , inet_ntoa( from.sin_addr ), from.sin_port, hp);
+            break;
+
+        case -1:    /* failed */
+            if (dosyslog)
+                               syslog (LOG_INFO, "%s <%08d>",
+                                       glob->server_connection_msg, glob->svc_cnt);
+            perror( "fork" );
+            break;
+
+        default:    /* parent */
+            /*  the father-process continues listening */
+            close( ns );
+            if ( debug )
+                fprintf( stderr, "forked child %d\n", pid );
+            break;
+        }
+    }
+    /* NOT REACHED */
+}
+/* end of function: start_server */
+
+
+/**
+ **  set_socket()
+ **
+ **    Initialise socket to listen on and assign dedicated FD
+ **/
+
+PRIVATE int set_socket(port)
+int port;
+{
+    int            s, one;
+    struct sockaddr_in    addr;
+
+    if ( (s = socket( AF_INET, SOCK_STREAM, 0 )) == -1 ) {
+                perror( "socket" );
+                exit( 1 );
+        }
+
+        /* set option so clients can't keep us from coming back up */
+    one = 1;
+        if ( setsockopt( s, SOL_SOCKET, SO_REUSEADDR, (char *) &one,
+        sizeof(one) ) < 0 ) {
+                perror( "setsockopt" );
+                exit( 1 );
+        }
+
+        /* bind to a name */
+        addr.sin_family = AF_INET;
+        addr.sin_addr.s_addr = INADDR_ANY;
+        addr.sin_port = htons( port );
+        if ( bind( s, (struct sockaddr *)  &addr, sizeof(addr) ) ) {
+                perror( "bind" );
+                exit( 1 );
+        }
+
+    /* listen for connections */
+        if ( listen( s, 512 ) == -1 ) {
+                perror( "listen" );
+                exit( 1 );
+        }
+
+        if ( debug )
+        printf( "web500gw listening on port %d\n", port );
+
+    return( s );
+}
+/* end of function: set_socket */
+
+/* If a sub-daemon exists, remove from Process list */
+PRIVATE void wait4child(arg)
+int arg;
+{
+        int     status;
+
+        if ( debug ) printf( "parent: catching child status\n" );
+        while ( wait3( &status, WNOHANG | WUNTRACED, 0 ) > 0 )
+                ;       /* NULL */
+    (void) signal( SIGCHLD, wait4child );
+}
+/* end of function: wait4child */
+
+/* set signal-handler for Anti-Hack */
+PRIVATE void hackTimer()
+{
+    static time_t  timer = (time_t) 0;
+           time_t  now   = time (&now);
+
+    /* re-read IP-REFUSE file if necessary */
+       re_readIPrefuse( globP );
+
+    /* re-read INDEX-URL file if necessary */
+       re_read_index_url_rules( globP );
+
+    if (!timer) {
+
+        timer = now + comRefuseP->statCycle;
+
+    }
+
+    signal(SIGALRM, reset_conMem);
+    alarm((rand() % comRefuseP->tdiff) + comRefuseP->tmin);
+
+    if (now + comRefuseP->tmin > timer) {
+
+        timer = put_hackStats (NULL, now) + comRefuseP->statCycle;
+        *stat_slice  = now;
+
+    }
+
+}
+/* end of function: hackTimer */
+
+
+/* Signal-handler for Anti-Hack-code */
+PRIVATE void reset_conMem()
+{
+    int i;
+
+    hackTimer();
+
+    for(i=0; i< 8192; i++)
+        if(conArr[i] >= 0) conArr[i] = 0;
+        else {
+            if(++conArr[i] == 0){
+                if (dosyslog)
+                    syslog(LOG_INFO, "connection accept resumed for IDX=%d; \
+%u connection attempts during suspension <%08d>", i, shadowconArr[i],
+                                                       globP->svc_cnt);
+                shadowconArr[i] = 0;
+        }
+    }
+
+}
+/* end of function: reset_conMem */
+
+
+/*  regular output of the access-statistic */
+PUBLIC time_t put_hackStats (fp, now)
+FILE   *fp;
+time_t  now;
+{
+    int     i, bereiche;
+    int     is_html = (fp != NULL);
+    char   *eol = is_html ? "<BR>\n" : "\n";
+    unsigned long int gesamt = 0;
+
+    if (!now) now = time (&now);
+
+    if (!fp) fp = fopen (comRefuseP->statFile, "w");
+
+    if (fp) {
+
+        if (is_html) fprintf (fp, "<PRE><BR>\n");
+
+        fprintf (fp, "Access-Statistic TWEB%s", eol);
+        fprintf (fp, "======================%s", eol);
+        if (comRefuseP) fprintf (fp, "FILE : %s%s", comRefuseP->statFile, eol);
+        fprintf (fp, "START: %s%s", format_time (*stat_slice), eol);
+        fprintf (fp, "END  : %s%s%s%s", format_time (now), eol, eol, eol);
+
+        for (i = 0, bereiche = 0; i < CARRSIZE; i++) {
+
+            if(sumconArr[i]) {
+                fprintf (fp, "IP-IDX %5d: %8lu%s", i, sumconArr[i], eol);
+                gesamt += sumconArr[i];
+                bereiche++;
+            }
+
+        }
+    if(bereiche > 1) {
+            fprintf (fp, "----------------------%s", eol);
+            fprintf (fp, "Total:       %8lu  ( from %d IP-Ranges )%s",
+                          gesamt, bereiche, eol);
+        }
+
+        if (is_html) {
+
+            fprintf (fp, "</PRE><BR>\n");
+
+        } else {
+
+            bzero((char *) sumconArr, CARRSIZE * sizeof(long int));
+            fprintf (fp, "\n");
+            fclose (fp);
+
+        }
+    }
+        
+    return (now);
+
+} /* put_hackStats */
diff --git a/contrib/tweb/server.h b/contrib/tweb/server.h
new file mode 100644 (file)
index 0000000..6e1b3fc
--- /dev/null
@@ -0,0 +1,72 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* server.h...                                                              *
+*                                                                          *
+* Funktion:..WorldWideWeb-X.500-Gateway - Server-Funktions                 *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 31 1998           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: server.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _SERVER_
+#define _SERVER_
+
+#include "server_exp.h"
+#include "queries_exp.h"
+#include "support_exp.h"
+
+#ifdef TUE_TEL
+#include "tueTel_exp.h"
+#endif
+
+
+#define CARRSIZE 8192
+
+#define MASK_30 0x40000000
+#define MASK_20 0x00100000
+#define MASK_17 0x00020000
+#define MASK_10 0x00000ffc
+
+#define IP_HACK(x)    ((((MASK_30 & (x)) != 0) * 4096) + \
+                       (((MASK_20 & (x)) != 0) * 2048) + \
+                       (((MASK_17 & (x)) != 0) * 1024) + \
+                       ((MASK_10 & (x)) >> 2))
+
+/* three integer-arrays to count connections */
+int conArr[CARRSIZE];
+unsigned long int shadowconArr[CARRSIZE];
+unsigned long int sumconArr[CARRSIZE];
+
+/* the signal-handler */
+PRIVATE void reset_conMem();
+
+/* set the Alarm-Timer */
+PRIVATE void    hackTimer();
+
+PRIVATE int set_socket();
+PRIVATE void wait4child();
+
+/*  A pointer to the Anti-Hack-infos in the Glob-structure */
+COMREFUSE  *comRefuseP = NULL;
+time_t *stat_slice;
+
+
+#endif /* _SERVER_ */
+
+
diff --git a/contrib/tweb/server_exp.h b/contrib/tweb/server_exp.h
new file mode 100644 (file)
index 0000000..d6bc037
--- /dev/null
@@ -0,0 +1,36 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* server_exp.h...                                                          *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - Server-Funktions                 *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 2 1996              Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 31 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: server_exp.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _SERVER_EXP_
+#define _SERVER_EXP_
+
+/* Statistic Output */
+extern  time_t  put_hackStats();
+extern  void    start_server();
+
+#endif /* _SERVER_EXP_ */
+
+
diff --git a/contrib/tweb/strng.c b/contrib/tweb/strng.c
new file mode 100644 (file)
index 0000000..d608bd7
--- /dev/null
@@ -0,0 +1,177 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* strng.c....                                                              *
+*                                                                          *
+* Function:..String Handling Functions                                     *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 13 1996             Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 3 1998            ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: strng.c,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+#include "strng_exp.h"
+#include "tgeneral.h"
+
+/*
+ *  Convert string to integer by means of a dispatcherlist
+ *  if string is not in the dispatcher -> return default
+ */
+
+PUBLIC int cnvt_str2int (stringVal, dispatcher, defaultVal)
+STRDISP_P  dispatcher;
+int        defaultVal;
+char      *stringVal;
+{
+       int        retVal = defaultVal;
+       STRDISP_P  disp;
+       
+       for (disp = dispatcher; disp->stringVal; disp++) {
+       
+               if (!strncmp (stringVal, disp->stringVal, disp->abbr)) {
+               
+                       retVal = disp->intVal;
+                       break;
+                       
+               }
+       }
+       
+       return (retVal);
+       
+} /* cnvt_str2int */
+
+
+/*
+ *  Truncate characters at the beginning of a string
+ */
+
+PUBLIC char * trimleft (s, what)
+char   *s, *what;
+{
+
+        return (s + strspn (s, what));
+
+} /* trimleft */
+
+
+/*
+ *  Truncate characters at the end of a string
+ */
+
+PUBLIC char * trimright (s, what)
+char   *s, *what;
+{
+       char  *tmp = s + strlen (s) - 1;
+
+       while ((tmp >= s) && strchr (what, *tmp)) *tmp-- = '\0';
+
+       return (s);
+
+} /* trimright */
+
+
+/*
+ *  Truncate characters at the beginning and end of a string
+ */
+
+PUBLIC char * trim (s, what)
+char   *s, *what;
+{
+       (void) trimright (s, what);
+       return (trimleft (s, what));
+
+} /* trim */
+
+
+/*
+ *  Convert a string to lower-case "in place"
+ *  uses tolower()
+ */
+
+PUBLIC char *str_tolower (source)
+char  *source;
+{
+        char  *target = source;
+
+        for (; *target; target++) *target = tolower (*target);
+        return (source);
+
+} /* str_tolower */
+
+
+/*
+ *  Convert a string to upper-case "in place"
+ *  uses toupper()
+ */
+
+PUBLIC char *str_toupper (source)
+char  *source;
+{
+        char  *target = source;
+
+        for (; *target; target++){
+            *target = toupper (*target);
+
+            /* Patch fuer Umlaute */
+            if(*target == 'ä') *target = 'Ä';
+            else if(*target == 'ö') *target = 'Ö';
+            else if(*target == 'ü') *target = 'Ãœ';
+        }
+        return (source);
+
+} /* str_toupper */
+
+
+/*
+ *  Substitute a character in a string by another
+ */
+
+PUBLIC char *tr1 (source, from, to)
+char  *source;
+char   from, to;
+{
+       char *target = source - 1;
+
+       while ( ( target = strchr( ++target, from )) ) *target = to;
+
+       return (source);
+
+} /* tr1 */
+
+
+PUBLIC int chrcnt(string, c)
+char *string;
+char *c;
+{
+       int count=0;
+
+       string--;
+       while( ( string = strpbrk(string+1, c)) )
+               count++;
+       return(count);
+}
+/* end of function: chrcnt */
+
+
+PUBLIC int
+qSortByString( a, b )
+char **a, **b;
+{
+       return strcmp( *a, *b );
+}
+/*  end of function: qSortByString  */
+
+
diff --git a/contrib/tweb/strng_exp.h b/contrib/tweb/strng_exp.h
new file mode 100644 (file)
index 0000000..7509a7e
--- /dev/null
@@ -0,0 +1,80 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* strng_exp.h                                                              *
+*                                                                          *
+* Function:..String Handling Functions                                     *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 13 1996             Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            November 3 1998            ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: strng_exp.h,v 1.6 1999/09/10 15:01:19 zrnsk01 Exp $
+ *
+ */
+
+#ifndef  __STRNG_EXP__
+#define  __STRNG_EXP__
+
+#include <ctype.h> 
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+
+/*
+ *  Structures for the offered Funktions
+ */
+
+typedef struct _str2intDispatch {
+
+               char    *stringVal;
+               int      abbr,
+                        intVal;
+
+       } STRDISP, *STRDISP_P;
+
+
+/*
+ *  The "offered" Funktions
+ */
+
+/*  Conversion to upper/lower case in the whole string */
+char  *str_tolower (/* char *string */);
+char  *str_toupper (/* char *string */);
+
+/*  Convert string to integer by means of a dispatcherlist  */
+/*  if string is not in the dispatcher -> return default  */
+int   cnvt_str2int (/* string, dispatcher, default */);
+
+/*  Truncate characters at the beginning and end of a string  */
+char  *trimleft (/* char *s, char *what */);
+char  *trimright (/* char *s, char *what */);
+char  *trim (/* char *s, char *what */);
+
+/*  A special WHAT: whitespaces  */
+#define  WSPACE  "\n\r\t "
+
+/*  Substitute a character in a string to another */
+char  *tr1 (/* char *source, char from, char to */);
+
+/*  Count the named characters of string2 in string1  */
+int chrcnt (/*String1, String2*/);
+
+
+/*  Compare by string values in qsort()  */
+int qSortByString (/* char **StringP1, char **StringP2 */);
+
+#endif
+
diff --git a/contrib/tweb/support.c b/contrib/tweb/support.c
new file mode 100644 (file)
index 0000000..a5866e0
--- /dev/null
@@ -0,0 +1,613 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* support.c..                                                              *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - Supporting Routines              *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            September 7 1999           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: support.c,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "init_exp.h"
+#include "support.h"
+
+/*
+ *  Utilities for dealing with HTML junk
+ */
+
+char hex[17] = "0123456789abcdef";
+char buffer[1024];
+
+PUBLIC char * hex_decode (in)
+char *in;
+{
+        char b, c;
+        int q = 0;
+        char *out = in;
+
+        while (*in) {
+        if (*in == '?')        /* start search */
+            q = 1;
+                if (*in == '%') {    /* Hex escape */
+                        in++;
+                        if(!(c = *in++)) break;
+                        b = from_hex(c);
+                        if(!(c = *in++)) break;
+                        *out++ = (b<<4) + from_hex(c);
+                } else if (q && *in == '+') {
+            /* '+' is legal in path, in search it's a ' ' */
+            *out++ = ' ';
+            in++;
+        } else {
+                        *out++ = *in++;
+                }
+        }
+        *out = '\0';
+        return (out);
+}
+/* end of function: hex_decode */
+
+/* decode in search (for do_modify) */
+
+PUBLIC char * hex_qdecode (in)
+char *in;
+{
+        char b, c;
+        char *out = in;
+
+        while (*in) {
+                if (*in == '%') {     /* Hex escape */
+                        in++;
+                        if(!(c = *in++)) break;
+                        b = from_hex(c);
+                        if(!(c = *in++)) break;
+                        *out++ = (b<<4) + from_hex(c);
+                } else if (*in == '+') { /* we are in search, so: '+' -> ' ' */
+                        *out++ = ' ';
+                        in++;
+                } else {
+                        *out++ = *in++;
+                }
+        }
+        *out = '\0';
+        return (out);
+}
+/* end of function: hex_qdecode */
+
+PUBLIC char * form_encode (in)
+char *in;
+{
+    char *out = buffer;
+    
+    /* bzero(out, 1024); */
+    while (*in) {
+            if (*in == '"' || *in == '>' ) {
+            *out++ = '\\';
+        }
+                   *out++ = *in++;
+    }
+         *out = '\0';
+
+     /* fprintf( stderr, "returning - esc: %s.\n", buffer); */
+    return (buffer);
+}
+/* end of function: form_encode */
+
+/* gtime(): the inverse of localtime().
+    This routine was supplied by Mike Accetta at CMU many years ago.
+ */
+
+int    dmsize[] = {
+    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+};
+
+#define    dysize(y)    \
+    (((y) % 4) ? 365 : (((y) % 100) ? 366 : (((y) % 400) ? 365 : 366)))
+
+#define    YEAR(y)        ((y) >= 100 ? (y) : (y) + 1900)
+
+PRIVATE time_t gtime (tm)
+struct tm *tm;
+{
+    register int    i,
+                    sec,
+                    mins,
+                    hour,
+                    mday,
+                    mon,
+                    year;
+    register long   result;
+
+    if ((sec = tm -> tm_sec) < 0 || sec > 59
+        || (mins = tm -> tm_min) < 0 || mins > 59
+        || (hour = tm -> tm_hour) < 0 || hour > 24
+        || (mday = tm -> tm_mday) < 1 || mday > 31
+        || (mon = tm -> tm_mon + 1) < 1 || mon > 12)
+    return ((long) -1);
+    if (hour == 24) {
+    hour = 0;
+    mday++;
+    }
+    year = YEAR (tm -> tm_year);
+    result = 0L;
+    for (i = 1970; i < year; i++)
+    result += dysize (i);
+    if (dysize (year) == 366 && mon >= 3)
+    result++;
+    while (--mon)
+    result += dmsize[mon - 1];
+    result += mday - 1;
+    result = 24 * result + hour;
+    result = 60 * result + mins;
+    result = 60 * result + sec;
+    return result;
+}
+/* end of function: gtime */
+
+PUBLIC char * format_date (s, format)
+char **s;
+char *format;
+{
+/*  PATCHED by /KSp, 94/04/29  */
+    static char    date[256];
+/*      ^^^^^^ */
+/*  END PATCH  */
+
+    struct tm       tm, *ntm;
+    time_t        t;
+
+
+    tm.tm_year = 10*((*s)[0] - '0') + ((*s)[1] - '0');
+    tm.tm_mon  = 10*((*s)[2] - '0') + ((*s)[3] - '0') - 1;
+    tm.tm_mday = 10*((*s)[4] - '0') + ((*s)[5] - '0');
+    tm.tm_hour = 10*((*s)[6] - '0') + ((*s)[7] - '0');
+    tm.tm_min  = 10*((*s)[8] - '0') + ((*s)[9] - '0');
+    tm.tm_sec  = 10*((*s)[10] - '0') + ((*s)[11] - '0');
+
+/*  PATCHED for HPUX by /KSp, 94/04/28  */
+
+    tm.tm_isdst = 0;
+
+#if !defined(__hpux) && !defined(__linux__)  && !defined(__sun)
+    tm.tm_gmtoff = 0;
+#endif
+
+/*  END PATCH  */
+
+    t = gtime(&tm);
+    ntm = gmtime(&t);
+    strftime(date, 256, format, ntm);
+    return (date);
+}
+/* end of function: format_date */
+
+PUBLIC char * friendly_dn (dn, glob)
+char *dn;
+GLOB_STRUCT *glob;
+{
+/*  PATCHED BY /KSp, 94/04/29  */
+    /* static char    fufn[1024], **s; */
+/*      ^^^^^^  */
+/*  END PATCH  */
+
+/*  Again patched by /KSp, 97/01/25: dynamic mem-allocation  */
+       char  *fufn;
+
+       if ( ( fufn = calloc( 1, BUFSIZ )) ) {
+
+               if (strlen(dn) == 0) {
+                       strcpy( fufn, glob->la[77] );
+               } else {
+
+                       int    i = 0;
+                       char   **s;
+
+                       s = ldap_explode_dn( dn, 1 );
+                       while (s[i+1]) {
+                               strcat( fufn, s[i++] );
+                               strcat( fufn, ", " );
+                       }
+                       strcat( fufn, ldap_friendly_name( glob->friendlyfile, s[i], &fm ));
+               }
+       }
+
+    return (fufn);
+}
+/* end of function: friendly_dn */
+
+
+PUBLIC char * format_time (whatTime)
+time_t  whatTime;
+{
+           time_t    timer;
+    static char      theTime[_TIMEOUT_LEN+1];
+
+    timer = whatTime ? whatTime : time (&timer);
+    strftime (theTime, (_TIMEOUT_LEN + 1), _LOG_TIME, localtime (&timer));
+
+    return (theTime);
+
+} /* end of function: format_time */
+
+PUBLIC char * strQuoteChr(string, c)
+char *string;
+char c;
+{
+    char *cPtr;
+    int inQuote = FALSE;
+
+    cPtr = string;
+    while(*cPtr) {
+        if( *cPtr == '\"')
+            inQuote = ( (inQuote == TRUE) ? FALSE : TRUE );
+        if( (*cPtr == c) && (inQuote == FALSE) )
+            return(cPtr);
+        cPtr++;
+        }
+
+    return(NULL);
+}
+/* end of function: strQuoteChr */
+
+PUBLIC char * strrQuoteChr(string, c)
+char *string;
+char c;
+{
+    char *cPtr;
+    int inQuote = FALSE;
+
+    cPtr = string + strlen(string) - 1;
+    while(cPtr >= string) {
+        if( *cPtr == '\"')
+            inQuote = ( (inQuote == TRUE) ? FALSE : TRUE );
+        if( (*cPtr == c) && (inQuote == FALSE) )
+            return(cPtr);
+        cPtr--;
+        }
+
+    return(NULL);
+}
+/* end of function: strrQuoteChr */
+
+
+PUBLIC void disp_file(glob, filename, fp)
+GLOB_STRUCT *glob;
+char *filename;
+FILE *fp;
+{
+char buf[4096];
+FILE *fp2;
+    if(filename && (fp2 = fopen(filename, "r" ))) {
+        while ( fgets(buf, 4095, fp2) != NULL )
+            fprintf( fp, "%s",buf);
+        fclose(fp2);
+    }
+
+    /* Copyright-Zeile */
+    if(filename == glob->footer ||
+       (glob->basedn && filename == glob->basedn->foot))
+        fprintf( fp, glob->la[99],glob->la[101], copyright );
+}
+/* end of function: disp_file */
+
+
+PUBLIC int dn_cmp(dn1, dn2)
+char *dn1, *dn2;
+{
+        do {
+                while(*dn1 == ' ' || *dn1 == '"')
+                        dn1++;
+                while(*dn2 == ' ' || *dn2 == '"')
+                        dn2++;
+                if(!*dn1 && !*dn2)
+                        return(FALSE); /* equality */
+        } while(tolower(*dn1++) == tolower(*dn2++));
+        return(TRUE);
+}
+/* end of function: dn_cmp */
+
+
+/*
+ *  dn_cmp_parts()
+ *
+ *    comparison of dns by rdn parts. in case of unmatched the part(s) which
+ *    matched can be returned (matched not NULL)
+ *
+ *  input:
+ *
+ *    - dn1 (in url format)
+ *    - dn2 (     "       )
+ *    - matched (pointer to dynamically allocatable string, or NULL)
+ *
+ *  output:
+ *
+ *    - DN_EQUAL | DN_LESS | DN_GREATER | DN_UNMATCHED (with matched allocated)
+ */
+
+PUBLIC int
+dn_cmp_parts( dn1, dn2, matched )
+char  *dn1;
+char  *dn2;
+char **matched;
+{
+       char   **dn1arr = dn2charray( dn1 );
+       char   **dn2arr = dn2charray( dn2 );
+       int    idx;
+       int    domatch  = TRUE;
+       int    result   = DN_EQUAL;
+
+       for ( idx = 0; dn1arr[idx] && dn2arr[idx]; idx++ ) {
+
+               if ( strcasecmp( dn1arr[idx], dn2arr[idx] )) {
+
+                       domatch = FALSE;
+                       break;
+
+               }
+       }
+
+       /*  what was the result  */
+
+       if ( !domatch ) {
+
+               if ( matched ) {
+                       char buf[BUFSIZ];
+                       char buf2[BUFSIZ];
+                       int  idx2;
+
+                       *buf = '\0';
+
+                       for ( idx2 = 0; idx2 < idx; idx2++ ) {
+
+                               strcpy( buf2, buf );
+                               sprintf( buf, "%s,%s", dn1arr[idx2], buf2 );
+
+                       }
+                       trimright( buf, "," );
+
+                       *matched = strdup( buf );
+
+               }
+
+               result = DN_UNMATCHED;
+
+       } else if ( dn1arr[idx] ) result = DN_GREATER;
+       else if ( dn2arr[idx] ) result = DN_LESS;
+
+       charray_free( dn1arr ); charray_free( dn2arr );
+
+       return( result );
+
+}  /*  dn_cmp_parts  */
+
+
+
+/*
+ *  Comparison of substring lists
+ */
+
+PUBLIC int strlstcmp (s1, s2, sep)
+char  *s1, *s2;
+char   sep;
+{
+    int   retCode = FALSE;
+    char *target;
+    char *source;
+    char *idx, *idx2;
+    char  tmpChar;
+
+    if ( !s1 || !s2 )
+        return( FALSE );
+
+    target = str_tolower (strdup (s1));
+    source = str_tolower (strdup (s2));
+    idx    = source;
+
+    while (idx && (idx2 = strchr (idx+1, sep))) {
+
+        tmpChar = *(++idx2); *idx2 = '\0';
+        if (strstr (target, idx)) {
+
+            retCode = TRUE;
+            break;
+
+        }
+
+        *(idx2) = tmpChar;
+        idx = --idx2;
+
+    }
+
+    free (source);
+    free (target);
+    return (retCode);
+
+}
+/* end of function: strlstcmp */
+
+PUBLIC char *hex_html_encode(string, flag)
+char *string;
+int flag; /* 0->hex 1->html */
+{
+       static char strbuf[10*BUFSIZ];
+       char *strptr;
+
+       *strbuf = '\0';
+       for(strptr = string; *strptr; strptr++){
+               /* 200 a -> &auml; fuer aouAOU */
+               if((flag==1) && (((int)*strptr&255)==200)) {
+                       if(strchr("aouAOU", *(strptr+1))) {
+                               sprintf(strbuf, "%s&%cuml;", strbuf, *++strptr);
+                               continue;
+                       }
+               }
+
+               /* &#xxx; Handling-Patch */
+               if((flag==1) && (((int)*strptr&255)>=160)) {
+                       sprintf(strbuf, "%s&#%d;", strbuf, ((int)*strptr&255));
+                       continue;
+               }
+               /* end Patch */
+
+               if(!encoding_tbl[(int)*strptr&255][flag]) {
+                       sprintf(strbuf, "%s%c", strbuf, *strptr);
+               } else {
+                       strcat(strbuf, encoding_tbl[(int)*strptr&255][flag]);
+               }
+       }
+       return(strbuf);
+}
+/* end of function: hex_html_encode */
+
+/* Strips basecount+1 characters of type target at the end of an RDN */
+PUBLIC char *dnrcut(rdn, target, basecount) 
+char *rdn;
+char *target;
+int basecount;
+{
+       static char buf[BUFSIZ];
+       char *strptr;
+       int rdncount, morecount;
+
+       rdncount = chrcnt(rdn, target);
+       if( (morecount = (rdncount - basecount)) > 0) {
+               strcpy(buf, rdn);
+               strptr = buf-1;
+               while(morecount--) {
+                       strptr = strpbrk(strptr+1, target);
+               }
+               *strptr = '\0';
+       } else *buf = '\0';
+       return(buf);
+}
+/* end of function: dnrcut */
+
+PUBLIC char **dn2charray(dn)
+char *dn;
+{
+    char *dnbuf, *strptr, **a=NULL;
+
+       if ( !dn || !*dn ) {
+
+               a = (char **) ch_calloc( 1, sizeof( char ** ));
+               return( a );
+
+       }
+
+    dnbuf = strdup(dn);
+    do {
+        strptr = strrQuoteChr(dnbuf, ',');
+        if(strptr) {
+            *strptr++ = '\0';
+/*
+            while(*strptr == ' ') 
+                strptr++;
+*/
+                       strptr = trim( strptr, " " );
+        }
+        charray_add( &a, strptr ? strptr : trim( dnbuf, " " ));
+    } while(strptr);
+    free(dnbuf);
+    return(a);
+}
+/* end of function: dn2charray */
+
+
+/* get the parent DN for a given one */
+PUBLIC char *
+get_parentDN( dn )
+char  *dn;
+{
+       char  **a   = NULL;
+       char    tmp[BUFSIZ];
+
+       a = dn2charray( dn );
+       *tmp = *(tmp + 1) = '\0';
+
+       if ( a ) {
+               char **rdnH;
+
+               /*  we have to re-build the DN beginning at the last array element  */
+               for ( rdnH = a; *rdnH; rdnH++ )
+                       ;
+
+               /*  re-build DN from it's parts  */
+               rdnH--; rdnH--;
+               for ( ; rdnH >= a; rdnH-- ) {
+
+                       sprintf( tmp, "%s,%s", tmp, *rdnH );
+
+               }
+
+               charray_free( a );
+
+       }
+
+       /*  ignore a leading ','  */
+       return( strdup( tmp + 1 ));
+
+}  /* get_parentDN */
+
+
+PUBLIC char *elapsed(firsttime, secondtime)
+struct timeval firsttime;
+struct timeval secondtime;
+{
+    long int elapsedmicrosec, elapsedsec;
+    char elapsed_string[BUFSIZ];
+    
+    elapsedsec = secondtime.tv_sec - firsttime.tv_sec;
+    elapsedmicrosec = secondtime.tv_usec - firsttime.tv_usec;
+    if(elapsedmicrosec < 0) {
+        elapsedmicrosec += 1000000;
+        elapsedsec -= 1;
+    }
+    if(elapsedsec > 1000){
+        elapsedsec = 0;
+        elapsedmicrosec = 0;
+    }
+    sprintf(elapsed_string, "%ld.%.6ld", elapsedsec, elapsedmicrosec);
+    return(strdup(elapsed_string));
+}
+/* end of function: elapsed */
+
+
+/* performance-log on exit */
+PUBLIC int exit_tweb(rc)
+int rc;
+{
+    struct timeval secondtime;
+
+    gettimeofday(&secondtime, NULL);
+    if(!secondtime.tv_sec || !timestore[0].tv_sec) exit(rc);
+
+    if (dosyslog)
+                syslog (LOG_INFO, "performance: %s#%s#%s#%s#%s#%s#%d seconds <%08d>",
+               elapsed(timestore[0], secondtime), elapsed(timestore[0],
+                       timestore[1]), elapsed(timestore[1], timestore[2]),
+               elapsed(timestore[2], timestore[3]),
+               elapsed(timestore[3], items_displayed ? timestore[4] : secondtime),
+               items_displayed ? elapsed(timestore[4], secondtime) : "",
+               items_displayed, globP->svc_cnt);
+    exit(rc);
+}
+/* end of function: exit_tweb */
+
diff --git a/contrib/tweb/support.h b/contrib/tweb/support.h
new file mode 100644 (file)
index 0000000..7a68fa1
--- /dev/null
@@ -0,0 +1,300 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* support.h..                                                              *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - Support-Functions                *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            September 7 1999           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: support.h,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _SUPPORT_
+#define _SUPPORT_
+
+#include "support_exp.h"
+#include "charray_exp.h"
+#include "ch_malloc_exp.h"
+
+
+/*  Array for translation */
+/* 0: HEX; 1: uml (not used); 2: flatten */
+
+char *encoding_tbl[257][3] = {
+/*   0  \0 */    { "%00" ,   "",       NULL    },
+/*   1  \ 1 */    { "%01" ,   "\ 1",       NULL  },
+/*   2  \ 2 */    { "%02" ,   "\ 2",       NULL  },
+/*   3  \ 3 */    { "%03" ,   "\ 3",       NULL  },
+/*   4  \ 4 */    { "%04" ,   "\ 4",       NULL  },
+/*   5  \ 5 */    { "%05" ,   "\ 5",       NULL  },
+/*   6  \ 6 */    { "%06" ,   "\ 6",       NULL  },
+/*   7  \a */    { "%07" ,   "\a",       NULL  },
+/*   8  \b */    { "%08" ,   "\b",       NULL  },
+/*   9  \t */    { "%09" ,   "&nbsp;", NULL  },
+/*  10  \n */    { "%0a" ,   "\n",     NULL  },
+/*  11  \v */    { "%0b" ,   "\v",       NULL  },
+/*  12  \f */    { "%0c" ,   "\f",       NULL  },
+/*  13  \r */    { "%0d" ,   "\r",       NULL  },
+/*  14  \ e */    { "%0e" ,   "\ e",       NULL  },
+/*  15  \ f */    { "%0f" ,   "\ f",       NULL  },
+/*  16  \10 */    { "%10" ,   "\10",       NULL  },
+/*  17  \11 */    { "%11" ,   "\11",       NULL  },
+/*  18  \12 */    { "%12" ,   "\12",       NULL  },
+/*  19  \13 */    { "%13" ,   "\13",       NULL  },
+/*  20  \14 */    { "%14" ,   "\14",       NULL  },
+/*  21  \15 */    { "%15" ,   "\15",       NULL  },
+/*  22  \16 */    { "%16" ,   "\16",       NULL  },
+/*  23  \17 */    { "%17" ,   "\17",       NULL  },
+/*  24  \18 */    { "%18" ,   "\18",       NULL  },
+/*  25  \19 */    { "%19" ,   "\19",       NULL  },
+/*  26  \1a */    { "%1a" ,   "\1a",       NULL  },
+/*  27  \e */    { "%1b" ,   "\e",       NULL  },
+/*  28  \1c */    { "%1c" ,   "\1c",       NULL  },
+/*  29  \1d */    { "%1d" ,   "\1d",       NULL  },
+/*  30  \1e */    { "%1e" ,   "\1e",       NULL  },
+/*  31  \1f */    { "%1f" ,   "\1f",       NULL  },
+/*  32     */    { "%20" ,   " ",      NULL  },
+/*  33  !  */    { "%21" ,   "!",      NULL  },
+/*  34  "  */    { "%22" ,   "&quot;", NULL  },
+/*  35  #  */    { "%23" ,   "#",      NULL  },
+/*  36  $  */    {  NULL,    NULL,     NULL  },
+/*  37  %  */    { "%25" ,   "%",      NULL  },
+/*  38  &  */    { "%26" ,   "&amp;",  NULL  },
+/*  39  '  */    { "%27" ,   "'",      NULL  },
+/*  40  (  */    { "%28" ,   "(",      NULL  },
+/*  41  )  */    { "%29" ,   ")",      NULL  },
+/*  42  *  */    { "%2a" ,   "*",      NULL  },
+/*  43  +  */    { "%2b" ,   "+",      NULL  },
+/*  44  ,  */    { "%2c" ,   ",",      NULL  },
+/*  45  -  */    {  NULL,    NULL,     NULL  },
+/*  46  .  */    {  NULL,    NULL,     NULL  },
+/*  47  /  */    { "%2f" ,   "/",      NULL  },
+/*  48  0  */    {  NULL,    NULL,     NULL  },
+/*  49  1  */    {  NULL,    NULL,     NULL  },
+/*  50  2  */    {  NULL,    NULL,     NULL  },
+/*  51  3  */    {  NULL,    NULL,     NULL  },
+/*  52  4  */    {  NULL,    NULL,     NULL  },
+/*  53  5  */    {  NULL,    NULL,     NULL  },
+/*  54  6  */    {  NULL,    NULL,     NULL  },
+/*  55  7  */    {  NULL,    NULL,     NULL  },
+/*  56  8  */    {  NULL,    NULL,     NULL  },
+/*  57  9  */    {  NULL,    NULL,     NULL  },
+/*  58  :  */    { "%3a" ,   ":",      NULL  },
+/*  59  ;  */    { "%3b" ,   ";",      NULL  },
+/*  60  <  */    { "%3c" ,   "&lt;",   NULL  },
+/*  61  =  */    { "%3d" ,   "=",      NULL  },
+/*  62  >  */    { "%3e" ,   "&gt;",   NULL  },
+/*  63  ?  */    { "%3f" ,   "?",      NULL  },
+/*  64  @  */    { "%40" ,   "@",      NULL  },
+/*  65  A  */    {  NULL,    NULL,     NULL  },
+/*  66  B  */    {  NULL,    NULL,     NULL  },
+/*  67  C  */    {  NULL,    NULL,     NULL  },
+/*  68  D  */    {  NULL,    NULL,     NULL  },
+/*  69  E  */    {  NULL,    NULL,     NULL  },
+/*  70  F  */    {  NULL,    NULL,     NULL  },
+/*  71  G  */    {  NULL,    NULL,     NULL  },
+/*  72  H  */    {  NULL,    NULL,     NULL  },
+/*  73  I  */    {  NULL,    NULL,     NULL  },
+/*  74  J  */    {  NULL,    NULL,     NULL  },
+/*  75  K  */    {  NULL,    NULL,     NULL  },
+/*  76  L  */    {  NULL,    NULL,     NULL  },
+/*  77  M  */    {  NULL,    NULL,     NULL  },
+/*  78  N  */    {  NULL,    NULL,     NULL  },
+/*  79  O  */    {  NULL,    NULL,     NULL  },
+/*  80  P  */    {  NULL,    NULL,     NULL  },
+/*  81  Q  */    {  NULL,    NULL,     NULL  },
+/*  82  R  */    {  NULL,    NULL,     NULL  },
+/*  83  S  */    {  NULL,    NULL,     NULL  },
+/*  84  T  */    {  NULL,    NULL,     NULL  },
+/*  85  U  */    {  NULL,    NULL,     NULL  },
+/*  86  V  */    {  NULL,    NULL,     NULL  },
+/*  87  W  */    {  NULL,    NULL,     NULL  },
+/*  88  X  */    {  NULL,    NULL,     NULL  },
+/*  89  Y  */    {  NULL,    NULL,     NULL  },
+/*  90  Z  */    {  NULL,    NULL,     NULL  },
+/*  91  [  */    { "%5b" ,   "[",      NULL  },
+/*  92  \  */    { "%5c" ,   "\\",     NULL  },
+/*  93  ]  */    { "%5d" ,   "]",      NULL  },
+/*  94  ^  */    { "%5e" ,   "^",      NULL  },
+/*  95  _  */    {  NULL,    NULL,     NULL  },
+/*  96  `  */    { "%60" ,   "`",      NULL  },
+/*  97  a  */    {  NULL,    NULL,     NULL  },
+/*  98  b  */    {  NULL,    NULL,     NULL  },
+/*  99  c  */    {  NULL,    NULL,     NULL  },
+/* 100  d  */    {  NULL,    NULL,     NULL  },
+/* 101  e  */    {  NULL,    NULL,     NULL  },
+/* 102  f  */    {  NULL,    NULL,     NULL  },
+/* 103  g  */    {  NULL,    NULL,     NULL  },
+/* 104  h  */    {  NULL,    NULL,     NULL  },
+/* 105  i  */    {  NULL,    NULL,     NULL  },
+/* 106  j  */    {  NULL,    NULL,     NULL  },
+/* 107  k  */    {  NULL,    NULL,     NULL  },
+/* 108  l  */    {  NULL,    NULL,     NULL  },
+/* 109  m  */    {  NULL,    NULL,     NULL  },
+/* 110  n  */    {  NULL,    NULL,     NULL  },
+/* 111  o  */    {  NULL,    NULL,     NULL  },
+/* 112  p  */    {  NULL,    NULL,     NULL  },
+/* 113  q  */    {  NULL,    NULL,     NULL  },
+/* 114  r  */    {  NULL,    NULL,     NULL  },
+/* 115  s  */    {  NULL,    NULL,     NULL  },
+/* 116  t  */    {  NULL,    NULL,     NULL  },
+/* 117  u  */    {  NULL,    NULL,     NULL  },
+/* 118  v  */    {  NULL,    NULL,     NULL  },
+/* 119  w  */    {  NULL,    NULL,     NULL  },
+/* 120  x  */    {  NULL,    NULL,     NULL  },
+/* 121  y  */    {  NULL,    NULL,     NULL  },
+/* 122  z  */    {  NULL,    NULL,     NULL  },
+/* 123  {  */    { "%7b" ,   "{",      NULL  },
+/* 124  |  */    { "%7c" ,   "|",      NULL  },
+/* 125  }  */    { "%7d" ,   "}",      NULL  },
+/* 126  ~  */    { "%7e" ,   "~",      NULL  },
+/* 127  \7f */    { "%7f" ,   "\7f",       NULL  },
+/* 128  \80   */    { "%80" ,   "\80",     NULL  },
+/* 129  \81   */   { "%81" ,   "\81",      NULL  },
+/* 130  \82   */   { "%82" ,   "\82",      NULL  },
+/* 131  \83   */   { "%83" ,   "\83",      NULL  },
+/* 132  \84   */   { "%84" ,   "\84",      NULL  },
+/* 133  \85   */   { "%85" ,   "\85",      NULL  },
+/* 134  \86   */   { "%86" ,   "\86",      NULL  },
+/* 135  \87   */   { "%87" ,   "\87",      NULL  },
+/* 136  \88   */   { "%88" ,   "\88",      NULL  },
+/* 137  \89   */   { "%89" ,   "\89",      NULL  },
+/* 138  \8a   */   { "%8a" ,   "\8a",      NULL  },
+/* 139  \8b   */   { "%8b" ,   "\8b",      NULL  },
+/* 140  \8c   */   { "%8c" ,   "\8c",      NULL  },
+/* 141  \8d   */   { "%8d" ,   "\8d",      NULL  },
+/* 142  \8e   */   { "%8e" ,   "\8e",      NULL  },
+/* 143  \8f   */   { "%8f" ,   "\8f",      NULL  },
+/* 144  \90   */   { "%90" ,   "\90",      NULL  },
+/* 145  \91   */   { "%91" ,   "\91",      NULL  },
+/* 146  \92   */   { "%92" ,   "\92",      NULL  },
+/* 147  \93   */   { "%93" ,   "\93",      NULL  },
+/* 148  \94   */   { "%94" ,   "\94",      NULL  },
+/* 149  \95   */   { "%95" ,   "\95",      NULL  },
+/* 150  \96   */   { "%96" ,   "\96",      NULL  },
+/* 151  \97   */   { "%97" ,   "\97",      NULL  },
+/* 152  \98   */   { "%98" ,   "\98",      NULL  },
+/* 153  \99   */   { "%99" ,   "\99",      NULL  },
+/* 154  \9a   */   { "%9a" ,   "\9a",      NULL  },
+/* 155  \9b   */   { "%9b" ,   "\9b",      NULL  },
+/* 156  \9c   */   { "%9c" ,   "\9c",      NULL  },
+/* 157  \9d   */   { "%9d" ,   "\9d",      NULL  },
+/* 158  \9e   */   { "%9e" ,   "\9e",      NULL  },
+/* 159  \9f   */   { "%9f" ,   "\9f",      NULL  },
+/* 160     */    { "%a0" ,   "",       NULL  },
+/* 161     */    { "%a1" ,   "",       NULL  },
+/* 162     */    { "%a2" ,   "",       NULL  },
+/* 163     */    { "%a3" ,   "",       NULL  },
+/* 164     */    { "%a4" ,   "",       NULL  },
+/* 165     */    { "%a5" ,   "",       NULL  },
+/* 166     */    { "%a6" ,   "",       NULL  },
+/* 167     */    { "%a7" ,   "",       NULL  },
+/* 168     */    { "%a8" ,   "",       NULL  },
+/* 169     */    { "%a9" ,   "",       NULL  },
+/* 170     */    { "%aa" ,   "",       NULL  },
+/* 171     */    { "%ab" ,   "",       NULL  },
+/* 172     */    { "%ac" ,   "",       NULL  },
+/* 173     */    { "%ad" ,   "",       NULL  },
+/* 174     */    { "%ae" ,   "",       NULL  },
+/* 175     */    { "%af" ,   "",       NULL  },
+/* 176     */    { "%b0" ,   "",       NULL  },
+/* 177     */    { "%b1" ,   "",       NULL  },
+/* 178     */    { "%b2" ,   "",       NULL  },
+/* 179     */    { "%b3" ,   "",       NULL  },
+/* 180     */    { "%b4" ,   "",       NULL  },
+/* 181     */    { "%b5" ,   "",       NULL  },
+/* 182     */    { "%b6" ,   "",       NULL  },
+/* 183     */    { "%b7" ,   "",       NULL  },
+/* 184     */    { "%b8" ,   "",       NULL  },
+/* 185     */    { "%b9" ,   "",       NULL  },
+/* 186     */    { "%ba" ,   "",       NULL  },
+/* 187     */    { "%bb" ,   "",       NULL  },
+/* 188     */    { "%bc" ,   "",       NULL  },
+/* 189     */    { "%bd" ,   "",       NULL  },
+/* 190     */    { "%be" ,   "",       NULL  },
+/* 191     */    { "%bf" ,   "",       NULL  },
+/* 192     */    { "%c0" ,   "&Agrave;",    "A"  },
+/* 193     */    { "%c1" ,   "&Aacute;",    "A"  },
+/* 194     */    { "%c2" ,   "&Acirc;",     "A"  },
+/* 195     */    { "%c3" ,   "&Atilde;",    "A"  },
+/* 196     */    { "%c4" ,   "&Auml;",      "Ae"  },
+/* 197     */    { "%c5" ,   "&Aring;",     "A"  },
+/* 198     */    { "%c6" ,   "&AElig;",     "AE"  },
+/* 199     */    { "%c7" ,   "&Ccedil;",    "C"  },
+/* 200     */    { "%c8" ,   "&Egrave;",    "E"  },
+/* 201     */    { "%c9" ,   "&Eacute;",    "E"  },
+/* 202     */    { "%ca" ,   "&Ecirc;",     "E"  },
+/* 203     */    { "%cb" ,   "&Euml;",      "E"  },
+/* 204     */    { "%cc" ,   "&Igrave;",    "I"  },
+/* 205     */    { "%cd" ,   "&Iacute;",    "I"  },
+/* 206     */    { "%ce" ,   "&Icirc;",     "I"  },
+/* 207     */    { "%cf" ,   "&Iuml;",      "I"  },
+/* 208     */    { "%d0" ,   "&ETH;",       "Eth"  },
+/* 209     */    { "%d1" ,   "&Ntilde;",    "N"  },
+/* 210     */    { "%d2" ,   "&Ograve;",    "O"  },
+/* 211     */    { "%d3" ,   "&Oacute;",    "O"  },
+/* 212     */    { "%d4" ,   "&Ocirc;",     "O"  },
+/* 213     */    { "%d5" ,   "&Otilde;",    "O"  },
+/* 214     */    { "%d6" ,   "&Ouml;",      "Oe"  },
+/* 215     */    { "%d7" ,   "x",           "x"  },
+/* 216     */    { "%d8" ,   "&Oslash;",    "O"  },
+/* 217     */    { "%d9" ,   "&Ugrave;",    "U"  },
+/* 218     */    { "%da" ,   "&Uacute;",    "U"  },
+/* 219     */    { "%db" ,   "&Ucirc;",     "U"  },
+/* 220     */    { "%dc" ,   "&Uuml;",      "Ue"  },
+/* 221     */    { "%dd" ,   "&Yacute;",    "Y"  },
+/* 222     */    { "%de" ,   "&THORN;",     NULL  },
+/* 223     */    { "%df" ,   "&szlig;",     "ss"  },
+/* 224     */    { "%e0" ,   "&agrave;",    "a"  },
+/* 225     */    { "%e1" ,   "&aacute;",    "a"  },
+/* 226     */    { "%e2" ,   "&acirc;",     "a"  },
+/* 227     */    { "%e3" ,   "&atilde;",    "a"  },
+/* 228     */    { "%e4" ,   "&auml;",      "ae"  },
+/* 229     */    { "%e5" ,   "&aring;",     "a"  },
+/* 230     */    { "%e6" ,   "&aelig;",     "ae"  },
+/* 231     */    { "%e7" ,   "&ccedil;",    "c"  },
+/* 232     */    { "%e8" ,   "&egrave;",    "e"  },
+/* 233     */    { "%e9" ,   "&eacute;",    "e"  },
+/* 234     */    { "%ea" ,   "&ecirc;",     "e"  },
+/* 235     */    { "%eb" ,   "&euml;",      "e"  },
+/* 236     */    { "%ec" ,   "&igrave;",    "i"  },
+/* 237     */    { "%ed" ,   "&iacute;",    "i"  },
+/* 238     */    { "%ee" ,   "&icirc;",     "i"  },
+/* 239     */    { "%ef" ,   "&iuml;",      "i"  },
+/* 240     */    { "%f0" ,   "&eth;",       "eth"  },
+/* 241     */    { "%f1" ,   "&ntilde;",    "n"  },
+/* 242     */    { "%f2" ,   "&ograve;",    "o"  },
+/* 243     */    { "%f3" ,   "&oacute;",    "o"  },
+/* 244     */    { "%f4" ,   "&ocirc;",     "o"  },
+/* 245     */    { "%f5" ,   "&otilde;",    "o"  },
+/* 246     */    { "%f6" ,   "&ouml;",      "oe"  },
+/* 247     */    { "%f7" ,   "/",           "/"  },
+/* 248     */    { "%f8" ,   "&oslash;",    "o"  },
+/* 249     */    { "%f9" ,   "&ugrave;",    "u"  },
+/* 250     */    { "%fa" ,   "&uacute;",    "u"  },
+/* 251     */    { "%fb" ,   "&ucirc;",     "u"  },
+/* 252     */    { "%fc" ,   "&uuml;",      "ue"  },
+/* 253     */    { "%fd" ,   "&yacute;",    "y"  },
+/* 254     */    { "%fe" ,   "&thorn;",     NULL  },
+/* 255     */    { "%ff" ,   "&yuml;",      "y"  },
+/* 256  EOF*/    {  NULL,    NULL,          NULL  },
+};
+
+#endif /* _SUPPORT_ */
+
+
diff --git a/contrib/tweb/support_exp.h b/contrib/tweb/support_exp.h
new file mode 100644 (file)
index 0000000..9df9795
--- /dev/null
@@ -0,0 +1,68 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* support_exp.h                                                            *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - Supporting Routines              *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            December 2 1995              Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            September 7 1999           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: support_exp.h,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _SUPPORT_EXP_H_
+#define _SUPPORT_EXP_H_
+
+PUBLIC char * hex_decode ();
+PUBLIC char * hex_qdecode ();
+PUBLIC char * form_encode ();
+
+PUBLIC char * format_date ();
+PUBLIC char * friendly_dn ();
+PUBLIC char * format_time ();
+PUBLIC char * strQuoteChr();
+PUBLIC int    strlstcmp (/* char *s1, char *s2, char sep */);
+PUBLIC void   re_fail ();
+PUBLIC char *dnrcut(/*rdn, target, basecount*/);
+PUBLIC void  disp_file (/* GLOB_STRUCT glob, char *filename, FILE *fp */);
+
+PUBLIC char *elapsed();
+
+PUBLIC char *hex_html_encode();
+
+#define hex_encode(x) hex_html_encode((x), 0)
+#define char2html(x) hex_html_encode((x), 1)
+#define flatten_chars(x) hex_html_encode((x), 2)
+
+PUBLIC char * get_parentDN();
+PUBLIC char **dn2charray();
+PUBLIC char * strrQuoteChr();
+PUBLIC int exit_tweb();
+
+
+/*  dn_cmp and return codes  */
+PUBLIC int dn_cmp( /* dn1, dn2 */ );
+PUBLIC int dn_cmp_parts( /* dn1, dn2, &matched */ );
+#define DN_EQUAL       0       /*  dns are exactly equal            */
+#define DN_LESS       -1       /*  dn1 is part of dn2               */
+#define DN_GREATER     1       /*  dn2 is part of dn1               */
+#define DN_UNMATCHED  -2       /*  dns differ, matched is the same  */
+                               /*    (matched as seen from c down)  */
+
+
+#endif
+
diff --git a/contrib/tweb/tgeneral.h b/contrib/tweb/tgeneral.h
new file mode 100644 (file)
index 0000000..4eb0adc
--- /dev/null
@@ -0,0 +1,246 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* tgeneral.h.                                                              *
+*                                                                          *
+* Function:..General-Headerfile for TWEB                                   *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            May 14 1999                ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: tgeneral.h,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+
+#ifndef _TGENERAL_
+#define _TGENERAL_
+
+#define PUBLIC
+#define PRIVATE static
+
+/* For changes see file CHANGES */
+#ifdef __hpux
+#define _INCLUDE_POSIX_SOURCE
+#define _INCLUDE_XOPEN_SOURCE
+#define _INCLUDE_HPUX_SOURCE
+#define TIOCNOTTY   _IO('t', 113)
+#define getdtablesize() _NFILE
+#endif
+
+#if defined( __linux__ ) && !defined( _BSD_SOURCE )
+#define  _BSD_SOURCE
+#define  _SVID_SOURCE
+#define  _GNU_SOURCE
+#define  _POSIX_SOURCE
+#endif
+
+#include <string.h>
+#include <strings.h>
+#include <sys/time.h>
+#include <time.h>
+#include "lber.h"
+#include "ldap.h"
+#include <stdio.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <syslog.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+extern   int   errno;
+
+
+#include "strng_exp.h"
+
+#ifndef TRUE
+#define TRUE   1
+#endif
+#ifndef FALSE
+#define FALSE  0
+#endif
+#define OK     1
+#define NOTOK  0
+#define DONE -1
+#define  _TIMEOUT_LEN   31
+#define  _LOG_TIME     "%a, %d.%m.%y, %H:%M:%S"
+
+#include "init_exp.h"
+extern GLOB_STRUCT *globP;
+
+/*
+ ***************************************************************************
+ * If you are not a University of Tuebingen site, 
+ * you probably want to tailor the following:
+ ***************************************************************************
+ */
+
+/* Special code for DFN-Project AMBIX-D */
+#ifdef AMBIXGW
+
+#  define SELBST_CN          glob->selbsteintrag[0]
+#  define SELBST_CN_NAME     glob->selbsteintrag[1]
+#  define SELBST_STUDIE_ATTR glob->selbsteintrag[2]
+#  define SELBST_INSERT_MODE glob->selbsteintrag[3]
+#  define SELBST_INSERT_WHO  glob->selbsteintrag[4]
+#  define SELBST_INSERT_NO   glob->selbsteintrag[5]
+#  define SELBST_INSERT_WORK glob->selbsteintrag[6]
+#  define SELBST_INSERT_ALL  glob->selbsteintrag[7]
+#  define SELBST_INSERT_STUD glob->selbsteintrag[8]
+
+#  define MAXDN_LEN 2048
+
+extern void self_insert();
+
+#endif
+
+
+
+/* Flags for print_attr */
+#define DEFAULT        0
+#define MULTILINE      1
+#define HREF           2
+#define FINGER         3
+#define DATE           4
+#define URL            5
+#define MAILTO         6
+#define MOVETO         7
+#define BMP            8
+#define JPEG           9
+#define JPEG2GIF      10
+#define BOOLEAN       11
+#define URI           12
+#define PGPKEY        13
+#define INDEXURL      14
+#define DYNAMICDN     15
+#define REFERRAL      20
+#define PRE           21
+#define HEADER        22
+
+#ifdef TUE_TEL
+#define PHONREFSHORT  16
+#define PHONREFLONG   17
+#define TFUNCPERS     18
+#define FAXTABLE      19
+#endif
+
+
+/* Patch for hpux from ksp: */
+#ifdef __hpux
+#  define rewind(a) fflush(a)
+#endif
+
+#define G3TOXBM "cat"
+#define JPEGTOGIF "/soft/bin/djpeg -gif"
+
+/*
+ *************************************************************************
+ * The rest of this stuff probably does not need to be changed
+ *************************************************************************
+ */
+
+#define TIMEOUT        240
+#define WEB500PORT    8889
+
+#ifndef FD_SET
+#define NFDBITS         32
+#define FD_SETSIZE      32
+#define FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
+#define FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
+#define FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
+#define FD_ZERO(p)      bzero((char *)(p), sizeof(*(p)))
+#endif
+
+#define from_hex(c)    ((c>='0')&&(c<='9') ? c-'0' : (c>='A')&&(c<='F') ?\
+            c-'A'+10 : (c>='a')&&(c<='f') ? c-'a'+10 : 0)
+
+/*
+ * HTTP request we are implementing
+ */
+
+#define    UNKNOWN    0
+#define    GET        1
+#define    HEAD       2
+
+/*
+ * HTTP response status
+ */
+#define DOCUMENT_FOLLOWS  200
+#define REDIRECT          302
+#define BAD_REQUEST       400
+#define AUTH_REQUIRED     401
+#define FORBIDDEN         403
+#define NOT_FOUND         404
+#define SERVER_ERROR      500
+#define NOT_IMPLEMENTED   501
+
+#define PRINT_HTML_HEADER     (fprintf(fp, \
+"HTTP/1.0 %d Document follows\n\
+MIME-Version: 1.0\n\
+Server: %s\n\
+Date: %s\n\
+Content-Type: text/html\n\
+Last-Modified: %s\n\
+%s\n",\
+DOCUMENT_FOLLOWS, version, glob->nowtimestr, glob->nowtimestr,\
+ glob->caching ? glob->expiretimestr : "Pragma: no-cache\n" ))
+
+#define PRINT_PLAIN_HEADER     (fprintf(fp, \
+"HTTP/1.0 %d Document follows\n\
+MIME-Version: 1.0\n\
+Server: %s\n\
+Date: %s\n\
+Content-Type: text/plain\n\
+Last-Modified: %s\n\
+%s\n",\
+DOCUMENT_FOLLOWS, version, glob->nowtimestr, glob->nowtimestr,\
+ glob->caching ? glob->expiretimestr : "Pragma: no-cache\n" ))
+
+#define PRINT_REDIRECT_HEADER     (fprintf(fp, \
+"HTTP/1.0 302 Found\n\
+MIME-Version: 1.0\n\
+Server: %s\n\
+Date: %s\n\
+Location: %s\n\
+Content-Type: text/html\n\
+Last-Modified: %s\n\
+%s\n",\
+version, glob->nowtimestr, query, glob->nowtimestr,\
+ glob->caching ? glob->expiretimestr : "Pragma: no-cache\n" ))
+
+#define HTML_HEAD_TITLE "<HTML><HEAD><TITLE>%s</TITLE></HEAD><%s>"
+
+#define PRINT_HTML_FOOTER     (fprintf(fp, "</BODY></HTML>"))
+
+/* Meta-Syntax of Gateway-Switching feature */
+#define GWS        "(gw)"
+#define GWS_FORMAT "(gw-%s)"
+
+
+#define OUT_TIME 900
+
+/* Separator in UFNs */
+#define UFNSEP ","
+
+#endif /* _TGENERAL_ */
+
diff --git a/contrib/tweb/tglobal.h b/contrib/tweb/tglobal.h
new file mode 100644 (file)
index 0000000..f115592
--- /dev/null
@@ -0,0 +1,68 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* tglobal.h..                                                              *
+*                                                                          *
+* Function:..Global variables for TWEB                                     *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1996               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 29 1998           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: tglobal.h,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+
+#ifndef _TGLOBAL_
+#define _TGLOBAL_
+
+#include "lber.h"
+#include "ldap.h"
+
+
+extern int     debug;
+extern int     dosyslog;
+extern struct timeval timestore[];
+extern int items_displayed;
+
+extern int             searchaliases;
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+extern LDAPFriendlyMap      *fm;
+
+#  else
+
+extern LDAPFriendlyMap      *fm;
+
+#  endif
+#else
+
+extern FriendlyMap      *fm;
+
+#endif
+
+extern LDAPFiltDesc    *filtd;
+
+extern char    version[];
+extern char    copyright[];
+
+extern int     http;   /* HTTP-header in request -> also in reply */
+
+extern int     request;
+
+
+#endif /* _TGLOBAL */
+
+
diff --git a/contrib/tweb/tweb.c b/contrib/tweb/tweb.c
new file mode 100644 (file)
index 0000000..fcf454c
--- /dev/null
@@ -0,0 +1,179 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* tweb.c.....                                                              *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway  MAIN-Routine                      *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 31 1996           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: tweb.c,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+
+/*
+ * redesign BW 94/08/16 
+ * patched for HPUX 9.x by /KSp, 94/04/28
+ * patched for AMBIX-D and use at University of Tuebingen by /KSp,
+ * patched for always-assume-nonleaf-behaviour-and-reread-on-demand; /KSp
+ * patched for restricted listing of Tuebinger students; /KSp
+ * patched for mailto HREF in mail attribute; /KSp
+ * patched for automatic referral to Chemnitz in case of ROOT access
+ *             (AMBIX version only); /KSp
+ * patched for correct response in case of not found error; /MCl
+ * neg patched: subtree search below locality removed; /KSp
+ * patched for automatic referral to AMBIX in case of l=DFN access
+ *             (non-AMBIX version only); /KSp
+ * patched for lower case compare during access control; /KSp
+ * patched for menu-'seeAlso' in AMBIXGW; /KSp
+ * patched for pgpPubKey formatting as MULTILINE; /KSP
+ * correction of MULTILINE handling; /KSp
+ * objectClass deleted from menu list entry in html-code; /KSp
+ * patched for "Selbsteintrag" needed by AMBIX-Project /mc
+ *             last update: 95/07/07
+ *
+ * 95/07/17 changed to ANSI-C, deleted lots of compiletime-options. /mc
+ *         
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Tuebingen. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ *
+ * ----------------------------------------------------------------------
+ */
+
+#include "tweb.h"
+
+PUBLIC int main (argc, argv)
+int argc;
+char **argv;
+
+{
+    /* The Glob-structure is NOT a global variable, but is stored here for
+       all other functions !!! */
+    GLOB_STRUCT glob;
+    char lang[BUFSIZ];
+    int pid, i;
+
+    /* make glob global available */
+    globP = &glob;
+
+    /* first of all the language-parameter is scanned from the command-line
+       and is written as first value to the Glob-structure */
+    get_lang(argc, argv, lang);
+    bzero((char *) &glob, sizeof(GLOB_STRUCT));
+    glob.olang = strdup(lang);
+
+    /* Now start a process for each language and terminate the super-process */
+    for(i=0; i<strlen(lang); i++){
+
+        /* memorize the sub-process-language */
+        *glob.lang = lang[i];
+
+        switch( pid = fork() ) {
+
+        /* the Sub-Process */
+        case  0:
+            do_child(argc, argv,lang, &glob);
+            break;
+
+        /* A Sub-Process could not be created !!! */
+        case -1:
+            perror( "fork" );
+            break;
+
+        /* the Parent-Process */
+        default:
+            if ( debug )
+                fprintf( stderr, "forked child %d\n", pid );
+            break;
+        }
+    }
+
+       return( 0 );
+}
+/* end of function: main */
+    
+
+/**
+ **  do_child()
+ **
+ **    Main-Function for the working-processes; until now only the
+ **    language is initialized. The rest of the configuration 
+ **    must be scanned now.
+ **/
+
+PRIVATE void do_child(argc, argv,lang, glob)
+int argc;
+char **argv;
+char *lang;
+GLOB_STRUCT *glob;
+
+{
+    FILE *fp = NULL;
+    char filename[BUFSIZ];
+
+    /*  read language-independent (.rc) and -dependent (.conf) configuration */
+    init(argv, lang, glob);
+
+    /*  read commandline-parameter (they overwrite conf) */
+    getopts (argc, argv, glob);
+
+    /*  If debug-Mode: Configuration Output */
+    if (debug) {
+
+        sprintf(filename, "%s.debug", glob->myname);
+        fp =fopen(filename, "a");
+        fprintf(fp, "\n\n\n#####%s.%s-log Date: %s\n\n",
+                           glob->myname, glob->lang, format_time(NULL));
+        output(fp, glob, FALSE);
+
+    }
+
+    /*  read language-strings (from .lang) and write out if desired */
+    langinit(glob);
+
+    if (debug) {
+
+        langoutput(fp, glob, FALSE);
+        fclose(fp);
+
+    }
+
+    /*  Final Configuration-Test */
+    check(glob);
+
+    /*  If dynamic Gateway-Switching is enabled the language-dependent
+        recognition-string for the meta-Syntax must be fixed
+        (language-independent recognition-string is given in Macro GWS ) */
+    if(glob->gw_switch->dynamic) {
+        char strbuf[BUFSIZ];
+
+        sprintf(strbuf, GWS_FORMAT, glob->la[0]);
+        glob->gw_switch->lagws = strdup(strbuf);
+    }
+
+    /*  and now start the Gateway ... */
+    start_server(glob);
+
+}
+/* end of function: do_child */
+
+
diff --git a/contrib/tweb/tweb.h b/contrib/tweb/tweb.h
new file mode 100644 (file)
index 0000000..fe1d49e
--- /dev/null
@@ -0,0 +1,72 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* tweb.h.....                                                              *
+*                                                                          *
+* Function:..Header-File for TWEB-SOFTWARE                                 *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            December 31 1998           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: tweb.h,v 1.6 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+
+#ifndef _TWEB_
+#define _TWEB_
+
+
+#include "tgeneral.h"
+#include "init_exp.h"
+#include "server_exp.h"
+#include "support_exp.h"
+
+PRIVATE void do_child();
+int    debug;
+int    dosyslog = 0;
+
+GLOB_STRUCT *globP;
+
+int            searchaliases = 1;
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+LDAPFriendlyMap     *fm = NULL;
+
+#  else
+
+LDAPFriendlyMap     *fm = NULL;
+
+#  endif
+#else
+
+FriendlyMap     *fm = NULL;
+
+#endif
+
+LDAPFiltDesc   *filtd;
+
+extern char    version[];
+
+int    http = 1;       /* HTTP Version ??? */
+
+int    request = UNKNOWN;
+
+
+
+#endif /* _TWEB_ */
+
+
diff --git a/contrib/tweb/x500.c b/contrib/tweb/x500.c
new file mode 100644 (file)
index 0000000..a8a02f7
--- /dev/null
@@ -0,0 +1,2164 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* x500.c.....                                                              *
+*                                                                          *
+* Function:..WorldWideWeb-X.500-Gateway - X.500-Access-Routines            *
+*            Based on web500gw.c 1.3 written by Frank Richter, TU Chemmniz *
+*            which is based on go500gw by Tim Howes, University of         *
+*            Michigan  - All rights reserved                               *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            August 16 1995               Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            September 10 1999          ZZZZZ  DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: x500.c,v 1.8 1999/09/10 15:01:20 zrnsk01 Exp $
+ *
+ */
+
+#include "tgeneral.h"
+#include "tglobal.h"
+#include "x500.h"
+#include "init_exp.h"
+#include "support_exp.h"
+#include "html_exp.h"
+
+#ifdef TUE_TEL
+#include "tueTel_exp.h"
+#endif
+
+#if defined( TUE_TEL ) || defined( AMBIXGW )
+#include "resort_exp.h"
+#endif
+
+
+PRIVATE int compare(a,b)
+DNLIST **a, **b;
+{
+        return strcmp((*a)->string,(*b)->string);
+}
+/* end of function: compare */
+
+
+PRIVATE char * pick_oc(oclist)
+char **oclist;
+{
+    int    i;
+
+    if ( oclist == NULL )
+        return( "unknown" );
+
+    for ( i = 0; oclist[i] != NULL; i++ ) {
+        if ( strcasecmp( oclist[i], "top" ) != 0 &&
+            strcasecmp( oclist[i], "quipuObject" ) != 0 &&
+            strcasecmp( oclist[i], "quipuNonLeafObject" ) != 0 )
+            return( str_tolower (oclist[i]) );
+    }
+
+    return( "unknown" );
+}
+/* end of function: pick_oc */
+
+
+PUBLIC char * make_oc_to_string(oc)
+char **oc;
+{
+    static char oc_res[BUFSIZ];
+    int i;
+
+    if(!oc) return(NULL);
+
+    *oc_res = '|';
+    *(oc_res+1) = '\0';
+    for(i = 0; oc[i] && *oc[i]; i++) {
+        sprintf(oc_res, "%s%s|", oc_res, oc[i]);
+    }
+    return(str_tolower (oc_res));
+}
+/* end of function: make_oc_to_string */
+
+
+PUBLIC void do_xtend(ld, fp, query, filter, glob)
+LDAP *ld;
+FILE *fp;
+char *query;
+char *filter;
+GLOB_STRUCT *glob;
+{
+    char *strptr, dn[BUFSIZ], command[BUFSIZ], extension[BUFSIZ];
+
+    strptr = strchr(query, '?');
+    *strptr++ = '\0';
+    strcpy(dn, query);
+    strcpy(command, strptr);
+    if( ( strptr = strchr(command, '#')) ) {
+        *strptr++ = '\0';
+        strcpy(extension, strptr);
+    }
+    
+    if(!strcasecmp(command, "MENU")){
+        glob->tables_marker = strdup(extension);
+        do_menu(ld, fp, dn, "", glob);
+    }
+    
+#ifdef TUE_TEL
+    if(!strcasecmp(command, "PHONEBOOK")){
+        do_phonebook(ld, fp, strstr(dn, "ou=TELEFONBUCH") ? dn
+                             : NULL, extension, glob, 1);
+    }
+#endif
+
+}
+/* end of function: do_xtend */
+
+PUBLIC void do_menu(ld, fp, dn, filter, glob)
+LDAP *ld;
+FILE *fp;
+char *dn;
+char *filter;
+GLOB_STRUCT *glob;
+{
+    int             rc;
+    LDAPMessage     *pres;
+    struct timeval  timeout;
+    static char     *sattrs[] = { "objectClass", "labeledURI",
+                                     "aliasedObjectName", "mail",
+                                     "cn", "telephonenumber",
+#ifdef TUE_TEL
+                                     "tat_ton", "tat_refphone",
+#endif
+                                     0 };
+    static char **attrs = NULL;
+    int counter = 0;
+    pSEARCH_ONLY_LINE so_ptr;
+    char        la_url[BUFSIZ];
+    int count;
+    char           *ufn;
+
+    if(!attrs)
+        attrs = (char**) charray_dup(sattrs);
+
+    charray_merge(&attrs, glob->sort_attribs);
+
+    if(glob->raw_data)
+        charray_merge(&attrs, glob->raw_attrs);
+
+    for(so_ptr = glob->search_only; so_ptr; so_ptr = so_ptr->next) {
+        if (dn_cmp(dn, so_ptr->dn) == 0) {
+            break;
+        }
+    }
+
+    if(!so_ptr) {
+
+        timeout.tv_sec = glob->timeout;
+        timeout.tv_usec = 0;
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+        ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS );
+
+#  endif
+#else
+        ld->ld_deref = LDAP_DEREF_FINDING;
+#endif
+
+        if ( (rc = ldap_search_st( ld, dn, LDAP_SCOPE_ONELEVEL,
+            glob->menu_filter, attrs, 0, &timeout, &pres )) != LDAP_SUCCESS
+            && rc != LDAP_SIZELIMIT_EXCEEDED 
+                && rc != LDAP_INSUFFICIENT_ACCESS ) {
+            do_error(fp, rc, NOT_FOUND, glob);
+            return;
+        }
+
+        if (rc == LDAP_SIZELIMIT_EXCEEDED) glob->persRestricted = TRUE;
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+        ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS );
+
+#  endif
+#else
+        ld->ld_deref = LDAP_DEREF_ALWAYS;
+#endif
+
+        if ((count = (ldap_count_entries(ld, pres) )) < 1) {
+            ldap_msgfree (pres);
+            do_read (ld, fp, dn, 0, glob);
+            return;
+        }
+        items_displayed = count;
+    }
+
+    if (http == 1) {
+        PRINT_HTML_HEADER;
+    }
+    if (request == HEAD) {
+        fflush(fp);
+        exit_tweb (1);
+    }
+    fprintf( fp, HTML_HEAD_TITLE, ufn = friendly_dn(dn, glob), glob->la[100]);
+    if ( ufn ) free( ufn );
+
+    if (dn_cmp(dn, glob->basedn->dn) == 0)
+        disp_file(glob, glob->basedn->head, fp);
+    else if(so_ptr && so_ptr->head)
+        disp_file(glob, so_ptr->head, fp);
+    else
+        disp_file(glob, glob->header, fp);
+
+#ifdef TUE_TEL
+    fprintf (fp, "\n<A NAME=\"phonebook=Telefonbuch\"></A>\n");
+    fprintf (fp, "\n<A NAME=\"phonebook\"></A>\n");
+#endif
+
+    make_la_buttons("M", fp, ld, dn, la_url, glob );
+
+    make_header( fp, dn, 0, glob);
+
+    print_rdn(fp, dn, glob);
+
+    make_search_box(fp, ld, dn, glob);
+
+#ifdef AMBIXGW
+    /* Button leading to cgi-script */
+    if( glob->form_button && !glob->selbsteintrag[0]){
+        char  **oc;
+        LDAPMessage    *res;
+        struct timeval    timeout;
+        static char    *attrs[] = { "objectClass", 0 };
+
+        timeout.tv_sec = glob->timeout;
+        timeout.tv_usec = 0;
+        if ( ldap_search_st( ld, dn, LDAP_SCOPE_BASE, "objectClass=*",
+            attrs, 0, &timeout, &res ) != LDAP_SUCCESS ) {
+            exit_tweb( 1 );
+        }
+        oc = ldap_get_values( ld, ldap_first_entry( ld, res ), "objectClass" );
+
+        disp_form_button(0, oc, dn, ld, fp, glob);
+    }
+
+    /* check to see if selfinsert-buttons are appropriate here */
+    if(glob->selbsteintrag[0])
+        self_insert(ld,fp,dn,glob);
+#endif
+
+#ifdef TUE_TEL
+    /* Named link to skip header */
+    fprintf (fp, "\n<A NAME=\"pure-data\"></A>\n");
+#endif
+
+    fprintf(fp, glob->la[101]);
+
+
+    if(!so_ptr) {
+
+        /*  DO_MENU  */
+        counter = sort_result( ld, pres, dn, glob);
+
+        /* get time for performance log */
+        gettimeofday(&timestore[4], NULL);
+
+        list_output(fp, glob);
+
+        if ( ldap_result2error( ld, pres, 1 ) == LDAP_SIZELIMIT_EXCEEDED
+            || glob->restricted )
+            do_sizelimit(fp, 1, glob);
+
+        if(glob->legal && !glob->legal_top)
+            fprintf (fp, "%s\n%s\n", glob->la[101],
+                            glob->is_proxy ? glob->la[104] : glob->la[65]);
+    }
+
+    if (dn_cmp(dn,glob->basedn->dn) == 0)
+        disp_file(glob, glob->basedn->foot, fp);
+    else if(so_ptr && so_ptr->foot)
+        disp_file(glob, so_ptr->foot, fp);
+    else
+        disp_file(glob, glob->footer, fp);
+
+    PRINT_HTML_FOOTER;
+}
+/* end of function: do_menu */
+
+
+PRIVATE int make_scope(ld, dn, glob)
+LDAP *ld;
+char *dn;
+GLOB_STRUCT *glob;
+{
+    int        scope, idx;
+    char        **oc;
+    LDAPMessage    *res;
+    struct timeval    timeout;
+    static char    *attrs[] = { "objectClass", 0 };
+
+    if ( strcmp( dn, "" ) == 0 )
+        return( LDAP_SCOPE_ONELEVEL );
+
+    timeout.tv_sec = glob->timeout;
+    timeout.tv_usec = 0;
+    if ( ldap_search_st( ld, dn, LDAP_SCOPE_BASE, "objectClass=*",
+        attrs, 0, &timeout, &res ) != LDAP_SUCCESS ) {
+        return( -1 );
+    }
+
+    oc = ldap_get_values( ld, ldap_first_entry( ld, res ), "objectClass" );
+
+    /* set scope according to configured object-classes */
+    scope = LDAP_SCOPE_ONELEVEL;
+    for(idx = 0; glob->subtree_search && glob->subtree_search[idx]; idx++)
+        if( charray_inlist( oc, glob->subtree_search[idx]))
+            scope = LDAP_SCOPE_SUBTREE;
+
+    ldap_value_free( oc );
+    ldap_msgfree( res );
+
+    return( scope );
+}
+/* end of function: make_scope */
+
+PUBLIC int do_search(ld, fp, query, glob)
+LDAP *ld;
+FILE *fp;
+char *query;
+GLOB_STRUCT *glob;
+{
+    int        scope;
+    char        *base, *filter, *strptr;
+    char        *filtertype;
+    int        count = 0, rc;
+    struct timeval    timeout;
+    LDAPFiltInfo    *fi;
+    LDAPMessage    *e, *res = NULL;
+    static char    *attrs[] = { "objectClass", "cn", "sn", "labeledURI", 
+                                 "aliasedObjectName", 0 };
+    int        counter = 0;
+    char               *ufn;
+    char title[BUFSIZ], title2[BUFSIZ];
+
+    glob->no_browse = FALSE;
+    
+/* query string: base-DN?[OS]=filter 
+ *     search onelevel <--||--> search subtree 
+ */
+    if ( (filter = strchr( query, '?' )) == NULL ) {
+        explain_error( fp, glob->la[89], BAD_REQUEST, glob );
+        exit_tweb( 1 );
+    }
+    *filter++ = '\0';
+    if (*filter == '\0' || *(filter+1) != '=') {
+        explain_error( fp, glob->la[90], BAD_REQUEST, glob);
+        exit_tweb( 1 );
+    }
+    if( ( strptr = strchr(filter, '&')) )
+        *strptr = '\0';
+    if( ( strptr = strchr(filter, '*')) )
+        *strptr = '\0';
+    if (*filter == 'S') {
+        scope = LDAP_SCOPE_SUBTREE;
+    } else {
+        scope = LDAP_SCOPE_ONELEVEL;
+    }
+    filter += 2;
+    if (*filter == '\0') {
+        explain_error( fp, glob->la[92], BAD_REQUEST, glob);
+        exit_tweb( 1 );
+    }
+    /* deutsche Umlaute plaetten */
+    filter = flatten_chars(filter);
+
+    base = query;
+
+    filtertype = (scope == LDAP_SCOPE_ONELEVEL ? "web500gw onelevel" :
+        "web500gw subtree");
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+        ldap_set_option( ld, LDAP_OPT_DEREF,
+                          scope == LDAP_SCOPE_ONELEVEL ? LDAP_DEREF_FINDING :
+                                   LDAP_DEREF_ALWAYS );
+
+#  endif
+#else
+    ld->ld_deref = (scope == LDAP_SCOPE_ONELEVEL ? LDAP_DEREF_FINDING :
+                                                  LDAP_DEREF_ALWAYS);
+#endif
+
+    timeout.tv_sec = glob->timeout;
+    timeout.tv_usec = 0;
+
+    for (fi=ldap_getfirstfilter( filtd, filtertype, filter ); fi != NULL;
+        fi = ldap_getnextfilter( filtd ) ) {
+        if ( (rc = ldap_search_st( ld, base, scope, fi->lfi_filter,
+            attrs, 0, &timeout, &res )) != LDAP_SUCCESS
+            && rc != LDAP_SIZELIMIT_EXCEEDED ) {
+
+            if (dosyslog) {
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+                int ld_errno;
+
+                ldap_get_option(ld, LDAP_OPT_ERROR_NUMBER, &ld_errno);
+                syslog (LOG_INFO, "ldap_search_st(): %s",
+                    ldap_err2string ( ld_errno ));
+
+#  endif
+#else
+                syslog (LOG_INFO, "ldap_search_st(): %s",
+                    ldap_err2string (ld->ld_errno));
+#endif
+
+            }
+
+            do_error(fp, rc, NOT_FOUND, glob);
+            return( 1 );
+        }
+
+        if ( res && (count = ldap_count_entries( ld, res )) != 0 ) {
+
+            break;
+        }
+
+    }
+    items_displayed = count;
+
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+        ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS );
+
+#  endif
+#else
+    ld->ld_deref = LDAP_DEREF_ALWAYS;
+#endif
+
+    if ( count == 0 ) {
+
+        if (http == 1) {
+            fprintf(fp, "HTTP/1.0 404 %s \n", glob->la[6]); 
+                        fprintf(fp, "MIME-Version: 1.0\n");
+                        fprintf(fp, "Content-Type: text/html\n\n");
+        }
+
+        if (request == HEAD) {
+            fflush(fp);
+            exit_tweb (1);
+        }    
+
+        sprintf( title, "%s %s", filter, glob->la[36]);
+        fprintf( fp, HTML_HEAD_TITLE, title, glob->la[100]);
+
+        disp_file(glob, glob->header, fp);
+
+        fprintf( fp,
+ "<H2>%s</H2> %s <STRONG>%s</STRONG> in <STRONG>%s</STRONG></BODY></HTML>\n\n",
+                     glob->la[37], glob->la[38], filter, 
+                     (strlen(base) == 0) ? glob->la[77] : ldap_dn2ufn(base));
+                fflush(fp);
+        return( 0 );
+    }
+    else if ( count == 1 ) {
+        e = ldap_first_entry( ld, res );
+        if ( e != NULL ) {
+            char *dn, **oc;
+            oc = ldap_get_values(ld, e, "objectClass");
+            dn = ldap_get_dn(ld, e);
+            if ( dn ) {
+
+                /* GW-Switch if one search-result and dyn-URL by
+                   PRINT_REDIRECT_HEADER */
+        if ( glob->gw_switch->dynamic) {
+                    char **uri, query[10*BUFSIZ];
+                    int j;
+
+                    uri = ldap_get_values( ld, e, "labeledURI" );
+                    for(j=0; uri && uri[j] && *uri[j]; j++) {
+                        char *sp;
+
+                        if( ( sp = strchr(uri[j], ' ')) ) {
+                            *sp++ = '\0';
+                            if(strstr(sp, glob->gw_switch->lagws)) {
+                                /*sprintf(query, "%s/M%s", uri[j], dn);*/
+                                strcpy(query, uri[j]);
+                                hex_decode(query);
+                                PRINT_REDIRECT_HEADER;
+                                PRINT_HTML_FOOTER;
+                                exit_tweb(0);
+                            }
+                        }
+                    }
+                }
+                /* By default on one result: */
+                do_menu(ld, fp, dn, "", glob);
+                return (0);
+            }
+        }
+    }
+
+    if (http == 1)
+        PRINT_HTML_HEADER;
+    if (request == HEAD) {
+        fflush(fp);
+        exit_tweb (1); 
+        }
+
+    sprintf( title2, "%s %s", glob->la[39], filter);
+    fprintf( fp, HTML_HEAD_TITLE, title2, glob->la[100]);
+
+    disp_file(glob, glob->header, fp);
+
+    ufn = friendly_dn(base, glob);
+    fprintf( fp, "%s <STRONG>\"%s\"</STRONG> in <STRONG>\"%s\"</STRONG> ",
+                 glob->la[40], filter, ufn );
+    if ( ufn ) free( ufn );
+
+    if(!glob->noauth)
+        fprintf( fp, "(%d %s)<br>", count, 
+                         count == 1 ? glob->la[70] : glob->la[71]);
+
+      /*  DO_SEARCH  */
+      counter = sort_result( ld, res, base, glob);
+
+      /* get time for performance log */
+      gettimeofday(&timestore[4], NULL);
+
+     list_output(fp, glob);
+
+    if ( ldap_result2error( ld, res, 1 ) == LDAP_SIZELIMIT_EXCEEDED )
+        do_sizelimit(fp, 0, glob);
+
+    if(glob->legal && !glob->legal_top)
+        fprintf (fp, "%s\n%s\n", glob->la[101],
+                            glob->is_proxy ? glob->la[104] : glob->la[65]);
+    
+    disp_file(glob, glob->footer, fp);
+
+    PRINT_HTML_FOOTER;
+
+    return( 0 );
+
+}
+/* end of function: do_search */
+
+
+PRIVATE pDISPLAY
+find_dPtr( displayList, displayType )
+pDISPLAY   displayList;
+char      *displayType;
+{
+    pDISPLAY  dis;
+
+    for ( dis = displayList; dis; dis = dis->next ) {
+
+        if ( !strcasecmp( dis->ocs, displayType )) return( dis );
+
+    }
+
+    return( NULL );
+
+}  /*  find_dPtr  */
+
+
+PUBLIC void do_read(ld, fp, dn, amore, glob)
+LDAP *ld;
+FILE *fp;
+char *dn;
+int amore;
+GLOB_STRUCT *glob;
+{
+    int        rc, j;
+    char        **val, **s;
+    char        *rdn;
+    LDAPMessage    *res, *e;
+    struct timeval    timeout;
+    int        classFound;
+    pDISPLAY    d_ptr = NULL;
+    pDISPLAY_LINE    dis_ptr = NULL;
+    SORT_LINE *s_ptr;
+    char            la_url[BUFSIZ];
+    char      *ufn;
+    char already_displayed[BUFSIZ];
+    int header_attr_mode = 0;
+
+#if defined( TUE_TEL ) || defined( AMBIXGW )
+       char      *parentDN;
+#endif
+
+
+    *already_displayed = ':';
+    *(already_displayed+1) = '\0';
+
+
+    timeout.tv_sec = glob->timeout;
+    timeout.tv_usec = 0;
+
+
+    if ( (rc = ldap_search_st( ld, dn, LDAP_SCOPE_BASE, "objectClass=*",
+        NULL, 0, &timeout, &res )) != LDAP_SUCCESS ) {
+        do_error(fp, rc, NOT_FOUND, glob);
+        return;
+    }
+
+
+    if ( (e = ldap_first_entry( ld, res )) == NULL ) {
+        do_error(fp, -2, SERVER_ERROR, glob);
+        return;
+    }
+
+    val = ldap_get_values( ld, e, "objectClass" );
+
+#if defined( TUE_TEL ) || defined( AMBIXGW )
+    /* toc_derefalias: read entry, aliasedObjectName is referring to */
+    if(charray_inlist(val, "toc_derefalias")){
+        char **new_dn;
+
+        new_dn = ldap_get_values( ld, e, "aliasedObjectName" );
+        if(new_dn && new_dn[0]) {
+            do_read(ld, fp, new_dn[0], amore, glob);
+            return;
+        }
+    }
+
+    /*  before displaying check for dynamic changes of the sorting parms  */
+       parentDN = get_parentDN( dn );
+    dynamicResort( ld, glob, parentDN );
+#endif
+
+        /* 
+         * check for objectClass via displayLists-Table which List
+         * of attributes we want to use.
+         */
+    classFound = -1;
+    for(s_ptr = glob->sort; s_ptr; s_ptr = s_ptr->next) {
+               char   buf[BUFSIZ];
+
+        d_ptr = s_ptr->display_class_ptr;
+
+        for( j=0; val[j]; j++ ) {
+            sprintf( buf, "|%s|", str_tolower( val[j] ));
+
+            if ( strstr( s_ptr->object_class, buf )) {
+                 classFound = 1;
+                 break;
+            }
+        }
+        if (classFound == 1) break;
+    }
+
+#if defined( TUE_TEL ) || defined( AMBIXGW )
+    dynamicDisplay( ld, glob, parentDN,
+                            s_ptr ? s_ptr->display_class : "default" );
+#endif
+
+    if((classFound == -1) && (glob->default_display_type)) {
+        d_ptr = glob->default_display_type;
+        classFound = 1;
+    }
+
+    /* if we did not find a fitting objectClass, simply return */
+    if(classFound == -1) {
+
+        fprintf( fp, HTML_HEAD_TITLE, glob->la[22], glob->la[100]);
+        fprintf( fp, "\n%s</BODY></HTML>", glob->la[41]);
+        return;
+    }
+
+    /*  is the display description defined already  */
+    if ( !d_ptr && (( d_ptr = find_dPtr( glob->display,
+                                s_ptr->display_class )) == NULL )) {
+
+        if ( dosyslog )
+            syslog( LOG_INFO,
+                    "do_read(%08d): couldn't find display type <%s> -- FATAL.",
+                    glob->svc_cnt, s_ptr->display_class );
+
+        fprintf( fp, HTML_HEAD_TITLE, glob->la[22], glob->la[100]);
+        fprintf( fp, "\n%s</BODY></HTML>", glob->la[41]);
+        return;
+
+    }
+
+    /*  now we can point to the final display screen  */
+    dis_ptr = ( amore ? d_ptr->second_page : d_ptr->first_page );
+
+    if (http == 1) PRINT_HTML_HEADER;
+    if (request == HEAD) {                
+        fflush(fp);
+        exit_tweb (1);
+    }
+
+    dn = ldap_get_dn( ld, e );
+
+        if ( strcmp( dn, "" ) != 0 ) {  /* Not the root */
+        s = ldap_explode_dn( dn, 1 );
+                if ( s[1] == NULL )   /* toplevel */
+            rdn = ldap_friendly_name( glob->friendlyfile, s[0], &fm );
+        else 
+            rdn = s[0];
+    } else
+        rdn = glob->la[77];
+
+    fprintf( fp, HTML_HEAD_TITLE, ufn = friendly_dn( dn, glob ),
+                                    glob->la[100] );
+    if ( ufn ) free( ufn );
+
+    disp_file(glob, glob->header, fp);
+
+    if ( !glob->ldap_referral_mode ) {
+
+        make_la_buttons("R", fp, ld, dn, la_url, glob);
+        make_header( fp, dn, 0, glob );
+    } else {
+        fprintf( fp, glob->la[105]);
+    }
+    fprintf( fp, "<DL>");
+
+    fprintf( fp, glob->la[101]);
+
+    /* don't display rdn if first attribute is in header-mode */
+    if ( dis_ptr->ty == HEADER )
+        header_attr_mode = 1;
+    if( ( dis_ptr && !header_attr_mode ) || !dis_ptr ) {
+        if(glob->strip_pin && strstr(glob->strip_pin, d_ptr->ocs)) {
+            char rdnstriped[BUFSIZ];
+
+            strcpy( rdnstriped, rdn);
+            trimright (rdnstriped, " 1234567890");
+            fprintf( fp, "<H1>%s</H1>", rdnstriped );
+        } else
+            fprintf( fp, "<H1>%s</H1>", rdn);
+    }
+
+    if(glob->ind_attrs)
+        get_ref_attrs( ld, dn, e, glob );
+
+    /* get time for performance log */
+    items_displayed = 1;
+    gettimeofday(&timestore[4], NULL);
+
+    if ( header_attr_mode )
+        rdn = NULL;
+
+    for( ; dis_ptr; dis_ptr = dis_ptr->next) {
+
+        if(glob->ind_attrs){
+
+            int n, m, iatlabel=0, replace=0;
+            IND_ATTR_ARR *vnodes;
+
+#ifdef TUE_TEL
+            int retcode = 0;
+
+            /* Function Mode */
+            retcode = displayTueRefPhone( ld, fp, dn, dis_ptr,
+                        e, rdn, glob, already_displayed );
+#endif
+            if(strstr(already_displayed, dis_ptr->label)) {
+                continue;
+            }
+
+            vnodes = glob->ind_attrs->valid_nodes;
+
+            for(n=0; vnodes && vnodes[n].key && *(vnodes[n].key) ;  n++) {
+
+                if(!strcasecmp(vnodes[n].attr, dis_ptr->attribute)) {
+
+                    for(m=0; vnodes[n].e[m];  m++)
+                        print_attr( vnodes[n].ld, fp, dn,
+                               m==0 ? dis_ptr->label : "", dis_ptr->attribute,
+                               vnodes[n].e[m], dis_ptr->ty, rdn, glob);
+
+                    iatlabel = 1;
+                    if(vnodes[n].replace)
+                        replace=1;
+
+                }
+
+            }
+            if( iatlabel && !replace)
+                print_attr( ld, fp, dn, "",
+                   dis_ptr->attribute, e, dis_ptr->ty, rdn, glob);
+
+            if(!iatlabel)
+                print_attr( ld, fp, dn, dis_ptr->label,
+                   dis_ptr->attribute, e, dis_ptr->ty, rdn, glob);
+
+        } else {
+            print_attr( ld, fp, dn, dis_ptr->label,
+               dis_ptr->attribute, e, dis_ptr->ty, rdn, glob);
+        }
+    }
+
+
+    if ( !amore && d_ptr && d_ptr->second_page ) {
+
+        fprintf( fp, "</DL><A HREF=\"/L%s\"><B>%s</B></A>\n",
+                     hex_encode(dn), glob->la[42]);
+
+
+    }
+    fprintf( fp, "</DL>\n");
+
+    if (strcasecmp(dn + strlen(dn) - strlen(glob->basedn->dn),
+            glob->basedn->dn) == 0) {
+
+        pMODIF  p_mod;
+        char   *aoc;
+        char  **oc;
+
+        aoc = make_oc_to_string(oc = ldap_get_values( ld, e, "objectClass" ));
+
+        if(!strlstcmp (aoc, glob->no_modify, '|')) {
+          for (p_mod = glob->modify; aoc && p_mod; p_mod = p_mod->next) {
+            if (strlstcmp (aoc, p_mod->ocs, '|')) {
+                fprintf( fp, "%s<TT>%s</TT><P><FORM ACTION=\"F%s\">\n",
+                              glob->la[101], glob->la[43], hex_encode(dn));
+                fprintf (fp, "%s <INPUT TYPE=\"password\" ",
+                              glob->la[44]);
+                fprintf (fp, "NAME=\"userPassword\"><BR>%s  ",
+                              glob->la[45]);
+                fprintf (fp, "<INPUT TYPE=\"submit\" VALUE=\"%s\">",
+                              glob->la[47]);
+                fprintf (fp, " %s. </FORM>\n",
+                              glob->la[48]);
+                break;
+            }
+          }
+        }
+
+        ldap_value_free( oc );
+
+    }
+
+    /* Button leading to cgi-script */
+    if( glob->form_button ){
+        char  **oc;
+
+        oc = ldap_get_values( ld, e, "objectClass" );
+        disp_form_button(1, oc, dn, ld, fp, glob);
+    }
+
+    disp_file(glob, glob->footer, fp);
+
+    PRINT_HTML_FOOTER;
+
+}
+/* end of function: do_read */
+
+PRIVATE void disp_form_button(read_menu, oc, dn, ld, fp, glob)
+int read_menu;
+char  **oc;
+char *dn;
+LDAP *ld;
+FILE *fp;
+GLOB_STRUCT *glob;
+{
+    pFORM_BUTTON fo_ptr;
+    char dn_used[BUFSIZ], button_label[BUFSIZ];
+
+#ifdef AMBIXGW
+    char *who_val;
+    char  **selfInsertWho = NULL;
+    char  **studie = NULL;
+    int selfInsReadFlag = 0;
+#endif
+
+    for(fo_ptr = glob->form_button; fo_ptr; fo_ptr = fo_ptr->next) {
+        if(read_menu != fo_ptr->read_menu ||
+                     ( !charray_inlist(oc, fo_ptr->object_class)
+                       && strncasecmp( "cn=", fo_ptr->object_class, 3 ) ) )
+            continue;
+        strcpy(dn_used, dn);
+        strcpy(button_label, fo_ptr->button_label);
+
+#ifdef AMBIXGW
+        /* new-AMBIX cn=Selbst-Eintrag etc. support */
+        /* object-class field contains here cn=xyz e.g. cn=Selbst-Eintrag */
+        if ( !strncasecmp( "cn=", fo_ptr->object_class, 3 )) {
+            char dn_buf[BUFSIZ];
+            LDAPMessage    *res, *e;
+            struct timeval    timeout;
+            static char    *attrs[] = { "objectClass", "selfInsertWho",
+                                         "studie", 0 };
+
+            /* cn=Selbsteintrag nur einmal lesen */
+            if (!selfInsReadFlag ) {
+                selfInsReadFlag = 1;
+
+                timeout.tv_sec = glob->timeout;
+                timeout.tv_usec = 0;
+
+                sprintf(dn_buf, "%s,%s", fo_ptr->object_class, dn);
+                if (ldap_search_st( ld, dn_buf, LDAP_SCOPE_BASE, "objectClass=*",
+                    attrs, 0, &timeout, &res ) != LDAP_SUCCESS )
+                        continue;
+                if(( e = ldap_first_entry( ld, res )) == NULL )
+                        continue;
+
+                selfInsertWho = ldap_get_values( ld, e, "selfInsertWho" );
+                studie = ldap_get_values( ld, e, "studie" );
+            }
+
+            if ( (who_val = strchr(button_label, '|')))
+                *who_val++ = '\0';
+
+            if ( !who_val )
+                continue;
+
+            if ( !selfInsertWho || !selfInsertWho[0] )
+                        continue;
+
+            /* exception for all + studiedn != dn -> two buttons stud + ang */
+            if ( strcasecmp(selfInsertWho[0], who_val ) &&
+                 !(!strcasecmp(selfInsertWho[0], "all") && studie && studie[0] && dn_cmp(dn, studie[0]) && strcasecmp(who_val, "all")))
+                        continue;
+
+            /* filter for exception all-button */
+            if( studie && studie[0] && dn_cmp(dn, studie[0]) && !strcasecmp(selfInsertWho[0], "all") && !strcasecmp(who_val, "all") )
+                        continue;
+
+            if(!strcasecmp(who_val, "stud" ) && studie && studie[0]
+               && dn_cmp(dn, studie[0]))
+                strcpy(dn_used, studie[0]);
+        }
+#endif
+
+        fprintf (fp, "<FORM METHOD=%s ACTION=%s>\n", fo_ptr->method,
+                      fo_ptr->script_url);
+        fprintf (fp, "%s\n<INPUT type=hidden name=\"%s\" value=\"%s\">\n",
+                      fo_ptr->text, fo_ptr->dn_name, hex_encode(dn_used));
+        fprintf (fp, "<INPUT TYPE=\"submit\" name=\"%s\" value=\"%s\">\n",
+                      fo_ptr->form_name, button_label);
+        fprintf (fp, "</FORM>\n");
+    }
+}
+/* end of function: disp_form_button */
+
+
+PUBLIC void do_form(ld, fp, query, glob)
+LDAP *ld;
+FILE *fp;
+char *query;
+GLOB_STRUCT *glob;
+{
+        int             rc, count;
+        char            *dn = query, *pw;
+        char            *ufn;
+        char            *a;
+        LDAPMessage     *res, *e;
+        struct timeval  timeout;
+        pMODIFY_LINE mod_ptr;
+        char title[BUFSIZ];
+
+
+        if ( (pw = strchr( dn, '?' )) == NULL ) {
+                fprintf( fp, "%s<br>", glob->la[49]);
+                exit_tweb( 1 );
+        }
+        *pw++ = '\0';
+        if (strncmp(pw, "userPassword=", 13) == 0)
+                pw += 13;
+        else {
+                fprintf( fp, "%s %s!<br>", glob->la[50], pw);
+                exit_tweb ( 1 );
+        }
+    if (strlen(pw) == 0) {
+        /* we need a password for simple auth */
+        do_error( fp, LDAP_INVALID_CREDENTIALS, FORBIDDEN, glob);
+        rewind(fp);
+        exit_tweb( 1 );
+    }
+        if ( (rc = ldap_simple_bind_s( ld, dn, pw )) != LDAP_SUCCESS ) {
+                if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
+                do_error( fp, rc, FORBIDDEN, glob);
+                return;
+        }
+        if (debug) fprintf(stderr, "BOUND as %s\n", dn);
+        timeout.tv_sec = glob->timeout;
+        timeout.tv_usec = 0;
+        if ( (rc = ldap_search_st( ld, dn, LDAP_SCOPE_BASE, "objectClass=*",
+            0, 0, &timeout, &res )) != LDAP_SUCCESS ) {
+                do_error(fp, rc, NOT_FOUND, glob);
+                return;
+        }
+        if ( (e = ldap_first_entry( ld, res )) == NULL ) {
+                do_error(fp, -2, SERVER_ERROR, glob);
+                return;
+        }
+        dn = ldap_get_dn( ld, e );
+        ufn = ldap_dn2ufn( dn );
+        if (http == 1) {
+        PRINT_HTML_HEADER;
+        }
+    sprintf( title, "%s %s", glob->la[51], ufn );
+    fprintf( fp, HTML_HEAD_TITLE, title, glob->la[100] );
+
+    disp_file(glob, glob->header, fp);
+
+        fprintf( fp, "<FORM ACTION=\"Y%s\">\n<INPUT TYPE= \"radio\" ", hex_encode(dn));
+        fprintf( fp, "NAME=\"oldPassword\" VALUE=\"%s\" CHECKED><TT>%s</TT>\n<H1>%s</H1><DL><br>", hex_encode(pw), glob->la[53], ufn );
+        free( ufn );
+    for(mod_ptr = glob->modify->modattr; mod_ptr; mod_ptr = mod_ptr->next){
+        a = mod_ptr->attribute;
+        count = mod_ptr->count;
+                if ( strcmp( a, "homepostaladdress" ) == 0
+                    || strcmp( a, "postaladdress" ) == 0) 
+            if (count == 0)
+                            print_attr(ld,fp,dn,mod_ptr->label,a,e,MULTILINE,NULL, glob);
+            else
+                            form_attr(ld,fp,mod_ptr->label,a,e,1,count, glob);
+                else if (count == 0)
+                    print_attr( ld, fp, dn, mod_ptr->label, a, e, DEFAULT, NULL, glob);
+        else
+                    form_attr( ld, fp, mod_ptr->label, a, e, 0, count, glob );
+    }
+        fprintf( fp, "</DL><InPut TYPE=\"reset\" VALUE=\"%s\"> ", glob->la[72]);
+        fprintf( fp, "<InPut TYPE=\"submit\" VALUE=\"%s\">", glob->la[47]);
+        fprintf( fp, "</FORM>");
+
+    disp_file(glob, glob->footer, fp);
+
+        PRINT_HTML_FOOTER;
+    fflush(fp);
+}
+/* end of function: do_form */
+
+
+PUBLIC void do_modify(ld, fp, query, glob)
+LDAP    *ld;
+FILE *fp;
+char *query;
+GLOB_STRUCT *glob;
+{
+    char *dn, *ufn, *pw, *what, *next, *val, *oldval, *cp;
+    int     rc, changes = 0, delete_flag;
+    static char    *value1[2], *value2[2];
+    static LDAPMod mod1, mod2;
+    static LDAPMod *mods[3] = { &mod1 , &mod2, NULL};
+    char title[BUFSIZ];
+
+/*  Patch: we can't run the modification of attributes in two distinct steps,
+       since inheritage might copy a value into the entry after deletion
+       of the old value
+
+    /KSp, 95/07/13
+*/
+
+
+    /* query: DN?oldPassword=oldpw&att1=oldval1=val1&att2=oldval2=val2&...
+     * or:    DN?oldPassword=oldpw&att1%3Doldval1=val1&att2%3Doldval2=... 
+     */
+
+    dn = query;
+    rewind(fp);
+
+        if ( (what = strchr( dn, '?' )) == NULL ) {
+                explain_error( fp, glob->la[93], BAD_REQUEST, glob );
+                exit_tweb( 1 );
+        }
+        *what++ = '\0';
+        hex_decode(dn);
+        if (debug) fprintf(stderr, "What: %s\n", what);    
+    /* At first there should be the old userPassword */
+    if ( (pw = strstr( what, "oldPassword")) == NULL ) {
+        explain_error( fp, glob->la[94], BAD_REQUEST, glob);
+        exit_tweb ( 1 );
+    }
+        pw += 12;        /* strlen("oldPassword") + 1 */
+    /* skip to the first real attribute */
+    if ( (what = strchr(pw, '&'))  == NULL ) {
+        explain_error( fp, glob->la[95], BAD_REQUEST, glob);
+        exit_tweb( 1 );
+    }
+    *what++ = '\0';
+    hex_qdecode(pw);
+    if (debug) fprintf(stderr, 
+         "\ndo_modify: DN = %s PW = #######  CONTENT =\n%s\n ", dn, what );
+    if ( (rc = ldap_simple_bind_s( ld, dn, pw )) != LDAP_SUCCESS ) {
+            if ( debug ) ldap_perror( ld, "ldap_simple_bind_s" );
+            do_error( fp, rc, FORBIDDEN, glob);
+            exit_tweb( 1 );
+    }
+    if (debug) fprintf(stderr, "BOUND as %s.\n", dn);
+
+    if (http == 1) {
+        PRINT_HTML_HEADER;
+    }
+
+    if (request == HEAD) {
+        fflush(fp);
+        exit_tweb (1);
+    }
+    ufn = ldap_dn2ufn( dn );
+    sprintf( title, "%s %s", glob->la[8], ufn);
+    fprintf(fp, HTML_HEAD_TITLE, title, glob->la[100]);
+
+    disp_file(glob, glob->header, fp);
+
+    fprintf(fp, "<H2>%s %s</H2>%s<DL>\n", glob->la[9],  ufn, glob->la[10]);
+    free(ufn);
+
+        while (what) {
+                if ((next = strchr(what, '&')) != NULL) {
+            *next++ = '\0';
+        } else {    /* last in query */
+            next = NULL;
+        }
+        if ((val = strrchr(what, '=')) == NULL) {
+            /* new value */
+            fprintf( fp, "<P>%s ", glob->la[54]);
+                        fprintf( fp, "%s %s!<P>", glob->la[55], hex_qdecode(what));
+            exit_tweb (1);
+        }
+        *val++ = '\0';
+        hex_qdecode(what);
+        hex_qdecode(val);
+        if ((oldval = strchr(what, '=')) == NULL) {
+            /* old value */
+            fprintf( fp, "<P>%s ", glob->la[56]);
+            fprintf( fp, "%s %s!<P>\n", glob->la[55], what);
+            exit_tweb (1);
+        }
+        *oldval++ = '\0';
+        if (strcmp(oldval, val) == 0 ) {    /* no changes */
+            what = next;
+            continue;
+        }
+        if ((strcasecmp(what, "homePostalAddress") == 0) ||
+            (strcasecmp(what, "postalAddress") == 0)) {
+            /* multiline */
+            cp = oldval;
+            while ((cp = strchr(cp, '\n')) != NULL) *cp = '$';
+            cp = val;
+            while ((cp = strchr(cp, '\n')) != NULL) *cp = '$';
+                }
+        if (debug)
+            fprintf(stderr, 
+                             "what = %s, oldval = %s, val = %s\n", 
+                             what, oldval, val);
+
+        /* there is something to do:
+         * - delete the old value
+         * - add the new value if not empty */
+        mod1.mod_type = what;
+        mod2.mod_type = what;
+        value1[1] = NULL;
+        value2[1] = NULL;
+        mod1.mod_values = value1;
+        mod2.mod_values = value2;
+        mods[1] = NULL;
+        delete_flag = FALSE;
+
+/*  #############  */
+
+        if (strlen(oldval) > 0) {
+
+            if (strlen (val) > 0) {
+
+                mod1.mod_op = LDAP_MOD_ADD;
+                value1[0] = val;
+
+/*                mod2.mod_op = LDAP_MOD_DELETE;
+                value2[0] = oldval;
+                mods[1] = &mod2;
+*/
+                if ((rc = ldap_modify_s(ld, dn, mods)) != LDAP_SUCCESS) {
+
+                    fprintf( fp, 
+                    "%s <TT>%s</TT> %s <TT>%s</TT>!<P>\n<EM> %d: %s.</EM><p>\n",
+                            glob->la[80], oldval, glob->la[81], what, 
+                            rc, ldap_err2string(rc));
+
+                    what = next;
+                    continue;
+
+                }
+
+                mod1.mod_op = LDAP_MOD_DELETE;
+                value1[0] = oldval;
+
+            } else {
+
+                mod1.mod_op = LDAP_MOD_DELETE;
+                value1[0] = oldval;
+                delete_flag = TRUE;
+
+            }
+
+        } else  {
+        
+            mod1.mod_op = LDAP_MOD_ADD;
+            value1[0] = val;
+
+        }
+
+        if (debug) 
+              fprintf(stderr, "trying: %s = %s.\n", what, val);
+
+        if (((rc=ldap_modify_s(ld, dn, mods)) != LDAP_SUCCESS) &&
+            (mod1.mod_op != LDAP_MOD_DELETE) && (rc != LDAP_NO_SUCH_ATTRIBUTE)){
+
+if (dosyslog)
+    syslog (LOG_INFO, "ERROR: ldap_modify_s: ADD\n");
+            if ( debug ) 
+                ldap_perror( ld, "ldap_modify_s: ADD");
+            fprintf( fp, 
+                "%s <TT>%s</TT> %s <TT>%s</TT><P>\n%s <EM> %d: %s.</EM><P>\n", 
+                glob->la[57], val, glob->la[58], what, glob->la[59], 
+                rc, ldap_err2string( rc ) );
+            if (strlen(oldval) > 0 && rc != LDAP_INSUFFICIENT_ACCESS) {
+                /* try to reset to old value */
+
+                mod1.mod_op = LDAP_MOD_ADD;
+                mods[1] = NULL;
+
+                value1[0] = oldval;
+                if ((rc = ldap_modify_s(ld, dn, mods)) != LDAP_SUCCESS) {
+                    fprintf( fp, 
+                    "%s <TT>%s</TT> %s <TT>%s</TT>!<P>\n<EM> %d: %s.</EM><P>\n",
+                                glob->la[60], oldval, glob->la[61], what, 
+                                rc, ldap_err2string(rc));
+
+                    exit_tweb( 1 );
+                } else {
+                    fprintf( fp, "%s <TT>%s</TT> %s <TT>%s</TT><P>\n", 
+                                glob->la[62], oldval, glob->la[61], what);
+                }
+            }
+            what = next;
+            continue;
+        }
+
+        if (debug) fprintf(stderr, "MOD: %s = %s.\n", what, val);
+        changes++;
+        fprintf(fp, "<DT><B>%s</B> <DD>%s <TT>(%s)</TT>\n",
+            ldap_friendly_name(glob->friendlyfile, what, &fm), value1[0],
+            delete_flag ? glob->la[74] : strlen(oldval) > 0 ? 
+                                        glob->la[75] : glob->la[76]);
+        what = next;
+        }
+    fprintf(fp, "</DL>%d %s%s%s!\n", changes, glob->la[15], 
+                    changes != 1 ? glob->la[73] : "", 
+                    changes > 0 ? glob->la[16] : "");
+    if (changes > 0) {
+        char  *dn2 = hex_encode(dn);
+
+        fprintf(fp, "<UL><LI><B><A HREF=\"/R%s\">%s</A>\n",
+            dn2, glob->la[17]);
+        fprintf(fp, "<LI><A HREF=\"/F%s?userPassword=%s\">%s</A></B></UL>\n", 
+            dn2, pw, glob->la[19]);
+
+    }
+
+    disp_file(glob, glob->footer, fp);
+
+    PRINT_HTML_FOOTER;
+    fflush(fp);
+}
+/* end of function: do_modify */
+
+PRIVATE int no_show( rdn, glob)
+char *rdn;
+GLOB_STRUCT *glob;
+{
+    if ( glob->no_show_rdn ) {
+
+        char rdn_cpy[BUFSIZ], *toc, no_sh[BUFSIZ];
+
+        strcpy(no_sh, glob->no_show_rdn);
+        sprintf(rdn_cpy, "|%s|", rdn);
+        toc = strtok(no_sh, " ");
+        do {
+            if(strstr(str_tolower((char *) rdn_cpy), str_tolower(toc)))
+                return(TRUE);
+        } while( ( toc = strtok(NULL, " ")) );
+
+    }
+
+    return(FALSE);
+}
+/* end of function: no_show */
+
+
+PRIVATE int sort_result(ld, res, dn, glob)
+LDAP *ld;
+LDAPMessage *res;
+char *dn;
+GLOB_STRUCT *glob;
+{
+    LDAPMessage    *e;
+    char    *ufn;
+    int counter = 0, baselen;
+    int basecount;
+    pSORT_LINE  s_ptr;
+    pMY_LDAP_LIST lmptr;
+    LFP getfirst = glob->prefer_ref_uris ? my_first_entry : ldap_first_entry,
+        getnext  = glob->prefer_ref_uris ? my_next_entry : ldap_next_entry;
+
+    hex_decode (dn);
+
+    ufn = ldap_dn2ufn(dn);
+    baselen = ufn ? strlen(ufn) : 0;
+    basecount = ufn ? chrcnt(ufn, UFNSEP) : 0;
+
+#if defined( TUE_TEL ) || defined( AMBIXGW )
+    /*  before sorting check for dynamic changes of the sorting instructions  */
+    dynamicResort( ld, glob, dn );
+#endif
+
+    for ( e = (*getfirst)(ld, res);     e != NULL && counter < glob->maxcount;
+          e = (*getnext)(ld, e ) ) {
+       sort_parse(ld, e, dn, ufn, baselen, basecount, counter, glob);
+    }
+    for(lmptr = mllroot; lmptr; lmptr = lmptr->next) {
+        sort_parse(ld, lmptr->e, dn, ufn, baselen, basecount, counter, glob);
+    }
+    mllroot = NULL;
+
+    for(s_ptr = glob->sort; s_ptr; s_ptr = s_ptr->next) {
+        if( s_ptr->dnLast )
+            qsort(s_ptr->dnList, s_ptr->dnLast, sizeof(int), compare);
+    }
+    return counter;
+}
+/* end of function: sort_result */
+
+
+PRIVATE void list_output(fp, glob)
+FILE *fp;
+GLOB_STRUCT *glob;
+{
+    int i, x;
+    pSORT_LINE s_ptr;
+
+    if(glob->tables_marker)
+        fprintf (fp, "</H3><TABLE WIDTH=\"100%%\">");
+
+    for (i = 0 ; i < MAX_OCS ; i++ ) {
+        if(!glob->sorty[i]) continue;
+        s_ptr = glob->sorty[i];
+
+        if(glob->tables_marker)
+            fprintf( fp, "<TR><TH ALIGN=LEFT><BR>");
+
+        fprintf( fp, "<H3>%s", s_ptr->label);
+
+#ifdef TUE_TEL
+        if(glob->ton_urls && glob->ton_urls->department
+                          && (strlen(s_ptr->label) >1) ) 
+            fprintf( fp, " / %s", glob->ton_urls->department);
+#endif
+
+        if(s_ptr->restricted) {
+            fprintf( fp, " %s", glob->la[33]);
+            if (glob->legal && !glob->legal_top)
+                fprintf( fp, ", %s", glob->la[34]);
+            fprintf (fp, ")");
+        }
+
+        if(glob->tables_marker)
+            fprintf (fp, "</H3></TH></TR>");
+        else
+            fprintf (fp, "</H3><MENU>\n");
+
+        for(x=0; x < s_ptr->dnLast; x++) {
+            if(glob->strip_pin && strstr(glob->strip_pin, s_ptr->object_class)){
+                s_ptr->dnList[x]->href[strlen(s_ptr->dnList[x]->href) -5] = '\0';
+                trimright (s_ptr->dnList[x]->href, " 1234567890");
+                strcat(s_ptr->dnList[x]->href, "</A>\n");
+            }
+    
+            if( glob->raw_data ) {
+                fprintf(fp,"%s",s_ptr->dnList[x]->raw);
+                free(s_ptr->dnList[x]->raw);
+            } else {
+                fprintf(fp,"%s",s_ptr->dnList[x]->href);
+                free(s_ptr->dnList[x]->href);
+            }
+            free(s_ptr->dnList[x]->string);
+        }
+
+        if(!glob->tables_marker)
+            fprintf (fp, "</MENU>\n");
+
+        glob->sorty[i] = NULL;
+    }
+    if(glob->tables_marker)
+        fprintf (fp, "</TABLE>\n");
+}
+/* end of function: list_output */
+
+PRIVATE void make_la_buttons(sep, fp, ld, dn, la_url, glob)
+char *sep;
+FILE *fp;
+LDAP *ld;
+char *dn;
+char *la_url;
+GLOB_STRUCT *glob;
+
+{
+    int k;
+
+    /* Inform users from unknown */
+    if(glob->unknown_host) fprintf( fp, glob->la[102]);
+
+    if(glob->legal && glob->legal_top)
+        fprintf (fp, "%s\n%s\n",
+                glob->is_proxy ? glob->la[104] : glob->la[65], glob->la[101]);
+
+    /* if allowed -> allow-file-message */
+    if(glob->allowed && glob->allow_msg)
+        disp_file(glob, glob->allow_msg, fp);
+
+    if(glob->pull_down_menus) {
+        make_la_buttons_pull_down(sep, fp, ld, dn, la_url, glob);
+        return;
+    }
+
+    fprintf( fp, "<B>");
+    fprintf( fp, " [ <A HREF=\"/H\">%s</A> ] ",glob->la[29]);
+    for(k=0; k<strlen(glob->olang); k++){
+        if(glob->olang[k] == glob->lang[0]) continue;
+        sprintf(la_url, "http://%s:%d/%s%s",
+                    glob->hostname, glob->webport+glob->olang[k]-'0',
+                    sep, hex_encode(dn));
+        fprintf( fp, " [ <A HREF=\"%s\"> %s </A> ] ",
+                    la_url, glob->language[glob->olang[k]-'0']);
+    }
+    fprintf( fp, "</B><p>");
+}
+/* end of function: make_la_buttons */
+
+PRIVATE void make_la_buttons_pull_down(sep, fp, ld, dn, la_url, glob)
+char *sep;
+FILE *fp;
+LDAP *ld;
+char *dn;
+char *la_url;
+GLOB_STRUCT *glob;
+
+{
+    int k;
+    TABLE_DISPLAY *tab_ptr;
+
+    fprintf( fp, "<FORM ACTION=\"/B\">\n");
+    fprintf( fp, "<INPUT TYPE=SUBMIT NAME=H Value = \"%s\">\n",glob->la[29]);
+
+    fprintf( fp, "_\n");
+
+    for(k=0; k<strlen(glob->olang); k++){
+        if(glob->olang[k] == glob->lang[0]) continue;
+        sprintf(la_url, "http://%s:%d/%s%s",
+                    glob->hostname, glob->webport+glob->olang[k]-'0',
+                    sep, hex_encode(dn));
+        fprintf( fp, "<INPUT TYPE=SUBMIT NAME=%s Value = \"%s\">\n", 
+                      la_url, glob->language[glob->olang[k]-'0']);
+    }
+
+    /* make tables button in order to have table-display requests */
+    for(tab_ptr = glob->tables; tab_ptr; tab_ptr = tab_ptr->next) {
+
+        char **oc = NULL;
+        struct timeval timeout;
+        LDAPMessage *res;
+        static char    *attrs[] = { "objectClass", 0 };
+
+        if( !((!tab_ptr->allow || glob->allowed) && !glob->tables_marker))
+            continue;
+
+        /* Check objectclass for tables_oc */
+        timeout.tv_sec = glob->timeout;
+        timeout.tv_usec = 0;
+        if ( ldap_search_st( ld, dn, LDAP_SCOPE_BASE, "objectClass=*",
+                              attrs, 0, &timeout, &res ) == LDAP_SUCCESS ){
+            oc = ldap_get_values(ld, ldap_first_entry(ld, res), "objectClass");
+        }
+        if ( oc && charray_inlist( oc, tab_ptr->select_oc)) {
+
+            fprintf( fp, "_______\n");
+            fprintf( fp, "<INPUT TYPE=SUBMIT NAME=X%s?%s#%s Value = \"%s\">\n",
+                       hex_encode(dn),
+#ifdef TUE_TEL
+                       strstr(tab_ptr->dn_extension, "persontable") ?
+                       "MENU" : "PHONEBOOK",
+#else
+                       "MENU",
+#endif
+                       tab_ptr->dn_extension, tab_ptr->button_label);
+        }
+    }
+
+    fprintf( fp, "</FORM>\n");
+}
+/* end of function: make_la_buttons_pull_down */
+
+PRIVATE void print_rdn(fp, dn, glob)
+FILE *fp;
+char *dn;
+GLOB_STRUCT *glob;
+{
+    char        **s;
+    char        *rdn = NULL;
+
+    if(glob->pull_down_menus) {
+        print_rdn_pull_down(fp, dn, glob);
+        return;
+    }
+
+    s = ldap_explode_dn( dn, 1 );
+    if ( strcmp( dn, "" ) != 0 ) {    /* Not the root */
+        if ( s[1] == NULL ) {    /* toplevel */
+            rdn = ldap_friendly_name( glob->friendlyfile, s[0], &fm );
+        } else {
+            rdn = s[0];
+        }
+        fprintf( fp,"%s <B><A HREF=\"/R%s\">%s</A></B>\n",glob->la[28],hex_encode(dn),rdn?rdn:s[0]);
+    } else {            /* the root */
+        fprintf( fp, "<B>%s</B>\n", glob->la[77]);
+    }
+    ldap_value_free( s );
+}
+/* end of function: print_rdn */
+
+PRIVATE void print_rdn_pull_down(fp, dn, glob)
+FILE *fp;
+char *dn;
+GLOB_STRUCT *glob;
+{
+    char        **s;
+    char        *rdn = NULL;
+
+    fprintf( fp, "<FORM ACTION=\"/B\">\n");
+
+    s = ldap_explode_dn( dn, 1 );
+    if ( strcmp( dn, "" ) != 0 ) {    /* Not the root */
+        if ( s[1] == NULL ) {    /* toplevel */
+            rdn = ldap_friendly_name( glob->friendlyfile, s[0], &fm );
+        } else {
+            rdn = s[0];
+        }
+        fprintf( fp,"%s <BIG><STRONG>%s</STRONG></BIG>  ",
+                     glob->la[28], rdn?rdn:s[0]);
+        fprintf( fp, "<INPUT TYPE=SUBMIT NAME=R%s Value = \"%s\">\n",
+                       hex_encode(dn), glob->la[98]);
+    } else {            /* the root */
+        fprintf( fp, "<BIG><STRONG>%s</STRONG></BIG>\n", glob->la[77]);
+    }
+    ldap_value_free( s );
+    fprintf( fp, "</FORM>\n");
+}
+/* end of function: print_rdn_pull_down */
+
+PRIVATE void make_search_box(fp, ld, dn, glob)
+FILE *fp;
+LDAP *ld;
+char *dn;
+GLOB_STRUCT *glob;
+{
+    int scope;
+
+    scope = make_scope(ld, dn, glob);    /* onelevel or subtree search ? */
+    fprintf( fp, "<DL><DT><FORM ACTION=\"/S%s\">%s  <inPUT NAME=\"%s\"><INPUT TYPE=submit VALUE=%s><INPUT TYPE=reset VALUE=\"%s\">\n",
+        hex_encode(dn),
+        scope == LDAP_SCOPE_ONELEVEL ? glob->la[66] : glob->la[67],
+        scope == LDAP_SCOPE_ONELEVEL ? "O" : "S",
+        glob->la[68], glob->la[69]);
+
+    fprintf( fp, "</FORM></DL>\n");
+}
+/* end of function: make_search_box */
+
+PRIVATE LDAPMessage *my_first_entry( ld, e )
+LDAP *ld;
+LDAPMessage *e;
+{
+    return(ldap_list_eval(ld, e , ldap_first_entry));
+}
+/* end of function: my_first_entry */
+
+PRIVATE LDAPMessage *my_next_entry(ld, e )
+LDAP *ld;
+LDAPMessage    *e;
+{
+    return(ldap_list_eval(ld, e , ldap_next_entry));
+}
+/* end of function: my_next_entry */
+
+PRIVATE LDAPMessage *ldap_list_eval(ld, e, funcp )
+LDAP *ld;
+LDAPMessage    *e;
+LFP funcp;
+{
+
+    char **value = NULL;
+    pMY_LDAP_LIST *lmhandle; /* , lmptr; */
+
+    for(lmhandle = &mllroot; *lmhandle; lmhandle = &(*lmhandle)->next)
+        ;
+
+    for( e =  (*funcp)( ld, e ) ;
+         e && strstr(make_oc_to_string(value = ldap_get_values( ld, e, "objectClass" )),
+                 "|alias|");     e = ldap_next_entry( ld, e )) {
+        *lmhandle = (pMY_LDAP_LIST) ch_malloc(sizeof(MY_LDAP_LIST));
+        (*lmhandle)->e = e;
+        lmhandle = &(*lmhandle)->next;
+        ldap_value_free(value);
+        value = NULL;
+
+    }
+    if (value) ldap_value_free(value);
+
+/*    if(!e) {
+        for(lmptr = mllroot; lmptr; lmptr = lmptr->next) {
+            char **val;
+
+            val = ldap_get_values(ld, lmptr->e, "aliasedObjectName");
+if (dosyslog) syslog (LOG_INFO, "alias: %s", val[0]);
+            ldap_value_free(val);
+        }
+        mllroot = NULL;
+    }
+*/
+    return(e);
+}
+/* end of function: ldap_list_eval */
+
+PRIVATE void sort_parse(ld, e, dn, ufn, baselen, basecount, counter, glob)
+LDAP *ld;
+LDAPMessage *e;
+char *dn;
+char *ufn;
+int baselen;
+int basecount;
+int counter;
+GLOB_STRUCT *glob;
+{
+    char    **s, **oc;
+    char    *dn2, *urldn = NULL, *rdn, *doc, *aoc;
+    char    *ufn2, *sortstring = NULL, *cp;
+    char   **sattr = NULL, href[20*BUFSIZ], *temp;
+    int spaces = 0, iscountry;
+    pGW_SWITCH_LINE gw_ptr;
+    int flag, found_oc, i;
+    pSORT_LINE *s_hndl;
+    pSORT_LINE  s_ptr;
+    char *url = NULL;
+    char **uri = NULL, *urlnola, raw_string[BUFSIZ];
+
+    oc = ldap_get_values( ld, e, "objectClass" );
+
+    if(!(aoc = make_oc_to_string(oc))) return;
+
+
+#ifdef TUE_TEL
+    /*** ton_urls ***/
+    if(glob->ton_urls && glob->ton_urls->value && strstr(aoc, "|person|")) {
+        char **tonvals;
+        int k, matched;
+
+        matched=0;
+        tonvals = ldap_get_values( ld, e, glob->ton_urls->attribute);
+        if(!tonvals) return;
+        for(k=0; tonvals[k]; k++) {
+            if(strstr(tonvals[k], glob->ton_urls->value)
+            && !(strchr(tonvals[k], '.')
+                 && (strcspn(tonvals[k],".") > strlen(glob->ton_urls->value)))){
+                matched = 1;
+            }
+        }
+        if(!matched) {
+            return;
+        }
+    }
+#endif
+
+    /* Begin New Sort */
+    found_oc = FALSE;
+    i        = 0;
+    for(s_hndl = &(glob->sort); *s_hndl; s_hndl = &(*s_hndl)->next) {
+
+        i++;
+        if(strstr( aoc, (*s_hndl)->object_class )) {
+
+            if(strstr(aoc, "|person|") && glob->no_browse)
+                goto NEXTENTRY;
+            found_oc = TRUE;
+        }
+        if(found_oc) break;
+    }
+
+    if(!found_oc) {
+        if(glob->show_defoc) {
+            *s_hndl = s_ptr = (pSORT_LINE) ch_malloc(sizeof(SORT_LINE));
+            s_ptr->object_class = strdup(pick_oc(oc));
+            s_ptr->label = ldap_friendly_name(glob->friendlyfile, 
+                                s_ptr->object_class, &fm);
+            s_ptr->priority = i;
+
+        } else return;
+    }
+
+    s_ptr = *s_hndl;
+    doc   = s_ptr->object_class;
+
+    dn2 = ldap_get_dn( ld, e );
+    if(urldn) free(urldn);
+    if(strstr(aoc, "|alias|")) {
+
+        char **val;
+
+        val = ldap_get_values(ld, e, "aliasedObjectName");
+        urldn = strdup(hex_encode(val[0]));
+        ldap_value_free(val);
+
+    } else
+        urldn = strdup(hex_encode(dn2));
+
+    ufn2 = strdup (ldap_dn2ufn(dn2));
+    s = ldap_explode_dn( dn2, 1 );
+
+    if(baselen)
+        ufn2 = dnrcut(ufn2, UFNSEP, basecount);
+
+    /* Support raw data delivery */
+    if(glob->raw_data) {
+        char **rvals;
+        int k, l;
+
+        sprintf(raw_string, "%s", ufn2);
+        trimright (raw_string, " 1234567890");
+
+        for(l=0; glob->raw_attrs[l]; l++) {
+            rvals = ldap_get_values( ld, e, glob->raw_attrs[l]);
+            if(rvals[0])
+                sprintf(raw_string, "%s%% %s=", raw_string, glob->raw_attrs[l]);
+            for(k=0; rvals[k]; k++) {
+                sprintf(raw_string, "%s%s%s",raw_string, 
+                                             k>0 ? "&":"", rvals[k] );
+            }
+        }
+        sprintf(raw_string, "%s|<br><br>", raw_string);
+    }
+
+    iscountry = (strstr( doc, "country" ) != NULL);
+    if ( iscountry ) {
+        rdn = ldap_friendly_name( glob->friendlyfile, s[0], &fm );
+        sortstring = ufn2 = ldap_friendly_name( glob->friendlyfile, 
+                                                                ufn2, &fm );
+        sattr = NULL;
+    } else
+        rdn = s[0];
+    if ( rdn == NULL )
+        rdn = s[0];
+    if (( strncasecmp( rdn, "{ASN}", 5 ) == 0 ) 
+                 || no_show( rdn, glob)) {
+        free( dn2 );
+        ldap_value_free( s );
+        ldap_value_free( oc );
+            return;
+    }
+    if ( !iscountry ) {    /* not a country */
+        sattr = ldap_get_values( ld, e, s_ptr->sort_attr);
+        sortstring = strdup(dn2);
+        if ( ( cp = strchr(sortstring,'=')) ) {
+            sortstring = ++cp;
+            /* DNs may have components in '"', ignored  when sorting */
+            if ( *sortstring == '"' )
+            sortstring++;
+        }
+        if ( sattr ) {
+            cp = *sattr;
+            while ( ( cp = strchr(cp,' ')) ) {
+                cp ++;
+                spaces ++;
+            }
+        }
+        while ( spaces > 0 ) {
+            if ( ( cp = strrchr(sortstring,' ')) ) {
+                *cp = '\0';
+                spaces --;
+            }
+        }
+    }
+
+    ufn2 = trim(ufn2, "\"");
+
+    /* GW-SWITCH */
+    flag = 0;
+    urlnola = NULL;
+
+    if (glob->gw_switch && glob->gw_switch->dynamic) {
+
+        uri = ldap_get_values( ld, e, "labeledURI" );
+
+        /* PREFER-REF-URIS Code */
+        if(strstr(aoc, "|alias|") && glob->prefer_ref_uris){
+
+            LDAPMessage *ures, *ue;
+            struct timeval  timeout;
+            char        **val;
+
+            timeout.tv_sec = glob->timeout;
+            timeout.tv_usec = 0;
+    
+#if defined LDAP_VENDOR_NAME && defined LDAP_API_VERSION
+#  if LDAP_API_VERSION > 2001 && LDAP_API_VERSION < 2010
+
+        ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS );
+
+#  endif
+#else
+            ld->ld_deref = LDAP_DEREF_ALWAYS;
+#endif
+
+            if ( (ldap_search_st( ld, dn2, LDAP_SCOPE_BASE, "objectClass=*",
+                NULL, 0, &timeout, &ures )) == LDAP_SUCCESS ) {
+                if ( (ue = ldap_first_entry( ld, ures ))) {
+                    if( ( val = ldap_get_values( ld, ue, "labeledURI" )) ) {
+                        if(uri) ldap_value_free(uri);
+                        uri = val;
+                            
+                    }
+                }
+            }
+        }
+
+        for(i=0; uri && uri[i] && *uri[i]; i++) {
+            char *sp;
+
+            if( ( sp = strchr(uri[i], ' ')) ) {
+                *sp++ = '\0';
+                if(strstr(sp, glob->gw_switch->lagws)) {
+                    flag = 1;
+                    url = uri[i];
+                    break;
+                } else if(strstr(sp, GWS))
+                    urlnola = uri[i];
+            }
+        }
+    }
+
+    if(!flag && urlnola) {
+        url = urlnola;
+        flag = 1;
+    }
+
+    if (glob->gw_switch) {
+
+        for(gw_ptr = glob->gw_switch->list; 
+                          !flag && gw_ptr; gw_ptr = gw_ptr->next) {
+            if (!dn_cmp (dn2, gw_ptr->dn)) {
+                flag = 1;
+                url = gw_ptr->url;
+            }
+        }
+    }
+
+        if(flag == 1) {
+            char  *url_tmp;
+
+            sprintf( href, "<LI><A HREF=\"%s\">%s</A>\n",
+                        (url_tmp = url_complete(url, urldn, "M")),
+                         glob->disp_sea_rdn ? rdn : ufn2);
+
+        }
+
+        if (flag==0) {
+            char *strptr;
+
+            if(glob->strip_pin && strstr(glob->strip_pin, doc))
+                if ( ( strptr = strchr(ufn2, ',')) ) {
+
+                    *strptr++ = '\0';
+                    trimright(ufn2, " 1234567890");
+                    sprintf(ufn2, "%s,%s", ufn2, strptr);
+
+                } else
+                    trimright(ufn2, " 1234567890");
+
+            ufn2 = trim(ufn2, "\"");
+
+            /* TABLES DISPLAY CODE */
+            if(glob->tables_marker){
+
+                char disp_rule[BUFSIZ], *strptr, strbuf[BUFSIZ];
+                char tab_attr[BUFSIZ], percent[BUFSIZ];
+                char **aval;
+                int n;
+
+                strcpy(disp_rule, glob->tables_marker);
+                strptr = strstr(disp_rule, "persontable");
+
+                if(strptr){
+                    strptr = strchr(strptr, ':') + 1;
+                    strcpy(disp_rule, strptr);
+                    strptr = strchr(disp_rule, '$');
+                    if(strptr) *strptr = '\0';
+                    strcat(disp_rule, "&");
+
+                    strcpy( href, "<TR>\n");
+
+                    while(*disp_rule){
+                        strcpy(strbuf, disp_rule);
+                        strptr=strchr(disp_rule, '&');
+                        strcpy(disp_rule, strptr+1);
+
+                        strptr=strchr(strbuf, '&');
+                        *strptr++ = '\0';
+                        strcpy(tab_attr, strbuf);
+                        strptr = strchr(tab_attr, ',');
+                        *strptr++ = '\0';
+                        strcpy(percent, strptr);
+
+                        sprintf( href, "%s <TD WIDTH=\"%s%%\" VALIGN=TOP %s>",
+                                 href, percent,
+                                 !strcasecmp(tab_attr, "telephonenumber") ?
+                                 "ALIGN=RIGHT NOWRAP" : "ALIGN=LEFT");
+
+                        if(!strcasecmp(tab_attr, "rdn")){
+                            trimright (ufn2, " 1234567890");
+                            sprintf( href, "%s<A HREF=\"/M%s\">%s</A><BR>\n",
+                                     href, urldn, ufn2);
+
+#ifdef TUE_TEL
+                        /* use tat_refphone & fallback to telephonenumber */
+                        } else if(!strcasecmp(tab_attr, "phone")){
+                            displayTueTelList( ld, e, href, glob );
+
+#endif
+                        } else if(!strncasecmp(tab_attr, "objectclass", 11)){
+                            char objectclass[BUFSIZ], letter[BUFSIZ], *trptr;
+                            char tab_attr_buf[BUFSIZ];
+
+                            *(letter+1) = *letter = '\0';
+                            strcpy(tab_attr_buf, tab_attr);
+                            trptr = tab_attr_buf;
+                            while( ( trptr = strchr(trptr, '=')) )
+                                *trptr++ = ' ';
+
+                            sscanf(tab_attr_buf, "%*s%s%s",
+                                              objectclass, letter);
+                            if(!*letter) *letter = '*';
+
+                            if( ( aval =
+                                    ldap_get_values( ld, e, "objectclass")) ) {
+                                if(charray_inlist(aval, objectclass))
+                                    sprintf(href, "%s %s",
+                                                      href, letter);
+                            }
+                        } else if( ( aval =
+                                        ldap_get_values( ld, e, tab_attr )) ) {
+                            for(n=0; aval[n]; n++){
+                                if(!strcasecmp(tab_attr, "mail"))
+                                    sprintf(href,
+                                            "%s<A HREF=\"mailto:%s\">%s</A><BR>",
+                                            href, aval[n], aval[n]);
+                                else
+                                    sprintf(href, "%s %s<BR>", href, aval[n]);
+                            }
+                        }
+                        sprintf( href, "%s</TD>", href);
+                    }
+                    sprintf( href, "%s</TR>", href);
+                }
+
+            /* without tables */
+            }else{
+                sprintf( href, "<LI><A HREF=\"%s%sM%s\">%s</A>\n",
+
+#ifdef TUE_TEL
+                         (glob->dit_config && !glob->dit_config->not_browse) ?
+                                dn2server(urldn, glob) : "",
+#else
+                                "",
+#endif
+
+                                "/", urldn,
+                                glob->disp_sea_rdn ? rdn : ufn2);
+            }
+        }
+
+        if (*sortstring == '&') {
+
+            sortstring[0] = sortstring[1];
+            sortstring[1] = 'e';
+
+        }
+
+        if( (strstr(aoc, "person") && (s_ptr->dnLast >= glob->max_person) )
+           || ( s_ptr->dnLast >= glob->maxcount) ) {
+            s_ptr->restricted = 1;
+            return;
+        }
+
+        if ( sattr ) 
+            temp = (char *) ch_malloc(strlen(*sattr)+strlen(sortstring)+1);
+        else 
+            temp = (char *) ch_malloc(strlen(sortstring)+1);
+        if ( sattr )
+            strcat(temp, *sattr);
+        strcat(temp,sortstring);
+
+        if(!s_ptr->dnList)
+            s_ptr->dnList = (DNLIST **) ch_calloc(glob->maxcount+1,
+                                                     sizeof(pDNLIST));
+        if (!s_ptr->dnList[s_ptr->dnLast] )
+                    s_ptr->dnList[s_ptr->dnLast] = (pDNLIST)
+                                        ch_malloc(sizeof(DNLIST));
+
+        s_ptr->dnList[s_ptr->dnLast]->string = temp;
+
+        if(glob->raw_data) {
+            s_ptr->dnList[s_ptr->dnLast]->raw = strdup(raw_string);
+        }
+
+        s_ptr->dnList[s_ptr->dnLast++]->href = strdup(href);
+        glob->sorty[s_ptr->priority] = s_ptr;
+
+        free( dn2 );
+        ldap_value_free( s );
+        ldap_value_free( oc );
+        ldap_value_free( uri );
+
+        if(++counter >= glob->maxcount)
+            glob->restricted = TRUE;
+
+NEXTENTRY:
+        ;
+        return;
+}
+/* end of function: sort_parse */
+
+
+PUBLIC void close_ldap_connections(glob)
+GLOB_STRUCT *glob;
+{
+    pLD_LIST ldlptr;
+
+    for(ldlptr = glob->ld_list; ldlptr; ldlptr = ldlptr->next)
+        ldap_unbind(ldlptr->ld);
+}
+/* end of function: close_ldap_connections */
+
+PUBLIC LDAP *get_ldap_connection( host, port, glob )
+char *host;
+int port;
+GLOB_STRUCT *glob;
+{
+    pLD_LIST ldlptr, *ldlhdl;
+    LDAP *ld = NULL;
+    int rc;
+
+    for(ldlptr = glob->ld_list; ldlptr; ldlptr = ldlptr->next) {
+        if ( !strcasecmp(ldlptr->host, host) && (ldlptr->port == port))
+            ld = ldlptr->ld;
+
+    }
+    if (!ld) {
+
+        if ( (ld = ldap_open( host, port )) == NULL )
+            return(NULL);
+        if ( (rc=ldap_simple_bind_s( ld, glob->webdn, glob->webpw ))
+              != LDAP_SUCCESS )
+            return(NULL);
+        for(ldlhdl = &glob->ld_list; *ldlhdl; ldlhdl = &(*ldlhdl)->next)
+            ;
+        *ldlhdl = (pLD_LIST) ch_calloc(1, sizeof(LD_LIST));
+        (*ldlhdl)->host = strdup(host);
+        (*ldlhdl)->port = port;
+        (*ldlhdl)->ld = ld;
+    }
+    return(ld);
+}
+/* end of function: get_ldap_connection */
+
+
+PRIVATE void get_ref_attrs( ld1, dn, e1, glob )
+LDAP *ld1;
+char *dn;
+LDAPMessage *e1;
+GLOB_STRUCT *glob;
+{
+    pIND_ATTRS i_ptr;
+    IND_ATTR_ARR *idx, **vnodes;
+    int i, j, k, n;
+    LDAP *ld;
+    int rc;
+    LDAPMessage *res, *e;
+    struct timeval timeout;
+    char **val, **val1;
+    char ref_dn[BUFSIZ], ref_cnbuf[BUFSIZ], *ref_cn;
+
+
+    for(i_ptr = glob->ind_attrs; i_ptr; i_ptr = i_ptr->next) {
+
+        /* Function-Mode */
+        if (i_ptr->ia_arr && (i_ptr->ia_arr[0].replace == 2))
+            continue;
+
+        if ( (val1 = ldap_get_values( ld1, e1, i_ptr->ref_attr )) == NULL )
+            continue;
+
+        for(idx = i_ptr->ia_arr, i=0; idx[i].key; i++){
+            /* idx[i].key idx[i].replace idx[i].attr idx[i].host idx[i].port
+               idx[i].base -- i_ptr->ref_attr */
+
+            ld = get_ldap_connection( idx[i].host, idx[i].port, glob );
+
+            timeout.tv_sec = glob->timeout;
+            timeout.tv_usec = 0;
+
+            for ( j = 0; val1[j] != NULL; j++ ) {
+                if(strncasecmp(val1[j], idx[i].key, strlen(idx[i].key)))
+                    continue;
+                else {
+                    strcpy(ref_cnbuf, val1[j]);
+/*                    ref_cn = ref_cnbuf + strlen(idx[i].key);
+*/
+                      ref_cn = ref_cnbuf;
+                }
+
+                sprintf(ref_dn, "cn=%s,%s", ref_cn, idx[i].base);
+                if ( (rc = ldap_search_st( ld, ref_dn, LDAP_SCOPE_BASE, 
+                  "objectClass=*", NULL, 0, &timeout, &res )) != LDAP_SUCCESS )
+                    continue;
+                if ( (e = ldap_first_entry( ld, res )) == NULL )
+                    return;
+                val = ldap_get_values( ld, e, idx[i].attr );
+                if(val[0] != NULL) {
+                    if(!idx[i].e)
+                        idx[i].e = ( LDAPMessage ** )
+                            ch_malloc( 16 * sizeof(LDAPMessage *) );
+                    for(n=0; idx[i].e[n];  n++)
+                        ;
+                    idx[i].e[n] = e;
+                    idx[i].ld = ld;
+                    vnodes = &glob->ind_attrs->valid_nodes;
+                    if(!*vnodes)
+                        *vnodes = (IND_ATTR_ARR *) 
+                                   ch_malloc( 100 * sizeof(IND_ATTR_ARR *) );
+                    for(k=0; (*vnodes)[k].key;  k++)
+                        ;
+                    if(j==0)
+                        (*vnodes)[k] = idx[i];
+                }
+            }
+        }
+    }
+}
+/* end of function: get_ref_attrs */
diff --git a/contrib/tweb/x500.h b/contrib/tweb/x500.h
new file mode 100644 (file)
index 0000000..fbab445
--- /dev/null
@@ -0,0 +1,61 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* x500.h.....                                                              *
+*                                                                          *
+* Function:..Header-File for TWEB-Software                                 *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 13 1996             Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            February 18 1999           ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: x500.h,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _X500_
+#define _X500_
+
+#include "x500_exp.h"
+#include "charray_exp.h"
+#include "ch_malloc_exp.h"
+
+typedef LDAPMessage *(*LFP)();
+
+typedef struct _my_ldap_list {
+    LDAPMessage *e;
+    struct _my_ldap_list *next;
+} MY_LDAP_LIST, *pMY_LDAP_LIST;
+
+pMY_LDAP_LIST mllroot = NULL;
+
+PRIVATE int compare(/*a,b*/);
+PRIVATE char * pick_oc(/*oclist*/);
+PRIVATE int make_scope(/*ld, dn, glob*/);
+PRIVATE int no_show(/* rdn, glob*/);
+PRIVATE int sort_result(/*ld, res, dn, no_browse, glob*/);
+PRIVATE void list_output(/*fp, flag, glob*/);
+PRIVATE void make_la_buttons(/*sep, fp, dn, la_url, glob*/);
+PRIVATE void make_la_buttons_pull_down(/*sep, fp, dn, la_url, glob*/);
+PRIVATE void print_rdn(/*fp, dn, glob*/);
+PRIVATE void print_rdn_pull_down(/*fp, dn, glob*/);
+PRIVATE void make_search_box(/*fp, ld, dn, glob*/);
+PRIVATE LDAPMessage *my_first_entry();
+PRIVATE LDAPMessage *my_next_entry();
+PRIVATE LDAPMessage *ldap_list_eval();
+PRIVATE void sort_parse();
+PRIVATE void get_ref_attrs();
+PRIVATE void disp_form_button();
+
+
+#endif /* _X500_ */
diff --git a/contrib/tweb/x500_exp.h b/contrib/tweb/x500_exp.h
new file mode 100644 (file)
index 0000000..318d97a
--- /dev/null
@@ -0,0 +1,40 @@
+/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+*                                                                          *
+* x500_exp.h.                                                              *
+*                                                                          *
+* Function:..Header-Datei fuer TWEB-Software                               *
+*                                                                          *
+*                                                                          *
+*                                                                          *
+* Authors:...Dr. Kurt Spanier & Bernhard Winkler,                          *
+*            Zentrum fuer Datenverarbeitung, Bereich Entwicklung           *
+*            neuer Dienste, Universitaet Tuebingen, GERMANY                *
+*                                                                          *
+*                                       ZZZZZ  DDD    V   V                *
+*            Creation date:                Z   D  D   V   V                *
+*            February 13 1996             Z    D   D   V V                 *
+*            Last modification:          Z     D  D    V V                 *
+*            January 10 1999            ZZZZ   DDD      V                  *
+*                                                                          *
+_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
+
+/*
+ * $Id: x500_exp.h,v 1.6 1999/09/10 15:01:21 zrnsk01 Exp $
+ *
+ */
+
+#ifndef _X500_EXP_
+#define _X500_EXP_
+
+PUBLIC void do_menu(/*ld, fp, dn, glob*/);
+PUBLIC void do_xtend(/*ld, fp, dn, glob*/);
+PUBLIC int do_search(/*ld, fp, query, glob*/);
+PUBLIC void do_read(/*ld, fp, dn, amore, glob*/);
+PUBLIC void do_form(/*ld, fp, query, glob*/);
+PUBLIC void do_modify(/*ld, fp, query, glob*/);
+PUBLIC char * make_oc_to_string(/*oc*/);
+PUBLIC LDAP *get_ldap_connection( /* host, port, glob */ );
+PUBLIC void close_ldap_connections();
+
+
+#endif /* _X500_EXP_ */