scheme48-1.9/README000644 004306 005702 00000012400 12067075540 014703 0ustar00sperberPUStaff000000 000000 ; Part of Scheme 48 1.9. See file COPYING for notices and license. This is Scheme 48 1.9 "Tübingen Edition" a derivative of Scheme 48 0.58, put together by various volunteers around the Internet, with release management happening in Tübingen, Germany. Scheme 48 0.58 was developed by Richard Kelsey and Jonathan Rees and incorporates PreScheme 0.5 by Richard Kelsey. Please report bugs to scheme-48-bugs@s48.org, and include the version number in your message. Installation instructions in file INSTALL. A user's guide is in file doc/user-guide.txt. Recent changes are listed in file doc/news.txt. Known bugs and things to do in the future are listed in doc/todo.txt. The license conditions are explained in COPYING. Send mail to scheme-48-request@s48.org to be put on a mailing list for announcements, discussion, bug reports, and bug fixes. ----- The Scheme 48 root directory is organized as follows (not all files are listed here): README this file WINDOWS.txt notes on the Windows port INSTALL installation instructions COPYING notices and licenses COPYING.rtf copyright notice in RTF format configure configuration script Makefile.in input to configure doc/ some documentation scheme48.man a Unix-style manual page manual.ps manual in Postscript manual.pdf manual in PDF html/ manual in html (the root is html/index.html) src/ manual sources todo.txt list of improvements we hope to make someday news.txt list of improvements we have already made io.txt how the I/O system works deriving.txt how to create derived versions scheme/ scheme source files packages.scm meta-module definitions interfaces.scm system interface definitions more-interfaces.scm system interface definitions *-packages.scm module definitions bcomp/ the byte-code compiler vm/ virtual machine sources (written in Pre-Scheme) rts/ run-time system sources link/ static linker env/ development environment modules (debugger, etc.) big/ useful Scheme libraries and extensions ("Big Scheme") cml/ Concurrent ML libraries alt/ portable implementations of some Scheme 48 features opt/ optional code optimizer for the byte-code compiler prescheme/ code for running the VM using Scheme 48 debug/ debugging utilities, tests, etc. misc/ very miscellaneous things (e.g. AMB operator) posix/ interface to POSIX system calls srfi/ SRFI implementations sort/ sorting libraries ps-compiler/ Pre-Scheme -> C compiler c/ c source files sysdep.h.in input to configure scheme48vm.c most of the VM (generated by Pre-Scheme compiler) scheme48vm.h extern declarations for scheme48vm.c scheme48vm-prelude.h internal declarations for scheme48vm.c scheme48heap.c storage management (generated by Pre-Scheme compiler) scheme48heap.h extern declarations for scheme48heap.c scheme48read-image.c reading a heap from a file scheme48write-image.c writing a heap to a file scheme48image.h extern declarations for scheme48...-image.c scheme48write-barrier.h WRITE_BARRIER(...) macro main.c entry point for the VM prescheme.h part of the VM bignum.c large integers bignum.h declarations for large integers bignumint.h internal declarations for large integers external.c support for calling C and being called from C extension.c default definition of vm_extension() scheme48.h C declarations and macros for Scheme 48 data structures scheme48.h.in template for scheme48.h old-scheme48.h old version, included for compatibility c-mods.h minor additions to the C language event.h header file for OS interface io.h ditto fd-io.h ditto srfi-27.c C-side support for SRFI 27 (random bits) asm-glue.c support code for (upcoming) native code unix/ Unix-specific source files unix.h header file for unix/* files posix/ C half of interface to POSIX system calls fake/ C files for insufficiently POSIX-compliant systems build/ code for building the system filenames.make included by Makefile, generated automatically filenames.scm code for generating filenames.make initial.image an image file containing a minimal Scheme system initial.debug debugging database for same initial.scm script for creating initial.image build-usual-image script for creating scheme48.image load-linker.exec script for loading the external linker build-external-modules script for creating external-module initializer minor-version-number current version number generate-c-header.bat Windows batch file for generating c/scheme48.h build-usual-image.bat Windows batch file for creating scheme48.image build-initial-image.bat Windows batch file for creating build/initial.image i-know-what-i-am-doing.bat Windows batch file for compiling VM to C scheme48.wxs WiX script for generating scheme48.msi build/{UnicodeData.txt,PropList.txt,SpecialCasing.txt,CaseFolding.txt,CompositionExclusions.txt} Unicode data files emacs/ Emacs support scheme48-1.9/COPYING.rtf000644 004306 005702 00000003554 12067075540 015662 0ustar00sperberPUStaff000000 000000 {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fnil\fcharset0 Arial;}} {\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\sb100\sa100\f0\fs20 Copyrig\f1 ht \lang1033\fs24\'a9\lang1031\fs20 19\f0 86-2001 Richard Kelsey and Jonathan Rees.\par \pard Copyright \lang1033\f1\fs24\'a9\lang1031\f0\fs20 2001-2007 Michael Sperber and Martin Gasbichler.\par Copyright \lang1033\f1\fs24\'a9\lang1031\f0\fs20 2007-2010 Michael Sperber and Marcus Crestani.\par All rights reserved.\par \par Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par \par 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par 3. The name of the authors may not be used to endorse or promote products derived from this software without specific prior written permission.\par \par THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par } scheme48-1.9/COPYING000644 004306 005702 00000007074 12067075540 015071 0ustar00sperberPUStaff000000 000000 This collection of files constitutes the Scheme 48 1.9 distribution. It is distributed under the following terms: Copyright © 1986-2001 Richard Kelsey and Jonathan Rees. Copyright © 2001-2007 Michael Sperber and Martin Gasbichler. Copyright © 2007-2012 Michael Sperber and Marcus Crestani. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notices, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notices, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Scheme 48 1.9 derives from Scheme 48 0.58, which was developed by Richard Kelsey and Jonathan Rees and incorporates PreScheme 0.5 by Richard Kelsey. The distribution includes a number of contributions by permission: - This distribution includes a bignum arithmetic implementation (files c/bignum.c, c/bignum.h, c/bignumint.h) obtained from MIT Scheme. See the file contents for license information. - This distribution contains code for printing floating-point numbers by Robert G. Burger, in file c/free.c. See the file contents for license information. - This distribution includes files 'configure', 'aclocal.m4', 'config.sub', 'sysdep.h.in' which are output of the 'autoconf' program. The Free Software Foundation gives unlimited permission to copy, distribute and modify 'autoconf' output. - This distribution includes file 'mkinstalldirs' by Noah Friedman, in the public domain. - File INSTALL includes text taken from the 'autoconf' distribution from the Free Software Foundation. See the file contents for license information. - File install-sh is part of X11R6 from the X Consortium. See the file contents for license information. - This distribution includes code from SRFI reference implementations in directory scheme/srfi and in file c/srfi-27.c, all under the public domain or available under open-source licenses; see the individual files from this directory for license information. - This distribution includes code for sorting in directory scheme/sort by Olin Shivers, under the public domain. - This distribution includes code for processing Unicode text contributed by Basis Technology Corporation, otherwise distributed under the license above. - This distributes includes code from the tex2page distribution by Dorai Sitaram. See the files doc/src/css.t2p and doc/src/manual.t2p for license information. scheme48-1.9/INSTALL000644 004306 005702 00000042313 12070060502 015044 0ustar00sperberPUStaff000000 000000 Scheme 48 installation instructions for Unix -------------------------------------------- (for notes on Windows installation, check WINDOWS.txt) A typical installation would proceed as follows: download the .tgz file to your /tmp directory, and then issue the following shell commands: cd /usr/local/src gunzip configures Scheme 48 with a specific garbage collector (GC). Two GCs ship with the system "twospace" and "bibop"---the default is "bibop": The twospace GC is simple, but has inferior performance and requires a fixed limit on the heap size. The bibop GC is much more sophisticated and faster, and it allows specifying "-h 0" on the command line, meaning that the heap will expand as necessary to accomodate the program. Note that this means that a program with, say, infinite non-tail recursion will grow the heap indefinitely. --enable-universal-binary works only on Apple Macs and means that Scheme 48 will be built as a Universal Binary that can run on both PowerPC and Intel Macs. --enable-force-32bit forces configuration for a 32-bit executable on a 64-bit system. --enable-glib configures Scheme 48 to use the glib event loop. For more information on how to customize an installation of Scheme 48, see doc/install.txt. -------------------------------------------- Attached are the generic instructions for autoconf-based installation. Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. scheme48-1.9/WINDOWS.txt000644 004306 005702 00000011365 12067075540 015727 0ustar00sperberPUStaff000000 000000 Scheme 48 Windows port ---------------------- Starting with version 1.3, Scheme 48 has a native Windows port, which works on Windows NT 4.0 and above (including Windows 2000, XP and Vista, but not Windows 95, Windows 98, or Windows ME). Specifically, the following caveats apply to the Windows port: o The "old-style" interface to loading external code dynamically doesn't work. (But the new interface works---see doc\news.txt and the documentation.) o The Posix libraries don't work (and probably never will, at least not in the current form). Installing Scheme 48 from the installer --------------------------------------- To install Scheme 48, download the .msi file and double-click on it. This requires Windows Installer version 2.0 or greater to work. Building Scheme 48 from source ------------------------------ The Scheme 48 developers build the VM using Microsoft Visual C++ 2010 Express Edition, which can be downloaded for free from the Microsoft web site. In order to build Scheme 48 from scratch, the following steps are needed: - install a recent regular release of Scheme 48 - generate the various Unicode tables via build\generate-unicode-info.bat (see below) - generate the initial image via build\build-initial-image.bat (see below) - generate the C headers via build\generate-c-header.bat (see below) - generate the C code for the VM and the BIBOP GC (see below) - build the VM itself (see below) - build scheme48.image via build\build-usual-image.bat (see below) - generate a batch file to run Scheme 48 - run the test suite via build\check.bat To run the various batch files, you should be sitting in a shell in the root of the Scheme 48 source-code hierarchy. If you have Boo (or are willing to download it), you can use build\BuildS48.boo to perform the above steps with far less typing. Read the comments at the beginning of BuildS48.boo for instructions. You can then start Scheme 48 by saying: scheme48 build\generate-unicode-info.bat This builds the Unicode tables from source. build\generate-unicode-info.bat "C:\Program Files\Scheme 48\Scheme 48 1.8\scheme48" build\build-initial-image.bat This builds build\initial.image-32 from source. It requires a command-line argument specifying how to start up a Scheme 48 REPL. Before running it, you need to generate build\filenames.bat via -a batch < build\extract-filenames.scm where starts up a Scheme 48 REPL, for example "C:\Program Files\Scheme 48\Scheme 48 1.8\scheme48" -a batch < build\extract-filenames.scm build\build-initial-image.bat "C:\Program Files\Scheme 48\Scheme 48 1.8\scheme48" build\generate-c-header.bat This generates the c\scheme48.h header file needed for compiling various VM extensions. It requires a command-line argument specifying how to start up a Scheme 48 REPL. Example: build\generate-c-header.bat "C:\Program Files\Scheme 48\Scheme 48 1.8\scheme48" build\compile-vm.bat build\compile-bibop-gc.bat This builds the VM C sources from Scheme. It requires a command-line argument specifying how to start up a Scheme 48 REPL. build\compile-vm.bat "C:\Program Files\Scheme 48\Scheme 48 1.8\scheme48" build\compile-bibop-gc.bat "C:\Program Files\Scheme 48\Scheme 48 1.8\scheme48" building the VM and dependent DLLs: To compile the VM, load the scheme48.sln "solution" file into Visual C++, choose a configuration ("Win32 Debug" or "Win32 Release") and build the entire solution. build\build-usual-image.bat This generates the default scheme48.image from build\initial.image. It requires six command-line arguments: - the root directory of the Scheme 48 sources *with a trailing backslash* - the full path of the installed scheme/ subdirectory of the Scheme 48 sources - the full path of the directory containing external code - the name of the image file to be generated - the name of the VM executable - the filename of the initial image Example (supposing the Scheme 48 root directory sits at c:\src\s48): build\build-usual-image.bat ".\" "C:\src\s48\scheme" "C:\src\s48" scheme48.image scheme48vm.exe build\initial.image-32 build\generate-go.bat This generates a batch file to start Scheme 48. It requires three command-line arguments: - the name of the batch file to produce - the full path of the VM executable - the full path of the image file Example (supposing the Scheme 48 root directory sits at c:\src\s48): build\generate-go.bat scheme48.bat "c:\src\s48\scheme48vm.exe" "c:\src\s48\scheme48.image" build\check.bat This runs the test cases that should succeed on Windows. It requires a command-line argument specifying the Scheme 48 executable to check. Example (using scheme48.bat generated by build\generate-go.bat above): build\check.bat "C:\src\s48\scheme48.bat" scheme48-1.9/configure000755 004306 005702 00001037703 12067075735 015756 0ustar00sperberPUStaff000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="c/prescheme.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='S48_GC_TWOSPACE S48_GC_BIBOP SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LDFLAGS_VM INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CPP GREP EGREP LIBOBJS PKG_CONFIG GLIB_CFLAGS GLIB_LIBS ASM_OBJECTS ASM_STYLE LD DYNAMIC_EXTERNALS_CFLAGS DYNAMIC_EXTERNALS_LDFLAGS DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE GC_OBJS ADDITIONAL_EXTERNALS ADDITIONAL_EXTERNAL_OBJS BIT_SUFFIX LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG GLIB_CFLAGS GLIB_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-gc=GC choose garbage collector (twospace, bibop), default is bibop --enable-force-32bit Build a 32bit binary on architectures where this is not the default --enable-universal-binary Build MacOS X Universal Binary --disable-largefile omit support for large files --enable-glib Use the glib event loop --enable-native code Include support for native-code compiler Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers c/sysdep.h" ac_config_headers="$ac_config_headers c/scheme48arch.h" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6; } if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "$cross_compiling" = yes; then true else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main() { return 0;} _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi case "$target" in *-*-aix*) if test -z "$CC" ; then for ac_prog in cc_r xlc_r cc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi ;; esac # Check whether --enable-gc was given. if test "${enable_gc+set}" = set; then enableval=$enable_gc; case $enableval in twospace ) cat >>confdefs.h <<\_ACEOF #define S48_GC_TWOSPACE 1 _ACEOF GC_OBJS='${GC_TWOSPACE_OBJS}' ;; bibop ) cat >>confdefs.h <<\_ACEOF #define S48_GC_BIBOP 1 _ACEOF GC_OBJS='${GC_BIBOP_OBJS}' ;; * ) { { echo "$as_me:$LINENO: error: Invalid argument to --enable-gc" >&5 echo "$as_me: error: Invalid argument to --enable-gc" >&2;} { (exit 1); exit 1; }; } ;; esac else cat >>confdefs.h <<\_ACEOF #define S48_GC_BIBOP 1 _ACEOF GC_OBJS='${GC_BIBOP_OBJS}' fi { echo "$as_me:$LINENO: checking whether we must build a 32bit binary" >&5 echo $ECHO_N "checking whether we must build a 32bit binary... $ECHO_C" >&6; } # Check whether --enable-force-32bit was given. if test "${enable_force_32bit+set}" = set; then enableval=$enable_force_32bit; if test "$enable_force_32bit" != no; then S48_FORCE_32_P="1" BIT_SUFFIX="32" case "$host" in x86_64-*-linux-gnu ) CFLAGS="${CFLAGS} -m32"; LDFLAGS="${LDFLAGS} -m32"; ;; *darwin* ) ;; * ) { { echo "$as_me:$LINENO: error: Don't know how to build a 32bit binary on this architecture" >&5 echo "$as_me: error: Don't know how to build a 32bit binary on this architecture" >&2;} { (exit 1); exit 1; }; } ;; esac cat >>confdefs.h <<\_ACEOF #define BUILD_32BIT 1 _ACEOF { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else S48_FORCE_32_P="0" { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi else S48_FORCE_32_P="0" { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi { echo "$as_me:$LINENO: checking bits per byte" >&5 echo $ECHO_N "checking bits per byte... $ECHO_C" >&6; } if test "${ac_cv_bits_per_byte+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: failed to compile test program" >&5 echo "$as_me: error: failed to compile test program" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include main() { unsigned char c = 1; int i = 0; FILE *f=fopen("conftestval", "w"); if (!f) exit(1); while (c != 0) { i++; c = c << 1; } fprintf(f, "%d\n", i); exit(0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_bits_per_byte=`cat conftestval` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_bits_per_byte=0 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi if test "$ac_cv_bits_per_byte" = "0" -o "$ac_cv_bits_per_byte" = ""; then { { echo "$as_me:$LINENO: error: Unable to determine bits per byte, see config.log for details." >&5 echo "$as_me: error: Unable to determine bits per byte, see config.log for details." >&2;} { (exit 1); exit 1; }; }; fi { echo "$as_me:$LINENO: result: $ac_cv_bits_per_byte" >&5 echo "${ECHO_T}$ac_cv_bits_per_byte" >&6; } cat >>confdefs.h <<_ACEOF #define BITS_PER_BYTE $ac_cv_bits_per_byte _ACEOF { echo "$as_me:$LINENO: checking size of void *" >&5 echo $ECHO_N "checking size of void *... $ECHO_C" >&6; } if test "${ac_cv_sizeof_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: failed to compile test program" >&5 echo "$as_me: error: failed to compile test program" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", (int)sizeof(void *)); exit(0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_void_p=`cat conftestval` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_sizeof_void_p=0 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi if test "$ac_cv_sizeof_void_p" = "0" -o "$ac_cv_sizeof_void_p" = ""; then { { echo "$as_me:$LINENO: error: Unable to determine sizeof (void *), see config.log for details." >&5 echo "$as_me: error: Unable to determine sizeof (void *), see config.log for details." >&2;} { (exit 1); exit 1; }; }; fi { echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5 echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF { echo "$as_me:$LINENO: checking for BIT_SUFFIX" >&5 echo $ECHO_N "checking for BIT_SUFFIX... $ECHO_C" >&6; } if test $BIT_SUFFIX; then { echo "$as_me:$LINENO: result: You forced BIT_SUFFIX to be $BIT_SUFFIX." >&5 echo "${ECHO_T}You forced BIT_SUFFIX to be $BIT_SUFFIX." >&6; } else BIT_SUFFIX=`expr $ac_cv_sizeof_void_p \* $ac_cv_bits_per_byte` { echo "$as_me:$LINENO: result: $BIT_SUFFIX" >&5 echo "${ECHO_T}$BIT_SUFFIX" >&6; } fi cat >>confdefs.h <<_ACEOF #define WORDSIZE $BIT_SUFFIX _ACEOF { echo "$as_me:$LINENO: checking whether we are building a Universal Binary" >&5 echo $ECHO_N "checking whether we are building a Universal Binary... $ECHO_C" >&6; } # Check whether --enable-universal-binary was given. if test "${enable_universal_binary+set}" = set; then enableval=$enable_universal_binary; if test "$enable_universal_binary" != no; then case $host in *darwin* ) S48_BUILD_UNIVERSAL_P="1" cat >>confdefs.h <<\_ACEOF #define BUILD_UNIVERSAL_BINARY 1 _ACEOF { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } ;; * ) { { echo "$as_me:$LINENO: error: --enable-universal-binary only works on Mac OS X" >&5 echo "$as_me: error: --enable-universal-binary only works on Mac OS X" >&2;} { (exit 1); exit 1; }; } ;; esac else S48_BUILD_UNIVERSAL_P="0" { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi else S48_BUILD_UNIVERSAL_P="0" { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi build_universal="$S48_BUILD_UNIVERSAL_P" force_32="$S48_FORCE_32_P" if test "$build_universal" = 1 -a "$force_32" = 1; then { echo "$as_me:$LINENO: checking for gcc argument i386" >&5 echo $ECHO_N "checking for gcc argument i386... $ECHO_C" >&6; } save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -arch i386" LDFLAGS="$LDFLAGS -arch i386" compiles=0 links=0 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then compiles=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 compiles=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then links=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 links=0 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$links" = "1" -a "$compiles" = "1"; then { echo "$as_me:$LINENO: result: OK" >&5 echo "${ECHO_T}OK" >&6; } else CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } fi { echo "$as_me:$LINENO: checking for gcc argument ppc" >&5 echo $ECHO_N "checking for gcc argument ppc... $ECHO_C" >&6; } save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -arch ppc" LDFLAGS="$LDFLAGS -arch ppc" compiles=0 links=0 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then compiles=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 compiles=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then links=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 links=0 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$links" = "1" -a "$compiles" = "1"; then { echo "$as_me:$LINENO: result: OK" >&5 echo "${ECHO_T}OK" >&6; } else CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } fi elif test "$build_universal" = 1 -a "$force_32" = 0; then if test "$BIT_SUFFIX" = 32; then { echo "$as_me:$LINENO: checking for gcc argument i386" >&5 echo $ECHO_N "checking for gcc argument i386... $ECHO_C" >&6; } save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -arch i386" LDFLAGS="$LDFLAGS -arch i386" compiles=0 links=0 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then compiles=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 compiles=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then links=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 links=0 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$links" = "1" -a "$compiles" = "1"; then { echo "$as_me:$LINENO: result: OK" >&5 echo "${ECHO_T}OK" >&6; } else CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } fi { echo "$as_me:$LINENO: checking for gcc argument ppc" >&5 echo $ECHO_N "checking for gcc argument ppc... $ECHO_C" >&6; } save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -arch ppc" LDFLAGS="$LDFLAGS -arch ppc" compiles=0 links=0 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then compiles=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 compiles=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then links=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 links=0 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$links" = "1" -a "$compiles" = "1"; then { echo "$as_me:$LINENO: result: OK" >&5 echo "${ECHO_T}OK" >&6; } else CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } fi elif test "$BIT_SUFFIX" = 64; then { echo "$as_me:$LINENO: checking for gcc argument x86_64" >&5 echo $ECHO_N "checking for gcc argument x86_64... $ECHO_C" >&6; } save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -arch x86_64" LDFLAGS="$LDFLAGS -arch x86_64" compiles=0 links=0 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then compiles=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 compiles=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then links=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 links=0 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$links" = "1" -a "$compiles" = "1"; then { echo "$as_me:$LINENO: result: OK" >&5 echo "${ECHO_T}OK" >&6; } else CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } fi { echo "$as_me:$LINENO: checking for gcc argument ppc64" >&5 echo $ECHO_N "checking for gcc argument ppc64... $ECHO_C" >&6; } save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -arch ppc64" LDFLAGS="$LDFLAGS -arch ppc64" compiles=0 links=0 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then compiles=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 compiles=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then links=1 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 links=0 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$links" = "1" -a "$compiles" = "1"; then { echo "$as_me:$LINENO: result: OK" >&5 echo "${ECHO_T}OK" >&6; } else CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } fi fi fi { echo "$as_me:$LINENO: checking how to compile position independent code" >&5 echo $ECHO_N "checking how to compile position independent code... $ECHO_C" >&6; } case "$host_os" in solaris* ) if test "$GCC" = "yes"; then PIC="-fPIC" else # for SUN's compiler PIC="-KPIC" fi ;; darwin*|macosx* ) # Code on this platform is PIC by default PIC="" ;; *) PIC="-fPIC" ;; esac if test "$PIC" = ""; then { echo "$as_me:$LINENO: result: no extra option necessary" >&5 echo "${ECHO_T}no extra option necessary" >&6; } else { echo "$as_me:$LINENO: result: $PIC" >&5 echo "${ECHO_T}$PIC" >&6; } fi mkdir -p c/bibop mkdir -p c/unix mkdir -p c/net mkdir -p c/r6rs mkdir -p c/posix mkdir -p c/fake mkdir -p c/ffi-test { echo "$as_me:$LINENO: checking -rdynamic" >&5 echo $ECHO_N "checking -rdynamic... $ECHO_C" >&6; } oldLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -rdynamic" if test "$cross_compiling" = yes; then { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } LDFLAGS="$oldLDFLAGS" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main() { return 0;} _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } LDFLAGS="$oldLDFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: checking LDFLAGS_VM" >&5 echo $ECHO_N "checking LDFLAGS_VM... $ECHO_C" >&6; } case "$host_os" in aix* ) if test "$GCC" = "yes"; then LDFLAGS_VM="-Xlinker -brtl -Xlinker -bE:$srcdir/c/scheme48.exp" else LDFLAGS_VM="-brtl -bE:$srcdir/c/scheme48.exp" fi ;; * ) LDFLAGS_VM= ;; esac { echo "$as_me:$LINENO: result: $LDFLAGS_VM" >&5 echo "${ECHO_T}$LDFLAGS_VM" >&6; } { echo "$as_me:$LINENO: checking for library containing strerror" >&5 echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } if test "${ac_cv_search_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_strerror=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_file_offset_bits=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -f -r conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_large_files=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -f -r conftest* fi fi { echo "$as_me:$LINENO: checking for inline keyword" >&5 echo $ECHO_N "checking for inline keyword... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include inline void f(void) { printf("inlined"); } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } cat >>confdefs.h <<\_ACEOF #define HAVE_INLINE 1 _ACEOF else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking for main in -lm" >&5 echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5 echo "${ECHO_T}$ac_cv_lib_m_main" >&6; } if test $ac_cv_lib_m_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for main in -ldl" >&5 echo $ECHO_N "checking for main in -ldl... $ECHO_C" >&6; } if test "${ac_cv_lib_dl_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dl_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dl_main" >&5 echo "${ECHO_T}$ac_cv_lib_dl_main" >&6; } if test $ac_cv_lib_dl_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lmld" >&5 echo $ECHO_N "checking for main in -lmld... $ECHO_C" >&6; } if test "${ac_cv_lib_mld_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_mld_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_mld_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_mld_main" >&5 echo "${ECHO_T}$ac_cv_lib_mld_main" >&6; } if test $ac_cv_lib_mld_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBMLD 1 _ACEOF LIBS="-lmld $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lnsl" >&5 echo $ECHO_N "checking for main in -lnsl... $ECHO_C" >&6; } if test "${ac_cv_lib_nsl_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_nsl_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_main" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_main" >&6; } if test $ac_cv_lib_nsl_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBNSL 1 _ACEOF LIBS="-lnsl $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lgen" >&5 echo $ECHO_N "checking for main in -lgen... $ECHO_C" >&6; } if test "${ac_cv_lib_gen_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_gen_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gen_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_gen_main" >&5 echo "${ECHO_T}$ac_cv_lib_gen_main" >&6; } if test $ac_cv_lib_gen_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEN 1 _ACEOF LIBS="-lgen $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lsocket" >&5 echo $ECHO_N "checking for main in -lsocket... $ECHO_C" >&6; } if test "${ac_cv_lib_socket_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_socket_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_socket_main" >&5 echo "${ECHO_T}$ac_cv_lib_socket_main" >&6; } if test $ac_cv_lib_socket_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi { echo "$as_me:$LINENO: checking for getpwnam in -lsun" >&5 echo $ECHO_N "checking for getpwnam in -lsun... $ECHO_C" >&6; } if test "${ac_cv_lib_sun_getpwnam+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsun $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getpwnam (); int main () { return getpwnam (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_sun_getpwnam=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_sun_getpwnam=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_sun_getpwnam" >&5 echo "${ECHO_T}$ac_cv_lib_sun_getpwnam" >&6; } if test $ac_cv_lib_sun_getpwnam = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSUN 1 _ACEOF LIBS="-lsun $LIBS" fi echo checking for RISC/OS POSIX library lossage if test -f /usr/posix/usr/lib/libc.a; then LIBS="${LIBS} /usr/posix/usr/lib/libc.a" fi { echo "$as_me:$LINENO: checking for struct tm.tm_gmtoff" >&5 echo $ECHO_N "checking for struct tm.tm_gmtoff... $ECHO_C" >&6; } if test "${ac_cv_member_struct_tm_tm_gmtoff+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static struct tm ac_aggr; if (ac_aggr.tm_gmtoff) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_tm_tm_gmtoff=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static struct tm ac_aggr; if (sizeof ac_aggr.tm_gmtoff) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_tm_tm_gmtoff=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct_tm_tm_gmtoff=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_gmtoff" >&5 echo "${ECHO_T}$ac_cv_member_struct_tm_tm_gmtoff" >&6; } if test $ac_cv_member_struct_tm_tm_gmtoff = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_TM_GMTOFF 1 _ACEOF fi { echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi { echo "$as_me:$LINENO: checking for socklen_t" >&5 echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include socklen_t x; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int accept (int, struct sockaddr *, size_t *); int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { echo "$as_me:$LINENO: result: size_t" >&5 echo "${ECHO_T}size_t" >&6; } cat >>confdefs.h <<\_ACEOF #define socklen_t size_t _ACEOF else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: result: int" >&5 echo "${ECHO_T}int" >&6; } cat >>confdefs.h <<\_ACEOF #define socklen_t int _ACEOF fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; } if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_signal=int else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f -r conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f -r conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for uintptr_t" >&5 echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; } if test "${ac_cv_type_uintptr_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef uintptr_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_uintptr_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_uintptr_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; } if test $ac_cv_type_uintptr_t = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_UINTPTR_T 1 _ACEOF else for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >>confdefs.h <<_ACEOF #define uintptr_t $ac_type _ACEOF ac_type= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test -z "$ac_type" && break done fi { echo "$as_me:$LINENO: checking for uint16_t" >&5 echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint16_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_uint16_t=no for ac_type in 'uint16_t' 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) -1 >> (16 - 1) == 1)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then case $ac_type in uint16_t) ac_cv_c_uint16_t=yes ;; *) ac_cv_c_uint16_t=$ac_type ;; esac else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_uint16_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_uint16_t" >&5 echo "${ECHO_T}$ac_cv_c_uint16_t" >&6; } case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac for ac_header in libgen.h sys/timeb.h posix/time.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/select.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sysexits.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in langinfo.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for nl_langinfo" >&5 echo $ECHO_N "checking for nl_langinfo... $ECHO_C" >&6; } if test "${ac_cv_func_nl_langinfo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define nl_langinfo to an innocuous variant, in case declares nl_langinfo. For example, HP-UX 11i declares gettimeofday. */ #define nl_langinfo innocuous_nl_langinfo /* System header to define __stub macros and hopefully few prototypes, which can conflict with char nl_langinfo (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef nl_langinfo /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nl_langinfo (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_nl_langinfo || defined __stub___nl_langinfo choke me #endif int main () { return nl_langinfo (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_nl_langinfo=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_nl_langinfo=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_nl_langinfo" >&5 echo "${ECHO_T}$ac_cv_func_nl_langinfo" >&6; } if test $ac_cv_func_nl_langinfo = yes; then : else case " $LIBOBJS " in *" c/fake/langinfo.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS c/fake/langinfo.$ac_objext" ;; esac fi for ac_func in gettimeofday ftime select setitimer sigaction execvpe do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in poll.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in poll do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } PKG_CONFIG="" fi fi # Check whether --enable-glib was given. if test "${enable_glib+set}" = set; then enableval=$enable_glib; if test "$enable_glib" != no; then pkg_failed=no { echo "$as_me:$LINENO: checking for GLIB" >&5 echo $ECHO_N "checking for GLIB... $ECHO_C" >&6; } if test -n "$PKG_CONFIG"; then if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glib-2.0\"") >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glib-2.0\"") >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0"` else GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0"` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } { echo "$as_me:$LINENO: WARNING: glib-2.0 not found" >&5 echo "$as_me: WARNING: glib-2.0 not found" >&2;} elif test $pkg_failed = untried; then { echo "$as_me:$LINENO: WARNING: glib-2.0 not found" >&5 echo "$as_me: WARNING: glib-2.0 not found" >&2;} else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } cat >>confdefs.h <<\_ACEOF #define HAVE_GLIB 1 _ACEOF fi LIBS="$LIBS $GLIB_LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" { echo "$as_me:$LINENO: checking whether the GLIB flags work" >&5 echo $ECHO_N "checking whether the GLIB flags work... $ECHO_C" >&6; } if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main() { return 0;} _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: Failed to compile with GLIB flags." >&5 echo "$as_me: error: Failed to compile with GLIB flags." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi for ac_func in dlopen do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in socket chroot do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for strerror" >&5 echo $ECHO_N "checking for strerror... $ECHO_C" >&6; } if test "${ac_cv_func_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define strerror to an innocuous variant, in case declares strerror. For example, HP-UX 11i declares gettimeofday. */ #define strerror innocuous_strerror /* System header to define __stub macros and hopefully few prototypes, which can conflict with char strerror (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef strerror /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_strerror || defined __stub___strerror choke me #endif int main () { return strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_strerror=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_strerror=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_strerror" >&5 echo "${ECHO_T}$ac_cv_func_strerror" >&6; } if test $ac_cv_func_strerror = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STRERROR 1 _ACEOF else case " $LIBOBJS " in *" c/fake/strerror.o.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS c/fake/strerror.o.$ac_objext" ;; esac fi { echo "$as_me:$LINENO: checking environ" >&5 echo $ECHO_N "checking environ... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { extern char **environ; if (environ) return 0; else return 1; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then cat >>confdefs.h <<\_ACEOF #define ENVIRON_NAME environ _ACEOF { echo "$as_me:$LINENO: result: using environ" >&5 echo "${ECHO_T}using environ" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { extern char **__environ; if (__environ) return 0; else return 1; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then cat >>confdefs.h <<\_ACEOF #define ENVIRON_NAME __environ _ACEOF { echo "$as_me:$LINENO: result: using __environ" >&5 echo "${ECHO_T}using __environ" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: WARNING: no environ variable found" >&5 echo "$as_me: WARNING: no environ variable found" >&2;} case " $LIBOBJS " in *" c/fake/environ.o.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS c/fake/environ.o.$ac_objext" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext build_universal="$S48_BUILD_UNIVERSAL_P" { echo "$as_me:$LINENO: checking IEEE floating-point endianness" >&5 echo $ECHO_N "checking IEEE floating-point endianness... $ECHO_C" >&6; } if test "$build_universal" = "1"; then { echo "$as_me:$LINENO: result: building Universal Binary; using compiler defined macros instead" >&5 echo "${ECHO_T}building Universal Binary; using compiler defined macros instead" >&6; } else if test "$cross_compiling" = yes; then ieee_endianness="least first" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include typedef uint32_t word32_t; typedef union { double d; word32_t word[2]; } double_overlay; #define DOUBLE_WORD0(x) ((double_overlay*)&(x))->word[0] #define DOUBLE_WORD1(x) ((double_overlay*)&(x))->word[1] int main(void) { double n = 0.3; /* least significant byte first */ if ((DOUBLE_WORD0(n) == 0x33333333) && (DOUBLE_WORD1(n) == 0x3fd33333)) return 0; /* most significant byte first */ else if ((DOUBLE_WORD1(n) == 0x33333333) && (DOUBLE_WORD0(n) == 0x3fd33333)) return 1; else { fprintf(stderr, "WARNING: unknown IEEE format; assuming IEEE with least significant byte first\n"); return 0; } } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ieee_endianness="least first" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ieee_endianness="most first" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ieee_endianness" >&5 echo "${ECHO_T}$ieee_endianness" >&6; } if test "$ieee_endianness" = "most first"; then cat >>confdefs.h <<\_ACEOF #define IEEE_MOST_FIRST 1 _ACEOF fi fi { echo "$as_me:$LINENO: checking native-code compiler support" >&5 echo $ECHO_N "checking native-code compiler support... $ECHO_C" >&6; } # Check whether --enable-native-code was given. if test "${enable_native_code+set}" = set; then enableval=$enable_native_code; if test "$enable_native_code" != no; then case $GC_OBJS in '${GC_TWOSPACE_OBJS}' ) case `uname -m` in i?86 ) { echo "$as_me:$LINENO: result: x86" >&5 echo "${ECHO_T}x86" >&6; } ASM_OBJECTS='${X86_ASM_OBJECTS}' for ac_func in sigaltstack do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF HAVE_SIGALTSTACK=1 else HAVE_SIGALTSTACK=0 fi done if test "$HAVE_SIGALTSTACK" = 0; then { { echo "$as_me:$LINENO: error: Your system lacks sigaltstack" >&5 echo "$as_me: error: Your system lacks sigaltstack" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: checking assembler style" >&5 echo $ECHO_N "checking assembler style... $ECHO_C" >&6; } case `uname` in Darwin ) { echo "$as_me:$LINENO: result: Darwin" >&5 echo "${ECHO_T}Darwin" >&6; } ASM_STYLE='darwin' ;; * ) { echo "$as_me:$LINENO: result: GNU(hopefully)" >&5 echo "${ECHO_T}GNU(hopefully)" >&6; } ASM_STYLE='gnu' ;; esac ;; * ) { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ASM_OBJECTS='${FAKE_ASM_OBJECTS}' esac;; * ) { echo "$as_me:$LINENO: result: no (picked GC not compatible)" >&5 echo "${ECHO_T}no (picked GC not compatible)" >&6; } ASM_OBJECTS='${FAKE_ASM_OBJECTS}' esac else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ASM_OBJECTS='${FAKE_ASM_OBJECTS}' fi else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ASM_OBJECTS='${FAKE_ASM_OBJECTS}' fi for ac_prog in ld cc gcc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then { echo "$as_me:$LINENO: result: $LD" >&5 echo "${ECHO_T}$LD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$LD" && break done { echo "$as_me:$LINENO: checking compile and link flags for dynamic externals" >&5 echo $ECHO_N "checking compile and link flags for dynamic externals... $ECHO_C" >&6; } DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE="" case "$host_os" in hpux* ) DYNAMIC_EXTERNALS_CFLAGS='+z -D_HPUX_SOURCE' DYNAMIC_EXTERNALS_LDFLAGS='-b' ;; aix* ) DYNAMIC_EXTERNALS_CFLAGS='' DYNAMIC_EXTERNALS_LDFLAGS='-bM:SRE -brtl -bI:\$(incdir)/scheme48.exp -bnoentry -bE:\$(incdir)/scheme48-external.exp -lc' DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE='-bM:SRE -brtl -bI:\$(srcdir)/c/scheme48.exp -bnoentry -bE:\$(srcdir)/c/scheme48-external.exp -lc' ;; darwin*|macosx* ) DYNAMIC_EXTERNALS_CFLAGS='-fno-common' DYNAMIC_EXTERNALS_LDFLAGS="$CFLAGS $LDFLAGS -bundle -flat_namespace -undefined suppress" LD="$CC" ;; solaris* ) DYNAMIC_EXTERNALS_CFLAGS="$PIC" DYNAMIC_EXTERNALS_LDFLAGS="$LDFLAGS -G" LD="$CC" ;; linux* ) LD="$CC" DYNAMIC_EXTERNALS_CFLAGS="$PIC" DYNAMIC_EXTERNALS_LDFLAGS="-shared $LDFLAGS" ;; cygwin* ) LD="$CC" DYNAMIC_EXTERNALS_CFLAGS="" DYNAMIC_EXTERNALS_LDFLAGS='-shared $(bindir)/scheme48vm.a' DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE='-shared $(srcdir)/scheme48vm.a' ;; * ) DYNAMIC_EXTERNALS_CFLAGS="$PIC" DYNAMIC_EXTERNALS_LDFLAGS='-shared' ;; esac if test -z "$DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE"; then DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE="$DYNAMIC_EXTERNALS_LDFLAGS" fi { echo "$as_me:$LINENO: result: $DYNAMIC_EXTERNALS_CFLAGS, $DYNAMIC_EXTERNALS_LDFLAGS" >&5 echo "${ECHO_T}$DYNAMIC_EXTERNALS_CFLAGS, $DYNAMIC_EXTERNALS_LDFLAGS" >&6; } for ac_header in pthread.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF pthreads_done="no" { echo "$as_me:$LINENO: checking Pthreads support" >&5 echo $ECHO_N "checking Pthreads support... $ECHO_C" >&6; } if test "$pthreads_done" = "no"; then flags_result="" oldCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -mt" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="-mt (compile)" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) CFLAGS="$oldCFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi oldLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -mt" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="$flags_result -mt (link)" pthreads_done="yes" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) LDFLAGS="$oldLDFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi if test -n "$flags_result"; then { echo "$as_me:$LINENO: result: $flags_result" >&5 echo "${ECHO_T}$flags_result" >&6; } fi fi if test "$pthreads_done" = "no"; then flags_result="" oldCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -pthread" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="-pthread (compile)" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) CFLAGS="$oldCFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi oldLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -pthread" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="$flags_result -pthread (link)" pthreads_done="yes" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) LDFLAGS="$oldLDFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi if test -n "$flags_result"; then { echo "$as_me:$LINENO: result: $flags_result" >&5 echo "${ECHO_T}$flags_result" >&6; } fi fi if test "$pthreads_done" = "no"; then flags_result="" oldCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -pthreads" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="-pthreads (compile)" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) CFLAGS="$oldCFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi oldLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -pthreads" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="$flags_result -pthreads (link)" pthreads_done="yes" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) LDFLAGS="$oldLDFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi if test -n "$flags_result"; then { echo "$as_me:$LINENO: result: $flags_result" >&5 echo "${ECHO_T}$flags_result" >&6; } fi fi if test "$pthreads_done" = "no"; then flags_result="" oldCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -mthreads" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="-mthreads (compile)" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) CFLAGS="$oldCFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi oldLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -mthreads" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="$flags_result -mthreads (link)" pthreads_done="yes" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) LDFLAGS="$oldLDFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi if test -n "$flags_result"; then { echo "$as_me:$LINENO: result: $flags_result" >&5 echo "${ECHO_T}$flags_result" >&6; } fi fi if test "$pthreads_done" = "no"; then flags_result="" oldCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -thread" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="-thread (compile)" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) CFLAGS="$oldCFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi oldLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -thread" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main(void) { pthread_kill(pthread_self(), 0); } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flags_result="$flags_result -thread (link)" pthreads_done="yes" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) LDFLAGS="$oldLDFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi if test -n "$flags_result"; then { echo "$as_me:$LINENO: result: $flags_result" >&5 echo "${ECHO_T}$flags_result" >&6; } fi fi fi done if test "$GCC" = "yes"; then { echo "$as_me:$LINENO: checking -munaligned-doubles" >&5 echo $ECHO_N "checking -munaligned-doubles... $ECHO_C" >&6; } oldCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -munaligned-doubles" if test "$cross_compiling" = yes; then { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } CFLAGS="$oldCFLAGS" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main() { return 0;} _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } DYNAMIC_EXTERNALS_CFLAGS="$DYNAMIC_EXTERNALS_CFLAGS -munaligned-doubles" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } CFLAGS="$oldCFLAGS" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "c/sysdep.h") CONFIG_HEADERS="$CONFIG_HEADERS c/sysdep.h" ;; "c/scheme48arch.h") CONFIG_HEADERS="$CONFIG_HEADERS c/scheme48arch.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF S48_GC_TWOSPACE!$S48_GC_TWOSPACE$ac_delim S48_GC_BIBOP!$S48_GC_BIBOP$ac_delim SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim host!$host$ac_delim host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim LDFLAGS_VM!$LDFLAGS_VM$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim LIBOBJS!$LIBOBJS$ac_delim PKG_CONFIG!$PKG_CONFIG$ac_delim GLIB_CFLAGS!$GLIB_CFLAGS$ac_delim GLIB_LIBS!$GLIB_LIBS$ac_delim ASM_OBJECTS!$ASM_OBJECTS$ac_delim ASM_STYLE!$ASM_STYLE$ac_delim LD!$LD$ac_delim DYNAMIC_EXTERNALS_CFLAGS!$DYNAMIC_EXTERNALS_CFLAGS$ac_delim DYNAMIC_EXTERNALS_LDFLAGS!$DYNAMIC_EXTERNALS_LDFLAGS$ac_delim DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE!$DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE$ac_delim GC_OBJS!$GC_OBJS$ac_delim ADDITIONAL_EXTERNALS!$ADDITIONAL_EXTERNALS$ac_delim ADDITIONAL_EXTERNAL_OBJS!$ADDITIONAL_EXTERNAL_OBJS$ac_delim BIT_SUFFIX!$BIT_SUFFIX$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :H) # # CONFIG_HEADER # _ACEOF # Transform confdefs.h into a sed script `conftest.defines', that # substitutes the proper values into config.h.in to produce config.h. rm -f conftest.defines conftest.tail # First, append a space to every undef/define line, to ease matching. echo 's/$/ /' >conftest.defines # Then, protect against being on the right side of a sed subst, or in # an unquoted here document, in config.status. If some macros were # called several times there might be several #defines for the same # symbol, which is useless. But do not sort them, since the last # AC_DEFINE must be honored. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where # NAME is the cpp macro being defined, VALUE is the value it is being given. # PARAMS is the parameter list in the macro definition--in most cases, it's # just an empty string. ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ac_dB='\\)[ (].*,\\1define\\2' ac_dC=' ' ac_dD=' ,' uniq confdefs.h | sed -n ' t rset :rset s/^[ ]*#[ ]*define[ ][ ]*// t ok d :ok s/[\\&,]/\\&/g s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ' >>conftest.defines # Remove the space that was appended to ease matching. # Then replace #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. # (The regexp can be short, since the line contains either #define or #undef.) echo 's/ $// s,^[ #]*u.*,/* & */,' >>conftest.defines # Break up conftest.defines: ac_max_sed_lines=50 # First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" # Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" # Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" # et cetera. ac_in='$ac_file_inputs' ac_out='"$tmp/out1"' ac_nxt='"$tmp/out2"' while : do # Write a here document: cat >>$CONFIG_STATUS <<_ACEOF # First, check the format of the line: cat >"\$tmp/defines.sed" <<\\CEOF /^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*/b def /^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def b :def _ACEOF sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail grep . conftest.tail >/dev/null || break rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines conftest.tail echo "ac_result=$ac_in" >>$CONFIG_STATUS cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then echo "/* $configure_input */" >"$tmp/config.h" cat "$ac_result" >>"$tmp/config.h" if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else rm -f $ac_file mv "$tmp/config.h" $ac_file fi else echo "/* $configure_input */" cat "$ac_result" fi rm -f "$tmp/out12" ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi scheme48-1.9/configure.in000644 004306 005702 00000011317 12067075540 016342 0ustar00sperberPUStaff000000 000000 dnl Part of Scheme 48 1.9. See file COPYING for notices and license. dnl dnl Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Marcus dnl Crestani, Eric Knauel, David Frese, Ivan Shmakov, Taylor Campbell, dnl Will Noble dnl dnl Process this file with autoconf >= 2.60 to produce a configure script. dnl To do this, run: dnl env ACLOCAL="aclocal -I m4" autoreconf -v -i dnl AC_PREREQ([2.60])dnl dnl dnl We might want AC_WORDS_BIGENDIAN in the future. dnl We might want AC_CHAR_UNSIGNED in the future. dnl dnl dnl dnl AC_INIT(c/prescheme.h) AC_CONFIG_HEADER(c/sysdep.h) AC_CONFIG_HEADER(c/scheme48arch.h) AC_CANONICAL_HOST dnl set the cross-compile flag before we try anything. AC_TRY_RUN([int main() { return 0;}], [], [], [true]) S48_CC S48_PICK_GC S48_ENABLE_FORCE_32BIT S48_DETERMINE_BITS_PER_BYTE S48_DETERMINE_POINTER_SIZE S48_DETERMINE_BIT_SUFFIX S48_ENABLE_UNIVERSAL_BINARY S48_OSX_ARCH_FLAGS($S48_BUILD_UNIVERSAL_P,$S48_FORCE_32_P) S48_PIC_OPTION_NAME S48_CREATE_BUILD_DIRS S48_LDFLAGS AC_ISC_POSIX AC_SYS_LARGEFILE S48_INLINE AC_PROG_INSTALL AC_CHECK_LIB(m, main) AC_CHECK_LIB(dl, main) AC_CHECK_LIB(mld, main) AC_CHECK_LIB(nsl, main) AC_CHECK_LIB(gen, main) AC_CHECK_LIB(socket, main) AC_CHECK_LIB(sun, getpwnam) S48_POSIX_LIBC S48_TM_GMTOFF AC_CONST AC_MSG_CHECKING(for socklen_t) AC_TRY_COMPILE([#include #include socklen_t x; ],[], [AC_MSG_RESULT(yes)], [AC_TRY_COMPILE([#include #include int accept (int, struct sockaddr *, size_t *); ],[], [AC_MSG_RESULT(size_t) AC_DEFINE(socklen_t,size_t)], [AC_MSG_RESULT(int) AC_DEFINE(socklen_t,int)])]) AC_RETSIGTYPE AC_TYPE_UINTPTR_T AC_TYPE_UINT16_T AC_CHECK_HEADERS(libgen.h sys/timeb.h posix/time.h) AC_CHECK_HEADERS(sys/select.h) AC_CHECK_HEADERS(sysexits.h) AC_CHECK_HEADERS(langinfo.h) AC_CHECK_FUNC(nl_langinfo, [], [AC_LIBOBJ([c/fake/langinfo])]) AC_CHECK_FUNCS(gettimeofday ftime select setitimer sigaction execvpe) AC_CHECK_HEADERS(poll.h) AC_CHECK_FUNCS(poll) S48_GLIB AC_CHECK_FUNCS(dlopen) AC_CHECK_FUNCS(socket chroot) AC_CHECK_FUNC(strerror, [AC_DEFINE(HAVE_STRERROR, 1, [Define to 1 if you have the `strerror' function.])], [AC_LIBOBJ([c/fake/strerror.o])]) dnl Some idiot renamed `environ' as `__environ' in some versions of Linux. dnl POSIX says it's `environ'. AC_MSG_CHECKING([environ]) AC_TRY_LINK([], [extern char **environ; if (environ) return 0; else return 1;], dnl Have `environ' [AC_DEFINE(ENVIRON_NAME,environ) AC_MSG_RESULT([using environ])], dnl Do not have `environ' [AC_TRY_LINK([], [extern char **__environ; if (__environ) return 0; else return 1;], dnl Have `__environ' [AC_DEFINE(ENVIRON_NAME,__environ) AC_MSG_RESULT([using __environ])], dnl Do not have `__environ' [AC_MSG_WARN([no environ variable found]) AC_LIBOBJ([c/fake/environ.o])])]) S48_IEEE_ENDIANNESS($S48_BUILD_UNIVERSAL_P) S48_NATIVE_CODE S48_DYNAMIC_EXTERNALS S48_PTHREADS S48_MISALIGNED_DOUBLES AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LDFLAGS) AC_SUBST(LD) AC_SUBST(DYNAMIC_EXTERNALS_CFLAGS) AC_SUBST(DYNAMIC_EXTERNALS_LDFLAGS) AC_SUBST(DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE) AC_SUBST(GC_OBJS) AC_SUBST(ADDITIONAL_EXTERNALS) AC_SUBST(ADDITIONAL_EXTERNAL_OBJS) AC_SUBST(BIT_SUFFIX) dnl More payload for Autoheader AH_TEMPLATE([ENVIRON_NAME], [Define to the name of the `environ' variable.]) AH_TEMPLATE([HAVE_GLIB], [Define to 1 if you have the `glib' library.]) AH_TEMPLATE([socklen_t], [Define to the type to be used instead of `socklen_t' if the system does not define the latter.]) AH_BOTTOM([ #include "fake/sigact.h" #include "fake/strerror.h" #include "fake/sys-select.h" #include "fake/environ.h" #include "fake/sysexits.h" #include "fake/langinfo.h"]) AC_OUTPUT(Makefile) scheme48-1.9/config.sub000644 004306 005702 00000077533 12067075335 016027 0ustar00sperberPUStaff000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-11-07' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: scheme48-1.9/config.guess000644 004306 005702 00000126473 12067075335 016362 0ustar00sperberPUStaff000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-11-15' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[3456]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[3456]* | authenticamd:Interix*:[3456]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: scheme48-1.9/Makefile.in000644 004306 005702 00000111027 12067075540 016075 0ustar00sperberPUStaff000000 000000 # Scheme 48 Makefile # Part of Scheme 48 1.9. See file COPYING for notices and license. # Authors: Richard Kelsey, Jonathan Rees, Marcus Crestani, # Robert Ransom, Michael Zabka, Harald Glab-Phlak, David Frese # Documentation in files INSTALL and doc/install.txt SHELL = /bin/sh ### Filled in by `configure' ### srcdir = @srcdir@ VPATH = @srcdir@ CC = @CC@ LD = @LD@ DEFS = @DEFS@ LIBS = @LIBS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ LDFLAGS = @LDFLAGS@ LDFLAGS_VM = @LDFLAGS_VM@ LIBOBJS = @LIBOBJS@ GC_OBJS = @GC_OBJS@ ADDITIONAL_EXTERNALS = @ADDITIONAL_EXTERNALS@ ADDITIONAL_EXTERNAL_OBJS = @ADDITIONAL_EXTERNAL_OBJS@ ASM_OBJECTS = @ASM_OBJECTS@ ASM_STYLE = @ASM_STYLE@ HOST_ARCHITECTURE = @host@ BIT_SUFFIX = @BIT_SUFFIX@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ incdir = @includedir@ manext = 1 mandir = @mandir@/man$(manext) docdir = @docdir@ datarootdir = @datarootdir@ datadir = @datadir@ DYNAMIC_EXTERNALS_CFLAGS=@DYNAMIC_EXTERNALS_CFLAGS@ DYNAMIC_EXTERNALS_LDFLAGS=@DYNAMIC_EXTERNALS_LDFLAGS@ DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE=@DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE@ ### End of `configure' section### # HP 9000 series, if you don't have gcc # CC = cc # CFLAGS = -Aa -O +Obb1800 # DEFS = -D_HPUX_SOURCE -Dhpux # Ultrix # LDFLAGS = -N COMPILING_ITSELF_DEFS = $(DEFS) -D__COMPILING_SCHEME48_ITSELF__ -DS48_HOST_ARCHITECTURE=\"$(HOST_ARCHITECTURE)\" .c.o: $(CC) -c $(CPPFLAGS) $(COMPILING_ITSELF_DEFS) -I ./c -I$(srcdir)/c -I$(srcdir)/c/net -I$(srcdir)/c/bibop $(CFLAGS) -o $@ $< # You might want to change RUNNABLE to "s48" VERSION = 1.`cat $(srcdir)/build/minor-version-number` RUNNABLE = scheme48 CONFIG_SCRIPT = scheme48-config MANPAGE = $(RUNNABLE).$(manext) LIB = $(libdir)/scheme48-$(VERSION) SHARE = $(datadir)/scheme48-$(VERSION) distdir = /tmp # If make barfs on this include line, just comment it out. It's only # really needed if you want to build the linker or rebuild initial.image. include $(srcdir)/build/filenames.make # #NetBSD make wants to see this instead: #.include "$(srcdir)/build/filenames.make" # Static linker: # # You only need the linker if you're going to make changes to the # things that go into the initial.image, which in general means the # files in rts/. If you decide you need to use the linker, then you # gots your choice; it can run in just about any version of Scheme 48 # or Pseudoscheme. (It has also been made to run in Scheme->C.) It # doesn't matter a whole lot which Scheme you use as long as it's not # broken or unavailable. The two best choices are: # # 1. As below. # These settings requires you to already have a $(RUNNABLE) # command. This is desirable if you are making changes to the # system that might break scheme48vm and/or scheme48.image. But it # requires you to have squirreled away a previous working version # of scheme48. The settings assume a Unicode version; if you want # to use an installed non-Unicode-capable Scheme 48 (1.4 or earlier), # you need to use this setting: # LINKER_WRITEBYTE = ,load scheme/alt/write-byte.scm # # 2. LINKER_VM = ./$(VM) $(BIG_HEAP) # LINKER_RUNNABLE = $(LINKER_VM) -i $(IMAGE) # LINKER_WRITEBYTE = ,open (subset i/o (write-byte)) (subset ports (set-port-crlf?!)) # This builds the linker on the scheme48vm and scheme48.image # that are in the current directory. BIG_HEAP = -h 8000000 LINKER_VM = $(RUNNABLE) $(BIG_HEAP) LINKER_RUNNABLE = $(LINKER_VM) LINKER_WRITEBYTE = ,open (subset i/o (write-byte)) (subset ports (set-port-crlf?!)) START_LINKER-32 = echo ',batch'; \ echo ',bench on'; \ echo ',open signals features code-quote'; \ echo ',open bitwise ascii code-vectors'; \ echo '$(LINKER_WRITEBYTE)'; \ echo ',config ,load scheme/platform-interfaces.scm'; \ echo ',config ,load scheme/rts-packages-32.scm'; \ echo ',open platform'; \ echo ',open cells record-types'; \ echo ',load scheme/alt/low-exception.scm'; \ echo ',load $(linker-files)'; \ echo ',load scheme/alt/init-defpackage.scm' START_LINKER-64 = echo ',batch'; \ echo ',bench on'; \ echo ',open signals features code-quote'; \ echo ',open bitwise ascii code-vectors'; \ echo '$(LINKER_WRITEBYTE)'; \ echo ',config ,load scheme/platform-interfaces.scm'; \ echo ',config ,load scheme/rts-packages-64.scm'; \ echo ',open platform'; \ echo ',open cells record-types'; \ echo ',load scheme/alt/low-exception.scm'; \ echo ',load $(linker-files)'; \ echo ',load scheme/alt/init-defpackage.scm' # -------------------- # You shouldn't have to change anything below this point. # Targets: IMAGE = scheme48.image INITIAL = $(srcdir)/build/initial.image VM = scheme48vm LIBSCHEME48 = c/libscheme48.a POSIX_EXTERNAL = c/posix.so SRFI_27_EXTERNAL = c/srfi-27.so FFI_TEST_EXTERNAL = c/ffi-test.so R6RS_EXTERNAL = c/r6rs.so EXTERNALS = $(POSIX_EXTERNAL) $(SRFI_27_EXTERNAL) $(FFI_TEST_EXTERNAL) $(ADDITIONAL_EXTERNALS) $(R6RS_EXTERNAL) UNIX_OBJS = c/unix/misc.o c/unix/io.o c/unix/fd-io.o c/unix/event.o c/unix/time.o OBJS = c/scheme48vm-$(BIT_SUFFIX).o \ c/extension.o c/free.o c/double_to_string.o c/bignum.o c/ffi.o \ c/external.o c/external-lib.o c/external-init.o c/init.o FAKEHS = c/fake/dlfcn.h c/fake/sigact.h c/fake/strerror.h \ c/fake/sys-select.h c/fake/langinfo.h SCHEME48HS = c/scheme48.h c/scheme48arch.h c/scheme48write-barrier.h # Sources: CONFIG_FILES = scheme/interfaces.scm scheme/packages.scm \ scheme/vm/shared-interfaces.scm \ scheme/low-packages.scm scheme/rts-packages.scm \ scheme/comp-packages.scm scheme/initial-packages.scm # Rules: .PHONY: enough all clean install man doc dist # The following is the first rule and therefore the "make" command's # default target. enough: Makefile vm $(LIBSCHEME48) $(IMAGE) script-interpreter go enough: $(EXTERNALS) Makefile: ${srcdir}/Makefile.in config.status ./config.status $(MAKE) clean $(MAKE) # -------------------- # External code to include in the VM # After changing any of these you should delete `scheme48vm' and remake it. EXTERNAL_OBJECTS = c/net/socket.o c/net/address.o c/net/net.o c/unix/socket.o \ c/unix/dynlink.o \ c/unix/sysexits.o $(ASM_OBJECTS) \ $(ADDITIONAL_EXTERNAL_OBJS) # POSIX rules; this could have its own Makefile, but I don't want to bother. posix_dir = c/posix CC_POSIX = $(CC) -c $(CPPFLAGS) $(DEFS) -I ./c -I$(srcdir)/c -I$(srcdir)/c/bibop $(CFLAGS) $(DYNAMIC_EXTERNALS_CFLAGS) -o $@ $< $(posix_dir)/user.o: c/posix/user.c \ $(SCHEME48HS) c/c-mods.h $(posix_dir)/posix.h $(CC_POSIX) $(posix_dir)/regexp.o: c/posix/regexp.c \ $(SCHEME48HS) c/c-mods.h $(posix_dir)/posix.h $(CC_POSIX) $(posix_dir)/proc-env.o: c/posix/proc-env.c \ $(SCHEME48HS) c/c-mods.h $(posix_dir)/posix.h $(CC_POSIX) $(posix_dir)/io.o: c/posix/io.c \ $(SCHEME48HS) c/c-mods.h $(posix_dir)/posix.h $(CC_POSIX) $(posix_dir)/proc.o: c/posix/proc.c \ $(SCHEME48HS) c/c-mods.h \ c/event.h $(posix_dir)/posix.h $(posix_dir)/s48_signals.h $(CC_POSIX) $(posix_dir)/errno.o: c/posix/errno.c \ $(SCHEME48HS) c/c-mods.h \ c/event.h $(posix_dir)/posix.h $(posix_dir)/s48_errno.h $(CC_POSIX) $(posix_dir)/syslog.o: c/posix/syslog.c \ $(SCHEME48HS) $(CC_POSIX) $(posix_dir)/posix.o: c/posix/posix.c $(CC_POSIX) $(posix_dir)/dir.o: c/posix/dir.c \ $(SCHEME48HS) c/scheme48heap.h c/c-mods.h \ c/event.h c/fd-io.h $(posix_dir)/posix.h $(CC_POSIX) $(posix_dir)/time.o: c/posix/time.c \ $(SCHEME48HS) c/c-mods.h $(posix_dir)/posix.h $(CC_POSIX) POSIX_OBJECTS = $(posix_dir)/user.o $(posix_dir)/regexp.o \ $(posix_dir)/proc-env.o $(posix_dir)/proc.o \ $(posix_dir)/io.o $(posix_dir)/dir.o \ $(posix_dir)/posix.o $(posix_dir)/time.o \ $(posix_dir)/errno.o $(posix_dir)/syslog.o $(POSIX_EXTERNAL) : $(POSIX_OBJECTS) $(LD) -o $@ $(POSIX_OBJECTS) $(DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE) # End of POSIX rules # R6RS native support r6rs_dir = c/r6rs $(r6rs_dir)/ieee_bytevect.o: c/r6rs/ieee_bytevect.c \ $(SCHEME48HS) $(CC) -c $(CPPFLAGS) $(DEFS) -I ./c -I$(srcdir)/c -I$(srcdir)/c/bibop $(CFLAGS) $(DYNAMIC_EXTERNALS_CFLAGS) -o $@ $< $(r6rs_dir)/r6rs_externals.o: c/r6rs/r6rs_externals.c \ $(SCHEME48HS) $(CC) -c $(CPPFLAGS) $(DEFS) -I ./c -I$(srcdir)/c -I$(srcdir)/c/bibop $(CFLAGS) $(DYNAMIC_EXTERNALS_CFLAGS) -o $@ $< R6RS_OBJECTS = $(r6rs_dir)/ieee_bytevect.o $(r6rs_dir)/r6rs_externals.o $(R6RS_EXTERNAL) : $(R6RS_OBJECTS) $(LD) -o $@ $(R6RS_OBJECTS) $(DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE) c/srfi-27.o: c/srfi-27.c $(SCHEME48HS) $(CC) -c $(CPPFLAGS) $(DEFS) -I ./c -I$(srcdir)/c -I$(srcdir)/c/bibop $(CFLAGS) $(DYNAMIC_EXTERNALS_CFLAGS) -o $@ $< $(SRFI_27_EXTERNAL) : c/srfi-27.o $(LD) -o $@ c/srfi-27.o $(DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE) c/ffi-test/ffi-test.o: c/ffi-test/ffi-test.c c/ffi-test/ffi-test.h $(SCHEME48HS) $(CC) -c $(CPPFLAGS) $(DEFS) -I ./c -I$(srcdir)/c -I$(srcdir)/c/bibop $(CFLAGS) $(DYNAMIC_EXTERNALS_CFLAGS) -o $@ $< $(FFI_TEST_EXTERNAL) : c/ffi-test/ffi-test.o $(LD) -o $@ c/ffi-test/ffi-test.o $(DYNAMIC_EXTERNALS_LDFLAGS_IN_PLACE) # Native-code glue rules # Fake definitions if there is no support for native code FAKE_ASM_OBJECTS = c/fake/glue.o # Real definitions to be used when a. native code works and b. it is supported # on the machine we're compiling on # Does currently not work because of the new GC infrastructure X86_ASM_OBJECTS = c/glue.o c/asm-glue.o # Assumes s48-compiler/ in the working directory c/glue.o: c/glue_$(ASM_STYLE).s gcc -c -o $@ $< c/glue_$(ASM_STYLE).s: s48-compiler/assembler/x86/x86-glue.scm (echo ',batch'; \ echo ',open srfi-23'; \ echo ',load $<'; \ echo '(glue-code "$@" (quote $(ASM_STYLE)))'; \ echo ',exit' \ ) | $(RUNNABLE) # End of native-code glue rules # Two-space copier objects GC_TWOSPACE_OBJS = c/scheme48-twospace-heap-$(BIT_SUFFIX).o c/scheme48-twospace-heap-$(BIT_SUFFIX).o: c/prescheme.h c/scheme48vm.h c/scheme48heap.h \ c/scheme48vm-prelude.h c/c-mods.h \ c/event.h c/io.h c/fd-io.h # The BIBOP Garbage Collector GC_BIBOP_OBJS = c/scheme48-bibop-heap-$(BIT_SUFFIX).o \ c/bibop/page_alloc.o c/bibop/memory_map.o c/bibop/areas.o \ c/bibop/generation_gc.o c/bibop/find_all.o c/bibop/check_heap.o \ c/bibop/utils.o c/bibop/area_roots.o c/bibop/remset.o bibop: $(GC_BIBOP_OBJS) c/scheme48-bibop-heap-$(BIT_SUFFIX).o: c/prescheme.h c/scheme48vm.h c/scheme48heap.h \ c/scheme48vm-prelude.h \ c/bibop/bibop.h \ c/c-mods.h c/event.h c/io.h c/fd-io.h c/bibop/page_alloc.o: c/bibop/page_alloc.h c/bibop/page_constants.h \ c/bibop/memory.h c/bibop/memory_map.o: c/bibop/memory_map.h c/bibop/utils.h \ c/bibop/page_constants.h c/bibop/areas.o: c/bibop/areas.h c/bibop/page_constants.h c/bibop/utils.h \ c/bibop/memory_map.h c/bibop/area_roots.h c/bibop/gc_config.h \ c/bibop/remset.h c/bibop/generation_gc.o: c/bibop/generation_gc.h c/bibop/page_constants.h \ c/bibop/areas.h c/bibop/memory.h c/bibop/data.h c/bibop/utils.h \ c/bibop/memory_map.h c/bibop/check_heap.h c/bibop/area_roots.h \ c/bibop/measure.h c/bibop/measure.ci \ c/bibop/gc_config.h c/bibop/remset.h \ $(SCHEME48HS) c/bibop/find_all.o: c/bibop/find_all.h c/bibop/generation_gc.h c/bibop/areas.h \ c/bibop/data.h c/bibop/memory.h \ $(SCHEME48HS) c/bibop/check_heap.o: c/bibop/check_heap.h c/scheme48.h c/bibop/generation_gc.h\ c/bibop/utils.h c/bibop/data.h c/bibop/memory.h c/bibop/memory_map.h \ $(SCHEME48HS) c/bibop/area_roots.o: c/bibop/area_roots.h c/bibop/areas.h c/bibop/memory.h \ c/bibop/memory_map.h c/bibop/measure.h c/bibop/gc_config.h \ c/bibop/remset.h c/bibop/remset.o: c/bibop/remset.h c/bibop/memory.h c/scheme48.h \ c/bibop/utils.h c/bibop/data.h c/bibop/generation_gc.h \ c/bibop/gc_config.h \ $(SCHEME48HS) # End of BIBOP GC rules $(VM): c/main.o $(LIBSCHEME48) c/scheme48.exp c/scheme48.def $(CC) $(LDFLAGS) $(LDFLAGS_VM) $(CFLAGS) -o $@ c/main.o $(LIBSCHEME48) $(LIBS) # Cygwin if test -x /usr/bin/dlltool; then \ dlltool --dllname $(VM).exe --output-lib $(VM).a --def $(srcdir)/c/scheme48.def; \ fi $(LIBSCHEME48): $(OBJS) $(GC_OBJS) $(UNIX_OBJS) $(LIBOBJS) $(EXTERNAL_OBJECTS) rm -f $@; \ ar cq $@ $(OBJS) $(GC_OBJS) $(UNIX_OBJS) $(LIBOBJS) $(EXTERNAL_OBJECTS) ranlib $@ script-interpreter: c/script-interpreter.o $(CC) $(LDFLAGS) $(CFLAGS) -o $@ c/script-interpreter.o c/main.o: c/main.c c/scheme48vm.h c/scheme48heap.h $(CC) -c $(CFLAGS) -o $@ \ -DDEFAULT_IMAGE_NAME=\"$(LIB)/$(IMAGE)\" \ $(CPPFLAGS) $(COMPILING_ITSELF_DEFS) $(srcdir)/c/main.c c/scheme48vm-$(BIT_SUFFIX).o: c/prescheme.h c/scheme48vm.h \ c/scheme48heap.h \ c/scheme48image.h c/bignum.h c/event.h \ c/io.h c/fd-io.h \ c/scheme48vm-prelude.h c/c-mods.h \ $(SCHEME48HS) c/bignum.o: c/bignum.h c/bignumint.h $(SCHEME48HS) c/extension.o: c/sysdep.h $(FAKEHS) $(SCHEME48HS) c/scheme48vm.h c/free.o: c/sysdep.h c/ffi.o: c/ffi.h $(SCHEME48HS) c/external.o: c/sysdep.h $(FAKEHS) $(SCHEME48HS) c/c-mods.h c/ffi.h c/external-lib.o: $(SCHEME48HS) c/unix/event.o: c/sysdep.h $(FAKEHS) c/c-mods.h \ c/scheme48vm.h c/scheme48heap.h \ c/event.h c/fd-io.h \ c/c-mods.h c/unix/fd-io.o: c/sysdep.h $(FAKEHS) c/c-mods.h \ c/scheme48vm.h c/scheme48heap.h \ c/event.h c/fd-io.h c/unix/misc.o: c/sysdep.h $(FAKEHS) c/unix/io.o: c/io.h c/net/address.o: $(SCHEME48HS) c/net/address.h c/net/socket.o: $(SCHEME48HS) c/net/address.h c/net/socket.h c/unix/socket.o: $(SCHEME48HS) c/net/address.h c/net/socket.h c/fd-io.h c/event.h c/net/net.o: $(SCHEME48HS) c/unix/dynlink.o: $(SCHEME48HS) c/script-interpreter.o: c/sysdep.h $(FAKEHS) c/script-interpreter.c $(CC) -c $(CFLAGS) -o $@ \ -DRUNNABLE=\"$(bindir)/$(RUNNABLE)\" \ $(CPPFLAGS) $(DEFS) \ -I ./c -I$(srcdir)/c \ $(srcdir)/c/script-interpreter.c c/fake/strerror.o: c/fake/strerror.h c/fake/langinfo.o: c/fake/langinfo.h # -------------------- # Make scheme48.image from initial.image and library .scm files. # # For bootstrap reasons, initial.image is *not* listed as a source, # even though it really is. $(IMAGE): $(VM) scheme/env/init-defpackage.scm scheme/more-interfaces.scm \ scheme/link-packages.scm \ scheme/env-packages.scm \ scheme/more-packages.scm \ scheme/sort/interfaces.scm scheme/sort/packages.scm \ scheme/r6rs/packages.scm \ scheme/cml/interfaces.scm scheme/cml/packages.scm \ scheme/net/packages.scm \ scheme/posix/packages.scm scheme/srfi/packages.scm \ $(usual-files) build/initial.debug build/build-usual-image $(srcdir)/build/build-usual-image $(srcdir) \ "`(cd $(srcdir) && pwd)`/scheme" "`pwd`/c" '$(IMAGE)' './$(VM)' \ '$(INITIAL)-$(BIT_SUFFIX)' # -------------------- # Documentation MANUAL_SRC = doc/src/manual.tex doc/src/bibliography.tex \ doc/src/bibliography.tex \ doc/src/code.tex doc/src/command.tex doc/src/external.tex \ doc/src/hacks.tex doc/src/intro.tex \ doc/src/module.tex doc/src/myindex.tex \ doc/src/posix.tex doc/src/proto.tex \ doc/src/thread.tex doc/src/unicode.tex doc/src/user-guide.tex \ doc/src/utilities.tex doc/src/version-number.tex doc/src/matter.sty \ doc/manual.pdf: $(MANUAL_SRC) cd $(srcdir)/doc/src && pdflatex manual && \ makeindex manual && \ pdflatex manual && pdflatex manual mv $(srcdir)/doc/src/manual.pdf $(srcdir)/doc doc/manual.ps: $(MANUAL_SRC) cd $(srcdir)/doc/src && latex manual && \ makeindex manual && \ latex manual && latex manual && \ dvips manual mv $(srcdir)/doc/src/manual.ps $(srcdir)/doc doc/html/manual.html: doc/manual.pdf cd $(srcdir)/doc/src && tex2page manual && tex2page manual && tex2page manual doc: doc/manual.pdf doc/manual.ps doc/html/manual.html install: install-no-doc install-doc install-no-doc: enough dirs # install the VM $(INSTALL_PROGRAM) $(VM) $(DESTDIR)$(LIB) if test -e $(VM).a; then $(INSTALL_PROGRAM) $(VM).a $(DESTDIR)$(LIB); fi # build and install the image rm -f '/tmp/$(IMAGE)' $(srcdir)/build/build-usual-image $(srcdir) "$(SHARE)" "$(LIB)" \ "/tmp/$(IMAGE)" "./$(VM)" "$(INITIAL)-$(BIT_SUFFIX)" $(INSTALL_DATA) /tmp/$(IMAGE) $(DESTDIR)$(LIB) rm /tmp/$(IMAGE) # install the man pages $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir) sed 's=LBIN=$(bindir)=g' $(srcdir)/doc/scheme48.man | \ sed "s=LLIB=$(LIB)=g" | \ sed "s=LS48=$(RUNNABLE)=g" >$(MANPAGE) $(INSTALL_DATA) $(MANPAGE) $(DESTDIR)$(mandir) rm $(MANPAGE) # install the include files $(INSTALL_DATA) $(srcdir)/c/scheme48.h $(DESTDIR)$(incdir) $(INSTALL_DATA) c/scheme48arch.h $(DESTDIR)$(incdir) $(INSTALL_DATA) $(srcdir)/c/scheme48write-barrier.h $(DESTDIR)$(incdir) $(INSTALL_DATA) $(srcdir)/c/scheme48.exp $(DESTDIR)$(incdir) $(INSTALL_DATA) $(srcdir)/c/scheme48.def $(DESTDIR)$(incdir) $(INSTALL_DATA) $(srcdir)/c/scheme48-external.exp $(DESTDIR)$(incdir) # install Scheme source files for stub in env big sort opt misc link posix net cml srfi r6rs; do \ for f in $(srcdir)/scheme/$$stub/*.scm; do \ $(INSTALL_DATA) $$f $(DESTDIR)$(SHARE)/$$stub || exit 1; \ done; \ done for f in $(srcdir)/scheme/rts/*num.scm \ $(srcdir)/scheme/rts/jar-defrecord.scm; do \ $(INSTALL_DATA) $$f $(DESTDIR)$(SHARE)/rts || exit 1; \ done # install the scheme48 script script=$(DESTDIR)$(bindir)/$(RUNNABLE) && \ LIB=$(LIB) && \ echo "#!/bin/sh" >$$script && \ echo >>$$script && \ echo "lib=$$LIB" >>$$script && \ echo 'exec $$lib/$(VM) -i $$lib/$(IMAGE) "$$@"' \ >>$$script && \ chmod +x $$script # install the script interpreter front end for dialect in r5rs srfi-7; do \ $(INSTALL_PROGRAM) script-interpreter \ $(DESTDIR)$(bindir)/scheme-$$dialect; \ done # install the scheme48-config script config_script=$(DESTDIR)$(bindir)/$(CONFIG_SCRIPT) && \ sed -e 's,@incdir\@,$(incdir),g' \ -e 's,@libdir\@,$(libdir),g' \ -e 's,@CC\@,$(CC),g' \ -e 's,@LD\@,$(LD),g' \ -e 's,@DYNAMIC_EXTERNALS_CFLAGS\@,$(DYNAMIC_EXTERNALS_CFLAGS),g' \ -e 's,@DYNAMIC_EXTERNALS_LDFLAGS\@,$(DYNAMIC_EXTERNALS_LDFLAGS),g' \ < $(srcdir)/build/$(CONFIG_SCRIPT).in > $$config_script && \ chmod +x $$config_script # install the external modules $(INSTALL_PROGRAM) $(EXTERNALS) $(DESTDIR)$(LIB)/ # install the documentation $(srcdir)/mkinstalldirs $(DESTDIR)$(docdir) $(INSTALL_DATA) $(srcdir)/COPYING $(docdir) install-doc: dirs doc $(srcdir)/mkinstalldirs $(DESTDIR)$(docdir) $(INSTALL_DATA) $(srcdir)/COPYING $(docdir) $(INSTALL_DATA) $(srcdir)/doc/manual.pdf $(docdir) $(INSTALL_DATA) $(srcdir)/doc/manual.ps $(docdir) for f in $(srcdir)/doc/html/*; do \ $(INSTALL_DATA) $$f $(DESTDIR)$(docdir) || exit 1; \ done # Script to run scheme48 in this directory. go: echo '#!/bin/sh' >$@ && \ echo >>$@ && \ echo "lib=\"`pwd`\"" >>$@ && \ echo 'exec "$$lib"/$(VM) -i "$$lib"/$(IMAGE) "$$@"' \ >>$@ && \ chmod +x $@ # Exports file for AIX and Cygwin CAT_EXPORTS = cat $(srcdir)/c/scheme48.h $(srcdir)/c/fd-io.h $(srcdir)/c/event.h $(srcdir)/c/bibop/*.h | egrep '^S48_EXTERN' | sed 's,^S48_EXTERN.*\(s48_[a-zA-Z0-9_ ]*\)(.*$$,\1,' | sed 's,^S48_EXTERN.*\(ps_[a-zA-Z0-9_ ]*\)(.*$$,\1,' | sed 's,^S48_EXTERN.*\(s48_[a-zA-Z0-9_ ]*\).*$$,\1,' c/scheme48.exp: c/scheme48.h c/fd-io.h c/event.h echo '#!..' > $(srcdir)/c/scheme48.exp && \ $(CAT_EXPORTS) >> $(srcdir)/c/scheme48.exp c/scheme48.def: c/scheme48.h c/fd-io.h c/event.h echo 'EXPORTS' > $(srcdir)/c/scheme48.def && \ $(CAT_EXPORTS) >> $(srcdir)/c/scheme48.def dirs: for dir in $(libdir) $(bindir) $(incdir) $(datadir); do \ $(srcdir)/mkinstalldirs $(DESTDIR)$$dir || exit 1; \ done $(srcdir)/mkinstalldirs $(DESTDIR)$(LIB) for dir in rts env big sort opt misc link posix net cml srfi r6rs; do \ $(srcdir)/mkinstalldirs $(DESTDIR)$(SHARE)/$$dir || exit 1; \ done configure: configure.in ACLOCAL="aclocal -I m4" autoreconf -v -i clean: -rm -f $(VM) script-interpreter \ *.o c/unix/*.o c/posix/*.o c/net/*.o c/*.o \ $(EXTERNALS) \ c/fake/*.o c/bibop/*.o \ c/*.a c/glue_gnu.s c/glue_darwin.s c/scheme48.exp \ TAGS $(IMAGE) \ $(srcdir)/build/*.tmp $(srcdir)/$(MANPAGE) \ $(srcdir)/scheme/debug/*.image \ $(srcdir)/scheme/debug/*.debug \ $(srcdir)/scheme/vm/scheme48vm-??.c \ $(srcdir)/scheme/vm/scheme48*heap-??.c \ go $(distname) distclean: clean rm -f Makefile config.log config.status config-cache \ c/sysdep.h c/scheme48arch.h check: $(EXTERNALS) check: $(VM) $(IMAGE) scheme/debug/check.scm ( \ echo ',batch'; \ echo ',exec ,load =scheme48/debug/check.scm'; \ echo ',config ,load =scheme48/test-packages.scm'; \ echo ',open base-test'; \ echo ',open big-test'; \ echo ',open sockets-test'; \ echo ',open os-time-test'; \ echo ',open tconc-queue-test'; \ echo ',open transport-link-cell-test'; \ echo ',open tlc-table-test'; \ echo ',open env-test'; \ echo ',config ,load =scheme48/sort/test-packages.scm'; \ echo ',open sort-test'; \ echo ',config ,load =scheme48/misc/packages.scm'; \ echo ',config ,load =scheme48/misc/test-packages.scm'; \ echo ',open misc-test'; \ echo ',config ,load =scheme48/r6rs/test-packages.scm'; \ echo ',open r6rs-test'; \ echo ',config ,load =scheme48/cml/test-packages.scm'; \ echo ',open cml-test'; \ echo ',config ,load =scheme48/srfi/test-packages.scm'; \ echo ',open srfi-test'; \ echo ',config ,load =scheme48/posix/test-packages.scm'; \ echo ',open posix-test'; \ echo ',config ,load =scheme48/ffi-test/test-packages.scm'; \ echo ',open ffi-test'; \ echo ',open test-suites'; \ echo '(define-test-suite all-tests (compiler-tests base-tests big-tests tcp-sockets-tests tconc-queue-tests transport-link-cell-tests tlc-table-tests tlc-table-weak-tests tlc-table-string-tests os-time-tests sort-tests misc-tests env-tests r6rs-tests cml-tests srfi-tests posix-tests ffi-tests))'; \ echo '(run-test-suite all-tests)' \ ) | ./$(VM) -i $(IMAGE) $(BIG_HEAP) # -------------------- # Rules from here on down are not essential for the basic installation # procedure. all: vm image $(LIBSCHEME48) script-interpreter go doc libscheme48: $(LIBSCHEME48) vm: $(VM) image: $(INITIAL)-$(BIT_SUFFIX) $(MAKE) $(IMAGE) test: check tags: find . -name "*.scm" -o -name "*.c" -o -name "*.h" | etags - # -------------------- # Distribution... # DISTFILES should include all sources. DISTFILES = README COPYING.rtf COPYING INSTALL WINDOWS.txt \ configure configure.in config.sub config.guess \ Makefile.in \ scheme48.sln scheme48.vcxproj \ srfi-27.vcxproj r6rs.vcxproj \ ffi-test.vcxproj \ mkinstalldirs install-sh \ doc/*.ps doc/*.pdf doc/*.txt \ doc/html/*.html doc/html/*.css doc/html/*.gif \ doc/src/*.tex doc/src/*.sty doc/src/*.scm \ doc/scheme48.man \ emacs/README \ build/*.scm build/*-version-number build/*.exec \ build/*.lisp build/build-usual-image build/filenames.make \ build/initial.debug \ build/initial.image-32 build/initial.image-64 \ build/*.bat build/*.sh build/*.rc \ build/UnicodeData.txt build/PropList.txt \ build/SpecialCasing.txt build/CaseFolding.txt \ build/CompositionExclusions.txt \ build/dummy build/*.wxs build/*.ico \ build/scheme48-config.in \ c/*.[ch] c/*/*.[ch] c/*/*.ci c/*.exp c/*.def \ c/scheme48.h.in \ c/scheme48write-barrier.h c/scheme48arch.h.in \ c/sysdep.h.in \ emacs/*.el gdbinit \ scheme/*.scm scheme/*/*.scm scheme/vm/*/*.scm \ ps-compiler/minor-version-number \ ps-compiler/doc/node.txt ps-compiler/doc/todo.txt \ ps-compiler/*.scm ps-compiler/*/*.scm \ ps-compiler/prescheme/primop/*.scm \ ps-compiler/prescheme/test/*.scm distname = scheme48-$(VERSION) dist: build/initial.image-32 build/initial.image-64 c/scheme48.h distname=$(distname) && \ distfile=$(distdir)/$$distname.tgz && \ if [ -d $(distdir) ] && \ [ -w $$distfile -o -w $(distdir) ]; then \ cd $(srcdir) && \ rm -f $$distname && \ ln -s . $$distname && \ files='' && \ for i in $(DISTFILES); do \ if [ "$$i" != "c/sysdep.h" -a "$$i" != "c/scheme48arch.h" ]; then \ files="$$files $$distname/$$i"; \ fi \ done && \ tar -cf - $$files | \ gzip --best >$$distfile && \ rm $$distname; \ else \ echo "Can't write $$distfile" >&2; \ exit 1; \ fi # Increment the minor version number inc: f=build/minor-version-number && \ expr `cat $$f` + 1 >$$f.tmp && \ mv $$f.tmp $$f && \ cp $$f doc/src/version-number.tex && \ echo '(define version-info "1.'`cat $$f`'")' \ >scheme/env/version-info.scm # -------------------- # Generate build/filenames.make from *packages.scm # # This hack traces the module dependencies described in the # various configuration files and converts them into dependency lists # that "make" can use for its purposes. # # Since the distribution comes with a filenames.make, this rule # shouldn't be invoked for simple installations. But it will be used # if you change any of the *-packages.scm files. # # You can actually run the forms in extract-filenames.scm in any Scheme # implementation that has syntax-rules and explicit-renaming low-level # macros (e.g., most versions of Scheme 48 and Pseudoscheme). # If there are errors running this script, and you need to debug, # don't use the initial.image, use something that has a reasonable # environment. # # If this fails and you don't feel like debugging or fixing the problem, # try "touch filenames.make" and hope for the best. PACKAGES=scheme/packages.scm scheme/rts-packages.scm scheme/alt-packages.scm \ scheme/comp-packages.scm scheme/initial-packages.scm \ scheme/link-packages.scm \ scheme/env-packages.scm \ scheme/sort/packages.scm scheme/more-packages.scm \ scheme/cml/packages.scm scheme/r6rs/packages.scm $(srcdir)/build/filenames.make: $(PACKAGES) build/extract-filenames.scm # uncomment this if you activate the line below: # $(MAKE) $(VM) PACKAGES= cd $(srcdir) && \ $(RUNNABLE) -a batch Debug Win32 Release Win32 {FF056A47-5095-4837-B381-60104984AD5F} scheme48 Application false MultiByte Application false MultiByte <_ProjectFileVersion>10.0.40219.1 $(SolutionDir) $(Configuration)\ false $(SolutionDir) $(Configuration)\ false scheme48vm scheme48vm .\Release/scheme48.tlb MaxSpeed OnlyExplicitInline c/net;c/bibop;c/win32;c;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;__COMPILING_SCHEME48_ITSELF__;S48_HOST_ARCHITECTURE="i86-pc-win32";%(PreprocessorDefinitions) true MultiThreaded true .\Release/scheme48.pch .\Release/ .\Release/ .\Release/ Level3 true Default NDEBUG;%(PreprocessorDefinitions) 0x0409 scheme48.res odbc32.lib;odbccp32.lib;ws2_32.lib;mswsock.lib;%(AdditionalDependencies) scheme48vm.exe true .\Release/scheme48vm.pdb Console false MachineX86 .\Debug/scheme48.tlb Disabled c/net;c/bibop;c/win32;c;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;__COMPILING_SCHEME48_ITSELF__;S48_HOST_ARCHITECTURE="i86-pc-win32";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug .\Debug/scheme48.pch .\Debug/ .\Debug/ .\Debug/ true Level3 true EditAndContinue Default _DEBUG;%(PreprocessorDefinitions) 0x0409 scheme48.res odbc32.lib;odbccp32.lib;ws2_32.lib;mswsock.lib;%(AdditionalDependencies) scheme48vm.exe true true .\Debug/scheme48vm.pdb Console false MachineX86 Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks true MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(PreprocessorDefinitions) build;%(AdditionalIncludeDirectories) %(PreprocessorDefinitions) build;%(AdditionalIncludeDirectories) scheme48-1.9/srfi-27.vcxproj000644 004306 005702 00000013216 12067075541 016640 0ustar00sperberPUStaff000000 000000  Debug Win32 Release Win32 {D0283225-314B-4140-8940-2EE6137874CB} srfi27 Win32Proj DynamicLibrary Unicode true DynamicLibrary Unicode <_ProjectFileVersion>10.0.40219.1 $(SolutionDir) $(Configuration)\ true $(SolutionDir) $(Configuration)\ false Disabled c;c/win32;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;SRFI27_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue /export:s48_on_load %(AdditionalOptions) scheme48vm.lib;%(AdditionalDependencies) $(ProjectName).dll true Windows false MachineX86 c;c/win32;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;SRFI27_EXPORTS;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase /export:s48_on_load %(AdditionalOptions) scheme48vm.lib;%(AdditionalDependencies) $(ProjectName).dll true Windows true true false MachineX86 {ff056a47-5095-4837-b381-60104984ad5f} false scheme48-1.9/r6rs.vcxproj000644 004306 005702 00000013310 12067075540 016335 0ustar00sperberPUStaff000000 000000  Debug Win32 Release Win32 {CBEC7C76-63A6-410E-A55C-82A7E389EA7B} r6rs Win32Proj DynamicLibrary Unicode true DynamicLibrary Unicode <_ProjectFileVersion>10.0.40219.1 $(SolutionDir) $(Configuration)\ true $(SolutionDir) $(Configuration)\ false Disabled c;c/win32;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;R6RS_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue /export:s48_on_load %(AdditionalOptions) scheme48vm.lib;%(AdditionalDependencies) $(ProjectName).dll true Windows false MachineX86 c;c/win32;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;R6RS_EXPORTS;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase /export:s48_on_load %(AdditionalOptions) scheme48vm.lib;%(AdditionalDependencies) $(ProjectName).dll true Windows true true false MachineX86 {ff056a47-5095-4837-b381-60104984ad5f} false scheme48-1.9/ffi-test.vcxproj000644 004306 005702 00000013363 12067075540 017172 0ustar00sperberPUStaff000000 000000  Debug Win32 Release Win32 {EB565705-1E66-40C9-894D-D152C3920212} ffitest Win32Proj DynamicLibrary Unicode true DynamicLibrary Unicode <_ProjectFileVersion>10.0.40219.1 $(SolutionDir) $(Configuration)\ true $(SolutionDir) $(Configuration)\ false Disabled c;c/win32;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;FFITEST_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue /export:s48_on_load %(AdditionalOptions) scheme48vm.lib;%(AdditionalDependencies) $(ProjectName).dll true Windows false MachineX86 c;c/win32;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;FFITEST_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase /export:s48_on_load %(AdditionalOptions) scheme48vm.lib;%(AdditionalDependencies) $(ProjectName).dll true Windows true true false MachineX86 {ff056a47-5095-4837-b381-60104984ad5f} false scheme48-1.9/mkinstalldirs000755 004306 005702 00000003704 12067075233 016637 0ustar00sperberPUStaff000000 000000 #! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here scheme48-1.9/install-sh000755 004306 005702 00000032537 12067075540 016044 0ustar00sperberPUStaff000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: scheme48-1.9/doc/manual.ps000644 004306 005702 00004327715 12074535536 016443 0ustar00sperberPUStaff000000 000000 %!PS-Adobe-2.0 %%Creator: dvips(k) 5.99 Copyright 2010 Radical Eye Software %%Title: manual.dvi %%CreationDate: Sun Jan 13 14:49:18 2013 %%Pages: 170 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMR12 CMR17 CMR10 CMTI10 CMBX12 CMTT10 CMSY10 CMBX10 %%+ CMR7 CMBXTI10 CMTT12 CMR6 CMR8 CMSY7 CMMI10 CMMI7 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips manual %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2013.01.13:1449 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet %%BeginFont: CMMI7 %!PS-AdobeFont-1.0: CMMI7 003.002 %%Title: CMMI7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI7 known{/CMMI7 findfont dup/UniqueID known{dup /UniqueID get 5087382 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI7 def /FontBBox {-1 -250 1171 750 }readonly def /UniqueID 5087382 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI7.) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 105 /i put dup 110 /n put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBBAAB71645535A2B 6F0F22458E1429F4A67307E01F0BCF6F337E0E2AD89658D880B04C26306F8179 C8121B958459B923AC3B05B594D8AB95F75870019130442FD29578D44F5690BC 7281357A5041C8A809A59D0DEE108E2A07D406656BC74A9F3317CB887E712318 46B2ECAA341F8692ACC2D14ABABDFBCAC6F35858355F1D3228B0223EC73AC56F 3C987464DB829F243E304F4C59CDE3EF6EB53A4EF9BA91510CB89A3407261F58 A2AE66880BA98FC1EF546112892494C85A2C39F9DCCAC5766725894A7AA148E9 42360AE64BF3A4F1F9F0A0D0C1AAFDC4D50C52233AA595B7D0CE557D4A010D86 6E6B76A7E9523E8A6633DA9348BC3F59302F72F492A30782AE7EF220516893D3 DE836CDE311DED9262AF01C506040541EE84AAC539B404B23033EF56D4BCE6BE B05F79CD633FE75C6728114D2749E39FD7454050F67763AB636377BA8E1867C3 996C7D7D4A4A02BC49D1AD7FF174C1F49F1F205BC9D5AE42BCB02CF8554E8F5A D1876C9285B6CCD7B8C165F75843B0AA11D8462B57077AFE75BAD086E9D9F91E 30ACFF91776132F3CACAD1CA5E08B17B36A0E45ACBAC52393B9AF9089BD821D9 CD5A9CD9BECA59F7445D63DECC1B4502D299DB85B6E2EE7C69A1DAB91E22A3A5 89B524FA20AF6005E7A586B90A2C6E5A93C9EFA4ABEF5F7E4C7B81363FE8D2B3 0AD637FA863DE787581ADD7CBE463F7866C40F4E280260ED0E9C8453E5C7E668 FFF058B9742DD3F131C264F8FA102CD0DA05F3114D13D34D422799181453FE23 2FC6EFB01BE420C930B879D671F3DFB036197874725220644A5A52DFB467BB75 8089E4F40CE9401777B9FE1D0AEE02E782A6EB2A185A454AE9394094CDFE7CFA C03C23A78EAF242E4F811E4C83B59EF4DC5ACE4AD37B41616B46C263358710B2 6137314545CA6CE89119B42A3518EC85C68DC07D26839C68B1FF55C4A9CD518B A1FB32F9C475BB6110839FCCB94156E7B3648F27245A00D2966FC4DDE3996BFA F463A663CB6935B596B1582ED0ABBC648AAA8A86068BF0038001C753C8BAFA0D 2058041DFA720B528E2D4B16196DB1CF30C779D3F4800FE662D5B60B208341F2 A66EFCB8448C2FCD12DF0DD899911A8BD96C9B670054D328790E5D388518B146 8CE92E368EB1DB3CAAFCA4834CC9D9D9DCC80FB1F34F39DACDE643052C977A7E A95C5FA8DFED9B4DCE769E4E46256D6DA8FB18FD7FA4E4CED5D486803538F3B4 6D3F5B3C03184F5C26C66DBB4C724918EBB6A89C4602E4EDDA81EEE2BD18B683 FDB459F2CE0A9CED23DC208EAA8BEDB304B00E093DEE926A7B32FDB2EC70DD85 94B9137856DDDABB402B2C76DBA87149051ADC6007018EBDD571BE1D092EBD95 76D4E063AD7D5F62E6C26EDB88D38678F2806A1F4900B0ABC4ED034A818119A4 E618F1A902315BC98F26775E59555A3DCEA1D0F8B20A9084920ECBE3F7F245AC 1182A40B518B194669D95DE968542BFF80FDC89669BC256C44CB66A2AB8CD7A9 E42C69956CCB6BDE8C09AD22EF3196939B3B84EB23A6E071A36D702909E019FF 058F27562441EB5CAE87A4407F67C4390810BE89BBE867D636468E73677B84C8 5A1228DD7DC8EADA221B1BAD5F43E832F20ADE7ADBFF170AB306F5B711816FD1 39B7882556E30F002977FB88D8B28826A75DE0D20354A2D41F2DA8578376F7DD F27B0F59D4DDDF5790E11E3957491DC74EEB7625CA49FAD90FA47AD8E0BDE824 FF326A84846A47A21B70FA549BEE307F9C6970009F963B49A504F0115777826F 1D81203F655C242FFF15BA97E3BDDFBF435B10E74CE8543C98966223818839B3 6BF3BC63F882B0AD0FDACA8C56A570277952E1D83F18BEDF084D2AC004E2B09D 70DE1740D7D220E92B54D2FD0DDEAF1E08C41FD321A8D474982DD105B23166A7 AA9E0129DC88065B1E0F9382BEB4B4E1DAAE3EA5489BDCA921AD5A8175F2841F 9400478DFA99C5E5553F383882664D73FBDFA29BF32E52C28DCE80DAF4839434 022FA515679DBC13FE98968D2894DF5DD69C49BD23D00F5D858B69D1F220F968 F0700E13873579B3CFB658972098DC61F1DD580105BC27795DB4AF11A871CCD6 2E1B9AF7F0DAAD4CE315379A7B42CECB983DAC5A2B9426B4E5E0A7F7978504C1 DD7E30063AE3CBDFB24EA2BCCDC478AB82084FD30A4793F4707D9F8F9647B413 F8A5C5AC6D5EA0E35628CE1096A434FB8286F4617CB4D0AD30A4A0B255A5A356 25AA5A947FD3C4FA44B4AA80BAB44C48CC1E2C6D0A711365A37A58C3483D07ED 301A83D2650A2E8CBA9EE62FF5C2736EC82C1402959F64527F9B640619F112D9 8E0F4A8A3078C72ACF3F34AD855AA4008C96E30D9E8C414607C34E06E29AC5B9 2EE5DDB823E8C3EEE6A8DE228313D476A7F39B5DFBFBDEDDF7C45C1C88EE6D01 7FB4F7BB2CBBD5DF7F0CBD98DC287FA6940FBFE1B3B136613A3CF16634CA7B90 53D5FD5776515EFF5D37F8FCC62D8BEC8EE2216503D54D6F2032D3C2BF861E15 FD1B45B71576F15852EEA65DD372E911EF4CC18283CD2FF4196A3F1A9D81137F F1820EC604D6C61AF318C6C5AB6DA1EDF305CADEF7CC0183B86D31310A09972C A4BC37D110C77ECCA614D1A281EE1C2040B4A5ECB31A3FC61760F608E44332D1 D2C53C7891B505A3020E9E4915F3618588FCEC80B9ECC5E637D8D0F3C94B1F2A C53FC46CAE0AFAA7E12266C212A73AAE60199752C042BD55A5DF1CD07FBDB830 C83E7832D8554AD9C9CAEEC7CED1DAEE622090897641CF2E5B34A353D83264D4 4687522DB290D3BA927BA315EA5D25B0D7B69350C6C180AB0C322B05E01F7C7D F2F48651567F0C1B49AF3950E43C94D78F7B184BF2946B924BC4279AED28F3A0 17A7D8B235698A516D3FB5DF0B18A422B2410C385E7E9439C6D60917EB3299AD E31471616251FA40C9FA098109BB31A54D9C03B2F12947E4E9252A0851B81C4D F39E7FC44752504B589C3911571B1D3EC3BD1E1807F99CED1DB20270E483A805 CA2A016E7283550D1B1D35C226FAB63F983CED41A4D02A2F228FA9EF065027B3 CC69D6F2E278C0A2D238D3A37154B0D22281F62C61D9182A69657B027BBDED64 11E261E47620602F865221A534C5A32E2BF5B93A187911A146F2E96538B47DBB 7BFA7EF406FE940F4DAD17E6E4B80C4F031D71F65657C2F5C8233EEAC68DE8A7 E1FC3055C122C1795D0C71A0284F89A9BF04837F61C9E08DB42644A490C97D34 A5D3CEE475B8D578205005A0D68AF94AD27C0E855BB8EDB74775690A4EDD6543 BCC10CF13283D6FA8A7CF3FE6C4F96470A11FF0B0160D3F9816B13B0BAE0D8F9 B84C7631063FE658D13D108D6FE24A89799FABA72E6A6D1C943922CBE676C1B6 11A4106ECB4F1A7F8A84B2783C2E6A109C58D63FC0B74D8C8A1CB62D527441AE E656D94B1AA8581B4F07B653ED6486AAE1F8ADB30FA8D8914AF24721C74B0908 D84F2EBB91144ED4BD7EF533F2584048DEE37E17CDE5FBC2992A6F924FEBAF07 B626F988599DECDAB43C931CFECF99FC6EBB72F8E542765C26295902DFF60B7C 7B9ADDB4858BC9D808B7F0909690CF8DFBC59A786D48B891937C31A219842A43 234425B4963062DB4C4E9F534C77F4243408805B5A6B8BBF428632CA4AC03A7A E336DD181CE0CF3E742079E2919EAFABE16A63299771BF276EFA8D85C920F995 5B9D4E8F1ADFCC5C29AA89BF90C186C5DE7679906B2FD4DB279D245D27D08837 D3A8D541FE37415B706EC585C05804108C1D938E543B8B63E275EE85CE9DD843 0A8B9163144B77DA1A552A25D5E77E94F29CF252BE9950F4E627D5F72536B6F3 3278D4A45D10759F16AE42BAE8460865FEE84537F8EC9BF4813570E883B826FD 1ABF3F4E66DB6FEF8366E07BCF290EA67D39C9D81B2A7EA48E0A228FE3D5AA50 1A56CCBF229C9AF2537A8FA70EEF41096ACED34CC7BEECA4EA1F23B39FBC39D8 CCEA93E63F508CBE6722C11467A3D0D5C4C52031DE43C449333E4295104651CE E13B821D7904653346067E971BE0042C571ABF40C3A1079A675FE4264B784D46 1B8FAA4CDE9851C4EBF69ADF51A7B68CC8706C08D13A44909D4C1D78DB0E0B2D 0E0318304B229DD2FDC968027CDFF65722059C62154304D6F9C3F06DE22914EE 928B7D1BF1FC7E74B4D882998D59BC086AA2D4EAD0AE39F6B75B5A3FB9994506 E21731E1A15F0F2D12F88724BA72898197A80FDAC00243A3038871EBD2F2BAB1 C616278BB78490CB86F552CBE5DD0862F3793D72C68AC16AF8E38FE1A523A5FA 9B0428745B1455671CFA1F6BFBCCF9CA23C833113C2948E7A6AEFFF1A83509FF C559BB5EE7F92BB43F7F37A371E661C826F63DD0C1B25E34A8119E71EC82FB66 23C7B126FB6554E7560B1B69F2EDBB742F3B20D1648C151C37A8570CBD330A9E 7592A8607D2D727F3AAA0FF2057DF4E2A4C7D3B658C6CED38824A770420D89E7 F6AD385DBCE9C9A9095CF0042052A67AB804A6675BB9373A99390CBDFB715984 A069DE543E4C6ADD7F1EC7A15392EF834EAB4584679A43443953427DB13E6959 0F2F5061C99C6D00FA5327FDB5330AEDE19A53DE3AE092634DC6AEEAF63A5BED 990F8A117AEB1CA0E7F7DBE02CB3D86465F1613B976D1CF6F3A1E69740A2FDC8 062ACC45EDA6B863B60015F276860FB79C31D28F97A799568E66D0A8757B2C41 E939337B467303041D0F4C59390B2E41E5F298F275DCC699D27C459ED4D5ADBD 02539F00095D7E1872862142B46BE06513D3EB1A406E6BAA64BE795122100F09 C37E5D1834218EC1D11B031C7DFC9F5AB071A8F4DC08203821366959E9191D4B 289682D915AF28CE5858F83338DC51B6B0DD052A181D9133FBA50CF18F70EE65 C33726A0450EBA9D0E0C3662AF6C2121AB7911AA9880D6BB6811D6D7515888E7 199A0E632104059A88C9D85B19BB35EDF4AB95E1515BB2339572928BD5FE8CBD 2D4DAF55DCFE29FBC4C3D56336277BA0C9A889A129F9FA7052AD1420B8705163 1A808EC1284C888D78CEA2B4BAB71AD76289F5F4986008FA9BF328E8537E6C91 E11DBDD8447E1C9ACE18DB0EC3D5742C264C8EFA445C5D16C2930FB43669774F A2CA52144D99EFA8FC427DB4128CD4C036A8C611B087335C780740FAA419D39B 5DD68EA89C95275F9254D947EB3683D0130255269B10C6CFF29EA0BE484C9949 96188FCB747618A8044E2E37DFFD2DB8ABB621B34DC024259340677095B6937A 78EDCF508AC91D4CEFD872AD73F50582DC8807143CEB9F109C84DC5DA30B64E2 E56DE973088A9D32583D6946DB4F3523902FB1781D993B89D5F56D79D5D98CC1 7FEE73FC3A7D1BCCE90179AE450829E228B4DEAD3B2B4C79A400CFF899AB26F9 048B0875EBC871AD23BA96F88CDA8B87FE5809A13889A6AC349ABB25E54ACAA9 C213C5DE2D01BCB9CC0D7BBD384D23AE12E289FF8FDF1F611F5E14D4B20B15A3 42D9B3B37A83A9CA39B5DB6C8316C51B70F211530A56CFE54D63E88169CF5233 D1A7B2388025B3EBD2BEE0716C3A2D589EBC7A42B3DA602AC4E2FD9C9052C922 711E44408DEEA1FE0C9FD50A39AD46D437F61F284A2EFD42EF158EDD71A1486D 4865D6B5E20E60F4F4FC3D646909FF1EE2D7573665E4CD8340A1B232CAC0202C C35BA9BB3D2267C7E78518F6711633F888EBEF72DC750AC2CB362D528CFC8B2E A1AE1C05456F50EED8CAA768DEF47FF85C4322F02D7F9D188C6F285C674EF589 251B0B913339FD701FDB281338D96704ED7ED908BC113B4275A24D058955890B 12CCDD5572D63688426B0E1E9A40D6AAECFA5555C1CF9DBEF8C04CE1E5A63F14 969D39B6DAE8A91F6AF4CD1E2DA89A4661DA34E272B6032C442C031F081F5DF5 858F4620885773D8A2B2F5EB6DDA74C1408DF279900450E4A3E80BA9A9B1295E F24EDC3F6EFD81A741EF74B0202820516C4FB720687BDD915EB2396128C3B262 20E3075DA153D6FD36E1C05B855929DAA4DE694B6F15EF2145C63250B24B031A 4CF0AFDB225E91D99828B83BD90F1702D3906D45872587A3A116B138AD9627CE E778A949C392202823C670FDBC56F1896FFFFBCF52C4B400F67BA36B5FCE44A5 F18EEB8ADFC088C99DFF8E0A593E81A5ACA2E3693005F723C7D3E0AE2BDD3805 8C6007A00542DEB2539709558A88B21003CE4B2C7817AF207ED576B25A41DEA0 FC55A459BEB00ADB01309B35920F04F84B7B64F95AA99EBCB843A06CED900D99 97BEFD7CCB9F4D85876F10160C8D63E2FDE82B7A8D945F37CC9933ABE0FD1D76 268296B1A5AB06B2E814691128771694224781171DC6266BCC290FCE1AB59416 85530368115BABD4F1DE45952918D1945D51EB713C283DAE8EDD559F437CD886 A4B1DA6120D685C284673A3EE489FC1AE4297A3623B339B7D886B6B4B8F9F4A3 7BF85E320A52FDC6323B51879B98A14C33C567BC069D9B44616514EE1BE36F90 EC5FA33E1B6B0A46945D876EF0085E74935DF2560A03321861A752E59742B9FC 5C501FBC64BFB1602459885B63873DC857ED37F8BE1A9C6E9517B9BF5A6161BD DEB6DB0381FFB34A8A96AB4AD48BEC40D4C198ABC599C3758AFF638AA75BBDA4 8545D5F95FA426FB25587301A43E176F6CED7851E815AD907F2443E70740DD2D 4FBD5D978B9B37F59D6DCF0ADD0F90825DD23558FCB858513602C8BC82BFA383 7AA6DCEA4009961D06DF233C5381A7F9541259926446B2F03664BC5978A1B6CD EA6EBC9FE6100A65959513EEE32E69D47B55BAF30A893D77142F943982019C01 715CE29923795EA01C58A798979939B507C5B29A32881877EF7EF0C5CB3DE591 6B9A6C3F3FFA847F396A396F078860B59850BA4CA3115CA2376AEE6B30C05DC1 6F9DB6781ED0F9D45D10E096C33B1B7CD12A9D57C6E49AD833C4B093DC82811F 16B3BD902BE764A1680831EC5A6C1CED84AE0DC0A65678EA5270BF20931E6409 7AA44EACB22CCA11098F8A51096BE83A1ABA56C9EED4195D5CCF24FDAD92E823 C439DAAFBFD652157D728F2754F28304710D3CB33763156D76A259D446647A11 493FAC70DD28063A4CDDA162F72542368E1AC2826C4BFF7109208F66371910C1 068F21779FC39DE03AECF1C9FB2F417930C22791961D801284DCC89B0833B6A8 D63F153ACBFB7B7D547924613BBCCAED37D90BAC5B0264ED31C7B9DA5A2BC620 9B20CA48424D0FF58905BCD6190BF4B5FC6ECCA1BCEF13426920197CAB41C4E6 E82E8EE7BCB23C6BA6F8B58001533B225ED721D6CE3D6E89116EC33CAA6E905A 649F8C6A1AA187A48E20DB864596481976216DB78F0F57543DFAE3CDC0A6FC77 2CAA49442527A5D94DC54BE93C875690CBE52EAA4EDD9F2A511361BC0F0807EE 96AD0D26B62D809E82EC14EDB158EF48A748A6FE0C3A7EE5D4479B35425F35AD 3EC7444F6FA75CEA5011AD571078293448A33C7647611CAEE87974B0A756DAC9 4E1BA78DEE477FA59AD50BF5C52E068A5E044A4A4994D5B24CC5045F768A3C51 D4F65E2A5AFD271A7666C6835E28C60751EE528C0742433165AFBE71562A3016 F59676D56B0B5F7E4984D664BC3ADDAF24B4205752EE21D4B57057A943018466 09C3FA5D2C5BCBFC22A643586BC9E7A965DC34C0A7D272B5B1617BAC2B0CB510 5DD5EC6F7ED1226D19189FF547776698FD48B7A6A038131F869A9E24006A4FCB 9FDD5E4A6DA9C531E1F1D1F0131CF8BF06B78BD2C6109E3D5251ACCAA6661142 7E0CF66D8C1998ED3DDDF69890FB2039F35BFBA2D9E6EA42F2E2E88E8C66D0C7 6B2A404F1C72AD3C0A327A90E16092E727CB2BAA0128995EB7C99569C8CD11C3 77C294DC2CDA70D0CB20DC0EA68FFB6BA42D64A1609E07F378A1AE072D1E66EA 6A88B6216A65BB5D731DF9B83A7A1136A9CE874779495E7C1D5CBB3A4F47906A 09156C93994992C526D0C9BD0129976B790F553FB2400B78F2857FDDA9C4AFF2 AF6A3334700FB3733F881FAF164591DCF506611CBDDA1E075026F2E98E581366 76C64A391601CA4FBA8CA906ECD13A23F4B7E7B39B39088D010DA238CCD5FBD1 DE4A90C188432793EEE6100D31754A7E35006BE1525B491190A9349D56CF1571 8CB1A7FADB595012FF87C7C9D63D48DA49C6FF1DA2DB4BE5C17C3390FC33FB05 F07F8B7B08FF9678CC85DDF38A6D9495D51E2520C7AE08020F045863C622EC63 3C33C8E48236814087336CC51FAC7321B6A37D566512BD51E12300D2728A18F0 096BCC51D11603ACC0D29FD5895A53AB4A066B7A19D30219E9AA6967C9241180 E46B79EEC3E1E7E062989033184A9B8E91D8C5DA215D57D9214515A9690B5092 7B29F06CA32B3CFE3DF92B9251E6D4B83665C3C83583D492A6D075F87AC225A5 F65A36BD9D484DF4998B33245768FE5EE30521152C835CBEAC0F2DE3647BD461 2759C497BAB79CB9EC4DAF4D15BEEAD7808DD45344FE3F2F45DBA16E1F9752EF 122C8D453476355CFDC0D3F2B8F27E67D57DFB0818FF35F6FAB5E7E598303E9F EFA7B28088CDEE66B0189A5563B563117E351962B80C88D701FBC6A0D77AABE8 CF4F44D8B50FB002D473F4B53AE995CF11A778708895324EB921CE5F9BC10253 18D90B185D657B192548491A525D134472876D89B355E0840EE17E01E4CA33B5 452054127DEE8786EEA572D0AC12FC2B24889002EFD665FA82A0D0EA3BAF3B29 F824FC8C8EDFFFED4803E5D0AF7BEF8AAC625A184911BB28809661EB2631A078 FB9A244F043ADB379476D0DCDABB21BE4F1CEE1B21D775A53DC6A1BFC4A8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT12 %!PS-AdobeFont-1.0: CMTT12 003.002 %%Title: CMTT12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup /UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT12 def /FontBBox {-1 -234 524 695 }readonly def /UniqueID 5000833 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT12.) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 35 /numbersign put dup 69 /E put dup 73 /I put dup 82 /R put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 114 /r put dup 116 /t put dup 117 /u put dup 120 /x put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B 5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D 4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305F343 64F4010BA9811DBECAF88DA773C4DDC5ACE95A878698D7FAF9D1D517BE8EC36F 2DED788C589CB8815BB32224F5D92F0D318ABB617CD4D9DF61D15D82E557B553 4C3F423EEBD4DE3933DEBF90A88BEF2A4E1B6C22465827E8A0B3EAA0489C6D09 EA559B9E0DFCCA1A39673371E80226F39A010E11E6D49C77FC11C8EFB480D34F 2CFFB6187D4A3CA906A76B4E5B040BF8FF666F7C1167CD675098B616D5AD42BF 7E5D940928D79AE4C033417461CA5BCE2189DDE658F8A03756C12F1894143080 CF952EF0F75662D607E4CE63A38D377B1AE0FCDE217AF0F8CDEA8C13700BDA57 887CE8299F546BDA0B4527C3DB7374AE96FA655537D69FD68B5F46DE6FC650DC 92E8C236264BCF42C249E23DF31A09635541AEE0F2B0A1E632055B97802F1A6F D9D92FAA8B2E28C859235681547EF4F5D8AE2C85EFCDEE4FC7238B6D3A663ED0 B5D3B2C27331D2E47484C6863D0748A8FE4E73CD65609EDA8B9B5B38E5481683 B152679431FB3A2A262AFC5381F7838AD8E456C7024A8D2D64C0B03C4122E092 0233CE4A7BB8519397E6CA06CDFA3E0DDC9F8267FEA10231AA61AF1772684932 3AAEF17509E1EC0387CD523AF0050435FF4E5FCF35ED96061F5C13891C34AF89 9180E9A333DE1EF1F07CE6B6038FD3B9C742B5C2707D3D34CA11370DDC03B830 E86230991C01161D02A14ACC4E97FBD4BEDF34F591FB8E6BABFC2F46E4FBFFA2 E460FA442CC58E0DEAFE64DBD6EF677BD3AA1CEFA476C22FAE9D64CE572B0AF1 20374CDCB847B671E65A61051CDA518E1D24BB7F3DC69B30EFA53B7BF7864FE4 09941F972463045488CB3772DF1DDB218C99027BACEA060FB3FF54DBDCD3F118 8BBBA6E025A62E775B3EEB0318D54C358A8E00A06DF01DEE9B5FD486515CC454 70AF99DE6D85338CFEC2FE4AFFBDE6E5F699B5D5EF1EC5320B838A723D8B7713 93C892A434077F6CEA688F30725D3FC2E41ACB0F920CF645D684FFBD3756868C BC681E0E8800FF3A5A077A130D8C59F8E6BC0AE8CC516615E8785A8B95EFCBDC 180375387BBB287D286E95E2392915356D663D89B84030D9AF5757C720DF511D 419F49DF3CCB2EB827BAEC53BF3BB973DA85C2FD532D38FA95C3A13C15905B47 5F8B40E1ED08A491E675D442B4251518F5F104AEF4936A1145E006830DE17446 9ADF56650F258A0C3D9AC6F53D54BAF939E302EEA16B80B86960384DCAE7D03B 83340E3F72B803D98BC1EE29CA3B2EAF165227A852FA0CB9435372ACE94AE60F EBEB4FA6C5C5F1EDE3A9A5EE6248E4315841333DD977A9B5BAEC15BC955EB766 FC21AFD38AFC81BEDF0251A2DCF4E5BC164654071975E80FDCA77576A2C462C9 A73191699AA7755574BC2A7138350E978E3162A4515D7CCAB88409A3D456D6DB 4249EDCF4C2B136EC9186A133B6C9AC1E946D8B707CCDD9C2522A565E93A7CB3 4DDE26D511214F8F1B8E9212477E24F4723681E117E40CB11688C51A30A5AF8D CA823CDB56BC7EEB007108EA2B472F8317766D8883C4D12B7B1466385F9668BB 980154B5CF6F1CE74156732C7D2754CD84A34CECC389FF21B73F2D2375CCA069 74E024072FEE9CA9B9F9089EAEF7A87E6A03D9CF08DBF9ACAACA27D4BF6E0031 8A78D6B8031DD42DEB81B9A35C12628F409F1DE9D293A0CF2BDD94584A9351DC 689D69157454B8E1A332067FDED84CF6DDFCE710FF6A92E478ADEF8DA1715B0F AE96B79D2EA39AFA7E5EEA3EBCEE94B8E631E8E64A128F422D61A59BBB4A3F1A 4DA051794DED4494DFCC126C09BD865096C3689C8235825E862980AB7BD0CC4F 3C0A2647529DD28018AD9B17759555C4FB016E179FB4106E0398156AE3FB3294 F86A2B19C11EE747A2379E822405BC72C5A83898EE16C3B34FD3563DFB8751D1 0A71A0D988E5629CBE81AA17EAC709A8355E75AF5D8B52F1CB973C0B3057E19A 12D74FDBF11D852984F2FAB83F0F54830ED130346348491CCB70419CA50E615C 4028CCE0FD74B42F577350BCF58A2B5AF3DCF93C839F08B369EF2867121732B7 23CFD25213A75B366A122A313217C4283A321F5719D2DD7D6B546387EF33FC90 B8267596733371256C285C582BE38B5FE16FEF958C6008593293D0FFC5230D27 9A94C4F1F7584609630B2A771EB5C109C6B9DA17B89BBDC2496067DF53929444 02FD619FEB61CC5C6638348E124DFBD75D10DA89A442CD9D042B0FCEE4E96206 D78D05B296158FFAD00E9C940D6BDE59608F0F42D7DC73C7A5E9FD567D888C8E 7B2EA8A76699DD4135E59B0B0C2F8213F28BFCBE8A218729A3829E50BFF1CD3D C227C64B5E91A55127E0FF1273F6589F9C6E96FF12B1757AF730519780BC4015 7496E82263DCF0B25D05668BD112846EFFB004FF9A1E55242C62A9A120C39571 FD51927B29F06CA32B3CE0364A1A5B62EB28B9E45753ABADF89D131B4500D496 68405DF329AA633D22C1B2E047F44F01F358B674B2B52996785414A7ECAAE75F 969AF91F753E250A695EDC7F606FF69758CBB0EBF543B9032E96EA7B07DE8884 C6261A49C6B062DD2B3D3786EAC62BF8D411BB3244D77777A6C10BDAA5F6A1F4 0652FB99C4190B42974E7E5EFEC6A4D5FE10005E0E04A7D714127D9B97FB2414 E3411C4BF40503661927B2D2BB59B83EC6C3B748003779D6AD10F0F6F5D3D2A7 8D2DA067DC51243508905EF7644B74B4EA36B6B5749AC612634EDB68DF7FB8C2 73A7C867D53B210355CF88743E9B77C8CD00CA9AB738358F58505CE523BF2666 280F9034AA18015EF8E9F24C85D3D5B29EF1F334C13AC6E56C3CA64354D8C744 851D99E9E71796FADC9ABF61822EF7CCF053028DDCE84B7F3B95751CBE014788 914A7F4415DBDC08DD2088BADF76A1C130FA0CB25E1558F3788F92A8EA1000B5 55B76C42D4CB7EB0C7EDF3FB1FD33DD7AF48AB9C30DA1ECCA23A8985031E251F 72A54760A9B6C715EB1152C3B81575D1BC1FFA0F62486F3E2C180ABA4F226E15 8806CDF54BE562E90328560A7CA29AA4F6993001498541E3EA93771FAC587DDD F7EED468BBEB3570B0FF1CD26772C21FC6BDACD1C97AA716A2627E8777A09F7F B1DE5289C78AA9FB60F0709C81D621F37983599022742EA3ADDE2090 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 15 /epsilon1 put dup 58 /period put dup 59 /comma put dup 60 /less put dup 62 /greater put dup 67 /C put dup 78 /N put dup 79 /O put dup 99 /c put dup 102 /f put dup 105 /i put dup 110 /n put dup 114 /r put dup 118 /v put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9042537872831BF5F1F340A 8D3E6DEA1D9675E87B3425FAA0172DBEFD7C28E30906B9FBA65517C9B58FB6BD E0D474E69BB90B0D130A32C4130974A1C961CF064A5BE8EC1056858553FFCF7C 0D78627BDE04E5D0B9F6F72F92B61A915DFF7AFE7DC3807891D039AECEAC3F50 0A09579E661D3DC3022206061E0250B09A05CF198DF82D4F28FCD3671E815A6D 94820D0C87AB1DCEC251605D9490BC465D8A62C95B7352250D76D9FF1D3D5A32 9690780A5B56F9BA2083B29AAEA996FA95246D471693F2DF2608C28329316045 535EB92036397343A7C9211DDFFC557CFD5C64C6FEA484969F523FF8F497CA40 F7D9133C7CF1A483462FB124D12B54F7A9FD1F664DE0D8FB91272E792D90C250 8260C5238239BC431CB7150AFF4302A4EBACBE730F581903054F06874514DC74 E0BC264D1A85964FDD1ACA8DF5D4245179A87797C36CD894E9A9E4987AD6AAC8 6350CC585405668BF347F4F82766F2C355AC4D4F483647A02ADACD300641DB7E F710B6815C60EBAC05C490A5DDB8897C0008337DE6B5FAFAB9DFF30AD0E1E9DA CA45F94E7CB3FE695DE57EDF7BC10A8B75D1F3884FCDE2775BC1637451A1D569 4EBF4EB16C571701230455507D0E0D14329C577251EA1DF12BD42A13789152EB BF5F559DCBCBB6F68E70AC0287DFD61F17CC141881E83BA42277D5F80B08E58E 9786206CD982CE8C90D8B595F5A4CE4A0367E162962CA49EDCDB70B7A74DC7D4 3D4260806CA21B76A4F0B08792DE257580CD22D78E4E51F73A258E8B5369C06C 718EB581669C2C483F3AC5ECF36D4849E885977819D8069133D3B57FAF34C724 0706C4E185851001E08883B163DBA4105397A6DD3A6FE22E584B1197B324C7EB 72F0FD455B45307BA2C8E310EB9FA7E55BFF7C521A2DD399A81378F4C8A36898 36F404A690AA7DB38AC7174C0409D4B79BADCCC7D1B418E4EA8E08904D19EC72 53EC9C043298BF44656B3EA3E326874462DA0436303AF07E065CB219C926D451 B6583264C94C0FF4111E14F5EC5EFE09F8FDBEE339E596F99BF2F3F7B73DBD1B 16403B0B29E07C64DA39B1347419111F7F807A7030F0C159BF0CDB43EE3481BB A759D9E7EF71B5855A9D3F1DD2E1F8087ED7F99F34E696B24633F9B449528803 95BDCE0E83D6B1988D39B75F2DBDCF84003FC99B2D9FAABCD5919436DAE0FE43 CEE28042BF1DA3A32E9E70F8FF498B99E07F1256B59A607771182200347A34E9 FA6B2885205A55404158B6B8241DCCCF4714405D1276D9BA62418665F1A9B548 792EB4F58B94F44529DB808CF27BC7785DE5ADC3D34172433CC6525FE04B0F97 BB32ADAFA93899298B08128191323F4E141EF81BA4FD373F6E3632D83B4C8D12 A52DC69F332CD34930BF6762D9DDC95BAF900A257A8411C930C8CEB83D0D1812 A7125613C37FD53F549E99C7447A2ECFAAC487B1BFC1B6E0A89F0688E00EF3C3 46815354E8D6B414D4FDCD7EE31EAEA68611687F1A69DD8D244A40F0256A9E93 AE7D6A6E8E69D9A02FFC42BC8E7E912776BF098A84AE9A4909D73872BD87E46D 78B8A9CB17E442EABBF55A3AE04B6610A8DD1EF12DFE4E11D1E9610A4A48411C 3EAE7F4BB0DA1E903BA2A6BF84597F2A54724D8D21FDA88E2D8F1387163716DF 846D88FC29AB93B9F3BF17FFBE2EE87C7BD79B74D16F96DE7019B41CAD8E2FED EA421BFE9BF261926428C3FF30BB0ED20C87F37DFCC55ABD637E9C348279AEF1 6A70E5739B94DFFABE4175555BDBA8F2814F84E026F4771D4F8F494FCD098716 37D1AF454F3BEF0FBEBE73490C291751E1F9BD39520DE30B1D3EB966C52FF506 70A4CCF6E57672327F5FC0A9940287FA3EF874A82351C83CC14EFB4C265D9332 BABAE4AFA4D15CBDD3F8345C30EBB031A00CD0F5DA35285EFEC94B3A96423A62 1BD53B8D85E38C489ECAA3FF7D87EB84556F43AEDE1350787C22C834528036B4 AD874E0495623ABFA0E06D6C9DE159E3C0C2E458E894B264855ACC22194DAACE 9EEEF2B225183710A560A68ABDA00B300C98E560321B00B9071A28D18A28666D DC926AAC902728CF905FECE435043FE03050ACC431D7F0201CFC05B6725A9223 B0464C7550EE4C3B36EF0EF831E66E13A385CF42788C3B52725DA3B6AD94CB60 D7AC4BE98664B88264B612FF2D536423853D2BDCDD7D89B587346005E0177D0F 48BC093C087B558E14CA3430E9E92C306096695362B3A3FB99F9D225D4703F82 36D42865FB73D9B9EDB0AD41A1D03366D728755CB64665AC798B274B84BB526F 6832936915110AEEE39DA673B169F408228EB0F393FF6D85D9E78B00BE99B0BA 2A104E5D58F931AEBB91F0386D79E8193527590321C01DED076E7A3AE49D1B50 2566A5381835B2D2268C95FFBB07825BA0D658049AC8C35EC98E90E8D5681C1F 8093A4290B80364DD67D91C8FD89FABE174B17152BF918CEAA6911DB540D3EBE 62C7BDD835CF6F905622F245E3D055569873EAA546802CDC35C2FA3FB5351BA5 0EE0CDF5519C1ACBAA7E2C9D528063AD804921BBBD0F1E0FB180BCCF03827105 B77DF11D303554BA060DE840BFA6B94FD7F76B417312E1F836ED02D5BA0FF8CE ECDFE23E27E7DDE79AB86F6C0401D241D883C6089A7F86B421CCF9578EC21DED 7D5AC63FAF160D4D497F5C433D4E18A02ABA9B60858511A4ACCE5E8CE1F5FDBA 100B725464B39408A317F973C705F22A25A6CCDF061AFCFB68A361BCCC16C51D 922EB4F69728B93E938453821D1CFA7B81B46AC2009E8A9DF466E22596B57C02 127C928A97F38E14623CB4B675F0B782B592B70B8E90CF688F505AA51831AEFC C3A84FC96BCA4686634FB5FC2C628467F7D68506471C4784E91F681A5D2C067A A0CE6B97FCC450C0FEBC781527A20684FFD3A9FC6E4AB601120790CFB4410A00 65F8F71DB75BB8BEC6476E012FA2370949AEBE6B7EAC3D1A2E9A867C950605D3 994F1411455F1761075D44297BBD3CBD188F380EF063CD1971D8AE23566CB4C0 F8B62C47EE277C5E9118F41AA592D19FA8E3A22FF1D26AE69F4CA2A38CF690E2 8094E8E0907536AF3646C95DDABD59E4D8D03E2F3783DC1A955FA2D4AAEB8754 78210D7DB5E993B85BFA531F64887D2426FF8583CB0EE23AFBAC68E46D92E5D3 0265A4F41067B68960F213A8192883C26E397AD753685AAC4D51EB334012B2C8 7C886D2AF4F146EF06FD384366D87B19B48ABBFF06FAA7FCFF6CBECE9482B8CD C9315FC86703F3D4459715652711060F7C062CBBBBBE53205232648960FF5D41 84DD6FA201EE6C5FD5A6E95DCC7A5BDD9AF88BE83D92D56B8450EFD20A31288D D1686D7B4F05DEC073DE009B976C829EC2EC7597992C2B339B68762B57878B66 BA4985069EAE029284F66243FBEB9BA916D331E837A5E2FF69FF66FAB31EF287 A001B44815E0B3C600CB43D62685B29E174EC77E7D4F2257C76517885F185CF8 28ACB0730F4652ED42CD5204A3CC51474B273706512FB3A9AB87A225A90E8517 C8AB91961DB8914B0B5E39010180BFC685605303C9A2E3C7B226C12445060DFD 2E84FDB106947752ED583FFE76D754BEB7654BA88FC3094DC2C4C1056891C392 959BC50F7173A3425E54F61C1FE45087720AA3ABE6C1E403258DF611091D1CFD 1F2494DA63DC9D01A89C61E72CB6F6EFBAA267E2CB570DA1AB58B07E3BD9BA83 73FF932741459497784B3611ABED216373E27D0C08AC541589BC1DFB79F19AEA 87AA9C38C9D3627612F21372A4D34F04AA43195ED9346617AC111419343B1878 ADD828089EF086AE9572FBDD7D3F394F0D56D82B40F5D3014359C64EF1D67773 8876ACDC0AA58E2DD7A9AC735C4F6D04DCEE5521977DD18233A2924ED8CA2A50 0B6E55FA0159D430943234A66D6A92775B56F5F9C7D1A34ED528F1D08FEB6E64 BE9292285EA1D270C4B021FFDBC852E9D8AB4791BF468E6B75676B475489D8E6 FD99895170A89636DBB47B5C1F213DD0B7312BED01E1675001F908BCA4FCDA3C 16D78F6C3DD28F4BA8D81B765E725B7E174201AC51A3A631A91B23EE787F0717 603EF5D43C82FA5A382C94C04764F31B907D37646F4FB920271EE8E71612084C CCC55996C49B4F8289299D8EEE82CDE481F7AD53283FF895BDA5C85FA3CF751F FC11404D2FA62FAA012D924F9424D0AEE02B11F41093A51A3AE384FF57B1C437 4C692A348066AAD56DBCA7C257730A6EDE64226FFF175ACB083ED0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY7 %!PS-AdobeFont-1.0: CMSY7 003.002 %%Title: CMSY7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY7 known{/CMSY7 findfont dup/UniqueID known{dup /UniqueID get 5096648 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY7 def /FontBBox {-15 -951 1251 782 }readonly def /UniqueID 5096648 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY7.) readonly def /FullName (CMSY7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 3 /asteriskmath put dup 48 /prime put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D9DAFF1B3EA76067 C5493B69F73B89C8B61804A34FCEC826343337CCDFFCE17BF343EA8034BF95AA 14C56862C2C052569AFB236E1F1795F05150C8F28DFEF6BF4BCBACB678D00036 30EE84FEB44B1A8438185EB45654E6853C1159B073E54292D135F0961A64E8A5 AAE49C4BA9C44156C123426212120F99F3E8B7425752A5FE384AAEF755A8464B 51F015F9E2967477D57B22627D75CEF8AAAF0AEBD504EB46D0289DFC8D86C972 F042BD88A90A53613DD93D8A7A8460E63D85F6C15C000C0AAEE4BD5130B6E668 8C9B3F3FFD804745DA1D5EC0AB85C96E1724FA67F9324C59275415182AB48D57 9722DCF602396AD4B5C075A5A89A5D005C9FE11273E5FBDDD1800F11BBDF6AEC 6711C5633A73AC5DF038BA521AC492E138F7FFC7C5438FFD32FEAA1128C66E83 0D3AA40665F05E62D7EF00B1B0596162C402A34B6BAE6300D43F3DFCC84860F5 C0F0F1CE28FC60642BBFE9BC9102E80146774CDC88F9C250DE762D24A3484BCD 1D26B6D9FE981CA5AAB2A4BEDC528115043DC18D7105735D7528C2C5DD89A812 75B5D7B2E5A586FBB0C061E708F92C1552F64A296490BD0F20243986A4707FF9 8AB3C917B8DB92F19DCA6B9D4A1DB57515E51DD85D5C9D2CAF7A036AA3F9E9B1 5B5E099CC05A9126AB274C17D75CB4FAF78052366D2F21EDAADF84B22A2D645A 3E65C4BC0F540B5D9609D88DD0E4CBEEF87C16447D43A5F98528FD45ADD10DE6 41AEC411FD6929308F0E4F48A8D9C9EE386E920D41C1CC98A52073011DF5BD28 5683F280B5CF7F27DC50930C81D344FF5A8A9258A207D2531AC21A735B14155B C22C752DD22AA33C52D6D4D053B3E46FD4C9129068DFF52695A3A9184D04E8EC 93696A3FEC3AEB3814D9015EC14C22EC3ABD5070E8C28A3B42F5596D948212B4 AFB9978A0A361135C9E18CBDC98E0D1E8BDC17E25DDB3D52E86127E5AAECC55D FEE61693190E378978EF1BBD4D1AF005D511C7607CCFA4BCBD3EC427CAD82809 B725B25AE8A03EE88F80A7732A571A2317E0B6A0D072EE8CE2EB9E033CDCC899 B64CF4FA1C708A885442062F08D3D8DAF44C066EE278714D1486EB709D327865 A483F62709E89D08291F044325208EBA758DD459481334F5D9AE3BB61B3020F2 A4538CFC2C94BE84C920BE80806FDCEE394230730E049333A7E16509207514FD 695B5E0AEA9E4A9737311AA0B33B15F6769FF865D1ACB63DC6201C3F1062A3FD 1B446C1857460745917A36289DD57C94FE6240F4A40FBDFC10E91B91B79029D9 9F1B9C74E8E5AA011A0ECBEC660230AD5929F01D0325D15FDC0040406F124021 02AE176F4C98BAC1706F03C2B5B40F325A50CA4683B2BB4605E68E72D0CBDC2D 96B3BBCDD01201B650A7E7744D58D1E36D81FBF72E0A875FF29B4C109A1950FC 9621B18D58806392EEE9841794DFD39E3C4E20D45384FE07F9D445F143B922D1 AB350AA6DFC51FCF767B141A392D6A8B633AACBCEC9F56A0CF40AB08020EE63E 08CC0BE01B40E86388A65F5869F2F4D022DD4B912031CB8CEDEDFC2473772569 5B28F66AB74CD7902A0061AA3547D13C7F0C6EEEA7B0BD316694A94E4D672520 EA044AB28D8D01076C486CE456EDA1811F7ACA75D27473080D27D3E681E35FC6 447046120C6CC4C17674F0F051570A79DCA74848F3F300B58B19018430D99858 CA5504084D6BB74CFDB635B6866974A9AF05DF201C69352B2663B0623E7828B9 5EC5FFA8D8F10A7C28000F8C679B180067D5481D6315BF1C4194EB171C8F3CE2 4CE319975B9E948D907F9F7EEAF07089844391555F329E331D52FF114668B8A4 80704B3C6AC0CCAA2F5D043CE44E65EDA89A0CA854CFDCB11D549B7FA72EDB90 D35353C34A771B1FAF96F83FCA5258AAB65384BAFFCE448690C1432A1F749C20 5817205185F973FA098BA856584753E75EBEBF387FC155202885F5B67117DD7E 70D1CD887183C5573B6FB607D4F6CC9F8B94B09B3F3AEC2EF1E6A320CF6D0112 63046321941D1FB3F2140B59370AA9387E24D579D389A166A10C989497FE9549 34E1AC2E546CC06C5308460DBEF3E1AEEB6CBB0FFDAC458E61DE3391480CF5CD 34A647D4DE15B81131B7D1F9EED4C6837A32E89B0EAAD6A05F5F67518655E5DB 224D4833CEC60D5DBBDB8A03FB1A9730589BB4F0FF56191D17E73B9562E0C356 B188882B36F9505F6F42EB2644FEE125C2A7D12227ABC8ADB924E88B0A9E8DC2 79762523B0B88DBBE6AC7968A46BD9E9F0C3F03F5F64724CA07782195F01F130 30DBE895C212E0EE20162D863F46A674D85232FA0DEE69A8DF019794AF6873AD 9CC2A5EEEF9393313CA519BF95C08ADF7A75B6F53EDCDC39851D20E58B97CA57 A7523717AA1821DEA94C8A9F8B82346B16D92D15AEDC16F0011A45A44B09DE47 08CBA46E8511D0C5CC83F952EEFA4ACFA7F3D7FA5E113EF6B70E5ABA6F1AD3B1 E4D3B15AC6D5C3BC70A3946F411A7D965D6FA9D7B6C6ECE19B2C29A2FF476251 EBF0CF3BF658A1D896323706172746F58B2DE49F8B7E431E20304A42694CCF73 11C4E9E96260CC442E2938A1E27EE6744C7CAB01634C8210CE40488B9CBD757C 4277B5E3E43C7560291D945F9128AF1F85924003418F96458ADDC5BB8EC431D5 AC9093D20DEA69B92454613BC1A82DAD4FBF8E56084494D9D2FFABD82A7C9847 171FE36B265B546F3072B0923840E6C6BB12CA53E05A99F0E8FD4F5109782746 7CAB9B35B68050230736AE624B7862D1244C7D9BE4D1CAAE21B123D1E8372377 F1FEF269A9A2EDF02CE0CC8BF92FD7EF09556987B8A3BF6D8C0A663DB6B9742B E9AC61A449106AF1EA7ACAD40AC6F59427CC51865E6A90CF2AEED8D6037BA70E 4ADDAF622CDE877C98C3B2006B4721FC9BA18E30F0752BD4ACE36221F5CD1497 8FEDA5D643BE2EE007970A68E53D85975116E6CC09F0039A09EBAF0CA4B0EED6 A485CC0B69E526033FD1C1190BC5686739CE13D1AE8EBCABC01FCFF26141867C 44ED291196E546369129B9F759FDD7DC21BAF0A528FC34BA9FA8937813953644 C539F9DA4E55E83DB3D6DA309C562DA1330B157957B18F7618544AB738E25F16 F0517CD13C1F11BB8EA056BDC575D77CDC526EF497639DD89C2098660C5C45B2 D7CF715AC5E76847E0D3178360DAC1BAF6ACAEE72453B845B9F86621C166857B 029CEF5AFE29D1EDB4CA3AD7D008B7550A779E0066D7312DD6C7AFE1C0BFFF25 7B062B0DF30032EA2A2FE3CC46C96A3A0BA1888D1D2B05424A59ABE3EE928ED8 B67F507EFA78AE128F58B54634C7F534B3D0F4AFC23E38FB56EB39CFA425FD37 848545EAD03EDC5A9E796CEFB345F527615C785963F536972EBD9CFC4A6A4A07 5A31A508CA147FBB762ADD198CE36DF86730FCE2B643D1E7DF0BDE800DE7AF89 44A36B04193E44231E08919EE91A8B559646DC4DFAFF0AD891890A0A88FFA8EF B066BCB7AFCA409C51889E7FEB33F19A3CB1268BD0EA74AF29C1401BABD16F87 ACF7DD65A8513DA9995C5092C36A774BC4260113360D29AF7ADF5D22B5B58E7E A9BEFC33B9A91D2C397B27A81087376CB623318A8362C3FA9CBE3026675723C2 E711910DDB328E0EE3FCE219F44FE528B70E58B8E6CDB4AAB48237DD933D9639 E9D4F9EADAA8D46537D964D75C27F210B0C2473CB60D65F61BBD91ADE01576BF 77C49E31936138B0FBA066BE910DE1B1F0E4FFB5E81038E8656ABFF08DFD923E 6BA2AFEDCE6998BBF7045393C34811501586A4846E5B942C8E99D4C481D3AE60 2796ADBB5242D59F1116EBB828014BD903EF58B223DFD18BFBAAE4D348876B06 CAC10B7AF0DC270E6702A3F75D4DCEF872F2CDB9470AC9A1DC1ABCB55636D26F 9CB6BF27A0DAEB1F62AFEC12F55F78C9B59AC6DA9DB4B45444B0C582DB4DB8A4 B31EF4AFB77988E92FC0B257374B4408406490D9AFCC495316D6C08BEC9A76C7 12371E14417711EF802FB7151B3F6A2580C97527C9C3A0FAAB8D62FD992AA18F EBEB36F7910186CD5F70A55DFE932757C299D9D2289796769A00A0C6ABD18F82 E0D4E95D6477E67B4C012DBBD098FE20E2F15C412DD2AD5471A65EACE05B3A1A 0C9C430BAEF4887F2CCE668116B87FFD9DAB4B9B3605CD26E6B12488058AFA30 8843791A95BB322DF5C47387F3EC72343855D6B23D72144EB5EB5157B8B238FD 6C71DDDA64C9539F66A7DD569FFF43DBE4A8F0608A3CBD354DD9BAB5E3C756DD 92C3C1B3E169D86A2230299432488BC04A87E08A80809F9968676DF9157B1C91 27C664ABCCBA9997FAD8966F766B325086899D1FE44581FE07C97688B3E15B0C 234A22646C32BB965B9BFD2CD34854D1488AAF021E169BF9CA9665CF040E25A8 16156C80A2F47397CD370AAEDA731E0D14FBEE1E51A17DB972D96DBCCE33F937 5CDBF1A650BF1D3536BA4CB7A1CACFD5CB457E2368A660A62AC26E64A631B2BA 6B08EBE42E02D9B1B2E95BF9F0A6B59C96A122968FD46A4D17BA3D018CCBA0F9 80BA3C1E6C683111AFF79303CF64F1D2CCBD7571C6E09DD9B27B8E101BE219F0 E075880A0E367885AC94143E777DAE455B990383100EADF786300602C2CE28F2 4F44662FDF03BD39A5181912D8F1243C36FF88882CFC4B34C1D4EBBC01D96A7D 9CE5303042D1B21042E4FEAA455F22A01333FCAD7E4AACA5D3A5386331985F6B 9B247EC6310BB07507321BEF3E4ECFC3B915AAA6E029B3999644C987640863B0 5DCF58CE479497AFAD1208FEFD1796E74467E9F7867C313A3412E6923F4C9144 C69EFA17965056DF043DB465BF2F1E191706D3AAB47E6AD5C9767E4A73B29F2D E2E579D0262237568F82B360ADB6D0219B7535EFD02DD0688CDD23D84FC4F308 5D2D0010B1A9F4F0321A00C154672D21708B66B91ADCF98BAC7A2F94848E9A4E 86CC82EDD0399BD9F13E43359E71F80086B9B0C3B6D08831D4479ED83E7892C4 90C477BD1F06DFEBBF60F26516EECDEFE4787EEA8683754F2B257D0BAA607DBA 35EC6D1618C2FDF3881827F92D793ECF152D761F2423A96210F582DC9B90120F 26A33025414716A5E6F56D712E31BABE5047EC4855B767AC63D793995C9E074B 6E35C7E5255FBF4C3F17E7AD7B2A6C5F7459794FC94306B581536910F244BF5A 3158E821CE75F4B0565EBE985DF24DAA92F9C1D848EEC6B88E21FB6C51125872 1752F7352291960E5BD36F78AABBCF6DAA4D07AF56E4B6058AAB13D41BCDAA14 C0D63C6807FCD0E2B4B9CC892F224843173A75DC53A8F0FA396959C2E2CFE3F5 9B1C8B62797F34E7A0BFCF0787C73FEF98442234A617CF161829498035D30B29 ADFEAABD0B496E8A2E764D22DB7737F950FC5982F1C5F4FD414C1B0202F40FBA 62C81B8F0E836CD73D79366FD62388B437B81FC673442EE34BF27454F72A08F3 389E60CE28A050601A42FB4491C60DC02EC008E6B9DD2495522BBEC7293E2923 120584E88412DA7137397B41A28706B1CC6BB0C80709A2A4BA79822D245757A4 3EE454198942ED2316FAEB981F7615E642167620EBDDC5B271E273216EB119C6 4F2F0412F0BA6E3BA396217597575C6739194E1F839232FF088FDDFD3695A5CB 9A0E220389938596D8BDB183138E1F73F64512E4FAB5E1328F9B42364E3113B8 004BE2CA0B074EE271BBE0260D31CE555D535C16EBB528747EBAFFF253E659DA 3A377CBE0B296276AACF0294CF90FDAADB4EAD5E2F600E5B2A018DEFB86FF61C 84296480A425687CCE37D671472537E897AFD4B8C6A6175E1ADDF9AD24DFC5C3 A73E18AC2D9B28BDA2F17D51DB3521945850DAF0EE48B0FAC271544C1B4F3B2D 53BFC8DE32BA366FB1FEC0DD6C0B1FEA374CBE2B96F5B235A1D83A240DB442C7 1460980A3E5B96AE3D5784DE2C2DFFA671E0A856DB2FF4130E5905F3D5338856 C11A468D867D0C6EC585F1AD3E7164B8598BB59973B9A952FAE819F052A6554D EDC342BCCB0525905D1D27ECB9EE43847B69AE116F494CB2DBBAFB2773F1A3E1 C75FBDF8D66FA5AB4005757D631A0D9424FCDA91A1D2AC6FCE7CC7A23E84C65B 3E92BC684F23467DCF8521E0E27CF1441C487EC6E3BCA0AB54BB137E83776009 833D772FD225E88A8BD992FD69819B3BA90BAAD1DDF16E4326190CC4BF9C30F2 AF7CA1FB38E6387D9745FC5E176B248B1581BF7A4CA2FCA8E423DF340EAE29AA 7E07A25FF838F67378F9A6A9A0B404E01E86E64FEF71DD3D540D4711AEB1974D E2E0D485DAFFC74BA6B8E9AFDA245BC8997BB39BB6BD52B496A09C68F7A8E900 8DB3007643416040FCEC85B407EA0A946827771FBBEE49A3DA5542CC5173A31A 0280AB8E922C23C1BDD88D70627EF124633C318E7C9ACBC14AE216BFD41C0B6B 3A0161757913CA1F7B6626963C09936A52E73DD9B3D86DEEE73C0293A646FCF1 21D4C33DFF1671DA7A53E77E20233EDE51571549AACB7968602CD03EE67ACACA B231661CA9DA2BEC5795A83DFAF675E9B052C8BDD51490F7874C91EF5ED2E0A6 BE9CBABB98A950F7E55DDA3823036437C11F614E27DA5BB8BC6D955FFE54B825 0201275C2C49A3908BEF1DB3D87792DDFFED23DE7FD9CFC284F6255C77E54A39 C2FDBCD28F2938E4CC135829AC1867CAA5705674062C9639FEEFBE49D6108091 7C58585B80464F7E69966D7933C7019BF336B88B9E0E7073A85EAF297B71B303 31EEE9121347A482D28CCE942AF53E94F88A97EF2F1860A92CE29A14495D67B7 D37E207D42F3891E0423F5BCFFCAAC057FEC683696ED6FEEFA65C8FB6F1312C5 24A1130192B4179F3B08DA1C951D988894E7FE7CFC28C56992A1CA82BF8BDBDA E021F16E630FF67201BA4DF5F3F4D6AA65B8347FC1575C142C6C1868E8472BD2 CF191137AE1B36F32FD84DCAD50644AD55EBA2694C93BDF984A5C9E7C92B73A0 26769F00831537266FD2E711AB3F8AFC5F3FDA3C9E6439FFC48C3D1B5527FC56 1FEDE991E66E8465C0E395EAD0A22A2FDC001E449AB9C5E0EF187A1DE9B74696 BEB6A525DBF3A60DA2FBF1579150DEE1C5D1B6F55FF2708CE23289803CE123BD C81E25DB96551A13AD713D5C7BFDD3F2E1D5C12463A195442B51909CC1724E50 A1F6F4EADB3B7355908F36F88521F333C4E7C70B094209D1F883B961DFAC32BC 8C5A2CAF77CA5E6AAB714CC0AF2B42FFF6F73301FC71AFFA9B33A2153F55C2DB C1C111874DEC37CB746BEC9A3A9A37A2DD098CE7C66B0FE38460ACD77A47D53C 1550F857FFB733B5A8D02FB56790A09190B29CCB4F4A3058B1C82F0CC5E1B2EB 2F8E06F2DE531E1EB81326A8EF0F82843A4AC59D267EEE45730895752820BA93 A129C22A78C1AB28BCF67AD5DF372FECC9EE6719A02E499FD5CA866688E86089 7EE8E5912087E0C4588DE38428114785E0CFEDB1E2EE24CC067D107DFDF1E2BD B1C4F9C6B740F3DEA0BD315581004E851ED5A9F66C4F9E95DE97D355DB06F482 A43B565F1255A85710B15A281E2F034B1C23FEE6CDF3A043780CB6AB18A016F1 9EAFE545CA5A5B5AAE2459D69D2151E99D029FB5C1649B9DA784BFDF7D177385 4D8B16B9922D149FFF6B4F99311D52BEC9A9FC098E7192180DBB38767DA9B9C6 E8CFC98615219EF3AD4A8157D14C72BA3F91C8B78381383E0BCA1A5319749E08 D67D1208C693A6640D1BD6B9285AC0D3110CBF8F7747AD12585141C3248D0BB5 BDE892F91A4B3291F21F30294693518E4629A3ADD7C8640E424FF615602C603E 1E14DCB3B17D34C090BEAD2A523E260A599522329B698729A635CFB15BE7E79E 6A34DAC7C3ED57340821A4E7A0C7F88F64BAA69BB80DFA8B659F4756878E3044 E1DAB053FE8A8CE996729D6B8C28E61CA326FE8914B35B08F0A09F72130CE848 C798AA77061ACE81D1581C321EF41BFCC720E819E8067EF90EC1E7694B5D8356 184088CB9775B0C5BE614739666A2594B061CC1C66B68DFAE725AD83C9E2C676 0F14E0DE777637308B88BBAC75D8991BB0B6CCBC78891C106245C34FC3D7928B 622EA40B6C2445862B9BEFA4B84931BFE039188EA6EC775A97B8E242D0869F3C 1A5B678EBAC7418142024DC801BBE868521A6131E49EA9B9E61E144B363008BF F350679D24F1E237059BF1CB4E4942D6C9C2DFF1AF0F17EB5EA0F702D74AEF7C 4FBDF51DBA24F1F10D9BCC593CEB2DEFBCDA03F80F12E361B19F824915C08F44 0386F3A3B3A4C9233D590191C8A12158A698D80EA2FEF9AF8AB53EDD54679B42 875F8C1785A7977B3F904DF5A0AEC63E0DBC2387A9163C76E994ABFDF82EA670 3D0B97AC1232BDF9598365EC6C34168E66126C35A6EE2B94D9D42F424A613237 942558EB3219A2462D99EC730D21B24AFCA9CDCDB280EF3E11F3BB3EA927B822 0ACC201F85A1C9B0B01CE8D1E24DD5EFB2010538E769A8F474F239E70F510CD5 4E125ABD26F29B92CFF84A9AA7CE4DCEBA2D32D51D4167 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 39 /quoteright put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3 C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055 531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13BA 6CBB27085F3E9FAA6F6AB25CD0F9B879FC87D5F6BC8BC00A44123626DC9CB159 90C6D14B7BCBA095CC2BD04A7126DDD4AC823F4AC3E225DFDD7CA9031023CBEE 603CD1DC2AB701F16FFAC44FAD5A50EC402F70F4C2B403772176979C11032728 BF872DC77347FC43F28CB71E97BC0184963FA54A8E161D9B51EE1B89F32F409E F01F82D09B739A8C31BCB73E5DA40B937286E7E68A2C3CD4C6CB185352361539 C164DB729E9EC9B6AA11AB7BF074D4B78B6A9B633D1A65D44960697FC3B53651 2BC4DDC707D98348061074C3748B3C8DC00DE7254DC9D6D1BB3457CA7C536BB5 F78A2AF27907FF4FB95130181253E9AC3236731A56149D270A2F07FD91C552AF 72FBC1724FE7435CACE77B5C9815478788DE5B5AE1FEEC0D860115E525FBCB4C 67D5BBB89C7C1DAF46635F4567343BC2BA3163471D533E86E123147710BB9C62 D40B4BE35D6A19297177944949F4C058F38D1990290E08093E31B28D09E5D5D4 01F825EEA7C64538CAD72821F9FB4CE3FDC33DC305E9A0789A77970599491ABA AACD6A7C764EE90AF03DB98D8634A3F453807763D9DF52F032E4F13CECE10523 DE1BF18B6300E3C8AE3AE06575DC913E13611736EAAE40E03B5FDF80580BFFEE E1E5572DEAED3267DBF3F2EC6C21FA3E2D45E54ED8D7C9E933950D391E047CB2 4BDF04F4F7F65D02D2C3AD982F6666881C34A55656EC8904480570A2248E2E1E 896BA64439D3A6C47890B420528A9BEEB5D36759F959A436583234D81360E54C F2A57FC88379041CB686348950167DBDF710A145F970E1D34BD2C8492D9A9DED 5938F28DD9D571E2F6B4FE38F44AC0DB2CDF9CEFC0712AB8521B2729267702B8 F151211E635FD3D469B8644F3993BB879DFBD690DD512C1B04EB3228632A4D7F 16FEC6D529918823385E30A574015FF52B975095C0DF443BC3F470FC1FBAA2B3 442057BFB9746E1D7BAFCB8760780D5F1F19FCCD622E5C818D5F699B33BB3246 ABBE4A172CF91974D06774FCA0A88BE8B4427BE856AE3B4B09A2E7B1BE0BEAC3 8355A297CCDA637E4F62B1C9393C59E4AC37D77E7DEAAC1AE5F0C57E9A1B5F56 4445400DE3C089CF40A615F3E930400DB99FD05388D434A4A8DC5B977A8BAE42 DD760CF1BF95BA94FE7DE4E9A0A447AAD3D44AE1B1F2159BD1ED1BD7DDCB93F7 8E7B626DAE2DAC7DC02B543D433DD2B301F57E975F130E6F6532CB72066ED844 D5D47E5C5AED74F4B9FF487C1FB9920B705B0265F1DD6EAAA0506953A08CEC2F DACE9A2FC3380F99895E023E498498DBCB41322D2964DFAF492FB7BA090B1A8E FD04625C537592B1871DA13EF2D1B7B911E69E5A883A090C930727E0E014E64F C0AA67CC7E1AE3DC6AB1CF131A963E18B6332A0F8517B68A63E00978CB976C03 C457E53FC73C4F2A1F3477D205EACA9A9EF0D7AD8A6C2096F54077E649FE5CF0 FC76574AE2C9F20D8761EEADAC32DFC25CD72B22A7F480597FD14D70BCACB5D3 71BD9FA0D6AE1BCAE50D841F74CE7AEB3497BF4DAAC276927D80017E2051EBFD F23446CCA2CF592F8613B55296B747DEEB7ABFFB7FBBBAED8A49B82FF79A2C94 E22500C7963D4B84ACDCC5130E18D258350AA20F030DB6446A3408F2C65EBBC5 8B126E4F7305EFDD759C4A2BE2399347FF30B72FC742577127DDC1861D9E137C 01F1643789B4DA2261141BC9D823318EEBB35DBEEE48C5BEEFB6E6EACE926264 F0B991F41D1642E974F31433B793A4B1BDF93425C3C7A826A9337C3EAF5FEE2A A9F789A0D901B47DAE319421DDC3973E3A45F84EB643E96D20F975896E38592F D235870B06011E978E4EF233A593103A6EB8E9F6FDDAAE02E4FAF5C3C62B5332 ABF02CA254CD3C105828C7F80D5CE801F93ED1F7C50C393E72E6483C4E1DFB62 D6FD635DB662C6EA1FDBA180FC9D590B7A053F0E117A55065928DC9C18F6584B 7C55867100721FEA0E36C69371111907606392FB8C54171E3379E1A8DAF47220 B54A8C8AC8CAEB0610028715DE6F58D6DC5F72993948EF2A07C5A7AD1D96A163 63E8325A33F057A11314CDDA47533358090D3A2D4E093826082F9A8C08793699 715E4419AE8926C0BDD06D8F3834A4AECD463A19EDC974738BC1380960BA7DC8 8919F5207E62A43990DD38074911695C534351BE613BCEA48A479A879F4050CD CE63BD4912B90236E334216985620C5278BD13292AD04BC6604742D60EDF324B 78E6B95475B69A342120A4F2A70B74D2D8306DA70CA37D6A9522FAE55599605F 78552FF930F933DD4B84B35619A1F5017EBB86E844EF517CF32687E48D9AB9AB 1C3CFAEDAD5C13C4C32F5B63A16C0E17683D4C336E6F63A67C3731B47C41B565 EC4505829EB88892CCD05C63540D1CCD61C4EB95D09E435C0DAA696D9EC5DF31 E95841E7AC39908B726B96C1318FBB044308DC3E6DEB6AF7F88BE627E28362F1 05E80D2EF200A5A80024B6DD2327D70A72AA4B05B19B0EB22C3741372589EB37 10C61C6F3920F827D973697596574CBC4F1DC2C536E46DE877CE1E152D1066D2 2F332BF407F8C5395D22DE980F07A3AFC4A23282979EAEF551BB4C9EA7598ADE A6944ABF8E0AD519CCB6B1BBF8499B914A0166D1166B5C8A9D754AD44965E1D2 4930810FA5F9F78EAB02FCF25FDC54D651E7B5ABF3E979EB6D22EE4072B3B51D 74418CA1FC69F009E486461F48F545DE65468D4E8C19FABA736B0F92C0204E4A AA0BED45499FE12832766128BA0159AF718529A91FA14F1FE0237FA94246C3C0 62C52C18240CB7DFB12273B3AA3F14A473E50E711B921D5AECEA36D6766D3768 6B9D868F620A56CDC581F77AA46D47D2F40E1117D38FA7AF1994C50DBF708238 2E252447C7A4688FC40C3CF4E419A2B7BDC424A2FFA67FA581A0510C3430F85E 5C12D15F9212CD3F6FB18516BAA5F77F1AA6A35C922FDD8EAA84F0C68E332692 0DBDA389519D86CA0DE50124A889F9C6A707D9E22502DD4A7C1DB71B6A9B7F77 7AA40FEEA3CC3D11A56DDEC24727FE24F9A6804649BB8F086CAC43AA6D2C55CC BADE29D3740E4B26BEF598A404A885156604F4438751682CA9DA2A0483A89F95 C58E8B4DB8E9B50C7BB0C02C1B910228AAB3DD1AB9CF62CF248C04F88ACF19AE 2076A96320B2D4FA42EBADFA4A236031587A878E7D4CF207D504448275A2D60C 4936C65365DCA18489A2831B5FB22F1B00FDE58A7D824F2B9C42C31BE7923466 2D8940F0E2FE0C38C3C3ED3BDC7C86C975A49F946EED80AEA31BE2A8D861DFCB 50EA256C9B0CEB83194E96F155830BFFC2D0C29E8DB233FFA147BE60A7792931 4FD04BABC8B01E33705A3E0C561899A4B20C9B2BF44EA12EADDBCB79D6FCA020 B828C44F44A3CDF6749C37BEEA34C3AA72C9F8354863D1B67380A3A2E2D06698 35E7DEAC36C0C87A277AC1E97AC0637D7D3B586C2EAC39A6696E337699AEB3C1 9A44C5DA17D2C8D2DCA867C40961A999593524EB4126F0BBE81C8242A695EDD4 38F9CF000C3F35B8801E4B82ABF23626145ACC713F826A38527FFFB2FF1A5F2F E4CBC2E609779C0806875382E17EFFF5C001C811CB6CE962EFEDA8545DA21F2C 19863349F91C97455557DFA54A4AE60EFFD8B4A5CC6BE8A62D14AE41E5867EC9 DF8C7E42803E8C82C5F0C884C73E8470DA2F89BDE27394CEAB577C4EF72BDEC8 0C87192B09B94371D60587267FF31335A7CC324651204B272F49E20C44297D4B 0370AE51C730B05A36106A2F110BB6248ED8E938B7C1474AF40DEF3E4C8825AE 2482C92206624E47A01A453A15CF02E382B5BAECC08FC59AD3BC794D2EC027EB 4E7D5086FEE943A6DF40372DDA3ED592FABCB433D01369140DBFBE5B9FB5A532 7549D9174E9E16250468AB88BE2F4DA307D5DD0CBFE5A0315DBB7DA34DEC3F9E 2029A67E4BF4EB87984723DF63DA78D195F59BABE595CCAC875C9C6103AABB76 FE19A252E0BB53FEBB00C05FBC13AB3FEB37E78106CAB399E2B7B55B1D1675B1 BE183CC261FAFB303A9F2C54F2CA360F97059EF781351B4C6778DF13F97442FC 0F26FAB9E568BA6D0EB1030189B700FF54879B418419B61BA448728C13353DB4 26489FB26E17F4EE34DE50B516EAFD33CC033468AE450893978CCDBFB59C0460 A5DC33971C789DB4A9CA011E108953028F0E32C6F18FD4F6B533408F3D733225 95A041B3036D84F1BBFD4C437C78E6738012B1BD936DDFDE5E4D26D5A8184677 E54DD099A945317A98BCBB5E3187D2CB4FC5AA04DE8321ACA18C77DD2F008E36 3A611776D37DEC5BBD7A198F9F5C7F5C3822A6906960C5EA742313F38493C78A E76518D3A0584F42DB508B6C232CCE38289405D7D44559898A792230DD9E4A9B 55B87059E4DBEED4C10CB23986026254F11251FD5E45CFA778A1DA2A005EB85B 3EF2E1DD108BB60CEC2754B4D12E497879BE0A9612F6B877C9F1B5A2E301CF7E 5B367EE8B4C99CD1389BC5052D1A2766ECD2A53EC414F1C3F2B8DD4C7B23AB96 319BAE8E7C89A04BABAF88C1602C318A671C9AE5ADFA5821D3E8058942688F2D 177B303B4AE9B8A165C28DA4DD7FE23B21B15646DD2FDEA523624167C294692D 5D66CD3F20CC8AB0034F08F5264FC2AB89DF736DE99E165257049970E4E34B2B 2980FA52C8DC7068007E4A0A2EE33A87D62481292F8DB03BA1C6C414A16867AA 4E067EE860C27F60E5046C9D04284B3580900CA1A6108DD22E93E5DC1763ABB8 87E0ACAE4F3362220901D9D14EB1D69B96D07F2D61C436209CEF6809520C1184 9871BF3857E65F82EC6223EBD0A2649636DA655DE27D752B339471DAB3CA73C2 CC579CECA41A272F8776C7CE83E1A83845016AAB06CD2E2BB2B591060EE87C67 9420F472E5F4DFC5FF5DD1FFA10F7B124BD169694FE0A9519C202FACF0557D3B E629C7391C32C2375C1C1631D8CCA9BDEF796E79AC9C33A3156F6E724D72557C CDCC6171DFAD30026878E5B1194E01EE64690E44E14E0EC9E8592149805D9EFA 7338E8F51C72A71F44437F8CA8FDD14F5C85DF0CC2C422C63880CF4A8CEB61BF 13DF20168AB16A2EEE11AF455DA38E5D15290145C12A19148D105CF49247916F EB7F0E35703B0A9CFEA3BEAFA32B707C26C14D421B704C756CF30522EDB0B806 E637DA3BBA7073657C29EBA3DDC27FC2D2DD1B6857808FABA1BA882536F1527F AFB4599E9EAE28B6F940C6D61AB364586BE8FA8995EAD59B2F842C9C8711F9EF 242A993671130158D7285EC5CD29D515657F383D4E04931698974ABD630BE145 51CD530E8459228E88A3C4DCEEFA1F30CCABBA0D1725206EB799B4261F38E1B9 1ABEADC2C1DD87DBFC2610F2771EE60E9B5AC01009C507C133422F3D975A731A A323A09859B4309F106B75F6B4523CBE70BB7D25A323801206878F62508A26D6 81E13DBE18D8F38D45E34E5D825C5C1CDC699D07F8B95831FE652B11124BB359 DA755F3AE43B0651AA57BE441195819B4DE2893D75E66543C3FD112ED5AA525B 33CF1F861363FFEF7097450A472CD64C0BFBA494C223E2DD57CACA56F89FBB15 E9FE02ECAE25F85BFFFEA9A078F0B4967BE4540C616E5E143A61B65EE61090B4 A0D3E20666596BE41967B8A0089052D0A3A7972B6164A05DD68D3569DA248598 63455E381EB4F6B48E14C85986578C9E4A6FBC03B25AB570BE2153F897E215C7 B53391649AF8F9C74E36A9E39B9239F5326008414FF1A75C277720E666E8C4F8 025704B5406A7BE81285457C64D1088FEF8400595BD649C905336CA6B4E88CDE EE692640D2D18F29A6E8BE456D0F0C65B27DFA26F1791AC8B3AFF7358DF8C496 89490A959244F9CA55851356E340992EC54B7B03573DEEDDCD2CA98717B96554 229480684DD1362FB9329D97474636C174206F9CF81AC7F3DBA5C56B37B66355 C40937313B055B2E37270F79953F8A003F08EE6938D28FB920ED9F8B882FC85A 37F357403C7CA2E5FF9FDA0AE3AA578F5440E553CDEBBE8EE42287DD3496EFAB FC5045F970F45A47473FB536EEA9B3C8B3C1B9A62F384CDD6B8632D5B7459C2D 5C2BE577DD9AF2625B4E6CA55C8CB100BF2B7B4C77A56042A527D74AA204D57C 0E5E9F9C1735A7D729AEF4FC8D2B5C46B3D3B9C7087FFC8C55728BC6DB55E9C4 CA2785617FE7AC437A2322B82B4E1DA48037A533609CD0FEDB99F237C480B634 75D19656D2AEF325E0A9674461520B4911F1B01CFCFD6DDADA8A6FAED1ADC416 11B17869833EDBC3DFE6D45DFFED9F218856ECB6965BA1CE622A4E6DE869DB76 EB559CD77B98E61157AA66FCDED8F6A8410F08FA972A786B89C010E4B6FB70AB 20FDBB754D6CC07CA834EDDD482FE3170F12EEBF5F137AEA4BC33273794F93A3 AD2BB81D517AD15C690A645B3DC548343473D01ACB3D3A71765DDBD128C3C6BA 586BBA3CE146054EDC5BE7F3C5C77C65859ED922DF6F9082020511A1150B9598 89491113234368FD5D1605602CB99D3F899D72C34A221843A944A001CA97D245 52372D1CA1B9F5A7F7383F779695C9A9696147254DE3DD934436288E8C03AFDA 45F0251F8B2D46B722C70CE4108315C1BE1179585D0AE02DFED7CF7C8092A284 8C7352762B4C959A261842068D65FB234D2D9F3FCFAF8D0B3D7317581D58100A 85CC41D7A1177E2E52C98A0EC5E2DC23F03A8EF32F14DFD80512B4AFF6FCBAD6 90D9AB516596F635AAAA40D0277E7E760A2B6F11EB2E42260B15E0A48BCDA54F 32D40EB9634203095FFB445B2E1A7E532BA1BD5623DD280F2A723F5DF8F45FD5 8371E07961FFE09D69FBC38AC0A719F12CCDB7538DE4B0589AF0D856EC41D6A2 EA4370B49240FBC34F79EB9AB2F59C87DC23148A83840400696BD5235303257F F32FC3ED328F3925D37219541A74DD69BC6DAED885C2893A060F817E07C4FD55 BB0551D3D52B974BE3BABE00C33822D95132CD093113EF3122D10169B53459AE F187CB60EAAA5BB66A407893B2CC7F38571EAD139DA09EF716A444FC5340A742 8028C6623B5EF8ED061157A777B88B6113DF5958067D82777F7899773CAC49ED D98A201011AC65F36AB256345B608374C96C4AB4CAB58A065F5A427534F90CC0 0AC9E83C929B9C995055142CE25EEC6F6A8C5A502EA3F08457B68BB756DC5984 1B889B3E0132BAEFA7950890C609F501A1EB51E3E600F2C076F691086DDC5DD6 5AD2EF1595BAB361699B2F35DB457C9993C387AB4A8A06B5C9BDB6D31ED8AD30 8F80CD7B1157D5E5F667372C880B1EABE3C0B3248DFF0D9450CAF1069E2F2C83 4EEB33FFFCB4E39453A82F21FB94C2D83DB8161EC4CF4B52A6A9889DFD080BAA 4A2F1A170AD1C371689765E26A098DD334652E0E6969F9948FD3188572BF585E B9754548D0F7A4FE414A9AA3DB16D7356FA03EB21A9E133487D17C378D54BBF7 158743D8C8BCA35BB6590FBFA0793C87123C417631A1993EEF14ECFC82AC2EFE 54B175A515458FE747CE10E716F0CD10E7C8C0C5D367570BCE83DFCDB7D92BBE 27CDEED68003873A9370253CB685577F8E176F943794E97282B83A1E0D1EC6A4 C80ED1AFFDB604787C540F6D1B0A079496AA7A4757CC1A167CCC9B94F0AAA032 9C68981E1440E4D30EF4A37144A102B9F8EEC1ADA1EA6C7473003C4BD53477FC 189B1BB62E7238FC152F2E408C863AD8CF7726CAAC4BAAA1EC38EF37BC066E57 547C4387685F56B5B0BD05246B4CC9BD2D1C2D88298145D4F5495C50662A6F63 91F1FED0B2E91C7B0F3C186EE069188AAAF7C20C8531691C44B4E30686D78427 C9C881E16957E6D2B6741BC1E492619598A7283172BAD94A1D69D3121868A8C4 217E5BC982471AFD9906AAABECDD399A2DB7F0E84D3807437FAAB119B881747F B51E60D149E199D02AA9B4AF70D0DA2CEAA6BA859D68E3AC78849E136B541A82 E33545C21E6616E866A54071A593354EDF4F4361872DFAEE78534F3230CFF69F 464C2872D57D043CA9A92989730F90B0A410982F4EA911517E7DADE3799F5F51 BD5D4D8698D862A3DBA2B6EFA4BC925F5E98348E1885286A2787267FB4492A31 5C366719240E7BD87D0834576E33B7994A3E253C80F9853594DC044A9129C835 B79A7EC0BFA7D6016A3F90F0EBEB4E8A39434D22BCC0350BDC6034B9A18389DC 9A4F64E6B609ACACDD9989721009639211EA4F4C025834F75137E81DA94AA3B8 56EEF3F85E10A181B2EA6DF7102F685D4BD5090D9EEC1BAA5D558D97F0683182 56A7F5F734061DD3CF1DE06D9868A0AF531B216E93F358BD5A8700AB3F27A44A E171A86548DA60A078623BEAA861E1BE6705ED26B185A4A6FC90A0D7033FB9F7 171D3303611001741BF224CA84324A5D7E9F52EEDE7C54DDDB434C4CB4082CFD 585BAD74B566B1876E96F5D437C94669916D46B9E3E7247B6351D78BDB6610B6 D81B981C46E86FE01EB19384D36603F6E9D39454FC934E77C69E62D893A9F6C0 0924F4C69EFC10EE60FD680642CE3365CA4DACAE632E1C09321845AFD97885A8 F748E506AD9EEBD2A808451D078587B52ACA092C446003EC572854BE769F1518 D54D130D1B294EE11B67FDAFAA4501874E6E22B145FED86AA8BB646F2D9B7853 1C0A6882D7A745B022D5327BFE8FF8D7B02204661BE7B3A9C8F99183DF50FD35 E706800E14F321CF0F14D6FA7C39DD8EA7BAA644E64FBBF552B49F6F2997A9AA C75613B192D1FE40121C4D457FAEB4AAD749372CB2F5A71F7167451868E87568 A844EEA02482E25D29D529FB9FA2C3EC4557797E6462E3AD1DED42A11D8418D8 94CC99631EEB4BFBE77CCE57EA1AEF14FB7B38BDE6E7639E87DE6666E1EF8E61 AEEF6D93012DA6DD5812471AE1B13A1B899FC38750D56A9F7DC5A789719B6AAC 67DCDDE0EF462DF37AD445E0E559E7BE5C46B19A3167B4AC374B13952CA2F438 DE930EABC41ECD23BA25BB4B3EF9AD8204C676394CA1F3C658F1FF22D70B140D 761A3B5116054B1CF8F8AE20E72390B809FAE421D50091F87EF84A091E14DCD7 E6F2BC6B8C8EA11D723AB3073E1EE9CC77D08646CEC611757047DE98CE44B5A1 A70CD33DFCBD3571AB762CEF136B2BEE4B7C20D5F3A4ED6938EBBCE9DA7956E3 C5F6974FD1EEF7D4AA1013D2F3C4317BA808138A393B95478A506D503686D2C9 099988E79628AFB27B6DBBE6E0F132099ACAC7807851666B7E1CB1FE302B1772 E2CFEBB10F0C6BFC6E2001A8D9256801745BED69250DE17217291296512F9A3F 1486318C147266009ADD65C00A13AD40B4630E6E405B8A00D1F6CF07FC8D2154 07C0357B6134AC64E72B3B6D4E9F401A5EBF47D06877A30022204EF0CB252AD7 FB6B7B1EF50FEC4F2C2237177D44CBD3F873A7376F5BD9DD9B8EA051A5C33939 3016687411312AEB1AFFF70DB64CB98338EC9FED63D1A528A5981835F4AA6F01 5D5323836741070C32E23BF26A779B066FD8ECDE800AE838B88CDA6F29C5FA22 0565EAD93DE5BEC52DDA2B86C7B55BBECD11692FD246531B67399BFE7AC6DA53 3D21A005D211850BF75C926CA958D6B15974E25D877F721950E8F423AC4515B3 99EC87084349A2FE89E99C69D9C38C7727237513AFDB258B56124C0C42CCFD2E BB2053C7748361FC2B5A6A1D8E410D3C6797AD80BEE2DF594635BC1AECC70F4D 7AFA8FCC537689CB4DF32D70411C275CAE91CCCD9B186473CBA5916F86CC22C7 E7C0A55BFAB3D1D4F73D6CFBF39A31EFBE1BA77DA4E121D0D4A6061EEA2F84A2 2985E046AF20DC911CDB1C8C7D49BB62A4795CD08263954F6B130109F6C8F98C 9CE96F24D05EC06EF135C9AF867ED14C172712E31A457AE1A3CC54474A1BCC91 F5BE8767C93E535D26A209E6113CC2693ED1840F6C263633AC14F2D821CB0B34 093AEE19876601FB88FFE15D2AD3D04B52D6EFB3586B8B11F7EA5497C3AE6039 4516444EAB6966129A0BB99432FFD7E812F47BE0490F13997EFC4C3800B69ED4 162494C3925F8FB91E0932A454408D1569352DF87693A1711FA6B018041BBEC8 AE413E75122B0BB24F472D9DED10DAA474A87EE01BE2F5A1A5ABA141B316D99D 9F683101E518A44B6444F7D9DEF0BEEF435624804AF90469F930B97814C8ACEC 1D4143CDFF5A963E74FD3E7C82A4793BDED123D38C2FE0C363CB9DB951C6EAA1 B20401EA1F3D58E57AA32D112032BEE3DD7C7A232A7DB87D1C6950EA56514103 6CE2FAE155F08F4FB6F5977D1D2471B5DE31F660EAE4E6D640380CF232A51939 2013B9753FB128C576810563F42E8DD238810FD48D8B383DDC96475EAD0A4A74 C7BF2D979F481FC1225857675A4C56A13F6E66222B189CEE0732323D11E957F0 7B0127BC437C3EA21CF1C739AE427DA7C4FB32C384C2E0D37F16EBD774F5F77F 9A875B70111289AC36EA9451E738758D8F33414507F82FC1409564BB1ECD1249 F912179B893910BC7F1E1F2FA811D8A25C944C23B8E08AC331BA5766D2327309 3532378925E0C38DBD143A1718592FCF91C9B16F9B7B2A9087951715EFB96AE9 7082418D39CA8F9A5608EF35D77B8366C1F00EDBF0A3B274E336B50C9B3ABAE8 1E46396B29230232603E9F12545657EB988C23AB1214CB80E089A7094A659925 DF7E52E69E4370442D6C11472B5056E310573108BD49F414A5EA8F0841066C54 D45445B2B94807E1C8EF7BD4187FA464573CB9F61E169F136F0802E7AF59FA7E E0F9CF6995CB39E6769CD5ABD2F489707D2167A4D034E1ADEFD0647B4CB9996D 352A87714C35D9B1CE01D081BBD493A54EDF350DE38EC8BFD55227C280B0379F 5B524B371A6EEA92C5613767F0BD85F9147E1E00BAB65BE292FDB3D859C941C2 481BD8CF3CBAADD93DE69871B0734D226EE6C1957E59933AAE53931F1C4AC3A6 530E2F453552F702F06BEDA1DF8F12B2BE4C08E5E050EE1CF6C1AA12A165E0F3 DE31582DC72475469799911203A4F9373A61E74258FA64FF65FC32A01D221FDF 0CD2F97A248639B45283CD384B14B8991128E872EEF4C6C4DBF55E08F4BB25FA B65A1C313589B8A4B06FBD16E7FADE61DB5F290F74D9800DE1122337E93D43A9 03AA7E5D2E0E4464CBA84F27107DC88A2A6CABBA5619C13922B86E2659279BEA 39EF7DCB959813F0E5901D551F2B6BAE3FC55A30CE73489DE4752BE91DBDA99F 5BDBC8D7E0B554BFA5A828A534F47866389819B2FFD7DF4A7D8760E4B342CECA A5994E06CF58B9CC94A7F2C0ABE9323E5D0839903CE039983EAD41BD0F1C0053 C0F3A882C02636E40CE106566E64D537BEDB93B6B15B5EF676C9715EECBE0216 01F5C881780FF7947EE4F2C2B6D50168A5E3CB9B5755CB99B345F2EA0A6A71F2 D8269EB0DDB36BE9ADF4D01641E2347EE2B0E77E958BC6D02D7BC96DC3DFC54F 8D786A26E4762E629B85626F5C490122CD4CBC94FBC504279617FFC6F178B789 247F535F27B5815B72AC3C3AA83A967D216A815BF6C70A636055993A13522188 7720505BC11F5E0DAE97C63F4B86A1433E6C8D403D127DF5C417909BEC7BCCC3 898CEE28FB12305C8035F6B193BA84D233D4A333C01172A2729C63C4D882B19A 65D34FF5794C35211D50E895B526A77393D0EE715E0D8E9C9409685978EA91B5 E85455E986912DF195DB952CF09BD53A35615624E4A8C465A308085F89BCF8AD A9529925E4D527AB9490A44021BEE6D74D11AB2D2D8E442DE51614A521D1B77A 7F9A891E816D49B3722370C5FE8D517CD843F777F587269480214DF51A840CB0 1C6279F0AB7BFA65BB9C7DEB8602373C01BECF257C9BAB2DF9C0017635C5B5F4 E171A42B0CE8A679F5ACFE8513C3E485DA0DC40FC2F6F502400C6D750DEC81D5 D887FF8608A424DAD8071513A7CB81F85EF9D7BBCA0A4A4091826D755F2371D5 9D0DA8527417D799A3019275CF19E913377F76A0D930F0824752642FB60B5B02 6F6146FE1CF156D1011CA172912F3625EAFEB1674782F464E3DA8D6AE6F6272A 0D7FD830EB69842275FCA0DDC31263132914A744D9D7602BD2786054CA9DC4A8 EDF18E25082181D9A3961A55FB642F85C30DBC81D9719365861A93417D231AC4 66E8D2D4CCA3BC87844743A466C3290C594DD2D796226038FF9155FA8DC33810 7D787F95493B0E3305B4DEEB539C950DFCE75A1E969F39190D40AC7729EFD925 67B804B3FF532B4A0F436D451E963018407ED5CF5159A3747309D26C4F364A3C BA2F46ADF1D66F4C294F3D5D7BEF0392B9A979C3C35944C33C7E53A00FED5D7F 342E3949D214DDFD642CD4614121F9FBD4E501E85A0A6A472C97497BC158A6EB C55E3B37CBA84BDF4771ABB2128B0E18183E1639355799184DF867607C03403C 81E43716AF152C8DEC351B9C74AAF12C07B711A8E1C62A6FB3B220C8CE46C84F 622FB37EFA0148A2F5940B48325658AAB0E98F80E7DFF802D5A5E3169BC06470 E177315E5AFB5E7898B150CCFE235F351621A42A8607E89C6DDF890A375C9425 D57BAE6AD371DAB86A615754B4DECEE29E8E4825D991222CF082BA1AF8FA6C2B 6B95AE09D2AFEA9930A96144AD5F71B9E97D47656C80D8EC64FCFC088F51ADD7 AF62C2A030EBA3BD95CAAA78FE8779A8A5C0C007684357564DF76AFEDEA005B8 01E392FDA38824F33E0542DD56BFF29B006AEE99306176E8E3131710451275CF 66647316B49B737DD59FA6148DF31FF48EC092D76E3BDF7CF94D9E2653746DB7 65DC2CB9B06D3122A737FD484641DD3CDA928A9A7D0799C8A0E67B1B3F4A2E1F 7AF1023554924AF98EEF575606D71A2DE54CE5AE7DE7A9A2D97F01256DF425FE 94BBA906F17A5A84F1818E4A5737D4B5B0D28F434CB6523F42A0D11115A8E2D2 CE0CD5221440A5FB9423AC6DAA03DE3C905CE5032730DCBE605527B09E926592 F438C55D4D7E1698C38D298281C06059AB39637F4B4EE4B192DDDCC0E5B7B076 D698B682D88E12BC4E2D4FF3B4F23B56E799169792D2245971A98A821DD934D3 E173043B6732D22954D5CA04E5DBC61B83BEC4C8F1D9770FCA6109E88E071801 05B9359E27FF8F2276B59508D5A75327420C9989451E50480A8379CA897851C3 E0CAE1F0423A3AE33DF5C28AD51B8CF9A217A2AD2F9DAF776C9F9219C2CB7DCD EB9C5715B9A0DC1A27F98305CE2ACFC82F025D1FAA90622F29E81F2B0A1EB90F C8E2C1FF4F9E51156BBF15ED321C76FC6BAEF7E16E521244284E46FE81332577 368F8455F474256E91F38043EA53BB1A4D840EDF7297F87BE4F7F930D69D4A7E 6733F06038F7C106D379DC21A8D9151DAD7AD64F02DB35C3AE34CE3A85C27DBB 4D221F76AA19E4AF162CECAB897F2C4A7BB1B74D3FCDF3C0C89EA7749F0052A3 D0CC210BC0EB20394460756F81DB45D474CAD894CD4FAFAD5FAE8EF5923243A1 EB06538BC579F08F8774FCBCB4D2D98BD95F344819BD29B657D61E91949D0D31 78633A16FA951D2C499D21CE89F6944FE94E112696146CD30F5D2155D4F7A475 FF5041BF54C6A9C41076D98BF7471CFD6C09EF405C82154537117E2F8D34B7E2 909BF30205B753A5954DFF2EA2386CE769BCB4995B4444535A2B633E65D51ACE 8F7596D4D9D40B5FC3D7C4E93D92FC936A575A6FA9E3D4B0988244AD7DC69A68 29538B1574717442D4F87A2DCDCB53DA1BA056E8186A19704333416C2190B36C 3092D9698ECEFF149CF6696D42387F2BA026C6EB8609577212C8B4206D250C1F 817EC419E217313EAEE0957563317E606B36A25F7019A795B5E40791DE855CF7 5D4616957B0F90FC63D03A0D59F86750E0EE6A4E3452BE222190549547533705 46B5BA1AB933D4BCCA2E8FE486ABDDC0052BF132D99630426E3B9469E53D6AA8 30925D77E93CBBC8F15B544D8951B068B24C7D4FD2C4E6057B5F95D2B425C91E 7F541A7D3F0448CE58762C807FB61D884D576232EC4B144F91A1FD22D85B3304 025DD8F54DF0EEB9D0FEC771C1EAA5F52278EA5E162555B66BC19573799C9BB9 A274148E80D14C2B49BB50DA15733849F55CC7597B2BDCD22323F2F653B791B2 5EB754E8657C85362FA58A87185BCDAA6A9FB248DA7FE6A95190B912D90F6ED4 D445346F44F0938BE3EABAA48B6BC9F3B4E2D0CD5582D1796D51DAC07AD7C7EE C9E44CE76F017BB29D0594410EBD77CD58F07244B07CAD530A8181C171816540 4D9AFE5F60CC7B511213FC6055BB6AE6A11E9780C73AF19F1755F697D809548F D64C6997E387D82D1B6030E099FFF3D0CE5DE55A50805A83EF9F625CFA2C542A 7A14C60546CE4973215F49C9BF60EDCDFC08AE85BD57A71CB4CF22CFB41D8D1A 84EC04FD390AAE37474D074A5D381BC771BEC6AD59DFAD970C849F5345CEBE21 32370422BE2C89151F465E5FBC8448C6B264730D958B8407AD3A9F99373EABFA 838A015009AE8C9A438CC2AD5E18CF2ADD206591CBEF554D2B09E5965A48BB54 5594ED9A8CFE51D358290C9E8200B32D7368EC9521639B3B1D9BAB37F31E3D2C 79D3339185416F1D76F4E573A66B2B0DA402E1C3FB413E65E703BE641F4EDDCB 028ED7DF60330B0CD433E6E6BD38750F0BBB2926A7511668B414529F63944850 16FFDD9B7B4C8C9ABDCEB09E3D2AD32DBBF75167CB270CE57BB23363E0D6E106 BC8BF24B375E95B01F63E4DB10677E62053B5BB7A093E8C6F02F2544B7F736D8 4E2A12F2F802DC7175A95622BA5F294187BBFF8FF96AD79BC2CDC4EACCA0FB3C 20E8ED48E1035E0D4AC54FAEEF0E305649132F286646F8D39AB3615680810D39 A8B0DDC4FCBA149567B92A48F98B7EC1EB7262967CE017315496ACA3AE83241F 9027942B8DC51BDF1029A3AD71A256226A7AA6BC7DB602C71C5210A22E9F2308 050F0FC9C59B89345CDF50C281EEDE0E5346B72CE4CA84C458915C17C7ADE1C6 CBA76194A7F5E0DA232A7D183E91C6D48060BB1C2978CCA2BCAD8261A0A399F6 352D5276EF2F6C6F3EA6B8CE3A4870069C27DF4D73DC8DE3763E97F276886829 30C62EC1F83DDB25D48E5FE17976583583E49DDA0D2C77727060D189D26C5711 6BA108DA7FA90F89FF9C5AB0DA9142AD67DCB848252B578E92F0AB20ECAFBC4B E7BCBF537A07E17C11D53F6B376001CDD11CDFF1D9327BA5CF6D2B97AC3E1918 D27E04D43434A949BCF4CBEF77096E2B2ECB417A3026E4C4954E03FAAE7C0195 6C9A59132E1F181D1BF8E91972839E2C28D263F44404AADD9F6C02B4AE1E1184 BAB4D94935A8D183537A970A15617412DA40767C323F50C175DD2064E7291AC5 5625470E63278017D5DF5C7C30DFBADB5B053738253744696DA1400B154520DB E3AFF7A52E0E9971BBF79C8D3347B63EF2DE9B79AD7AB964486F84B2C1D3CB5E 608A2733C3DD192A5F4AAE620337727F7EC971E753F2DDD1351F8F9674B4D0C0 3171DC14CF11AFB524C9665654D6024B9E5FF60053232622ED213755263A071E 04E806E27700EB465017E83AD8980FA75AC30CE5598583EF9769C96A5D4E460E B366716B711863360C5EBC15E07793E8C3FDE485A5B879C7815B646A39628EA8 9E849D2160B29801D01D355A5FD18D3D27B5C3D536B87307C25B821882136449 7F3CFF16FC6B057F95CEE63DD6D2433EE822286D043DAFA6AAC2224EDD19D6CA C9699C76D627B686B5765820A6405A18407A3647B87FDD2077E0FA5119CAB973 333F515584F3CFCB158D4BFF887405E0E4C2D6DC1A7FA79E75143022AC945ADB C48566779E03C9927358FB3772999456470D2D845289A18F647AF244ED5648D1 9ED095934C521083ADE4BF6E8DD2C63842F6F75B2BEBEBDE8D48AB4EE58F65C5 36C9D2CDB7191BD6151A989B3DE3614B558E0CB69FC5B15ADA99189CF5A34CA2 3FDB1F25073DD10A36C8C96E720CED32629ECFE76201B40407019A2817EF57A3 86EB6DC798FF7A2EDD237831183D868E5C8798FFF51E97CA042E0521B954A64B 3A7FCDE7207FBC00B839E3DE532E61DF46A9FC21E34EB7946DB7F5F4872ECCE9 2F712EFC314E8405D352320B5AC1707AE91067B07C9E01D34C3E4C3E01F18C84 E3A41C74E411E0EED88EAA173ED9000B2986C49854C71933F73062CDFF70BB05 3F282A558DA81A4243F373DFC56C853E7BB5992B238910BF7A46D23B3CD0240D 5A5DDF1074BF7CC9FD024A3F1A3A9D151148 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR8 %!PS-AdobeFont-1.0: CMR8 003.002 %%Title: CMR8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup /UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR8 def /FontBBox {-36 -250 1070 750 }readonly def /UniqueID 5000791 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR8.) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 46 /period put dup 47 /slash put dup 58 /colon put dup 66 /B put dup 71 /G put dup 78 /N put dup 85 /U put dup 97 /a put dup 98 /b put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B 8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF 27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF 18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB 7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D 25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB 16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C 74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE 37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D 7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD 3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B 49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B 29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F 2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E 293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D 136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB 46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF 2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B 0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF 6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C 72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE 6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B 70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA 09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E 36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B 9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A 893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE 0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F 3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF 4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E 015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A 167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F 9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D 947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B 6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE 276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF 809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF 76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF 94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E 1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C 06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC 6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F 2AED1652A132D66117071CADB8603969B3A2F97270CF2AA8EC2AB890662FDBD5 00EDD53F16FD0CE199660202373E2EA28D29245A4AFD3A63695F6178406A7234 AB0C0FB1B19CB408E047BF014BBEAF4C9C19445C7819748F082C19E6E355EFDA BF1C2DC348AC0AE6777F679E2F62A0A3EB19B7F08114AE0E56A3D310D6958AA2 348E1D304BA8C4389E525553A8791632EAE32B6E8D2193932B44D230FA17EDC5 7D407CB83D2501B0D2C9E86FD23E21F26DBAE2550DD4ACA051EA0A0030107676 3643176BAFB7DF0A157151F7625E63296E325E2C3E74BDEA10C3DA37A73F9972 4821E1E756D3DE2C1FB121371432AEADF3328894170304038253421DEDED8B45 D4B0DBF3B4F29F053C44053E14ED09E3E7A0FF377954754A34A9A04FE68A437B 8306B8463247F1E670BA928FF7D401437FAA45A7875DE9FBE63BEFFEC722039B 0EFA4F3DBBA7D50C464E3F297A0F2C1AC23880383DD1EAE1BED5DC11128649DF AB8C8D394E7EEEEA3CD2038DC582527BE93A66AF5795E3F8FB790158EAE26FF0 3905C00431377233DEA8DBB68F708D35BBF5A20C098A4D3DDA725C3AA27301A5 BC9333AD666132BAC8A6A251241FD3677E1333463502EE90EE31D607894A595C D0D555AE3828D7387351F1326287865CE1DC161ECB090A42010CFEBA597F27DE 85ECDC29DBCCB6D9498DBC73B1874401C91398605EF946BA02A0EFF47281D239 931EBB1E2AC5E7AEE9E235D01F773C8DFDEE827915C0A7C78295C0E53AB8D6CD 7678D9086F8CE100C702A4D8FC771ED7793A8EF69CF66B13D589FCF9E02CFA54 F9C569B164688730F542F14B014079C9B68AD1DBFEEB9EA6BBFF5CB9DAFC2A87 A5B08C010646D92F5116AC4BC262CEBCB0A08C3ED40D6EFA4A697DFD0007B667 F02C6FD553B56E95D9C52EF868950BAC3E0DAB5C0DE8BA4AF0BC7B69DBFED933 EA701162729E09120F351319C22393CF53CC916FD476B370AD98EB632F8CCD8F F7B0BC3E66ED6CC5BA8135CA1ED3F8EAD50E0169EC0A7EDCD6E7F2199ABBA05A 6F793462900132DCD0C1B63BB81858B1B39C4D0B37080F08DCA9BD0961DABEB3 8273EF5480FB323E96FE4B13422D8E57345DF144731D1FC80B5C4E60FFBE35EA 15AC0A869FDC078B0209A473DAA5B9779044A3D44BB878F8C004C101EEB61F82 E8E7E282D0AEA5A83E36BF3EFB005F5E348BC8D3A83BAB7F5CFBA2D000354A8E 85915A99C8DD07D7E106B0F6EA0BF3AF6543A9E40E5AD4F03CD60F36E3D6EB6C 1096F8C099CADEE010B37B86D4BB8BBFA37934F5F845678CDCA1A2D342275FBB C56D860DE672084C79448151C40E5CDFF6C042DC289C70CE2F34005A9C8639B7 DDEA4B4E26943EAE482BC25EDB14FD0CC38E001A66ED902EB8D3E02A0BC15DF1 D77ED93CD0D628A6823E79819A6AFE696782CC16EC2A69605D2AEB2388ECCBF3 CB2804DDB4C397D1255E8F495498E0F2C787FD982F3376CE8F4B058F3D9BA9E2 B49BCC2AE6D7F164FABFCF223A718077AEB17DBCE976E2150E2AB2D9959CFA1B C49A4564E4A5DF65DC59D4DC90258B12B4D97D4D2795D695A857612F123D8B2E FD8B9155C327AA551419BDE526C60DFEB2D0E4D4DB0040363FD72D753D977D85 52CF36A61B78509A385242684FD6003E1CE09A78759DB20082C20845A79E9EE8 7B7C077DE8A8E872903A52ADE3DB462BC727F7B99CCE26E4AE7765457D8D5B1F C02DFF440EC502908EC4853F7290AC3A3AB132D9F5C66027E28B7001B9206A31 573FC6EA30CF3A73C4906695865E278680CE2E5A709A4BFD17013745A9C87189 626EBCB114738B1E1E68099609247953AC47F69D0D19AED1E1CA1EAE5A6134CE A710D1A846FE0DB756DC383B10214F468D9380DB0324402195D25A13B0B4CC40 55807E2E37B5B441FC4E03AA7BF62321D81A1469A39CEFE7EC45A7BC55497D06 5F6CA304B08E0541E2A6A6A1035035574C6A556BFAA40596A18C36800DF2FE60 9B0FAA00AA6251774A4C6072604ABC6C90A3CD9FB43448FA1D25F01DF6240F1A 1D03408F123110E9D28D022B639AE54025C717B23DF825794EB40044541EFF86 7C5EDA4697B7B06D299F35010A0BA6E62C53B3B018C76301FDA4882B9B65241B 1BA291CBB06654D4BA327B75B3F2FD85B528550FD73F6D51B133B5E456C0481D F2399E05BCAC07D8DCBA3698FCF47C618E32B215114AF40B76EEC3D4CD9121F9 79892418E35AB25A99E99527A9BD5F4513DB8FD3F35927EB74DB00FE2EE816E4 A1EB1D61512926EEDC70A5F4696FB5336F730B2CD14979F295B7077388003D21 E719ACF37EE84B5DF15491748CA805858CD3D9163CBC69D61FDE66448BCAA78A E443AF6A8915EDE7B566D9B4B1D03BB91FA6071378BDBBDD8543DAD5A8739FA5 DEF049E14C236AAFE5F7DFCA79D0E8BBAD9D65C502763EBC8445B6943D122520 C64F184B979140A16BEF4E7C2D3E974D02DFA759BB3CE97C83E306D2236C5530 5946FA1607B41B3AEEA576F2BB2D11C8B5454301022FD9D852C9F689F81AF443 53C0A9FF6D7DFFF3995A35033C7E6B3B1F6FF0C61689309C965D8876927A6666 123D1A51BFC8E410012A1BC7063605B718FD146CB78C28ECE39185C325D2F51C E63E33AB5BF68C132997AA8812F84D8566C58CD0EF15DC65F00EA445684F4A27 7165F5235E6C698E80C41D6C461E402E2A57B7CE75C0FB28912E90260FC69A6E 97D9966B7B1CE746DF9748A1DB712338CD8F84B6BF6877AAC81166FCDD4602CD D6730275D4E90DE2993B589E4D1CC98DE4C31E4061BBB7E476E8D119234692F0 287A9C24670B73313ABEEA32C9A78E63938D4FFEBF2191602B9D8BD0D809BC8F 8C89E25F81E7E0848D7B501A23A1D8E5BE25043E5A142AA43BA34605C065716F 3F9DC6980216CF5F7DAA4418104CB763CA223474DF978BCBFE847BA623A89E30 D0DAC57787D6AC25E6BBAF2B556B84742B310EF7D8BC54F7A5204CFAFDB002B1 223C31B20C7B6A27666CD54DA24EA66A837E4234912EDBE8A44F4C8961097DC2 DF2206FD259808F13353462795AD684D77C04B441774BB8EBCEAA788F2A409C8 C0A8899429FF3173E93334EF35E9B1F8104A50ECCAB2EA84365C5AA5ED9DA6A9 D4B6A91038040A64A2E17F9EA84415AF5ED34245E0CB2B5721975FB554006CAF FAF5D2776462B9D3A2C16D4B4E0CD538D218D3BD3EF56556F36AF30554B6B274 7794AF70D762D61D4485B6994BE6B14C6CBBC9FB9FEC882894D0B6FB8BDAC458 46E295AF5EAA397A7BB4C82A4FA1C0D4A358D3CE92E859B9750175F7754DA3B3 9A43A47618FEA0CB9F50D2C7B2488B8C86D7096AC66FE695B4A56CEFF53F13AC 21C307EB9322EBA1D224D50E1E2627A6C305DEA887D8A21E426F6C621C46DB48 04FFE48004D055288BB3E17E82C72F6055B02500CE2850591619DB9E8C1A26C0 D9565C5CFBE3BBFD23A986B26D65F25BABD3A62A573808D0EE71D29DEE477465 B93DDD9A3524B2C948F5454168386232BEF92342860EAE765D0579CFA3731E43 BF511227BDCC5EA088A25E8075B8B8D146DFBD9625097260CB54C640DCDD7C5A 2447C7B966DE6F344E597B63FA9C6C83212EF3796D6C4B6CED93950A6E94ACE0 FC4B967F7821956BAFDEDDF9F0078DBF987E8D805C056498C567624E1DE30A5D A681E2142F855B27034A522BAB4781899644F25453C865CA6EAB0B3097DA1F07 88D8CDD0A0C75AD4926686EC26DAF714C8D0ACAC012ACF887F560374ACA9E064 A9E6E8602B0D2C1E4F78F07D67C1CF1881A2A06305D55F317079E34F3091D947 E98F87A6C9FA54A6751CE5EF6987481F3E0BF1ED61476341B00E24873768DC12 DC64C6F6C78DA37A68AE7717D31457D3479ADD121254E84859460453955D5911 77CD8C2C378EA4EF073494FDBD9839A6D66C7DB29985A7BA95717F9F6D21A49E 526C9F28B45CC91294D688D58B6F2A38AB86E711286691CC853AC6ED2222DFFD DAFBE121034E02FDF83AA9C94ECA35D8524DBEC4120C4E370D6F15CD55AFFD85 A107826FCF48661DF261BFC236ECBF01CEB65AF075576EED65C796DF44F74D30 DD734B54E9EA9B0ADAB79E6A1EF000A101E8D303C260BF7E1B676EAC801FD094 62E1692918B8BD55F082563037547BADB2B7FE6421F8A6E3928DB9813AC63E0D F5534A1B99A4B516FAEC4201EB41F0C5E86E5908B690C3A74E59B35F028A42B8 66F4C7596B3D38C5B0D05B6D696B92DA3098B3CD839EC6A1C8B350F0B46D6F47 61DE1334BD25589EBB86EAFBB18BB78F7C7DA35DDDB58910B29140AFA1A5E355 C3305E5C0D55A1F3AD72CDC11A1D536D513CDA0A234B3116883332949D854025 28277C1D8C9CE2DBF24C6F569B3FED18E866D2FC9C78F5106DE4FAA360937AD2 DF2899BA51FF0F98EBA85E387381AA3B764D963781AE79D8D9A538F7A1234D78 0E8896B09760F490410C87B7AF4678377DAFEE5C5D606013F2932F3B49ECFFCB 21F9F81B1F2AEF501C084657B602DC46DE5B616C30F88FACE9E86329455D4B55 C72E9FB1194A1841E490A418DC6BAC5D59ADF9375BA7D1E3B82026135986F261 89F7D2968551ECB2B96E4616E60733959EA2BD9C069C5732F9BE7C8BDD333743 803D9A6E3EA0D3D4B54E6073BA6A300D56DFE944C7BE825C9AEAAC8795D1F9D4 76ACA9AE4DF00F86FCCA06B77BEB71998EB5ABCDC3C25D8917787C95F652941A C803A4555DD22994BDAFC949F3BE0AE1BEEBF80F70276935CF19FB703827060D 299C65F4338C9866EDF9B2ACB9D80D9AE05ED4A52B77B6030157C95D4541271F E33C6A509ED1351B846C541860EDA81FA5B281D8BF3F86065065BF2961EE0843 DCEC63305EE5403A14C30C489A2FD6294D8B80AA7E85B20F012EE0E5FDC4E733 D61978F8FCF81B325B2A46F81A6FD85E8142E173A410410F0DB0EC286A84CC47 98DD67D9A0AF2D8103EB7D2CFA268193C128BE50AC27B1B386BF230ED7D55AE6 FBD85025AE79E987007B94AD8B136750A8A8E2E941E6F343F4721CF72786E75F 3A332058FEF484CC42E173CCECBD35B112AE21E0B56084884432C7F14CB0E195 870A7490A4DEAD69632B95796DBF4BFA9535D92ED385C2DB4FD68BD020B1106D 412A1B0182694F077D4832FF70334F9F548411E4824A27C58B604B4D20DA8584 E0EAB08B4ABE6F683A5537FCC2578AECCC1CF8DA47CF97D4BBA0923441874244 D4CCCB517A69B0CD050DF5855C90BBC4ACE948509E3712849D3B8F16025D4856 A3B7C00B33394E0A80D6CD031282D8B2F71FA5591A68CCE833EAD04AAA22879A 57FF034F8F426882AD472DDA4F4A3D82D0EE4A4AB6AE570345D926A1CDB3BD26 D344F35C25D22F7DFE73EA9A597EE5539AED2F7CF93C9D256FF1BD966B968634 6D219490EE014DB6F1843B76CE5C452411D92A7C1AC973F55817866377736F93 C2636C7694899DF5F875547CF957A1C1ED6BDAB937BAA78B30533314D951415B FA5F5958AD5E0C8146B860B8E4D1C347D1EB1BA47A83B26DC8201E33FED61050 298013F278CB6218F3CDB4B3DB2DEB705E25DBD293D78C8DB63155D13E20CB37 596F6C07E8A120BC089CF69401061A7FC580B9D3F392EAA7560084F7F1E40C65 33BA87F72695CB9C64F038C15AD73B8A20B829205853147D683B3B5D160FAB00 0E3F3887ECDE254D8469165E802341FEC6E047F8BAFCFB0719C8FABCC0B91D37 F42E03FC3571E82591EC0214BDE140AFD7A72C6D09561C77F3D3D1AF845BAEA7 ABD7663B06085A1CD346B2BB2277B6CEE20873ADDD213FF4EFF7C6ECB50B6123 E5EE9A4C27C9E97B90CAAD1D708023F42A1C56DE2ABA207A5782227E16C4347F 069B91374827C177570E7A6A2D28B03508C8CF69E6AE36D014338AC7B4ED8736 EB12A8327A6260C2F55B16CC28DB743BC92B2EC3DD60CAD4A584DBEE052EEAC5 15D8EB57A908E93F39CCCFA5110FE79DD72C3313AB1015F89B4354ADBA44B202 F6DC238ECB32D8AA6697AC471870B2B11CA8135039C2A7727E1AFDEDC47C2653 D37E664D9C94C36A9A10F8EC0444AE49D30AA0DBC8399E79A803278B45930BB2 0ACB7F2D57C1C0D15D95C687B7878EB1BB1303DA585420AB8D5C8D7E267F5B59 B7C3F0559E4ACE8492541F43DDA05DCCA164D85BAAB0B04BAC93D496C3B2FE72 4752408FA7B9CC65406D5E53AC37FDFA818B8FC277244142380311FFFCB205C6 2DCFAB012BC72063D84E601EBB94A9A528AE3B47FAF6B5932E4FBF431F25C82B F5EDAA55AF3EBD9A175D0FC2680754414A78D68DB12E037D07993590C3ECA58E C22FE0007484431AE18816FFF594BE52555A630ED9610F590E29A1FEC9365B10 D1E977FF85A8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR6 %!PS-AdobeFont-1.0: CMR6 003.002 %%Title: CMR6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup /UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR6 def /FontBBox {-20 -250 1193 750 }readonly def /UniqueID 5000789 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR6.) readonly def /FullName (CMR6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656 1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D 2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9 EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703 CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8 9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1 1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D 2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A 32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584 5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A 3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF 6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68 2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268 464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB 87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32 F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA 4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E 7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65 39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03 77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96 8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415 A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4 4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109 3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89 A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098 AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F 269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E 2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6 C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8 AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC 17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E 2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E 117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80 DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B 9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7 2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC 26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F 4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D 60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2 01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E 235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0 9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D 28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4 85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1 BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A 237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28 7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E 9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845 B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442 FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600 7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120 10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C 6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77 B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4 9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3 8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73 5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9 3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF 6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD 5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A 3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8 97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9 9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955 EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51 8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369 1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6 4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76 68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB 8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A 33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3 548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3 133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5 B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076 F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2 3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5 C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE 0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5 45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8 0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6 EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64 FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5 8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415 02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B 7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8 AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA 57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706 5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28 AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21 CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134 BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB 5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85 69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85 34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971 24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196 4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E 7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB 080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD 71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154 3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA 281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52 A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D 451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481 48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83 F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949 B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391 126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01 1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C 770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4 283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45 06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532 8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524 8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3 984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A 5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190 1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E 026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6 DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB 1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D 2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251 427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6 26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72 6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445 F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD 054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A 60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341 F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74 9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5 F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD 436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35 323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B 2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C 6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91 069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02 CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D 2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12 A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00 1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6 9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392 360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3 911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71 8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB 0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636 44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5 0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A 5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097 41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE 4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE 3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506 85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884 9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02 8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7 422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1 AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709 6E70C6C7CA3775C382F911F6DF3D26A9F9F39C6A49A61FB0FDFD443ADEB01F74 1254040BC520FE9C85FDDA97E17CACFC504DB28E16BF4E50174DC918B0EAEC7D D87899F951DCFD06A4E5F5A24FAF1F5AA8706A76545FD0D88F3C8E8DDF477440 DBC9396113513CFCC3853C7758A936A089DB60888EF0ED170DD9A9DDE9F14BCB 7CE05C95850315F323FABDCB1BCEE1C6FE61A02975309083DAE659FF4CCC84AF A6091C64B782D173CEE55362C24993238BD7B04277999D66ED94A1C4F38CB897 B4DB3A98C63C13DF8C2CAA974CE91FCC4D14C4D0708482505E90F21196EE67E3 DC18AA9EDC1C49F513DB9222691CC88EE4854F29D8744E5E37AEEDC36C0CE33C D666B5AC9E4E3D3075BCA7DB46980A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBXTI10 %!PS-AdobeFont-1.0: CMBXTI10 003.002 %%Title: CMBXTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBXTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBXTI10 known{/CMBXTI10 findfont dup/UniqueID known{dup /UniqueID get 5000771 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBXTI10 def /FontBBox {-29 -250 1274 754 }readonly def /UniqueID 5000771 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBXTI10.) readonly def /FullName (CMBXTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 46 /period put dup 97 /a put dup 101 /e put dup 103 /g put dup 104 /h put dup 105 /i put dup 109 /m put dup 110 /n put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA61972029CF9B4E1F6A FFF97E53D6378FFF9043566D67519B5C031015C0D52A7B292D219A2BEE49FA56 820ED09A28447A71C5CC595AB286EE693EC741AEABDAB0688F7B46D9D584CB99 DEB048F0C0723F0D7FB57C896218D2AA0AA4DE241ABD632E25F0B47243CB7DA2 EE53CCAF1682D9B580006432DD7D53D06E90B3457FDBE18179DE415DACAF00EB 4E01CB49CE25429F8BD45069477DE90EDC87EAC15285D321569F8C19AB5100B1 DF31636EF29DDEB4BFA2AD85B83CC7112220D70E69D5A39BC3558F067A93C6D8 7A78976F7B93A589F0271A034D1A8BBBF082841719E2901720E89568E9376AEF 8D41ABE4BAF9E79809F5BCACF29858F8675E37804758D58F8909027A00CCCC32 5441C72BCB031D09077BA9F778BDF52F172C2EE62F0B98EF852ACE037C6240B2 671C0F01B7D4A9276A8F6DE3B6BFC2C34DC309E5888E249E398CD60549DDB61E 7E36890B1E37E26126485E49114B7CB938E2733D9A14288C3A763D326D7D9183 46B970D455050FB97612BDB2EB29E7D71C909B10CA1D479176652712C112376B 085E9F99C9A488C8876954EFB7520CF97D08AD84341FB55764879C5CDF8EEFF7 DD31DB564110A07119E52453B778531FE181D09D1A9799D7AF4773AAF77EFF2C 2091194E301CD88C97CCA29AAED2CD68ACCD8CCE44B9F24889A83048B7208BAA 84E136C58F9DAAF73815C6025DB64C45014BC472358DC014D243D189ECB1EEB3 267345D1FF4B6A01246CCF5FA90BB355E3734A7C774DE68C01B5F356D645C4E0 1D0B7734E05EA28AC6A9BB2123EF3C6E27F52982A7612A352213C6AE3E80A819 2304A70DB8A2441DC5321ACE962C6480AF736920B64A2B433DCC3519EC8B577A 30B0819700A2281212CAC280A0DCC50E78295B98B2DF97A78BDA1879E6B70C10 7BD15FE29C4EB1D5A33037F0AC9BF8CC1FE88C52CD114EB33F1C6F8ED88EF98F DD0C3913DFB36147F581C91CE83CD73A0D012F3D0FFB162C0F4597ADC8D93911 0DC6D68F9FE702FD0EAC5039D462756551C379C5F4DBFE05AD2D1BE0EB389AE2 391E461DC4455E0D3C3E46F3FE9BEF488730D71ACAA63BEE72367C52C4F84766 C24E13D1E63791B4838161AEF8D0134145BBFA4D848CFFF1DED6814A7215F4F3 3E2D654C27F3279DBB22A568B7BD1D5A9D75C7778D36C36BDBE32C8FAE4A9209 20AF8B705A77CFF4AA9ECCF6011F0A359556ADBEBDAF5BB706FE6FF4A745D841 102279B66CE0C842DF8C2673ADAE354B2811C48DB05994388AE4053F4651A884 48DBEBF20FD05DB617F8FECB667B748BB5741D6EB62DDDD0FC58537EAAD6FC22 A11ED24D34827C3446C8FB81E4A0E904206A1053AA9E718B0405C6A7B8B893E9 30E7A31B9AF8A56B5EFE72FB5AEEA79D56E19E037BB4ABCEE079ADB53CA546CF D98F7B38973CE3A6DFB315E87DD1E60C34344656D76C16E1DDA43C2ED276458B 11D7F4CF3692525C0D8B6307A2993F400760275A8648A0048E0C406279D48045 D77A92E99F9CB5C05E8202416EB6FF308C4C979895211450BCA82B19B33E7240 CEC18204C09AB3D7F8025C0C909BC03A1851287ABDB975A32C3FD8A1C99DD90D 4B1CE2F5DDCF140D4D5A19F33241D27E8EBEF4ED569AAC255E47813F31B30109 7075766D5BC1731B082531F3D132A937717EF67F496813139E8E263C088F62D3 DE0EA4ADAF3C088F562B0BACDC184DA3BD0D5A8A4B8EB487D0B6F1B74A969942 91CE8CC7A33670BBDB3F1E1D791F7F1D3A3F3183F2410DEF99EB932CA80FD931 C62D09A0ECF271B5BA043C9A214CE631CF8239ED0640BD134737A3E31B851DBA 912B507F72B80DD9CDD23A697F91D66E59346FA3A75726C386827D910714C989 5464B041E69F4B87290BAD381600AE0A976148CBEC8DADBFDF0CBD7148C3AAA1 7AE2EB15686E1AF68B4C90130F795E86C9AB88556E429EC943147DF363029B81 4C637900FBA19DD98792F4CC9888AEFBF9F7765B817ABE83494CA3FBDC79CA03 86CB628F75612209DE9CA4D585565E9509D5DDB8C00A229F07918B062265AB29 176657CBBF2382A219E573667B14687647DAA7E9203FEB4CC94B10B57F4B1143 C4962B6A888D62093A1D49E2C7D65C29C500B61E810BFB94DC2DDBCCD8B6C61A 911C2643F55E9E2101B1DC7D7176F7743492AE7CB84D460E8C00E91E5486117B D9ABA9E16D1606705A0F698EDED5AA877A2CE7EEF25ED1D97EB348115CE5BF26 8A48BE961CDFC6F543BC89DAF665A681908ECD8CAD545D0A72C9C184CE67F6BD 7B51399925DE379BC59E9155A30C67D73D01BCBB1886F8276AAE58B2422DEBA8 266CADC83429DAF4F80CB25E0BF455CD7863CFFEA9E318FD043908D427CC07DD 683F6D977680E9B4F6333D4BE7E729F4D15C07C917862B47F0DB2E31500ED372 A556A8B617FADDA12A2F62DA2D9AB46479FFBE4FA42D9B8D597CCF4E6D04B418 8A9B523F4678DB40E7F325F81C1EB345D71849E57B059653CAAC7D9D56CB2E3D D4F532A2D674BDBDE970D9211A3EEEB005128BBB5E0C313B42554F058EA1D180 BFBC9521FADB7DE03EAFE314CDA873C3532CDDB83EB0A6A7454EE85A4C36AF2E 895BE8309FEA168B73C6AEB2D454B234F1E2EB554C7406B79A859F6B303BE795 B6B4DBF104E75838F3EFBCF85E0B865779B016AC38272F8BBACDEB13164EB282 B59BFEB1E3392885916FEEF86A8A975DB9BFFF17B9E2173CD18264BB14CF5633 FD4BA46D7692CF7CEAB7EAE80385566061315F8DB8A7F495E68D4008B09BAF99 DF4275727F08C5FC58BE9A084B267D0BA62A907F22C466A3A79CEA6C207177AE B1254F0810E6092DE5DB1BD3F238EF705DD4E806E0EB1988F2AC92EFB8843064 3CC3CA506D9AAA0CA559AE7157603D34BEC19D6019F0566974BB835DA172FE37 C15C0367C8FC164184648BAB678D37871F7F610EDAFE3F49289C6320F9CC113D 44775EDE28FEF4E14EB5B426C06058FD32AD12B42A2FFA0D9CF0C7BDFB6D7C4D 72F4FDB716D7C8E7DE84F614487ADF4DF5F304370043B25E07445F8C65109708 EB771F62E01350B7C9B659D05305CC3E4D94378BFADFD8D94E5704FEB2BAF58A 5B874C7EBCED806F068E93D4DB888B325CE246D02D1220ABF55CE646DFB45F07 CB8488F229A5562968B079C2CE2067B22B98904D977E3EAA82A6BD44135A6F07 36E3252FDCE218EB5DB8773E2DAFFD1DAD53671EB3D83A275D011BF5D501A22D 407AE09257CD21297B617E0443FBDAA297D37F66AC436DB78B410E79A002233A 0D7DA619CCA9DA4714325A51CB0BBE9EB6CEA352BB1A0A2FF83610B2A17E1948 0E9285E1570CFCB8EC7E1D691A72611D336DE5C6626A1D1D2DF363A1D781DBE6 1235F1D1805CC2A8C670005F84FD468167F8640B12929CF347538B94EB37DA39 904D4763D93E757AE2B4C775D98E23BA983E35992A292A04976544EC462CA656 E5EC37EE8EE46BF1C3B0B4C912DF05AE1535CC654000B06BCDC95D9C6B5F36F8 FD8A0EB31A02C2B863DEBF8FEDBC57D5F93D2604321FA66070D14FED60441E09 999B90A5FB715347583A35314381554031BCE4E6E73AD3FCBB61ED0D4C015863 119C1D945E981AF3F38C81EB3A350A70A63EB06119965C90D7EBA669359FCBDF A87C4DB920F8F3D99C73A0DF7E10D3C410696D679CBFAE831E3E99FEF6C038F6 69C58E1EB6F60FF587F5EC561629EF429734CB886AF914AC3E6BC04F21D73F18 4CA12D7E033B301C181D15101A986BB95132DABEE082A617520CF95EC9069499 A02F073D7DBE41726B51FC05A9348953495B4CDE8D0A8F8C04D07ABEB3BA0076 3A80F2E3B5804947E690DB3A7B3BC6C48A67F5D45F5C658FECFF28790B709385 D24D02FC3B0C9F9AB04E168BAC78F0837D9BD402C1ABFA84148FD815240108CD 511E50FB8E64F20058EE54E4ED45181AD9BB777DEE3303C4991EF8EC56B6C278 CE63F6C2FF92308A25B9AFDB4585A808AB3F03D8A15A20FFE399DEE429C959F8 B3DFDF81433C41CEAC874479A2C51F9FAEAAD5B7B23230B99523FB256896A85A 8C48C057A70DE745F753B4183AAA6F84B4ACAB090F33CC2C31186D1D8A0218A7 4E1987D86B9C3602BA294CD29FEECE4187523CF511FD075692B1C080A5A22281 BAAA4EA701D7573D083E2F6EDEA3D49FEAFF2CBF989703E83828E6C7E324558A FB73E3388F0B0E6A97EDED5A9553DD33DBBBBAF2174A562AE2B8A4B6E7D13E90 FF9B7D650231CBF9EE48DBDB00AEE2E0FEBF8D6778F19CBCB8766A0ACC9BCE26 59771BFA97CE7BA811A3A6C8CBEE899839E525DA2ECDF66CD99FCED902AA102D 92CD9A279453BA74EF8C0CF32C11A412A05CFA2C187833F885F359DCEA34EE24 E90F7F107A23D9EE269C15A647916F56C32543AD5F81D90C84B8305E5BFEF1F3 B356CEEB5BAC54AA00DC9C6F03B4AFCF7AA4D31964377525A661FBB743D39964 47AFBF76C8FA874BCBB374B02C538AC626004EC8E1E9030D60C4A097CDAFC143 732FB7431008CF28ABEC4529F4689720D4EF580676CA855FFEDDC66B7C1DF07D B89EE98C0DB6FAA5551ADE4D674B51E4E3FA4B24A3DB5196E01C6CA1DF5D669A 3C0FC57DC1F576C2BA14D5DE284614AF3276E3A1159CBF8D40426A60E8C5DD42 6F1307222DAA8AA78BEE55C27E26013120FB5471CB33CA4FB642B1C386018EE3 D4424CA411F49CD569CDACB51AB9BB5E66E1E13ED5F8BE0E912BC13C7B23E10C 042C33DA19656264D7473B4E0C3DABE14F9F94450D1113C88EEC18CFEE640A6D 9A40DA9CCED6EC5E2E9F1B357DA635C3A2C5A23874E496B868FD0260D30F1780 878A900B90637A1237C63D83335A3FD4A664321C048BF2273F9C4AE3161E1F06 E6EA5F3F15CFED43C622E0D7E245EDFB866398DFF2EC994674767B7F3DD853CA 356A3607C7BF8F9C6889EB9942ABE469EF88368742FB5C41D06125D2042EEA41 4B344AC718FEAEB308302F5607C06852A30CF778D236EC90CA10934C629FD598 90176264DBF9C1AEB33A6028B9EF09B06BCB182DA58ECCAA4E2E1FBB13868C98 CEB61223E9658EBF003AC67493587A156EFBE73EC88CCDD55C9C10CDFC52F7A7 B274D631DBB5D629F41AC8760741953A6B90C6E9E4D2C79702C59EECDC65D894 8317D67808CFBD81953AD32837A42EBBE48F77D6B387E272855E54ACD32D3377 E19724B3BB370A71C633C3A41A0523FC219EFD5310EB3CB5FC93F0F9E6BFB115 17E2B901016CE8DD44BFA8590EDEA88F5229FFDB83E401034C826F038D58C19E 54704A4E2E36B7738FC6F80DF4D82A5285853C49F9689363392536C3BA25C00B 7885E7DC3951E9B5D22414C9E9A264954CCCFAF8BCE70CFFD4F726263EBEBB70 D52A58B3D6BD029F555A630D687C7E7103C8B8F2B33EA41732D6FB7FA999CCA0 185A13C8BD80A2762AB9919C3E9FC07556BA8C7149B4CC5B58DBE84297E3E8D2 B34591D9FCAC659C0FE115F34ABA807DD94410AF8F532418382EF8F7980E1598 A97A61926B809FD771B2795C69E6B1F15FF0EED329FB793FA3FAF0580ED07F51 B0E1BC1401EA5026897990CF09F9750268AF812E89DA551EC14B457836CD38E5 C07179A3EE0ABD3A85C693ACA829A5E492FD4F1BF12725544FBC81FAA2004784 DB367184315C68BEE9FBB1D68F91C9D0901BAD3BDA4FFFC203C232276A495EF1 B2B82F36FE36716733F0E993B19407744C067324BDD2D5641977B1A118DBB844 104397F963CA2E01B7155CB84BB642FC315C028FE4502335F761A9DDBEF7ADE1 ABE87D31AF848A5285BD8328ED3E8A2A608590DA11968AA8C0D8010329A9E172 AAC2C7D0061B14EDAD1142FEBD3DDC0ED20023CF06BB146B3F58A6A197DDA1CB 2533B236FAF2825E8DFE70B79A0938D79664C1D26B4412FD10C76729CB22392E 8976960ABED0A03D5FDDC7C5C2C6221BA1FA08020B88FD9AA0CE8B5FD26D58A6 79339A2AE6730746B8413B6E05361755FBF11FBFA4974CC1AF36136803DB8282 A7F5429327B875D0FD222835C7AB82049CBDA6AD1731F6D06AD2A20027765CF6 2F7E4BE9521465A7C3E968DBCF95F2C62EB3829CE6DFE845EE20E8EA89CA6C46 BA14E5A920D8E28A4008C210F747622AE31F5F9036C70FA52BFFF08A4BAB3D5E A2EF6E8656F89058F4A67933AF30E9A16467D563B2782268E2568868F677650A 74F415289CBAC0DECDF828485066AC07C011623DE9643DDE39840B1A739B33ED 3EC705C13DFB191472987059E5017002D278168B5280FA2E26C6D51CA663B384 F5CFF4A6232F5F68E185231EEA239904319E180F91DA98A63B38E16E138D2DCB CFEFA5F3E5AC6FE764A3A9F3EB622117662AFD26A124933CB1E04AAB53923AF5 D9DD972536C4904A1602040545A9AD4904D867C1D0AB907D733EDC19EC093391 3B0EE96E8578527FD3D1204A25982635CCA01A9B101A843F6C373AC4C8E39E39 BB13AE6A0EA170B59987488481D38806D429E902801F9CE25EEDEB6012CC9EBA 0736820F82C640CD8C7D852D9EFFE6F769D7FDE1DD628861FF628BC0BA8EF127 26F83D7FCE6ED8785DBCE502DD0571A76D88B7FAC1E2DB24DB97394937A1EA17 031078EE07D00B554B9C892C68B624D3900266E8850287243BE44F11F86E95DC 00E89C5C47F573C0A7F1CD0CCD26498334C7D37A3AF4457CA805446A74344597 8D8C3D25FBA2350A878E23DE65D49E9E5F819484DC1B85ED2BDFF923216C101F D8F411C1443AD7BCF5E90FDD6BD29899C86EB3ECC82832FE75A59EB3FA696F26 96A450E2504A473123A8D24956ABEF5ADAF5B3BB57FFA5364214AC0E9E245CCF 431DFB8A7A5104BD97D5E5104CA9A05774D0FCA9EC0458BD7289794FF19FD00E 2D05086336902514F5CF8141307C037E5D2E30B62D1C8A5A7682BC941A5445D8 A17F5670554AD4AE24EB95524CEBF2599D5D00AEDEE2B5537F869A46BF093296 C77F86ED5658C3DD3AB9C25850624A53F6573A51C7AD9F43EB8320DFA31F7F58 E0FDFA9FF640DB5B55FB5C4E014A8C50E062F13D573C845231F98CDE7414BD44 0AD4CE9E00FB39BC93C3D1C8F5FEC652FC28AD9EF814CD964DEFC5813828B0A3 8AB0E0BE6E3CD60259B8A50F95CB02EB685DDE048D73DB0460985EB16DA749DE 3EE1625182EDC552F104E547D22E62501D9D4EABC09531E6457B7AB148FFBAC7 927318F8BE99EAE5AC9E6AE81081E236187C2D384A92494DE6BD1FDCC5A79413 609F865C6067EB60B83B1E0D49D2CABF88F252377787534037AEA74A842CF21A 5514F3A89A00EEA33793D63040EC2E1231C04026B8DFE67E0E0B460E3BC6E60F 71AB1C05F295F617829255BBBAD68D6D7E5AEE12DAD835A693A661AD9923BB65 C781B9085640D3A5317C312DD3C6159C15D8DAA3A592C9F4B4AB648B160E4B3B D2E3DD475573570F5EE110AE5BCA3C499513061F202DB76ECBB5316F21F04195 4B9EFF754A628ECC2B68077CD6072C630CB99421BA3D0D1DA24CC09B8D42E8EC B52EBAA0E16DE13F0F2E235292A0063ED390D9A8E685160134E931F924D150C3 B1E315CCC86F2AC29D02D0D98DEB83DFC7531128E0AB55B5F7D161A44DE01547 38DE065666440E46D94CC4AC21C42F362D222A5CEB4FE9FAC0892ABAA08F3A3A B76A22CF73E343BADA5C89355A821C67A626C0FA6F8742178B9562543607FA64 8F9FC0971734B99E476E36E9127419F27469DD3BA6A1D82680155B46073D42A8 AAE4A6F8B0B2ED3A99469BCF9EBD004DB631F105D77CDF18A2EDA5801DE620C8 987AF2A7C5BAB3F09769CB0CCA5B1CFA6A01DC0EDDAF693D168F9CD580D7AD66 A2DE7D9CAFBA0562AB6D20C4F2D4F37A3B26398A1D5AD2F84F0E1339008A37D7 6973B67E1EDE40002AA5F65AFD81A00CA4343ACD98CE454DA2E3E3FA4916BCFF 9E4C39B3B73A2BD72D4B83CDC6D0A1C4FA92634DD6A46A860FA2AF035F558C1D BC60E48CCFD9E1AC3BDDF3FB69A81F2D36111B4BE00DF185FA99BA638F1E44AD CD03F326227FAD786C4CFCE0ADFD99BDC3BE161F4C1FBA9B854899BDB459D7F9 6B1FBE1D0A38FAEF19E7A659C8D901CDC6CB4742E070AEF8C8631A381CF43B25 05F4B07A94EDF019B4D73211990433184BD68547B3158C0C1806F60800ABCF42 513BBE3A2D24B5C47FF85CB197FC605931DA47421EBCDC3132E27C8653B7D688 31022AB51016BD35A9D20E6FED8073F0AC8279688F65DA0D7C3AE10433C517A7 BDBA283AEF373F8981DB670CF5CBD0627F8B9FA67356F13F4CE0E10E81E43E51 CD7B8B42B8918E15112555A1444DCFA46DD8D89C6936576469F34FF13FFAAC1A 7A3D860A7D21385211840C1FED3A47D18F3D39D2CAAA5337FC5D03297721E204 FBAFEB45F5B21E8361BA30D52CCDCF59223D83B687732D947BF57AFDB6F14F43 22409720A23CA3F0493D9C07EECFEFE21C8B6B694D0C145E30AE91DDA1CDC387 FF0F89169EE3C6156303EC485FB693B0EEE6D47D25B6FF384B9E7DDCB8FEA60D 5D46F43F41DEB70221A21676783AFEDDE0C09DBAEC55A0479325362548CAEFAE 8584BA82097173DEF89F156E500E6E31840EEEAA3A5F7FA7B63A907F77FB1796 469C4AE0D44FD89E75A8C63A95A1FC6B67A2B0DAFECDBBF6B6444361C743E050 B7ED90282B50F86ACEE12B3A35CE14FC19FBC0FB577F7A07FE6D3CF40AF0BAD8 F9432876CDCC8171E705BD7E93151DBE13F80FBAF97BC30049BF622B05E2260E D626541E24DC1E284E2580F80AFCB5F369A4C26F6F0A3BCE413DC4325F11C32D DA451403AD08C0E763856F3431010A966D041C71334358B3584DFE8992FAA601 3E6A86216689A9199FE3218B51B8E9326213B5AAE8600FA1FEB72BFDCDADB57E CAF18F844D84FF577C71054539F84AED4D3160CD02BBCC398C4879E250CCF9CA 170035FBB7AC57AA14C32940937C019163343E849285ECE8D283C893FA30ABCF 2BD457FA99164500A4FF96157F9FB33FF1312C32F7ADB36D465F956962EDB2C3 32BCAAAF2C6359394E1DCC3DB635EFE01C6F9C681A5189E5CC22364AF385AE77 21625A5448DFD5F06376DA24E12D2D7CF4D1E2DCEBC2165498989B84E917F601 0C5F7CF36ECC556B20B0F42502E7CDF3ACCC76E63FBC878FE28895B9824F0D64 0A29AC044FA2FD07ACE6E5590A4F3B78B4D4B5C77A01FE8792984B815FE5A4ED C9F9D479FBE23838C3948246B876F76531B81942BA18D8385BE7D57F021DA769 6218CE1EA4B001398549BEFFC4449F8328D44A41736A39C591479E1C33CED125 AA1A6A66158C552AAB42A376DF6FAEDB4DABB14D6BF749F5892F9C71B3189FB3 34C96B5EC730AEC5C2632258030775ABFE933B3089886C2F562066B28377699E EB0C9563B19F4C2EB15D1960899AA7C5DE02183791AC1F82A5CA2E98103DE142 663840CB1834DD40A228E8B2079966F5F4C1B866098C3789D86D31BB0075D484 E0AD40DE834EE1799DD5090266FC8E5975ED6076DD5D7F31297274148DADF085 03BFC5E1D95D30EFD0C51013D7E0401A55F90BA1890E567CE17EC6634AB4146E 6A6B1B43888422297A5ADE8B9FB7E38DCA17C6745C346819C7CB22FF2F4F6B19 B5C9830F34AD8713D22588F186CAB77A32C44FC6DE14BBB11FB9DD87083183E4 2AC15EA11984E8A036B824223EB79C9CF48BE23C03C3F0C64BBAC51920E7B30B 5CC69460649E7D716BE7F2A8D6C26097A74D78AB75AE7CBC5E90DB7349E7A353 113F232F5795A3CDF029836B8E801366046F7D778A3A0A81D1E64484548ED0DA 3B8CD39F9A0AF22EAF09FB2BCCA05D5351D5B824E86AF0B47DEEB4771154FE6D 85AE033113C962607677DF7BB63493B11567C7414178B72DAB5C0E03385450E3 A0A7C4F283752712458208307ADEFEB6EC2ADFBE2A9A1C626C1F0A7BC49E7D3B BA95218FDA3AFFC86F1D5F2994384F3F71D0519822736399F9EFC18AC1B4545F AD307441436AD66D262AE97CAC5B9723C2D69B4F4C2642AFD76871B446D54901 534688A8EE34D770C3A4B7A959284B3E426240D79FAAD87DCB83873C0FBFDC0E 3B485F6D2E312ECC7FBD587B4E2B218BA63CB47B1936A85366638E999AEF34A2 47319B545FFDDA215BF59968939259D8F21198CE9ECCBDE6646F97CE85A5421E 29E7A596DFD6ADE9122D7A72147EE9E8127325C87E38EDDB6598D728B3B5F4CB 9846880707073CED9DC3A24BC872401B8060FB5B64979698D036321FDCFD18FC 94D127884CB771A8DE0AAE82127BDDF443A277F551E805C69D091E8D80CFC2D8 20B213C3341AFDBB4B8303C49B0F1A78F24B2B230F2887708896EEB943CCF33E CEC21382F8135648793C74756447128676F79534C9B1B56216293DBEFD56C098 85204209CE65D6C5FF3A5424F01905734C1E8EE8C8C4BE0A8B15DDCBAD324132 2EE2AC8448F8FDB816D4F906BBCCF55840C0D6F11EE8E18EEC02261C4ED1F34F B742F9FFAF33372D9BF50C16BE8CA711D141168F39AE27847F144F2D75009DF4 1D10D9258FECB4674C499BC62FE7B47393B9065B011CF24315B49627FBD9C381 C25972873B4B5DBAE8A637709F0A11F6AE5E6D7F5AEA2DC9CB2B29DF95CAC8E8 3D957BD9897CB519CCE68C5D8E975A41DF10DFB5AED3634B4E937D1F5BF7A1E3 B5CFB6A3A825CCD938ABA8123ADD9A9F2ACEBB08D6E43347F4476E6E21E91729 E3B49559022BD82ED0A6EC757891C5ADCF3B7252BAC6B8F3E4592F73ED0A15F9 ED1AC542EFA6D627E8CC49EF560346347B43A5433E9170B58A495FF364E9017D 9B5DB6097D0CEE11E195C77329658DA0FCCA02AEA5D17551F8C9F1BCFDB67669 62028AD6DFEB815871E62DCAC4C8CDEABE83D43DB2132F5726E871FF48E78882 1135887B8C8C913CF6DC16BACE2C98013611BF80CFC4609708BEA6250188C918 400682C7AB1B63130B043DF0024025B42049B70BA9DC13ADFD45847C105CC2B7 98E5F525475439ECF6D19AA53F22CE692C0533AA9CB1EB45084B2C18B5FA0973 EBB70C740C01A3F0B7FA898E66FCA39D721A36EEBCDBD181930B6C6CB96E4165 CFE641C851FEFB65C575E66CD1D124236FF92E6CE92AE13E3F2301032C0FCDE9 1380927D65C3EDFADB2518C80370699CB078F9AC1BCC58AEF7BA8ADD7DB026AD 8EA97131D67E4AC09B1DF6CE86D33F3089BCF18ECB13199345BADF5169929E71 335F70AD28AA1F33389E4483E9ACB7E4843A17D65967B18C02FAFC9C0D6F1E6A 10254698BE7BE384A5B09D8791D661D7CA06F5C452E699F8EA893BDD056611A9 2B87642083E34A1E6847DB9B77B3D688A11526FA64ACE292BCA5902914FFE1F3 713E359253637BEE138B4DC01EA4006F2D805E108811C580B0B7E22FBA4D88C3 3C226BB0F8411E3417A70E2CF15CA78CCF1D237A2D92763EC126F6E98764EF77 0D260E006916F462DBEFAC643D52007E695439989C15B5DB4670417E8C3E93B0 D4D0EE32DAB212014ACF9D861741FA71857DFA0306ABBF2C9DF17E1E377EFE5D 0D74CA928343EAF4B8B9AF6594D4BA0329CBC2AC2753313FFB00271AA7F4E646 4353A384F5F5DADEA564DCAC584856C894DD7EB377E1450D6B47E06F49ED0858 21223FD31DC613E8AEB5DB03C10C6FE5183AB565FA114FB4A307594B4DA12E94 7380C85703CA7D55A045E5CDA9A72721834ADC93DE6F3EFA188174476F397539 80D0FD72FBD9945DDFDBAE9B19850508E264609400A5D16E8BF405515F15F587 C147E23D0D00A8492E64CB93B624D12EA946ACC6CBABD6339C5B78237FFFD0C9 F5741BE8DD4237206D51D126324748E7622F648FF96CC4CB5E037C4EDF108816 10475072CA2B3AA2039F2EEF8DD6F7F7400B5E85FEA7C81748DCD4BE44113FAD 9C249FA5CD87A6511E50FD159F0D3CC98B97E81EFD7DB09DBEEF621CF081CD4A 3CCEAF8E58B9BC3F88F1A3F80B64D707FBC523409435 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR7 %!PS-AdobeFont-1.0: CMR7 003.002 %%Title: CMR7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR7 known{/CMR7 findfont dup/UniqueID known{dup /UniqueID get 5000790 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR7 def /FontBBox {-27 -250 1122 750 }readonly def /UniqueID 5000790 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR7.) readonly def /FullName (CMR7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 52 /four put dup 53 /five put dup 54 /six put dup 57 /nine put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB981ABA2ACC9A23A5 3E152596AF52983541F86D859FC064A0E3D5FC6647C3CAB83AD4F31DDA35019C CDB9E3DD3FEBD4C2B36BA3CF6E6C7DA85E25D8A31A9BAD39BDF31FD0D1790707 9DE6A078E8A409D8295F642DF492AC4F86AC84383B0F4C6BAA7C22AD5A898A71 D6CB34D2CD12266C486B75E75A69C14819DD9BB8159088E04D4717E576B8482D BDA52110AC8B8A80E4E9D58F470EEBD3CF44A1E1EE8DA318FFF3611B02534FC9 F4018C7C57E80570D2F634D98BE5D5EC6D95051157F0EA94A3D12BE0B4B79939 F82F8D73136D3337C44E314B0B16CB030D9A12E01FB667105F334C3EE965E5A3 D410D2F1531547A4497C355AEEB295CD3C5334BEE5232992960B757594B89F3E 52095042DBE6B4DA3C3AD50CA95EA9EBADA10630B500CF1FCCA7D60306743681 7E428D33B7F7C40B425CD58E4CD8AB474BCE6A307BC6C6EBC15A8A96E0E2977E A33389154536F5C5D8CF036D07F24094E779E5ACBE5502C92892F10F4C6DB627 C7EC4C7BF20B39418A8A85D7FD9B0EAAFD871DDD41F93BDE5FE619AFB8711824 DE890E62C1969A6FE28DD3578AF43D58A728FAFF0B9FAA640962C8F35A26F76C 67F3548D6DB54A25CEB368B47F97EA2B0C4D7C0E7894A4F0C823C6C1922CF9DC 10E05600556F1C7C9AFB33A2DB6F8730F70D6BF94B1FB0887451F2FFEEF3584F DFADCFA9A2D4846B8F0E51620E1327D994CDF973B837D10C90FF76DE22B47CD5 EE3183898D156861AB4DFAD34A1E3FA260B8164E6680BF58413A553E88F6100B C4F4E8E972C81A5F88A7DBCDC308B4C3581BCDE13877B976B1F84330839FE5CF C78551620EB803DF94A5C921F8EE24F7EF8FC4C3E1653514212631F54F90E3DC E9EAF96E998F340C4F729ECF7AB430FDB7C0BE3DF2C0D23015820E28B743CAD7 7F0AE95413C3EEABBC69E852F53EE1DC260D7F1E712BECEF2F18437DB23D8E74 2902AAFBC733AC5BAA452DD6F3671859AD836C8564E99CDC4183D8495AFD99D6 1F0D65B6588CE7546717911E25BDCA6C2649E3A7466A3E2DA7C7994A30AB4449 672EFD00632EFA8629C1AFB7D53D801028F77C864869FE636213A69173003EA6 BE1ABA95EB07B13D1594BEFCC95ECB0A9CFA9892EE0677D6B6C250855762B7A7 8E4E022640F93169DFA0303A0D5E73BF3E0F4D4AAD10FD7E4EB20532BA30371F E9F480F9513432946F9828AFB5D4AEAFA5829B2CB544E5EB634C4537EF7DF08A A1CFD94A52DCF0E7CE4C5EFFB01E6D50558B75DB4C8D5512B06080F27BE62E01 2EEA6A0357441401458C842D3DD4C35B8F561D816B336216CE0C14BF77648AF5 E33912CF95872A1E1AB9A18980A0B29A881D13397C15E1CBA5D3E0B27943EBE2 F3003D15EB446BCFC1C231832475D5B7AA19E4CFDE119D6CD62D053C6D29C333 5F729791D17B3F7108074EEF4D1BD101CB33E01004532CB0D716D2E54D169C6E 80163E70C0E9081F31A1ECBAE079D2A518B790B0CB2CD03DFD034A0F4788E800 B0CD2DC1FAFDD487C2F381EBAB2A2F3F3AF82021B211DC9CD2FBA6A1BB3D4AEA 4C7F3D9A5C21DFF284CCB827D205A69638E98D5DD8E36AFC1A4481B5CB2A2E8F D6C838DA6F81990F5ED928DC7457501B5C979FF4CD20A830896A460C5DB13D56 A3B2B5D9B292374A9BF392894DD99FCD6A1E655AB395E839F074D1596488700C 4E2891C8AEEF66568E82A8B826F9A28FF84D4D9BDA21F638EAF96880B4EBE0D8 081982F34831A03BEE81FC177700C2360D2A48915EC40D5FE85B400E175D5AF1 067FA0097904FB647757BB44B4042D30D1557BD0F7922D731142FD682139CEB7 58CA4C8C240A0B86B1888CACC507E24E04020BF1882BD9B4CAECFA97DB24D7F5 AD64C69454027F198BA35881B94EE9159A2D73E450C3BDAED66B886D6DEBC84B 653E165176228F88993F12A170775A8D7038BDF2FE8DC1F7B98BDC02D1E6686E 9B834F6C0AD90780B17DFE25F0A4E470CBA84E73F2D22BEE09A040F14CFA2C14 0FDA5A5149B5FAFFE49F55EEFC43831BC43A8326FEE9C7F469C0FC3B000884FA 41DA7318EB57262CB96FC4EC7F16CA07FE1C3BE8C2DBC8A8135953D6DDF20BDF 75A2B6D26074FCE752BD32FB9F5CA797775E8DB9BB9786B469A3CD65A0D9DDDA C2A166E454A94860EEF5B5C12172DDFC576A03F6E6F8A735FF21A3E9CCB4CAA1 3064893487697986A42CB5888B2B0A79FA3C74E8187BDDF7BEAB884B70B8D4AA AC6615745AEB906E08BF831CFDE222F58D02B428D55E9D5A3CDE74E42D8A2CB7 E1A3A9439B678AD438793ABBEB72B21C58981DAF3EDCE4BB93D95F4A1E943BBC B3A012DE92FED4F232A3A7D60CE60B605151F9C7C18A5C653E5D6D15E5B49A63 73E7A339504D0ACC74B8B116EA88C3EBA2CC631AAB29F761E5F062966AD2FD28 7FFE52FA8A115DBE23E471094FFB3CBAFBDF11B7E9058313F2D069B2CE98A962 64645738F02A31E2F2AC11628724034ADBCEE012721EBF0A567893411F950410 B20754A7510D041FFA6144AC9CC46D846B82581F20BBD001D34D9764010824BE 61C30D05E5C5D100A24F1917F01799CF5BC4E50FCECFEA732CB50196825F0E08 8A1EC868C6D4357857EE2957E081A0E4372E31A8ABEF23C3F2EA0FEE57DE4D08 61C570175C41AA0C7A3A579ADF593F18B4AE3782D2552E4E0759C32E059EE741 2D8191E381731769F6648B3581CAF11DAE46471896666F18F02918B0860BDA3C BD5DE777672447C23C62ACFC2611ED5239D6A266FDA6031EBC5A530C1A2FF7A6 B4380B9A4C877267854AD1F1677CB5433F28894ADF93D39EAB94541A8D232E08 22D082D0951A60F62B87DC028714EC74133A4D65F7D0D1296C0E189C4A42AA98 28E8AE7ECBB9FC8DFABCC6EEB1E9FB06227F90808EF31331CCC5D4C9A6182181 047902DC9FD0444FB94B60FC74F3B677758088CE6A159D940C5CF682335E756A 8BACF06AD7225D49B0002392C889B0FE2C71311D2596F4903D12FA20BA2FFE25 A0804B4BC282929BE31E0F46B34532CB5795A65218CFAE21F390792DA67775C7 B91A2BF4C16DE4F6551DAE3A5827F616BE9040EE6B1008DA2F99A01EF66D697A 6CD1A44E0A15D1F39EA8025E886A68A1E9C334327C7703EE721E497CA924AC90 7723106D913C5ED4BA4FC743CEA8D0F5172526107DA65775C0B1B77179D336C2 9B09B608D80B1A1E87CA1A84A833A00D980D919BFF56F6390E9D5B45E9935CF5 E69D003564462F750F7DCE02DC23CC215A0696B74D8BD3156A392A94F557655E 00BFAA035647568ED66157FACC585E411F7F428569C147DC43F6E4FDE693D0F3 9917BEFEDF61FB980B85515FF6424824E2D995B05CA1E5D3E8BD8D3281DB7CE4 E54923E84058FFC0A8A2C491327D0F87CE4C352B724167CEE224DABA3B95757E 4A419594BE4F92E78BA6D35D4C93D31ECC3134B24A45DC32445725BB044F09A3 AA8C31EFC0A2944ACE2F2CE054CF24DB350FB3C71115518C24BDC0F7E54250AF 9D3378D38480E1CB9029F31570C619A28F065CA4FED5665EDB96712ABEB33B9B 4232C00C1B0215F08D53F7E430887035AC25BEAF06942FD1B6C442253C887AB7 D694C1A6115C8990B4CAF1E81DD1FDDD6B03C00055BE956BE7FD8A4E1049AE69 EDA8593CBA8C4A41E046C689FBBF9F1B64E5856A7FB1C61EC815A56DE2A8ED33 41F370B8203D4E5B19C63AE9E6E0D26F4F3814B5AF48AD30EC9B8402C941FDD9 722FCAFC638FBB835F83DC77F93D367266FA7DFFFCB567EF82B1695AB4D94D09 B18AC041811027229DF431F5CB2BBF6ACCE9D500C8F075A74590641C1A607C56 D2B8624797BCD9C91C3177818691FBB4744EDB6056464A0B95B8D63F7C22309B 82D6126E2057BCC9FE5566D96B7A9B201A09B0D3252A5494C8CA2C8BA8A13C29 37EF2A882D61DA708C279F663D88A8E2999A0F3B6F98C49901A7631BF7708B67 54D0B4C52BF4BE0DA0439E6763A7C9D639AD4092E77B13D3510DAE1475C978AC 796F9B2AAD3BFF35C5A3E19B5E2BF704B3BBDF68CE48BA4FA2496D60E58888EA 28AE12D00E9F0816FAC190590A865BB58569A91BF0345D01230ABA361442006D BA2C90EC2036BBAB79EBAFC3F217DBD5854C519235F9627A1C3C71D21ED38AEF 0BB40F3B86BB9F09A3F309473D8757AB7E638DC1C59A7F9BCD49DE4107A2E54F 422767FB94048987847205584309397F554744690ACFFDF5902FE5DB355930B8 71863217830DD7A563B0B3A4025ACE75B0E777B4414B62A13B50C54E0E6D47E9 D43BF769B9411B74E1069BF71BA873B4B8973EC9BA492A5DEA58D267872BB246 10AA67B143D0E2223FFB4991E583E629413CC894C3FA4869B72D19CE1A0CEC8C 0FF5E5A3EC1FCB7D3C4289813F0D249A11B55104BD60B2A89BEF44CC77CCDA9A 065B8B83B4F4253AA1D535290DCFAA4773452D110D2B3370F9E2FE5432B54A9E 644EB3BA9BFF62347F376839024CD5EF3C5DFD30F412DD5474B7933E6A1AB63B 4B12F2417C72D0543C26A263AEA53E5BAEBD67E23553A72E949DEC556BEB5D09 C4D7A89B14FE4EC68D0E3E9D65A64B285E53590F418EDA8175113CA375A29930 DDCF4C71ABB26CEB800C2C2B253AC1F53651C88A56ABE5A74F3B54CB4FFDDB92 60AD7272BA25EC2F6FB759AA6E1E7964FB55AD09F4EB25DE45FD01833947BD05 6266AA8ABB7DD792941C7A070FCF3A4636FBF8921C70298D42FE92F079DBA2AD 6149D9CF9EF7264DE6DFCD4429949B15EA90B596340713BD61926DDB2BB23BE8 F9DE38A31620A817420A245946E551463960A8C5C7295E3B3D6A59BCDF5E472A 40B7A2CDDAA43CD8AAFC411D037142579D11054A903E102DF0D0C7B5BB854DBA F3F086AF991F7F5D5C730F8F9AF213F25786F3EC0E54530FF912F4876FDE16B6 A07D0DC4FC46EC6363BCB68B83ACC448B801EC43FDD2F8BE0E93D809FF81E38E 176AE17C67C85FEA58EC95435434C49A950AA955D8B20989C550AB1F1C31B7FF 99422E1F48FB7D6F327C6DBC4695A03903DB275B94CB39386E46579271870A25 21823E75C377E9D5B46655E8CD8F986372CF8BA846423E26582315A9D19E0BF5 305C32B2A0EAC3ECB275B1D8BE11A37ADF524944219D94EA2C5DBDA768828B6D 775DA8CDB09E0570E4ADDF462EFD8D3FA3F86B1DEECDFFB699AF6507257C1879 16FC615868C2D51F03CD57BA38D42995D9164B257441210084DC409B6EE4C119 0B2E17B0A8D5326DD0010E4A325D5F77BF935693BC90A00A28C7B5F74817DA39 F47A41E32F4F92AA04D30D810F7B1484EB53AD8CFC8CE8928B570314E0F713F8 AF127227190F9C16BB73D2A217FF801C391A29095DA5E4974D137A0CAA7DE702 E20DD4755B1D78739756A5E7EC3542B96AD6844199FFA2F5F2E9C64E2DA4FB2A ED79869F745C59D235438251BC2E6D26112AAED20E06021D1AB896EE1F1DD2EB 437FBD4A25E42245C5A647493FCC9922E6DD7AF57D5D482921D1CBD6F0F02949 C27777144751C1E72F4EE2BC343D4AE7A8A8758123B54FB1A026144C643651EF 0907A376945E19A8FC7F98A034832A5820A481B0823F980F59623E0511593FEA BDE6EFBCC0383242CBD4954027B075B21F10472059A480D6E5ED01C3B07461CE 9810251A5C5643EC7403130C2246E8616CEA25EAC7A0076731FEA8CC43BCE3BE 933FCE61067F5FD402E67E2B9DAD954AA77C5BC86BC5E4BCE2ED676D8D8EC7D0 ABC5C86D82180B9D5D7451C71B5149B6B67883578DE9909317928C0A92E3205E F23015400A1763A6FBF67FDE3318AD2696685A1832FC31CF38589EBC7CA1C818 60D2B2211E04EFCCEA88D9A9082E82951EEB123924A267CB03C48889032F2892 4227E217FA28F87E01CBF27BF1EA60641A4238258CB7AA355908FE36D90F5CAD FE992D03A33E47CA9AEBEFDA57793F39DC6A9E85D5B289F6B862B35DBCF82E43 5CD6A862F6FFAC36478C384C3BDB0148CB1FEDF55969C776E77917635B5A65EB F2AD351D21CD3822D43289FE8EB0FED58182997097C7E9F4373553AE1CA92083 EDE3BBE6C3BC7009D15AB5FEC6A59E9FD1BCC7B2099CA15FEF083B9CBF7B890E CDDDE6BA0AFF306C76500C945DC91BD533FF9A585CEEDEF79238C54E6168001E 26FEB29E523EE501BFA4F60B782B1499B07084C35A2434B4D29D3D8E2C8F945F A9922443B68D07DF7EAA1F4CDEFFC438B597D8943E231B5216808A85F30EDC81 9DF5DD22F54A45335B4C2203887475F39D247F0E7347BACFEAF220ED82F9263A 6488E73C1910023E505FDEB143006C1A351D441AC57F9D52D2C6D63D78C75605 999885676BBBAD56074298E0BFDACBA1830BA58E87F436CC670EE8EB1870154D 72DDBBF3794F8CAAA3F1E11DE29752DD99EAC695838A19BB67A1FA3829B6E0BC 5301610A0351AAA749F456AE31ADD87D6ABADCDD1FB3CE81C3713F48780DF407 530CB284B2AC709F52EE7AD647DEF9FA4D2A867CCEF728F3D40CF34C28D21527 10160B3DAFB5FE16AFC9D36C6EC4021FC189005862082BEA60AC72B63AD27D72 FAF3C2D89DA2648FC4C65104A069212D87144E8533CD86A6D73DC7CD9DBA25CE 7DA53B000266F3871B24663C77723703315C5E4A89DFCDBAB384AE7EB2F455AE AB191FED406F7F6EC9E5B8276EF5C4CBA041AC7E8BCEC7CAE840154BDCA3232F 15711ABD1E867A434E9787CA0A6D1F197597DA27ED2402CB2D84ED082E8D3A39 81E6EB270DCA4E7A90E2BEBD3CBB3A2BE3CAB926192D7292CC16845B6399A543 BCFD224BB52F21352732DB5154FA3442733066CDC3E186D8AA97CD801DFBE43A 116C86889BE198DA88CA978B8C40ACB67E8F7BA499DE68A6FF0DC72C3D00BA1A B378B39610F15CA026F95ED8155CE3FFFFA2E2FEB352DBE14CEE1669F2387B70 55B91185FBBED764266215D518716EDA3DFC9E5DB6B148A553E75AE5E38E1CFC 6EF47B314D54CF24BC13856F4F7C976BB91D143DE32FF49BFFC87E17885A1893 BA1B8E441B08EFC04F7D103C1FFBB665194B3D0920473740C55FB1C50EBCF717 A2359B687FCEAD65616EE89A68F8D91AFACAA0B238EE4AF0279AF5BE5294C3DE A7E1F5E6248C0210E7D40683F04B12A933C746ECB517CF94BBCC6E4CF49AC715 D8005AFECBDFB7A6B417DB8A28F8E9EAF39CEC1CA64DF37A5E66A76C26F721F8 A63B003A040A62F87DCF61B298F960D510BEFA453F118E59E7DE8CA3DD002EF0 127EAF733D5C61B5132348D280F84D159809CC71A3C6F7373BBFD8D6EF715D34 0016DEFF14AA5F960BF1BB9AC304A1823722843547BB4CA5EA4C41C6C2701C8F 7BDC810443F9DF34BA469A3260009B799871BAF8523C8763544DCD0B382D44C5 F75046AFF85F0B5A3188C2EE786CEEE5496A5AF4BCB0B429CAFC403FB983EFE3 61FD9F52ADFC38E07A0FD7BACBA530D2E4DAB2592AA9564843E7E2305047F060 C5FE4243FA8FDF1B5D4F61ACA7850A604FBC6D6970959752695C90F78961B4E2 C8CFA41082B1A37405AABCEE5BA3DC2B9EA76F486117B84728EC6D8AE6379CCB 402C2AA89078EC992C00D53151E9D82C65643F549A572A20F05107A41BE5AC57 8EDE92AE20B05E2D0C98151CC92D5389A675DFE39DF546A33A84A4C534337ADE B17C34E09145B37CE1EB1D10D42CC8D6E6B127A3809F7202381FDB88D42084CD 0AEAEB8A8288CB56870EA2BE9D0B9DC8291021CA561E2BA388DA3494E433E0EE 5E69DA51D0AC505C9F71562D3E9750F23CF14D2C8ECF0692FBBCB4A92B48B4B0 AA2163AE57C48BDE42D6C1556A37A4B44D30569AA0A3312CEEF1C35327E7A92E F2EE4E7B73DDA96096EE36242AA37D24D75CB4021C96454F56D22E46253CC398 56C914E2246893FC1F6DEE943B9E5CFC3FDF89BEFD26498437082246038C4A94 606A5D1A9FAF6A14ADE5CAA159FDEABA0AD7417E7F6B7F5DE3F181CDA0D7E922 BEBA86F38F87ABCC697A80102EF2E0D4370D8B40B16153E4EFDBA916058CBB14 E78DF01395AD8F8C1BCC43BAB10443E92F1DDBFED3D78F8919F275722AF44C4C 1FDC54DE5CBF0EDA5CD019A73B7944352D5C77B7BD8EF73C7EFAEA8177D2E130 3596538E5EF700FFA48021A3306256792C605C6BE3DE0400B03EFF300C4C7131 6CE7109D902BBAE513B3E7C2384C8FB8B7E7949C8C87DC321EC1E5179A8A5ADD 17220ABB9A29DFE73268A6D2AA7DB90E58900719A8F373E9786C68EBF778F15B 23414D4490C3869A937DCD1EDA923464C470E1FA47143619DDE30013C94378D9 AE058333CCF18ECCB0C5CA9C2DEFB009ED964FC74C23F1C225251F318FF7C437 AB9369ED158F27ADD340F46C2A61DBDB81DB18072C7E619A87D96273C5E862A5 243CC499B0F25D39F5DF2813A66CBF86741FD5F04A1813295F90673F962727A7 5409E10232B130DF2B2E4250F5CA8C6ABC1BBB23B551617D650FD5FCEA0F042A 9A653949F11C130F8E2BBC05710974B6D65AB5DEC945236A275BFA6B06F485A7 3049CAE21E5489663DD6ACAC6B1EF2031E090B88C2BC1A028243BD18F0777FA9 B33C2AEFFF9B927EC8AAB02048F55F01F8D8FB872D245CB77CFDD06AC3577640 3847BBCD503E53D00915427733F3660C008CBF438EC4841C3393229057C215ED E538B1AD0673E35C2EF373F51A7ED73119A8B34A432C81275FDCA4011808FF1E B140B83446055380E76ABE87B389E2230D3E10C30FD1D487A9670A3A159D7421 ECA9FBD7545A372CA1CCA2190EAE953CE35BEA9042E5934507EFAB0DEF58747A C76F4F2BAFBD3BB26C520A23A46DF056833EBA022A3230F9CE7E3ADAC1413182 4AD2DB70CF9CBE7A0BE3C91495AF6CDB93D9BD6DD821BA6FEF1E7A72142B3FBE 843A6CFB1AA7BAEBB907B4466DA322E4D68104BD5B8BCBE311E8F9E8616743F3 DC8EF12E44B019922D34D0FF190B5BF687DD30E1E4B730DE8D4E29B3057E5644 79560663C959F1AFE5BDA9936166601B9D088BE39CC40F08A608EEE648CCE6C3 28FBD3E33592E4661291BA797DCA097E4887DE5FA71DE5C36B323F0D5163AE7F E3601E7A1AE46D27BF0DC403ECE24F96F3C9C3CE4206F9DD85892F14569E95B6 1EFFE060406EF1B48EF3013229436D7579F95CB95AC556D589ABFA7661FDA82A 05256621452F9137FEC0CF457DFB2769E433423E593B190A65C951BEA08D30DB 04305AD0792C79076798C704AC6946D934C0A47B9279EA4094E5FC0BED69DB56 ABEDD6625C61442D7AE39E8C7CE731AE5D1C4516E1D5DFC45C1286CAF836276C 022217A7C5B9FD122636B7A6F6BD582212384266655939C4FD3282DCCCEEEBD8 4B64634087B12515034B52A8ECBD65BA71273E377194DD72021EDBA839B4394D 9121B120DDD98FEC3FA1AEAED8CC0598F7CA6CE26909F49C22D5EC49A05F7720 C82C2263D63057EA8AFCFC562DFA109E5443B69965D36398736E7B82CD686A2D 28563BFEB0DA4BB7184F41E39C88713F273CCEDB856154F664EEE7E6762631D9 947E8A96AB7EF5F19D0BF966ADC4813F8BFB4437A8D5FA6928F85AA59CB2DEAC 913522DCE54194A909F5892B4FE88555F97B8CBE666C39923DED37A8BBC62081 39E959481B4CDD03FE21FA0A8F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX10 %!PS-AdobeFont-1.0: CMBX10 003.002 %%Title: CMBX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup /UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX10 def /FontBBox {-56 -250 1164 750 }readonly def /UniqueID 5000768 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX10.) readonly def /FullName (CMBX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 39 /quoteright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A 6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6 39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8 407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4 F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF 285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33 DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185 53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108 74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2 2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89 8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D 718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61 C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B 03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2 767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09 FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377 547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A 3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62 57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10 9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84 1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4 822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB 1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B 28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893 9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B 80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7 D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356 582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89 4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB 323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC 2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717 0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1 9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F 9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237 E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814 9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45 8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96 BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921 5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928 6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711 86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990 0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713 6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05 64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377 879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B 63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE 2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667 9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317 47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387 9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB 6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2 BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238 4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751 125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E 37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6 EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E 7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986 410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E 8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0 064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9 28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B 3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759 8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5 E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08 EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4 A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0 0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9 24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373 73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7 213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501 3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6 B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82 FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9 42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE 4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B 8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10 CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D 13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D 52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493 FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3 760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5 5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58 0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6 E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974 A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED 16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C 25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8 B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B 45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE 4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06 05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00 63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B 35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75 BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40 70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71 169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3 EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441 FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC 6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9 05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30 69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D 813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70 EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552 19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340 1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024 D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D 8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6 17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24 96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8 14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668 4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635 5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE 027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215 A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96 BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551 66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD 92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F 93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613 83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963 093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6 30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C 1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9 DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE 6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F 9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183 BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8 5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB 6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133 BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548 DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A 5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2 913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E 243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609 51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4 C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239 E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945 942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589 3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348 A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060 6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB 926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9 E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D 08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26 8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E 42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88 C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0 BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3 6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1 E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9 CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B 22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665 C2A63A837E4CAB38F8DF37DBAB5DC80C0AB25B56BCA5D899F1575E61ADF75676 F48EE26C054AD9A75FD88A3E17498AC26FD4DC8000A125D6DD423540B8A98779 B28CE97C9CAFAC45693FF43249E4B559E7F19FB349F94B60AAAAF05B5FBF244E 982B4B51D997DA5811CD43E1917DA885DD96133A5CE1A290DBBFD88AF285A879 D3136C41C839FD2276760A7B4F21F4026AADCDAB3F113FCCCA9588C7FB72643E AB8F6D8AEAD1DC3DCA6E436B3DF24E7DC6AD37137B49327871EA80F3B8AEE932 D20D9A5B4779DFFAD7B3E5D447023D6433575F8F5AF589D7E094DA3786555D0C 046A427ADF128E00AC7B458D5A131A130D6F49A7ABF47833791F172D69FE6393 EAE0E90E7FF7BC2333D4E0215D5201E4B209591782F8A664335F67B9DDE36DBA 793EC77E5EB405862D14EAB6A99218B3F66F11EA2F345629C402BD8FD9CA0AC8 FB5A2E119DAA9F80083C9BC54F4586C44320993CB5D9CBDC8F8522001F82A16C E307F175B794F4426E5D273581A6D2844444D82093FB03482B270D693391DEA7 CB26D4A418E48A2989167B7DCE251F0D54F414A0A2B1B15A10417CBAE8887CC7 C4FC60D6580E5EE2AC0F5B718F75DCB33CA5058EE84D1258EFC559FA1920714E 0C8692F37CF1D7E3DEFD43B2B428FBE2D1C8F5DF5891AF008F869D8A0AE61F9C 13BD60B22AF15B084A8B8898F73D7AEE05D7E74832DD2AA8B85FC266116DB6CF 97066AF9A7BBEA976AB7902376D5BDEF977E0F5F2ACE9060FDD7E1E140A8CBA1 3C4EBAB408D908B1C5AD935C3A60B8AA7CB100B1D6F2CEA9B27E71C0AA6E7545 07F6C88F2D7450AB60F6C6C5F513560C5B9328F7A5D76A409855639AB72C04F6 ABCE2BB24CA1AA56B084700A9BB7C9F4CFFE3C40EF398D87F725AC61C059ACCA E902BEB41A16515E787F70CFE4F492789CE6688DC14EA2D04BC83BDFA2A2F4D4 4689D7FD3B6B6846D7A4E655A4CBB957D35CE14C5A8E284E4873BF236785EFC3 89989D72E1058172C1D17ECDB8CB8DF8CAF7ACB2DA131AC347D7DD393850386F A111B983931149CEBD1D002C7659804B27E61664C83BEE2B60D85B8F45995F80 43F501C63A77B8552C057501BD56022A2020C530C9BD04C4512B1A824A3C6EC5 B8DFD78A27E9AD797DD81BB6CF40D8499D493CBC594137FD5767DDE33F5BC28C 5861FA727907DE4A92D0838AE24583B674D15100EDCEA3608A99FB2FC7F6FF7A E570BC9D661C0CCF30877BC3152023203C28BB2A0CEC32A4C2CD77B3A8ABFBCC AFE134FA18ED70CEE7C94E6B1552C08B4852F11F9151F4039E69F1625DF4C9AD 9AA2FD50D40902264E6EB161015FED178E0A154FDDC32EB9D88187D73521BEE7 DB096F33F794B041278E1FBC75C49BE7F2AB72B35948BF6E9180221EDD0ACCA5 78928815D319AF713773445ADC0F6EA36C6DA9CBD276DC4FAACAD5A17556B812 003A12AD74A679146DFC5A0C04A5516CDE51FBFC139EF250FC2A6B8179F719AC 6B30787677BDB97DBA6C37D351D4A88908E1E57D683F7DF75A468CE1903830A0 1CE6A4F8BA8424B999CCC8C9F3FB3FA4177F24A16C96B850D6FF61144FEA7E2E B06475AA2B086D5F13ED7DC4727918FAB35D62394C7C321156CF52EBEC0CB3A9 0E1ED55B70BC00794C097A8823BC5A865D3D098B4A60CB0A9CC032816269EEEC D1F690AFF5B2AEF11DB3E97A1F3E9E98B047779D494D9E203D158FB3A6CC5DA0 3D0AE482ECB5F7AABF9749CF4B5BE7908671BE27FFA537CC1DD8B32132221AA5 952853BCB25B0EF0C0D418831C6D3C372B2602422E1D67C701AA0836863119C6 0C8E8F445F445106127A7F90650476B94145932902E5897F3F7EABAF2C34FC09 78AA3F865D6C65033FD1D17DDA9FA5B8C7A21A356E147F7D25A6B8C11FA1BDF2 FA1E1FC45271D0A72069EE4A409E83188D1E6B788DAC2ACDF8AD1DFB826B0150 AF383B6139DC42901960C5911D0C3CAA9DD92C9048EBA35469A5E8EA1D48018A 4D4D2B0BF2738325C89AB1AA686090245BE7A3DC5CB4A60C72B62704A385C873 6235D6A66608A6BE41828C3BF27D932E168A81BD33F2FB89E01FCAA4084C7C88 FD5AAA7821836F4126BFBF28417B5C511F534A3BEDD69F6E991A171BAABC5D70 B236B2C6CBB17EC98D9DB9ACC3B06EEAFF00FE2602F13D761DA70C352DCBD07B 10F3DE11108A7D712D59BB36840C04A7B47D332675C1D97AA289F96062D48F9C E3D8B9D51FA9412407E10CC4F33BF49F0A6B3C90F68DEB83A75FD4BC3F59378A 4AF114F730722C5EC48C1EC7D8A453410CF798C74082839F978DD052B0CE9214 1D0C6357DFC64A4FC1BF956950D0A9A11D8B4C519D91264251DE61694597FD8C B7E8C802E36CC810C7379B78E4990780BC488C7953899CB8F87ED5B96AD25993 6D90A6C4DAD6D6C8EEF7A8D1C3A023B7A9733253C0BE8E6736A1FDADE61C5DBF 58F3B5DE9A3BF11B54FCE233A82D99980915F7DEF3AED93DB4833DBDA561E39F 99D8B4C299B2602715362F0EEFAF639A96DFA5330BC8A57E29AE4B9614A84BF9 3EEE934F661B733F2446337062017E3DA48C65488E6531CAF10F4AB8020F1840 7546F89282DD7BC14D5A7A87D08486212A47E7F720DC59E86A9575A3D34E5747 AF7A96E75454B50C43B40D79A6277513640CC4E7992FC5B88E4E3411492D0F00 9098A4B6E0567AE9A9C245F841E744B67428C1176F82DEF5E5DE6C520D7BB8AB D40FEB9C2309A330AA6C9EF35D3649BA593A0F9EBF9A4CF024C1D237E963D69C E27348B9460926E5CC26083874B90A85F2EBD468E0A5C8B4B96D2E0A28FDAC53 748FF1ADF3873D042B74B03FB31AB682BDE9FEB0A99ABB5B1B071A648325506A A679727C392573F54297D949A2CFFF0E0CF46A06EA6985C590E586C9ACE19F0C DF61A78ACE2ABF016BF074A9EF6D192C247FAD35DFBB1F3D0BE971812A8A3C5E DEE58292FFC8516AED898B59C3FBF6C140D01E1014D136FB96E442A8681B00D1 4EF927A2F0C3A84E49B1DD126BC02415ADAEA7046FF31C982586B7A3F086704D 2F749380EAD7DB50C213CB237B187A7B540403D2E92DB3F48434C619A99E5641 E4C5853CB0F981C24E8C36BFA67F751A25C900FE7A2187D2562E08C89AD2D514 E469D634DF4A14EB6D53F0B820B29F5F2D00C27F99EC32C1BE58842DBC9C6B7E 2213C6BB5D238D797A7651060AE01B5428081F763C1EFEC7FDB24FFD726EAE39 241BF9A535971EECC6EA4CA379E5575C0C38F288F580E6189C7F3A0F677948B1 EC866883E7890C9B39BD11CA08D0AC4BFA3533EEED850ACA82601E6381A4922C C9781D8B360E5AA4DB6D968D408CB63AC736D73305BEF24007F9B11998127514 287DD6498AA9D370EF0A74E77036D44F73AA2E0B1F5CABE244D87FB9B20BE735 649BB6F79233306E80C06140B9A2CDAC62DC739B931DB2EF070F64ECB9A68081 029EA9CC2EF13A57D598D44C37C242683DFBCD39A24463D3E0AD64A746E0DB51 CED4388D550AC45A5A7762FE22786AA97A7A281D007F1F6EE3CB17E0FDB167D0 5506A9695763788221474FCB68D8D460541B18929DEF20C755FC89BC16C5115D DB0CB14F9A220547915D646E3F9A39D91E1F76A1FFC898E74263CAE452993B5B 24E50B6FC8C2876C5D6DA51F96C84EF55982744FB01E64F359D255C8E72FB9ED 09B49109257898F180D2EF55235972753698C9C061F2F9BAAF636F17EB88960E A70F1F0F037DD2A4D26B888552DB87DD0D883A4B5AD1B762352ED6351E905383 B6BF0C74A5CCB721F45E7BB4ECF7DB3731DFF530C790CD8F7AF8845CF78DC541 A5D4DA3A23EF34850192FE19FC5ACF7E54C591865D8291D0AC7358A304348C9D ED17F4BBADC4AFE48B9E85EB4B67DFE3DB962FA171248D2CF5C1FC8952C9E642 5D4FA67A18F9FA13125D8B037CD1520CACA1CA80B728B77A07EF96C720A1A4BF F794F6B567EB437C6101AF5B4E8BE82C2813504CA1EC0B3F467B33A9A1DEFB73 462E786FFA31A4581AB3426B888FDF42C696A90B61F7AF1B75FD432AA04824E5 B9D462701D29776D4A34C2062BCA93F315FD1F1DF4B7D0AC13A0A53395CD7EB3 E81B9A0B3CE7200DADE550E9670A3F3D8A12C2C09A0F32C215FD84C1338E7BB2 94419491115315CA76462297A0EF40FF291DD2AA6AC7D66508C5D455462C2325 B4C1579B6DF94BB6C606D32DAFAADF3DFED5DFEB18257EE9194951D84C29AB15 A465EBC538FBC5422B7EAD50EED96EA5F23B572B10DB907F68DB1ACCC48A5E14 1568561ABE65C9526ED01DDFE1E0E56855A00C2F0CEED3498AE115FA7F9EE1C7 C8188073C4994E62F33BDAF9D6367652271A67DBADB04CB240C3852B51AEE125 9FD1B0FAE9D9DF2F4440A508BAD58F2305CE181FD47639979B3AA2B264ECA8EB BE978BDC961E6B985E98913A4AA2F9E53FED5DA59A53D571C8806E2B66283F2F AC3694A50F19F8F231BFCD092A56EEE171B23F312B326DB54CFF93070D73FDE1 E26E61E8F6D0FCD265B2488772CD6B74314BAA59E54A6D653CB3C9945FE79D66 15BECCEFDC74ACDD0A598E1B5C7BBD252238D07DE75F9DB875F9F933CF5DF4E0 0D90610FAFC80D4040BE4E94FF0E99766399D662AF06F5085C107543973222C5 82445B088510B38A14503A872519F1774BC5D64C0A84C45E25182A8E76D5D5A4 548498CAE57E7A73FB249589C54C65B514B8665E96757A91B7F9AE130D1BE59E E88EEAD5C16CD87E60E877F99F5B3C9F8E587AA79AEB5FEB58B702E692C6B0A4 3D6183B944933503419738E6A0641371B8EF0D80241216C8BDC7E232C1BD11F4 BD27CD4A23188562B8ECBF748BA638D593DE889503EABA86046F80FE69ED13ED 5DD3B21F8AFF4DC8695EC6E370B94F19A59B8F9863F8758F16813D6CDF20F71D 0CF26785D4FAE2E61234948094C976E71D9214BE08A2AC65660CC1B2BBE9EC29 EFEAC2C85CF38C663AD622A1B2CB4DD75684E1C3676F5C2096FE2BA0BA6633A4 60C2E294ADDF89C72808E6D2B2EF3219EA5D7BD586FFC4A1409B4C13DA0B8460 8126D10754D562A9EF5C1607870DDCDA37FE08315A5D807457302564CB202930 F0589F03F2132E86DF534B32EE765DE318520E424BCE140A685675435D3AC01D 83AAD6AD056B83EA14590D5A4A46A6C4AE4F66190041E8CDFD5504664329FAC6 F10053AFC16E31E56E3387CA04B95F8C45110576D50726C40124BE05F476AE03 BF0EBE2EBA187A8D9FA35C1B03D4B5846BE0161E2F5242F27E18D8A1A0205467 FD3BDC7D98E84FEA1710C2531BB57BF53A8841516990CB2C7BAACD289FA5B418 76E614781BE2CD54760CADB5D36B63CDDAD0CBB22DB839BBFAFD2D4C0DC2B645 CD0FB2EC300B14998FA072700BB4DE2A02054BDBBBF335E7B18A31732275617B 2FFCDB064311FAB7AF3729107AC1D47F6088910276447F6C9F3B35E3DCCFF343 74EDEF9D55B2441EC7735D1C94F99DD95FA40D39B8F9E217B2B2C0E5AB9BD9A1 E8E7071E788108D47C08B53ABAD7B13CF2567674E2B8C077290CFFA39B54DF87 BA0242103FBAA321C56E258401486E85CD8CF24C09E7EDEA57CE2089A88E82BB C65AE24CF21EF30543CF36A5941C9C60F5551E7F816CC556370B98DC1C6651E2 C1FC6BB5CC906C5C2E41DC07008FF8F090BD8C267097A162314944E96702CA1A 9C29701FD155DC39FD6C62B696F1B0D3F81230438772D70D17A70CACE4B33EC6 3B0E4521A271A577D24ACC2E56CAF6ABF6D5F65E415EB7D8A7BCD554395C33DF 26FC381D8D871DBD252F57DDCFF2A8F4835B6FCD29F98BDFC0F6D8D3731A9937 EB15D3C6AE43A438A72A148946812A16055D19B53E07003C4007B2EFB2716539 B002DA32A6A2EB5D1D9CB2A296EA6C68BFDD87831E377832AFC9CE040A3FC674 434E4C6E56BCC3EB4A077AC63037667B9701C7A1468A28A7D96116D47D3F7B6D 4866801979419AC22A6B4B1A984A17607AFC0D4F3316637EEAA593ED8B28194E A6983CF97D3F239F9174647721155B13ED556A5AF182CC98108F5B468C52D6C3 0E599DB9A89053A65BCC8423BB865AA316196F34C13385F411C46CAF7D99BFFC ED2A9BB8DE525E1A01FC47F3862C008F7A08113E1F0569B80EA6EC58A0678725 DC63790E22ABD65D13A4B4BF9C329DE0FC2CCFA51788AC5D3A7A0621A635BC9A A637CE6D4B9573C58E164A059CD70B5EF0FA26B2C6E439C65D21129DB9CFF4C2 4C2880C827321977F786923C5EFF7D71DC98C00037777F7462720DAFFBEA54AF C2DB2AB0B6826773BEC7C85C14C3D4A6EF4F67386FDD9662392779DCC8574FB0 F5A24B086C3A815A16A9D5BDF3FD357A1AA754371F3CF327E312C8CD0FC67DD4 CAE0C7352CCA4EEC6747B1744F40A16C11304642B964C423CFAB17BFD6C5D3D6 1B7CBAE1C16CC7B7C2C75EA8649A4ECE6E3506B1C77A8CC7C34DCF94487A8FC4 BB8786DA563B435D44FCCC44ABA16FEF0CB6CDDBBD5593FA8FBE53A16DA144E1 8EFB151FF5FB647B39E2906F467A4D58A120C0B712E990BF68C690D91D1BA003 781770A4E9B7E57E012C93AEFECB854A5698E2B67E556B334B8E88707AED4D1E D7B113E8A28993BB0F0612A2071F73F187D4BCE7AA3DF8E36B5D41EAA0F20327 0B5BE33CF331A2227047CD33FEF9955A2FBB23B055140F6924A126630492F1C0 B6BBC7CC93FF73C4283F956074AC200D6A454FAD17C1CC71F93391B65D99961E C6D92A7B3C964DEF40FA61762E2A565D2D9FCE5B3B1F0643598D60B338C4BB99 F0A063842316337A1A5735E57883EA30830A89AD5B86006FF4FF43F5C72AFDD7 7B9D00CEBD5FED5E6E1684A617270A07BB5E7C395268134BFCF3B8B1D7BD1A7D FDA13E5019C5880BDFAF7D265E82038DF18F3193C775969C0F4B9EC83B139306 57FF07239DA69EA7DFAF4F0245C7BBCB9126BEFB59187B04C45E4522812DEB49 89F83E8F6D8F5D122BA656D0515279C9C326BC53BEC6BD9C0658FBC73EA4CD50 C9A7A5F11882A548D9876047302E9E12A5A3FABAC9A6F1503274FA15860369B9 0CBCE6ABA21606FEF2C20E2DC65738B4E34C9F2F43D14F3D619F10CD7CA108DB 4B8E241A11C611434BBA7B8E53AF6286E3FB1C5802CF0EE5154C6FDF99EC43DF EC7D1FAAFF1052012B1DA1E3704BC9453DB1F7492E7D5C594E571F751A9B5206 E11D5FECD0946390283E7986ADF2D1937257B6A6F244B057B719A0EE43BBE53E 776FCE651700DB97E17B39B3E8302417357149A4F8459826F60A366E36F0DEA4 4DBB1CC65AFE5AE1CDEBD516230FFDB18D69646B60D7DC813AFCB81E4ED58C9F EBE89DFC6170EC0CFD7C1CBFC109E3FC190B7BD4027AAEC75B7592752EC6518F E2895A696AAEF0EBB0CC9690A4C2BB09B5F39F5ACFD7895E1C42FAB8DAA60F4D 6ACBF1D5BCCF7C24AB97F2BCCFE6C386E3C5336B64709708D32854530236B2C2 EE81B58C140734AB2309515C3D7F436634C50B1967387648D19C0E31BEB3D0F2 8B077135C8B12A38D9DD2B9F6498D4F4DBD96E104D35DE48C34F87764ACF131E 048EDE339B66A7B792294294A56528D0CC89DD72128F78464BC85C1DDF2A760C 20A545A6B7E5A6873D5696DA9DEE2B8580BCFE163AFCC42662DE723BDFF577E5 3306384A66DC85F2720FF7545441944ADAD3F630C2E7276BB2145F5895BD4FDB 117B3FDCCAF96715A419D74BC186FE19B3E6F2657230A8E0E3D9D355D982B4BE 5D4C7EE7AF00BC8DA24BE4B5D6B44830054BCF5C6FC0E3339F3C1C0FDF37F251 850B28C08760F0F66C73F550FC5B226C49061C18EAE532748FCD5D31777905D1 CD3F05C0B10E2A551680EA6435ED116392422D5E7C5F50036871C6686A37EC3F 1C207D09AD668F540077A54ECD618F5168C0CBEA150B0D451F35E6C3CF07175F 809C0329414136B3B7712035F8841589FE146D05E5BD79CAE9989231E31704CE F520248F76D9D2D03C9990C4E83C9609D38C234F0517154070552F754618A4DC DD88F4C8AD527875D8B12C7258D6A00B321B10D8706DB35112C40FF469F8F831 575366903DAA8823CE4E4C2D3BDA2BE5683052E5C1AF27C8459A96A418E821B1 538EEBE46D8508F2557B55FFD220CE8B6C42DB716825B3DC4330BD1B0F41B2CE B0053DD446B7D05DC16910C55C2EC72ADF2F0F6174BED2CAA00C4A34BBE89A4D 1A7A09461665112832E96380F5ADC9092B5B2AFF6499216394FFBD2F9105A779 FD1BCD4584DC13B3F8ED82061E9FD3F61C7815A5CFB83E38BF43914FDE01D128 9597294F1006FF9E2D2D8EC3C8901301889D632D278C655AE9A2BAA7DE75B1FE 7F4893F5C12A7632D1704B9867C833ED3E729F22AC2E5512FB01A27CB9EA42AE 3443E6921D8829079721C9E7B42BB132EC5D02D309CF406BEA8752DCCDB78CEE C570E31DEC8C8CAEA84AD7FA7F329B8765371F80733BA6203C3FA29E0C43E7B2 86873B45C07931A5DACCB0EA065D6C5E2717733DBCECD51A4A99AE87BE22CCAB CE446D158FEB49ED1F96156EBF5B7D62ED9DABD8BFF6F9E0DD4A29634E56A1E6 DA7135C61A050B0D26CA44EDC8151E26029B8DA7673C500A8F1A6F5FA0463AF6 0A4B0684F2F75794A015D8548A5114288F3CE6F7B3CA1751F67EA2021C50C7BF 9364F4BE177F2ADDCA2A48F93A941F572A144B3EFC4BA44214936BD518E0A6DA 5C8754DE37C1906D1405F348F06BCB893AC2A106764EE559735A925D0E5B40B1 44C37956D4647D2D624D3F596D4D55FDEC6486DBE36EF41A50D06BECDFE9BE8F 389BD86335BD5C53D9CD856B3DFCFC6FFA0B560743860C31860B237577DE855A C0A0E773DE8E0104EE1C3004C0CDBB26D995E5AB22B353D771DB72C2528F2A1D FF7207C9A01C99D77AE981A8156AC3A4AA78BE06DFDD3CC233BE70AC16B109EB 68E64FA1472F4BBDE0B5CEAA3C267CD74AD1EF431359046D568991AFC0C36E03 9501F36B65367FD8CC9FB1C1814303BCE1D34B0D8C61B607EA3544F900F0F428 7D7FC2F589583136CBEB03B5F6790257E7D2E7757EDB2516CCFF517CEB92E124 9B0480B41945EE5284EC60B0AAC63CDAE7D6D6BB08A38F5ADA42D0596D41B185 4CE914E45A5AEDF64505681D495FF72AE527FA48ED3D64C470E1FA47143660D1 410A641508643BE741BCDBBB3A0061BF2409D78F17D1A00B091B2E5F547F1AEF 501622E669DAD6725AE13726B27A38FC4AFD5FBDBCA65EE93A69A88418429BEC 48ED0FE7809E3BD9C2707E83015106D50129DAE4E6A4280DD0A4047FAF5117D6 A0DE125B1D59EE4EA17455C9BC265D0ECDDDC1CAA82AAD1032D5CFD3B2C0BEEF 8D7F7370DAD192C179B06B756702338E9A2238359CED8E89740EC0D326009CF3 528ABBBAE2BC9F0714DD31AB46C5B53823044D24228A3DC76F2DAC6FB7C21112 67586EA3136CEBB999CBB25A999648A1AF86763F92A5658C937EA7922C8960FD FDBC8B9D68F87139D79394B35C01B43BEB23DFE096053B668EA3FC26B13DE83C A704D357F41057ACEADDE58FDFD3629C8316942B330221881F4892EB27C34329 4F346F556258E9AAC70DF7B05119DD580F8913C3367B1C8E63A8BCE14FEB9AA5 E93B4CDD1D8D213EEE71497B7C2DA101012F958C0026C01E3F5FBD06C9256D53 7BCE41812BEF90E6976683F974744490A2CB5E86F91B08B2F5DAFAF4280F5283 783E3BAFC3605CA0E2E5FF8D49EDCF2F0C95F4493506EAC8703E26C78FAD2592 158FF126E806DC925DD8FE45A8CCFE1210323667E5B860B7D35D746DB2647294 5806CD196B20874AE6D51A46E83FB1FA8CFC087FBD4B1621358C2B73243E2888 AD5F7425CB69495C577BC8B9F02D79EF21F73ABC121D4D9422A5A2A5806C28DD 79CCF96ED2F11756D7BCCA5F37E580F746F5DACB35E04CF654785B791466EDAD 1FEEB76D8CAD59A178B23C89201705FB2B1D51C8A12364B93D0C1726CF390435 92FA494632837F9D514B1C5556FC4A3EB29EAB1D30C46B856EC47DBD9A32C9AA 6E5A9C3DD76BBE76FAAA4CFA52F9C32DF6088D3F0B6889743965E68BB3268A66 5A68223DF951AE9E66C47E1693517A1544AD001F19E403A5825B2B61E45EB067 84BFB90F46B00BA874B450A2BCEB2459189D1B9C51EB61B81F36DFB5C9854BC0 DB8058C77875674738C5714EDA08E9EC4678811F272B41B76BC1E71DEE9FE0F0 DC64151FD3E518F625F98BD5036502B01E9FA527AE9AB8E752058ADAAF5A22AF 207507AF55AC5A82BE0C06F93021865B60DD69A4A0995337DA12BFB2CF835144 FC8798D2B6E20EA700D64571A850AB2EA1F8D50956BCCF62C64C39E70AB81AE1 EDE698A413233ECD8E8A1234BCCB395699B37A5663B9810F6F230967ED388EC6 CF9D406559EDF8208FA625947416B444ECBEDC17A82C80BAD60D3C0760FB8B57 CBC714E02362339C11145C2BF9D67FAFA5DDEA06A5E8B1457FF5A487A0154285 A5A2A5B280FBF4B3B6A64C9A398A60066305B85B83AAB658AEC500391590ADAB 44ADC6A9792F95B74E1855D9683E308AD4DB6C91E591C58AFF0977B98CA02CCC 4C1727C01AADF245276D467D643357E0D363F0697225226BD12DA90476714F26 81899257F22965D07F80C7FDE87E33BA711CCF72A380E89BB7C3C7AE6D0AA464 CBFB855D051A9C561059BDDA00564F57F99292F4885FBE2B7AF4C1A147F621D5 9F311C92504B2A80F9024347F8A5D03E01C330014E915A75DAD99D040446940C 3FC4C754627F14675D6E225C3B8AF1875FC04F8B8B4F3B9EACE41D1A6CE944F6 54725291409BD1CF462C106E00032EC0097868D8B0061B3A0684BC52EF850028 E3AEFF3DE08DECE2586B630A1CB2BAAFAD7E9974112512DB5D71DEE6394B814D 4521715605F22499AB657E82F96DFF1422577B3B4DFE8BBFA47F3314D46C38BE 8D6594B1DE7C331419D4898DD0BCEAC4CD572715D94C7BDEFCFF40EDC298E851 5936B5C0520F994F35268ED63EAAC9AFB225B3F269433C5CF80FBEC769A04ACB D75C7489DB4CB4857DEC75C37BB3DD5EFA0C917BE2706CFB1899EF3D340FBA57 B0956007D1A243A94523A227023483D356AE7E663E81752CAC1B1466F8202E60 E43369CAF3F7E9F9A5354294852A6AD691AD8F1C6818A53DAD8255CD21B0E2E7 3C7B398754FAE39B372357BC795405F3DB935C32DED0929B1C022E1F8DD11E74 539C4B7AEA09F0801471867EDDD07BD4B2D6C0516E41BB508479D6813535CD2A 1D206DC333421F932DE113EE9D871A176094ACB2D95D325D2FE161328B12CD35 0D4C90800FF95929275FF6E9293AAF5BAE2567B2943DA3D9D4F862230BBF8381 AD3291A79C685C75BEAA83A884C799FDEDA1C834337A7B11DB10EC711C710BAE 1235DB51CEE5A74349BCA6B6ADADF11AEB90ABD3FB4F480C0C613C46D4F16C75 8FC63B2DAE0406EB1CFCAE9E08EC72FEF290FFFFF128082DD60C4C00AB53EB04 473DE19CEEFFF6B6764DDA82C2162594937D83EC10AD6699E3F34B679F4786B6 5FF871947579FEE7FBF55DFAE861A400732A99693F47AE83440B77F27A6242EB 432E191F8945D9A15234DD23CB2B3B491DA3C04E36A6AE4E6FF8B6857369F769 5624C5C672C9811B6B8723BAF48EDA4884A22E4C7A54964317E03BD46ED7AD12 9B73E633962A95B661E3290E0BD4FF99461F3A9DA8503692252D108D0E346F1F 56E026DD6AA856362F89D45BEF62277EFE21EAD40118DEFD1B1036D478FCA9D0 35E80C4459859114D4DAF13E52117904FC08C5A8FA854DDB47B3B51BED6A6C51 382492F39E8FEBB5A13CA436E94218F8E1E2806C5444A23E523918C13B0BC59F 82B7464996C3957D47DF3CB20BB31F7350D6E2EFD48DDA55478B3734F49AC9F2 1DB1EE335FA92156FA5CBF442EDAA30BDD57A0C79CDDC2F404F965C29A377E1B 295EFA16422EC308AD6DD6D30FF02623CB1131B396887977F135884095B9F4F0 9916720FB6E1C57887A595AF3C226D769303F8CCFA841987D05408633795E858 1A014801D204753AF4EE8EF80B82037CA01D6A43188677AF88242B9EB7880B2F 49B2B59E77C99F14F8C8A4BDCA602CEBA426EE4DDAF90408774B778ED94A83E2 B398873BB6446F2BD3D7EAF5CA417924BE932D3156649855CBF6C99C00A2E4B8 EEE59DCBA037770578E00BAC97A33004BA72B08C7C0059B871E49AFEE8A8F361 A6061051345FD9C6A9C24B0E9CE38CD769CE4FDD6747E0DC70C0CFA6A41DF099 C837D355CDEFC80BA462EABB8191C5F2758FEC6F2173608F2FDF03F5A5FBE2B1 D5D86FCFDD83D6A36B197FB2A776F399EEF7813F131A7273064BC05C12097777 6AB4AF18BA826A91E2EB555D35EC83793EBCC67A4227746874403C1CBD3B7044 62ACE0E6599C8DBA4E544DFC3205AC8C879282AD806F993A2C27CB67C8BC7B56 71BFA3F1549D04ADB31F6F0B3B8BDC61BA824BC4EEE18874C9ADE06F87B8AB7E 86C83156CEB235A84C2A72BFD8FCD73A98676B9CDB4C59D7FE249467B4229955 1428B0A2C137B3C97B64F97ED8B567EE51BFD644456F6EE6E4CBD54B4DE790A8 D81856288366086FF0A3887504E94BB4B5F258B409D5BEF4D91B71DED7C42FB9 B98E9EF643F522FB82DCF8BE884AF55A0CCC3A60EB1A6504F0ABF5BDC9AFD02B 2A42F68FDB824CDEC72C3E832ABAB62C2B4A90F4C0B02A41D3F83C8BB99C3E0C 88B2A5354C67A0539CA4A9B12C6C0023C10E33C1A489C88B03617298A31C572E B5D46DD1CEEA18975495B53105FDFAB6A8924617FABA7315E65505EFF1919E9B A9019459DC605983ADAFE67FD9233A02BB34035BBDABFF0F57AB89020D5D4C91 E90A9F97BC9439010BADD1BA9757D07EEF633E84B539351F6CA69B7FE1F94336 6846847A33C302F490FEB9ABC415A8D2627BE6DC963C5DD9C263EE59CEECF473 4BECD05B480E88C44D913AC5849FB158F9E143658343EC5200844A286CF72B4C 55ABD3F432E269DD6F27A0B4572609EBEFAC2B5431A3C88381467E4F58142F15 BC2D3831C9B833CC2AAB9C978DC475468C616C52DE990F19CBB4F6E4BB442246 0227EDF73422D0AFBF4AF74FC4ADB277BAF6822E578317E8175124E5E0E14560 46048D062054B9592470E9F8E0BE9B8EC7F415CCA7213CED22E6D06244A17A9E 92A63B15B4ADC1958921ACAD11805E3E9A65D4F60EB8E234632386D09FBAF6F6 F4924B085E3182D783B3A76FD2941AC8C2E696CABB22E583A619E76130FADBD5 52D15CE22BB3FEFB181308B3DC70F8F76CED9E38ADBB918E1121A3EBE388C41D B4EC191CE737F2490E27F5C2BDDFD75AE73FF6B52CE6607C0DD078C0088A2EBD 5EE254189147E79A19D054345DF144731D7230F322E271FAE72064390DE58480 78E8FA2DB7B5C70657F78328F30C122B80EEBBECE67A99E7FEFF51F529C4FAA9 B6592AE50BF6EA8FE0A4CC5CFE0BBB202E834D4EA543CBB00B497B06D6924EBD 7FF8F93AB3499029DAB8193311D2B620F897D46B7A2A565FF28D4DFEC4139666 249F9ECA8F4CED5885A31F24AE3028CFB4B4F5B4F41340EB97BAA2AA1CC11CB0 8236FC0A26CE2F8960680DBA8C6148B1DD37D9A9D80A918A7892700C9403538D 76275EBFF6602C9612F07DD7C9B4F58696DBD79C528B153EFAF868740E918729 2F7DFF3E5070181052DD43AEB3EF5EDEAF57B881FF39856527CA82E2E0E0690C 2B9414A15A5307B4D35907684EBC3A3B0D5971DB501B6101036B67E78D2AD766 47E5CDF837F3EA333B64D45CB40973C76CAEBED6E249DED242F61A533698803D 5B9C483573B9CEAAA62AAA5AB575ACEDBC70927BF00B7834C021B569B26F1750 4F14303555ED7359E64BB5F9A9A1731CEFCE19D9F879D574B3443AEE72A97CBE A0478DB0B8710BDAE9E615796ABEA9C2CEFBD24B37A430521F1F1ED86A90228A A3B725409D8453024F9AB585971236039E7B4E940D44F2FC8FECC38335A72906 FA60E98DF475CFAA7DD00FE418644AF93CBA27E5B4CA4EA3C8FB118746534B92 2B110868381E54FE124E6CE0F9460909075F0B473D985B89249EB664C997A506 6530A9D120D8519A293A5DA359FF9274B227E0D1711F852D5A676382B4C3E0C5 5119AE0C440A6FDC9D19E8579632653DAC57D4E2D46B767B4CE77141B7DB0D5B F475A2733672C8EA9EBF89462570D25B79AA1013EA62859242CD145BB2708ABC F19F28C0242CD8F75A5FB8CA83FC95F0BDB5CDE17A1B038C58C67BF818EE5FA9 ECA9ADC98581ED117E9352C133922307472F3044FAF9D0ED66D1EA10BEE45667 14B1703435FBA566A9B731B4AAB24437E8A69F8E97FDC96AE5610B22AA5FFFA9 4F87B129A4BA6D78619D5A3B51A81321AC1D7D8C9A6F24AC59E32E671A6B470A 6ECA4AF1EE6DC34CA858E82DA35191C5191D0217EF595CFFC1130478E1F6531D 4CE1DB92EB38EB78CE8EC006C7FE659AFE55073A85F24F7627F8DB60D4A219B7 DFF635C060D7704664695A83D346276FE4299C644A75EC8EB4E85AD6DD08DCF2 5F73F57DD26686BACCBA95B36A544978FD6CE442A3B83E8CAE154BD2ADF9DBD5 70D764205549D0BD62A3247226F7F44051FFF34C17E4E7D7D31E73DC60CAFC33 BDA1BEF56D9F92AB2F665EF2B9E132D39055002657B355E2C38645FB88EC1518 E7794992AA9707F5728AE427942421DBECEB0C41ABFD29A71E80E7502D2337A6 11C9090BC71B35EF6BC461F36C57505E2AC9152D14E386CB4870EEA2A3878599 DEB7B53B81E0C65E4A0D854EED0B3E6AC26487BA942ACED207A8D2E510DEED0F B950A80B352E750F8B090699FA6C8EFD8AE7F39C1DDD6A7F5F4FA46F541D4CCD 0030757175DC42F0C618ADDA0BE40E5E1DC183CA471AD23C83B0C2ABF146CEF7 E9CA72DD3DEF44601C5564AFE67EFF010A2F08FF2545FF3C0461B45B10660AB2 A6DBFCB2EFD03C765216C415C5CC59422C17FC71AE47A6C0F946CCF59113F2E1 A662184BCD3588CEACDAC9EA7A245503C4B78E602C63A9DAFDA6A5FF6E101613 895E0888D34825862ADC9EF716EADC67AF1FB9FFF6630F214E6A2781712D9611 AE7B4A929E13BC729CE2F237931464DA70A5951387DFF3EB4949CDF76E29AC5B 214CA1EF21A5717C6672CEE52AF9FBABDE24E444142E854CE5F92EDF72EC51A3 3B4B88F504D49F87B6237EE7E56D662912D6320BB97CB7D1E0F28A315D039207 FF488A7BBCA48FC74D672BFBF6C46CB045D336D4CD83C02212601F8F944ACC94 110A2475B3D719F49090872E3AC6CA2CCB19FA54BCDAAC5CFEDB094D2F29DA09 08F389AC98A0C6E8B6ACC3161C7176D04B05399A792CF60C92BB036842C54F78 249722900B343C870C17B67CE8214EF93EC3EAF5D15047B901E5B7329983AC49 C182E40DBFB9338561B49656BFAEB9413B43CA28A59DE6B6EB76B09EC5F3EAD6 A13412AC060737FC78DE24C2A763FDF2FF3BB22D13B425E231BD597B4CFFBDE4 6210D8CD6935E42E15BD1A7F15FA4827F7A9DE9B8C295BCAD7AE4F25CD396AF3 0AA5B281043F87329CAE477C0AD8B2A2B49F39B0DEA2E0D63E4F57A2C41C4474 ACA713F273F03565954192BE999D64CA7DA1F6B00A5D59996DD77867E2C476D6 C6551B7E92824145FC1F5C4F6B07B1A3F817237B8CE11232A366071BE79D45CF E4A7AE01838C114AE39AD8AD04C606A771CB5E01F3C78F680DD48905F75B1AB3 ED9430E1C5A7A3013B215F98DCE20B033AFD641D260D9E24DB542613FDD85F66 2028F4CCC519733BB846968F1480DB90D752E644AEB892F87FF3555E13309BE3 E7E71A543AA01CD775330ED2B43E3328D1471392AE9068155217AF118A26A916 40B690F30607F2F86CCDD07E943182F4F73879868DFA85A3DF23C57B2ECD2F48 5CC1BF5F6A55101746832B6BD60CB4A7DE6F12A27B67D34C2BDE6D5E2306B822 8EED4CA46AFBA82798B2CEC24522CA581E6776420DAB39DE68D5D27B4E013A85 D65DD4B650FB776887A4704D27433D759B514EA7FE0C5D98BD052B3E54CBD6CC 36A66972D0BEFA07287EF6967D647F4353213856309707AEEDA68BD8856C8998 6F095910B656D3ACD713F13F6C185D496CC5A110EB65C94440F12F90DA08D50C FD642A13D33A074C254D1243A56BD3189E860EF8BF7CF30068B85BA973FF1286 2D901358659E9C54C90D892B01B92C4B93DBC501FE5D85BA72B9C9347B328BBE F166CB812EA42EF19C1DB0C5DF407E4BAA79245CE209446437B23BE0E3F9867C 8DB9B248143DD5ABBEA4AB5A8365A08084AC23E9FB0EF25AB94E1F5A8C1A1206 22548F777C6F46D960BEFA1E870F818E4B236A88D05F6524850072034A3E4827 4A2C6275E68FB5C22D552F86DFA7732737371657596B56B0B556A5B263321636 6319EB5DF2B1F90DD763588427EEAEB9C7D88373AB6FF4F3A028CD10C5EA4C0D 40A8B9B786A5C61E49636B97300C56E13F3B5B0D4C7A014215FE9531FB7F1C82 E227757DC7E93B47E27ACCEB114A728FEE345BBA213B3DF67CFB71D43322D85C 574C3513BC9915FFED058994D0C71C64466F2EB5E26628019E957CE72F461312 BD74E953F57400F2FD7AB929A070AC77495E788EB97BC540DA94F6AB096A1C07 B6D453B1498999271118CB9CDE1CF3C9544BBC21B959EB6A19F964C1C3B3236D 3774AC2AA3B4C83E569B65E5A695155B34935956361E20F311D18795A589B8F2 F8E37623315600851F87480082A5BB0AB78B691FBBFD1A3CE01013BA45CDFBE3 EAA49E092680FABCF81FAB2E41D73608692C03E4F4098C74C63893D4D95C61D5 0C390E6585F84FF45463A934B79FF26D19CBD01FB51A52931ED5E95928BCE609 B163F050B6829CA04F8AFC2C40B6A0CD8D1A224DC3788E92142FA0B80F614D4E 4A2925615380200EC7300835F7A9EBDF7097B703DAE34AD74C4F6EE46B791E46 CBEA6CC3C6CD9465D2A02418CFF1359F49F51DBDDAD42EB74D4D4B7CF4B70B8B 23CE173957F533D036910500025F6F1E841043DD4F33B26A579A03E719649963 BBCB7DA4E2A682CEA9C809F978C5AA2D2EB18B23DF7B4E8F4AAD94BA80BE7432 E4876FB3C685CE5DC7EAA306AAC3301F5B397B684711AFF8AD8244F3E474FC95 8D963E6579D84AC4C175FE6F2F30CB76CCA04D6EE8FD23FA0A992B1DC1C0634D D59B5F31CD8E010C96CFDADA620CEE94CB74FDB3A28B04791F521F6D2EC685A9 DC34ADC29D41D79FB4F182D76451A51D7052FE1BAB8DFE7CDD234F2CD6282F70 2F6954FB1AB3F64EE7F11D81F5C077444429374F998AC7B813F5589FF9734C53 D5BDF08FFD5C68FBBBACB8A79758B58F2371D28B023B61514C05E09CAF55F08D 65A220672195958A8491E3B44EA67234BEFFDD1519DB46016558B04D2BCD071F DD6EDC3D663EAA5778436D1F37526A419E7D35C19747F80C5EFAED235B65BFB1 1D01F2FBBFA30284F9E4A409BB8F08948B756DF000C0ABA9C5A62BF519C3A910 BFF652E06465474E7E71497DE7C832B102228D6BE457746719EC65C500161136 7EE3568F06585C8AF817C14443CF350F45885B023A799DFEE66954FF7CFCCC8C EF70CDCE8419734B9378BA3E6C773BBF261CAA8665D99166A857D86C4E617EE6 FEC3ACECCA673C2F15064EEFFC54EF4E669A3956932486F681FEF74D48E52C41 C3F3581EA663C879B6C284DA8FB762927E383322B517A3BCC53A2A5C69627300 2903C3A7CBC8B33E1CD86EF1DBE2673EDB6CC99313B505E0167D24052ADA9807 AFADE032CF20502F39068D001D2AD98CD1D721324CFCEE92FFBB81287A3032A9 17B7BD39EA9F19870B30A723D3525D447C8CA2BC2DE476F3492852B7D676F329 2D1CC9FD3AC54A10490D4095865C34B906ECA69B9314EE06A732B3D511FC5BD2 D63BE1F72650F9A037732AAB06FF266CA5119DD7B540CD48EB7941CEC3FAFEDC 6F67A016FA96E7E9901DEF196AC42176D8F582BDE7D384085D98FE0B9BC3F6EF 83A8497296CAB5AA555058291433C3E1C22E6C008E427FB8AF38412DAF48F4AE F5535892C2501A81D94F690C3BE57141E000DB9CBDA42F00681AAC2766B8DAB1 D9B69FC7EFE82D0B8B82C53ED4C1666967062EDF063615E7ED61920FC8E2EA2E 88365A744848BC02183B19C9975D6BA081EA3ADDD90356B8CA6A712D41A73C0B 094FE5F99E1E66C9B2CE3D718CB07AA77899611C3FDFC71B8D5E99EABFC806E6 943A5075B1D45EE3FECEEB06DADA3200415A23FEC37F3ED44BB89E9149A92298 3C2F70A1B9C6B1DFDC5D762439A77DDA72EBBD485F21DB9B96F5C1D45C3C6BD0 7597BFF40B0BC1DD4B0A91AF1DBC0B7108EB8E63068F1B2024CD2AC983E68A5E 864D1777729EC02594BBCDDCA445D118DA815A175488D9E7013FADF3A959D030 F03B5130120B105DC1EDCDFDA335FCBBF1E05FF3E81BB15A5EB91DE07BAD71BC 9ECA2440368C6F5EE88E25F09FB6CE08D0F4E6449CA4BEABF48692ADD6C7C166 9B184762D2550C991E8888662B793EC734534B91EE450EE41C4E2D43DBC80647 D6C2EDBED7B38DB25C23AD0DA2EC58F1ADC15B7C1F2E5ABDA3599ECAE246547C 9B492CF6168BC8DFAE49798F3F48095FA0BD7B6F66E86FB9622379F964076552 96EE0BF585100662BCC61FC740B008C657765B5C07E8099C7FC91892CCAA5576 03DCE5DE917D78E07D7B3AFB6E36612FB2DB87EB0E96E9D273981BE5E815C772 4A5688D730E648C11AF91E93612F770BA7E8162AE4CE8F6FCCFC3301885BB19F 2CBF706A9715445B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 3 /asteriskmath put dup 13 /circlecopyrt put dup 15 /bullet put dup 20 /lessequal put dup 33 /arrowright put dup 41 /arrowdblright put dup 91 /union put dup 102 /braceleft put dup 103 /braceright put dup 104 /angbracketleft put dup 105 /angbracketright put dup 106 /bar put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B1058 93FAF9435086F4932783C7D4837170DB0EA31A11EE76B1B9DFA42BD7AC6B7A02 60798C30DA069C1E3F3211861EA327F5E48E1F440F6ACFCD1FA8A7E239B78825 56FED1C49BCEC941D4BBFED805E0AFCFBC77850BD291FA4F8FE707CB4E8CBD1B 1EF055DBB7929E9666F539079840B5A6B6E1AF4FB0AB0CE7F517E28F67D1FC76 2965CD2C4EB718886E4FF6A9F8F6EFAF9552AD1D7CE47CC42473F8BBFD598652 5AF9535A2078DD3E501DF0241EEAC306DB1C2695D6DAFCD4F28DF3EEA1AF6EFF 5490E5C45D2E2FF381528AE3E23D323472F9DC58552418F93AE4F1EF66EB99A9 D76D684A1AACC206A614C6A6B3B2A1F189446E9ACCBF41F9D9F03F1466758C19 293B55B8EC83AEDE8A775B2634B281C7127FD818271FDE529A96FDBC5AB0B8EF AD74FC70A687B89F31BF69838AEF1CF8DB5AA29D60B224C9B8872CD9E55B2E3A E02EA7860F21318E697822FFF91E5E66C912B6E181015AEC25E2CDAB7E3E2BD2 9D6E460691CBD49F4CA39FBFE3D2ABEF937632E8E3836465F77F858C6857B5F0 A4047584A54103BF65647E491266EFDCBDB26964F23A8B1F8F17FB692DC64F3F 8027332EA7C97A55A758AAB207EC7234E3E37EEBE7A9AD06173AD0E0E39E2579 5D529FFC754B37A68E3A9C5CA75A0B2C8751B662AD9ACF4EBEB58EE912FD4BA7 B893FE02DBEAD80C03FD91C56B8CB5DE274AB44143FBB248AA643C5F1BA7E15C F551E15B2690BFF9043A7B37C363768ED394770CF0A37E9C4D6918DB102EC4B7 8854C1EDFB4172AAAE7B2A6AB14112383379753A3CE50CC710B68CBC958D2E5B 08C405A0D4DA2A3289096F4D50A79BB459C230340AE04616F5F1B3D1371EEE72 4B9C6C568CB2F5CD38D127E26AD26E2733C76EB3BFF0777319A228A5A31B63DA 7D7DEB9550E9777DAD43828ABED5D2CD8655BE393FE69FE6C92608AC0E7D30B4 A6D184DD88E7C4BE0B66BF88763ABA05F7ABD7442A1A6F9B2D0165951D63638D 0B0E20717A699BA14BBA2384A5ACB8B23C72A51A9EFE87F9CC793A7EA07928EB B9D59E21AD84C0DAB40BA41D831DDD656377562B49B2B6D306C52B8ABA05DC31 6FEF4FFA97D85789030645BE8ED1E5FA005B38F27C2C05BD72A71EBD1029A878 2D21FC23EFC86FB9E5A59FA7FE8E9478DB774AEEB808E179F7B0372BAF3F3BFC 27ABC789CA4632EA7369B5196A7617E66F12FB9013C9E12D1705A7C405D4352B 1C960D55C802438D1091015FD93F60E3E8F0209C42C677BDCAFEA5EE5737EB7A 69D2D6B4B20479B66DDDB5C33790F941D19A1E2AFC97BEB7E94549D04EBC0F11 06F6E396C719C1FE2F9C14211E8B0C2E3F308B766FD6D746E8223C9EF2823A8F 91DF992990F2CAFB63BACFB41EEB8E26B97BE0210568A9EAA12CBC63A623712B E459E844B35C609327FE84F576C1B604C0E8D1609A6D60D30BF30FCDDB4BC921 FD6DA2E337FBB99957CA9940C4AFC875B144A46D02A0E21E49AA593505C8D593 070A5998AECC2E6B73531BA027BC45BD5E84EFC25B7C06F6496097B13A2F8E0B 4D90CFCB77929ED70E85B81F8D1BA0980742AF941AB91DA1287F8BE9532F3B85 9E842D3ABEEF9E24BBB3863D5D72C50A9363D5BCABEE58FDF5F86113071F0F4D 1C887A0AD50700B6EF3ABF22429FA61E703E0DFD1A7331AFB2FC717F685B5154 EC0078570D155263471A6FBA157BCFE0761F1D91CA03881FF3173B91A71ED7D0 F114365F5BAEF3242C23799DFFDE4FCA7D023EA27545F376D75B67896E706D9D A2C2E463157CB987B8FFF923DA59847DAD9B251FD6AFAE349F25FE568E00D97C 114F5A35975B91CF492EC325DC4806FC60A4F917DC7667F2A4C53AB0608B74A6 D21A07EA2B2BDE272C64BBB67E930AB97CF6F5F4EAF70144211DE8CD89A78F21 CCCE1D188101BF2EFA70A5506FBB0244676C7091854041302E6915680AB9C360 AEF3B7D3B35EB90AC68345E00AF2AB6D4F6CCA7DEA4B6AE863FDA3E5B5591FCE 1D393A89016192501A9BE27CD71CDF37A98CB7B5E71D18AAD1BAD85BAD3BDA81 BEA3CA22681EEA03665535F6AC237EE2C9E8EEB19B2EA28591130F6222E56CC1 57560A9FEB6712613427B529D8E445906DB779617B5F1F9AEC4FF43965DB4B92 0A178D8EE62F6C05060E7C007C9B448FF7CB9DB54F5424F0C519846BBC4AEA7C B6C19478C92C901FD0441015CC5DF494C5A7DCB54CECE1F3BAE8AB50A4893DB0 B990CBF7140887CC3BABADB0C3CF032795F9D27906B2E9701B55825523081EA1 713BCD20D5CB005BD2E846E0BEE9CF9185223FAB0B0CE78D37891692B875C291 9BD7F5AAFBA14F028F37E6BE38F0E277DD0E9722B77E692E58BABB76B3BD8BB3 19E6627EE0D77EA2EAF71EABF7EB3B6DDD9C9C4C08A206069513B584C3EF8500 E147311B1D97801A07D9752B3B8A0872833CF0E135EB3C38F9A4BA97A1342F13 65C5D745EBF88BDE308740D5C0DEEE475D05B5BE30FDB264A571A7EE742B89CA 3F3B9893AB1F2279FACACA2D0B4A3DEFAE621C0C71DEDFD58BB5D99896258A6F 892B5CBAADE5CD2C7EE9E5C66080283FF18C55E29AFB930B6682757B703DC6A1 1C873337BA4CEAA6234D07CEFB4DC81C52BAEB5366B6000BE49A223A11EB1336 F33108234FC559DD1F7D855B0190AF202BD7D6D532C5A05682E29AA3419C2193 7B35646C2D85F0CE6527CFCAAD5D5BC512E6A26C6DB34988895E9CE0E398CE55 6BC105FC5462CA36042AE4CBFDF8C570589175FA863C70CA33030A3C5AAA7E51 EFFDC4519460C1817DF9F0E9CFD8E06A151F18D1D58A2258916147FEC3616E4B F49B0968DEA96A9F953B8BEEACB7DD01BEF935C229691181188E2127DD1E3BD8 52A017134624AC3CA92E04422CCE6443D5AEA8A83CD0ED73C3304948F71EAC95 402B8F9F8D61959BAE98AECC3E01F86313FC332AB814AFDF5422AC5EB72C5F99 182384E7171A59EF92B9AAA81336FFBAC12ADF52BA5E91A2A10932B80D36259D 16B254BE56B6BF7070551F06D6F9DD27E63D8B384214CD956321BF96C395C504 5BB3F4A3438770BE4369FC52A6A2432877815F2B88B978827BF1689A2F397D3D 36705B5CDDD95E23D6B05BED5C8F6C881FA87093A21468600271EFCCC1EDB260 57F34E46ADAD7170AA0EC8A6036305F79688B885BEB03562D2E8F794CEA63B8E 03FED1BAA0FE3B831607E7A54E6FAC1BF3B1A07CB61FEE27C4AAF512CFEC400A 94AB6859FD2C83296FAE726C5D636200465AA3C3C39C33D59D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505 27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA 1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7 4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46 F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F 2FD466826D4E666E3A835B98A1D4AE5D17053A6A648E26E77BD08F9A3E02956A AE82C4929E9666F539079846527D0E326FE7CBBF86E3722BA3E53F8A5121080B ACF8D3C67A2A1DF624B9DB92105D3C833F5A6ECEC108E026E1D3D968967A1447 15CEFDD09123D56606134BC3449404ADAB1330C9238DE48F3CDFBC91EB86D7B3 8B85B5BA97376A0673E434DBFF19798EA90BFBD94493E2D21976F8106FC0C276 C81C9B9F7D4A68120DDA56FC6EC65FFA40DB78A60A05EC270A106DEEBD2CB92B F0622BD2B1D43771DF39AAD3ECB655F317AB483F7290C148690903AAA636583C 99DE3DBA99EFE20773D3D8DDD816A28D7BD8881DE570BAF5C7A30679179E1214 FCFED81605FE56AEA21C1894167F93D648B474352A65C0756F812F97AB435ADD 22C031A21714A626DE35308AC51CD676DB1748DD2773532294FA77CFB2AAFD32 A72BB7A045F12B4934A768F89217233DBBD69B900B28492A26713CA5D61A9042 A982CB071F1F875718FAC168E4E275860DB6369B8114E1BDD4801110B62C3E3E CF140554C826967A99F4E9726526E87D57BF845CE38E33893E5F9788769B6A4B A4577C38C8D45AF2EDC9F4FA7DD9979AB8E14FF5D8956233AB4C02982BE8E561 C63B7BC314793F634DB6F086E1A60D9FC3B69D3A7C20A99FBF3CB028CDBCEB60 E803C8DC3C5F0CCAC030905E72BBAC052520CB0E40E23B46B2150DE67F61E4B1 8C4D55904B7F90DDE4A4A78B11AE1009DE46DA396791B1C0EA63FB6897FDFA0F 42474042E7E9B06A703A7C6E672AC6705506F3C0B6861BC85CEBB9DC9BCFDE0D 43F5248CD7CAD4B89835BACABBCE6C791BC35FE7211E775C009844FC75CBF6CA DA6A6B7B488270BFAFFA3E9950914CB0F88C8AB7CDEFD2FDE11ADA7073037EF3 1A5CEEE37090F3A56D06FBC70597907A26498593783878C02722ECFD5D65903C 7D421CAFA78924DD27756853568535B02533C3393183D6E30DA6ED4BD6582E09 A5A4B4404EC452E91CB44515AC6124EBADAAE8A98D8A95E7D14DA39951EBC461 D426490071462F246794023DE1BDC04AB0F1834D50F748C3C60A07E1FB8EF400 78DBAB90B59500BD1232A872ED51928329CC8F06E83164FBB2D0B24222223EE5 992241E8E00D5DCCD6DB9A8E2325ADBE12FC8512AC127BBEABDA739672C1644B 554850CD75724E6779A7E76424CAF89E9455860E0AE2679231F4A535C0ED4336 313717D6F7A4A4DA833847A1BCFC7BF99234FA645F2B85C9A9AAF7108931E3CB 077A9C571E57B0D7EFD92B56C3AA4FCEC0BCAA96005E649AE8012366BE6E62CD 9E742F8F45AE4C96BCD73AD80AFB6F061D629ABEAEC3018CFF45E41F46751953 44E490B1355DC49C1E10BF343307263584091D122ABB1E3892E532B6DBAA105F CD48375C112331EC5DB49E4D4CE2D126C9274B21E678E5E3EAAD4EA0CAAA29A7 86FD8819217B195EC6E40AF23ABCD71156656DAD38C931C8730715A2773DC44C 4DEF14D92C2A054739F27D7EF349A0EB76D952BD9BA169B4F85C09D80984D232 2CB4A3812BDE539DC79E2EDC7C221739D16B10246A5F57151C210878556D4176 31EFF3AB6C4D78C4F0DF81692B3C9BDE4F85242BF0E84BACBFA39688BB222A81 E85E9CB332868ED5B64E140C66E242B97A90C13B6DFBC3D285A49BA9D4BA1A47 64D83577FFB50BF974D953F42A249ADF9AC228CC4D8E82213FD463BC757AFF26 DF4D1678FBCD55AFD5FB3014C0380B2F8CA9D6400DF2AA041580A6FA5694ADBA 674286F00E531693DB28F7C996D5A66F80AAAF53001EDFBC065C72FA5BE3F114 1FA3354376AEF7374AE1D0A8E9B06C58FD029922164DC9FA09343FB6652232E2 2EE34C662F0092BE479D739ACE775C6F589775DD768B736F7391B9AEBDE7F760 727702E145CF749DC457B2E98A36C52416107B1E59084B5F777B61511B8D17AC 88386A7933CAF852CA23FE179B67DF8DCF15800755605847ECC0FD77873727FC 1AF2BA8BC75D30E26C40913771E528724FD7C5DE284A8B58AE55A5C48AF26AC8 02E155B8FCD6755D8F7F5A6F1AE66E4D24A13567B6463B18E65972BD75ABF732 FB41F87A62FECE9A50C697BCEA1E3B3DF1E3DC961DCA598220CC746326F85F83 72E803A4E69106EC5BCA01139F92171DBF9964BBEC8D3370039623CA1F927CBF FE7DA71B04B4321EB4D3FCB27F8404994CC7DE5F26AB8FC019A203D6DF2F449D 85A4F103F7604986A1AC1F7D05D239E728FD6AD1DB5024B0A0542130D2B0E7EA 4432F910F9FD75568F5732EAC95F7A87CEBC359949C26595741533E952327791 87E42DF84E1064E1BDD3F5A6455087B8E9C783AB9ABBCAF032E9FA32C27ED7E6 CA7E3D1D76CD1905166090BD81A85485B9B4E976DB2E19A8E62EFB795FD6298C 9ADA57D5BDA2FEBB227F0EFEC59E4B51E06B8358006F9D79C1EFE92510D6046B 6AFEEDC793137DE622A8B3F5C9E3B21F29A98A589D9CEE75E348FD4D206415CE 508AB95A7496236AF1F6F5ED6B3ADFBAF1E35B51484F9B1E0C11C5AEAB9336F5 A8861ACE1EC74C4A145A64E4FC8F6BEB3A16B021AFF4AEDA59B06326A8D7FCB3 3B75F9729BFB7EEEDA8A1774728C80AED40BC35D42045E5CEEBBBEFAD2566CB1 AD69A9A972826DF0F2303BB232367E611C115E8955DC97779B1AF269B84574C0 9D816C88BAE3AACA6428CFC648FCF0869AD9236591E3B8FA326BD2EDE7F97286 511C75F4EE4F7B4DA33BA2CE7F778D92AE7C1B4844CAB3ED8FCA285454D78469 1639D24729E8002E4507A114407DF51543CF7DFFDB7E05ADB2D36E139F2DBACF D90AF274AFB3E5AB5B38918A28EDFCF6EACA78248BEFDC2FAC0E041AD35B1240 B33191F5397FD09BD2B23112C25D27233ACEBD728E9B2D6ACEF70F13DDA614AC 12AD845A43269E2BA323A9051FD2B5C539F417DEB625465AD2370DE58D4E0C1C 90DDBBC85CC416287B4FD8DE7F41085412CA5A1508A9A383089690144F4DC4FB B64B7D3E1AFE43B8CA67E55244940C3C3605E259BD02335B0DDA6F022D585A7C 4A98ECF5D52756717DC98BDC5FF425948858B33C58D1A6521ACD41B381CEBAA1 C0A3AA55193D46F5962C2C7F26589F5888F3A2BAA0FA4206601B580FEBADAD8C 34CD8AC20C07D8232B7E2EDEE184FA4D901844FFB3E8F2629CC1462B42CDA11F FDD31DBB41286064731E0D0677CDB3BF5A61BA4171C2A79FA9E8D667FC547BEA 9571408643C4383979354C214CF6C9D8971E91D944791F0E6B2EADB55E4D1356 66A1D81D0B769C30E3E7672B22170177C015F8B9657663B486648801252DBE96 AA54E5068AF986D8EA010E158F07F0A3140FE739BF702ECCBDD73F65353D300F 50FFD9536BE94A080A36C9FB22EBE3E60FD4773B6BCAD134DCA14E30A7A429B7 23035AEB6C8E5EA7A79937BA62F3B99BE1D0E72D2398C52B32E55823AADC7CF8 DE4435F908959FF59420B4038042746132994A046C678FB1DC065049E1E5794E DC638D83EE32D6423E07B092D82CEC388DD63E05E9ECBDBDEEB34A56DFF67D10 1113B0996774C5EC465A774C371547440A4AB91C1A64419914ED7D27F7175331 A0CA4E7F6E85D9BA778C26AD642AC9CAA66D8605332DD7EF702B00E46CEB58A6 D51573013917544EA4219777E83385E3DF69CFA50DF2AC71C64036CE75E24738 3A2E951CF750EB4D28EA85F95B13C30825C273091A568A69537BF03D70272A6B 1E47077D64054588403AC984B9A80390C866A2E2DFB498064555EF3D4D531D10 669C3E830EA3E0067B5677AFA5BD29C94B5E0893EA14FE874B911DB192F0527D 646E7206F79859D5E6EA4ECE8B26BBA97BB791BD7DA4F7F7CEBCC8B04D00D920 6D2E4227F997936A16C683A0AE11F059109A2E679244E9776DC9C7ECBB0BB73D D9A149C90BA2C69AD26F9F900323DFF9D04779F53AED156C8A8647FCE57DEFFB 863B8D148E6722A9077DD3F50DF532094874AC6682680AAEADB785FEBB7F3B12 1FDFFA94A4BACEC70943405DB37CF6E9E4C7EE51977A803035E06AD0D3B43734 C8B07ACCCA764DE24A841023316C84CEBF6A2D86E6382281856D8AFC9BABD871 3BE9E6B1F99262A2BC0C99138A5049C44F2527B02E07E40B9727017F30E59AFD 9EAF7590517673069D0D5D399446C5D4DA1996CEE93112B322C35290AE4C14E4 B651FEB0CD3C9A845F5AA9B6C6CC7548895DFB88574F89AE4BC8DF6C94084367 40ED5EEC51173B32A02B6DA16353E91D07EFD2E034DB0A4B57608EA80C56D975 9DF0B73BB12A1FC8FE26C7B5486C971D89217E6D45760045255531E2579830FB B4984CA52896E88D964BC91E1CD3B3CED5DE4861F98DEAB97979BA9A30F100CA 027362CFFDD972347B466B295D8244F99EF1A929E54F99830FA62F0A11D7C279 D5D76395F83D12264B50782207C957324FE35DE6C03C571A0C0E06F1AE3A6C85 5F8AD72CC806E2EC0BCA6128524A9FA3EF41B372968B0F4D4CDD2B5E5C4FE3A7 27D0EB547C3F34CA3BCAD92FFA62D761F21C4B213C9529C60D4D83A4AC9BBFE0 500EDD6E1F22E53E1ADFBB8D1A0FA4D68668E7DF7DEE87CC7A6E55AB0EA91178 3B46465E041B262CAC2C775B6964AE59F1352A98F4F6D6FE648DDA8C1769A333 0D35A6CFD30357BC2D059D67ABF7E1A4C78246AF7E9528014CC2D36E12379284 C17974375E1E4ACA37593C07876312F2BE5018E71F85E140BCC45EB4BFAA7CC3 0FF2CAF72A76A0788108BE53388ED11FB521CE8C5499F528ECA91F2A21EBD10C 1F26C0D816DF93E840052230356507BFE615320D7C856332A9DC966AE7960B19 95C50BFACDB6E824E5E05F6F21CA855CCAA7991F052F222DE81361C6CCBF9BAE BCA4BB3E293FEE1A4ACF635AECDBD204EB5AD40926DE56664B67751E90289EF1 005DE6AEA7BB788D5C1BDEA4D2626A0AD6FB4DCB5D4F5FE3C3B0ABE2AB39EC39 0C83EF5DD92D5458ACCC7CC6C23E930E60CC81636BE65CAA56A7C552DF3AD090 F41C8448DBBC4785B2E5359CE5F4B5458E0F5D5BDFB191B5E11D166CDCD979E5 71B494C2AC013D908F0786751D8E4921C8D3AFF9A2640371F0037CDD33A5B239 5427A3F13FEDDE7350199E194CBD0D0367A32B654893961B696E27248EE1FA2E D4C6128E66526AA9EFE0693BADA6F4196A617A86AA1667503F45B430D50D2187 1922575245D78C0E696E7301A6D4C9A2BF81FD0294459432A5B46F334A1E9CFA D0EAFCEEE0127679E963B04EC13B8C81380E5F68992E95314062767FB1A7481D C7268BDDF0840C1BA24B08335256C46FF042661523EE084DBC7F05ABA12EB45E BD46ECD92DE2DDAFC372498CBDC82A51AE32A4E3AC7FAC9C2B2FCEA14C18E2B5 8A2182F6188B9EBDEA3F0288071552D838AFF8F28D41E13633EEEF3DF8EA106B 78CAB5C69A6F54C5CA0600D151A5FA476183D2EC55D4AE76E856BFE0B91A8A75 6D9FEAB2BEABCABDD42BA4FA9EAB6335D036B99C7E345632F2557C5AB48093BC 2B01BEADFF47D830F7F724A305C4DB87B0F44C29D460FC45B1525EDCCBC9C566 CC6434A2A4767FF5A35E0094097E9A0CE33CD9D09310E77F84662E4870C64BFC 11D2D1E263756EFDB365A2F6C9EF4E5FB1F493192F14F6CD68C35AF59AEF138E 60665714C3AAB84BE8A44AACE61A940B2274EC6E48F0DFB2E10870A423F84636 8C6C1F4EA85F9560C3190AC388727BE054B2A8FA80A18F3309CFB0087553CB4B 75A3A01B7676B26E92C11B85C7BBC51B8E7842877A2C5FA7CBEE7CDB00123789 6159D6A49B0B7D5503C2096749F69526C2779388AD5CD2675B5087B5DF61197B 9FDEEF9AAE9C98B8DD71E5B2AD45CBE9C6CF84E39CE3B1412895A86B6A016279 EF39755F2F1F045B62CE8EED13A9B05E445D2C8B781987E5DD891070AAFE3F8E 76F9B2901111D4094DED65E0631AD91AE2A497BA0322EAB3978A2405CA6CE376 C1C51461BB73B990EDDDDF66F4C4AD9BF1F403AD130F104D67A7781839273653 181EE49022707C03B0945C08271CAAECB922893F0050270F2BF1AFA776C78DDC F2B55A1F80184F2A26D230D42131E91A53A536B5238D2702E8AEA9AD5CDD9E20 D13B7D67EA0C52E48B6FB033D2BE976B2EDB855FEB8D9BB4BFEBB0A96867CD85 C04317DFDDBDACEE413EAFE6544CB5CE9DF41E99AC8F9945D8E303A1E86F2AB6 A12E5E79185B7C1DFB6DB8FD9D6F93B34165F8B88D3993DF034507AFF20DBE60 72D3329495A1AB31BA5E057D40C10BB6B0B1CF50F1D07F748531DC0BF1011195 07428DB85302235746CDA81DF9D05F085EE1E452E45FA115CC80E114E4D1F5CC 36C6266733E70CB2EE8C9FA7F641A08047CEB84126E1B8723F6A19B637D2B4CE E73281E6AA7964DFFF6002BFDEB7D206DDA4BC7CCEBC5FCAEE8DE9C3203ECF73 56082B0B67F2C3DE2B7A30B839E736A96CCC8F10515C450389C37EBF7316889A 602D35C3DDA74A5270D5C280CBBEFD3ED473D45E068EC4E011E4DADEBA005914 2DE2C0854DED8C7DF430FF29F3E454442645B646A1718796E9D5910271F088D2 522DBBBF002D5BB08A129AC2F716E57D31217D6186E05A410F634502EA74C7F5 8A1DBB0F5B35012291FF58700C3A41856C8351BEB4233AC8FC879D0B1CD0CE1E CE50742ED437BE8F80280AEEAE20A7C7C2770F6AEECD7A9F9009207730C6F05B 42ECE0F1B464558D7487F5143FC0E1B7EBE675BC48A18C0C34A99404579F99BF ED16457F3E0C800434234257AA531955833AD900928626C993955299593C8495 B084CA0AD01EBDDE91E49EE562C961D3828F38FF1B05D977DAC40742AA7AE4E2 A153C65511D055BA412F67425D63B303296F3B9C4C4B377099F265646D101B4E 117C63F22CB46BFF21081B885853610C36A2F5BE721BA16AD203F9167F60B7FF A83CD5EB56C2FFAB222A1D3B9210B8698863158C6848F0FADF096831557D9B81 A0061BA5E1BBB75FCC178EC4E5263CE0FDBCED4239012B64808BC85776D70835 F713846E6C17D92E80B8A1DFED2CFFE0962B5FE2FB7CC764DA214977A03EB01C CCB1CD127A23C5486A8115BB840132B3D568D9EDE75B7A0AA814ABBC47854FED 7F75B0EFB6A2C9B19CABCB0334F70451A7B03662DD83ABC273D16D79E801718C 7DD2B8D033AB828E9D80023B1024E377295E7A660F894F128B9380E57CCE7DE8 F842F80F76BCBDD52EAEF474C6F368DA0B30648C46E13121652CE16AB55D78F3 9E15E6210751706E6EF3DDAD926FDC49C13CCFC3436C9B01008F8D656C0A2111 8B21119342A600757477D5AE24F673FBE2429BA7A0BD4A3AD41ACB26D732FD54 BD3F5499F4EF2CA22F29ED773A796AAE0E8D05CBDD3A56EDFA1ABE8A8E3C631F 7CDB0DB86B5D7345C7CEBAB208702C6E19D0ED09E26980AAE57BB17CE2A98477 4628C86F7336599DC729B04C8C5C4F0E908D6135434598BA3A1C594B46832E3D 866A992F4382C00C928540FA636C958C807B2BC3CD4BC1F7C6A79F8DB58A9722 CD5D352FC5B0B8383ACFEE3BA2072B5A66A5858F4A7CDD70DAAA4A6088CD55F1 561872587AAE330EF9E76619AAB72744C83D29A51EB86C057D0F5972E5C31FCC 4A34175C47ABDFAE5311D2318126FB8F15AE8A40E609CDB7ACA07431DFC2DD91 30765EA0F2DA53F1C9C6459E18645FF6BF92FF9918F860151D1C53E8076239BD 1FA4F932A7EA9589A439AA3793B4F939AA349A2DB6F574CEFC3F0537A18CA734 6CA31DEFA1F46A0D93B0A8092E176ACF3475136F03D66506E0B4814E0DEBA2F2 0640483BB98FE5AD51457A49387EB6FA7CB464DE2683DEFCEEE7754322EC3D75 BE93657480EE0B205EA0764C411F2957048D84137E27961DDDA720B972697AAC 07A00FAD82226F92DCCF48E9DF7BC311D9098D9BD2069BB306449EEC97FFBD75 202C13B602FAA33F29675411D738AE1F3DC5C97641F8215E8ED4A28904C06387 EEB28B2F6C0494289228512B76CC04B6741C6076C4FE2C42D58A28C332E9FDE9 289001D2BBC1A8790D7F1FAC88E645E1D3B50C1CA28B24A31E14025679A61250 67BA993BB3F22CDE012A9CEC30F66DF165A53EB4145850535DA2E17F27E7AD30 C2EBC274B6D9388B8B58D7BB242581B22AB5ED916276841540EDA6001252565D E7E0FC7B762602133B335FAAD00E9690F90747675CE69B17A789DC774D8009FE D9D4B7105854A44B634A56D4266E3AD008A1F78FE23FF876B9F8A640E2302C70 AF50667B3D4B8954D01DDC88BC8140462F22B67EDF59692BA9A70B1E6DE915F7 429567A130A730A359F58388DE4EB4382EE07D03CCCE3FAE0EA6391A05A3F255 B63DD8E4EE1F8FEA91F96EDAABD436790E0DA067F0662CFA8BBBEA3E434171BF 790C78B3CA0A3F4BACFBEAA9B18E5FE5B266A3AE06B85400A1B90902EFE6BB8D 76D07EA68E0AAE52FB0D6B15660874A3CE6AA275FD279CEA98BACADC5869A3ED 0E11200EB25B9760D1795B7B261C9144BECE83D37BF4C3FFAEBCCFC3554D6CB9 40D9E4F20333CF18582D379942940574524B17B767B0405722EDBA9A360D2C14 C4680EFBC0442D6C35B5C0DEFAD773793338EDC66E14A05FC87F7A38091DB3CB 0EF6D9F2AFEB4356B5E024ABEF34EB7799EF3A658BB58F6FB1D43C792C3816DE A1A41493FD6C4FE088F02379292015FA9CCAC621CEB98F8709AADBF331027B17 B236BE24CD7AE1F02DBC0064D65C26C3C0929DA5713DD9C0FE39EDEDD24C4417 D36FE80291FBDD3245918CA105AD4E52ACA28BA901ABBE8D416A53A412921112 AEE6120650FC6DA122D1B82738BF5A127633BE6E2044F0104614AFD80315251D D086A8D2A91C87A545F61CB01CD289CFE86ADC1A5DE5B1DD7F2EDEFC81927F3B 0DAA749D888E4FE9B6EA80B3E0A2F5E9721B6F81192E021E2705ECCB1F92AB50 D51064B847A13AD0F32B1769102B0531276D47FC621D5660D4436DB33E028F9F EFEEB9953010AB8660E5C9F531E242D7873358F6E6B713478FC40CB42B9A7D06 40D8558706F5A5628BE9842BEE345E759EC581ACEBFD70A6CD51D412A810C00B 8ADA276E44994D72AE69AA71C61D1FAA8456710D603D30B155F6AABFB76DE963 386AFEB54E41E450C65E6F0C0979855EB117AA0B50E8FB8C02F2973CB5A53C34 D2E7ED301619A8325C4F085454D451BCCD02F46AC1129662EFFDFBC6B4600C37 A51490A3619DE5ECA9003AD60D601154F03B7053A8CA9FF2134C5F2175DE2120 76226AB000F940193F4D0B17EBDFD9247B85FE823DE740CCBA6D0CEF119CE48A 44AD0A5EE0760573119CD4EF9FB0C6C81C6826A24B88B3E3D878091FBD73B117 0F8A875A96C13E2F328C28A482C250DC5871C5232F3AC55CA4F231C71DF26715 0585A2F42DEE145A6987ED34593DD1A62C731D15BE51CCD339D52845AD9896BF 90DBE789D5AE81199735293C113E5BC6BCCBCE4D9A721EC3E4DA08ACF5A4819C 986402BFCC14DCBC35FBC26252B9BD83BCDB7AFA4075DC58E1CCB295F542F303 FB0A8F54063D40E435DA18E845DB2030D62BCEBAFBB972608132584E6D484E06 1FD48230B808A8C67AF8AEEC2C48822C588437DB547A734A7169FDA7A3B347D8 B59BF7447DA941F25E502F0C3FEBF9D1132DE2FE4093425CC3CE4515D00CB74E 85AE8C677A13E7A54CC8073C841E5C8F32B4B967EF7694054582447BDCE42E74 9B07C2140E92CEC205C25B2625F070461422FA1077941A1ED5F1CF6C218CEBB5 AE70ECA87102BE081C33626F0678F82485CB1DEA62D26C89654FCF294BAFB0A7 4DC08F22F7993016648570008BE8DB1EFD7ECB6A3147B3A23EDDBC413039004E 7B3ED15CCCC90A4771467EFE51E795F464FF11EAB2B813118ACA0FED6EFA734F 2532D136E26F42623A52A863BA0CFA773109F261A97EB35DBDA81768BD5F13C7 2668C6DAF749BE6564A1F81947F6D224A5A9D792AE5B783F95AB372F71305CFC 29F5A86D98432C0ADFA5E448EB06D022053BCD2D95E7611C2D321E0E53FF9C5C 670EFE6732E74ED7DAA70D1F18AC98D8D975E8F82B3903A16CEA2CF34224E30D 65D0E7E05A991E5C98B8554F8E02C7C85EADC34E9C879B00570862CB7AD01F85 F6107E0A3013F98A90E972FBD3561659583B08455577D12F25F5E74EE2474C94 A69EC94EBBCCB05FB90FD00CC773826A7EE5FC7D252AB1748847E38C8F50631B 42E0FEDCD88D4C47E7F91B74EA3AD2E26B57E6674C78EB74B6178B20B27FFCC1 0594A99352D7115AF251222F772D66892BE04E44FA40EDFAAB219628CF4D5B83 746EEED9CF0F84A19EBF3D3DFD8F33BAE2835C1E6E57983B5D9B3FB0AD120B7B A8DB2C3648B676F02D98ABF893569C55D5102E772A97947F6D85464AF35BF392 1F0B31A8D4AAAD549FEB9409B8EA47605D1CBD9D50934D6E14D282AF3727CA58 CC4B26B63D41755E802E798A1F2153FC12585BE8BDBAB3991AD188CA10DA3F55 F9056640A1F31D0242A015938DA000ADDFAC774FA6B5010D4647E13682290E2E 48CDED102CD6A4993C9858F0C7E3842F1C3FBA14E431D068BAB68258C10DE1DF 682EBB96525AA82E20EA1E4E124DD7630E3553EFFE0F03C3763A776C5D64318B 2BBF007C0029ACC45615D3B4E77CEB40688EC755F2A1606CDFE4ED8B1B5D4515 6D9582137DF6358A8208CE99B191999792310E3E9138DCBA4E726700E4D0C4EF 016EBB22A37C4213BED2822EDC5D5F54C40EB2D22A92E40E63D827FCC8A24CF7 A802576CD9CF3795892FD077CC77DB908564E4944CD852A3C41466E0683F6437 BF3CB99189CAF2F3D7A293C5349F494200A88F74FC900122A5E6DE4157BB22A5 2041988C2E1FFA890A4143AAA8BBD5EEEE9157CE5CAD36C9A1B929576C41094B 1F4BDF445A6FE42CA871679B1385BA5088BFF264500DB66A1AEE0BF19810E27F 327D44DD4317C307C811C38864698A0F0F93F9DDE1BA1B7B00D469645A8E353B 9307B242284689AEE0675E9C6CE7ED473ACB90EBAEE98BE4E336CC926D952D74 BA108E306C78B1A91D07F7ED434F37B86AE93C52081C696B4BF20053B340BB3D 961C387DEFF21597F306C4B741A96D98DB7E7B8D835889C6581688EEB62F6E3C 163BE8E23A7EF73B87D41CB4FE29BC6D23EAF95A258B8FF77B832EBBCD1B4645 2FF147D8B3EAA3F930231FE68C357114E9B7433B34CC96AAD26540792628B506 452359AD152CAC44BEFD9F9660DE8FEC6D6FB19E8BD650BFB237E9501AC91ED8 F6EF73EE75E5BCACB151AF904AD4D476523E7504F0291AB8DDD14437C79E6B4D DBF914075E3568A4755A04CA0C42E50665D8ABA4D83273260D3020063D02AE1D 8FC05995D51B8C9A90DD26BB3C05A6EE022E69F2E59362C07D09CF5E337E94C3 6672053AAECBFE391F148C575A8C4BDC3EA5E5EC498D8B8C31733E0DF0638D69 4A5BC67021F8B3B32199C6A36B021ED18B113D6E1DEE67D7C9CA6336ABBD9E22 93C79BEDEAF3ED5BBDF5083A19705A33848918F66916F8937AE3E2B76A160487 F6CBDEA233B128EFA70896AB27EAEEE73AB7BAB3AB9F856E924D34DB474FFE9E FED841710AE8A00345D7DEA9D92D4423550B37F6D3855F22DA2D8DF65A99E569 B058C4B4BB0413B844DFFDFD665385374781CB3B9AF1833591C22D4FC7B71BE0 329E06E9610DB8BDCDC0A319EB45571B2CA8C1E7FE7EB46410AF9BAEC3867949 264F207EDC23D35E402E1EBD41B8FEA39BAF4A2DCFFDD6DD7B0F10BA352D91D8 07E4A7FADCB8D98F59A08AE999157809B208DF0FA06D47DC568DF681FF72AAE1 7B37FC433C7AEEC73AF11AD7EAC745BB7D6691B0920B2B78CADA825E0BC5D030 ACDBC0E9E5A37B34D796FA5A2DAEE16C7F467787D292BA93A5FF4DE374BFBBED DA7E28361FE2071F6D64FDA8F4F97097ACA617A3B1C0C2ECF71DDAE8478CCE80 D97ADBACA25E95A43084465EB30234C653F7266BBE0EA83CE96906D8C5D03F7F 8FDD490D7FE1D84E6BE16F9E10AC20709FCA8AACC1B8A8A8A566EB46EC51BAB1 3BF501E4B079468F08130FF0BF3D2B786F71543C16B7BB173B8D1329A2C65A69 C5ED57B225E7774F694B44D1ECADE5CF4A53B2315504DB62C2F8E2ED5321B19A 494103966108C3C60D5B246F8FCEE5007D4DD369C2E2CBC8076019CF8DEC8891 63114D54F0C8B58363E7043FB422986FFB468FB3D978A0E326D6967CBDDA745C 15348C665619F41AC20591C3A4610C4190100E753B621C08F9CC026BE5FE3654 E37790CEBD7F51AB4F187C19641865234E54A5720D419544E7EDD0D718C5592E EAD0F2363EC919871D7FA3EF55B1F89C176926F360586A5C8C5C205F554BDB1A D25A28E7B2335616E6AF945A8F4D81BC0B998AE317B36246B8361F639E308272 58FEC15DD63172C4BCE2C57D7711AA0109673D6AD7FB5935FF390A9BF9752B84 54AA0A4D5726691D59620F66900EDCE15B7B332BE3E198C3562A351299D0E8D8 F655F492587525A1FB2EA800268A800C8F7FDE34EB732312694F7180247ACCC2 AEE06ECBB1972DD04B35B46E7564AA7B265DD4E1377B9E3198FC069C67400AE5 C707F1A990985D93906B1FBF31ABF448C926AFE10242CD3C1B314598F98A899F 33B9C031F4FD8ABF398E13035EF7A1A3C1370D98F60038A508E7D86C06C6AC19 48982631E4DD41BE967BC5B1893A693E46860A9E0A3823A73B42F4219A80096A 04E7A736E423B0DEBF67C4E5DC0A49F6AE294B152C16ABF8426D3845D886BF29 D906492867AF7E0297D62911AFD504E1AAA7B9EFA2A81FE0C58C8A9A44D6BE0D 05A751E818DE653489C7A71932AD98C0F0DE2619DFD1C690F29287F56E14E2D9 2677C61BA8C6DFC1DB65B882C3B3D02964A9D835213F4E37EF48C61E45A3DA8D 17E7C45ECD56CB63F1372D99817A40CA9705A02785F9173509680DEF0A484A21 7DD6B88ACCFB9483E9F7B11F08B580B1C76C0D2B9337927694A23DB941C2EE08 A6E8F874BEC2F5A0E18845791B8297752731F994FA78F6D82EC09FF8EF2FC7A4 400DF95C31487CF65CDEBBD4BD866647510832BEA0B9D9661CFB8F513AD5954C 0ABB6A70841E230C19DC4E1B2B4F8D1421BC5D54782C9A6AAD8AA6CEA14D0A5E 0D66988D9CBA1B65D54C779BF5D79D5A9DAEC89F5551A50F35C316AF4667D96E 1B7476A500E6BE15C3525A5D7EAF873813D2207E1E5166444F1BD0D52427EBF2 445483FFF53E7B0ED56AD4741F99ED5F37E7141CBC1C23EC7F69A476C458F327 EAB3A290A1BB29D1BCDC1D2FA2942208E102AC9818E22E9EC10F2F3AEEF94BD1 399614049D1EDD94EDA791EBA2E8D5C25A7449941098425A7A911998D3F9F15D 633C05A5355167A1196D0C4340AF63CC3D268CF99A692C94ADE405C646D19F0B 0B1A8530615AFA7FC4AAB63663D90BC517A3392B9499103A4F2E189C57322879 839C898DAF180FF50CB64A3D5172671A2B7F3B6F22307B1B10D233CD138AB41B 945692D447F0E8228B337F45E3871A224466DB6BCDD2D9B857B2C359D39745C8 C1836665BD49218EA80E4BDAF20B5B889D1578CF0E7EB6FAAEC228886F530BA4 F2806B4851E34349A8588CADA96A3D70C51BBD3DC1CB0825C3B4E3C72286C053 D10BDF61280F27AC3DEF4ADB164FE4CB2EBE6E1155C0A437315CC818237C8AF4 FE4776C1306B158683FDC03838F66CB6A3618EA101BDBE131D8D77DEE97B10B1 CFB45A1B9E13E4B02A6A556BB8B78769A410F13BB0C3BFFDD6F776E19CA0F03A 217BCDB2EA78614CB68F8B8141F38FF7BE62D28458B5FB08734676B36DD03A70 A1843999E4AE5384029901548D01045972AA77AD5214FB345A7F47C4A7480A58 BBDAD39FDE66FB7B2C0EF82AC9A814D3A1298684923374EC5E92F8B52B1726E8 EEB56AF8DEAFBB31F4D1090401675DA4EB033C6905C784A0205D94F0A305F1B4 3255F47774576908F0C3BED7D3438327E24EC145BF5BCFABDBFCA47D40B77029 36431000A253860094BFD836DCF19E6BFB5FF75508CBF65FEA900382745FC2AE EF968CCE1C6032205871B023892F451474E5379DFD5F885E428FABEC1DEFCB4D 2DB98F261D3C039591905768B03BCF8588618F386C8B75F2C2B1CFEB5ACB821C 23474D93C05C07B8D88B88D0430BF19BF699C9D649C1ABA7A7B4FDB7B8E70A4C 8394B27AB99AB406E334AFE0050AC566D7695FDBBF508E93E7D22121EBA505B0 F1AE5FA3B8F32E1BA971585EFC7A2CE5513CE410748439522542F90B380AB0AD 9F1527055B7E2A559E1D3735128D02B96EA028FD5DA8727E33CE3822A44301B6 BBABDA3192C650FCD7D1F89142A5D47544C19458F86412D6DCFA1BABF3CF4A80 AF980F44F7AB893A9D2197BAE883BB672E63C3C00CCA363F5C45CE6BC30BEC6C 8BCA685F08F46FEE281A42C171FFF3C6A1AC5E551C659C6808E76FE3B7178792 1F94B67E7E100DA039040206D53CB9366F100A637FC14350869EB5D2AEC8DBBC E24FE1547A3C7D3CC0E8A48EDEFC323D31C026792AD179215E7FFA45F18D9585 6859EF48E7F6A90A693FF66A3CC8DB1C13A75E722B3CEF084079D8E423ED67D8 077EC4FD608EDC7FBB8121E59BD2B2304F54D6540DC186CAB44E68F342836E8B 559AEB63C74E0DCB9A1891F1D3628F5B34AF42617385F3CD3B28B585C21553FF A2E96A984B1043371A184D83AFA58B0600E291B50A97E114C507E56DF287386D B1FA3A1C3D62A89D690481412D3846D17D12224C971DFFAAD2F99244B3366EAD 4E46C7A4B6551ABC34B99543E712AADE0AA1D56E8EF3439A5BBA78CFF308AEFE 71C3292D3FAAB992A98480B3B553A7102156FC99CEFB5FA56EF0CF162145E5E1 18D263A6598B436C0190DB08CEE27A69D4F5A7B3B9D740B7C51E5C9149FF2629 BB8568FE356A82BD8B2E6905B03CF385AF23E961E9A6DAF1A7B2034A05608971 E9D56EB8195F133BC99502765EE811A4DAB4025733606A888224AE875FAEB9AA 3B2579585ECFAE0C90E1BFCA9727F7CBC87CF62D35C4AB3657235C3A46C38225 79FE1424CE94C3A3D64F1FB8D3D673ADACA1DC48A0E0726753818924A4A186EA 34B2CB2492D0B8A64516FDB920DC59E1AA8FFC403D852DC03ACEB1E33DCA32F0 737CF57D4665843BD6AC9EBCA63C092035810CCF5ABB9262737F2C256A4EADEE B450387F9326EDD7B4242C0D981F8BF9D7CCCE6AD7BD77A96058E2B9B1CD0BF4 C4697B977AD1422661E854176C6DA938D17CEE9F3A6121BE465803C51D56BFBD E8EC49553DDF8127F1FC35DB9C4F0AA3959FD17ED40E850DADAE2AC870E5AA53 662019B26B3E6EBEF1387EA4A60510219B9D0995F8504945385704D6FB4E93F4 1125F862CA15265C1FA66F440B8FB9E5B33433014EB2A517BAD771FA7DF8F23E 89CD3E58F89DF19776DBC3E5673CF190B35CF68B5934C0EB37558FC14581FA56 07CAF596E51991008C035194B7FA9F150E30B53A7B2117BFCE6932CB3929B2F6 87232470568A90CBBDD9B77C77A7966AE1C84FD680681AEC09BAC06E39688AE5 4DE2DB3CEE5F0B072865B5CFF15C835C9AF5737D9ED19C1501BCBBBE909F0EFA 978CBAFE5A25D203D8E630B36740B22E854CED07D73DE75FD6C1C0C80417E0FA BB6BC4AAE6DACBE26F499B8B69B958DEFCB7BCE7ACC9F5E058098170F4FB9E54 DE12711C4C3A03E0CA3C1EC7AFCF26747BADD5D594A901E31CD42DDFBC50655E D669003E1D6A34E98C1A37F3C2B05A0F4E331390D4BEB19372A91BA3894FB886 5868375664253DA120D2C094492E7C0E14EFFF97A9825F549B5FD8B89FA4CB6A 5FEA11B2E0293BA22D57FD4A0150902AA3729D81EF74D6AF88D6B2133CA24B68 FEC7E3941B884067B53DAD429CB7ED9FB023A5F693D1FF1EED9A6FF32F20F947 5A2FA756EDB6621DD7DF077220C96AEB910E49A2B4CCCF82A02DACB0C42E8263 7F0E76DFF2F21CEF6628EADC5BB5648BF82DB67FC39B0D0244A0BC0B30A59B8F 76A7594A3D2A38DC3E6BD9CD05354E6EBE00448D7A7B8A5C094AE8D756151870 EE984259842C8D2B2AE14D8E3C1FB010DE3B6996499A2426A124DC57BA152304 D2467D7F3BD9286F3EBD43AF7A51079FBD7770947FD252FA6264E78B48ACC9C5 CAA45D69784D107686B57E3CC94690C09B47CAE7845398B2C480A183A771FF94 39B68F3FC3DCEC7059DF57105EF23C92555131F6D1F5DD509E1B6AEB3A4DCEF3 4F6E660AE7C859139A1414839CAD6380155F907BF0E607BF2710C8F3743A3E44 558DD7B820D8B9634E9183D0EC8B93297E33C71F2EFAE552E2D8371398CA8729 60C6FE5B314600A01053279AE003D4470756977366467B2C843E267BCC69AFCE 5E5297ECB2D69BE6EA118D486F05CE63785E52956ACA64662A962C5148E96C61 346B834C2401B2A61A002A9738C28120BA7BCFF64A84F85D2F23792555C345E4 86A37AEDD3C06176AB27D3CDA4FA46EFB1897C5D8827AC392F28A592DC1C5143 13BA138F0D8B27ABFEE428D062538FE6BA62D2BDEC73EC3B830825E12E69D1C4 CBFC07C631BBB7AE9BC8F8BDB25DB7415C7B9D0502C734FBAB387E201D1CEEDB C5F72A9FF2328DAECFC97A3EA1A75E7C7CCF1B274A3829B9F71C3B1BEC03923C F6E1E5E32BB8CBE6E71A855F1A7FB01A6AD8959A4E7CA24AED8F8E8B50967EDF E32A69B846B22F7A39D36B8809005E70C6A148F861C9DD68986677F16FF78F10 B479132D9D5A4DEA428B5F2F360DDFB20C99B653F0F5C2B44472F947FF0F981D DA1317377C9D2B686A583814170CF417ED89686E568B1585A8AC08A5B6137695 B2518B04FA646222A16B167CFAA29A59C9ABEC521868DFF306DE1F11715F16FD 79F34C80F3BF298AE6ED20352AE60DC029C41552AD946C6CF7CB95F9E8B8C4A1 7107F9BB0C5C9347D4669F4BAC9DA73D798104C9116FC8E1D10FC2C01AF559AB 4A139BE448BCBDF113943FCBA3781DC6C0FB26637AF91874924BB9568BE0D34C 71CBE4CB7CEED092D787C77608D3B2EC8137780BEA416E72DDAB37227A75087E DD680558A48CB39B804C795E4CA1642149C488A97186CA640A209F1D4DFE0F8A AB95DF6289C9A8490D3AB5B7C2D9F869665C9E163A58F200C3C97983E8D52E0A 7D7BA1DC68876C3DA365168C1674B44A9F6702CE1BC29C5239240AF0C98E88FB 64ECD020A7063061468DC709BD3E1BCA4E93E3574CFC4511B3548B5B263ECB2B C11543731619C381177C9AC98DC17EF0F1EA4D1A657A58136D873EC2D6555B70 1B62409E24897A3DB5132039914365D529B476CC5587B1773CEA7C6BED50BC79 35A2D753876A555D29273A8387A0E7BF81374BDC9B68A4EEA07E3A3E68876AE3 3443F3DECD2711DE89C23961B364E650317DFCABD116D9E5E7476D6168852B8E 945A52C78FF81DA9CCF9308C08C11438653AF10D496C82E6FF8FACBC785EFF4D 42D053AC59E4E2869CF0A44B71AD9422D3C10F47DCF39CA5F57BF5BECDC098C7 D011468870269798486A67D03579A843222ACE77AD05B05546101DFE33B04237 EF34690DC25DF3B937113E46C233599F73B00F1C01DFCDC08F2138602C09172A 63B0229F92E494FBBC896EE5B16BC65C990307F74B506E1BFB8C22D3FC4BB714 962E6F057604B73859CAF2E14FAD61F427364992092D8CCECE6D0E51676BAC7B DA24651A425A61E74040AED70EA59FABA7035514A0F8FDE6DFB1B43838565702 17B9C8C8786D4C359FFF347DFE060A91FA81932E96C73FEC129D1C5024570262 FF1C515171973F908B4FB47B13A5AF652072A270ECF4A00402AA0CB9DB91FFAC B54DBBDBF179BD3E3A9B67A3E714F7C2A423A61F3AEC621C1D7E31C0398E4F22 FE8F979EBFD5B143C3FA34E11D5EB1688A8C482D3ED2099DE89BD08069678287 8FFCDAC7C19706F2288F51DF332B96106C6B7600C0BE4F8C89D013CD7D779472 EAF9261E10092901566EF875F29CE04D8C6D8ECB37A7096078BDF6DD5F25348F 9E39DAC89EB8A3DF269E7A7178579E626380EDA7E5D330B2639731FCF802E2E9 BFA9A87C1685656736F55EF3769FA1EAB28933073CB87621A6B8B9D3D2BC4A98 61022BCE0E35EF358D903FC77F8930D2CA2D663557BE3B573EBB07E2140779B8 9E526B45BD4896EDF8229A02DD4A48A0AEAF7CB14679238B301370C1ABB056F0 C37D9CC91141B5E855363E0E51345F4FC983345AB2057F726F0677C7BF6ACB6C AEF80CC2EA9C976206FE0B4D84795ED3D5A4588D0C90E7ABEC97ABCA62A18F8E 1814E2538564B4A07A82C6758BAE9E8D37DCF47EA9E8154B9299DF7A51EAC45D BC4A341307F1A49176F83486153168BAADB77B19D2B6BE161BEFD021722F44D7 1740E3687921E12D64AAA3744F9457E83A0F7B0459E7E046E29182F0286F38D5 C35449E6849AAE29E612601164437702FD0BF9BF2331612F3AADD906ED5E7F26 539AC3A8F798F447076200C0290D58C14A617D9A072FDF46123F89F21F0EA20D 71F222AF6AAB681CC9BC2CE9E1F37D489C73E8E628B0CE90389C1BF15FBB82CC 432631F956C85AC52EE619CC864EC00F4E631597691DFF1905D1CC16C78749FE 9F39FC04257224F8E8B41629AA9A71827D002361850AF30D1EDAFC58E323E361 D3ADCC591BDEA4D2626A0AD6903C6814FE57E782ED040FBC2CE140AC36336CBB C17BE07B5CCC863940CF36853E0154113D625788877329B9C4739F481E8CA942 27B2DE3588F60EA297BDFA0F3EA34E275455988892F060C98F91758EA4E0B0D1 7170E0C4FC9E9781A6875512E97E81B7373A9E352BAD9EB00004CBC4763871BD BD54D005815128532889B5ADC362B1B64657910FE5FA3DA3A8DCB70BF46C5598 B1D844B4EAF1AAEC9BB44D37C48872A9307BD5A5FAA4A4DFF81CE7D2952B9676 6126C65726EA85CF7F0AFADBE9EB077441F9A590F684AB98F22ACD1ABCB1B2BA 8B659E7716DD06767E04AF78FFD888F6BEBF6D950A42CB9195E69F18C9607C70 71CCD52A86C7A08A586B816A9F16F69941A08ECB1AE3CD0CD58F6F5AB5D5A8B4 165655F31B21C0EAC5BD295E419A6F3C925F969C2A605E9183F96BF17FD4CD07 86E04E57D07565CDD7841835BADA8EC57AADA52666BE34F2736B7015C1637315 A8B2CC14C4AC2C8509D32D5199FE6F293BE46A5C3F32A00BDFC2EF6F344527DA D36898DD9C5319A8617AB3E95814A87C301FD92EEAE2639CD4978DC8DC62F3A4 E42C0821F9F9178C3EE632D3C4E798C24945CBAF94FCCE65046E1C233B9D4A15 65ADD80B536709F0282414B62F5A142E08B52F3C21F014438B0FD1E36B9A7734 A6D9CA034080481D75E317CFC24F723F9B801401DF362BD4C9DDBFA99C6BC828 D03481F1EB9F767573CF5E7B3A22A2323EDE34AB5CDE29E05D610715C9723FB2 25BBA2FA1D2D7CDDC230CB6C49E52F3054D5D0D11613CB8A3B5D229A41A20622 C0D20AE3B443B2527EE54AB4DB3E1CDC89013D56AB754CA542F4F4C634A46751 2629264596717A9FBF6D3781809A14E3970B65DCE2C2957451414108915A803D 93292A2B802A02CEC1B34F3E455620AEC38A4F28CC09D835F42FC57741BA951E AE907E955DFABA52A9076F322B8F122351E85D75B99EDFF3D2D50059FBF2064F A86648300F3B78B9117ACC4B83F8AAEB1AE57A1F056BE2AAD247429B873D314A F4ABABB5EA4F9031F8CF29DBCCFAE1EB519D9C3572E4D2D88AC3E856F900D267 D734164AFCB4FF518AEA409AD3EBA59AF40E53493536188BB496B9247ACBCB88 529DF6DE1C453F1BBC597E43FF1B8DE2FAACBCD384C813336B5C11F56F368789 ABEB6C7F5758F356C6ABA76F4E50463EB728315DB7F6C64A6C9C890F2AD3337F 6FB7E3A64190D687003065D990A395F60505C5334CFCC4F05D7061288AF4B52D E3555C18F955D9C5FBEC3FD4F83C580E6D3576CC4E86F059D59F40152A454984 8BF8A749E118855B6ED6BA9E66316EAB63309FC2C597F76F4981CD56BB180EC7 1BEE4A8C9AFBCE06C7ED7BA126782D47474F91AAEF69C0D9EC460B44D3083ECF 8D93D7F22005B41477145A3362A0E22A47B50E3CCEE3693B8259A795F645A9DF C7AB00FDC56372725AE9B280EFFEDBB1D082DFF316E125358052E8BBC8C8DA6B 8DEFE3454245BB6E682F8DBEE76901EED818622974D66EFD951F003F6FB019E4 9AEFE6DC73BA878DAAEDC7329E5ED9019A6482B802298F4F123A3DB13E508C7A 38ACB631516936D5373AB9518D138EABB19F460E45C725E5BE52907093AC519B 3E495CF7078266468CCF9D9494A22A2382968051800791A0AC4AD6D5F6E48621 D520B1F52F44BC2001587154A8340542CA42417EAA002CA3328AC878AC6C8238 797C1345E2356FCD4FBE87CDC346EA0B830FF17B35C374F9D8A71451EA3A6159 8CFD6A39AF6FD5BF14A39F1824CF7179C92FF7E2765F9CB624B1BEAE7110F34F B1E74C926352B57E7DAE80C98E60ADEA3F23564CB6DA53E4141092E9EF973CEF 2915A6D0E5882CB9C2ADC2FA533B616A1874FC20A4D58A73AAE65CA4F4B6FAD0 E1A970C748F18D80FB0120FD6B766DD79DF40C3BD8A215F6A5A701F16C9982DC C6E18342F5E1B2331133DE2500CCF86137564CFB52A759B7CE851424DFD802B0 5EABAA0AF079E5F906CE3CB4B32D049586A09739B4AAAFEE980A8B608C62FB4C CED631546433847D6A103065F35190E73B45F78AC127AF9462CD4DC92B98E22F 0FE0780F1D6057D8FA051D0D54385ECE63C32FCDD8BD2E82208122C8B8C25498 92011D7F3A5383F18936E94F570BF307DCA1BF05277B87E366F30A79A2A7EEBE FD048294EE529625C7C10AA28694F3FE49D0B8790B39B1A7637E667CD5BB9D75 9AF8067981238094150A78CCE08B225B427932DC47779922EEAAEFD137E82CFB 4AA3476AE7AB02558ECD89D6AEAABCDB85F1FB4F4E318FFF3A9CAB4757EF24DA ADB33711E855A0E25582F10469F1B6C19089AF013C38F2624826A5730646 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.0: CMTI10 003.002 %%Title: CMTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup /UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI10 def /FontBBox {-35 -250 1124 750 }readonly def /UniqueID 5000828 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI10.) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 35 /numbersign put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 52 /four put dup 55 /seven put dup 56 /eight put dup 63 /question put dup 65 /A put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E 2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD 8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC 32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF 118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA 8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A 30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF 0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D 9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC 8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F 42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F 7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C 0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB 8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A 21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA 206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B 55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E 9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F 220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D 981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F 337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B 1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC 100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A 1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB 72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D 310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB 865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B 301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E 2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A 44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F 03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD 9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F 821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B 9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E 81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C 6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C 392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F 464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA 147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB 61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C 2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C 7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C 9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D 8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B 02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF 9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD 751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A 40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A 0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E 8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510 6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D 098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337 900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B 41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149 7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA 2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC A91885E7410F56F1126D6062165B9EE0BAFF28C2B54AB563630AFE4B69FF032E 7EAFC808A831EB41785EE4E3C12C9811617774408CD94DB0AA8DD8DA1FAEBC92 63DBB3C52FCF345D7BC202236296A90523F67CDB5A61E1ACED53BD1516DCEF3B 551577E7F11E3827F465279870CA80EA5D98CAB97B709C0C4FED927C9D39B41E 36C19D3837B5222166C447B82E7552DE05711B3883394BA9DFC23C023951C59F 3E09157F87CA9762F00A7EE36053F4A832A28378D5955C2CE2C8F166B7D18498 AEAB82CACB5AECED9B0651A8A70127A7B6D6928D6393D85151B69718F95AC98A C233A6E65D542FE7142C6AA82FB822F94DE028A8861FBCE564DCF89B36A5F1C6 21F6CD1737D52857A23FA98FAE8044179C39BE2C981AAB74C985BA26DD7650B2 8A326F8B92F4E100749B38E25A0BAE1E6F8B7F840771BB764DB8D1C842E89EB7 70D4FB3D1CFFB6FA3628B1EB9E2AFF32CCCD750274CE8B334FECEC14867FA5C6 E46D9CF9515888278110F613293039C095D9EC60165DE651ECE16340FD953A73 97D2D9A9FADCC0476CE9BD8BA1B75DD360765768AD37EE4DF66FF61C5E6B4441 A41ADF3961D7FD5E439843D2BE6EBBF33E39088B04BCF02926F77C1A39ADB297 BD5D35DA31511EBE5F047EE68288BF3DE1225D981C287FA9BE18C66C0FAD7DFC B05E178555E2314470BD7E64EC7882A64BB9D250F03F7C7BAED25968A65D96B3 74CA0F36AA3DB6A47670D4ABE210875AF8BB315FA9FF78D86334C0ECC06D253E F41274448210D46E173E04BE6A4C9AF6C8BC23B0EF15CD2CC48C2A03707848E8 3FD427A5DD934469483BC4D2EA360200DE0C9544215E67DB8A021F378739552D B24C4F81A5577BD4B2553DA52CB589C612D2CF587172584D81E4299189D9229C 35435A18684B1F3BEF88665514BED008E7005D11B94337DBB25757342D9DBFB2 E12DFAF058DB1C1ED509438C43FB9D02F684BB126FFE6BE239106C89C45F3319 B6E690C15DAC8114E1968CEED141266BBFC3A2BD00BB54727637A7399FACE0DA 2977A910FD39DF8ADF43EE8E2D9EFAF06BA2A8B41478584C72AF75C1818F6A1F 9AA65FF89B6FB3948163350EF370A1762C887AA30539A93A3C4612A34D5810B4 022BC6F585B621FC39F4A60CF5F14DE7029566695B046FE6245FCB324ED4E69B C0894D3DBA4946ED75E5ADE454810CAEC564B8FD0AB84BF6F8EB95AA878584A8 AB54032098A4FEE9040591A04A6B547E3B714922ADE46E2152F0E30D38E2B0F4 5385BFCA512CBC8FA98A881FD202FB6DB3661E4D7AFBDA0A9C68B3E100233507 3566814AA515708E0F4F7830ADADF8BE32E9C8DC4B3B12362AB3F22EBEDBF27C DEDFC149FC2490C4C5556494F33B1222B2A8BDECF18850539F1864D043EEB252 FCD825556C3B151AEFDF4A6D2AAE517929FF3295C5CB49E402CB349A4D94AEE7 D0340233835AC7F574AF99DF6CF36140547AEA1177C3E72A5B7F902B2459CC11 937221858715B4275551760DD4889C9D7151756896833D2D4CC1B563AB211248 CD624CC03CDC6D97547A09A5A07BA5465F4DA7F1578C4800C511C581CD117E67 B8385405D82F8FB3482AE33D3907D4B4AB1749589111EDE4DA3D87E7CBE70753 0753EACFC2DFAC0C375BE539EDEBB4FC3546BB0240F448F0CC4ADF5FC343C598 976099C5CD57973C469D20E6DEDDDE88194F7A201371A21D1214EDECCFD82F99 75D9437C4A5E9616A994F5C93918E4ADDA4B07AB4848E6D65E3788ABECA24F04 4F8D25AE3410953D232F7FDF66024636498F02ED7FBA9CC9F79F82E1B7366AC5 5AC273C5B044052117FDB74ACEF5C7F0879E6FAA363046BEB8EA001BA57573BF 1D6D1ED68C99DCC2027BD2215387D656267545FEF90E3028819199F3920689F0 6D412E412931A309E289CDCA60FE9BDCF363A678B064AA5D4AC2679BB00A9A16 78EA1AEA68DFCAE84CB9321D9FD05F2D761B67600D7F2AEC53509E0DB0167996 518A834F071428116CB05C3563EAD2A590DB978A395C56DA4B9994B74C3FC6B1 8978C77A5680FD5D8DE8B605ED3013A69E65112CEB206934748915856FE50D44 A35F1A43AA71BEE7E1A5683573724F427F2D99934009874061F0F2D21F399899 CFECBF9B74D19AAFF52B552417CC1588EAE7378A10FB16A3C750C489CC692840 55D78BE48C1EB4AE289562E5F4C92A6109694BA1FBDEBA30E67109A9DC9C060C F4FEFC31D141ACB05088083720D9B5CEB6E0B0166920D60D87EA64A9AC232F82 D31EB9D7B1B7E0041EF6F36D3A52085D572594197AFEB46F156BAED339161CB1 674C2F5049BA3B96BB1CB3033B333D650F2BF421DDB4792EA8E71D42E797914D 9342D9165825CBB1AE79EE198E57882A8A34C79082AD6C892461B623F6A4B123 B349FEAB602D6193A571887328D559DD659AA0502C17B68F7FC62C7047C194BD 74AECB533276E9E8EC6C3CA0BCC3ED84D06B649846980FDC54174A5A3B650F55 EFDCF695DEF3CA27EF76E4A4C5EBB219BD0505E336C4D29182A25C20E03C0665 6532C84A239B74E2C8E4608CB3B9FCDB50328C7235636C604DB757E31AEBCDEE 4905AC0DC98F4392BD4D1411E8E3CB35EA4EA06D61F36CBC420AD26AC71A405E C0259C51371B84D6993C53136217308CAA641B36C10F989F8ABE01AAECF992B8 8C6B78C42D26609960D62A1805A7A3B2B09FDC8FBB69FE470084E4F4906771FC D30E2D654E1532CBB71A9860E6B85FB499AE7CEA454FC8093E97E68DB4996E71 AAAA47C4F02EE2F26E3DE5AE7A6DE14B676A7642BBB076BEAEB1501E06E3A454 37A02A3D3382471BDC3EC430C10CDD7362585855D34BAD41C07767C8CEEAF9B6 B4B7CA465AA8FFCC6070B3687BDE633FE89BA26DB56338301882013C009077B2 60BEBC709F25512D6A3FF2BA0D994DF539B6DD321F4FB482DEFDC5AE853BD507 D02EDD830F08552F5D741BB84107500E9CF987BB0A29B77A0461C5EED6842940 B77F0D79A5D254A2B5229C3F934C4006CF6F66C625F78E4854A2632646EE8EF7 4A14B72316A8D1EAC8A21FE3F860C8EDD4169C3BBF246C255266348DDD4D013B C6B2E05768DF48B7429D63ECA02B05A5A57925226E2E9CAD63541ED15E18BEEF D51455661E1EED5D6DA7FD0472182793FB2B5BE229924C87CF38B24EC725C057 663CD00E889FE46AE205686D07AE5B33965485D3DFF50A8B3A2EC956AED6F7D7 C807B5F688764699AFBF769F61AE6E4BF4F02089529C138F4A650B1BFEC5D6C8 DFA1BC93CF3D6723D38BBC31FD5399A2C883F8B4FAD9BF28F1C4191092DA3AEB EF1CC0D98F50548A90EECB16DA59A08844447EED2D63BAB9C3069C28DC208553 1DD08E126DF4A00BB5004D9D8AAD1824B5FAC103C809DF341FDDBCF06BC3C21F 76E0423F23B05BC2992A139F1288EA9504D652F7D1D06C999C8DFF22D15616D6 BBBDF992C5C17FAE40AA7B2EF912019ED70723CFBAF27B64744EDC57BCC57259 890FEBF95C26B70F99766F4C83A2A948AD51053F9C915C705C719BAE0F3306E9 70953AD84FEE174E86EDEB469131A22067B49D78F457644893A6FFA8DBE120BB 437B7C90FA2F3C5B9651CD2941F56EB840235C32F34BCA7DF95C8795B6628A8B 3C765F67F0632F75096EA00DB80748ABF06EDC9EC8B5DA9DEB972E07DBFB1A1F 8C3690DACED8488F28F7227B62415EB3673B268A58EC773BC443DF5FD68364E8 C1964672ACDD8691C9F91C00B0967FE9AFE7AACE371B05138C1DD7BD662A646A ABACBDA9B2B3151D9F89D083CC9569F572C308BEAC4D49AF247B388A7BA46964 192576CCEAE3AA57112A77C12FE11F57F2D583C87DCA3A044B3B12D4F373228F 073E037AC2D438AA85F5641A84CF73E4076E4D6D2F940982F1C4771C0026D30A A36E3F227DF40CBE7D4A0F9EC3BC21570D5DA176D548D10F813095C5B91657FC F5416BBC2FF03C4B0A6A22F984FB6971E9F9349F796FFDD630E1658EC1ECEBB3 40CCE0D73E5DEF603D94D59C16E7934A7201C88C0B4692311741A8DE23156504 0D54FBA5C806D15CB8035CF748E5D8384A2E1456EBD0EE1AB65EF229652445FE C16890F45451B588F3CF824F9A414DC478A3F24EDAA8E09FDD4797C27F5B0424 4518720653365F20A81EA53FA455C32659A7E4BF94BBE5DC530F81E85908CE79 6384A40D80A3D83028E1AA7095B722F6B65FB5F26729B29C5B6A5D0830DD0C92 DC947A6D893C1BDB00C7F0B91235B444D1E86BC52042FB884947DC73C0605E6A 8D25CD589663452BFAEE098C4148FEADA367BF31ED7A9860239C757D9D2876B4 08A932C4AB739B3DB95A7BB91B4CF06B3048398E3253E1C0F6D52568AD38D559 37083A63D66158D4B65B5990F69DC1945C2CEE025D7F01323FF7159CAC7FF02F E2145B54EF031367096A7B6AE671A6CD332695CAC8B50DA80B02BBF93BFFB48E 10F51DCD9B999CDAD0066667E04E3C7434B50EBB159789E7AB70FA658D79DCB4 A0996D5D9CD7CCD172491210A371CEA0CDBB8729A36F4F2C720ADBC23EE20290 A850E4D0CD75D66320FFB9CFB49B5ABDC8CB93746E61204347FABC42EE3882E1 8F23CDC830BFDDB8D20DAF74671B224DD074EE87339D38F9F80C6A0356FD1260 1E4D8961436BE59CE42C13E47FC61D09F44A311D2961A93304F76E4B1508FBFD 3BA5D814DB061FEEBAE136730FBDC88C15029B5EF3FF47117E5E9AFBA77F2085 6A3F5E46EE5DA404014C157ED8E8809D203C9F1ED41C451619A3B8C114DA542E 1CB8C3EE85FD83D22B8ACE95E0F02F99CBD5DA9E80E4D13FFB83ED8746F7ADE0 F32A00E990E079B2D8F20520F046527A10309AE7DF7F2A1225E19BAC3BDC21C9 B15A77E7C9057BC1AC813701D5896804247DFBDCD7F7BC33B34BF3EB98487A00 4DC83855979DAA8D0D58B5A30D204073F9E651A8B385A7F639C7D94CA1D98FC5 53B8D5C6A0CD17404B7492CCCC1FD94AE98D02ADF163048518CBC72EBB7FC555 AC525886ED03DF470613ECA1DC6828929C97BED1997B2421723E5D617FEE1441 F27094E80B3F5134340298CDCC50B38254474923F0E43DD6F12C501F954E064D 77BF335721FF071BB99D06B1875E86F327F03ABFB99B454060EC95A8EE84BEC5 F65AADB85C7C50EBCB7A05763F9D4A4E0A30ECB2BA0D0F927A81D93EACE837EE BFE4603F5C6DD6226FA517439F0E94241CEFC11E7AFAE55A4D3748C08F93FE47 21778370C6BAB6E3B7A880DCD522DA7A9F96BC252D6EE6D61DDEB85966EFE10C ACC92546D1428F9440857B76B09DA3FF21370F1908B9AE49C6FB02CA15F9AFD0 68A8B20B2CA179E5E3B62D32814CC9FF04AD11BC5DF29FD797700B0A732B877E A2DED6D62F829FD1A7956BE4E266B989CDAAAFD30C2508755705867902CBA455 1C7BC81EF6D0C6826629A29613727DF4B397427BC9BE7D4477A13016984D6D7A 4A6793265431EDC25D59936DAA8D1F2C55FE37B7E368D4C50A405EFC251A4A2B 49A3E9CF3AD8484A263D97CE9AEFBF6753E3B8EB7AB0455213FF42BC1C0A394D 72B5F3D86062CE252B5EDD7B07D39E183289D5D52C36910DE8FDB4F39A7E69EE E637066B958DEB7FC0F0251E7E159D5A1BAA54A970CD3634616CD7B34787DCB6 CDAC30C19FA1A23E705E64B466579DB601980441FAE4FA6B917C2D19959B7565 300D1B332477BD523E1F558B755B06960DF734AFFD73912E49C9F64B8CB17959 E3E12C2572C8888974C8FE6A8C62B984707746181DBFC95C81DBDB9DCAE90FAD 79C3AAD02F54215BEA67FA28A37BE8DCBFF8BB687785F1E7FE4B350E17D3548B 665C88F2E2DFA02C2FB50EA96C81E6ECF1CAEBE7AC9AF321C973F9B2E26B899F 4F7C183B5B37F41C7AAC29782A9E2655D48FAED4F62A2D033AACB03A872A3822 CD2015FC3048E14C4BD7C3A6B4761AFECDBFC32992703DE90F772D4B8D6EAF44 9A0242D7F7EBE7287A4C1BBAE641FAD0CCE80A5EB8E90552FA1EDA8B81AEA400 F28D9B0874E29A062CB5462D378069C320528173CA325612F1D5B75DBF422FC7 1E0CAB719F6B84DFBC5884386BB87388139E91A29CCA464F4116EBBCDB2DC6D5 EEEE28D4C51B16B8FEF898C2B0CB8A1E2AFE903BD3C0762BCE6DA4B6CF604CEC F5AD5651ADF0B351AA982BD289A78C1BDA33A772BDA8182C527BDC0BE923A9D7 D6DB7AA59B15ECD362F083E4B56FB81284ED12492CE0A95E0F851B3B8685CB05 22B4C2A2C0E0154E543BA368AD6DC72B10A42455F6663CC321336F12AB235C93 F4DFF53BFB41B66A702688EF119B66800F2BE500A049EE007C10E0725B1E0651 E2DD47F51ED2C5D83434F2F18A144C090F261AD5037D79B7329A7F6AB7C45681 ABFDFC58D44757667522E0F17545FADE11B887B984283CF8AAEE00D4DCC8EC2B 676EB8DB02F4AF9935042D8CADFB6C95A3517D444C7A81B5472F10F48F95431F 86058775CB86D1F471BBE370043C3017427B3637F775318BC997E9B7CFB48796 FDB071732F8AF2D7380F229EFD155304087299B629047E2C1C2C1BDC648B36F6 76E5028419C007D002A3F196A3CB59C9AD8A0D75B5AEC0718B6D42A8B873EF1A F6275E32A253E1992F3374831E6897BCDF8DFF45165E55F751844BF225FA77B3 48FEC00CCF0E0EDEB2167FFCDDB58A312E5C87B6F16877FDCF9461B7EFF5DB16 DC776678AC26FE964E3D357976B598C88E9E38FDA99C82EAA92BC1535BAE4B71 6B723A08A38CBCBCEACE7A423605620979EF5CCDA7B6773F9DD49221F9DCF424 C700A4D5050520ADD22FDA8ACBD61EDA6807AF913F9C99FE469C075B9F91DBD7 7B0BBE598B4AE46E1C2BDEA679322FABDBFE50156649C13A81FACC3BC685202C FEDC57DBFA7921C91F0F476BB1D3ED58811A2C97D83540C0F3760570EC9A21D2 9043123AFB9E93764ABB86E559ED93CABE67E2EC8D32F47160704576C8BCFE3E 46C3928D5B9323EAD623C9D61EDCCC17098A2E78F05AA7DF5CB670C8CD4BB94C 9D5E55BEA97097C770BD25BA10C5611B339810FB0172978D396C05C1E5032094 254F4F31E97695B8376814FDC600E8EAD2B75A821B8DC1D7781A2D371149B0EF C54AFFA5BB3FE6567986B62FD7D4F32CE11086ABAD1B8CC9CCE8A62F87A86A9D 0721066E429E06C724DBE70A60B6127438F0A60D7AB0FC949D34017DFA0A64FA 2672D57B22AF098B350BDBCB55BF925F3DB3D2FB288D85A5BB11B39A049B7BDD 95F8E62099CDF6FDA712A2A4E2A1621A4D4298E1A7654C1BB5BF603049951108 30A6CF8041F142527ED5C65F23151F1BF2AFB69847D02769C92A55E07825D6FA F79FBDBAF069D8DFF291B93F1F30922DD623E1B5D0DBFE5913D32747B83B2594 FB1DB5897C82618B4F715591CA21C44D1CADB6F31B1D9218F46ACA203F92306D FE612047BEFF1100A052D5F0C31937EAD4CD80762DDCB010E58AC37DC09C117C DECA1F49614EB4E92CAD25B69213104182FFDEA5524DA0F50EA6D140E1F3FC05 D3C1CA2602D2FF4FF0CD3847FF5608C05BF3F23D3BC23E44022455B3C36D01FF 34D6CDA92738B4F1A6ECB2023202AA7FEC4E1D7BDFF188CCA631AC2CC67B3072 DF923F6397055184A344B682DCB33CC0005C07283661D1CDFB0136C201D3C57B 312B3E60D44815206A49DEEB502AD736916D22E25FD5F767F98D85BAD3D25FC7 4B21A346985DA55DE02A4FDEF49787E6F9A490AAC01ACE5DA155BE96CE3A0A51 A905AB96255DC6DB996999A64A482A5E98676CC4623DC660E8E03C64C75DB982 1D006F3FB18CF7B2FB50FCEE7B1C35E8DC75849F853B75F9E710E4796373E5DC 8EB6A65D8D8DD6C03923F1DF707A5BA3CFAC509A99A6C23E6E9EFF77BBCD955C 15B07F0C0D5F82B83F25FB9271692EDC7694FD4396759E69A501D4F7B766063D 7BB7A424174E9AB8E92127977BE7CE25C5D2023413B7057AE955A4149653AFE5 DC0DC7B3E03CABB134DD272AC77EBA8D704DDFC6310923BDB4D36C9B82F9E911 094A13E0258AB6D9CCFCF323AAE5029679832DF99841A2FFEFC7D14BC575D236 E4F2CA028250FA336DAAFC43FA0D4A2BF88D897992064FDE911ABB9ED06C0D64 66ED24A1D11E858BF31247BA0BFBE41B26A7F0A5BDB23C03EA2A8204A6A8D526 ABB8B3E95A8E95FC595259B8625BEE0307CE4A1693679856362C23F1BFE63D8D B1F4C7476471C327DF5E61C2E073CAB98C37D861F9B842AFCB9400433C887439 4B498440B1BFA6CBB643C9CCB0A029950B1368F8D16D98E0A7A9A03439E89D76 478D053C652F3CA1075FDF43A2D8A91817D04F6614C92C741971378BB9A9E3E2 47E7F8EEBC7A84383D23BEF70E646F69EC9AC903C414A7FBA0DB43BAD4DD6488 44F4B6F15F02AE33A266F3D7765E93DEC8285547F14127DCB74951C8B10BC04A 56833C79D7DFA28FDC0C62EDD38F10BD2775E93D75224CE1CE7AF4E31DB7CBC6 0C0B24A7B9547F63E6C92D4AC95022A7F34F1BAAF0FAC9CDB0BAFAAEDBAC813E 4846A59C4141E1B1BC688521CA2DEFD78B6B8AD4F539EB3F50A8C2FC1D4EBD2C 13D268F1BF8BDB634B75398F5E1802C173E615E4FC65D20113B470A07B3CD3FD 03C909542EC5702CBEA276CB298D211EE257589E49D39B26272F14CB4B7B3F1B A78572E222C51713E07EF6256F2F9F65FE482476538EC041F3453B61C110C0B6 9D29DD4DD335396B5EB087F4FC2804725EBAEAFCD1B993FD771A2AD5A238AB2C DFB3CA4E98EBE302C26EB9C7709BD730922ADC8E942C5A2AEBE678E26598CEBE AAA6D87458CCF29DFCE254A8DA17F211FD69A3C345C789EDCE912B8E5F2EBC7F 5D19E500FF5B8BCB6E4F3322FEC0097DAD4215132779E5BB6EDACC232C4EE5C4 F2C6EBBF632A8995AF8EA3F2935690695EDB2E3C42C65EAC87B8921E157D91AC D07BA81CEF8A16FD8DD13721019AEA82721E11B24C80D2C9093E6478293E82EE 48B08D40B931A26D7AB3D5880F499706C28BAE6FD22AFA0F44D67A6FBE41B1F9 D253E28C6475F42FE2454838D7985AAE784F057D12A64F7DAAFAAE819B869C47 C4D1A19DBEC3755BD6F79CC8AD81428469C5AAEC89EAD256D611259ABA62500F 5FA4A6B18AA0F540AF4F23BBBCB6BCF4135524CDD43CA15CE7EDF7DF75D8349F C3DF2BD5506314FEE38B79D79BAE38FDAD2AB5CA326A3AB579EA261E98023379 4274CD6BF26C3176947DA23751AEA2D8ABFE3296C28182DC66F8E3E037129DB1 749D68EBE9A1160641C47CFAE613FCBD36179E5DD00253946B26C4BD56300512 A21273AC9DC29F9FBFF00F0BB1624831BFF1E4FF62B6C80C3C8989FB108B9DB2 112F5B2EBD845B4C644FD351186C536DB3A52F08AA0D7A911CFAE6CE08368BAF 561FF2AEEE75F54F413CEEED43BB21C91020B90930BF45010ABD518AAB2D97D1 099EA685FECEAA0644017E73310E0B9FBBE13F929BFCE641EE60D355435B46ED 44F9A1EB05FC38175A4CD5F4B39AD5F20490D11CF2FC8CB41B12BD73B4C4A153 B329F466C7EA3A3F25670C2EFF461C31FF7C1FA993C8B7DE9BE1B7348B2DC2F5 075F19976342F5131EF9D4147DA6154AC8A5D45F1BF87A4BF364BA3DDD709F8F E7340F08F016A24B29D3B42E48351FBC48679A91A49E902467D86D1C4622BE9D 90BE94DBF003219BA3791CE905ACDC05669682ADDD687959DBD311AA322A05CE A9236EB023ACE21FC765D0278E34AEBDF29E7E2A7C9EF17508A5B22562690703 439325AA668EA3651B54CBEFE48D5E58C187E6989A0584873861C096D8AA629E 4E7E0E5D864D8B4A9CA97BAFED55545C83E89A4A6141717E02366D0719D44334 BD3C0A7E92BFC92B6DEA97E79A3EB100B6940AC134345461D9791A482D95D56B F92B110AA01F5FFD95A4005442CA27F133DBE050D6B66D477C800BE2609CE59A 218FADDFF9B8B9ED2410210B993CC6B3AC0A1A4DAC3A74913B73961B830F3988 5EC0A1AC64517ECAE420FC5A5C42876686B5C104404D83FFADC83696227014E2 04565DD25FFB76AE910280C303F07ABE6B00C67E3BEE319C08D5122283CF5F40 AD5E106E49F55FCDF9F6B6A1D5F67D6E6DE5E810E8E5324AE55F4ADDB91CEABE 734C81A535BF6EC2AE023E2467C5EE36FD8B6A258602A6F224CC63BD98F0D9AE 22E7B00FA13D1058350B43FCC3D3A6D27753327DECF0AB77A21D231F7F45CC93 F21CA3E9DC2B7307736D152032A0A44E8195A89BCA98483635D6FC940596EC16 4A1C5172E6D0D74FF48C42A03263C7C76280ADFF2BADDF73A27BDA2764FDB1D9 5B83BB1528626B3A292721A08594218EA2CDC5D0148352E1576A7D9B8A7B6E99 935D88C30C7E8AA4CC8B245D786D12989A92B7BC0AF223051BD4E43FE7DC39FB 595DF88BD915B108919C73ABCC4B983E08333D70322348A466A295AC4D1F10D6 16143EE14C636219DD91870FC0DEEDFA3188F9FFFC24CB810E21979703804B0F 7BCD0B0A8104A88C5A364A981CD13A437975D399E5B607DE58263FF2F499BE64 7C0DF79A9DC92A4A459BC830CBCDF1C92EECD88D1E81C968D17653143F6B9B25 C4FE737B8A706A3C555F75EB6840586FB8A2FAA074F7FACBC984C21A88674B6F 128C7F924B3D1C5CD9A8107C3A3F6F969B5524A03F5CBEFE1CD030A1A4714E47 718942BB881B81C465546D6E656B8D02C0B5341C515A3D0F23FE147294008CE1 A05CFCFF6372B9DCA45A1EC7A678E25E68F88A5F7F7A7738CD4BF5CA3DE282A5 C5B3834870D571463DE08D670E2E8B956B614A8555888F26B9249FC5A1BD3BD7 54DDC448BBD5B5F38A21A3BA580DD681FC2AE92A4C0E2F7B2D99682862089B04 70682C446EE36F4197DD0494216043F257581CECDF8910050CE3BBE993E2DBB7 8C47423CFC6663B69567B370DF1C1123888D1EE1F3DB762F4814FC03E3B432D3 54221F2EEA5612E4E99BBCFC309C74175D3A3ED672BE36CB3797580BC4AF2432 1A4A9B9AE2FC03BF139E5CD6919ADF2E9932061FB0A09549F098F8A146286D5E 4C3BFE21B3F179030E4112A04D95CE3EC0ED489193A7CCCA87CFA5A55EB78125 48CC73819DBE85D4544F051560539CD45DB75C4BABA376FC04EBFD9E8B9E97C5 8BEE315272C1E7B23A13E995BBC92493C231F24417192FD455BDCE52FFF81354 187E9B2279BFB9AD85013CE56FA2B19ABFBCB650044EEB7788F9A8307D98B44B 54FFF8ABB34B7E523AAD92717768E4FC31E7BC129897F4CDEB1B4AE020AFE9BB 40CD5DAA57CC54F400383134226A239DE97444C6E3BFB1853C5505936CB997F8 B6B0C00EE8A558D9A32BB8E8B7A68B03570EA3A5B74748139797D80E6FBA5023 630C234660BCC598E619F81C5E1C0AF65DC9EBF6836744264AE8ED5F5AF73070 4776DEDD8CB845347272BBC4A6AA44909971F56EC0FE242C4A5DCD240F89D6E8 AE448929C068704F6ED414A8641EDA2BFA5903FCDD33E14EF5C46B272229441F 86207BBC18760BBA6FE3C1E3A3E02E5B5A05F13374B4DD30F2C77EF6CB691FA2 58EF582CEA8D6D8DDC25772DE10828B257ECD48418E1B48C60F2ECFD724E9D2A 96BEEA0AB88F956E8F5579A0A84FD2AF6C1EFDE8ACC8C1B3ED8BA4DC7A43E5BF E631E10EDD219E52EF4E92B5157E35D272C50B8BF533132D7A09044E36424532 16BAD43C613EE2F7F3816DE3C365BA88EC832F0FAB40C670E79D200D43037EB8 EE2B8FE22F76BFDFF0571AF5E42E415D9AF83CDEB280FE890F129071C11BE783 E533C2BF5C504EE3D33A8B88E59598823CAECAC3CC55B16AF56BD7A604DF7286 30245EACE0C9A33B5DA2D563286B144ECB821FCB2F040914451A480C926D23A6 51E226B11EBD0690D683A1E63106627C757FD5544EAC247F52189DC630587D93 D71BFBA0406FE3558CD83BD2A44274C2A88CD1BEE55DD6870B7DD20B8317C2A4 A59CEC3BF3717B04CD12A421BE110889E88A2A8BA3B27DC67814A7178B115712 F9A564342A6AC1B647DBB210F332AF934D9C7EEE8FA0F3B57AAAC9D3205C2A0A 45DC0FBADE7273C1CD7EC699C7008C20CEBCE7DE99A829E925756CB6940D4D99 AD2069EC8C642D562BDCB0A94FCDDE210611E0B4AF8385F5F28C516C854FEE3D 358E076A47DB51A62F3D78F7720BFED8A723635235849B84AA2466F43213FCEB 16F71B4C91918EB59B5E1B0B007B99EEB148FC638E47CB8E56B6DF379D2640CF 932EB9EC9350898E9255BB6864E2BFA64DB25145B9944347CF0A75FEFEF50BEE 679C2524FA0A014C602877FD2C39378469465C4FA6DDE89446F40437E463CBA7 63F33C2472E73332B5B1AD026706EA2A18E8B45FF98E219B022121511CA1DCC8 12FAB750BE22B369557FCD281B583E14E3054DE379B4083E347F048751A77CD8 A2A51CD1274CAB78FE0E96554393F908EC80B05BF6CBF84C549A6B81C8C61803 EBFFFC15481D635BF390C3BBABFC50CF8D4FDB1091385A2EB7621DEC8701F09C C552E76B710321FAE5AEBD4F8A08310C935E2E592722F29D359CCE78E8E18DAA A90122230F326ED3DB1F641A566DAFF19609CBD66CA2857629A97F5F46FCE4D1 E8BF5128E915E80E9A3B45D53632834A5A96B889818A818FD4B9143AF92EAA01 1CC06803B31E052C568DF6905BB8368FF7A469C3C217E4A5CAEC61A66C25A978 B757E5FBAA675CE99A9D1503B59FE6059E0ECBD3D1907C3EF7E70ADC453AB525 32515FB2EBB7634BD9BC7B68CDBAEF7A2C5B9793CD10EC628E0462081819FE14 7D626E244F427ADA1D39DC1227DFA3D4F9031A77337A0A40EB6CE7F8E6D6A732 069AF7C1953E035FD2A6C441D9A465E37BFD4C80F3091BEC871EC780001B37BA E5633B2A4C0714260678F5316047F635151AB340CCA92A857EEB83B78CE6FE01 7EB27ACFBA5FE7C9984BD1E96EA0F88DD948AB9D3CCDF8AE638410C6F409B2F8 2669C729B7D49C12EAC6D8CD1F239E817752B39C63CC03D8E8F4B12338540D28 0C9D23B726CEBF0FEB1725360319CD3B905EDA048B6A3EA62D7A93E66DBF17CB A560B1BDCC8663053AF888CF0CB9EDDF4EF9EBDFCBBCD82D6FB41D2781536F2D F9F47B3E91398FCE12CA1022AF269E4B88E72B6A675A9F4A70975A1EFE376F2D 9BC27667F619375BFD0412B56364E5DFF2BFF00335D1BD25B933CF817F779517 CCB36F12C20011FAEB4297FB5CBEBCF83CC0D6148680B856FC7982D36A0DF6C1 9EA9BE5EA19272B066B68BAE9AEA8C6D3165267BC500E6E6F69F33CE9F297D1B 052B968F4F27244E4FF1A4E03B4BF9F45AA525EF76382EF1503B1338596B6B05 9B946C26088E390FC9F126D384D7534B9E8584C3C16B38288A236B985B64576B 20C34B566100C0DBA21E997297CF29AE00CB793241192FD9C14C5A2561A68A75 2273FE3EE1DCDF317035EB39E27D60933AB64DE0DFFE1C0140029E723AE8DB25 1909F08D9FCC1050FF9AF805BC3BC486F819BD41030DD0623685654D7BD78B9F A3F1346998BCA5BDBAF08FDADB324FFE674C17435DE6C8B4E7CF9732BD12BD9F 7DF826C03487E9C3B45773103E5DCB11499EF966A0FA45A00CE77F610AC76E8C 8121ECEC68738A8E750B56A32383BD16DF3A737C25584F974B3EDC224D28AE83 7755AD83509BD8851397241DB71786C73D977640FD7390A18944E6F153158FB6 A688B261AB3C825553FD4FF8675D1066AACF7BEB5D4034D451F8F292497C025F BDC488617AC3E4977E95A4B4603BB441D714C1251E4B22961F8B6541E204D1DF 1866D3E1D2EE4611DF0AE68645B36C142E011987C935779F6DFA099975016CE5 4271E120803332960E458AED47064E1E35B235AA5C5E5B98F5B08318BF746359 113E777AFDBF0F6032CABE52D667475CD8200A374788F88A16103BA201F79911 65DCCAB03D2CCDE3AA263ED92D266D5FBC4FB8471D19E97BB55DE4A49FDE47F5 5C5F0D274B5AAA23B27414173F32683A43D2E10CDEA2B0020E99630A04773F46 447FDFDAEC2B6828A723198BE56DC0731BCE86AFC30AD7FC1CC40A8D8944956B 7E83CD123B598D11F65C4051F65D0DCFE08F83707F3F7554A8B463EFDD48A234 16816873772367BA4FE5DD162373AA48E1B772256AF0E2C3A977E8D5A5202561 52F7A86FC5E3D51BC9923D6236A3D91240EAD018805B021CA21F2C862669CC08 A33F82F32D706E8D0BD4C80DEF4A96F9A6B6088BE1898DCE3B8C864DA99A57B8 372DEE700B3C58B955F1887B0EB61F231A58DE0C4FAF67620345439AE40ED996 0C5CE66809ACD3FCDABF4457B22D67A96DA2166369B7504825D9E09440536C02 4ECA9742A3D7A3C9D4D7F49E99A0F145F099C01EE6898670C81EF67EE9D59035 7E4A6BD905F9012C5A4CFCAD0B17AFC04292D7B5E625E69127F5AD143024CE55 EE6F578C13E9EAD6EF660B6F4427A9F405CAAAAE7C159C3CD2572E02CEFDF6F7 B6AE3AB1298FD6C7043F2C72506576ABBBB9E737F0DBE70A365E453709B091F6 26CA61F37A0C6B2B71081536C52663B8735DB22A3C180682CEC8AF8804B34351 47F7BAA70BF7915CF0970FABB5DC666E9F479AB7E55A76152927388D2D873A92 DA7C613DA219E868729BDA631DCA5B4C790AC3D8B8B8664FD6A36B405B1C6A1F 2EF5286EFFE7D8FE6912A34D8654E46D640EA1D8ABF0E2BEAAA19616BD8B1280 B1CF82E4EB9BB634444730580A92A676740D69B6C1223066115B3A9FFBA08A38 3E04D268F76BD3A2C55AED41ED2DA38945ADD90551AF96293DE0C909205B8E5C 7FFDE9CEC149B84DC84256134A5548F71A38B32C7AA7B2371146CFBDBD7CA65F A0CC7DF10E1030F69E630EF07F9C956712E14680C9C1C0478F2279E72EA818BD E796F2F2F78AAABE8FF6E50B7FB5490F3E87951CC69007C7104FB68A522D310D 4102BEDF9D149F7A3F91DB15FA361772FBFA8DC1F4D5A24DF4064E80A70CDC64 09D5B43F95F7A907564C808B3A714A25C164E6EDECE783153405664D15E1C604 9FBD18F356E9F594CE22737AB3B1E162DDA183CD79807D126E78DE25678DB394 57BA581E72075CDD048A8585B570CB2BE5ACDB748B52F95585D9163562E077DD 547C5840F07D27EF2E8907E74DE9393A8774AB7116CAC582DA7111791961531F F5DC8E83641A32CEBFD9D4F08F1D0505D5C26FFCA54663DF4FAE6EBBEFA5A054 9781F043B067B005EF571D29E9F9C5FC468EB3E45F981006C25D961DBD99F063 ACA35878A429D76FCF73EDF7798A4397FC1267148F61E3B3F2CD2E29ABCD78FC 77876B1F70689642410E859AAF8FCDE27A75A7EC62F2C6FF0FF3BC227F4798E5 E37FA47FCABFEEFF05F58C660315A52F52B50211A6F8AFDA5F7851D908D470AF 2FFFE19261718D64742D7FBEB18FBB7B1EB9EE0C9002B39135C184733DBADC23 357DCCE7D2978D97D1AC4F07D01755EB052A83C30DD704E3CFA02DBBFE13C624 B42803F986E7A21A5992FF1631D633767CC9B2136C01A3C7BA2E29BA9C247EE5 044D601EF4A2682EE5CACBA667358A1D0D17E6A8E1B22C560D84E3C3D2104EEA 65959A77E0592A390D290062C4DF03F219BD83DB56ECE6D7AC46A02CEF4FA172 064408BCAC23EB5F746FE53D7116E41F20BE312E529C3B3B2D643FF6A3D00BE4 1597DE11E7770B3C55C92E3A00DFF104AC9BF9759509DC6CBD02B9607C3F340A BD292A29F13DFE2D8B6CDBD62327A0EABEA7CE047CAED94A24FA1AAD0E36FCC1 7DB89F11E53363B8EBF81E0AD61EED9338C7EE9B41C2056DE0B3ECBAB10F1712 766F77F31BFE9A0EB3B3A7E285195240000741783B95B3090897C9ECF50CE352 3D6D02E10688EB4D0C350D50FC6CC2AF922591D0586BA67C7AC4971299AE49C5 DC4A3E0FB46A28720C4EA5D0A722AC2F2CA809BB4D24639B2E28165F9443391A D11FD45487FE59CB9E74B58726C334B83A4B1559B73BB491921285ECD6D32B6D 2D8A8BF02346ECF628DD774BBF58B9C793B9A4F6FFD94A1AFB3EC2BEDA87685F 7C9E462FBA289310C937EED66B2EEE80E95D9CC54849B3A81BA116F7F5FE8DA9 540D923905015A9ECF1660846222C525EE8EEE36E8B35354A89C17E6239BE2F2 D5A4641C020219156FF9B33C8FDCF2483C9E83FDE3C7D697B7FC988576130317 D9E9E5293C9D115AB10EB1D2DC48B10D2465876592E1B8F9DE4BDFCB339D3DBF E6D110388E7C2CA43C281504F461E85A07F46BF7E542DAA53DECBA7EA7863C95 6E62003C5C897DD595BC18C42A4D493FA98902B97809FD2C2609A640417FE6D8 09E3D6EDE442B886428F9EF9357ED6FAA475CAF5982BC87FE67918F25443A079 074C57CBDBC68E8753F20906793D53E560154E827BE332ADA28BD3AA30265954 852C2F297DEC133E33ABB28A0F8B7F2F58C0FC3CFD06FF3B7A022DB91C4ACA8C EC898FD5AA059294B3F7808EB2C4C21901CA92B974F1EF6A95AEAD45E8EA7B49 17579AFF3FDF79CBBAFB6A71C6647776F15EB10620BBF1B08AE89EBCB6A4A734 0D53192C4834726309838EFC130BC9E0AAAD42CA8C4E3D5B97E3785D5EA6BC71 74BE219F143F6A1242A4B2587A1AE86580BD576D678B12DB342E7E366D3BF1D0 FAD28FB828B9B9B817ABE04DA31CB7EAC114055681BFF158DD6D933C31CE86EE A623E25739A0297E2BFD7D3793CEBA477F9EF00EB27FB58238D86F948C10DA20 DC682681CEB2AF9736A016AEF44BDBD701588B546D5C93C01383A6E4208B56D9 1C6B37BAFF17A6D8118C14B61B1D14E945969435B7A1A0CA3E417911222741E8 636AFC60D1D74F0C9EED608E41B85F48AF1E44C01217DD58BE568992F6DA4D44 64E08A7851AE6ACC8F1AF3FEA0011292D0443732E1AE7C1569B6A1EE3CFAB5F6 2A589FE7B5350D8D4876C60C8DD02248D715B08852F00049FBA9783BCDA8A54A DAC44CA6535EEA91E63D18EFECA9546ADA40C07D73330E4B40DDD79509F94A8B CEA9D79BEF56E423197152F06E3FDE431E460C8E202CB4FE3B30B867C7493B84 7DDA8BA3A2231267E825C3F5D1A05ACF83AC7E1B131A54C9DEF7E3349ADA3027 326DAE72A9F51B98B1549E636F57A27FB0705B2C5EFCFB5B82904B956DFEE0CC FAD5983B9F497FB583191F02E532A5E83AC0D4FECD4BEB85E570ABF7FA7BB269 CEE885C9EA0163C8F9EA49FD3A90023F3F605C20D3768E74B600E82B6DC6F61B 1E66670D0DAA9D22F3A1343A6AC05FD211214341F7DCFCB4DB06F840EA80F1FE 42F50662320189C2B0EC0075FA56D7112FD56EB6D574281EFA5D0A0616CEA0BC 027A698C3D71B2878296E14B0D658050BBDEB8C3415CC329079137AA0C6A5EEF 84D9A7E7B98DDC7D20778FCF8F8ADAA3274CE63E3872DFDE5BAA9F27C933F4EC 1AA65488F5E3AB4CD359909F5D9D9345252195F19B97EF3B5E5D8FCD3DB68E6E CCC038C1447684338ADEA4FAE4B9DDEF8587B6466492608DE797D5A2398E08B1 7DD57B2AA136E9542A66E995355A701D7466017364188C98E953AC7C33858873 7AD7553AB76A6DF7FE776AA2E1DD51BEFE47624505E87801ECF05BB05CB3C544 043619CBFA5DD1D3B57CFDE80EAAEC23E2D8E2635B25E9F4A86F2D959C47E189 168CB1B74303B9698CE2857411CAC3F8CFFCC3C91F5D92AFBBC91A1F2A00F4B9 9AEBC05E4099A9F240712BE25903961172AD8389FEFAB4F98B7E60543552416C E56246662DF5D668ADD0831371E6C673C4281E1B5648F2EE4071B1E40B0AFE34 2B0F47F7D8859BAF3ACA0551B2B1B6AD38EA66E305A8046ED889C22F4A5E6D34 C0F864FD8449DBF3544E480B91E0B694A234E2A51ABEC1B15083990FBD7AB7A5 940B4BAE882DE31B784DBCF06C4C693FC366EAF170F0ED1FA1E85BCA3ACFC91C 7EE01E5B61ADA76A06B7C90E10A74C54F246DC03A1BA2095719E7723325FA15F 17B8E47EE8BF534FC07180E277557BF1FFD07D270FD33C8B529876F7DCCADF6F BBCAA65150ECDBBE1DD579377459CC53D4D1F115DE433A8BF7475CF6D9D78603 0D52869A56FD43C1683585C00F4BD8DE4D2913CCEA8D3E9A3777AD5A13E15FC9 7105726043836B8640827C036E07ABA777F22C427FCBD674AD7AD4564A0CF573 E140E6633B4D08163CD637CF71DB1E6B70B0AF0FAD7BD6E99DAD769AE88C7E4D 85C2E07F88B20514F6680E39ED03EAE09867557DD8755701D5D2786F1A7DE3AC A5898741126FBA53F1BF652D54D3BF0DF7740F83C47A444ACD781DCE9D21A4A2 B73D37ABB6A1B367FAC1712DC9DA377D86BD5A10A72510DEABE14FC18AC3E9B8 BD15685F8DEE7A7A5D206E9A372C860A0454358DDEDDE05119E04D53C6F6F5F3 38B807A4E55DDB3B5FC9525991104AD987F3C4C09381865036BA68B8D86E24D7 41A6B9D06A52A3029C73F01CFC0AB968806374767F2A958F72FFDBC3718D8171 4CB93D54A6D66960DAEE565D17F215CA708DD90A72F82CCFDAAA074323D30BC1 59A45271BDE87303AFF3BCB0BFE61392CD67F972DAAF24E614946118F97A90F8 BBFF60D8C2BCB41C6AA6865F87573D62A637566D50D2FA0BE2B590555BE6A705 C385B08982F96FA452EDC9B1ECE59D78626F062BA8D5130B76B3BE54CB6566F0 006DEB7E1BE503676A4694BFA4D7813E840D7394CA12251519DEC4828CAC4CE1 D1B244F8D4BAE87865E5E4353F5F0A4CD67B662F07E36CB63C9EE8243ABE2DF7 535A9DE1BE3799D697861215741C99EACA0F871E810CED01B515A6D612A712CB 644091D2A34177936D6F8D73ECCEB5B32D9CBAEB8FBFB01084ED9FC39C1ADFB9 4FEAEC654A3E7DBD7E8CB9C4E42051A846CD747D974BD5EEA76713C165B9BE0A 694530EA51AB421C40154D2655023BA46E3EB8DA3BD74D837CBE57FABD484A43 F150EE6F12005B3A373DDDCDB16E211431E4D7F36140A6ACEC1A1D1CE3D9E8A6 8A12A849C4BD904F94E47EBF99BB0356D65A2CBFFC62C6F12EF2589CD01C8A6A 27C9A9825DE3E940AB211EEBBFC0DB142344AFB0255A91FF978E878BB0903A48 4E84ADB2177927B2AC6DC849B42ADAAE937F58E2267601AB6298CF6864AD4358 20D0AC242DDA1D3694F38E07656EED0BE8907C2E66861683C7FB3D7858D3B637 2C1639DC765B1D1269E9EAB752BA92DBA46AD4748C43B702FB5215524014777F 9690491D19F7F6185ED7C80A16223B53F4C32A660C097921E8210874FC8FE76F F09034B6DD227EA424C98F8E905C9C2D9E9465AB75D3B0592E7223739FECFC52 C63419A7E144C01DDC6A1C059DD408E1C4DDEAE0F0A11BD3F97FBCB8EA3A6ED8 4A8817B582FAE581F9559C9DDE9D29340AF56CFCC66BD5981AC43104735DE8EA 61C73051EA4D002CD5ABBDC31E28D1A26E1D874F63A9004EAB0C8FD1E7E209CF DC15B28D84FF0D839D40E3A6EF5AA7CBD46F169D5D998DC6AEDAD64F3C5330FD 836F294D416E2AE60BF6A1588621AD596937F94D6C26DCB9583F276D16D4167A DF80339A1C2C218FB12D5FDC5F71D85BCCD74BCBBF95663FEF31A4B0901EC307 EDBFF4732FA6DC3D899A5F0EDDA808E8634E0A3D97359B8DC0A19EE68E6C21CA B17864A6F06C7C0EA661E8C1AB6E2950B341A977DF1330084C1043F1F4F6C457 7E0CFDD2895F90F1D6624E1BD04649D50F3CD231A96FCF3A713B55737938DDCA 9A6B9EFFCCFE14E10B6F45A9124277350FB9409ACA7BB8F053A43E6B7A03D39E 63281C82D99AD9A7C083C37DFF77A1A0EC2F3D5BF51E07DDA49B2D697C75CE2B 61A40924AF3360C54D998DA00F9F482FD5370EA7F7FAD76A858B39DD45340FA4 DD91C7578C0598CC5F6F36CCC7A3AF66DADC3660A3FAED823C96FBEFE4CD9A55 3F682040B1AB0B57F3E1CE990223D343DBAB2F81D1FB88B16727470F0705CE32 2430D0AE116C9FC4D1E18CE4A9E980BCC3542200AB5711F5186781E20C1476E2 91F528E53B37044AA6C56D46A23D500F47D8E102F5F4235E9786E0142D569B96 9A705EC949D12E35E5BC0EEE2FA0ECAEB05635D8A9020C43B08A1C13C1AFC27F 057134C2326F7159394A4A04D322C71C1395B3C078A2E2675380B155951E5D14 D3C759A490CE9594FE3DE614EBE737051C55625AD1322901EE9AC53EE8C29B64 3E8BF38EA3C95289B36ED8D51A803CCC000642F8BDFE4FE614BCDD4FCFCDF5E3 CBF6CF86C43BE14730176F73187E01370496588D7D5177614A0FD6ED59655353 89C4F410DC44102E4EA367846368C9EAB17981E2CFCECF3F0D332697857BB2EF 7227FA916AD8B152FCCDB92D0D5852606AF9E7CA7C5C3CD8258BBEBE2957DCE2 A4B6F35B41B18412143BAA4CB2EE86F2D5212CEA35A5B5F65E5CE5B6D1E099AE F8921BE9E0999164EB3D0A8CA18CBF86B1422BAAECDE821B5600BF2CE83FB7F3 144AAAA53007C88EE674B82B06B7AAE48C2612CC494FD179DFDC88097E7E7844 246A64B86F496CDEFC6B77E00FAA5F09AD7513296E1BABC7ADB991E5291831BF 661120822665BE464E4D90F338A930BF140DA7806B2DE2CA151F5709DE4C8397 21590A17E8A9B9BA49AC10C381928452CA3BE15AE462C9FFE74DD255AAD9462C 306047CEFE6A6DA04E137855458E019215A279EDE1725C408D3A07671B7A8A93 40F92E80BA1ABA2F2D47821A0E9B63A56BBAA05A780D57992EEA9DBCD30CEA77 D069602F6B3C9C6B676B33B753DDA40168BAC45C2F2F023B6FE44AF5342BA782 51DA309AB2D94C2709E08C780BF6A1BD51C8F2C83AF0B8D4394627846CDC1521 ABBEE2929C7F7A40270FE62D084FB5977406011D184AD6DD8D3200F23CFA7D21 3FEB2AFFBE19476E792B0061193A55CEA1CBCD911634150538E91A0A7DA5C4E5 BEAEFD4BE88A421B800A0D251DE37DA8A337152AEE100AF263DEB1EBB54F78A2 70C8EB0E7E1EB79D71864A4F2842A12CC507453958DDB59E18B9247BAF894268 FA513B387A6BCA4FB8C04028691E928D0055B7C2BD669BC5DDE29164E3407EA8 C5907DA0C70B67E6132D63CE3F670D84E7F550A52B30B6F72FC2A94D823E04EA 0F28B7F2AA8291F38640124547FF7391206FB96BFDFDA2B0FC9E7351DD2BF0BD 3A7FE3A7C482D39451B31B103BFE1D8B029CE2EDE8C81CF90B076EB0FA9D5861 87CE501BDAB9691ED2F3D310F4E45D7AE2B71378D0976D4555E8FBF4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 34 /quotedblright put dup 35 /numbersign put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84 246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F 525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE EF6868298CD26E5B9EF345BFA3EC2911E2B96A0B40AEAB95BDCCEE38F5EC170D 3BFB792D2DDA7E57BD2FB7669484EF9322A1BEE009594901095DE2BA9A15A0EE 4DD77404CEF16EA6C31FC04A8FBDEF27B9FC1AD3264388B650C641D6051E47EB E7EE41B946B5A54D2990748AAA64237BD4ADA31C10843E1C235AFB36BF1DBB47 A3FC8AC6F98C72AB9F84F3C354A44EE0530145D80BA7810314D977917A4DC4BA 2CC4AB63CD3E87DD7D040E8FBE63D94C9BCB476AD94BA7E4C0AF953BF4821182 D723D9BCC92F2B14A8769B9EFCA8FED9DBF2A836BDC23E27AE1BC097FB3D2297 DD32DFDD7E7BA91C05B33583D92EF193248C70B9B0A260A7959045DE6AB129F9 05F7F25D087EA8024C9F63852A12B46114C581719B4723810DCCC8183D7E6F10 450511BFDF8CD29A57EE9653F2651D54A62141A8142C8B857B0D3E2B9FC5DA3C 38D79A7AFE0B565A57A7C4F52DE6933437EE03D0DC1D286880896392B5C513BD D76497FD980320FB10E6CE08C3953F99A3618675B04C8EFA2E2DEF4511B4300F 2E5C733D69737C7428840FEA2A1D89133341DE4BD065034F7316B5922CDA4D83 D8804D8DED8CD4409859CB18F45C838D6F18CE8DF82B78C79AD664A57F705D8D 9CF82E48176AB5869BC634B2BC053A299600E1F9CBC66EE5715E9C70D86E6909 ACC25A0858B10DC043CE7A5AEFE9E3F8C28EC36BA0E34F850CAF6C0AF664A142 AC30D3EF7D61C7E85AF9963BC58143F92B5D64DA3F8C8F131B190E8333769BF9 0186F3840565E7C3CDF85409DF3E0134C97837AC17E7F988B62D82E068EFB478 5D8BDEA6D3A49A83886DCCEA341E9B4012EEA7944F69564B5F0EBB5360C067FC 70DE0B05B117732530099ABEC6F1FF955C9F269CB29422AD7A3F2BADFD97CCD6 3624B8E757ABCCEBE5B1F2620B814FA2A3DE2698BF0B06CE3AF4C560DF372AB1 A79B06195FEC5EC862560D6767FD20EC17481FF64AEE679B05EBAB7AC520F240 E2EF71614A3A93D4697747A6BAC42DF8DD4F2AE3CF46F1DA8F0A1A0372C6F83E 5857A31F725B28DE3AD77F1DDF563C4B3E8AA4CF5A1BE4B4D0C672D68ADA4FAB 5DD7F618B1222BE7727547825EFBCA21408C5F84E3E7781B5ECEB19CDA8EC4D2 120A75F8FBE6B0D64D79096233696BFA2AC17072EA6C9F52E42816C85AF34C21 215E72CB2995A8D7B363AAEF5CA4DA8F2567B40B01049191626A4D1CF8BF36EC BB17A076F501F8A81C0AB9C03E26CAB4684ED1672AB0284500CDDF5BACCB90E7 95EFFE1B505F201112DBFB902B72F566E0C6E1CDB8CA34EED9D5F6A831AAF04F E092089757CC61819159F7D3AA4123C21C6FC5F56A0D634D0DF2390D6F0CB442 D649D3F76762C4F3F49140D1BDB5E5E19462485F52DAA9CD4A32CEA7C6281EB6 979310262C103A833CF1B393E69BE17EECF31A8D36B6247E10FE60D71DAA0EAE 1B0CD177142080FA5687D01B87AA24ABC3CAE648B69A407E66BAD35866BEEE6B BD5A238C064A25664DA6A6F7407D0F5BCCF856D1419AB9DF15F1DE86F6072ED5 D31B088F7C1E4451B54041BEA187D705B3D99CFC9E2707D02F4C721B7ACDE325 5CA12E155C9C41F07E81764507E20F83EF6C45771D7EE187BAB92F32E1542F26 F0AE670C260111B76369299A5DAD5E4D11753CE4F2239692F7782E865F4D3739 E02E669AD27633AD9936DCD84192F14287790E822515A98E24A5373C30B5E4FF 5FE4EA0F868E0B1E18FA0B92C402082E216E49D3F598517B197D0D05C9974D86 B435DCE5A4276EDD80BC7EAABB279579DF6742AF516EB3125267D929CE8BE76F 42BCE1F2E4CDD1813257163C88B15E33C3B671A422A78C234FA2E075B9FA9483 F087CE013C9E099C3AD51EB826FF3B34D01186D4CE3B82A57A69AD94FC46B31D 347252804F6C4F5CA2C9BBE16D87C7A070B3DB13F27E7FA18B6D1028ED40265A 2AEC1181DE27937481B72C4CE6818C162250EC13D1FED060F7F5ABA1E3A2D69B 4E5750AFA81AB32C3C1C49BCDF2B2AC566E43458495C1051D2AAF24378427684 B6F226B7DC848F97A1B88EB2BEE17A3E9E9CC51D9A05435B93CA1752F2D5CF25 6101EC0A83496AF0832A7B71B8163B3830C989DF400AA71F370E61D7CAF9E20C 3B21A3A0775EAC753D0CD656FC15842D694DFC860079CA3FD4E9C75A824F5292 56B491252AB21099CA16D5DF449AA1DD44FD202924A95B2634B6AC0CC3397820 5427B54100B1947CC3E44AA1EA09B9D9A9560E5C645215C9CBEC05302F40168E CAD68257D5C5EDAE4FC01305470160FFA5A9F9467C4DBA2EADC60BB6225D9C36 24C9186EF3B136FB7CABF98AD55FA42B8976AAA5ABF67ABEE3A6F2A937DEF0A2 359122F3E9F7091571FECD771920510053E90470459DDD0C4B5855FD47D19666 640C755B7AACDB8A6BA568E04DBF112EA07129A941D4A6C2BFADF84428FB4DD0 FD0EB7D0FBD3BC15657FCBD4043BBFA3915C53AD8A5BE8492BD192D14C78E242 636CAD3C760D9FCBAFD2157E37A6EB7BB45145DDC5E298E7F639C8B27C1CDF8F 78D035F6DEF33A7556D14D1F75E4410501D370DAE50451FC90F4826FAAF02715 84805688C232D239AE85696AF3B644459B4BD94410871AA666042C11CDEDF020 EE0466F4FD735B7AB94E4C153F2640C32E9E3521D146CE29080AEF3B2BFDCB16 885FC7DDE62033CE401D65DBE2B977E2FC07AC2DE0A96034552D25912EEB6009 6A5436E1E520370A0CC54047A5CBDB888C84A9DA9E06C8B1FF14094FEBC224A7 6EA6736BF65F0922EF282F3745B43982FDB35604BC4363215E5D5B3F737BA615 7B5E1D1D6F256645432B6CF2B9B44D76605EA86B1C5D94372F215649F002A544 FFA277AAC8A5F25413026431BC892F125871674A177BE426AFE8986A3B18EAD7 AA800D5D7CB6532230CFFF984F022FE12D3D466479199C88C53490119121DA14 9C7BFAD59AB019CEBD7F77FD7703ECDBA90B15BBA561DEC2BE7DE6F582A3D803 51CADC90CABBB072DE17C117EBBEF90E592BA739808B2CD705C9E66894D5CFCB 7E8EA54059BB170AD00D19CFEBF7C8993BB1F0B1BED7BD4BEB79C4DBB0E4B6A6 E516FC92D57CD7942D236E72EE413256303898F57EEF40E66F95EE7484EA4767 A901CE079AC1D433741AF24487FB74FC58F8545713325BEEF0FABDDB6C50DF24 852BF04D247CFA5BE75EE797BFBF2BC48075CBF7CC00AD38CE90C43F898C6A85 70E70524F9F7AE089EE09BEE595F4E201DE81CE3FB54CFCBDF383D124AD0A3F9 15958A46754F038108BD7A61E03ADF620D07B0BC2049B3CF610AFEFA026796EB 130B5C45C0F9A1C40DF7FC093F1D8BD82C3D568F06376BB8488EA98D7E7B8B1D 25E46E2FA19C6ECB9CF4F231842480000A90CC422043B8EA7FF2D938A924F210 54DC43848814905D323C803C59603B9AED05B9760DF748EFB1A7A1071CCC95F1 C0DFD32353D4C6B55B1EEB445BDA8C867B5EB7B652D4C20EC662F27818495A0E DA5DF4A1E25783E9B7F23FA3687F296A261426C32115808EA7F5B266FDE74360 30382F970549F7BC63F4E02A5A1B8F12F3D6EFECE3423DF773F31A59D79EB427 73ABC9DD5B1A5F8F71BA9488C9D2DD211B4E26DDC5285992E62EF99A5FB3A5FC 64D36899C312BCE1CB7C2B0E2BF6971F8B43CFEB4C301E551D708F504E14A71A 5A84844BFC8A8FC424266554331231D60D3930C4375FFCDA28EA3C9D8802AFD1 1FFBB88DFDA43902984DC0719F90217B8FADECB32D48951A4FFFDFB8F5CF4472 87DCF4D6075F64AAABD55EF32527C296B8CA7CBD2F9F6875345F747E13FC8437 42144C46B02A65CE045E860F70F836364005FFF12BA3BAD27A8582549E697B0F F2A4DD9AD740E8CE533A0528C013A3BF8A415F51E380D3AC9EF4B833D9ADDA38 E0B3406B9614FC0D356FB82F9989E32FC518B674DBBDFC9B0F0DBD32E5A8917B FCAE8E85112E31C6DFD8E9E4243D64D9CEE445EBC7F8251E3DB40E8C43DBE62A 644039EDE9382C4FE521C75690148274E0CF0F7B55B71CA1EE451BBF176A08D3 C975E227AA9281686D3DA1F50B8E4C288F1F476D6F12356421AFF086687EB18D C29B334644E0AD43AD08CD79BDA2ADDE7965F6E76A1E5F398FBDFEE1B6CAC914 D1F879ECE6CFABC8D044FE27505269A71AF6F15AAF0CA84C22B2EDB0A3034370 7103EE834ABFC1A17F2212E2ECCA38D4D0C83350D96566A6B0F39FAB2267B770 E61A67FECE25FFCC5CBABA815C35687533A2896E643711A893842D40BFEEA8BD 3911A280726A159358C7A5B25E2907D445AA4B08E97B5BD3466C6897065446F7 65344E0FCFA66182DCB872B6BE7EBD2A2284A2C3E3B1DA10F5A55B3207708704 47C61F2EBB8C69F042F7A5179B55075FCF7B47C540603DCBE9F97A4F2D6F81AC 3A0607D670B46976F47DD878F7B72C32A371B0547403EB63FC9EBF1B518D1CDE A0FD547418344FE48A782E29E07A1AE9600074CB33AC1F4B82C652B101F0BCA0 E040F776F1EE9F81371ACB9AF0819EEEEFF1853D6A0D3DF1483FFF97794144F0 34FDD5689385832C0E025CCD1672FBD40A3D1394CB31E0B32C249A45664F72F5 6E8FB7BFBA03EC2B1D21E9574454DDDBBA5EDCCDD8577624BBA178289A60ADB2 6FB3C8234DCBE922579864A4B1215BF65B95E7D2B9F4F373FC4F3D921183A3C7 69172BA99467E3FE347A072B05B4A5CD9F0D1C251C4015883FEBDB48EAFDB54E 29670B9C1CE5CDE4850389E5927DEC9B8A936EC8DDB0043B574AC45193F4DF34 CB8E4EBCCB1E24743049A0B0D8327FDDC213EBBEC58028D9D86E7E671CD9E953 D0DE0D1FCB0803B1FB6FC3AACC83777F9CB34F516C3AAB3C3EFA4B5E20A0BBE5 3159298D07A81059375565F6D2FA8493ED06FDFF69B63608837D9A3EA15939D0 C805C9F096525AF996ED2DF229D70B8A72922D04812243F5796F7E062C55876A 287E444085AB570882BA4D1468E22937037B60AE4FE8397CCE7A76934402E80F 214F91274196056921DBACB39D79813897525B54B0E059DDB3544DD6A58E2261 85B50A52F205FFEA9413D78B906519CE917009191EDB2F8771ED80BFD2FEC505 1E8CFA3A02E5DD6F3C4170B620C296510BC7541FE0F57ECCF0F8EAB552380C49 4998191FC0E955192FB71344BE58413460687864C89354EBAA3E29CA7867DE58 B279261FDC69E3EF699FF0B218AC1D27A0EBFD5DD71CA609E6D3707201CFBA9D F51C6F59B5150C0CD7B7F87FB12E3C77A95FF311AC5CD8BC988B3F7C52C12A56 56C7B3AB6FCE83882B1649E249F15F57F03837FBCA55065D9AEDE59572ED725D 109BB807DEAF24DE5B3D69E9E4336B2440BA69AF5F42CFCA162218BEB50721EC 82B76E4E43FD68FBAFA68B4BFAAB990218EBFBBDA5234731FB97556581359546 CE35D0EEDA37B6913B46A6E4C0FF8D693C7E69DF957592753227873A13C4178A 62C8B12A4DF54F67C1E580158D71EC58741FDEAE5D16822EB9843B64A2B3DBC1 202C2042AAA5DFA457F51458F3BED9E8EE6F28B16F232211C41BB2992237C659 457CA9339977E4D8D46E9618044D8CBCA79664E2A2235DA0BC5D73C82825C4D4 13B34D75F095251A82F8370CAE4C6447311C442A24736FD574047FFAC0F8555C 6C48BAF42AB227B30B8B7066AEB5B7EB99C40AF887D839A719CFBF2D723F01CB DA491A94BE1717FDAE293AE3C648ACC0C3F3C81A59A6DB39C629DE605D8A5571 8FB7E969401D80E9CFEC9D9736618CE6558A7F3BFAE63B641E7078D71208199F 71569D01909E72041578737B3D2E9A27AFD1CF6B40F213F698549614F03EDE2D 08791017E660CBC061CDD81696F97E8D8839068EB9BB52329A090DB935CF1BE0 922A57096A4526CB56914E7D2CD86C4240D39D6A2A175F8CFA9D939CA9DD44D8 8E843AF28D0C191A8A6978963BD328E9B9606647316BACBCDCA563787F11BC8D 68EBFDDA1B75D1318FD22817CDA9C0CFFE4FDEEE64CCC0C36E3843B35FDCBA3C EE311806136C7BE66A9403AF26F37D0CA5AE1B0582FBBF277A31B36438A8A0A5 1509A5C452DDB0C9B427618A095EC1FB59C7E7A89BD83D5C39D839F7D45768BD 998F28017672EAD6127D5CD30166FC0EBD3ADBC950EB69B26902549AF8D1AC66 B85AD28208E78C85627B3FA321B9D663E87F0917DFF64ECC61B1EC247F19BFCD 4E3B7655E19ECD2CBB4C28E827F8FD5B0101B804AC06C0D556C5083F061C8C0C 6B255FF6C4B1BE2919B8F61DA709C0206B9BB2ED411E23C0A702303F3FAA6EDF EC85EB850FF67C7A9AF54A683A8073967378ECCE62DC8A7ACADAF365E308D0AB 917F98CBD9AC0CDE748AFE3EE278396F9737B34513C888D085D581E769007399 560476D95F15C1FB3CB544DF62677ED9148B20BB6FE0FA55B14A99C656EA54C1 49345197B7D1583712A59269C8F547DCD6E716F9FDCA0FE4697010BC330B4CB9 3B55B3955A06D2C30A719D7E0B57CED8EDB33DA0CFF64CAB509DA028D46BD8A6 C8A0013C252AEDA33AC369CBFBE1B05C4E8619DF155E670861F531F499A93C21 34A26D023826DA6981E782CA498E5C7B702D0F34EE1C50E045F144BAB2A717E0 226BC0CF646A6FC8C1C00D4D2F36F7560AD3B6D25E8DA46E8766A9450AE6F6A3 C9935703C4A25A9E38E51CDA85570572EEE3143124783D7C6F034F2902C56D59 96264DA6B634C5A7404A4C5F2939B0D9247E9F5ED43B929A85B7B3EA450159F4 8B2D39D54850CD92092063788700861704702C4B6959617F4266CA1CEB26C48F 04DC9EA7F50FD7F0861ACBD75D9F1430C63B2514BF6BE971B31A11DDFC406A55 DB8A77BE015151ADA1B04191FB4703F8FE907C77937C6585B6DE8C69ED7F226E BF118643E4698845B194E5AB58435A1C6A83B8CA7DB828E8089028EEBF3B43BF EF2887F56AFBC998A8BF11A1C751040853A9C4771F93A26B55BE85CB4A29F5BE 064E7A5A6C3C7C95B30754224EF770C9295499CB3B08AFD4647CD4199BCDA9FF B2E92F5A01D12B07BA72B08A96940FEC7CA97A5DB70C31BB2DF2C3FACDB51426 92156E10186948ACBB1C340D934E45DA10404A6376667BA079DDF5A1AC235EA7 3EB22D017A5A32FCFB655C07C3558DE508E8C7362E2F6312E05E7E2818B49E5D E977FA964F11FE09DF4DE8BA899E1AA8F67271B17AE52446FDEEF3228FCE22DC 44B7D66F23E40D1ADD183231FF63ECACE07232356CC0B8EBF74A16B3EEE3DEAF B436E38BF68ACF3DDDC88B329B9D52276333B433FA2CC0422CD381BA0F452C5C 6B99DABBD711F6443FF4F1DE9E096FC9BA0C794F6E84027B0F0FF724BED747C1 35CA566BF14AC9E56FC00EC98CC3401BF9BC7D25FB7289E8608C2AF745341811 7989B3262FB44CEB29D1E5C30C59DE02A61271EF8035E0AC7DC23BF12092E7FF D5A8CACB1A2AC7DD3903525E1D9A035784E9A2F6D6526B9B0CE8832AA9F6AA6F 98962F75F2A73BC0FCC3CA467ADB3F037FD641F4E35EC400C01AC8DB0059F6D5 31F2FE7C6207EA48C58189A3776DF259B5311D10564FED646515EB8FEF55DB31 27A49E8AEF0A91C10CA9EBD5DC442423FB9105DF40BB174947D458754F842A1A 3FE4AAAB2381274E2DCD33995737E3C8970AA7D22931B5D64194C9783EE90518 BA62C1BF288C539BB701BC547BFAE3FF81214107B124CF6AE03874377192087B C8B692D0D3F4DE56356F86C773A17B35C2C1E754B1705644A7BE60B85B0AE481 2B1645A6B76EB9554C3E2630180003B0FBCB34362998FA1DC6E2C54ED6314293 6A70A4BB615E1FD298B76B03717F960F50F5F34ACB1BB45E52CCA3FEAFBB6A58 17AA99274D64E4DAD3EE7C5FE8F16376F565524054AA1E9D895C9A45DADF885B E0F18FCBE5E297E57075394491E44056062EBD8646E98317A784D3B34D18DF1F 64F7D1FE93354627411752B55C4FE88E965BAA9AED66CCC5D89D94C7D43B17A8 7557CD03A536AB8DCCB8CAABC8FA7E5D26C24B10B8645C6B65B5BA8CF2745778 FF37A924539FDDD8C771B1F9BD48EC1C71C9632DFD16F583C49C4DC3708DDF17 DD9F4B5C96FBE9F655600B314E64BC197DBB5AFD53F110AD92A210803DA0AC75 60A2FB1B720D9703E137D6D210E87FBD45ED9954D12DDA60CDDAD4ABAAF6EBD1 A3977A07E359012ED8DE106E05AD81BB32D0509A0C3936CA8E59F96140607EE6 4F773FE509BFA6036A8FA3E8101B4F662EE3B699A01E0F2E715C74A253618E97 8567EBAF390D2B2EC7236528E4C83AA624CD2FE0E25CF48156FC851F6C6699B1 C015C056A2943483B75A88D3BBB27760B78C60670B02B426FD16E882A553FCC5 CFF4FE69700CF028B454257B4E3E8F4029F9757776DA2B154C3BB88F0FDD8AF5 B2AA4FE94107E8DCD7A91D2D82D40BC680E78D0F89DE3C3CE101597AE6BD5282 8582159D98A7B6BFA191FC5D5CE4983FF3320D222668DA4A1F349CA87D2634BC A2D76D112F95D4A24FD81FB0B9A874B9224DCB5BEE5CBAD0219C6BF7048513E2 AD07530716CE47C6CDACEEB35779866C7D8556D7C8EB3044BD846DB2C7587BBA B616EF8E31D1CEF154BF73BFBC1360F8A4249FA0B32A8DB1BDA7A60D7780F7A6 0E36C43FDCE43CCF9B67FFC73406F9166586D405B52EDE344A24A38BF251AC4A D22878EFC6283F7274DFC253B9159F89950423B5F5E45CB5F398F0236CE899F0 9461DB79301BDD16F8695728196060E633967FB725EC795F8FD271536ED52F1E 8EABB8C1DCDACFC1C89746D15F6AEA9A679C73BE3E8DFAC27B2BC55FAA3C2498 AECB3BEC89C6251E187696FDA44D60694760DF02DA60B3242218F98CFE26422C 6460B64009BED312B60B52BF48AB5D2B240D51FDB662B2D22BA5ABECB4B7B261 B38DBFD6E32289AA1F3CBAC2ABF00F1BF3273188C86306E8F8F8743023BC2ACB F83A0CE484BDD651A058F9941F7AB5D5D5889D45CD6E2F07AEC65A453CE04814 2DEB364AE94A0742FA6EBB22132B3F566325E468F1352B904375FDC02DCE3C5A 0828BAAC41CC856926C3E769B5AC690B322F916B86EB99C010161304EE3EF6B0 A7EBC87F1FCD060AE0528CD32162EB022472A770C1D97D29513B7ED663F8AFD5 2A142F087B3119C1C50A1E83EEBF46F754EFB8E60406EE82B55838D2FB35AE5A 4971F5EA766BD89528B3E71877CA1F36922F4029FCE901B4FB7F337AD1531931 AB96525A76D529F98208E2C75109516EA8F94C14E0D09DD221BA6B00446AB4A9 64878088BB78CD9EBBAFCC6AEBCF7A631545BC4FB8F767A316D48F39511523E0 44B797FBE4455729794FA774589F1732B93E2B81DCFDAAF4F25CCC50DC88210A 661AABD915410B83515A46F0BFA1CCF109666D9EBB9CE9789490B6E3A49B127A 9368C9CBA24A70E4F6DC5244D4A1AA2F2D1D01252EAD98C3E8A3DBB3214E61FA 2288DB511F2B8597CF20568361053884F96ABB2934E2A66573864E9EC6DD57A3 73C2231656252B7AD535DE28F46AC87A9B7A1E32815510FDA2168E14A42E6964 D181F540DCC7D9D4553522089FBECF8C9E2FB763F9B98EB1502FDA0071E92198 F62C9EFB94365BBE2EA1E5620FA45824384F7A7E4176A421BB60E89BE347B4DA F579C9618E3171187AA3D138AA9C02FAE5F3124BB26B09E99B6B5E0617E73EB2 A2CE438B7DDF4755C919F2B566ED87873C3772A3EC99466BF3CA24E4724A15C9 9E5F07A6D0B9F776945A8D52B292FBC9C35EC00DF9F66B173F7A454DEF7F823A 13E4CDE0DA336B4C454902A5FBD0962AAE0FF7D0C0D1485D558864D5E81E51C5 C4B85A4ADD060D9C694256DA9EF3C2D06A5D506A2AB749A0012D63D1BA4470D2 A5B44B55B19E54ACA9EDE7B5ED059D7E858D802A1517D9C6FDA3F9CA5EC83B60 A2CF82EA3B3890FDC258031FEF8E31736E1240481AE23E918D57A74E5CE34270 2B7AD5946929CC2EE24AEC5B952088D7E0583E58F4E88A2CA94B0B566804BCC8 D66AAA09444869DFED11217647FD2842F08041775AAEFC28C2A7E8A22F20B95B 6DDD54026FFBC66C4CBFCE82357846812949AA33D4485F96EC91BB0C26B11509 0DA96BCC4F0E492F9E944840F892C9669B55A830DDD392F93F6CE197392523FC C1FEF047BE743075BD6191251823012E21D7B187D947DD8FB55E8795F6DF57B0 75331F6B975FF1C9E6B9D3AC8F8FB6F5A7F57C24FF18BADDABD6A94834A0AAD5 DAAA6778EE4970574844ABADC2722BF433C8611A5528CB16E795A86FDA9F8BDA 03D306AB816727C4810C301292CFD66874189FAF2EAB3806B89C4A01EE50EA25 2BA8B4A7CE66159C64781D9E606FB03288B6D9A41AD680F92E35265F2E0F37E0 E981F879B7944027C326C8F0C8154FEC04A5F5E4ACA04BA7EA5EBCA5FC119321 CDA4E119BCA305ED8B5FD8E5AF2B578183FF30CDFC5AB855D56C81FD4393B3F2 C7B306DC7A1B2EA4CEB8E2C001CBB96EA304F52E5FCA387B046A49762F47CEB3 C8A3801BABA6657292CB913B033500B105065D47737B02ABC59891D875D984A3 A706C5319FF17FCA66BEFE1EED550C62C78C152FA4ABF53BD1A287CC05EFA846 E649A0A92A728A7F21E610383CEE0FC71613E5AD71112B17B63054146F21E6C5 865397DEA5DBF399D3B1D8897E690AB85108F596E74739416454DE05DD533E76 F18BBCFAF19318E7F6ECFFCEA8628F1B645927B82F01E719D0BDE898CF3288A9 2875A9A7603C858EEC025C90ED1E94204979FEBA1EA46A23DB6CA0CBBB554379 5C6E6E2CB0B17EDEC20126956081A7028E6F4E33F7D0A25E5C6312AC44277313 F211CA5F46A39CF470242DBEBE0E229E27B765D5BE84FC58429CC1F96F4FB661 D9E4BEE44C2927982FE7F3265BCC865E5CBEF99438A2EF8990A5D18D27388989 FA0D9C4BAC59B1F54DE8843D66850AA552E5247E88752A7F2832764F716C9A37 66AE174563DA67891398B2897EBF8A1E73C7A90929E44FFE04A71595D936AE62 2EA684D1D81CC5A3FB804C9756F3AD513D61B9263333A4EBB74CEAE3A6F116AC 3946E5CDE9C62FAD6A5ABF8D4408A34B24F872E76300FBCE3DE3AD0697E0FBCB 8D2A6DDDDC91ABD97958760F9C3D09919442ED96A0F71D3FD036B053E4B88286 5883AAB388B669C31D5AD0948B12CEF455D65D798EE1497D8F5C761D0309402B 354D3F49D1F52105C7AC28BFA5699BAFE8692E27213568F635FF2F8A060BE7A6 A39AA94841E350EB01E16E2AB73D6F7C92FDD877FE5AE053A92B95B4801C5511 27D20A574EBC67E86F4A4B2FA2047F4629E483A5C19C45BB4AF3471220A3341E B9491CAFFBF8A77092508F95C94E611B8D02FA55C84039E99C63E413CFBB605A 4949F10D87AEC905C567849A9BE82F1191B24CA0C244ADD321CB1A6C8C7C8728 660AF0EBE3BCBAF24EA7CA52B34E7DFD987F968FA69ED06C885B5F19BEE8FA25 53836120B2B0A9559E2B937BFCE6A193CCD044EC3B0F37D3A5CEF2F4933C87BF 01D10C0ED40842B7B23AD3CC4B3E65A477BCA53FA8AA7CFEF9D24A2F1B32EDBC 13E336155CCFE4D0154A6E9A547E4108BB987D832FA7E3D696B97D6C8DBEF95C 7C95FEEF98B2F6D6F4A1781E7BFAACE5CEFC863B864B46462796BC94E4924BC6 585AC75D7DDB250E57C281A9D5483B57F09E96485AC988D21E170792C5EBBFAD 5DC1F3CCE35D98305B1E1DB7E8FEA047F1F44C9827E1317F1A8158F07F9D73A8 D899B271CDA348AADE79C2D0258CBE2CE1E6C537D4B5BB5EF5C5263EDE19F588 FD33A672DABB000E567E0110BD21503A429EF3CF2C2D6CFE54F5401DD6BACCEA 1A5F7074E66CC69FE3CEDDC22B1A49914E966423BC07A94EC08BEE657206E238 D3FC82CBCEB8CB60CAB23E8DC15C98C46A8DBACAFAF07BCAB9A8A276F033FAF2 839AC29E5AC18AFAC0C0A5BC103152AA9364C21BB45E0E27C08BAD83A7EF75F3 A527BEFA9911847481B0AEF200D5EEAAD8F0A284FB09D2A8E94D0ADBB62F694F C6051E63E37A73304A11F3FF399EA9FD1C83D94CA6B134FEA748B05793605C95 18D75719082A86A864A09D04F13CCA0AEC6CAA8C2433D5CAAB74C86843959627 16D3A12BD02BD5F36043586813626D7A7FB7ACCF091E8CEEDB13F310D51A1433 8BC246837AF6199022A0B0C5944F23CF237F2728BA702EA5B4AA7709AF2B990D 03FF80686F0931DB619445F5175780CB762A7A4B8325ECE22676CD8E60CCD7F6 175F67E0628E29FBBDC2FE0F0B2E9D7884B96D23EE669985A8B1581552828764 4B7AC761F8F6795D0FCD83F34729499205347E3F2323BDFA333CEADF0421B2C5 547523E2843C0108E8B9062DA4B1F335920CFB9D34AEB69B3968E41DF974AB6B C96B284FD2A8645DA7CD14F2CB11453C0DFAAD91E9C3A32EDBAF9CCED0D12F5C F54283097C71BD30AF1419D39057F9527DFB45ACC3A53D722379F4C70774D6B0 39D50DF5968CDEF0F4F8EB5D45B75DB6F271E9294900BC5E528003A2DC608AED C5978760811EEE91F833852C22A6DFAFE6FD1F8D53248196848F0F5D93C9ED5C 0EA231C7A000320403C64242CDA27ECFCDF0D265CA1E8AC4246E04F95484F06A AEF615D6FF22296535B0523CC6561DEB3BC47872213665E4CF87B266C16160A4 443CF494BC1761007083A4B2EA5DB82D893EAE0E06DE06225967BB908614B120 EC45BC101026805CDF1E74A1E2EE56C7DAC1FE7882BC8AC55C2ED4754930DA7F FFD455E010657E364DBBC4C4DA05B8B3AF91A60CBFD2486ACCC641F809EAB10A 71454888E6B0DC5A39E7779BC4A267406E0F34CC75B48976F075E87204E400F9 70AA5A565EB12A2858F3CAFA1CA3C07139F17F56988E4C1582BE460B0DCF7E1E 3F01FA984127F99B33A637C034E5CD63D3B00DB4F5CE83B95C4A5CB1BF26F8AE 80BEED321DA61C8A7E28AA389768290A90A5FC5EBF07E617E3FB1C579596D653 4972E5B355C4B9621DA5A78170D9354A6AAE0C3D74F31EA8CAA83E872AC95D53 3BE3671B27E5F65A95645AAD62360AEE1AC32E30EC1472FF7D725B4D8CA0FAA6 DFD53C19DE46AE39797F4586FFCE66EC22F7DD37132308A85BF21906D514F281 E35E9B639E116B63919FA1A41CB716A80684023B0332988CAB3A6DA26A7020B7 2D3801EB2C666E3AFDE1BCBB69BA807DC45CEFFBE774BD461DCA50A8E9F8655C C347D830D34FD62DEFCFD4C6D08C7BA0FA938AFCED994D57DB29C6CEA22ADFE6 EBF06D5F6D31FBAD02EB198FAED70EBCFB92E36DEDEE3E73B100284F2CE49158 B58ABAE6CF03C4418D3BEA80BFE0F81F9DBF726A1693DFCC694941A64FCFB790 C87BE9F01AFF40A96726270A353D53A0CE4018AD20B49F139FD35AAC9B6BCDE5 413E531212AD7E8B39356221D5DD6E0378A1F7D1A2F8C9532951441874832251 753F7A7356B7EA41FD6FC48CA8E4FA7D21319AC939AC568DC641C7A4EF2FCD9A D4A6976D213C994CA59D2380F9C6639A4E173D600FC66938A257C7E8E5F07ADE 941810C0F813C3D715C59397AEEC94FD93D0EF30914CF309313B1B80E50DD1CA 3CE902631A6447990B416D8F2757649DCB29156CBB477EF82635746B106ACE3E 31333862FE1E0F8417D394A5BDDBA3823363C2DB9A952963C9B2584CE1499D51 7364CEA04721B6160356683298E586C6BDBAB0C48261F68F5F8EF1978D70CFDA 42267B2602081D0EE8FA42A21A87E1100B2D2F20193143368D4CFD9700723778 AE97D4A2172C16055A6D272DC825AF19D94DAF1949CA000B9B346BF616A1F3F2 5FD11B7091D5482F010C0BA9D4252ABC3686EE0A9B9F323A06704F66FEE63FD5 41F53DA248AF02A31AC4158479690A4FFCEC4AF7E2852692398A09639ABAA897 12B58DBE2ED25466353CDB404D02E01673FBEEE2E82B4C10884558DC739AE485 2D6E17BE15F07F6152C2CCB2FB53FBA420AFB6B0A6C2757E082FBC83577EE8CC 4B0E6A231919C9B9D50A94050B14D41F2B207C17DA08E2D67FB06EB89862E35E A7B62AA17E7D60278B500F8EC06926F87075B9B2CEAD866CF9E259D853ADD840 B4D9A3C1B2B8302252C3AAFAACBAE40B78652CCC0A6CE82F6CB6D7955E6CAB5D B089993590F205953598EA84B8F864E3D28EB12339AD1190EBD14DCB9E87E779 3FB8B9A2EA3CFD8A7E41167399ACFB48B50BA9163D9AB69392B825B0D302B1CB 5F32655AE721BA5EEA5F047A0A4EED9BE018855D5153EC91F2C1B0D70075AD1A 537BA8340C8B3B57C8A0DC7A833CEF8A44373C497DE3769A8BB2BB71CB6231D7 68D569A05B1B055976C8768A1DB1F0EFB7DC3C64ABE374332C3AB960B54F90AB 16CFFA3F66FAFB775D4B01740F69D605578700FBDD999B759F994BBBE9167E5D 797828BF040FCF51426B1B7581B28214D41C75497C58E844D992B5A2FA64051C E74345095D917D484E531540D01412610EF53FCBF7CA69045728AD09551FAE4A 58946D9E08A7432838B11F587EFB65E6A4C4981D20AE8A5505ABD367BC22C9E4 BCAFF0F59AC18B14A3C6DA39B1A21704276B00C684371EBCE50D02810FF587B6 DE696212EF28DB59D3A1647F2FFE9DD623B272CB48C9D23D8D0E13294307CC22 6BAC669873EFF1EE766DE18C8E3088973176984E283E339FA0BF40DC9A56876A E71C7F019CADAEAF19E0439676968667023856366861D20E061FB28346B8DD1D 6229F87D45336C701346FF46A8015AEF6A3A694EB7737C9E46FD1B1C392ECB65 799C5EF2EF8776C614DF262B69328E4554F0FC18F427D430E8F03F03021BD2B9 386E758B341A3CF1520BDD897F5D43C7BD4EE41122D5A824869CE195786AE7F0 66CD1C901474FD5A141A510C767C8D7127F01AC767B2EDEC008032A469806466 4A08D59331A5D272CC4C3ED8EABFF284CFAF5DB7D500EC78513203B9D0E83607 B69A1CB60F650F1469ADC83DAE68D44F7F1A218E7A786AD35711C34B3BE3D57F 5CDB39C3FD75A58263683701AF06794C4254ED53240B558221952F85CFA5690B E7B4CA99D9AB78A61206EE5BCB71B4B2A13BC330422CB2F0C30DB8668228BD82 DE157A26997332F6B013D4BC90D644373E2A44D1764825884727DE8A6C947165 A9F8A4534FAD2A7DD522898E38988040DC3E7ABED51113DE58FC837F5BE0CFE7 C14BC732C011154762A926F12D0295657EA3DA9F1C7489BC37EFE8FE4B9115A5 F43ADEDD427AE32403361CA7364EF1E8D977EBC30AA129483E07C15E78E598B9 20373BEF76471A26591D35A52F741A12AB8394A51E55BBB9C8516DCE2EFAF5A6 894FCDEE7900699FBF61414E0C72B279E576D3EC9EDABFDB1CAFF5FB27F5C1C1 AC6F9470077ADB0ADE415B6E2EE4DEEA1C6220ACA03F9EDE91A0CEFA9DCAB074 8B09896803244E04F6FBCD751AD3BB952C2223343620709E460B3D0EE83CD124 DA6A6EF604ACAC2C958050B76C62A1C0A683E428EE2BA50050C3D884938B08A4 DC0F77769015FACB442548BB518004A39812CA45292EC8D962D89E0D41BAA9D5 3295E1CB35C9A5B1730570C996D9FDCD45F8CF76656115233B47606FB71BC7E2 C78D6DE2F6CE4F7D0E5C96D1219993638D5CD41E296BA5F9FCA5540235CA91E5 75C2F8A39451CB17BB00F52E0A281A732AFABBCC55BF22F5811A29E245D8E35C 6F5F154E5012DFF82077BB09E39762ED4BB610D9ACDD6F45DD4A0B95BAE83707 D7599640BE0592F58749BE6D7CFC5F531C29ED149B4C7705016914B6C8572157 1929EA7B336872CECD3C3603B25D4A975B3A0D72A8372AA57F770B13DDE23A26 676A4ECCB136B08C35242641CED6B4B2D6C8FEEA47E90F79F25468C07CDBB2AE 49CA8A6B32274F754906B3EB80E007B02648C10B9E428CB52C5C9153EE9F0121 741EF155AB6B01C3A0D0C2D0B80A634E887CE7AB3827A04FEDCF88C226DEC398 85B130DC8EB472AE325BA9F2D3B9AEC831BF62FAC44A4173FD3D6CD325F290F4 96482E7243CAB9731E66B4DA7DADBB4A92309D50F01DBCE3EDB57375C4FE3C20 977F0956B179F7820C82E342D90FADE3408BFD10237575E4C998608C650E6A57 B399FCB13492956D3E68D502CB4DD1745540A74F89266E42233E341567D49554 53D7B9ED47B8242010DD4A7BCDDD37777FDF7AB4629E85AEE446FEB8CB87BAA2 A007F1AA53F693CAA764978E5912E7DE0DF1DB67EDD3D6CDFEEA9FE31864E14F 8CAFD969B8B82FB0DC832A87FCFD7C6C2E9B5F63E0A43CCF07FB5C514C596048 FF67FA6A6A626562FDEF71DA6C69B91B44AA40EEA9EF40880933317BFA2A96D7 9CBA63E7FEF85280571147EDB7EFEB1D781852E05364DFD6340EBF8CDCDD3408 FAE1013BB1F14B3096476E6148C26447FF2B71EC129097E0665A3E695461B0CE BAD95965502A66F4876590EFE5860F5F5BC07A5D5CD7B4239EABC90EDD0AF9D7 33FF9FA5F2210DCE67D64C098CBBDE1A9E7B52938F7FCFD5DB18EA7CA9EBE8FD C472F8F801A548A930006A13A08EC218D07492DBEB92A366685F8B326506BF0A FF95E5E2BA1F9E130E1C47D15CD63F688FC1A738FBFECBFE4BF413250339156C 525951FB9B6FEE1351A5FFB8C9B231DF2333AE6445A933038662BF0FBFF60202 A78B7D9BE4BEED755E363DC49033962878E40B6CB6716A39469DD473DAA97902 4222D84F10296EF6595153AF15A34AAD38DB1A9C33CDF3CE32C76D9E789F5F54 82C9646A93142C6ADCFF7AA793B952863938758A19661381D57B1DA0FB1DAA76 5AAA80D90CD30221D561DF0B243130623C07DAB4C8FE6A8824938ABC037E78F8 51303DE7B59A56DD96DB4A0E7099D40B14E1D2A8B30684047BB013320C9D2D27 E6642739F8BBC5BE3FF663BBB48DA190662C5B6117D28F0E84154A8A267B774D 537B319811CA204A4A1BCFAB7FE8B6D2F8D7D24FF7B98A7EEF83539B32524FDB 13C3316FCF76D5FB9D29B137FB798EBD742EB755C212A2145163F08866F518B1 7069916037B5E0751F8D13264D7FAB210D1C4385C11992AA811E8107154A8B76 49293AA72980CFB4CF3D13A7D2A7DDEB30A7D4FA2444E1BC690652BE41C049AE AC34EC1F5520215497E2359C1CCB71CD2B53EBB656B4D36F6A8CC514FBBC1F21 1F32D017D7B8AB1F3321365AB5D8BFEF772EE696453EC8EC93AFE0C82BA7C300 16DFF5A9797C4C0CA8B22A40753CAEB790DF5D3927DE662A782EA71E752055DF 46C2EB79B1CD7252091396A2A48073CACE042B75F4ED97986600D432BD5DD85A 5824B8E18FE1254D2B3A8AC8D45655158B8A6EDE5A5B2BCAA36925B0087D3399 1F5456C58682261020AC3882B46ED09D6CDB328977A2F5D9D63885AFC7733AA9 C4952245B01530F1426A5CAB0F16BA5D68150FA463170290DF606750DD5F4579 91BB0D1E1DCB7D9CCA62908B09C90BE56A7BD616060E6ECDA729FDAA39692245 ECB6570151CC73016377309C284143424AC610355980D62C55015D113CC40B18 12254661B15A87B7EC45DC7B15F7EFB12E3DF054DADC520F5EBA07A0C351C7F7 E2C89DB996CB673B19A10E4559DFBA94D08B587A3A6C97E8910C5178599892CC E7D56DAF401DA69439C3A89F0BB5B79CC5341DFDDF1C559D3BEEAD57BB011420 0030806D66E81CFF60DED71DEDEF03D17A8878D69C2E006B76E21EE0CDD33797 4C32BF4E18B42D3F965F339FBA2996C3EF91BB894DE33C486D0096FAF042B892 9838336E12A23881F5D445AC76BDCA385981A7F1ECF0477D8FDE01B6D6FA8042 CA4217EE5765E27171F647D5D7370827E61E73D00007F99E8DF452B6EFACDB93 EB347C3073720D26D4380B32B08D94EFE72940A08AB5346C5E53697382B4589F 2241B092FB43A546BA797201949D7B3E18BCC0173E67FF4AB1E21F55B8E3E922 376B5DF96D9D4A0F03731C32E982DD4882EB673238FECCE92979AC62045EAB19 D02289CC9D020475C8BC32584A6538304BA5E062DB7859E5B09B00F49A2F36B8 C746C5ECA57E80413831A369CBB989D5DAD09F276033E858EC21E47D34C70C3C E4C287BC674FA92845639E0FE018B1CE5D53485B2E17181945A9FED272FEEBB6 9D497409E052499FF0152D29A91FBFF0DD4AF08F95B5FCB607B6AB65E7C514B6 776A3F391910249297A22D3759C739C50A8B2FC17F4EA8C86AC1F735E6B82A7A A4CFAC8BABC2EEB04D2A1360FBB94D287936DEDCB6760AB9D573A4314EEABE85 DB9DDACED0A6711E33E009F91FB41095EA66DE3EB328826CE8A13D959381FADD 1FB1BA1C35919E7232C05DA3B3EC154553896D6CAAFFE2CD10E6292A60A7F42B AD859189B4AFDC26E43A1AF4CB20F6948C4F49AA8F148EA12B8FDBB35BED688C DCFFDF9C6617D8ABD58F25A4E981B18E5938A023DA48AE1775F22A8213622E6B 91C3B87FE297C10F7BC49527780D16A3082A0531A6D63F72FF814E6C15DB2E1F 803D0C35CE45FDDB73331911B15F87F0200A1996E0A616D7039DD1CEB01EB5B2 E133E39A5559376ECABEBB56C362195EE5DF7F3470A1016E62BDB08959786677 60DB73818E5CA63A18F6E73085359ACB8FBE1D2F5A4EBA287043148DCAF7FBA6 72328986FF5B5682A0540AE8A5C00FBB155E8A76D8C3A2FB2075A2599B91CA18 833E7F458C56C46ACA9FB2C989E46BB95267F8E4866A4970BD0FFEDA790547FF 23C860C2339F807B5D417D8E7B53A4B27E134DE0E3D8637D279C3FD00E020ED5 D1C6C7D191841704050D357DDA7CE219CBCD47130E9463416F325A56A6DCF67B 86CFDA4AEF92A3CF3B8D0579E8A5734479D8975EF48A15AE1ABC33B6987091D3 709FA4C14EEE029EDD41F0ED5C37371EEE68A14967F9DA295F463477DBCE24FE 13F09325B9F504A1D0F881677A9697FD5C314753BCDC62194BF44B1BF50BA1CD 433606BBC7E43784316BA9BA47AF13EEE580B20CE24ED96E7E3F5FB81E4194DD 97AAB2D66BDBB6ABAFA6D5ADE814E3EA606120D581E9F3F68DC64A7E337F17FA 425DFC88D767ABE1A997C99BA8E3F4CCD15B86B4038A4BBEFE2BBE77B5D55CB0 2D859D127409C89D8A1DB614F672323C3D540C5A350EE008C0090184E874C606 65C64E12AD1415AEA59B28D6E17A5E3E7A1BF5D3530BCDC8E50B6720A4494A02 8616C899C6DC90DAF01A2B478FA378211EC8C9880247C906622A8A77A7CB1FAC 7C6DC3193B07AF4F2E9EECC973D7DEA895C032F7ABEC1FD5C09F422536D090A4 E2F7578349AC55529E939B79CF509687A852E0C4B361CF1BD3D1D3B0328C467D 592253C66B7B8749830F5501893C4C0790795FD6A90178877B369ED878C348B2 A1F515DA0159C96177D9003A23702A4959796A44D5FF2DC545E912E33FB913D8 50F155C0FEE8DB409DBBE3DB2BBCDD1AB200F613309E05B5C48B847C3192857D 2714C28E5A44896D83AB7C7BE0752E228B33197F2C5D5440C74F31670E4756AC 45167F5C79FBA7CDF9B08193426AE58B53EEEC29AB8FE5D520B3562341654109 2D7F7AD671A8F9FC10BBD6C392D119BB938622F2EA6DE3F00575F4D6CF6D06EB AFA20A0723DB85F527537C3FD995C60C61476498EFE4241A06F93DA70228017C 51FEFEF25D0F11CAE819EF8D0BDAF5792893B4528161E7C91C78970B1580B93E D54E15EDC8D0A40BDE7A2A49365C2335EF1CF690C8B5441F57AFF511B5B5872A 4E5E5DDC4797EEFA1CB13246E27B993FAC9FA3A8FD778C9C0C2157A313247CAE C9B50D14D3BA56EF6C66F116EC778BCBA8A53185BE5B1A95525271BC13B520B2 B972E77E609BF938B07C554A6D09CE0A3540EDFA6B4FE6BD73A5E0CE959C611E 464D15562388D25CAEF687DBC7576B48EC63B4AAAAD991BBB697591A42F7A9F7 28DB6B7FF5DB3C09D211D5ED60B33455EFF5A2C530793CD296BB836C8C137E51 51F9B9863F69FAE9630D82694002ECE3FCE9A8E7916FD1AF5ABCB503A93EBE57 5928E279B36AD3A5C7E6B22367D4A092E7D2182DD64458F6D560C04520A19501 B66AFC753686621421E2B0DE3A917D9CFEA7A2555D8816865B8F7E53991D2C9A 45F9ED6A097E0B3454C59EB6A804504F016AA86F95219077BEE50E1EECD7FF9F 9FB0956F51039465B9FB757183A7002BC8190186FC17374E73C523B9D6F0AA82 92F7680614B43C6B70DB8C596690032ABB45F6C71AFE0AF71BF7A1733F8EB811 6B9B010D751B6B6C88CAA6CF3886AFB0007F7B5D5D7E63D10B7A22369FBAB6D8 DA27D4F7758AEBC7399FF004ACBAEEF1AD83BFA89BC3FDBFAC572601C9C14D30 BA01D19FC29E5172AA25551534F3DC2B344284EDE0C7E4E9360435CC3F14E4F4 7F049F834CA83B90B19D77F8D71166421449260BC0BD5830999019869861E69C 344A203DB405134569151464AE91663996121ED8A73673EDA44A3A96C5744ED8 26A139458644D9E2EB25910CE8CED25074A6398E12D96D55E5033995C9119AC8 2FEE2B545CE5AC32447B3EB8E1FCA184AA3FFB52BCC8A1FD1AD8CBBE7D08E539 F3AD9826B1B2FA17F97000304CE2B362AB74B15B797CE9F2A0B80C48EB5062F7 E01A00595549396781E7F238A1E9D83CD57878FE8EC3A252000F9CEBADA9B27F 06646AF3890D311D42F71061FE39E1D6251FB6EADEA5EBC9DE866B03FF78E4B1 CC80B037B27D246D5512F8E4D243708B7CB578C2417AD2A373E60F49021B8289 F1F6A1B519FEE05570886AFE70FE69A4626F319F192231919E6BFACE2BE6E534 06746CF5F9716A51BFBC3642AAE005382FCD1B6BBB284A6E042D5AFD78B81823 2335B5DE2320DEC00566DC127E4D415947C02F18FD7500A8075ACC11C573D7C2 0D5B74B17B97D2D0ED99D00E7CF977180C1FC103B7890A51903E25ED9080508C E3FBB00AFD50D8AD9A03DF29F635E11649F4D8937D8E87E0D6258C2E89B77A7B 736958F19E3940062C540E14EA2278A65E36711C4F5617DD97B6F8FDC7418B89 FE472B2DD912059D89EF52A98E7E77634F96048325DCFAFFD7EA03C75DEC61E4 B0C3853432FEEED505842DE204F6FCFDCEA1C6B3B5E67AA974EFD823393A005A 97F6AAC4C628EB802532C43B6BB4CE89AF1E6F8B7F840771BBDAC14094CFEB5C 8E86A7F8AA0757C69CDC791E5F12113F0A495CC0486D18C10CBA8B4EACB6C2E9 A3CE1FA8129FDA7708C4FF11C7D551FAB22B028D4E30AD0ED8D9D4A059CC7F50 7CCD70677001A87806DCB93C83B6901D04CDC172E6C254B59FB5B646BEF29C94 DE79EAA1340FA2F95635790EC28F87BDE9EC41838A4784DC87B5F25BB3E9053E 0D9D83CD8DAF384EFC9466CE975B88B707A0F53CB4BDA174799E12E05A90A724 775DE124974359B6E3B659D2881F728A576F0C03500C536C76494D354CFAAD46 2C156FC3374074A930B4D794B5E706000586CC5E4598B0173B056A89A7BD137C ACEED7C4EB3BBAD0638C7416FD453348AE453255825D4E0E565F878DE4E5FFD7 15A526AF0730ED588181E253CB5F03BD94FBBED160195A927074FFC3E55747D8 D008BC1CE32995106413A19CB360D97B7D2418F355F11BD986B242056DE45F49 F346B5CA74A40D210435075AFB7F8CD972D54078AE36F6AFDFCAEC7054A1AC7A F79F75409F8A7798EB3434A94D5702C1F2F92D7909374C2AADAA24486F3AA15A 687FE6F65FE3B70CCF8C531C0E45E57FF6C029BF7ABF561D2EF0B1ED2CCF111E 44282D51B1BB3CC00BA5224303110920C0F412BED138ABAD0FB12DC32284FC58 599B7054B250AAF8895092BCBE775B65742C595DA89040766EADE00005B6046B 349613F28CE3050F314F992751668339C1FB0AE3C2040391329434D2F01E5E20 21BFE6475AFB1C0E9C9C5337CCD759B3D320274690DFB7C7F9DD484B4EB6D59F 8A507CA25E88680115551D5CD9D370F8239623771C904EFA2B437F55FFF21843 7C0BAC3E6F079DF35BB09F88EC1E3980A3438340A2FE48AEFD51525DA4A9E599 6BF3561EC348300E83EF6429308EC2CC9AD31A5F912E32D314168A295980CD2A 8BB7106356EB00CA2CA786F0F3BB5AEC3CD47D03416145976534043D6D984D21 E083E90617E56E5E5A619186A4160214DD176F5B590E3D455A356E3161EE6A0A 0AD260721D098D7A1112FA81F257ED52ADE70C2C65D5FDEEFFC496C7C5368455 FDCFBC6F485C15B1890D1E31E40F2F95341082B888E32EF94A34BCAF7B3EA107 13745A9C4E23DD2B58F76810A2A2DFE31AA26ED9E0188B21209ACA7D72F1825B D3B057754A822B730FC6C3A32A371050B6F044C4F947F39643B32AC827544ED0 3A69C1657D82CCBFB05EABB932AC3DE361745AB76B9BDA08FC557F2C560999E6 0041AEA946737936EFBF9DC5D83AB269E51F324E6CAFBC013585271342A83279 36E7672646BA3604F793A0970CBE732463520CA8DEDDA673069F30375D5FB965 643E3150F41F95FE686BE515D0EBB017AA7958EE69AA3B39353C7D7E138BF828 7C383B13DCCD84AAEA7F042E4EC0EF96D61D7891282310ECE6529B96949B6B18 64693D32660DF4BF584B14B733755A403A356974217FEC1B8238895DC4C82557 0214496BD270E57A6DA9D1073FD24DB444848E25ABA74612C0934E69C6FCE7CE BD9FF7B62EBF9F93FEFA94A7F723E5784164D6AE3A736C84758CD038DC199BFC 06D5F459AFA09DD6B759DEC94E89BA948E02F0B618A3C4A647B9697E42AD8FFA 1A0E38DB7B0A507EC3DBD7333F955B2A1F2D17D9ADC5291C8A6219F0A35672A7 3BCE9CFEF340FED66FE22450205E151EC1EB5E8DBB89E6719050DD5B42D1C4AC 61DE26A10185DAEE4DF997633E5348AC1F1B68B46CDB044C4BA8953A1304201C E4915FED21CF91569CDA3BE5B80307866732C20ADC67FB7A6E125636EAA55FD8 F337AA2441BF8265BE5B2C755CE41E52E879AF9626DA87790C7E7B8D435220F3 23EB853B485E8D0B3BE87BE0881E8A738F07A42491C5EF4FCA6D681928A2AFE4 1342ED64DF7EF26C53C17F02CB05A4B978E14983EB41893E20E66097EA01E3B1 DDABB3C709F3A5DC338C14B142774C14F3B6699A5B64EAC7FEE09C6B1990FB63 883E91D138A666EFE8B964BCA5D1533FCB1517DDA65C73CF35673C678C846FD7 B79A4B62ADA444E3ADF28D47C017CA64BB4E4D0A67307E8C2E487930A2F93926 8D5D067915A113583D5894A5E4BCF616D3DEF62A76EAFD47DF2614FC58AEBEA3 166AF73E75E48B1FF3F963E9C8B8248C71BF51D5D37C3B16D30DFA1BD5C38BD9 4DA94BFA8945D6EE4616E929D46C11C7EC1919EA8EC447B9C1FBAA7C08982A50 B923DF9738F8484DA13F52B63700484616CF8E48E7F8969ABA23E9625B300C03 7D322A78670E70729004A12BDAF905B4D574FECBFF3708CFB1901ED8AC050BFC EA63DC6EB75E8292CBF0B56986E5C5B79E114F43671E9FA7DCAA190FD764324E FA15642D173C3159ABA73674F8D828151D8215B56EFDAB3EE1D80E93C58903C4 B521AC08AC9AE883CD4772A6418B12E568B0C19C6A188380BF74C594873A62F3 B817AB603A6EA624D94375F58BA4DA5C98C9B9CA7E3D2F97D8C7556834DD3F66 EF5290F1B0715DDB0E7F704704E23448E711F1DECDE73F206BB233F4AA519024 6B7F50A21DBBADA8BDC83D1B1464D4F92CC532784BC82F010D613247CC5D8C8D 373E6E4AD81C40F29B8E218B4BC204AFD0CA850B9A5C9492DD13B24556712CCB D257397797B1F5E1DFD30FF2DCF55BFEC87CB4290199F888502C608DDC2397B7 62968147183F95655D89A7D4A68F552F1199592FD4AD3981077BFAD24F2623A9 1CB26C04033914ED25102B5E7AAC2CD521E1962E413F329508101380A6FE70C0 F307B702898EA2932CDC2CDC0755DDF6C0280A48E39EDCAE93C826A291E80478 9EA38A075DEDCC47B10DC462729BBBC4EC229BA70DE565A824492CEC19858B3A 84BA298BAA0793A4B2BDC804B4378E5FC901BF6AC024AB4543388B56A425DE57 EE873AF6CB35F8D6DDA78B3802ECF103B4F967A0E31AA0FD0435C7826886212F E0AA52DFD49871D6991E689370748112D6336C4736A565E39D2A2036DD7FEB08 778A1B5F3E6B0125F132EC21AF7BA5CE282559850344987051A0EF1B73A8DC09 A71F205DB3E87D4B062545D8C67AD3889284E79B86490DD53DA5F0E0E54A3932 C1509595736632E571214AE9B8C2DF2BA414AD2DE2F2628F96593E118CBA2999 54D17A8838B3F3C0E127E2A2A6160F9B82D2C8773D595CE6239BA057C38B7898 7234309AB3A67FCF82A628B414048034D1DE0401E6AEC7DD9B0C19A4242A867C 91EFDD542150A4F93BB90A9E11D3E9E5099CDEE7D4EA4B15B31FAAA2B70ECFE0 7EFDF77C8EA39BF3085592558ABB6ADF0E6E5EB54013D2B75D72C1D81F0AD0E6 CB2B6FA247B43D05DA9294947AD4AE5EB8051A60DBD7676D14DD9CFE8E80FF8E 6A8241223C61C9C76AFA0384E0FFA52C649AEE2953539E836DD713EE8D5966CE 7565C9161F2DDD068DEBFFD921B4B931A6A6CE22987EDEC35BCBA0CFAE2C8E62 BA3177653F158D97AB885F22ABF1C4D61E5E0F3E08289E44896B482525F9A838 C4B24742FF79A9A00C323590D105D3EE27FC27FED5E04F1A0486FD9C80A526C4 6EDAF868CB5BA26BFAD13FF6A5ED2AB25A7B2899FC2055DAA66E00951EA5156F AE573340DF9F66335511B04387ABCACDDE9ACACCAE598D41F6A0961EA844D37A BFE727BCA89096B3198ACCEAC23EA781BCCF191EE481FCBAE998E477F3BF36C4 645C8D1B89238B5E56BAB4BC745EFC4A6698F3124569D4A216D1AA9A7ADAD099 80685CB15B7AD2BE6782AC79DB85CCF548DCAC709A99FD3096BC1AD508F8C337 43E56AAAFEF54A7D631FE8C9490BDBD517FC78E508E86B1563E5FDE22FD7C0FF BFDCCAF7FB9DFA1E5D43CBC5FCA64E71C73C36D4635BD445B638DE3E8316A905 C7C1729C61971B5D8F3E5851CBD3960482BD3DC993186667A69948568C844F52 09C78E9BF70F8E2727F585C5AEDD2877FE4786D457127C4758DD43837436E9EE F8908E8E3112B0DF748423695C75691CB720AD2FC3435172F434F5AF03385F1A D84FC79DE23EBE42490FBAC85FA27DD8201C114C262AC4BE0941531B033CE147 80655E9B20BF448A66140B1C53474C0F574330C6E4C9EAB8C3AB9245498F825D A84CA098707143C07A2E24061863ACAA474F5A312594A3CE4471CD06D02BED90 959F961BD30599FAED938AE74DC2A4A552E90DA73F230F7C00EFFA71EBDDE716 7D60008B21EA153F9B55CD3F3500587CCCD2B37D842AFB589491B9822A04B90E F7A43AB1BA9393D957E655EB65BDA7265AE0F28B69C16A4A18F737DD0AC56FE1 11911856826DFF0EF7E39AD3468B61D541C87EE28B967D53450E6132087C2518 4076EDEBDFBC7C2775C01584DDF04216682BF268D53A04DFC9259C8136C3C42E 7B663E096AF5E77C3F395837668A3950F11EB9FB8F3C984B6D097F3D6E6CCA57 C37911AAB7FE8A584C5B81AF1D465527DFB884813F03BFB1C706792F28DC7C1D 68DEAF16BED7007280C37E773BBA61A7AC50D020F6ED0DAEC8485112A1F35D45 65EFF85B539127FE267051934E36EF5A2F0BDF9EE005FC6CEB4505BDDA5BB2F7 88F184189661E9DDDF109386E552B9F3FD7E2845846F8492F020E67407CFB2BE B038D2540E0561420B833726309EE76A11E5700161861A1593C4690DE2803803 AC4B5B84EAE982D942CA4E697C1091B6C98B085D7128CDF10DB4C22C17F8FC2F 16CF35AE1AC0AA410B114955D65CABC6FE8EFADCE32081E47362FFCD166F38BB 8AFB23BE30858F1C807E566D1F4CC332A4D59DD118 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR17 %!PS-AdobeFont-1.0: CMR17 003.002 %%Title: CMR17 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR17. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR17 known{/CMR17 findfont dup/UniqueID known{dup /UniqueID get 5000795 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR17 def /FontBBox {-33 -250 945 749 }readonly def /UniqueID 5000795 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR17.) readonly def /FullName (CMR17) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 52 /four put dup 56 /eight put dup 77 /M put dup 82 /R put dup 83 /S put dup 97 /a put dup 99 /c put dup 101 /e put dup 102 /f put dup 104 /h put dup 108 /l put dup 109 /m put dup 110 /n put dup 114 /r put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9D6295729076BD8E CBC0F4C1BE246922D2482233846A96D867B66D9CF25A1DB661141D36B8506E61 A022F9EF8BC1F2F674EDF1533E67A78CA29A612AA9268E113C5EB84DA56CEDFC D7A111403E6E2A8682DB04368889747E003A124395ECF0C7FC81218552EE7C6F 60BCFB4120893528670D0E8A4117EA5676915E3591AE5652D003EEF67818A41A 8882E102AEEEBECBD15DCF632ED246A6A58B6A7780DB6F1F9AE3FDAC8344585D E104F2BA2DF06D68945889A2A3B6C262FB53FC670BC5EB7C56887FBFB7AA7026 84115872CFB0652C6BB330447AFF8F0F665EFD6A41D6DB6877B08052F402448F CB21C26BDC900636C99CA347B79AA73AFCDE9762A992CA3DDF7279E5C50F453F 52098529850AFB1F501A442D6A02E0A2896F81C8AC735AF1E7EE47208B4CC944 649DF6802EEE813F1456205C6126D7D0B1821AB62DD65468F3A30575E491623E 0054E2E680E4402E1C8C538DA389B81603BE88D6DC287A076F92B224CD58A0AC 44B8D490197341808DEF243660971F444A560C747BC6F52707ED42A99736ECCF EBCB694A561C3A70A319D204CD40D402FBF937A00BBCBE85DD26C9E3F91B7D10 D85B9D314BC3AAD5A58B107F5F341BE2C53490924142566417D6BE03BB4977FA 6635EA58DEB9508E40B9FFAC75FF44C683680CF242FE210519C9BF92483B0A54 83F48341318BE16D2F8C988FE3DB2E7914581F579D5E323148A31E4ED03BC24B C990372DF5F3B0C5FA32EB2CA4FA0EA33316569133C87697BAA2292E685C26CC F8CD40A2366E60B47D47CC9D0FA29D2836011376A07F78BA7664DE96E775CF45 9BC91559A063073A4C2FAAD0893C517C5C46A1425D07EDCC2B57162E3A45103E FF26A2D2F98B194256A4B052AAFCC08965A50EECD7B9E8F35AFDF7B6568B3983 8030655E7C2BEC961A2F20539D617626E8454E3FE9EBD3EFCEF7F63498441DAE 16CB509BF239FBBE25EFEF07A3E16C9C71EB8D9DCB8403916FB40FD7F4E1A52F 72F2DFF94FD14D7D49FE775390C17C37C1BA0CAF35CF75D682B7833A83224158 D54CE962CFBAFB1B2CA50B60CBEB1F8F58DDB2F5470C355ED9632342D9382AE4 5D33BCA3A0A25EE9E5B39BE5370E7F20684C664EDB48E7973FEDAD9676F9EE8F 701CD4D8CC9B9EBC06E8C86EB88AD56E15CEBB8E1930E8F711CB6E01D5D14967 D7E6C1BDDDE2C4D00384EF4CB02877DECC27AD53FC981338977BA0CC0257CF7D B42E9BC91AF45D9722461EC3CD9DEAA8011FB855FE14B74BE0A102008EACA2B6 0E287BB4F466FBFDD6E65A5262B9322F95E20DAB875A10A84572D982E6FC7ACA 23C0C37E5EB47B8E69C07507B53CDD98CD1B6445E1699CF35B3DA3E0DC56BB76 F997C40E2ECE47DBDDB707EB527055960113F2DABC87FD9EC7D0AB36B400CE33 0D54D4F197B2830B43DF0AA802DFB2BF747A4C44B31FB708B2C8BBE1955A6A28 379C91AA4CC065A50098AEC0B837E180B76801865A43C74859DF18FE1DA1483B C17843BF1C7E1B11A8C6D8BB8CDB1D552FE6A1FD0A696A8F7405F2320F8621EA 17C1A32056C45A9ED35D2BD12D02D8B26489CAAEBF4EF33B66FF4BD9B46E4823 6395831A8F3366EEA0D0EA88D612DEBF63DA7FAA24DA979ACC1A52544BCAA007 6C39946BEA6076ACF45722B2B8E4D0823EA2D12B14A98367BB0433A21FBD9F94 18DF298C56F67ABC9DB1868D431A854DBEDF8E1F49E359A545C75A7AA1FA4D5A 50F1EE6B45FC68ABF65FFF257964E4E50D8B0C1FAF498DFC554073697C2F219D 4A68DA9E873B270B9C56F0DDBC9927ADAF9203FD684DE615F68C24ACFFB44690 89C0D5322049FA69E7FD00EFC9C9B2BD177B5B339907F81C31496662847BEC1E 56B5DCDF4FE618970F4268F475B2EF7E0F28CC986DDF098E59DDAD818649CC35 4080C0867A884B8177A6880F06F1E5CC130AB4243EF8DD8032FCF390765BAB1C 1F0C9728EEE261A09F8C1D7ABC7A6B1550551BE2A7D19D45B656650DB00B3A5E B3E1186043E173BB4DD5EFFB379654F88146382AE3F7196F099BDCD6D245FB6B AA2FA9B6CFBC9F0CD52798DDF2F13874BDE5B124DFFE0DD93E24C9DAEAE4C3BB 71A9A13AE2860F620B4EC789F95221015D9C510CB4AC775EF69DB9E32E59C896 1AF82C9F0DCDB4812A37761859A3D3BA0CA57F244489C78065346FFA78F5F7C8 0B2E8CBA9EE62FF5C27369D0BCD52857D40F1FB8F8A1441B83565A4150AB1945 0B54D6E49F66389E43096269EF5CDD39526A288C0CB81E324E75D326EC9A182F 2CD966368CE300B41873B08E17C3E6BB51804460D2562AF5A12339966F44CD09 114C6809AF246B5BA6937631842CB9417781A58944B6BA4FCF961465C208957C 81A662D560D0F81BD3CB53C06B6D979F04F6121CCFD5D52702CBF6C70C01EDBF 2040AAB9CB144321E68C4010E0E98CCA2603EB55DD62E881DB621C37EA4108D1 528ECC7A0121B57C6BB1E26F8AE7161ABA7E88256D2D6A8B7CDE2E730D137493 3FF628EF6030DD2330D747FABBA03B44CF600418C245C388F33EC5559E7313BC 4B530C4FC12530D38B27D6408548F25FC084DD0523B27D29D6518D3115AE7755 37162CFD4CF528214466FE525B13782F9C3CD78F3D6C7423E63A134C0A371F15 10F4ECE1D482C647B563D3D15586F80BD9DF7381BD53927825D5AEAF762E1CDC 3BD184F345029A95B3AD4D1B66E79AB4F0809418C0CFD4D503457A190D02F134 3F57FC04FF655AEEB783D6791E4EC300755861837D3D50649F6B7F60766211B3 8148F8E575E28D6C2DE75B15E722ABFC6DAADAE53D89FD295352781DCC2CFF6D 982F6DB778D6FCBF1B7BDCB53F3A23AE6EB499BBFA96E8BE04C3C8E5B660EF24 01EB842DAEBE979F2C2DB72AAB4D21627063B1D3C6CD40944E4CB81655698FBA A343766CB22E392E5DAE01DB33A00918D6DAA07F2F38B336A3C5DF3708865E75 0DE04D3AFBCA27A249E97377D5785B4E28EE0E93F7D353619C200DB967372ED2 153BF8BE945474266EB2FD30F80042A11B7E3586DE4AB1FBD4A741D36DE583E9 1CA25DA345520AA60634EC819E7EB493CDB128BBADEC3890F055455F060A1100 D5A41D7B180027E08AD6EE7E393DB9F83799544404FE397F557773BE6A130541 157C0EB37E036C94825B5090EF85F8B4E3DB72895D86687758C20EDEBD6D1079 196E9949DC6ED0113571C70B150B37E446E319EC54D44CC0CF6A14760953DF4A D0E1F33A54D240E236AB63B35BA8E071D77776BE5B9312245F2C6E4FDB4312A0 0D9CF723E7D9A3D8546C4739C00C301A89ABA60A02757AB1A0AC40B24CE6CF12 5850485B11E16646D7150795EABAEB08364A53161111F46A7BC3423A0D3BEB69 BF15726C1F8363914945DEEB29CB8766328318AF3B344FD6D77BBB92BD7FD161 93356493D4D8252AD125708D47C124E44232FB2BF7DD75F87889496DCDB75D03 F58A57D4122CFC194B75A9E9C4789C9A33C0435FB4ADA16AD4A6191928D1663D 05FB8152C0AA176FBA4755205F8A66713404787070757D3721ED6E6D55A59DF0 C92BA8F05EC7BE05D0A2E66DE85E75373483EA3BBEE0F0DFC7E2FA5FBAFAB118 058D095AA71FDFC8AF37E5A98406B64E58BF476C6926725D7EF3C2346CE3F662 1E5A4A18D966479A37070859014719456EA2C7F23E68E1AB2F25ED3A0C00A18C DD403506923BC983F89CCA125780DC76A411472E38173BC0DD4CDA7B43E13419 B5AB0B9A35E77C58BBA12AA4F5C7EBF8A29996B059E4FAE6809565570442AEE5 D56CBF4407E1CD9A4398B1F3ADFF023F64B230E3D29F526B62D964F5C8DF801F E94295AD85BD9E1C18E6327977260A871E921C0745CA06A263E335E344686E7D D6FE3ADB4EE0A7E462F3C00873C3E95D183CCEC71C0E5DC1D2FB310B28FC3611 67C23DE336C374F72368F4973052B48E39969305791C986E6EE35D0350571860 3A8ED849712CF21AEF444BA390644E8646CCA16559BA4642A5800827A0DDC453 7CA0818BC47DF6348A5209A2F0A10CA39840CE6346E89CA0E842BE8692DEF25C 4623A5A0E0B98708B9492E9F564324BB3872D6B953CA59E9F393C477E2AB85EC C557D333E88C111CF995FB79D9432DC94C2BDB3BFEE13C0D7D1BB920DAFA6158 8548447AFC65CD5515D5021E0ED7D213B0C08C35BB424AA91885CA023D7AF767 B83E619B15DFEF5588D2F0564296E14B5A6ACE03751E1016105C51BE76EA5ADB 4167BAED2A8899031FD7BA05C410ADA25ADD94A787EED1A7AE133B0568B1DBA5 44B41BE013782CFCA3D81E8E8210DD506ADFCE7DC7E792EFEF438221164A7D1B 5E7089F476240C5F94988F081943F24DBF7CC3D1E58CB89E1C0C1624682CC3D8 C95815ECC9183A4B3E353C7F920B7E64086E01672DAA7C8A81319BAA03C1FBB7 8E5E84CC5BAE0E107754794C755B7AF00953504094E1A9DF357D51B578259613 8D26F0BA26AAC459BBEEB90BCC98B865EDD26AA4DF533D6624EDAC762C446B6F CF9F86DD2D8989D4655775E662B93BF51805EE3CBA0AE2293D95F166E80973CC 82C53042D0249C598B0821E9E7F218BA6114EEC86C158F277934F2651490B723 7F0D0288560DA5BEBAFDDF243048E590871AD18B3B220EC56549004DF122AA03 BAAD6971D790BC644369FDBEE74A324083CFA9496C2A333774F06E35299242BC F4B26578907CC5AD1893613F2B8622CFBB7B55810162EEBFAAEAB2A6D69CB72B D7859C73843E665125FF450631F32E64F13A6207F368103C7A7318DBAF2560D0 F1CDD83C3E48CB30C62AF1E0896E1962C655D9ED98E1BB38477C1C60ECDB6B95 067D3A638AD43EE886338F7AD2D2A574CE6FD2E21F6FCB4220EFEC85ABF8272A 82081CE70E4390A74EC717F1DDD168F4A4A080A79EE2ECE0F98A96871DA4B52F 78441601AF47763C2219F5A167604C32F478D498835EF3A6167936994F7C7139 3019FF43C97E7978D3CDA641C1E391FEA572D308E759F28DDE2B40B5BC207A4B C5EB6A93EEE26782016F8B6534420BE4D790A2E1A65B6CDBE9468152230384FD 14E9AE84418A44F94E6825DD7D77D0BB5486DE26A692B3DA96C81FA4440C5D44 8E7F3CAA9B8DF38F87E09C4D78841F629F78F4E7CC8580CC44E59E5D9AE8B2DE C0682F793AE7AEC12A8AE688636197E8A08FEB70EFDB6203681A60223B9B0D39 2DA656E5E99B82130D4BE38D7AFE18568DD30B0CC3C73C1E2914ACE11A65334D A9F18135E7B86157122CD221C33C62012FFB16D2D2F3473A53BE3E7B9FD4303F 66ADF0B07155C7B9B002EA68C6AC7247EB3CE7D2670A60138049DAA964F86A05 22983EDA7242E6BEEB90DF61C937399B2CE1061DF1E551CEED4A80D86C2D4649 C9FF9A1F93E96773CD392478D5B70D5336A03A274E0A6EF44BE8CB2274324142 706BC2E340DC944339D647961FD7BF29944503B4AFCDC69A706AA6B0F6AB2CB5 D220A96ACC1EE5E7826F6F75F044224E5260D581AE761AD0C752A06AA03FD935 FAD65C9EDD4E5505396E331D45DE88F0D1A4303D766ABE0702C17E2A7F53C0EA 96A4DEC5A6B6186F5DBAAB05DD78E38AFE630465BEF0EC66ABA9C1C9232214A9 795D105C33CF069F6BE20B179F4CC9F484AB63ED25C1212C457DF62CA0D56E20 608572216F2D4C09010B03A8AA6D287C8F514BEEDC1C912552CC2489858BF4D3 084882CE4F4B6FB9EE27C0168671E6DA154018ABEAD013C88E1D3EC918371251 63D95BA0FE20212C20AD3F4DB614EE36B488A3F55D94C1EDFCA8E68E54A1EED4 7DD168DCCF07C3DDB5E2B499DB5635C5C5056A7438120DB4839427D07F96AB8E F842E285243E40259F6DF029E27779CCF3D3BD7206B2C341045A5A4AABACC2A5 91C6830FE05ACDCFDE99046F16F2AC183426ACA4A89FE5F09B7EB2F811BB5FB5 AF073BDA2886070B2327D582DCBA66B47E8948C3BE05E837BE4B81402A583403 74FF9E938F0E9DC3B1CB81B93DFD4070F9EBAED40BA570DE8F9A5C2C0A097311 22A6065139A6580E332473E9410D9F4C734794F79E41D0D437CEC7381919DF6F A24B170E2BC97A6396A4E3AC3D844AD6E2B8FCE1C6AE97DFC5319F49130C3D6F AF2541EB2384D5D4CCBEB976846EF8C2165DBF706112BDDDEC9A57D157F5996D 95229FD5C71B885D16B177BAB06B9DF5740A45C2A005778EE879193290419C0A A4A339029E37E685B8A05B111DDF94AC19B1D85C8E6026E57E3D3B373C08557A F96E6FE3916695ADFC1F0BF5D558565F42A71C61ACFEFC9026424397F0646642 7EDAA05794BCCD164A645860B57EAD53CB6899B18C6E9496EA4DAB0A0C272639 DEBC4FCBA94B3BF123F7771F602E7667C8F56E12429669F2219C7D8E294BE07B 71E88EA62F5616CAAB7C0198E6FF12A348E36B306FE2684A401399431B6A84CF B46EE4BAA0F4099E65E9AF3B70274EDD6B6524F4FA38C23F9CD5273EEDC8C6C3 E7312B6E0497C05AD3F3C246638F01387CC11DBCBD287ACF54D8E24759F51415 35ED64132EF4158F54AB9F4D567482B3057880490F805822F71E7E2C52F7BC38 8B1F803AC3731064B90E5E97AA3351D17E73DC2FE526CD6C91158636E395867D C1150FD3BD12493FFFB813AF0D08C8ED0B7418A2CF90BD5B783364358605D075 5DEA95A9299C0654EFB28E2FE8A41358A0DD124D0314A27558E42ED5F2D74BB7 056DE04D2CF13B9B804A3CBBA29BC155A3F18B8B48283194C33CE8291677E1EF 0721138F8E0409D49BB99F217607586D2DF00C29A25536E21924B4CF6702CF85 C02DFBFD2AA4DE3DBED1D2C02E21052A8D10F96629D0D18154923638FE0C48BD E2DEAF11663E20717EA77A5453686AAA39D6FF7919AF09B1AD956FDBF734F49E 262F3076F62E77BD45122B55A5913902D9F91C4246FC235BA9C0FA4A96994291 830638949BED423387DA2D455A3C9122484EFF27F5367D1D3DD27D207D973815 965E1CFF36F43C653ED406F65348671D9FFAF55BA3FC266D438AF473181B7801 164EA3F04FEC870743195B3F467DE36B3719BAD9BF15A18637A314C887D46673 445BA3C212749B0A33136FEE9FE2C9A13D62E7ACC96378D257FBE0EB06AD4D4E D41976AB92AC720DFD33B0677062C32E6F5C992A0324FD26E984B5341A58C190 D20EC3F1144697D514D9157340A6C9F82E62AD8CFDEE59F6FF86C6250CE33D6B BB82DDB4F65BEFC6F6D0E4044F7BF307CC346E2FFD191846E3CA288C6F91CB71 5FDE855FEC5E38816CC635C470BF15263A10A409F0BC4877F7E6D4C223E3564E E7BB5B320AAA5AAF4F32528F7413BFB97C70FF5E6843E1FE501472129BC9758D 7531BE576C75840CBC4CD3E6D9E5FF52559B68DE6E7827128BB2ED1BAD43F36E A0CB68C1A147A7093EB02062AC5492DB7EEE08B1BDB187E15339A66269E459BC 67495937B4317AF66A498923322B087ECF47B601C26E253D223A784DB2D204FD 0668BD403A73723848018B7C86B627B9AE0BD9038F567CD5F670CAFC5C4D86FC ECA211B713ACF8C1370191161CBB6C2592E8B9DBF3471133F2D9A60F15D72F9C 5E5539D59A6A7E124D9A38A6FF6EB7C71990716F88E1888295584F17D49144B2 B01A190FD830741285B001D05FA4E85693A5DC3207DBCBD7BED7D230C72945A2 D7CBD8E7A0C607F80A4C94CACE846F19B5B15D74CB090F8360C05DBC6BAA5BAA 1CDC394C23B0F46FBA30A15F33344F44E47C17A79B98AAD61952AC0AD2D2B38A E272F20B3F66F8B1E65BC0C4729108DE73387F7626BFAA1883534E6966E13B41 C5423FA5D180EF73443DDADD4EB11131FD46CC0FC331F19EF284EC27CEC83DBC 23B3E4DE6BD0527FE50100F0354BD1A21C744012A59D5F15114F0E5A02E35F5F FE35BEEA80EFF52675CDD68BA59CC5F7A751C23EE401F99898B3ACDC27D8375D C66F81BDA049107AAC2EF8BC75FE1B4F6B65D663B9242BAAA493C3FD82B78173 AF615544B2FEF3B66042D16EDF276B5F3E62A4BAE345775B03733F87EC8AD884 912594F372004B8ADEE6F95ED7A0F348C4FC5384DF995DE7F1CD35F80DE2BD5D AA55FDEC82C13C4911BD316E1ACFF8BB118DFA3B2DB141412AE651AF9CB304FA A2927D003EB1B215E38C5B5A2FEBDA8A440EBCE79079489BB163AEE79D623C8F 0D91954CCCF4D3275626964E69541390725352A8C17EF25C2541148D1EE09A7C 4C0496A519BB05E17CB9A52DD4452534ED6E640F4E887E1AC9ECE2481C17C831 B0ED498823FC7F4F9FBB87819E1EB15F07F7825A1ABC04287970AA3CED92A7E5 4DC06F6CB709E6DCA9D70617F681B51CE82D5A1DF1201DE0045D59AC13027901 7AB2480CA5E99C6AEAEEE16435074B67053742A1ECDD1C2612D534A8BFDE57A5 C7E034B212D2D5780AC98D8C1F7B71E0CE75E0116C31325C123AA623061596E3 E95B58FAC2D71893CD0A6ABFEBD47F9BD3ECEE8530BC038E937336D1FD15D7A8 C401CE7952687B2C302614808FBB20A6CBAE229EB9B2A444AFDBED8C563E995B 30B58E87C7DF48BE95180FD246834ABC9D55934FE986AEF4D940A179C94C6D01 59BEF55E1DAB640CF06CF671CE4578B447283BC8250B0F3DAD3A583D61F85F08 6B8D78E72D5923D589D2BD779EA024AE255929381835E3E5FC378FF295AD6369 46160D0BA7321975330CD8A4B4AEAF969E58158A0E5E6B4AE65F710EBF725689 2E2B666D269AB065E9C9C48FB80688A0A65F11DFE2AAFCE6F89047D79247E5AA 314C74FD396A4C80B4F71730CFB971B761ED3CCC071AD555A481DC0FC6CB393C D2938D5CF8CBB8D06B01092FD380332CF954FAE479A5D1BAB9B9723942602140 616D800C85D8963493093A6A13C43472D616E82E1500F778B762DFEACC24B0C8 1AC1C7390A0C04E9E0CE01EE2DCE989BE1D4013FDE8935AB26928F852C87D1B5 3EA7EBEDD6E36DCBFE13D8E8FA3D085EF9D78AE388250E405C3921CE7E38CE7D 257578927C58915CB94FB682576C025CEE1AF58852B50FD33A9E34AA4ECA14DD 8937990069DF03ECBE6BDF229B72BDE36390208D84E39EF3D39A66363D82A21B B8DCD46204D2331E80CB2ADC5DCF082A7E0C33A57299D6A2FA256F893FAA08BB D75AAA2E00DDBD18142DF499C56420F65E00FC7FD0D95002CC216E07AF6919C2 B96D9AF02BCDE01F7FAADBA7BE1E56B20283EDD2193D0369E9589C6C1153133D C35DAF9400E3CD7F6DA0DD07D8424B2BFB537346604F3203CFAD60E5CD596FC2 CF30571B1DFA92C095E2423089F5DFF5110516F0358297B1C930166687F1E229 75B39D68B33215729DC78686071FF45FF48904D13D2D97F4174B54A0D4BA0178 1AB24C8D2EE928222B30BA0CE2A3A27C62C22F477A3828CC23FC4B902A695E50 24D3D3D461F84ACA7FF6A848C5900BD28B14A320B870A719940C9EB6308D460B E6C06C899127DF2A2EB339F63489E4A35E1FB051DBB099857BDBF05192FF01B0 90206C6912424FD36FCD7E96841CBE16B6C2AB4742698B0A1E9A2AB6695C941A 2FBC39D500DCC2243B470A7358DA92F2E159119E2A3D7A34C6205E7A41CA7667 D8AC8A1765BFEB129F589DF0244CD985EDF7967E688AE3B06D36E36CE307BF56 592A57BD23E5FD6F7955623E63ACB128FE4A69BF34FA787C5B05E3A3433476BC EF5142E1C9D72AA22B461ED3BA149E098BADC2F95830109FD398F8C95E5E82BA 19D3950EE2FFFB15DF9A808F842F0690B27A749039773FDAAAAB819B3BA0185F 84AEC2498A26A3CB3F59C1311A1AD631AAE4804F31D61D5EBDFFD4AD13A45782 D9F2D421252BBDF2C0A20A5FF2CBFFE108BEB135DD2C9DD126F8743A439C7672 092926BAA7AE3A7D1F669CCEC2E53F669A95BE98516457EF95D67DC359883063 53A82F7F99BF0AB2ACDFCBC3DD7A4FB30B7BAA3CB65292B8455417241D3A2D3B B44694E4770FD431094BAA9676EEB9BA408CA2674195C385BDB957A145203764 40062EACF9D84627C2627FB1106AB6A10038F08B2BE493F5E3AEEFBE3DB93988 C9D51C3061997DCB75A141461D0DD905B8F001E4122E3A26B87F17D927AFDB8D 09660E2FB642CEC9E075B0C1DF7183D0DDA1522BBD94C7CCA1F7CB16AEE5C01A 43E8ADAB2F3212499C0D50B01624A3E7311F76F2BB4F7499D5E61B115FD17400 D6300C38B5B8C5F08F00A88C4734840E240A3B2474E3A4886556446A5BA059C5 69F8E18AEBDE51638B560D19686357898E322B5852C054FF714110F78B0D2129 884B22D46E7C3134F50506D29A692B232090C58F0E525FFA732F35B2353A4C86 C3BA8FE8014076809EA433B2FCEC2020EDDCA95B2688F1ABB9B6A05E2884F53E 4A94EC3AED53D76D4C2F7DC791FE1C519333B4A854C5333D98134097D1850A15 1491FD8E03D9F69AB4E26D463B5B0A7B49ABF4F849934BDE7F2BB2943D23665E 03A041B93BB248A94D8D62D46485BAD8699D7593784A0C57712A48F5B9C59823 749AB36D07494973F5249B2FA3DA337ECE7C339C92D3C4D910A64161374B627E 346F1AB6F0210BAD5991868953EF49A3FAABCECEBBACA618495A02ED197894D2 2F5CC1D515C7F5C29BB5DB44A3A1177ADB00CCCE9D3AD46EC2CA2789AEC8783C 0F49BFD4A409F1E1B607F97C3B64826D89AECDA46B810065260B67794B32FCE8 9C8827F4D9DAFC319C53E4B1F295105A277BDD9D78928DF2ADE718A3E5E81ED3 342E0F84849B4C39350F49B84A79942938E7C8AEB489B28719D5BD3D829FD86B 752F37BFB08D05C516D059B509C2484EC0DFBBD7B2FF3D297C55D6B1CDAD01DA EA46114936569DC5DFA26DE70950C857051E8F3EF410CD6E63CB4AA9DB961C8A 613F8E039595B72E90DCB05FD1BFD44CD45B6FAF9CC50A6166D5DCAEC1FC8C56 4C994F271604DDCFB6540F4890735E39228C42953D0182D75D9A65BB54BA9F0C E0F469521147B51219CA9FBE519C6F97FAEE723FF4FFE9A16C1082319BDA6276 714065EBA70C89D1E94178B2BE745D91A2D124A3C2D682525A30F0EA35F36435 8EB5558364F6E13616685914A4C5ADEFA958654031ACC4A1B047FA8D8E2EC2BE 15941137B617A9A2A0DD0CFCCE3234D132176F2A7D6A3B500EE50F035EBE27C5 12C0C894FEF4E69F23B40154B439F39D8648B4A8497B24C6610DCEC3B941F1F1 E8C0816DD8DD47773DCC16458B8B6EFA778D373D37DBC2C65B338D69A7A4661E 31929A78E6CCF611B61118852F64ED0E50AB702108175B804156D5900280142A 0C00A565E636763C14BC29C52325D50DE20663F4185770547331BE40DDD99E62 BDDAE10F0BF996EC20AD7CB565C8278209347C36F61C7305CE6437F66DFE8227 4C02C7B51AD49238F368AE21825AA7F3791D2C98477895B94684FF7970038009 FD33D9473B7C061EE9EE9B981D953FA54137AEC3C98E2B2FEBA9C80387BB2130 E1389090D771C5707EFD3387DBACFF4EAD64A5358FAB8F4A0BE082DE7543A7D6 2558F2BE7BF6262571DB328FA483290A558FF7FC5EAD3FE91F021C51E84B9E7D 0213B48B0541D2F936E0AC41D99972B3CD6B434F1F209498906837E0FD1F2B8D 65CC827862C3BFF8017A841D2115B27BD4A486E7A8E3A1A49DFFC9A4593C2B67 52A9F2C252CD6D568AE864F25113480071B9330F397C4DD8D3CA6CEF3193C51F E8C376D87A2C2F5463BEACF609E8C7175E2652B869DFE68E870816F2A8DAACE1 DF7C34D2B9C1BCB0DDDAA46F8BFE9B7794D4142719918961E98B841909131F00 46649412F352CC3A6A8F72F5049A40C23AF5EFBD72624369446101A5F18CE1F6 B74541AC28AD894472E7527CCBF915D6779CE920F3761B9CAAC3556C9B53D11C D31F8EA3D48C4FFE0789CDE29118CB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.0: CMR12 003.002 %%Title: CMR12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup /UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR12 def /FontBBox {-34 -251 988 750 }readonly def /UniqueID 5000794 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR12.) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 46 /period put dup 49 /one put dup 57 /nine put dup 67 /C put dup 71 /G put dup 73 /I put dup 74 /J put dup 75 /K put dup 77 /M put dup 82 /R put dup 83 /S put dup 84 /T put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B 8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A 966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E 56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F 847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E 3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F 59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A 323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB 5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D 775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E 37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F 89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C 5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B 8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B 08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC 3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E 748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA 1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D 6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D 903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B 6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E 51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E 512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A 2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A 3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A 845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D 6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F 95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F 53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A BAD50D9C98DD94332DB4C7155F8A52013F9ECB7CCE3CFB3E667C57B022A0A753 A45E41A9D8229D5198031ABA3DAAC142AEA5FAB6694A6433629E15AE45A67FDA 34DE10D995ABCAF45FBB3B6B73E80D05F4C51F8C29D4B0F67C8A86432A6C5E86 F0126AB25A5CA2875B48C61CB8112A4CF9AA08F8B0157396CF63CBECDB8867CC AC10F060630C9BFBAD84B1FF01C814878F0C177F552BDC9BB181B14581C6E968 DAAAB2896FCFB745795C4D2C87CC15BAA041EF80C5BDC12EC1F5786BB41A5A21 073EE0BC436B346E014DB4099EDC67BC432E470A4B779FD556341061CA3F2BE8 EFA332637AEC878C2BB189CA3267B2BE5B8178E6B7889A33771F86276E6F0B8E 8E93B816AC7005575762EF4DE45E2794B7322F9B6D8E634FB8FF250D638EB502 818321B3C46DB51B8EC6C2EF1D05C716519A3BD6B12A67239898F8A010CB8279 86D2D942871606D4B8A274C720E46E43BE44C74224A8520232F7F6C96FC7D6D2 EB817F578B294EC22FA1309BB09DF742A76DC601215DE734D79169C5AB12635F C766983CAE15E74345D50AACE2E0B3B5A4AB7435D376A882A4653649B7CDCAFC B836B5023DEFD7A1AABB8592958730B3D49052B13E307EC4702F80D7FB3DE8FD 1216780D92370DC2A4555996B384D5818890E8EFC10DD914F10B63A40AD914DE 624FD9C30E34A23DFF08F6F2F9CD3907008B36A24F278CD6C27F9088D9F91806 80CEF5B6CABB33D14C679F926B92CB859C231391148C35D8F88A05EEFC795EE8 2FEC8FEAC36F94AE7739A6213EF30A15937D0FBA6979934045C245E8F67E272E E0582B2190E7FA52E3EFDCAE2030B5CFE9CEDC35C874E95065B1353474253E19 6D470EFB25B47A860B2013ADD469E903E0A0E63B5BC13AE9A3AE17B3271CE0E6 E3F57A42910A9D67BC6ACE2B7A692A0DA81571825E1C2F1F53BA090463DF5582 B1B7B023E9DFA7CEF7B1FB0F20D5D2D2D2FDD350BF1DDA1BCE792228827A7BAB 5568AFF0BD324418FACFAA77098424004666BA4ECD90D856656E53B7621DAF52 987703FDAD45670D6062885478F6B2748C8F1224AB2C00A68EEB2CA4A0CBA034 C9F7066CC0DE467EE03892DE821D8AF8042412E4A1763B138CA9E592A5B30E6C 16E503132E4BB5AE5D6E17EF26ED9AA28591BF240D333D0F7396E53ACA4B3472 55B5C905D7E6D31CFA7EF4AD43573CD0966BE8B62A174228D9E4F5A0DD26B8C9 021222BB6829A8EC742FD14079CD49B3017C4D6EF28EAEF9CB26F081BFA1CABE 5D71A1A7A18890123AF65AE23C99F6BC370E9657584078BEC7EF9AD9EE8D5402 42FF3A74F6B97F85699AA8E4DC876E2ADEF08941F159F3753EFDE2C815E8527C 3D89785BF812755AB9C9B1A9EC77AB6D979FC89F26BD184DD698FA21E1DAEE0E 774027E604130B3AFC34E372AF668F5EB50436517FC0BBD3985D75672789384F C9E30F080EFF87AFA0A3D734219CCB4DE3B4EE1AFABC60A674C6D965CA00B81A F39229B7DC12A8153AE19DC73BCCA7D31E07F526FBC2F8E388BF7FD0C1806F6C 2659968EBDE6C1FB0B1480A66F0AFE6FE50C3FC5E4F922C482C5F2053566D3F4 677315898CD3B3F13F1861355D191B2768CA8D01D6090F324F386BF7BA0CD985 F0818038810C879BC46824761539128D2583DC824F04464E91BD5C6E2FAD98AD 62C54EB17931651CD1AAA65EE63A48407ADCD9950BA257633F0FEA9940C8179B FC1699CDFA2831854889BBE9885C7C86E0B58F758E892838637F19FFB7511DE2 9624FAE03243CD9C3D3EC8D9851A8C1AB1B6D671E8E8A36162AC7ED0A4B9130E FA6A5FA9B851F066D6AFF686DD46CA07CF69C896F53FAEB746D2012FCF4C2C68 A0BA5284BECF793FC3A4F1992ACDBA36906AA9BF1ED8FEE27A1FFF575C41E958 F5C9F29173EDCE8C82EC3A9CA177F9B5E4183FCABD0743D276BB26A8E10D2E0C F6748C35647D6DF61D40F8E1FDAC33D320DF88BCC1F91E638F2AE1999D984663 D27E3AA5DB04C2EC2698AB1DDFC0AEF8129CC8E64889CE6542E5BC3AC6A04203 68EC9B28A536187E996870F5E7B1611774DF86C872D11FED7FC480BF19A154CC 653B7A70A845FCF3916792AC246A36136CADF4BE732C728C7E219161EE3F2048 7120B3C3FF03292EFE4C83FD59A090C712AD0E01855733C2290299853F3EB526 EEAD8862197CB33FA2F20FAF718E47FE490A09B425C9A978FD3F72A1775E9436 741858ED18AFDFDA6ED5D5FB3C62FB29C8B6CBF3D056D15CD98BCDF151BC5137 F891121F74BB33ECF06BF045598AD7C002449BC563848CB7C46CDD49CCA58370 58B0051F4F48D54CB3903595329EEF149C116463F5BA693CABA0C8D326D2728D D998BB67B44C0089868A89518536B1D0C09296BE82D928F6954BF7F82CF76066 B7FE6816935C4343A472DA0FE792F27062ABC9D8D6322192BAB07386129299A3 1E208358A237286B06F1714E7A36E31131F6A827D41E6E5CE261FF833C427DC4 0CF9DB941688FCC5EED06BD9C0A95364A34FC2D06271C88277317B39344A8951 CFACE66B43A974D8C5E8054AB44F6D0D562BB36C11B51DA97A6E38D765C9EF9A E10151FD4DD0AE0359D7D25385EE454348A680862DA96BEDAC07933AF2CAE34F 489802CA92A5CAC6D1BDD01CE20EFF8EA8557171CFDA3DE5F08E316225E1223C 99C812147577DCDEE4DD4663A1927F6FEFB3CEBE56AC565E22C2A19CB6199057 99D54C5D4D71A55C843B292413111A5D94D877CF74703B2383D1B7CFB25A4569 49046F2D3294E00BA90677EA476DE565E8F668607F499E1C51F228867E976CAF D34AB04E0089DF28A45E463508733A9A2321F1E6BEBC004AF7CDACD2F005F24E FAECD7DA5F0AB06920B8B587439821CB8FA4828D3DED21BBFF2BAAC62E213AE8 FDF3F5E259D4D511249D90815167108402AC0117CA8F1A2FAB8F0BAB0EA47902 0D48E44D3CE3D8E7AC44790CA3D0DE31C13B4E4EA886C0908D5A2C1C8B4319F9 32ABFBE871B2888FE8443F57F5CE8C37C6EAB0520A959DBD3613A66E03968BFF 6067064FB3C63573BD9A1C9C470D136F4063329C9DFF15B42EBDBE6F0F049557 9571E6BD4C3EC2D081E67FC13B387B9A3C5FB0094D3AED1215F3C886397C21A3 53543D13448F9471127E9C220551B17FA27DBFCB32C6E400415DFEF1C4387CE3 745FE9FA4FBF354EF115B4DF8F9C9F43BF491914653149697E3DCA39D0BDCA4A EF9CAA9BBAA98915CE526B282C74306B1121B62BBC1715F6E6F91D3C439415DE EF811ABF0A3F59120BDDB66C31CCFC359E6DE94F2EDF5BE7F85CE3B18F015B50 9D9C342B7848AD8F462F105CE7415EC1AAADA18FF885BD49F6B1DAD5B27CD06C 1AC28129DD16058772B2611F7172B0C2B07A9B7F9A2E0D26A78A8F8C7B073FCA E96A090A905D7F34CEAA99495B5F2451F948231BCF23C3F458D3075C4664C7D3 44CB1B50B20A9611114C671534D2CD12266B4E7B55488FC3215637FEA7A3A14A 0A87F503B59FFA8EE73C77AFFD5DDBF24C0EB2BCEAB19616A2FCB0E02A9AB2F0 D89844D47D423A3034B2E1988DE2F062AC2896C02F32C1F180829036CC3485F8 226AF5481782BFC0D92E388FBCB49E9A70281F833D39E347FC6F564C61EBAB1A 9840A24FF24F79A4FFE79D7DA6AEF8ABB7E646ADB001C8A1E3D6F03E5E42829A 567EA256121ABF57272953F3717DB469798A5C93E9A0A9E437D3CE64D9AF69A4 7DF33A7823603206648BC389CF7E7C7A5D4FF73CCDD205916969510958D12B44 6403426D73349C49EAF685E6E68C69A468BCE4D6C585E6FB6E23BFDDE3DB3D0A 7F8D0C6C48EE79F3D965FA5CF2CA096B4E1809DA2AD1DF4566D6CD7B1D8279F0 D269183EBCF85CC7C77908D89C3EA124910D5D1D07365297573127D43F2E2BD9 77213F4B9A2F4E9BA7A2F862281B983C9BCFA262890B2A281CA2F01BE93A8A40 90815C146A762D59CF4FC63F2B9EA92EAEE202D9378BC793CA876FE1C375961B 51743034B1468B0671564CD90A5631A2F48D8A62AACE9E1BB944F8080A4D89D9 A6CF339768904F4EB0673C374090612FA6D421D6C8B16B2CD17DAB23A0C56D71 141CC4DD0E9C0B930185170435523FC65306FF41226CDE8D0248286950929109 5685EE7C5EE4A0A1B83F1E48314B8BA71B4278CD62A04E1DA2BE3A1B479C2BB2 0ADE7D40F429F96DA8DCFF5D92BB22CC7C9F1C28EC79E6455949495A806454B4 83C6836CE2A65C6CD760BCFE2537F281B4CC0B829F4FB3851A3FA3EF8B19C878 768AA5979A5F5BE6FB2E5D27BD9B78BE293AE4FD7604A74674B95B0F46808CC0 ADA5267D3DA047319EDC9E36706CF459C42C59DF6FD202A6087F22CEF5784D89 1ECB9EA86E3683976B65F90DC391E4C3E681A5FB74B3D7AB0FF1AE273DB24F9B C12C7C4D49914BC837B5698F440FD9FB54C47A5D4462F6E6E7013F2A569AB064 23FDB1C8C49008C9C103A11DF42FF28A46535CECA49925BFC5CE62AE4CF3A9F1 B7B942029ACD6CED802A0DF2454BF35C6D11F738CA42B244E4C64C6B2C9A77C0 7F598621CED0AE1B85B70AAEE1699F661A2095793FDEE1A6E74CA4256EAD3DCB 10998DD5B0F841868215A940E94B9F2B80F4EEAEF4700D752F4CC34E91A3DB9C 670D6AA45B61FD0C00911E14261B93A73D54F7B0F2F7AC5593C6E9EA447A4205 0A4DA0C83C2B69957E4BFBC4F05FD447D9B9F499F36A89488AA00DBF5C8798BE D9BD0C6C754EF887016241A9CC80CE0181DBB1CDDFFD2C2813504CA1EC0B3FE7 4EA006DE5801F115E6B1700F2FBB9065B9C688C4CA12E56B48FD40ED402C6951 FD58F6E95C2F5936D59DC46C0D3D24D58FFBF1B5103CAAB059C6878B660BC220 43D62E884D975CCE47A99A67A341154490D7CBBBD32852508B4792A2D67FE8A9 05B19BEDE710F4DBE156DD84E1871FC863EEEB894D73F6F3B0B07338B85C53B1 5D4AAAACB21A9101BE8AB6E9CB646D305EFA6F28D7AA6D303A9572049C052472 FB7D927E36A2E4A653F0AAB74D6B84F00EE106F9DB3A1DD9599945A622BEAF61 149F2026EC0351468AEFBB545B2D835F227042E17243706835869B7CE5F366FA 2E65CFB5EA96BBEE06CDB378A01175CE6C04132FABC56BF522DCB9F5DB7050EB 35920532D6A1C07E751601271D6816AA4B490B44FF50CAA188A03D634B755AD4 1C00BCF38C570309217456C05BD6FB8EC559A5886EE0E633219AEB7BE4B36367 D7126E95B954A8206513329DDDF492F84F7A29E8C600F6B2B481D9A68BF36AA3 3815E284A4E227B588A1148E804ED4DA378031F020222184727D16AFC2CF7A49 27D8413543A647484373C0E5EE8D402F23F263382925283A2EE3D21FCD7EA200 FF40BFE47DA1120ECD7C0CC154C8188424623E60AEA6C7C473EE0B542C130B14 9E4BD6DA1DF464C4F36EFF2FD22475F23821D1603F42FFC05BE635D93C5AE18A 00D853E4398DA19D44F3B23899ECD0D380AD1A6A4F9A6457388B6CCE86BF2CD4 9AAE57215A1B7380A7B0CEBC56A4BFB5304FE312DE1F125E9747225A3A9C551E 616C240386314F05874D87118CE95228F2F4961F7150EC638CF54DEF116F2AF0 33D8CC0A08C49E9F8FC125F1860B4EBFD79865BAA03BC1B2DFA56BA05D689976 7A7FD5C1F0919711B1E266379C00C955C76169526EA714407A2ABE471A5BCB73 4D19691A573AC88A5C1F4EA5F665D45E0932AE9ACB380C53246C7E57ED32E832 6B7C85C3E1E4369345DDEAEA7D8CB6628A581E55B109575659A93C1A13889B1F D03C1A7BE5EA45D6A4FC442AC6C9F68AC5FE872AE15CB48DBB86AE503DA99ACC B984E2AE0A083C30A92E99ABAEFF13E84DB61B5293D8A2D7CCDC92C77E02E90D 4E6361CAA70501C9CBBF4B40B88580A03F8FD6D652F0CDC7123F1F0688BD23B3 56B7A14887F7B0EE2A84E3348FB6B6EE466D3CDECD7E741494DC400F02F593B1 0B273B214126603A6740600E1948114FD247EC0DD71073E2A0B46F40C34F03A9 67095E55A8CD7C186B61A0899687856FF219C385B0E27EE8720A2663F34317EC 79DC5780EB10C4546BDA908950DED5B9C221B0EDD305CCE9CA4915A3F1CAC29B 0DDB8FEBB3B21001715D4EE4A3EC2AC83A21FA866FDA19564211F1B5C9242CE8 C57299A7BB1D0F5CD3E948D300A4DF637E89DFF40BC7D664E20CD50DC7284B9A 48C38121834E9712A56EC786C5485FE16FA35DA8D80A77BDB3909FC5682761CC 5FC8991D5FA9FC5F43E5047CC581B4418AE7B0A49857A9AE59517388254E1D54 5E8B41D17C29E9FCCAAFFFE2F09A72986E9F492CA52BBB737A04029C2F9F63FD F3CBF8A92F3AF09F8567E678ABB065EA104246F4FFDFF2D55259CE4B84C0AA83 94C283D6DE97868BC3DAB32B17E25914D6F030127F71FC47A1E6D6DB0BB42077 4EC8A4B40F5621365D0D1721807308508C5E485BCC16B7D91A5E8B7A0AEDDD02 C804B0EBF3709BEB3423FE3BDD2BD2751F91857F1061FE39E1D00E318E37911C F7AF1D13A216BD717005E151B88F20BB7009965D18C38E9F52CFC0D4A7A2595F C4369863855794228051FE49F1EFAE490413DA4D54D9CE2D3EE10E8E3C3C63F6 7D18F810471FD4E8617B36B0A3BB7043E918570EB12E4DDFE37196899C779BB0 C4E2B3769F3C8C809528251AD63CEF82A41024BB1C421310BA6858F73DD259C4 2C0F4324D032A44E937127D1BFFC1597A5621E70003C196163F5D8A1BC2240C9 58A8868F36C9EB27E1BA68716EE16387DBA64BE049CFD6E3E36240A8D5556380 E5495AD5DE962D46DE0FA3F917C1F101CDABEDAE7F14E16ECE31415E201090E0 EA69B606749146CA2E4E8A981C536C14A4CFF44CD3789D8EA30820643D52D8C3 849C0E1EFFD683133E29F0A5EDD24F3DE3764649F63BBC540C5639A4C9CA318D C5AA57573264AC6A61E2B6C174B155F89AE1E4E012AC99B194661695C9BC1F60 C1C8E9F90876A0718E162D1308A7409EF74EF80C55CE7B768CD8C32CCAA23DE7 53C7B0FE28873EAB15F184237A86400E6080258B630C8F3C4CAE042DE3824CAB 7D6BD570CBDF5A2F766533813A7AAE0E0A9FE4F28780D0D34022589FA5FE6FD0 383A0171F27A87A4D01C10BC7F938AD60F122AA4E88166C100A94D34D747DA2D 035A4BD8D32E860EF29DAE85AE43A728321332B6EFD8EC6B339F4EB2EFCB8C7A 060E2CBBB9FC849497F1F00ED02995957949F094AFF2518A6EA084EF1CE740BA 094768D13D5E1F13B6DAB9E9E952E635BA6AE26BCB98332EBCC663339AE4049A BCC46C2C684960C5098061F8BA4BA9A1C4E87E304641A270EA6CCA4D00CAA4B8 B22E2B70B4065C52E2F4DE16758E881122268A25EA2BF1CD00E40703BE0C67D4 D7449EE2C5F06D1963F452D2F3E7EE8F7E236CA14DF42BCDC9A45DB8846456CE 36A81882B4225CB48BC5501CF67559A6476AEFE44CBF6A9682944EA381A5BD97 ADF524977D2FF7AA5710CC010B090ECBAAF3F336BB3932CF570CCC833BE41E71 6AD9AF486F58FEF2528412B7BE6ED9A0F71FCA33D185DD403EBB17F4A7B99F82 A4BE28E43E7372AD8C0506FE6AD5743D9A0796723B452476EBD5390F201BBEDA 102FBA95BDA25C4129F339931B0EA8E0D4ACF15AB26F7BCF324683270A6BCC69 7E4B8E2CC1F0FD32C7760FA6DDB0EF75BE9B32D15DDB8EEFA041C5CB7E871498 4C6BB68FBD629859AB1FFEABA79437034832AB9805571D811E1FF3D0927AACBA 7F5EDF289732AA582AC01DC6A79087E8B0233D05F8B1C6C237685A1B8710CD80 74F1BB44D27C06DA33922D8EA822A9030D461536A8548C625EEAF1C91C1E0F29 EDEACDAB7A62D2372DE0C1BF6AAD415AF210F1CE7C1F275251B77EEB0E57D703 CDA825040418326EF94FC60F6FB482A04531BF04550E849D920D74789B8DB843 0DFE32C65AFABA01B07A635D2B6AB492F22919EF544017D615ED576CC005D262 DE56B883F6591AF9AB39021786665D7B94664FB92B28723896B06A6DB6931558 DB77B2C63BF735D01C2E4938A7CBDA81FA02DBAD368ACC119D01189E4C5FE8AC 2FD6AAD722F24268C875B87BE6C441735D79FAC822808A8F592A4E07FCD31388 D2A01343E8BACDD229B7C525DD9FD1018954373F9718877DA7CF3CBA46D862D5 038D95B5F50500DEA7ED971A53A3632FE795776F940FABDB4D3CD1938A7D09B9 4989EF2D7F511A5E50F6D6B514B7BC7593E771101169A181B0464C4C79A27991 2E44E4FFD0C7C489315A09660E70FB670FA18975515C237A8A243F1B585BEF8F 06EE17D5AB5E49A652A2B33A38E1E9CDC72DCF217E1BD7BCB0F9ED133893D34C B84C94F6BDA22B9D25CF2F13C3EA47E7FD21B5195387DD7B4CE8EFC20B7B0F61 95237FA8307C4DAD6AA2458B0D21F9C4C29A8F9104EFCED57E0380BDB5914315 BD0CCEE68E8A7D5509EF14240C7C3C507BE0C375A45B0242232FEFCA2208F2FD DFAB026E3CD413CC81EEBCD3E0EAA9C6C206E36E4EF95FB9F176C209380EAEE8 11C18EC46A591271C9FA67A1C12DE78231026B5FEFCD5293896DD75EC6670978 BEE2101AAFC12D82076983838DD7CAC7105DE0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (manual.dvi) @start /Fa 145[41 4[23 105[{}2 58.1154 /CMMI7 rf /Fb 135[51 2[51 51 1[51 12[51 51 51 1[51 14[51 8[51 3[51 69[{}11 99.6264 /CMTT12 rf /Fc 134[41 47 1[40 3[37 3[50 4[29 2[41 2[36 19[63 67 10[59 4[65 1[65 23 23 42[34 15[{}16 83.022 /CMMI10 rf /Fd 207[19 44[34 3[{}2 58.1154 /CMSY7 rf /Fe 133[50 59 59 81 59 62 44 44 46 59 62 56 62 93 31 59 34 31 62 56 34 51 62 50 62 54 8[85 116 2[78 62 84 1[77 84 1[106 67 88 1[42 88 88 70 74 86 81 80 85 7[56 56 56 56 56 56 56 56 56 56 1[31 37 32[62 65 11[{}59 99.6264 /CMBX12 rf /Ff 134[37 1[51 1[39 27 28 28 1[39 35 39 1[20 2[20 39 35 22 31 2[39 35 11[53 6[53 6[55 4[50 7[20 10[35 20 46[{}24 66.4176 /CMR8 rf /Fg 206[30 49[{}1 49.8132 /CMR6 rf /Fh 220[62 35[{}1 119.552 /CMTT12 rf /Fi 133[41 4[52 32 40 42 1[49 1[54 78 3[30 49 44 1[44 3[49 50[30 46[{}14 83.022 /CMBXTI10 rf /Fj 133[60 71 71 97 71 75 52 53 55 71 75 67 75 112 37 71 1[37 75 67 41 61 75 60 75 65 9[139 1[103 94 75 100 101 92 101 1[128 81 2[50 105 106 85 88 103 97 96 102 7[67 67 67 67 67 67 67 67 67 67 67 37 45 32[75 12[{}58 119.552 /CMBX12 rf /Fk 198[33 2[33 33 33 1[33 33 33 48[{}7 58.1154 /CMR7 rf /Fl 139[75 1[79 1[108 7[108 2[88 3[94 29[140 9[97 97 97 97 97 97 97 97 97 49[{}16 172.188 /CMBX12 rf /Fm 131[95 48 1[50 50 69 50 53 37 38 39 50 53 48 53 80 27 50 1[27 53 48 29 44 53 42 53 46 8[72 99 72 73 66 53 72 1[65 72 75 91 57 1[49 36 3[63 73 69 68 72 6[27 48 48 48 48 48 48 48 48 48 48 1[27 32 27 4[27 26[53 56 11[{}62 83.022 /CMBX10 rf /Fn 149[23 32 32 42 42 10[55 49[83 7[83 12[65 4[42 1[83 9[42 2[65{}13 83.022 /CMSY10 rf /Fo 129[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 33[{}94 83.022 /CMTT10 rf /Fp 134[123 123 168 1[129 90 92 95 1[129 116 129 194 65 123 1[65 129 116 1[106 129 103 129 113 8[175 2[179 162 129 2[159 175 1[220 140 2[87 5[168 165 175 8[116 3[116 12[65 39[{}36 206.559 /CMBX12 rf /Fq 133[34 40 39 55 38 45 28 34 35 38 42 42 47 68 21 38 25 25 42 38 25 38 42 38 38 42 3[25 1[25 4[62 62 59 47 61 1[56 64 62 74 52 64 1[32 62 64 54 56 63 59 1[62 1[42 6[42 42 2[42 1[42 42 42 42 25 30 25 64 1[34 34 25 3[68 21[49 47 51 11[{}66 83.022 /CMTI10 rf /Fr 131[83 42 37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 25 23 46 42 25 37 46 37 46 42 23 2[23 42 23 1[62 62 85 62 62 60 46 61 65 57 65 62 76 52 65 43 30 62 65 54 57 63 60 59 62 65 39 1[65 1[23 23 42 42 42 42 42 42 42 42 42 42 42 23 28 23 65 42 32 32 23 3[69 42 19[69 46 46 48 11[{}87 83.022 /CMR10 rf /Fs 138[73 2[51 3[73 111 36 3[73 1[40 58 1[58 1[66 13[73 98 4[122 20[66 3[66 52[{}15 143.462 /CMR17 rf /Ft 134[51 3[54 38 38 38 1[54 49 54 81 27 51 1[27 54 1[30 43 54 43 54 49 12[70 54 72 4[89 1[76 50 35 1[77 3[70 9[49 7[49 2[27 46[{}31 99.6264 /CMR12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: a4 /setpagedevice where { pop << /PageSize [595 842] >> setpagedevice } { /a4 where { pop a4 } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 TeXcolorgray Black Black Black Black Black 1388 2076 a Ft(The)34 b(Incomplete)885 2258 y Fs(Sc)l(heme)45 b(48)e(Reference)h(Man)l(ual)1428 2441 y Ft(for)32 b(release)i(1.9)565 2806 y(Ric)m(hard)f(Kelsey)237 b(Jonathan)32 b(Rees)237 b(Mik)m(e)34 b(Sp)s(erb)s(er)491 2922 y(Marcus)g(Crestani)224 b(Rob)s(ert)32 b(Ransom)224 b(Ro)s(deric)32 b(Morris)886 3039 y(Marcel)i(T)-8 b(urino)290 b(Martin)33 b(Gasbic)m(hler)p Black Black eop end %%Page: 2 2 TeXDict begin 2 1 bop 0 TeXcolorgray Black Black Black Black Black 946 523 a Fr(A)23 b(line)f(ma)n(y)f(tak)n(e)g(us)h(hours,)g (y)n(et)g(if)g(it)h(do)r(es)e(not)h(seem)g(a)f(momen)n(t's)h(though)n (t)946 623 y(All)29 b(our)d(stitc)n(hing)i(and)f(unstitc)n(hing)h(has)f (b)r(een)h(as)f(nough)n(t.)p Black Black 2510 805 a(Y)-7 b(eats)2510 905 y Fq(A)l(dam's)30 b(Curse)p Black 2148 5255 a Fr(ii)p Black eop end %%Page: 3 3 TeXDict begin 3 2 bop 0 TeXcolorgray Black Black Black 291 1187 a Fp(Ac)-6 b(kno)g(wledgemen)g(ts)291 1619 y Fr(Thanks)20 b(to)i(Sc)n(heme)f(48's)f(users)h(for)g(their)g (suggestions,)g(bug)h(rep)r(orts,)f(and)h(forb)r(earance.)291 1719 y(Thanks)27 b(also)f(to)i(Deb)r(orah)f(T)-7 b(atar)26 b(for)h(pro)n(viding)f(the)i(Y)-7 b(eats)28 b(quotation.)p Black Black 291 1901 a Fo(Copyright)746 1898 y(c)726 1901 y Fn(\015)44 b Fo(1986-2001)c(Richard)h(Kelsey)g(and)h(Jonathan)e (Rees.)291 2001 y(Copyright)746 1998 y(c)726 2001 y Fn(\015)k Fo(1993-2001)c(Richard)h(Kelsey.)291 2100 y(All)h(rights)f(reserved.) 291 2300 y(Redistribution)c(and)43 b(use)f(in)h(source)e(and)h(binary)f (forms,)g(with)h(or)h(without)291 2399 y(modification,)38 b(are)k(permitted)e(provided)g(that)i(the)h(following)c(conditions)291 2499 y(are)j(met:)291 2599 y(1.)g(Redistributions)c(of)k(source)g(code) g(must)f(retain)h(the)g(above)f(copyright)421 2698 y(notices,)g(this)h (list)f(of)i(conditions)d(and)i(the)g(following)e(disclaimer.)291 2798 y(2.)i(Redistributions)c(in)k(binary)g(form)g(must)f(reproduce)f (the)j(above)e(copyright)421 2897 y(notices,)g(this)h(list)f(of)i (conditions)d(and)i(the)g(following)e(disclaimer)g(in)i(the)421 2997 y(documentation)d(and/or)i(other)g(materials)f(provided)g(with)i (the)h(distribution.)291 3097 y(3.)f(The)h(name)f(of)g(the)h(authors)d (may)j(not)f(be)h(used)f(to)h(endorse)d(or)j(promote)e(products)421 3196 y(derived)g(from)h(this)g(software)e(without)h(specific)f(prior)i (written)e(permission.)291 3396 y(THIS)i(SOFTWARE)e(IS)j(PROVIDED)d(BY) j(THE)f(AUTHORS)f(``AS)h(IS'')f(AND)i(ANY)f(EXPRESS)f(OR)291 3495 y(IMPLIED)f(WARRANTIES,)f(INCLUDING,)h(BUT)i(NOT)g(LIMITED)f(TO,)h (THE)h(IMPLIED)e(WARRANTIES)291 3595 y(OF)h(MERCHANTABILITY)c(AND)k (FITNESS)f(FOR)h(A)h(PARTICULAR)d(PURPOSE)g(ARE)j(DISCLAIMED.)291 3694 y(IN)f(NO)h(EVENT)f(SHALL)f(THE)h(AUTHORS)f(BE)i(LIABLE)e(FOR)h (ANY)h(DIRECT,)d(INDIRECT,)291 3794 y(INCIDENTAL,)f(SPECIAL,)h (EXEMPLARY,)f(OR)k(CONSEQUENTIAL)38 b(DAMAGES)j(\(INCLUDING,)e(BUT)291 3894 y(NOT)j(LIMITED)f(TO,)h(PROCUREMENT)d(OF)k(SUBSTITUTE)c(GOODS)j (OR)g(SERVICES;)e(LOSS)i(OF)h(USE,)291 3993 y(DATA,)e(OR)i(PROFITS;)d (OR)j(BUSINESS)d(INTERRUPTION\))e(HOWEVER)j(CAUSED)g(AND)i(ON)f(ANY)291 4093 y(THEORY)f(OF)h(LIABILITY,)e(WHETHER)h(IN)h(CONTRACT,)e(STRICT)h (LIABILITY,)f(OR)j(TORT)291 4193 y(\(INCLUDING)c(NEGLIGENCE)g(OR)k (OTHERWISE\))d(ARISING)g(IN)j(ANY)f(WAY)h(OUT)f(OF)h(THE)f(USE)h(OF)291 4292 y(THIS)f(SOFTWARE,)d(EVEN)j(IF)h(ADVISED)e(OF)i(THE)f(POSSIBILITY) d(OF)k(SUCH)f(DAMAGE.)p Black 1688 5255 a Fr(iii)p Black eop end %%Page: 4 4 TeXDict begin 4 3 bop 0 TeXcolorgray Black Black Black 739 1189 a Fp(Con)-6 b(ten)g(ts)p 0 0 1 TeXcolorrgb 739 1707 a Fm(1)76 b(In)m(tro)s(duction)p Black 2166 w(1)p 0 0 1 TeXcolorrgb 739 1893 a(2)g(User's)32 b(guide)p Black 2176 w(2)p 0 0 1 TeXcolorrgb 863 1994 a Fr(2.1)84 b(Command)28 b(line)f(argumen)n(ts)p Black 61 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)p Black 132 w(2)p Black 0 0 1 TeXcolorrgb 863 2096 a(2.2)84 b(Command)28 b(pro)r(cessor)p Black 63 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 132 w(3)p Black 0 0 1 TeXcolorrgb 863 2197 a(2.3)84 b(Editing)p Black 82 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) p Black 132 w(3)p Black 0 0 1 TeXcolorrgb 863 2299 a(2.4)84 b(P)n(erformance)p Black 25 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)p Black 132 w(4)p Black 0 0 1 TeXcolorrgb 863 2400 a(2.5)84 b(Disassem)n(bler)p Black 75 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 132 w(4)p Black 0 0 1 TeXcolorrgb 863 2502 a(2.6)84 b(Mo)r(dule)28 b(system)p Black 62 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 132 w(4)p Black 0 0 1 TeXcolorrgb 863 2603 a(2.7)84 b(Library)p Black 78 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)g(.)f(.)p Black 132 w(6)p Black 0 0 1 TeXcolorrgb 739 2789 a Fm(3)76 b(Command)32 b(pro)s(cessor)p Black 1839 w(7)p 0 0 1 TeXcolorrgb 863 2891 a Fr(3.1)84 b(Curren)n(t)27 b(fo)r(cus)h(v)-5 b(alue)27 b(and)h Fo(##)p Black 73 w Fr(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)p Black 132 w(7)p Black 0 0 1 TeXcolorrgb 863 2992 a(3.2)84 b(Command)28 b(lev)n(els)p Black 77 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 132 w(8)p Black 0 0 1 TeXcolorrgb 863 3094 a(3.3)84 b(Logistical)27 b(commands)p Black 43 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 132 w(9)p Black 0 0 1 TeXcolorrgb 863 3196 a(3.4)84 b(Mo)r(dule)28 b(commands)p Black 55 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)p Black 132 w(9)p Black 0 0 1 TeXcolorrgb 863 3297 a(3.5)84 b(Debugging)27 b(commands)p Black 70 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)p Black 132 w(9)p Black 0 0 1 TeXcolorrgb 863 3399 a(3.6)84 b(Pro\014ling)26 b(commands)p Black 81 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(11)p Black 0 0 1 TeXcolorrgb 1054 3500 a(3.6.1)94 b(Ho)n(w)27 b(the)h(pro\014ler)f(w)n(orks)p Black 31 w(.)42 b(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(16)p Black 0 0 1 TeXcolorrgb 863 3602 a(3.7)84 b(Settings)p Black 60 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)g(.)f(.)p Black 90 w(17)p Black 0 0 1 TeXcolorrgb 863 3703 a(3.8)84 b(Insp)r(ection)28 b(mo)r(de)p Black 76 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(19)p Black 0 0 1 TeXcolorrgb 863 3805 a(3.9)84 b(Command)28 b(programs)p Black 61 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(21)p Black 0 0 1 TeXcolorrgb 863 3906 a(3.10)h(Building)28 b(images)p Black 28 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(21)p Black 0 0 1 TeXcolorrgb 863 4008 a(3.11)h(Resource)27 b(query)g(and)g(con)n(trol)p Black 64 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(22)p Black 0 0 1 TeXcolorrgb 863 4110 a(3.12)h(Threads)p Black 54 w(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(23)p Black 0 0 1 TeXcolorrgb 863 4211 a(3.13)h(Quite)28 b(obscure)p Black 40 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) p Black 90 w(23)p Black 0 0 1 TeXcolorrgb 739 4397 a Fm(4)76 b(Mo)s(dule)31 b(system)p Black 2008 w(25)p 0 0 1 TeXcolorrgb 863 4498 a Fr(4.1)84 b(In)n(tro)r(duction)p Black 26 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(25)p Black 0 0 1 TeXcolorrgb 863 4600 a(4.2)84 b(The)28 b(con\014guration)e(language)p Black 68 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)p Black 90 w(26)p Black 0 0 1 TeXcolorrgb 863 4702 a(4.3)84 b(In)n(terfaces)p Black 66 w(.)42 b(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(28)p Black 0 0 1 TeXcolorrgb 863 4803 a(4.4)84 b(Macros)p Black 24 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(29)p Black 0 0 1 TeXcolorrgb 863 4905 a(4.5)84 b(Higher-order)26 b(mo)r(dules)p Black 82 w(.)42 b(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) p Black 90 w(30)p Black 0 0 1 TeXcolorrgb 863 5006 a(4.6)84 b(Compiling)28 b(and)f(linking)p Black 58 w(.)42 b(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) p Black 90 w(30)p Black Black 2138 5255 a(iv)p Black eop end %%Page: 5 5 TeXDict begin 5 4 bop 0 TeXcolorgray Black Black Black 0 0 1 TeXcolorrgb 415 523 a Fr(4.7)84 b(Seman)n(tics)27 b(of)h(con\014guration)e(m)n(utation)p Black 66 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(30)p Black 0 0 1 TeXcolorrgb 415 625 a(4.8)84 b(Command)27 b(pro)r(cessor)f(supp)r(ort)p Black 81 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)p Black 90 w(31)p Black 0 0 1 TeXcolorrgb 415 728 a(4.9)84 b(Con\014guration)26 b(pac)n(k)-5 b(ages)p Black 26 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(34)p Black 0 0 1 TeXcolorrgb 415 830 a(4.10)g(Discussion)p Black 37 w(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(35)p Black 0 0 1 TeXcolorrgb 291 1017 a Fm(5)76 b(Libraries)p Black 2274 w(38)p 0 0 1 TeXcolorrgb 415 1119 a Fr(5.1)84 b(General)27 b(utilities)p Black 27 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(38)p Black 0 0 1 TeXcolorrgb 415 1222 a(5.2)84 b(Prett)n(y-prin)n (ting)p Black 59 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(40)p Black 0 0 1 TeXcolorrgb 415 1324 a(5.3)84 b(Bit)n(wise)27 b(in)n(teger)g(op)r(erations)p Black 52 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(40)p Black 0 0 1 TeXcolorrgb 415 1426 a(5.4)84 b(Byte)28 b(v)n(ectors)p Black 24 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(40)p Black 0 0 1 TeXcolorrgb 415 1528 a(5.5)84 b(Sparse)27 b(v)n(ectors)p Black 25 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)p Black 90 w(41)p Black 0 0 1 TeXcolorrgb 415 1631 a(5.6)84 b(Cells)p Black 46 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(41)p Black 0 0 1 TeXcolorrgb 415 1733 a(5.7)84 b(Queues)p Black 22 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) h(.)p Black 90 w(41)p Black 0 0 1 TeXcolorrgb 415 1835 a(5.8)84 b(Arra)n(ys)p Black 41 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(42)p Black 0 0 1 TeXcolorrgb 415 1938 a(5.9)84 b(Records)p Black 62 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(44)p Black 0 0 1 TeXcolorrgb 606 2040 a(5.9.1)94 b(Lo)n(w-lev)n(el)26 b(access)g(to)h(records)p Black 79 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)p Black 90 w(45)p Black 0 0 1 TeXcolorrgb 606 2142 a(5.9.2)94 b(Record)26 b(t)n(yp)r(es)p Black 63 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(45)p Black 0 0 1 TeXcolorrgb 415 2244 a(5.10)g(Finite)28 b(record)f(t)n(yp)r(es)p Black 48 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(47)p Black 0 0 1 TeXcolorrgb 415 2347 a(5.11)g(Sets)28 b(o)n(v)n(er)e(\014nite)i(t)n(yp)r(es)p Black 45 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(48)p Black 0 0 1 TeXcolorrgb 415 2449 a(5.12)g(Hash)27 b(tables)p Black 57 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(50)p Black 0 0 1 TeXcolorrgb 415 2551 a(5.13)g(P)n(ort)26 b(extensions)p Black 48 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(50)p Black 0 0 1 TeXcolorrgb 415 2654 a(5.14)g(Fluid)28 b(bindings)p Black 84 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(52)p Black 0 0 1 TeXcolorrgb 415 2756 a(5.15)g(OS)27 b(strings)p Black 36 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)p Black 90 w(53)p Black 0 0 1 TeXcolorrgb 415 2858 a(5.16)g(Shell)28 b(commands)p Black 22 w(.)42 b(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)p Black 90 w(54)p Black 0 0 1 TeXcolorrgb 415 2960 a(5.17)g(So)r(c)n(k)n(ets)p Black 82 w(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(55)p Black 0 0 1 TeXcolorrgb 415 3063 a(5.18)g(Pro\014ling)p Black 39 w(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(56)p Black 0 0 1 TeXcolorrgb 415 3165 a(5.19)g(Macros)26 b(for)h(writing)g(lo)r(ops)p Black 42 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(58)p Black 0 0 1 TeXcolorrgb 606 3267 a(5.19.1)52 b Fo(Iterate)p Black 35 w Fr(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) p Black 90 w(58)p Black 0 0 1 TeXcolorrgb 606 3370 a(5.19.2)52 b Fo(Reduce)p Black 79 w Fr(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) p Black 90 w(59)p Black 0 0 1 TeXcolorrgb 606 3472 a(5.19.3)52 b(Sequence)27 b(t)n(yp)r(es)p Black 53 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(60)p Black 0 0 1 TeXcolorrgb 606 3574 a(5.19.4)52 b(Sync)n(hronous)26 b(sequences)p Black 25 w(.)41 b(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(61)p Black 0 0 1 TeXcolorrgb 606 3676 a(5.19.5)52 b(Examples)p Black 57 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(61)p Black 0 0 1 TeXcolorrgb 606 3779 a(5.19.6)52 b(De\014ning)28 b(sequence)f(t)n(yp)r(es)p Black 57 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)p Black 90 w(62)p Black 0 0 1 TeXcolorrgb 606 3881 a(5.19.7)52 b(Expanded)27 b(co)r(de)p Black 47 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(63)p Black 0 0 1 TeXcolorrgb 415 3983 a(5.20)g(Sorting)27 b(lists)g(and)h(v)n(ectors)p Black 52 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(64)p Black 0 0 1 TeXcolorrgb 606 4086 a(5.20.1)52 b(Design)27 b(rules)p Black 29 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(64)p Black 0 0 1 TeXcolorrgb 606 4188 a(5.20.2)52 b(Pro)r(cedure)26 b(sp)r(eci\014cation)p Black 82 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)p Black 90 w(67)p Black 0 0 1 TeXcolorrgb 606 4290 a(5.20.3)52 b(Algorithmic)27 b(prop)r(erties)p Black 37 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)p Black 90 w(75)p Black 0 0 1 TeXcolorrgb 415 4392 a(5.21)g(Regular)26 b(expressions)p Black 21 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(76)p Black 0 0 1 TeXcolorrgb 606 4495 a(5.21.1)52 b(Character)26 b(sets)p Black 79 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(76)p Black 0 0 1 TeXcolorrgb 606 4597 a(5.21.2)52 b(Anc)n(horing)p Black 33 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(77)p Black 0 0 1 TeXcolorrgb 606 4699 a(5.21.3)52 b(Comp)r(osite)27 b(expressions)p Black 40 w(.)41 b(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(78)p Black 0 0 1 TeXcolorrgb 606 4802 a(5.21.4)52 b(Case)27 b(sensitivit)n(y)p Black 35 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(78)p Black 0 0 1 TeXcolorrgb 606 4904 a(5.21.5)52 b(Submatc)n(hes)27 b(and)h(matc)n(hing)p Black 33 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 90 w(79)p Black 0 0 1 TeXcolorrgb 415 5006 a(5.22)g(SRFIs)p Black 62 w(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) p Black 90 w(80)p Black Black 1701 5255 a(v)p Black eop end %%Page: 6 6 TeXDict begin 6 5 bop 0 TeXcolorgray Black Black Black 0 0 1 TeXcolorrgb 739 523 a Fm(6)76 b(Unico)s(de)p Black 2302 w(83)p 0 0 1 TeXcolorrgb 863 623 a Fr(6.1)84 b(Characters)26 b(and)h(their)h(co)r(des)p Black 84 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(83)p Black 0 0 1 TeXcolorrgb 863 724 a(6.2)84 b(Character)26 b(and)i(string)f(literals)p Black 30 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)p Black 90 w(84)p Black 0 0 1 TeXcolorrgb 1054 824 a(6.2.1)94 b(Character)26 b(literals)p Black 33 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(84)p Black 0 0 1 TeXcolorrgb 1054 925 a(6.2.2)94 b(String)27 b(literals)p Black 42 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(84)p Black 0 0 1 TeXcolorrgb 1054 1025 a(6.2.3)94 b(Iden)n(ti\014ers) 27 b(and)h(sym)n(b)r(ol)f(literals)p Black 39 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(85)p Black 0 0 1 TeXcolorrgb 863 1125 a(6.3)84 b(Character)26 b(classi\014cation)g(and)i(case)f(mappings)p Black 20 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(85)p Black 0 0 1 TeXcolorrgb 863 1226 a(6.4)84 b(SRFI)28 b(14)p Black 48 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)p Black 90 w(86)p Black 0 0 1 TeXcolorrgb 863 1326 a(6.5)84 b(R6RS)p Black 77 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(86)p Black 0 0 1 TeXcolorrgb 863 1426 a(6.6)84 b(I/O)p Black 21 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)p Black 90 w(87)p Black 0 0 1 TeXcolorrgb 1054 1527 a(6.6.1)94 b(T)-7 b(ext)28 b(co)r(decs)p Black 45 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(87)p Black 0 0 1 TeXcolorrgb 1054 1627 a(6.6.2)94 b(T)-7 b(ext-co)r(dec)27 b(utilities)p Black 37 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(87)p Black 0 0 1 TeXcolorrgb 1054 1728 a(6.6.3)94 b(Creating)27 b(text)h(co)r(decs)p Black 47 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(88)p Black 0 0 1 TeXcolorrgb 863 1828 a(6.7)84 b(Default)29 b(enco)r(dings)p Black 23 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(89)p Black 0 0 1 TeXcolorrgb 739 2012 a Fm(7)76 b(Threads)p Black 2306 w(91)p 0 0 1 TeXcolorrgb 863 2112 a Fr(7.1)84 b(Creating)27 b(and)g(con)n(trolling)f(threads)p Black 70 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)p Black 90 w(91)p Black 0 0 1 TeXcolorrgb 863 2213 a(7.2)84 b(Adv)-5 b(anced)28 b(thread)f(handling)p Black 37 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(92)p Black 0 0 1 TeXcolorrgb 863 2313 a(7.3)84 b(Debugging)27 b(m)n(ultithreaded)h (programs)p Black 28 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(92)p Black 0 0 1 TeXcolorrgb 863 2413 a(7.4)84 b(Optimistic)28 b(concurrency)p Black 84 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(93)p Black 0 0 1 TeXcolorrgb 863 2514 a(7.5)84 b(Condition)28 b(v)-5 b(ariables)p Black 33 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(96)p Black 0 0 1 TeXcolorrgb 863 2614 a(7.6)84 b(Mutual)28 b(exclusion)p Black 50 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)p Black 90 w(97)p Black 0 0 1 TeXcolorrgb 1054 2714 a(7.6.1)94 b(Lo)r(c)n(ks)p Black 71 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)p Black 90 w(97)p Black 0 0 1 TeXcolorrgb 1054 2815 a(7.6.2)94 b(Placeholders)p Black 81 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(97)p Black 0 0 1 TeXcolorrgb 863 2915 a(7.7)84 b(W)-7 b(riting)28 b(custom)f(sync)n (hronization)f(abstractions)p Black 79 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)p Black 90 w(98)p Black 0 0 1 TeXcolorrgb 863 3016 a(7.8)84 b(Concurren)n(t)27 b(ML)g(abstractions)p Black 29 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 90 w(99)p Black 0 0 1 TeXcolorrgb 1054 3116 a(7.8.1)94 b(Basic)27 b(rendezv)n(ous)f(com)n (binators)p Black 30 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)p Black 90 w(99)p Black 0 0 1 TeXcolorrgb 1054 3216 a(7.8.2)94 b(Sync)n(hronous)26 b(c)n(hannels)p Black 67 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(100)p Black 0 0 1 TeXcolorrgb 1054 3317 a(7.8.3)94 b(Sync)n(hronous)26 b(v)-5 b(ariables)p Black 57 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(100)p Black 0 0 1 TeXcolorrgb 1054 3417 a(7.8.4)94 b(Timeouts)p Black 66 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(102)p Black 0 0 1 TeXcolorrgb 1054 3517 a(7.8.5)94 b(CML)28 b(to)f(Sc)n(heme)h(corresp)r(ondence)p Black 79 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(102)p Black 0 0 1 TeXcolorrgb 739 3701 a Fm(8)76 b(Mixing)31 b(Sc)m(heme)h(48)f(and)h(C)p Black 1545 w(104)p 0 0 1 TeXcolorrgb 863 3802 a Fr(8.1)84 b(Av)-5 b(ailable)28 b(facilities)p Black 76 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(104)p Black 0 0 1 TeXcolorrgb 1054 3902 a(8.1.1)94 b(Sc)n(heme)28 b(structures)p Black 71 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(105)p Black 0 0 1 TeXcolorrgb 1054 4002 a(8.1.2)94 b(C)28 b(naming)f(con)n(v)n(en)n(tions)p Black 55 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)p Black 49 w(105)p Black 0 0 1 TeXcolorrgb 1054 4103 a(8.1.3)94 b(Garbage)26 b(collection)h(and)g(reference)g(ob)5 b(jects)p Black 37 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(105)p Black 0 0 1 TeXcolorrgb 863 4203 a(8.2)84 b(Shared)27 b(bindings)p Black 28 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)p Black 49 w(107)p Black 0 0 1 TeXcolorrgb 1054 4304 a(8.2.1)94 b(Exp)r(orting)26 b(Sc)n(heme)i(v)-5 b(alues)27 b(to)h(C)p Black 83 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(107)p Black 0 0 1 TeXcolorrgb 1054 4404 a(8.2.2)94 b(Exp)r(orting)26 b(C)i(v)-5 b(alues)27 b(to)h(Sc)n(heme)p Black 83 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(107)p Black 0 0 1 TeXcolorrgb 1054 4504 a(8.2.3)94 b(Complete)28 b(shared)e(binding)i(in)n(terface)p Black 65 w(.)42 b(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(108)p Black 0 0 1 TeXcolorrgb 863 4605 a(8.3)84 b(Calling)27 b(C)h(functions)g (from)f(Sc)n(heme)p Black 57 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(108)p Black 0 0 1 TeXcolorrgb 863 4705 a(8.4)84 b(Dynamic)28 b(loading)p Black 58 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(109)p Black 0 0 1 TeXcolorrgb 863 4805 a(8.5)84 b(Accessing)27 b(Sc)n(heme)h(data)f(from)g(C)p Black 71 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)p Black 49 w(110)p Black 0 0 1 TeXcolorrgb 1054 4906 a(8.5.1)94 b(Constan)n(ts)p Black 44 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(111)p Black 0 0 1 TeXcolorrgb 1054 5006 a(8.5.2)94 b(Con)n(v)n(erting)26 b(v)-5 b(alues)p Black 84 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(111)p Black Black 2138 5255 a(vi)p Black eop end %%Page: 7 7 TeXDict begin 7 6 bop 0 TeXcolorgray Black Black Black 0 0 1 TeXcolorrgb 606 523 a Fr(8.5.3)94 b(C)27 b(v)n(ersions)f(of)i(Sc) n(heme)f(pro)r(cedures)p Black 61 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(114)p Black 0 0 1 TeXcolorrgb 415 623 a(8.6)84 b(Calling)27 b(Sc)n(heme)h(functions)f (from)h(C)p Black 57 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(115)p Black 0 0 1 TeXcolorrgb 415 723 a(8.7)84 b(In)n(teracting)27 b(with)h(the)g(Sc)n (heme)f(heap)p Black 30 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(115)p Black 0 0 1 TeXcolorrgb 606 823 a(8.7.1)94 b(Registering)26 b(global)h(references)p Black 83 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(116)p Black 0 0 1 TeXcolorrgb 606 923 a(8.7.2)94 b(Lo)r(cal)27 b(bu\013ers)p Black 69 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(117)p Black 0 0 1 TeXcolorrgb 606 1023 a(8.7.3)94 b(Sp)r(ecial)27 b(treatmen)n(t)h(for)f(b)n(yte)g(v)n(ectors)p Black 76 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(117)p Black 0 0 1 TeXcolorrgb 606 1123 a(8.7.4)94 b(Memory)26 b(o)n(v)n(erhead)p Black 81 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(118)p Black 0 0 1 TeXcolorrgb 606 1223 a(8.7.5)94 b(Keeping)27 b(C)g(data)g(structures)g(in)h(the)g(Sc)n(heme)f(heap)p Black 68 w(.)41 b(.)h(.)g(.)f(.)h(.)p Black 48 w(120)p Black 0 0 1 TeXcolorrgb 606 1323 a(8.7.6)94 b(C)27 b(co)r(de)h(and)f (heap)h(images)p Black 39 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(121)p Black 0 0 1 TeXcolorrgb 415 1423 a(8.8)84 b(Using)27 b(Sc)n(heme)h(records)e(in)i(C)f(co)r(de)p Black 24 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)p Black 48 w(121)p Black 0 0 1 TeXcolorrgb 415 1523 a(8.9)84 b(Raising)27 b(exceptions)g(from)g(external)g(co)r(de)p Black 67 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)p Black 48 w(122)p Black 0 0 1 TeXcolorrgb 415 1623 a(8.10)g(External)26 b(ev)n(en)n(ts)p Black 44 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(123)p Black 0 0 1 TeXcolorrgb 606 1723 a(8.10.1)52 b(Collecting)27 b(external)g(ev)n(en)n(ts)f(in)i(external)f(co)r(de)p Black 24 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(124)p Black 0 0 1 TeXcolorrgb 606 1823 a(8.10.2)52 b(Handling)27 b(external)g(ev)n(en)n(ts)g(in)h(Sc)n(heme)p Black 79 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(125)p Black 0 0 1 TeXcolorrgb 415 1923 a(8.11)g(Unsafe)28 b(functions)g(and)f(macros)p Black 78 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(126)p Black 0 0 1 TeXcolorrgb 415 2023 a(8.12)g(Con)n(v)n (erting)26 b(external)h(co)r(de)g(to)h(the)g(new)f(foreign-function)g (in)n(terface)p Black 24 w(.)42 b(.)p Black 48 w(127)p Black 0 0 1 TeXcolorrgb 291 2206 a Fm(9)76 b(Access)32 b(to)g(POSIX)p Black 1874 w(129)p 0 0 1 TeXcolorrgb 415 2306 a Fr(9.1)84 b(Pro)r(cess)26 b(primitiv)n(es)p Black 77 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(129)p Black 0 0 1 TeXcolorrgb 606 2406 a(9.1.1)94 b(Pro)r(cess)26 b(creation)g(and)h(termination)p Black 43 w(.)42 b(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(130)p Black 0 0 1 TeXcolorrgb 606 2506 a(9.1.2)94 b Fo(Exec)p Black 38 w Fr(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(130)p Black 0 0 1 TeXcolorrgb 415 2606 a(9.2)84 b(Signals)p Black 31 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)g(.)f(.)h(.)p Black 48 w(131)p Black 0 0 1 TeXcolorrgb 606 2706 a(9.2.1)94 b(POSIX)27 b(signals)p Black 73 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(131)p Black 0 0 1 TeXcolorrgb 606 2806 a(9.2.2)94 b(Other)27 b(signals)p Black 55 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(132)p Black 0 0 1 TeXcolorrgb 606 2906 a(9.2.3)94 b(Sending)27 b(signals)p Black 47 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(133)p Black 0 0 1 TeXcolorrgb 606 3006 a(9.2.4)94 b(Receiving)27 b(signals)p Black 47 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(133)p Black 0 0 1 TeXcolorrgb 415 3106 a(9.3)84 b(Pro)r(cess)26 b(en)n(vironmen)n(t)p Black 52 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(134)p Black 0 0 1 TeXcolorrgb 606 3206 a(9.3.1)94 b(Pro)r(cess)26 b(iden)n(ti\014cation)p Black 22 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(134)p Black 0 0 1 TeXcolorrgb 606 3306 a(9.3.2)94 b(En)n(vironmen)n(t)26 b(v)-5 b(ariables)p Black 45 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(134)p Black 0 0 1 TeXcolorrgb 415 3406 a(9.4)84 b(Users)27 b(and)g(groups)p Black 46 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(134)p Black 0 0 1 TeXcolorrgb 415 3506 a(9.5)84 b(OS)27 b(and)h(mac)n(hine)f(iden)n(ti\014cation)p Black 28 w(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)p Black 48 w(135)p Black 0 0 1 TeXcolorrgb 415 3606 a(9.6)84 b(Files)28 b(and)f(directories)p Black 68 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(136)p Black 0 0 1 TeXcolorrgb 606 3706 a(9.6.1)94 b(Directory)26 b(streams)p Black 82 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(136)p Black 0 0 1 TeXcolorrgb 606 3806 a(9.6.2)94 b(W)-7 b(orking)26 b(directory)p Black 70 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(136)p Black 0 0 1 TeXcolorrgb 606 3906 a(9.6.3)94 b(File)28 b(creation)e(and)i(remo)n(v)-5 b(al)p Black 61 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)p Black 48 w(136)p Black 0 0 1 TeXcolorrgb 606 4006 a(9.6.4)94 b(File)28 b(information)p Black 78 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)p Black 48 w(138)p Black 0 0 1 TeXcolorrgb 606 4106 a(9.6.5)94 b(File)28 b(mo)r(des)p Black 78 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(139)p Black 0 0 1 TeXcolorrgb 606 4206 a(9.6.6)94 b(Sym)n(b)r(olic)27 b(links)p Black 76 w(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(140)p Black 0 0 1 TeXcolorrgb 415 4306 a(9.7)84 b(Time)28 b(and)f(Date)p Black 57 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)p Black 48 w(140)p Black 0 0 1 TeXcolorrgb 606 4406 a(9.7.1)94 b(Time)p Black 25 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)g(.)f(.)h(.)p Black 48 w(141)p Black 0 0 1 TeXcolorrgb 606 4506 a(9.7.2)94 b(Date)p Black 40 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)p Black 48 w(141)p Black 0 0 1 TeXcolorrgb 415 4606 a(9.8)84 b(I/O)p Black 20 w(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(143)p Black 0 0 1 TeXcolorrgb 415 4706 a(9.9)84 b(Regular)26 b(expressions)p Black 21 w(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(145)p Black 0 0 1 TeXcolorrgb 415 4806 a(9.10)g(Syslog)27 b(facilit)n(y)p Black 41 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) h(.)p Black 48 w(146)p Black 0 0 1 TeXcolorrgb 415 4906 a(9.11)g(Error)25 b(co)r(des)p Black 60 w(.)42 b(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(149)p Black 0 0 1 TeXcolorrgb 606 5006 a(9.11.1)52 b(POSIX)27 b(errnos)p Black 26 w(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)p Black 48 w(150)p Black Black 1678 5255 a(vii)p Black eop end %%Page: 8 8 TeXDict begin 8 7 bop 0 TeXcolorgray Black Black Black 0 0 1 TeXcolorrgb 863 523 a Fr(9.12)42 b(C)28 b(to)f(Sc)n(heme)h (corresp)r(ondence)p Black 21 w(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)p Black 49 w(152)p Black 0 0 1 TeXcolorrgb 739 706 a Fm(10)28 b(Bibliograph)m(y)p Black 2061 w(154)p Black 2115 5255 a Fr(viii)p Black eop end %%Page: 1 9 TeXDict begin 1 8 bop 0 TeXcolorgray Black Black Black 291 1146 a Fl(Chapter)64 b(1)291 1561 y Fp(In)-6 b(tro)6 b(duction)291 1993 y Fr(Sc)n(heme)32 b(48)g(is)h(an)g(implemen)n (tation)g(of)g(the)g(Sc)n(heme)g(programming)e(language)g(as)h(de-)291 2092 y(scrib)r(ed)d(in)h(the)g(Revised)1102 2062 y Fk(5)1169 2092 y Fr(Rep)r(ort)g(on)f(the)i(Algorithmic)e(Language)f(Sc)n(heme)i ([)p 0 0 1 TeXcolorrgb(6)p Black -1 w(].)44 b(It)30 b(is)291 2192 y(based)f(on)h(a)g(compiler)f(and)h(in)n(terpreter)f(for)h(a)f (virtual)h(Sc)n(heme)g(mac)n(hine.)44 b(Sc)n(heme)30 b(48)291 2291 y(tries)d(to)h(b)r(e)g(faithful)h(to)f(the)g(Revised)1508 2261 y Fk(5)1573 2291 y Fr(Sc)n(heme)g(Rep)r(ort,)g(pro)n(viding)f (neither)h(more)f(nor)291 2391 y(less)d(in)h(the)g(initial)g(user)f(en) n(vironmen)n(t.)35 b(\(This)25 b(is)f(not)h(to)g(sa)n(y)e(that)i(more)f (isn't)h(a)n(v)-5 b(ailable)291 2491 y(in)27 b(other)g(en)n(vironmen)n (ts;)g(see)g(b)r(elo)n(w.\))415 2590 y(Sc)n(heme)d(48)g(is)g(under)h (con)n(tin)n(ual)e(dev)n(elopmen)n(t.)35 b(Please)23 b(rep)r(ort)h(bugs,)h(esp)r(ecially)f(in)291 2690 y(the)f(VM,)g(esp)r (ecially)f(core)f(dumps,)j(to)f(sc)n(heme-48-bugs@s48.org.)30 b(Include)22 b(the)h(v)n(ersion)291 2790 y(n)n(um)n(b)r(er)28 b(x.yy)h(from)g(the)h("W)-7 b(elcome)28 b(to)h(Sc)n(heme)g(48)g(x.yy")f (greeting)g(message)g(in)h(y)n(our)291 2889 y(bug)35 b(rep)r(ort.)59 b(It)36 b(is)f(a)g(goal)f(of)i(this)f(pro)5 b(ject)35 b(to)g(pro)r(duce)g(a)g(bullet-pro)r(of)g(system;)k(w)n(e)291 2989 y(w)n(an)n(t)29 b(no)h(bugs)f(and,)i(esp)r(ecially)-7 b(,)30 b(no)g(crashes.)42 b(\(There)30 b(are)f(a)h(few)g(kno)n(wn)f (bugs,)i(listed)291 3088 y(in)c(the)h Fo(doc/todo.txt)23 b Fr(\014le)28 b(that)g(comes)f(with)h(the)g(distribution.\))415 3188 y(Send)d(a)f(message)e(to)j(sc)n(heme-48-request@s48.org)18 b(with)25 b(sub)5 b(ject)24 b(`subscrib)r(e')g(to)h(b)r(e)291 3288 y(put)g(on)g(a)g(mailing)g(list)g(for)g(announcemen)n(ts,)g (discussion,)g(bug)g(rep)r(orts,)g(and)g(bug)g(\014xes.)415 3387 y(The)20 b(name)g(`Sc)n(heme)f(48')g(commemorates)f(our)h(ha)n (ving)g(written)h(the)g(original)e(v)n(ersion)291 3487 y(in)27 b(fort)n(y-eigh)n(t)g(hours,)f(on)i(August)f(6th)h(and)f(7th,)h (1986.)p Black 1702 5255 a(1)p Black eop end %%Page: 2 10 TeXDict begin 2 9 bop 0 TeXcolorgray Black Black Black 739 1148 a Fl(Chapter)65 b(2)739 1564 y Fp(User's)76 b(guide)739 1998 y Fr(This)33 b(c)n(hapter)f(details)h(Sc)n(heme)g (48's)f(user)g(in)n(terface:)47 b(its)33 b(command-line)f(argumen)n (ts,)739 2098 y(command)27 b(pro)r(cessor,)f(debugger,)g(and)h(so)g (forth.)739 2382 y Fj(2.1)135 b(Command)45 b(line)h(argumen)l(ts)739 2567 y Fr(A)28 b(few)g(command)f(line)h(argumen)n(ts)e(are)h(pro)r (cessed)f(b)n(y)h(Sc)n(heme)h(48)f(as)g(it)h(starts)e(up.)863 2669 y Fo(scheme48)f Fr([)p Fo(-i)i Fq(image)6 b Fr(])29 b([)p Fo(-h)e Fq(he)l(apsize)6 b Fr(])30 b([)p Fo(-a)c Fq(ar)l(gument)j(.)13 b(.)g(.)g Fr(])p Black 739 2859 a Fo(-i)31 b Fi(image)p Black 49 w Fr(sp)r(eci\014es)26 b(a)h(heap)f(image)g(\014le)h(to)g(resume.)36 b(This)27 b(defaults)g(to)f(a)h(heap)f(image)946 2958 y(that)j(runs)e(a)h(Sc)n (heme)f(command)h(pro)r(cessor.)36 b(Heap)27 b(images)g(are)g(created)g (b)n(y)h(the)946 3058 y Fo(,dump)e Fr(and)h Fo(,build)42 b(commands)p Fr(,)24 b(for)j(whic)n(h)h(see)f(b)r(elo)n(w.)p Black 739 3231 a Fo(-h)k Fi(he)-5 b(apsize)p Black 49 w Fr(sp)r(eci\014es)23 b(ho)n(w)g(m)n(uc)n(h)h(space)f(should)g(b)r(e)h (reserv)n(ed)e(for)h(allo)r(cation.)35 b Fq(He)l(ap-)946 3331 y(size)f Fr(is)27 b(in)g(w)n(ords)f(\(where)h(one)f(w)n(ord)g(=)h (4)f(b)n(ytes\),)h(and)g(co)n(v)n(ers)e(b)r(oth)i(semispaces,)946 3431 y(only)h(one)g(of)g(whic)n(h)g(is)g(in)h(use)f(at)g(an)n(y)f(giv)n (en)g(time)i(\(except)f(during)g(garbage)e(col-)946 3530 y(lection\).)59 b(Cons)34 b(cells)g(are)g(curren)n(tly)f(3)i(w)n(ords,) g(so)f(if)h(y)n(ou)f(w)n(an)n(t)g(to)g(mak)n(e)g(sure)946 3630 y(y)n(ou)28 b(can)g(allo)r(cate)f(a)h(million)h(cons)f(cells,)g(y) n(ou)g(should)g(sp)r(ecify)h Fo(-h)43 b(6000000)26 b Fr(\(ac-)946 3730 y(tually)e(somewhat)f(more)g(than)h(this,)h(to)f (accoun)n(t)e(for)i(the)g(initial)g(heap)f(image)g(and)946 3829 y(breathing)35 b(ro)r(om\).)59 b(The)36 b(default)f(heap)g(size)g (is)h(3000000)c(w)n(ords.)58 b(The)35 b(system)946 3929 y(will)28 b(use)f(a)g(larger)e(heap)i(if)h(the)f(sp)r(eci\014ed)h(\(or) e(default\))i(size)f(is)g(less)g(than)g(the)h(size)946 4028 y(of)g(the)g(image)f(b)r(eing)h(resumed.)p Black 739 4202 a Fo(-a)j Fi(ar)-5 b(gument)34 b(.)15 b(.)f(.)p Black 55 w Fr(is)36 b(only)e(useful)i(with)g(images)e(built)i(using)f Fo(,build)p Fr(.)57 b(The)36 b(argu-)946 4301 y(men)n(ts)24 b(are)f(passed)g(as)g(a)g(list)i(of)e(OS)h(strings)f(\(see)g(section)p 0 0 1 TeXcolorrgb 24 w(5.15)p Black(\))f(to)i(the)g(pro)r(cedure)946 4401 y(sp)r(eci\014ed)k(in)g(the)g Fo(,build)d Fr(command.)37 b(F)-7 b(or)27 b(example:)p Black Black 946 4608 a Fo(>)44 b(,open)d(os-strings)946 4707 y(>)j(\(define)c(\(f)j(xs\))1121 4807 y(\(write)e(\(map)h(os-string->strin)o(g)37 b(xs\)\))1121 4907 y(\(newline\))1121 5006 y(0\))1742 b(;must)42 b(return)f(an)i (integer)p Black 2150 5255 a Fr(2)p Black eop end %%Page: 3 11 TeXDict begin 3 10 bop 0 TeXcolorgray Black Black Black 498 523 a Fo(>)43 b(,build)e(f)j(foo.image)498 623 y(>)f(,exit)498 722 y(\045)g(scheme48vm)d(-i)j(foo.image)c(-a)k(mumble)e("foo)h(x")h (-h)g(5000000)498 822 y(\("mumble")d("foo)i(x")h("-h")f("5000000"\))498 922 y(\045)p Black 291 1091 a(-I)31 b Fi(image)39 b(ar)-5 b(gument)34 b(.)14 b(.)h(.)p Black 55 w Fr(is)44 b(equiv)-5 b(alen)n(t)43 b(to)g Fo(-i)f Fq(image)51 b Fo(-a)43 b Fq(ar)l(gument)h(.)13 b(.)g(.)g Fr(.)84 b(On)498 1190 y(most)33 b(Unix-lik)n(e)f(systems,)i(a)f(heap)g(image)f(can)g(b)r(e)i (made)e(executable)h(with)h(the)498 1290 y(follo)n(wing)27 b(Bourne)f(shell)i(commands:)p Black Black 498 1459 a Fo(\045)43 b(\(echo)f('#!)p Fq(/s48/instal)t(l/pr)l(e\014x)10 b Fo(/lib/scheme48-1.9/s)o(ch)o(eme)o(48)o(vm)37 b(-I')629 1559 y(cat)42 b Fq(original.image)6 b Fo(\))47 b(>)p Fq(new.image)498 1658 y Fo(\045)c(chmod)f(+x)h Fq(new.image)415 1827 y Fr(The)36 b(usual)g(de\014nition)g(of)g(the)g Fo(s48)f Fr(or)g Fo(scheme48)e Fr(command)i(is)h(actually)f(a)h(shell) 291 1927 y(script)29 b(that)i(starts)e(up)i(the)f(Sc)n(heme)g(48)g (virtual)f(mac)n(hine)h(with)h(a)f Fo(-i)42 b Fq(image\014le)c Fr(sp)r(ec-)291 2027 y(ifying)29 b(the)h(dev)n(elopmen)n(t)f(en)n (vironmen)n(t)g(heap)g(image)g(and)h(a)f Fo(-o)42 b Fq(vm-exe)l (cutable)36 b Fr(sp)r(ec-)291 2126 y(ifying)29 b(the)h(lo)r(cation)e (of)i(the)g(virtual-mac)n(hine)e(executable)g(\(the)j(executable)e(is)g (needed)291 2226 y(for)36 b(loading)g(external)f(co)r(de)i(on)f(some)h (v)n(ersions)e(of)h(Unix;)42 b(see)36 b(section)p 0 0 1 TeXcolorrgb 37 w(8.4)p Black 36 w(for)g(more)291 2326 y(information\).)51 b(The)33 b(\014le)f Fo(go)g Fr(in)h(the)g(Sc)n (heme)f(48)g(installation)g(source)f(directory)h(is)g(an)291 2425 y(example)27 b(of)g(suc)n(h)h(a)f(shell)g(script.)291 2695 y Fj(2.2)135 b(Command)45 b(pro)t(cessor)291 2876 y Fr(When)26 b(y)n(ou)f(in)n(v)n(ok)n(e)f(the)i(default)g(heap)f (image,)g(a)h(command)f(pro)r(cessor)e(starts)i(running.)291 2976 y(The)20 b(command)f(pro)r(cessor)f(acts)i(as)f(b)r(oth)i(a)e (read-ev)-5 b(al-prin)n(t)18 b(lo)r(op,)k(reading)d(expressions,)291 3076 y(ev)-5 b(aluating)31 b(them,)i(and)e(prin)n(ting)g(the)h (results,)h(and)e(as)g(an)g(in)n(teractiv)n(e)g(debugger)f(and)291 3175 y(data)d(insp)r(ector.)36 b(See)28 b(Chapter)p 0 0 1 TeXcolorrgb 27 w(3)p Black 27 w(for)f(a)g(description)g(of)h(the)g (command)f(pro)r(cessor.)291 3445 y Fj(2.3)135 b(Editing)291 3626 y Fr(W)-7 b(e)35 b(recommend)g(running)f(Sc)n(heme)h(48)g(under)f (GNU)i(Emacs)e(or)h(XEmacs)f(using)h(the)291 3726 y Fo(cmuscheme48)17 b Fr(command)k(pac)n(k)-5 b(age.)34 b(This)22 b(is)f(in)i(the)f(Sc)n (heme)g(48)f(distribution's)g Fo(emacs/)291 3826 y Fr(sub)r(directory)i (and)i(is)f(included)h(in)g(XEmacs's)e Fo(scheme)g Fr(pac)n(k)-5 b(age.)34 b(It)25 b(is)f(a)g(v)-5 b(arian)n(t)24 b(of)h(the)291 3925 y Fo(cmuscheme)36 b Fr(library)-7 b(,)43 b(whic)n(h)e(comes)e(to)i (us)f(courtesy)g(of)g(Olin)h(Shiv)n(ers,)h(formerly)e(of)291 4025 y(CMU.)28 b(Y)-7 b(ou)27 b(migh)n(t)h(w)n(an)n(t)f(to)g(put)h(the) g(follo)n(wing)f(in)h(y)n(our)e(Emacs)h(init)h(\014le)g(\()p Fo(.emacs)p Fr(\):)p Black Black 291 4167 a Fo(\(setq)41 b(scheme-program-n)o(ame)c("scheme48"\))291 4267 y(\(autoload)i ('run-scheme)726 4366 y("cmuscheme48")726 4466 y("Run)j(an)h(inferior)d (Scheme)i(process.")726 4565 y(t\))291 4707 y Fr(The)32 b(Emacs)f(function)i Fo(run-scheme)28 b Fr(can)k(then)h(b)r(e)f(used)h (to)f(start)f(a)h(pro)r(cess)f(running)291 4807 y(the)f(program)e Fo(scheme48)f Fr(in)k(a)f(new)g(bu\013er.)45 b(T)-7 b(o)30 b(mak)n(e)f(the)i Fo(autoload)c Fr(and)j Fo(\(require)291 4907 y(...\))k Fr(forms)25 b(w)n(ork,)g(y)n(ou)f(will)i(also)f(need)g (to)h(put)g(the)g(directory)e(con)n(taining)i Fo(cmuscheme)291 5006 y Fr(and)h(related)g(\014les)g(in)h(y)n(our)f(emacs)g(load-path:)p Black 1702 5255 a(3)p Black eop end %%Page: 4 12 TeXDict begin 4 11 bop 0 TeXcolorgray Black Black Black Black Black 739 523 a Fo(\(setq)41 b(load-path)826 623 y(\(append)g(load-path)f('\(")p Fq(scheme-48-dir)l(e)l(ctory)7 b Fo(/emacs"\)\)\))739 791 y Fr(F)-7 b(urther)34 b(do)r(cumen)n(tation) f(can)h(b)r(e)h(found)f(in)g(the)h(\014les)f Fo(emacs/cmuscheme)o(48.)o (el)27 b Fr(and)739 890 y Fo(emacs/comint.el)p Fr(.)739 1169 y Fj(2.4)135 b(P)l(erformance)739 1352 y Fr(If)24 b(y)n(ou)e(w)n(an)n(t)h(to)g(generally)f(ha)n(v)n(e)g(y)n(our)g(co)r (de)h(run)g(faster)g(than)g(it)h(normally)e(w)n(ould,)i(en)n(ter)739 1451 y Fo(inline-values)31 b Fr(mo)r(de)37 b(b)r(efore)f(loading)f(an)n (ything.)63 b(Otherwise)36 b(calls)f(to)i(primitiv)n(es)739 1551 y(\(lik)n(e)e Fo(+)g Fr(and)g Fo(cons)p Fr(\))f(and)h(in-line)g (pro)r(cedures)f(\(lik)n(e)h Fo(not)f Fr(and)h Fo(cadr)p Fr(\))f(w)n(on't)h(b)r(e)h(op)r(en-)739 1651 y(co)r(ded,)27 b(and)h(programs)d(will)j(run)f(more)g(slo)n(wly)-7 b(.)863 1751 y(The)36 b(system)e(do)r(esn't)h(start)g(in)g Fo(inline-values)30 b Fr(mo)r(de)35 b(b)n(y)g(default)g(b)r(ecause)g(the)739 1851 y(Sc)n(heme)k(rep)r(ort)g(p)r(ermits)g(rede\014nitions)g(of)g (built-in)h(pro)r(cedures.)70 b(With)41 b(this)e(mo)r(de)739 1950 y(set,)c(suc)n(h)e(rede\014nitions)h(don't)f(w)n(ork)g(according)e (to)j(the)g(rep)r(ort,)g(b)r(ecause)f(previously)739 2050 y(compiled)f(calls)g(ma)n(y)g(ha)n(v)n(e)f(in-lined)i(the)g(old)f (de\014nition,)i(lea)n(ving)d(no)h(opp)r(ortunit)n(y)g(to)739 2150 y(call)27 b(the)h(new)g(de\014nition.)863 2250 y Fo(Inline-values)36 b Fr(mo)r(de)42 b(is)f(con)n(trolled)f(b)n(y)h(the) h Fo(inline-values)36 b Fr(switc)n(h.)78 b Fo(,set)739 2350 y(inline-values)22 b Fr(and)28 b Fo(,unset)41 b(inline-values)22 b Fr(turn)28 b(it)g(on)f(and)h(o\013.)739 2628 y Fj(2.5)135 b(Disassem)l(bler)739 2811 y Fr(The)28 b Fo(,dis)e Fr(command)h(prin)n (ts)g(out)h(the)g(disassem)n(bled)e(b)n(yte)i(co)r(des)f(of)g(a)h(pro)r (cedure.)p Black Black 739 2980 a Fo(>)43 b(,dis)f(cons)739 3079 y(cons)826 3179 y(0)h(\(protocol)d(2\))826 3279 y(2)j(\(pop\))826 3378 y(3)g(\(make-stored-obje)o(ct)37 b(2)43 b(pair\))826 3478 y(6)g(\(return\))739 3578 y(>)739 3746 y Fr(The)32 b(curren)n(t)f(b)n(yte)g(co)r(des)h(are)e(listed)j(in) f(the)g(\014le)g Fo(scheme/vm/inter)o(p/a)o(rc)o(h.s)o(cm)o Fr(.)44 b(A)739 3845 y(somewhat)27 b(out-of-date)f(description)h(of)h (them)g(can)f(b)r(e)h(found)g(in)g([)p 0 0 1 TeXcolorrgb(5)p Black(].)863 3946 y(The)f(command)g(argumen)n(t)f(is)h(optional;)f(if)i (unsupplied)f(it)h(defaults)f(to)g(the)g(curren)n(t)739 4045 y(fo)r(cus)h(ob)5 b(ject)27 b(\()p Fo(##)p Fr(\).)863 4146 y(The)h(disassem)n(bler)e(can)h(also)g(b)r(e)h(in)n(v)n(ok)n(ed)e (on)h(con)n(tin)n(uations)g(and)g(templates.)739 4424 y Fj(2.6)135 b(Mo)t(dule)45 b(system)739 4607 y Fr(This)32 b(section)h(giv)n(es)e(a)h(brief)h(description)e(of)i(mo)r(dules)g(and) f(related)g(en)n(tities.)52 b(F)-7 b(or)31 b(de-)739 4707 y(tailed)20 b(information,)h(including)f(a)f(description)g(of)h (the)g(mo)r(dule)h(con\014guration)d(language,)739 4806 y(see)27 b(c)n(hapter)p 0 0 1 TeXcolorrgb 27 w(4)p Black(.)863 4907 y(A)39 b Fq(mo)l(dule)h Fr(is)e(an)h(isolated)f(namespace,)i(with) g(visibilit)n(y)e(of)h(bindings)f(con)n(trolled)739 5006 y(b)n(y)30 b(mo)r(dule)h(descriptions)f(written)g(in)h(a)f(sp)r(ecial)g (con\014guration)f(language.)44 b(A)31 b(mo)r(dule)p Black 2150 5255 a(4)p Black eop end %%Page: 5 13 TeXDict begin 5 12 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(ma)n(y)30 b(b)r(e)i(instan)n(tiated)f(as)g(a)g Fq(p)l(ackage)p Fr(,)j(whic)n(h)d(is)h(an)f(en)n(vironmen)n(t)f(in)i (whic)n(h)f(co)r(de)g(can)291 623 y(b)r(e)i(ev)-5 b(aluated.)53 b(Most)33 b(mo)r(dules)g(are)f(instan)n(tiated)h(only)f(once)h(and)g (so)f(ha)n(v)n(e)g(a)h(unique)291 722 y(pac)n(k)-5 b(age.)49 b(A)32 b Fq(structur)l(e)f Fr(is)h(a)g(subset)g(of)h(the)f(bindings)g (in)h(a)f(pac)n(k)-5 b(age.)49 b(Only)32 b(b)n(y)g(b)r(eing)291 822 y(included)38 b(in)f(a)g(structure)g(can)g(a)g(binding)h(b)r(e)g (made)f(visible)g(in)h(other)f(pac)n(k)-5 b(ages.)65 b(A)291 922 y(structure)23 b(has)g(t)n(w)n(o)g(parts,)g(the)h(pac)n(k) -5 b(age)22 b(whose)h(bindings)h(are)e(b)r(eing)i(exp)r(orted)f(and)h (the)291 1021 y(set)29 b(of)h(names)f(that)h(are)f(to)h(b)r(e)g(exp)r (orted.)43 b(This)30 b(set)f(of)h(names)f(is)h(called)f(an)h Fq(interfac)l(e)p Fr(.)291 1121 y(A)e(mo)r(dule)f(then)i(has)e(three)g (parts:)p Black 415 1282 a Fn(\017)p Black 41 w Fr(a)g(set)h(of)f (structures)g(whose)g(bindings)h(are)e(to)i(b)r(e)g(visible)f(within)i (the)f(mo)r(dule)p Black 415 1446 a Fn(\017)p Black 41 w Fr(the)g(source)e(co)r(de)i(to)f(b)r(e)h(ev)-5 b(aluated)28 b(within)g(the)g(mo)r(dule)p Black 415 1609 a Fn(\017)p Black 41 w Fr(a)f(set)h(of)f(exp)r(orted)h(in)n(terfaces)291 1771 y(Instan)n(tiating)d(a)g(mo)r(dule)h(pro)r(duces)f(a)g(pac)n(k)-5 b(age)25 b(and)g(a)g(set)h(of)g(structures,)f(one)h(for)f(eac)n(h)291 1870 y(of)i(the)h(exp)r(orted)f(in)n(terfaces.)415 1970 y(The)f(follo)n(wing)f(example)h(uses)f Fo(define-structure)20 b Fr(to)26 b(create)f(a)g(mo)r(dule)i(that)f(im-)291 2070 y(plemen)n(ts)g(simple)g(cells)g(as)f(pairs,)g(instan)n(tiates)h (this)g(mo)r(dule,)h(and)f(binds)g(the)h(resulting)291 2169 y(structure)j(to)g Fo(cells)p Fr(.)44 b(The)31 b(syn)n(tax)e Fo(\(export)41 b Fq(name)33 b(.)13 b(.)g(.)g Fo(\))46 b Fr(creates)29 b(an)i(in)n(terface)f(con-)291 2269 y(taining)j Fq(name)h(.)13 b(.)g(.)g Fr(.)51 b(The)32 b Fo(open)f Fr(clause)h(lists)g(structures)f(whose)h(bindings)g(are)f(visible)291 2368 y(within)d(the)g(mo)r(dule.)37 b(The)28 b Fo(begin)d Fr(clause)i(con)n(tains)g(source)f(co)r(de.)p Black Black 291 2530 a Fo(\(define-structu)o(re)37 b(cells)42 b(\(export)e (make-cell)1685 2629 y(cell-ref)1685 2729 y(cell-set!\))378 2829 y(\(open)h(scheme\))378 2928 y(\(begin)g(\(define)g(\(make-cell)e (x\))770 3028 y(\(cons)j('cell)f(x\)\))683 3128 y(\(define)g(cell-ref)f (cdr\))683 3227 y(\(define)h(cell-set!)e(set-cdr!\)\)\))415 3388 y Fr(Cells)32 b(could)f(also)g(ha)n(v)n(e)f(b)r(een)i(implemen)n (ted)h(using)e(the)h(record)f(facilit)n(y)g(describ)r(ed)291 3488 y(in)c(section)p 0 0 1 TeXcolorrgb 28 w(5.9)p Black 26 w(and)h(a)n(v)-5 b(ailable)26 b(in)i(structure)f Fo (define-record-ty)o(pe)p Fr(.)p Black Black 291 3649 a Fo(\(define-structu)o(re)37 b(cells)42 b(\(export)e(make-cell)1685 3749 y(cell-ref)1685 3849 y(cell-set!\))378 3948 y(\(open)h(scheme)g (define-record-typ)o(es\))378 4048 y(\(begin)g(\(define-record-t)o(yp)o (e)d(cell)k(:cell)770 4148 y(\(make-cell)d(value\))770 4247 y(cell?)770 4347 y(\(value)i(cell-ref)f(cell-set!\)\)\)\))415 4508 y Fr(With)30 b(either)e(de\014nition)i(the)f(resulting)f (structure)g(can)h(b)r(e)g(used)g(in)g(other)f(mo)r(dules)291 4608 y(b)n(y)f(including)i Fo(cells)c Fr(in)j(an)g Fo(open)e Fr(clause.)415 4707 y(The)32 b(command)g(in)n(terpreter)f(is)h(alw)n(a) n(ys)f(op)r(erating)g(within)i(a)f(particular)e(pac)n(k)-5 b(age.)291 4807 y(Initially)29 b(this)h(is)f(a)g(pac)n(k)-5 b(age)28 b(in)i(whic)n(h)g(only)f(the)h(standard)e(Sc)n(heme)i (bindings)f(are)g(vis-)291 4907 y(ible.)44 b(The)30 b(bindings)g(of)f (other)h(structures)f(can)h(b)r(e)g(made)g(visible)f(b)n(y)h(using)g (the)g Fo(,open)291 5006 y Fr(command)d(describ)r(ed)g(in)h(section)p 0 0 1 TeXcolorrgb 27 w(3.4)p Black 27 w(b)r(elo)n(w.)p Black 1702 5255 a(5)p Black eop end %%Page: 6 14 TeXDict begin 6 13 bop 0 TeXcolorgray Black Black Black 863 523 a Fr(Note)32 b(that)g(this)g(initial)g(pac)n(k)-5 b(age)30 b(do)r(es)h(not)h(include)g(the)g(con\014guration)e(language.) 739 623 y(Mo)r(dule)f(co)r(de)f(needs)g(to)h(b)r(e)f(ev)-5 b(aluated)29 b(in)f(the)h(con\014guration)e(pac)n(k)-5 b(age,)27 b(whic)n(h)i(can)f(b)r(e)739 722 y(done)f(b)n(y)h(using)f (the)h Fo(,)p Fr(con\014g)e(command:)p Black Black 739 888 a Fo(>)43 b(,config)e(\(define-structur)o(e)c(cells)42 b(...\))739 988 y(>)h(,open)f(cells)739 1088 y(>)h(\(make-cell)d(4\)) 739 1187 y('\(cell)h(.)i(4\))739 1287 y(>)g(\(define)e(c)i(\(make-cell) c(4\)\))739 1386 y(>)k(\(cell-ref)d(c\))739 1486 y(4)739 1761 y Fj(2.7)135 b(Library)739 1942 y Fr(A)32 b(n)n(um)n(b)r(er)f(of)g (useful)h(utilities)g(are)f(either)g(built)h(in)g(to)f(Sc)n(heme)h(48)e (or)h(can)g(b)r(e)h(loaded)739 2042 y(from)26 b(an)g(external)g (library)-7 b(.)35 b(These)26 b(utilities)h(are)f(not)g(visible)h(in)g (the)f(user)g(en)n(vironmen)n(t)739 2142 y(b)n(y)31 b(default,)i(but)f (can)e(b)r(e)i(made)f(a)n(v)-5 b(ailable)30 b(with)i(the)g Fo(open)d Fr(command.)48 b(F)-7 b(or)31 b(example,)739 2241 y(to)c(use)h(the)g Fo(tables)d Fr(structure,)i(do)p Black Black 739 2407 a Fo(>)43 b(,open)f(tables)739 2507 y(>)863 2673 y Fr(If)23 b(the)f(utilit)n(y)h(is)f(not)g(already)e (loaded,)j(then)f(the)g Fo(,open)e Fr(command)i(will)g(load)g(it.)35 b(Or,)739 2773 y(y)n(ou)23 b(can)h(load)g(something)g(explicitly)g (\(without)h(op)r(ening)f(it\))h(using)f(the)h Fo(load-package)739 2872 y Fr(command:)p Black Black 739 3038 a Fo(>)43 b(,load-package)38 b(queues)739 3138 y(>)43 b(,open)f(queues)863 3304 y Fr(When)26 b(loading)f(a)g(utilit)n(y)-7 b(,)27 b(the)e(message)f ("Note:)36 b(optional)25 b(optimizer)g(not)g(in)n(v)n(ok)n(ed")739 3404 y(is)i(inno)r(cuous.)37 b(F)-7 b(eel)28 b(free)f(to)h(ignore)e (it.)863 3503 y(See)i(also)f(the)h(pac)n(k)-5 b(age)26 b(system)h(do)r(cumen)n(tation,)g(in)h(c)n(hapter)p 0 0 1 TeXcolorrgb 27 w(4)p Black(.)863 3603 y(Not)e(all)f(of)g(the)g(the)h (libraries)d(a)n(v)-5 b(ailable)24 b(in)i(Sc)n(heme)f(48)f(are)g (describ)r(ed)h(in)g(this)h(man-)739 3703 y(ual.)33 b(All)19 b(are)f(listed)g(in)h(\014les)f Fo(rts-packages.scm)p Fr(,)c Fo(comp-packages.sc)o(m)p Fr(,)g Fo(env-packages.scm)p Fr(,)739 3802 y(and)33 b Fo(more-packages.scm)27 b Fr(in)34 b(the)g Fo(scheme)d Fr(directory)h(of)i(the)g(distribution,)h(and)f (the)739 3902 y(bindings)27 b(they)g(exp)r(ort)g(are)f(listed)i(in)f Fo(interfaces.scm)22 b Fr(and)27 b Fo(more-interfaces.)o(scm)739 4001 y Fr(in)h(the)g(same)f(directory)-7 b(.)p Black 2150 5255 a(6)p Black eop end %%Page: 7 15 TeXDict begin 7 14 bop 0 TeXcolorgray Black Black Black 291 1146 a Fl(Chapter)64 b(3)291 1561 y Fp(Command)77 b(pro)6 b(cessor)291 1993 y Fr(This)28 b(c)n(hapter)f(details)h(Sc)n (heme)g(48's)f(command)h(pro)r(cessor,)e(whic)n(h)i(incorp)r(orates)e (b)r(oth)291 2092 y(a)k(read-ev)-5 b(al-prin)n(t)29 b(lo)r(op)i(and)f (an)h(in)n(teractiv)n(e)f(debugger.)45 b(A)n(t)32 b(the)f Fo(>)g Fr(prompt,)g(y)n(ou)f(can)291 2192 y(t)n(yp)r(e)h(either)g(a)g (Sc)n(heme)h(form)f(\(expression)f(or)g(de\014nition\))j(or)d(a)h (command)g(b)r(eginning)291 2291 y(with)h(a)g(comma.)49 b(In)32 b(insp)r(ection)g(mo)r(de)g(\(see)g(section)p 0 0 1 TeXcolorrgb 31 w(3.8)p Black(\))g(the)g(prompt)g(c)n(hanges)e(to) i Fo(:)291 2391 y Fr(and)20 b(commands)h(no)f(longer)g(need)h(to)g(b)r (e)g(preceded)g(b)n(y)g(a)f(comma;)j(input)f(b)r(eginning)e(with)291 2491 y(a)27 b(letter)i(or)e(digit)h(is)g(assumed)g(to)g(b)r(e)h(a)f (command,)g(not)g(an)g(expression.)37 b(In)29 b(insp)r(ection)291 2590 y(mo)r(de)j(the)h(command)f(pro)r(cessor)e(prin)n(ts)i(out)g(a)g (men)n(u)h(of)f(selectable)g(comp)r(onen)n(ts)f(for)291 2690 y(the)d(curren)n(t)e(ob)5 b(ject)28 b(of)f(in)n(terest.)291 2965 y Fj(3.1)135 b(Curren)l(t)45 b(fo)t(cus)g(v)-7 b(alue)45 b(and)f Fh(##)291 3146 y Fr(The)38 b(command)g(pro)r(cessor)e(k)n(eeps) i(trac)n(k)f(of)i(a)f(curren)n(t)f Fq(fo)l(cus)j(value)p Fr(.)70 b(This)39 b(v)-5 b(alue)38 b(is)291 3246 y(normally)22 b(the)i(last)f(v)-5 b(alue)24 b(returned)f(b)n(y)g(a)g(command.)35 b(If)24 b(a)f(command)h(returns)e(m)n(ultiple)291 3346 y(v)-5 b(alues)31 b(the)i(fo)r(cus)f(ob)5 b(ject)33 b(is)f(a)g(list)g (of)g(the)h(v)-5 b(alues.)51 b(The)32 b(fo)r(cus)g(v)-5 b(alue)32 b(is)h(not)f(c)n(hanged)291 3445 y(if)27 b(a)g(command)f (returns)g(no)h(v)-5 b(alues)26 b(or)h(a)f(distinguished)h(`unsp)r (eci\014c')g(v)-5 b(alue.)37 b(Examples)291 3545 y(of)26 b(forms)h(that)g(return)f(this)i(unsp)r(eci\014c)f(v)-5 b(alue)27 b(are)f(de\014nitions,)h(uses)f(of)34 b Fo(set!)p Fr(,)25 b(and)i Fo(\(if)291 3645 y(#f)42 b(0\))p Fr(.)36 b(It)28 b(prin)n(ts)g(as)f Fo(#)p Fn(f)p Fo(Unspecific)p Fn(g)p Fr(.)415 3744 y(The)f(reader)e(used)i(b)n(y)g(the)g(command)g (pro)r(cessor)d(reads)i Fo(##)g Fr(as)g(a)h(sp)r(ecial)f(expression)291 3844 y(that)i(ev)-5 b(aluates)27 b(to)h(the)g(curren)n(t)f(fo)r(cus)g (ob)5 b(ject.)p Black Black 291 4010 a Fo(>)43 b(\(list)e('a)i('b\))291 4110 y('\(a)f(b\))291 4209 y(>)h(\(car)f(##\))291 4309 y('a)291 4408 y(>)h(\(symbol->string)37 b(##\))291 4508 y("a")291 4608 y(>)43 b(\(if)f(#f)h(0\))291 4707 y(#)p Fn(f)p Fo(Unspecific)p Fn(g)291 4807 y Fo(>)g(##)291 4907 y("a")291 5006 y(>)p Black 1702 5255 a Fr(7)p Black eop end %%Page: 8 16 TeXDict begin 8 15 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(3.2)135 b(Command)45 b(lev)l(els)739 718 y Fr(If)30 b(an)f(error,)e(k)n(eyb)r(oard)h(in)n(terrupt,)h(or)g(other) f(breakp)r(oin)n(t)h(o)r(ccurs,)g(or)f(the)i Fo(,push)d Fr(com-)739 817 y(mand)35 b(is)g(used,)i(the)e(command)g(pro)r(cessor)e (in)n(v)n(ok)n(es)g(a)h(recursiv)n(e)f(cop)n(y)i(of)g(itself,)i(pre-) 739 917 y(serving)29 b(the)i(dynamic)f(state)g(of)h(the)g(program)d (when)j(the)f(breakp)r(oin)n(t)g(o)r(ccurred.)44 b(The)739 1016 y(recursiv)n(e)32 b(in)n(v)n(o)r(cation)g(creates)g(a)h(new)g Fq(c)l(ommand)j(level)p Fr(.)55 b(The)34 b(command)f(lev)n(els)g(form) 739 1116 y(a)d(stac)n(k)f(with)i(the)g(curren)n(t)f(lev)n(el)g(at)g (the)h(top.)45 b(The)30 b(command)g(prompt)h(indicates)f(the)739 1216 y(n)n(um)n(b)r(er)g(of)h(stopp)r(ed)g(lev)n(els)e(b)r(elo)n(w)i (the)g(curren)n(t)e(one:)43 b Fo(>)30 b Fr(or)g Fo(:)42 b Fr(for)30 b(the)h(base)f(lev)n(el)g(and)739 1315 y Fq(n)6 b Fo(>)26 b Fr(or)g Fq(n)6 b Fo(:)36 b Fr(for)26 b(all)h(other)f(lev)n(els,)g(where)g Fq(n)33 b Fr(is)27 b(the)g(command-lev)n(el)e(nesting)i(depth.)37 b(The)739 1415 y Fo(levels)30 b Fr(setting)i(describ)r(ed)g(b)r(elo)n(w)f(can)h (b)r(e)h(used)f(to)g(disable)f(the)i(automatic)e(pushing)739 1515 y(of)c(new)h(lev)n(els.)863 1621 y(The)33 b(command)f(pro)r (cessor's)d(ev)-5 b(aluation)32 b(pac)n(k)-5 b(age)31 b(and)h(the)g(v)-5 b(alue)32 b(of)h(the)f(curren)n(t)739 1721 y(fo)r(cus)g(v)-5 b(alue)31 b(are)g(lo)r(cal)g(to)h(eac)n(h)f (command)g(lev)n(el.)49 b(They)32 b(are)f(preserv)n(ed)f(when)i(a)f (new)739 1820 y(lev)n(el)38 b(is)h(pushed)g(and)g(restored)e(when)i(it) g(is)g(discarded.)70 b(The)39 b(settings)f(of)h(all)g(other)739 1920 y(settings)27 b(are)g(shared)f(b)n(y)i(all)f(command)g(lev)n(els.) p Black Black 780 2130 a Fn(h)p Fr(eof)p Fn(i)946 2230 y Fr(Discards)f(the)h(curren)n(t)f(command)g(lev)n(el)g(and)g(resumes)g (running)g(the)h(lev)n(el)f(do)n(wn.)946 2329 y Fn(h)p Fr(eof)p Fn(i)32 b Fr(is)f(usually)g(con)n(trol-)p Fo(D)e Fr(at)i(a)g(Unix)h(shell)f(or)g(con)n(trol-)p Fo(C)e Fr(con)n(trol-)p Fo(D)g Fr(using)i(the)946 2429 y(Emacs)c Fo(cmuscheme48)c Fr(library)-7 b(.)p Black Black 780 2622 a Fo(,pop)946 2722 y Fr(The)28 b(same)f(as)g Fn(h)p Fr(eof)p Fn(i)p Fr(.)p Black Black 780 2915 a Fo(,proceed)41 b([)p Fq(exp)48 b Fo(...)p Fr(])946 3015 y(Pro)r(ceed)39 b(after)g(an)g(in)n(terrupt)g(or)f(error,)j(resuming)d(the)i(next)g (command)f(lev)n(el)946 3114 y(do)n(wn,)i(deliv)n(ering)d(the)h(v)-5 b(alues)38 b(of)45 b Fq(exp)40 b(.)13 b(.)g(.)83 b Fr(to)39 b(the)g(con)n(tin)n(uation.)69 b(In)n(terrupt)946 3214 y(con)n(tin)n(uations)30 b(discard)g(an)n(y)h(returned)f(v)-5 b(alues.)47 b Fo(,Pop)29 b Fr(and)i Fo(,proceed)d Fr(ha)n(v)n(e)i(the) 946 3314 y(same)20 b(e\013ect)g(after)g(an)f(in)n(terrupt)h(but)g(b)r (eha)n(v)n(e)f(di\013eren)n(tly)h(after)f(errors.)32 b Fo(,Proceed)946 3413 y Fr(restarts)37 b(the)h(erroneous)e (computation)h(from)h(the)g(p)r(oin)n(t)g(where)g(the)g(error)e(o)r(c-) 946 3513 y(curred)f(\(although)h(not)g(all)f(errors)f(are)g(pro)r (ceedable\))h(while)h Fo(,pop)f Fr(\(and)h Fn(h)p Fr(eof)p Fn(i)p Fr(\))946 3613 y(discards)27 b(it)h(and)f(prompts)g(for)h(a)f (new)g(command.)p Black Black 780 3806 a Fo(,push)946 3906 y Fr(Pushes)j(a)g(new)h(command)f(lev)n(el)g(on)h(ab)r(o)n(v)n(e)e (the)i(curren)n(t)e(one.)46 b(This)30 b(is)h(useful)g(if)946 4005 y(the)25 b Fo(levels)d Fr(setting)i(has)f(b)r(een)i(used)f(to)g (disable)f(the)i(automatic)e(pushing)h(of)g(new)946 4105 y(lev)n(els)j(for)g(errors)f(and)h(in)n(terrupts.)p Black Black 780 4298 a Fo(,reset)42 b([)p Fq(numb)l(er)9 b Fo(])946 4398 y Fr(P)n(ops)18 b(do)n(wn)g(to)h(a)g(giv)n(en)f(lev)n(el) g(and)h(restarts)e(that)j(lev)n(el.)33 b Fq(Numb)l(er)27 b Fr(defaults)19 b(to)g(zero,)946 4497 y Fo(,reset)26 b Fr(restarts)g(the)i(command)f(pro)r(cessor,)f(discarding)g(all)h (existing)g(lev)n(els.)863 4707 y(Whenev)n(er)d(mo)n(ving)f(to)h(an)f (existing)h(lev)n(el,)g(either)g(b)n(y)g(sending)g(an)f Fn(h)p Fr(eof)p Fn(i)i Fr(or)e(b)n(y)h(using)739 4807 y Fo(,reset)31 b Fr(or)h(the)i(other)f(commands)g(listed)g(ab)r(o)n(v)n (e,)h(the)f(command)g(pro)r(cessor)f(runs)h(all)739 4907 y(of)26 b(the)h Fo(dynamic-wind)21 b Fr(\\after")k(th)n(unks)i(b)r (elonging)e(to)i(stopp)r(ed)f(computations)g(on)g(the)739 5006 y(discarded)h(lev)n(el\(s\).)p Black 2150 5255 a(8)p Black eop end %%Page: 9 17 TeXDict begin 9 16 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(3.3)135 b(Logistical)47 b(commands)p Black Black 332 705 a Fo(,load)42 b Fq(\014lename)30 b(.)13 b(.)g(.)498 805 y Fr(Loads)k(the)i(named)f(Sc)n(heme)h(source)e (\014le\(s\).)34 b(Easier)17 b(to)h(t)n(yp)r(e)h(than)f Fo(\(load)42 b(")p Fq(\014lename)6 b Fo("\))498 904 y Fr(b)r(ecause)31 b(y)n(ou)g(don't)g(ha)n(v)n(e)f(to)i(shift)g(to)f(t)n (yp)r(e)h(the)f(paren)n(theses)f(or)h(quote)g(marks.)498 1004 y(\(Ho)n(w)n(ev)n(er,)21 b(it)g(is)g(still)g(p)r(ossible)f(to)h (sp)r(ecify)g(a)f(\014lename)h(as)f(a)h(Sc)n(heme)f(string)g(literal,) 498 1103 y(with)30 b(quote)g(marks|y)n(ou'll)d(need)j(this)g(for)f (\014lenames)g(con)n(taining)g(whitespace.\))498 1203 y(Also,)c(it)h(w)n(orks)d(in)j(an)n(y)e(pac)n(k)-5 b(age,)24 b(unlik)n(e)h Fo(\(load)42 b(")p Fq(\014lename)6 b Fo("\))p Fr(,)25 b(whic)n(h)g(will)g(w)n(ork)498 1303 y(only)i(in)h(pac)n(k)-5 b(ages)26 b(in)i(whic)n(h)f(the)h(v)-5 b(ariable)27 b Fo(load)f Fr(is)h(de\014ned)h(appropriately)-7 b(.)p Black Black 332 1461 a Fo(,exit)42 b([)p Fq(exp)5 b Fo(])498 1561 y Fr(Exits)22 b(bac)n(k)g(out)g(to)g(shell)h(\(or)e(executiv)n(e)h (or)g(whatev)n(er)f(in)n(v)n(ok)n(ed)g(Sc)n(heme)h(48)g(in)h(the)498 1661 y(\014rst)j(place\).)37 b Fq(Exp)31 b Fr(should)c(ev)-5 b(aluate)25 b(to)i(an)f(in)n(teger.)35 b(The)27 b(in)n(teger)e(is)h (returned)g(to)498 1760 y(the)k(calling)f(program.)40 b(The)30 b(default)f(v)-5 b(alue)30 b(of)36 b Fq(exp)e Fr(is)c(zero,)f(whic)n(h,)h(on)f(Unix,)h(is)498 1860 y(generally)c(in)n(terpreted)h(as)g(success.)291 2131 y Fj(3.4)135 b(Mo)t(dule)44 b(commands)291 2313 y Fr(There)27 b(are)f(man)n(y)h(commands)g(related)g(to)h(mo)r(dules.)36 b(Only)28 b(the)g(most)f(commonly)g(used)291 2413 y(mo)r(dule)f (commands)f(are)g(describ)r(ed)g(here;)h(do)r(cumen)n(tation)g(for)f (the)i(rest)e(can)g(b)r(e)i(found)291 2513 y(in)38 b(section)p 0 0 1 TeXcolorrgb 39 w(4.8)p Black(.)69 b(There)38 b(is)g(also)g(a)g (brief)g(description)g(of)h(mo)r(dules,)i(structures,)g(and)291 2612 y(pac)n(k)-5 b(ages)25 b(in)j(section)p 0 0 1 TeXcolorrgb 27 w(2.6)p Black 27 w(b)r(elo)n(w.)p Black Black 332 2777 a Fo(,open)42 b Fq(structur)l(e)28 b(.)13 b(.)g(.)498 2876 y Fr(Mak)n(es)29 b(the)h(bindings)g(in)g(the)g Fq(structur)l(e)6 b Fr(s)28 b(visible)i(in)g(the)g(curren)n(t)f(pac)n(k)-5 b(age.)42 b(The)498 2976 y(pac)n(k)-5 b(ages)29 b(asso)r(ciated)h(with) i(the)f Fq(structur)l(e)6 b Fr(s)30 b(will)h(b)r(e)h(loaded)e(if)i (this)f(has)g(not)g(al-)498 3076 y(ready)23 b(b)r(een)i(done)f(\(the)h Fo(ask-before-loadin)o(g)18 b Fr(setting)25 b(can)f(b)r(e)h(used)f(to)g (disable)498 3175 y(the)k(automatic)f(loading)g(of)g(pac)n(k)-5 b(ages\).)p Black Black 332 3334 a Fo(,config)41 b([)p Fq(c)l(ommand)9 b Fo(])498 3434 y Fr(Executes)38 b Fq(c)l(ommand)48 b Fr(in)39 b(the)g Fo(config)d Fr(pac)n(k)-5 b(age,)40 b(whic)n(h)e(includes)h(the)g(mo)r(dule)498 3533 y(con\014guration)26 b(language.)35 b(F)-7 b(or)27 b(example,)h(use)p Black Black 498 3715 a Fo(,config)41 b(,load)g Fq(\014lename)498 3896 y Fr(to)29 b(load)g(a)g(\014le)g(con)n(taining)g(mo)r(dule)g (de\014nitions.)43 b(If)29 b(no)h Fq(c)l(ommand)38 b Fr(is)29 b(giv)n(en,)h(the)498 3996 y Fo(config)25 b Fr(pac)n(k)-5 b(age)26 b(b)r(ecomes)i(the)g(execution)f(pac)n(k)-5 b(age)26 b(for)h(future)h(commands.)p Black Black 332 4154 a Fo(,user)42 b([)p Fq(c)l(ommand)9 b Fo(])498 4254 y Fr(This)26 b(is)f(similar)g(to)g(the)h Fo(,config)p Fr(.)33 b(It)26 b(mo)n(v)n(es)e(to)h(or)g(executes)g(a)g(command)g(in)h (the)498 4354 y(user)e(pac)n(k)-5 b(age)23 b(\(whic)n(h)i(is)g(the)g (default)g(pac)n(k)-5 b(age)24 b(when)h(the)g(Sc)n(heme)f(48)g(command) 498 4453 y(pro)r(cessor)i(starts\).)291 4725 y Fj(3.5)135 b(Debugging)45 b(commands)p Black Black 332 4907 a Fo(,preview)498 5006 y Fr(Somewhat)25 b(lik)n(e)f(a)h(bac)n(ktrace,)f(but)h(b)r(ecause) g(of)g(tail)g(recursion)e(y)n(ou)i(see)f(less)h(than)p Black 1702 5255 a(9)p Black eop end %%Page: 10 18 TeXDict begin 10 17 bop 0 TeXcolorgray Black Black Black 946 523 a Fr(y)n(ou)27 b(migh)n(t)f(in)i(debuggers)d(for)h(some)h (other)f(languages.)35 b(The)27 b(stac)n(k)e(to)i(displa)n(y)f(is)946 623 y(c)n(hosen)h(as)g(follo)n(ws:)p Black 1023 781 a(1.)p Black 41 w(If)33 b(the)h(curren)n(t)e(fo)r(cus)h(ob)5 b(ject)32 b(is)h(a)f(con)n(tin)n(uation)g(or)g(a)h(thread,)h(then)f (that)1129 881 y(con)n(tin)n(uation)27 b(or)f(thread's)h(stac)n(k)g(is) h(displa)n(y)n(ed.)p Black 1023 1006 a(2.)p Black 41 w(Otherwise,)33 b(if)g(the)f(curren)n(t)g(command)g(lev)n(el)f(w)n(as)h (initiated)h(b)r(ecause)e(of)i(a)1129 1106 y(breakp)r(oin)n(t)25 b(in)h(the)h(next)f(lev)n(el)f(do)n(wn,)h(then)h(the)f(stac)n(k)f(at)h (that)g(breakp)r(oin)n(t)1129 1205 y(is)i(displa)n(y)n(ed.)p Black 1023 1331 a(3.)p Black 41 w(Otherwise,)33 b(there)f(is)g(no)f (stac)n(k)h(to)g(displa)n(y)f(and)h(a)g(message)e(is)i(prin)n(ted)g(to) 1129 1430 y(that)c(e\013ect.)946 1589 y(One)k(line)h(is)f(prin)n(ted)g (out)h(for)f(eac)n(h)f(con)n(tin)n(uation)h(on)g(the)g(c)n(hosen)g (stac)n(k,)g(going)946 1689 y(from)c(top)f(to)h(b)r(ottom.)p Black Black 780 1847 a Fo(,run)42 b Fq(exp)946 1947 y Fr(Ev)-5 b(aluate)30 b Fq(exp)5 b Fr(,)32 b(prin)n(ting)f(the)g (result\(s\))g(and)f(making)g(them)h(\(or)g(a)f(list)h(of)g(them,)946 2046 y(if)i Fq(exp)e Fr(returns)25 b(m)n(ultiple)i(results\))e(the)h (new)g(fo)r(cus)g(ob)5 b(ject.)36 b(The)25 b Fo(,run)g Fr(command)946 2146 y(is)40 b(useful)h(in)f(insp)r(ection)h(mo)r(de)f (\(see)g(section)p 0 0 1 TeXcolorrgb 40 w(3.8)p Black 39 w(b)r(elo)n(w\))g(and)g(when)h(writing)946 2246 y(command)28 b(programs)d(\(see)i(section)p 0 0 1 TeXcolorrgb 28 w(3.9)p Black 26 w(b)r(elo)n(w\).)p Black Black 780 2404 a Fo(,trace)42 b Fq(name)50 b Fo(...)946 2504 y Fr(Start)29 b(tracing)e(calls)g(to)i (the)f(named)g(pro)r(cedure)g(or)f(pro)r(cedures.)38 b(With)29 b(no)f(argu-)946 2603 y(men)n(ts,)23 b(displa)n(ys)e(all)g (pro)r(cedures)g(curren)n(tly)f(traced.)34 b(This)22 b(a\013ects)f(the)h(binding)g(of)946 2703 y Fq(name)6 b Fr(,)24 b(not)f(the)g(b)r(eha)n(vior)e(of)h(the)h(pro)r(cedure)e (that)i(is)f(its)h(curren)n(t)e(v)-5 b(alue.)35 b Fq(Name)29 b Fr(is)946 2803 y(rede\014ned)e(to)f(b)r(e)h(a)f(pro)r(cedure)g(that)h (prin)n(ts)f(a)g(message,)f(calls)h(the)h(original)e(v)-5 b(alue)946 2902 y(of)45 b Fq(name)6 b Fr(,)40 b(prin)n(ts)e(another)f (message,)i(and)e(\014nally)h(passes)e(along)h(the)h(v)-5 b(alue\(s\))946 3002 y(returned)28 b(b)n(y)f(the)h(original)e(pro)r (cedure.)p Black Black 780 3160 a Fo(,untrace)41 b Fq(name)50 b Fo(...)946 3260 y Fr(Stop)30 b(tracing)f(calls)g(to)h(the)g(named)f (pro)r(cedure)g(or)g(pro)r(cedures.)42 b(With)30 b(no)g(argu-)946 3360 y(men)n(t,)e(stop)g(tracing)e(all)i(calls)f(to)g(all)g(pro)r (cedures.)p Black Black 780 3518 a Fo(,condition)946 3618 y Fr(The)36 b Fo(,condition)31 b Fr(command)k(displa)n(ys)g(the)h (condition)f(ob)5 b(ject)35 b(describing)g(the)946 3717 y(error)20 b(or)i(in)n(terrupt)f(that)h(initiated)h(the)f(curren)n(t)f (command)h(lev)n(el.)34 b(The)22 b(condition)946 3817 y(ob)5 b(ject)41 b(b)r(ecomes)f(the)g(curren)n(t)g(fo)r(cus)g(v)-5 b(alue.)76 b(This)40 b(is)g(particularly)f(useful)i(in)946 3917 y(conjunction)e(with)h(the)f(insp)r(ector.)70 b(F)-7 b(or)38 b(example,)j(if)e(a)g(pro)r(cedure)e(is)i(passed)946 4016 y(the)26 b(wrong)e(n)n(um)n(b)r(er)h(of)g(argumen)n(ts,)f(do)h Fo(,condition)c Fr(follo)n(w)n(ed)j(b)n(y)h Fo(,inspect)c Fr(to)946 4116 y(insp)r(ect)29 b(the)f(pro)r(cedure)e(and)i(its)f (argumen)n(ts.)p Black Black 780 4275 a Fo(,bound?)41 b Fq(name)946 4374 y Fr(Displa)n(y)35 b(the)g(binding)g(of)42 b Fq(name)6 b Fr(,)37 b(if)e(there)g(is)g(one,)h(and)f(otherwise)f (prin)n(ts)g(`)p Fo(Not)946 4474 y(bound)p Fr('.)p Black Black 780 4632 a Fo(,expand)41 b Fq(form)50 b Fr(Sho)n(w)43 b(macro)e(expansion)h(of)50 b Fq(form)6 b Fr(,)48 b(if)43 b(an)n(y)-7 b(,)47 b(fully)c(expanding)g(all)946 4732 y(macros)26 b(in)i Fq(form)6 b Fr(.)p Black Black 780 4890 a Fo(,where)42 b Fq(pr)l(o)l(c)l(e)l(dur)l(e)946 4990 y Fr(Displa)n(y)28 b(name)f(of)h(\014le)f(con)n(taining)h Fq(pr)l(o)l(c)l(e)l(dur)l(e)6 b Fr('s)28 b(source)e(co)r(de.)p Black 2130 5255 a(10)p Black eop end %%Page: 11 19 TeXDict begin 11 18 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(3.6)135 b(Pro\014ling)45 b(commands)291 705 y Fr(After)28 b(loading)e(the)i Fo(profile-commands)21 b Fr(structure)27 b(via)p Black Black 291 845 a Fo(,load-package)38 b(profile-commands)291 986 y Fr(Sc)n(heme)22 b(48)f(pro)n(vides)g(a)h (basic)g(pro\014ler,)h(with)g(supp)r(ort)f(for)g(\015at)g(and)g (call-graph)f(pro\014les.)291 1085 y(In)e(addition)g(to)h(call-)e(and)h (run)n(times)g(the)h(heap)f(memory)g(usage)f(is)h(estimated)h(as)e(w)n (ell.)34 b(By)291 1185 y(adding)f(the)h(b)n(yte-co)r(de)g(optimizer)f Fo(profiler-instrume)o(nt)o(ati)o(on)27 b Fr(to)34 b(the)h (de\014nition)291 1285 y(of)27 b(a)g(structure)g(via)g(a)h(clause)p Black Black 378 1425 a Fo(\(optimize)40 b(profiler-instru)o(men)o(ta)o (tio)o(n\))291 1566 y Fr(in)28 b(the)h(structure)e(de\014nition,)i(co)r (de)f(will)g(b)n(y)g(instrumen)n(ted)g(with)h(calls)e(to)h(the)h (pro\014ler.)291 1665 y(The)34 b(call-times)f(to)h(instrumen)n(ted)h (co)r(de)f(can)g(then)g(b)r(e)h(measured)e(exactly)-7 b(.)56 b(Without)291 1765 y(instrumen)n(tation,)26 b(the)g(pro\014ler)f (is)g(solely)h(based)f(on)h(sampling)f(and)h(therefore)f(has)g(only)291 1864 y(limited)j(accuracy)-7 b(.)35 b(An)n(y)28 b(ev)-5 b(aluation)27 b(can)g(b)r(e)h(pro\014led)f(with)h(the)g(follo)n(wing)f (command:)p Black Black 332 2015 a Fo(,profile)40 b Fq(c)l(ommand)498 2115 y Fr(Ev)-5 b(aluate)37 b Fq(c)l(ommand)47 b Fr(under)37 b(the)h(pro\014ler,)h(prin)n(ting)e(the)h(pro\014ling)f(result)g(and) 498 2214 y(making)27 b(the)h(return)f(v)-5 b(alue\(s\))28 b(of)34 b Fq(c)l(ommand)j Fr(the)28 b(new)g(fo)r(cus)f(ob)5 b(ject.)415 2365 y(The)27 b(output)h(of)f(the)h(pro\014ler)e(is)h (explained)f(on)h(the)h(basis)e(of)h(the)h(follo)n(wing)e(piece)h(of) 291 2465 y(senseless)f(co)r(de:)p Black Black 291 2615 a Fo(\(define)40 b(\(c)j(x\))378 2715 y(\(if)f(\(=)h(x)g(0\))552 2814 y(0)552 2914 y(\(+)g(1)g(\(c)g(\(-)g(x)g(1\)\)\)\)\))291 3113 y(\(define)d(\(b)j(x\))378 3213 y(\(let)f(\(\(y)g(\(-)h(x)g (1\)\)\))465 3313 y(\(if)f(\(>)h(y)g(0\))639 3412 y(\(begin)726 3512 y(\(c)g(y\))726 3611 y(\(a)g(y\))726 3711 y(\(+)g(1)g(\(a)g (y\)\)\))639 3811 y(0\)\)\))291 4010 y(\(define)d(\(a)j(x\))378 4110 y(\(let)f(\(\(y)g(\(-)h(x)g(1\)\)\))465 4209 y(\(if)f(\(>)h(y)g (0\))639 4309 y(\(begin)726 4408 y(\(c)g(y\))726 4508 y(\(b)g(y\))726 4608 y(\(+)g(1)g(\(b)g(y\)\)\))639 4707 y(0\)\)\))291 4907 y(\(define)d(\(main)i(x\))378 5006 y(\(+)h(1)g(\(a)f(x\)\)\))p Black 1681 5255 a Fr(11)p Black eop end %%Page: 12 20 TeXDict begin 12 19 bop 0 TeXcolorgray Black Black Black 863 523 a Fr(The)28 b(pro\014ler)f(pro)r(duces)f(the)i(follo)n(wing)f (output:)p Black Black 739 722 a Fo(>)43 b(,profile)d(\(main)i(21\))739 922 y(**)h(Samples:)345 b(60)43 b(\(approx.)d(one)i(per)h(40ms\))739 1021 y(**)g(Interrupt)d(time:)h(50ms)739 1121 y(**)i(Real)f(run)g (time:)85 b(2430ms)739 1220 y(**)43 b(Total)e(memory:)128 b(22k)739 1320 y(**)43 b(GC)f(runs:)347 b(0)739 1519 y(**)43 b(Flat)f(result)f(\(times)g(in)i(ms\):)870 1719 y(time)85 b(cumu)h(self)129 b(mem)86 b(calls)f(ms/call)f(name)782 1818 y(61.66\045)h(1498)h(1498)172 b(2k)87 b(37+51)303 b(17)86 b(c)43 b(in)g("x.scm")826 1918 y(25.0\045)85 b(2430)129 b(608)h(10k)173 b(436)347 b(6)87 b(b)43 b(in)g("x.scm")782 2017 y(13.33\045)85 b(2430)129 b(324)h(10k)173 b(442)347 b(5)87 b(a)43 b(in)g("x.scm")870 2117 y(0.0\045)85 b(2430)216 b(0)174 b(0k)261 b(1)218 b(2430)85 b(main)42 b(in)h("x.scm")739 2316 y(**)g(Tree)f(result)f(\(times)g(in)i(ms\):)739 2516 y(i)174 b(time)42 b(self)g(child)85 b(mem)173 b(calls)85 b(name)739 2615 y(0)i(100.0\045)172 b(0)86 b(2430)129 b(0k)348 b(0)87 b()39 b([0])1306 2715 y(0)86 b(2430)129 b(0k)261 b(1/1)217 b(main)42 b(in)g("x.scm")f([1])739 2814 y(================)o(==)o(===)o(==)o(===)o(==)o(==)o(===)o(==)o (===)o(==)o(===)o(==)o(==)o(===)o(==)o(===)o(==)1916 2914 y(441/442)215 b(b)43 b(in)g("x.scm")d()i([3])1218 3014 y(324)130 b(891)86 b(10k)173 b(1/442)216 b(main)42 b(in)g("x.scm")f([1])739 3113 y(1)87 b(100.0\045)d(324)130 b(891)86 b(10k)260 b(442)86 b(a)43 b(in)g("x.scm")e()h([2]) 1218 3213 y(891)217 b(0)130 b(1k)174 b(22/37)216 b(c)43 b(in)g("x.scm")d([4])1916 3313 y(436/436)215 b(b)43 b(in)g("x.scm")d ()i([3])739 3412 y(================)o(==)o(===)o(==)o(===)o (==)o(==)o(===)o(==)o(===)o(==)o(===)o(==)o(==)o(===)o(==)o(===)o(==) 1916 3512 y(436/436)215 b(a)43 b(in)g("x.scm")d()i([2])739 3611 y(2)87 b(100.0\045)d(608)130 b(608)86 b(10k)260 b(436)86 b(b)43 b(in)g("x.scm")e()h([3])1218 3711 y(608)217 b(0)130 b(1k)174 b(15/37)216 b(c)43 b(in)g("x.scm")d ([4])1916 3811 y(441/442)215 b(a)43 b(in)g("x.scm")d()i([2]) 739 3910 y(================)o(==)o(===)o(==)o(===)o(==)o(==)o(===)o(==) o(===)o(==)o(===)o(==)o(==)o(===)o(==)o(===)o(==)1306 4010 y(0)86 b(2430)129 b(0k)261 b(1/1)217 b()39 b([0])739 4110 y(3)87 b(100.0\045)172 b(0)86 b(2430)129 b(0k)348 b(1)87 b(main)42 b(in)h("x.scm")d([1])1218 4209 y(324)130 b(891)86 b(10k)173 b(1/442)216 b(a)43 b(in)g("x.scm")d ()i([2])739 4309 y(================)o(==)o(===)o(==)o(===)o (==)o(==)o(===)o(==)o(===)o(==)o(===)o(==)o(==)o(===)o(==)o(===)o(==) 1218 4408 y(608)217 b(0)130 b(1k)174 b(15/37)216 b(b)43 b(in)g("x.scm")d()i([3])1218 4508 y(891)217 b(0)130 b(1k)174 b(22/37)216 b(a)43 b(in)g("x.scm")d()i([2]) 739 4608 y(4)87 b(61.66\045)41 b(1498)216 b(0)130 b(2k)174 b(37+51)85 b(c)43 b(in)g("x.scm")e([4])739 4707 y(================)o (==)o(===)o(==)o(===)o(==)o(==)o(===)o(==)o(===)o(==)o(===)o(==)o(==)o (===)o(==)o(===)o(==)1218 4807 y(932)86 b(1498)g(20k)260 b(1/1)217 b(main)42 b(in)g("x.scm")f([1])739 4907 y(0)87 b(100.0\045)d(932)i(1498)g(20k)173 b(1+877)85 b()1218 5006 y(324)130 b(891)86 b(10k)260 b(441)217 b(a)43 b(in)g("x.scm")d()i([2])p Black 2130 5255 a Fr(12)p Black eop end %%Page: 13 21 TeXDict begin 13 20 bop 0 TeXcolorgray Black Black Black 770 523 a Fo(608)130 b(608)85 b(10k)261 b(436)216 b(b)44 b(in)e("x.scm")f()i([3])857 623 y(0)218 b(0)130 b(2k)174 b(37/37)215 b(c)44 b(in)e("x.scm")f([4])415 920 y Fr(The)28 b(formatting)f(of)g(the)h(output)g(is)g(based)f(on)g (the)h(output)g(of)g(GNU)g(gprof)p 0 0 1 TeXcolorrgb 2880 890 a Fk(1)p Black 2917 920 a Fr(.)415 1024 y(First,)g(general)e (information)h(ab)r(out)g(the)h(pro\014ling)f(is)g(sho)n(wn:)p Black 415 1201 a Fn(\017)p Black 41 w Fo(samples)p Fr(:)48 b(total)34 b(n)n(um)n(b)r(er)h(of)f(samples)g(tak)n(en)g(and)g(the)h(a) n(v)n(erage)d(time)j(b)r(et)n(w)n(een)498 1301 y(t)n(w)n(o)27 b(samples)p Black 415 1483 a Fn(\017)p Black 41 w Fo(interrupt)40 b(time)p Fr(:)i(theoretical)30 b(in)n(terrupt)g(time,)i(the)g(time)f(b) r(et)n(w)n(een)g(t)n(w)n(o)f(sam-)498 1582 y(ples)p Black 415 1764 a Fn(\017)p Black 41 w Fo(real)42 b(run)g(time)p Fr(:)33 b(the)22 b(total)f(run)h(time)g(of)g(the)g(ev)-5 b(aluation,)22 b(simple)g(measuremen)n(t)498 1863 y(from)27 b(the)h(b)r(eginning)g(to)f(the)h(end)g(of)g(the)g(ev)-5 b(aluation)p Black 415 2045 a Fn(\017)p Black 41 w Fo(total)42 b(memory)p Fr(:)j(the)33 b(total)f(amoun)n(t)h(of)g(memory)f(used)g(b)n (y)h(the)g(program,)f(here)498 2144 y(in)c(kilob)n(ytes)p Black 415 2326 a Fn(\017)p Black 41 w Fo(GC)43 b(runs)p Fr(:)51 b(the)36 b(n)n(um)n(b)r(er)f(of)h(times)g(the)g(garbage)d (collector)h(w)n(as)h(running)g(while)498 2426 y(ev)-5 b(aluating)415 2603 y(The)28 b(\015at)f(pro\014le)g(giv)n(es)g(o)n(v)n (erall)e(statistics)i(for)g(eac)n(h)g(pro)r(cedure)g(in)h(the)g (program:)p Black 415 2781 a Fn(\017)p Black 41 w Fo(time)p Fr(:)56 b(p)r(ercen)n(tage)37 b(of)g(time)i(the)f(pro)r(cedure)f(has)g (in)h(the)h(program)d(\(based)h(on)498 2880 y(\\)p Fo(self)p Fr("\))p Black 415 3062 a Fn(\017)p Black 41 w Fo(cumu)p Fr(:)e(total)28 b(cum)n(ulativ)n(e)f(time)h(the)g(pro)r(cedure)e(w)n (as)h(running)p Black 415 3243 a Fn(\017)p Black 41 w Fo(self)p Fr(:)35 b(total)28 b(time)g(the)g(pro)r(cedure)e(w)n(as)h (running)g(itself)h(\(without)h(c)n(hildren\))p Black 415 3425 a Fn(\017)p Black 41 w Fo(mem)p Fr(:)36 b(appro)n(ximated)26 b(memory)h(usage)f(of)i(the)g(pro)r(cedure)p Black 415 3606 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)58 b(the)39 b(n)n(um)n(b)r(er)g(of)f(non-recursiv)n(e)f(calls)h(to)h(the)g(pro)r (cedure.)70 b(Recursiv)n(e)498 3706 y(calls)35 b(are)f(displa)n(y)n(ed) g(after)h(an)g(optionally)f(app)r(ended)i("+")e(to)h(former)f(n)n(um)n (b)r(er)498 3806 y(\(see)28 b(pro)r(cedure)e Fo(c)h Fr(in)h(example)g (output)g(ab)r(o)n(v)n(e\).)p Black 415 3987 a Fn(\017)p Black 41 w Fo(ms/call)p Fr(:)56 b(estimate)39 b(of)f(the)h(time)g(p)r (er)f(call)h(\(with)g(c)n(hildren\),)i(based)d(on)g(non-)498 4087 y(recursiv)n(e)26 b(calls)h(and)g(\\)p Fo(cumu)p Fr(".)p Black 415 4268 a Fn(\017)p Black 41 w Fo(name)p Fr(:)35 b(the)28 b(name)g(of)f(the)h(pro)r(cedure)f(and)g(the)h(\014le) g(it)g(is)g(de\014ned)g(in)415 4446 y(The)34 b(tree)f(result)g(displa)n (ys)f(pro\014ling)h(information)g(dep)r(ending)g(on)h(the)f(caller)g (of)g(a)291 4546 y(particular)27 b(pro)r(cedure.)38 b(As)29 b(in)f(gprof)g(output,)h(for)f(eac)n(h)g(pro)r(cedure)f(there)i(is)f (an)g Fq(entry)p Fr(.)291 4645 y(En)n(tries)d(are)h(separated)f(b)n(y)i (lines)f(of)33 b Fo(=)p Fr(s.)j(Eac)n(h)26 b(en)n(try)g(displa)n(ys)f (the)i(callers)f(\(inden)n(ted\),)291 4745 y(the)32 b(pro)r(cedure)g (itself)g(and)g(the)h(pro)r(cedure)e(called)h(\(inden)n(ted\).)52 b(The)33 b(meaning)e(of)i(the)291 4844 y(\014elds)27 b(dep)r(ends)h(on)g(the)g(t)n(yp)r(e)f(of)h(the)g(en)n(try)-7 b(,)27 b(for)g(example:)p Black 291 4929 1146 4 v 383 4983 a Fg(1)p 0 TeXcolorgray Black 418 5006 a Ff(part)d(of)f(the)h(GNU) g(Binary)f(Utilities:)31 b(h)n(ttp://www.gn)n(u.org/soft)n(w)n(are/bin) n(utils/)p Black Black 1681 5255 a Fr(13)p Black eop end %%Page: 14 22 TeXDict begin 14 21 bop 0 TeXcolorgray Black Black Black Black Black 782 523 a Fo(i)174 b(time)42 b(self)86 b(child)f(mem)173 b(calls)129 b(name)1262 623 y(324)173 b(891)86 b(10k)173 b(1/442)260 b(main)41 b([1])782 722 y(1)87 b(100.0\045)e(324)173 b(891)86 b(10k)260 b(442)130 b(a)43 b()i([2])1262 822 y(891)260 b(0)131 b(1k)173 b(22/37)260 b(c)43 b([4])863 1014 y Fr(Ev)n(ery)c(pro)r(cedure)f(has)i(a)f(unique)h(index)g(n)n(um)n (b)r(er)f Fo(i)h Fr(\(here)f(\\1"\),)j(based)d(on)h(the)739 1114 y(p)r(osition)34 b(in)g(the)g(call-graph.)54 b(It)35 b(is)f(used)g(to)f(quic)n(kly)h(\014nd)g(the)h(corresp)r(onding)d(en)n (try)-7 b(.)739 1213 y(The)27 b(n)n(um)n(b)r(er)f(is)h(app)r(ended)g (to)g(the)g(pro)r(cedure)f(name)h(\(in)g(brac)n(k)n(ets\).)35 b(The)27 b(meaning)f(of)739 1313 y(the)i(\\cycle")e(su\016x)i(is)f (explained)g(b)r(elo)n(w.)863 1415 y(Callers)g(\(here)g Fo(main)p Fr(\):)p Black 863 1588 a Fn(\017)p Black 41 w Fo(self)p Fr(:)36 b(time)28 b(sp)r(en)n(t)g(directly)f(in)h Fo(a)f Fr(when)h(called)f(b)n(y)i Fo(main)p Black 863 1763 a Fn(\017)p Black 41 w Fo(child)p Fr(:)35 b(time)28 b(sp)r(en)n(t)g(in)g(c)n(hildren)f(of)34 b Fo(a)28 b Fr(when)f(called)h(b)n(y)g Fo(main)p Black 863 1939 a Fn(\017)p Black 41 w Fo(mem)p Fr(:)36 b(memory)27 b(usage)f(of)34 b Fo(a)28 b Fr(when)f(called)h(b)n(y)g Fo(main)p Black 863 2114 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)34 b(t)n(w)n(o)25 b(n)n(um)n(b)r(ers:)35 b(n)n(um)n(b)r(er)25 b(of)g(calls)g(to)g Fo(a)g Fr(from)g Fo(main)f Fr(and)h(total)g(n)n(um)n(b)r(er)g(of)946 2214 y(non-recursiv)n(e)h(calls)h(to)g Fo(a)863 2387 y Fr(Primary)f(line)i(\(here)f Fo(a)p Fr(\):)p Black 863 2560 a Fn(\017)p Black 41 w Fo(time)p Fr(:)36 b(total)27 b(p)r(ercen)n(tage)f(of)i(time)g Fo(a)f Fr(w)n(as)g(running)p Black 863 2735 a Fn(\017)p Black 41 w Fo(self)p Fr(:)36 b(total)27 b(time)h(sp)r(en)n(t)g(directly)f(in)h Fo(a)p Black 863 2910 a Fn(\017)p Black 41 w Fo(child)p Fr(:)35 b(total)28 b(time)g(sp)r(en)n(t)g(in)f(c)n(hildren)h(of)34 b Fo(a)p Black 863 3086 a Fn(\017)p Black 41 w Fo(mem)p Fr(:)i(total)28 b(memory)e(usage)h(of)34 b Fo(a)p Black 863 3261 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)45 b(the)34 b(total)e(n)n(um)n(b)r(er)g(of)h(non-recursiv)n(e)d(calls)i(to)h Fo(a)p Fr(.)52 b(Recursiv)n(e)31 b(calls)h(are)946 3361 y(displa)n(y)n(ed)27 b(after)g(an)h(optional)e Fo(+)p Fr(.)863 3534 y(Called)i(\(here)f Fo(c)p Fr(\):)p Black 863 3707 a Fn(\017)p Black 41 w Fo(self)p Fr(:)36 b(time)28 b(sp)r(en)n(t)g(directly)f(in)h Fo(c)f Fr(when)h(called)f(b)n(y)i Fo(a)p Black 863 3882 a Fn(\017)p Black 41 w Fo(child)p Fr(:)35 b(time)28 b(sp)r(en)n(t)g(in)g(c)n(hildren)f(of)34 b Fo(c)28 b Fr(when)f(called)h(b)n(y)g Fo(a)p Black 863 4058 a Fn(\017)p Black 41 w Fo(mem)p Fr(:)36 b(memory)27 b(usage)f(of)34 b Fo(c)28 b Fr(when)f(called)h(b)n(y)g Fo(a)p Black 863 4233 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)49 b(t)n(w)n(o)34 b(n)n(um)n(b)r(ers:)50 b(n)n(um)n(b)r(er)34 b(of)h(calls)f(to)g Fo(c)g Fr(from)g Fo(a)g Fr(and)h(total)f(n)n(um)n (b)r(er)g(of)946 4333 y(non-recursiv)n(e)26 b(calls)h(to)g Fo(c)863 4506 y Fr(A)34 b(sp)r(ecial)f(treatmen)n(t)h(is)f(needed)h (for)f(m)n(utual-recursiv)n(e)e(pro)r(cedures.)53 b(In)34 b(the)g(ex-)739 4605 y(ample,)f Fo(a)g Fr(calls)e Fo(b)h Fr(and)h Fo(b)f Fr(calls)f Fo(a)p Fr(.)52 b(This)32 b(is)g(called)g(a)g Fq(cycle)p Fr(.)53 b(If)39 b Fo(a)32 b Fr(w)n(ould)g(call)g(another)739 4705 y(pro)r(cedure)26 b Fo(d)i Fr(and)f Fo(d)g Fr(w)n(ould)h(call)f Fo(a)p Fr(,)g(all)g(three)h(pro)r(cedures)e(form)h(a)h(cycle.)863 4807 y(Cycles)34 b(ha)n(v)n(e)e(a)h(separate)f(en)n(try)i(in)f(the)i (call)e(graph.)54 b(This)33 b(en)n(try)g(consists)g(of)h(the)739 4907 y(callers)29 b(in)n(to)i(the)g(cycle,)g(the)g(primary)f(line)g(of) h(the)g(cycle,)g(the)g(mem)n(b)r(er)g(pro)r(cedures)e(of)739 5006 y(the)f(cycle)f(and)h(the)g(external)e(pro)r(cedures)h(called)g(b) n(y)g(the)h(cycle:)p Black 2130 5255 a(14)p Black eop end %%Page: 15 23 TeXDict begin 15 22 bop 0 TeXcolorgray Black Black Black Black Black 814 523 a Fo(932)129 b(1498)86 b(20k)260 b(1/1)g(main)42 b([1])334 623 y(0)87 b(100.0\045)e(932)129 b(1498)86 b(20k)173 b(1+877)128 b()814 722 y(324)173 b(891)86 b(10k)260 b(441)g(a)43 b()i([2])814 822 y(608)173 b(608)86 b(10k)260 b(436)g(b)43 b()i([3])901 922 y(0)261 b(0)130 b(2k)174 b(37/37)259 b(c)43 b([4])415 1107 y Fr(Callers)27 b(\(here)g Fo(main)p Fr(\):)p Black 415 1276 a Fn(\017)p Black 41 w Fr(the)g(meaning)g(of)g(the)g(\014elds) g(are)f(the)h(same)g(as)f(ab)r(o)n(v)n(e.)35 b(The)27 b(mem)n(b)r(er)g(pro)r(cedures)498 1376 y(of)h(the)g(cycle)f(are)g (seen)g(as)g(a)g(whole.)415 1544 y(Primary)f(line:)p Black 415 1713 a Fn(\017)p Black 41 w Fo(time)p Fr(:)35 b(total)28 b(p)r(ercen)n(tage)e(of)i(time)g(an)n(y)f(pro)r(cedure)f(of) i(the)g(cycle)f(w)n(as)g(running)p Black 415 1882 a Fn(\017)p Black 41 w Fo(self)p Fr(:)35 b(total)28 b(time)g(sp)r(en)n(t)g (directly)f(in)h(a)f(pro)r(cedure)g(of)g(the)h(cycle)p Black 415 2051 a Fn(\017)p Black 41 w Fo(child)p Fr(:)35 b(total)27 b(time)h(sp)r(en)n(t)g(in)g(external)f(c)n(hildren)g(of)34 b Fo(a)p Black 415 2220 a Fn(\017)p Black 41 w Fo(mem)p Fr(:)i(sum)28 b(of)f(memory)g(usage)f(of)i(all)f(cycle)g(mem)n(b)r(er)h (pro)r(cedures)p Black 415 2390 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)61 b(the)41 b(total)g(n)n(um)n(b)r(er)f(of)h (external)e(calls)h(to)h(the)g Fo(cycle)e Fr(and)h(the)h(total)498 2489 y(n)n(um)n(b)r(er)27 b(of)h(calls)f(in)h(the)g(cycle)f(in)n (ternally)415 2658 y(Mem)n(b)r(er)h(pro)r(cedures:)p Black 415 2826 a Fn(\017)p Black 41 w Fr(the)g(meaning)f(of)h(the)g (\014elds)f(are)g(the)h(same)f(as)g(ab)r(o)n(v)n(e,)f(except.)14 b(.)g(.)p Black 415 2996 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)32 b(the)22 b(n)n(um)n(b)r(er)f(of)h(calls)f(to)g(the)h(mem)n(b)r (er)f(pro)r(cedure)g(from)g(within)h(the)g(cycle)415 3164 y(External)27 b(pro)r(cedures)f(\(here)h Fo(c)p Fr(\):)p Black 415 3333 a Fn(\017)p Black 41 w Fr(the)34 b(meaning)g(of)g(the)g(\014elds)g(are)f(the)h(same)f(as)h(with)g(the)g (mem)n(b)r(er)g(pro)r(cedures,)498 3432 y(except.)14 b(.)g(.)p Black 415 3602 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)39 b(the)30 b(n)n(um)n(b)r(er)f(of)g(calls)g(to)h(the)g(external)e (pro)r(cedure)h(from)g(the)h(cycle)f(and)498 3701 y(the)f(total)f(n)n (um)n(b)r(er)h(of)f(non-recursiv)n(e)f(calls)h(to)g(the)h(external)f (pro)r(cedure)415 3870 y(In)33 b(the)f(curren)n(t)g(implemen)n(tation,) h(there)f(are)g(some)f(issues)h(that)g(need)h(to)f(b)r(e)h(con-)291 3969 y(sidered:)44 b(in)31 b(the)h(default)g(con\014guration,)f (samples)f(are)h(tak)n(en)g(ev)n(ery)f(50)g(milliseconds.)291 4069 y(Pro)r(cedures)i(with)i(a)g(b)n(y-call)f(run)h(time)g(shorter)f (than)h(the)g(in)n(terrupt)g(time)g(are)f(lik)n(ely)291 4169 y(to)k(b)r(e)h(pro\014led)e(inaccurately)g(or)h(ma)n(y)g(not)g(b)r (e)h(seen)f(at)g(all,)j(if)d(they)h(ha)n(v)n(e)e(not)h(b)r(een)291 4268 y(instrumen)n(ted.)415 4369 y(The)30 b(default)g(in)n(terrupt)f (time)h(can)g(b)r(e)g(set)f(with)h(the)g Fo(profiler-interrup)o(t-)o (tim)o(e)291 4468 y Fr(command)d(pro)r(cessor)e(setting,)j(see)p 0 0 1 TeXcolorrgb 27 w(3.7)p Black(.)36 b(F)-7 b(or)27 b(example,)p Black Black 291 4638 a Fo(,set)42 b(profiler-interr)o(up)o (t-t)o(im)o(e)c(200)291 4806 y Fr(sets)27 b(the)h(default)g(pro\014ler) e(sampling)h(in)n(terrupt)h(time)g(to)f(200ms.)415 4907 y(Because)e(the)i(in)n(terrupt)e(is)h(shared)f(with)i(the)f(thread)g (system,)g(pro\014ling)f(ma)n(y)h(cause)291 5006 y(p)r(erformance)33 b(issues)i(with)g(m)n(ulti-threaded)f(programs.)57 b(Also,)36 b(programs)c(with)k(deep)p Black 1681 5255 a(15)p Black eop end %%Page: 16 24 TeXDict begin 16 23 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(recursion)30 b(\(resulting)h(in)h(large)e(con)n(tin)n (uations\))g(can)i(cause)e(the)i(pro\014ler)e(to)i(use)f(a)g(sig-)739 623 y(ni\014can)n(t)c(p)r(ercen)n(tage)g(of)g(the)h(total)g(run)f (time.)863 722 y(By)34 b(default,)j(call)d(times)g(are)f(measured)h(b)n (y)g(the)g(sampling)g(pro)r(cess.)56 b(When)34 b(co)r(de)739 822 y(had)24 b(b)r(een)g(instrumen)n(ted,)h(call)e(times)h(of)g(those)g (pro)r(cedures)e(will)i(b)r(e)h(measured)e(exactly)-7 b(.)739 922 y(When)22 b(only)f(instrumen)n(ted)h(co)r(de)g(should)f(b)r (e)h(considered)f(in)h(the)g(output)g(of)f(the)h(pro\014ler,)739 1021 y(the)f(command)f(pro)r(cessor)f(setting)j Fo(profiler-measure)o (-n)o(oni)o(ns)o(tr)14 b Fr(can)21 b(b)r(e)g(set)g(to)f Fo(off)p Fr(.)863 1121 y(Sc)n(heme)26 b(48)f(optimizes)g(tail)h(calls.) 36 b(Th)n(us,)26 b(the)g(pro\014ler)e(cannot)h(\\see")g(tail)g(calls)g (and)739 1220 y(in)f(some)g(situations,)g(the)h(output)g(of)f(the)g (pro\014ler)f(ma)n(y)h(sho)n(w)f(that)i(pro)r(cedures)d(directly)739 1320 y(call)27 b(their)h(\\grandc)n(hildren".)739 1549 y Fe(3.6.1)112 b(Ho)m(w)37 b(the)h(pro\014ler)f(w)m(orks)739 1702 y Fr(The)c(pro\014ler)g(is)g(based)g(on)g(taking)g(samples)g(of)g (the)h(curren)n(t)e(stac)n(k)h(of)g(con)n(tin)n(uations,)739 1802 y(the)f Fq(c)l(al)t(l-stack)p Fr(.)49 b(Therefore)30 b(it)i(sc)n(hedules)f(the)h(alarm)e(in)n(terrupt)h(at)g(a)g(regular)f (in)n(terv)-5 b(al)739 1901 y(sp)r(eci\014ed)36 b(b)n(y)f(the)h Fo(profiler-interru)o(pt)o(-t)o(ime)29 b Fr(command)35 b(pro)r(cessor)e(setting.)61 b(Be-)739 2001 y(cause)27 b(the)h(thread)g(system)g(uses)f(the)i(alarm)d(in)n(terrupt)i(as)f(w)n (ell,)h(the)h(pro\014ler)e(in)n(terrupt)739 2101 y(handler)g(calls)g (the)h(handler)f(of)g(the)h(thread)g(system)f(after)g(pro)r(cessing)f (the)i(sample.)863 2200 y(The)37 b(pro\014ler)e(in)n(terrupt)h(handler) g(\014rst)h(captures)e(the)i(curren)n(t)f(con)n(tin)n(uation)f(and)739 2300 y(follo)n(ws)27 b(the)i(con)n(tin)n(uation-stac)n(k)e(do)n(wn)h (to)g(the)h(con)n(tin)n(uation)f(of)h(the)g Fo(profile-thunk)739 2399 y Fr(pro)r(cedure,)j(whic)n(h)h(called)f(the)g(th)n(unk)h(to)f(b)r (e)h(pro\014led.)50 b(Eac)n(h)32 b(con)n(tin)n(uation)f(with)i(the)739 2499 y(corresp)r(onding)26 b(co)r(de)h(template)h(is)f(stored)g(in)h(a) f(stac)n(k)g(of)34 b Fo(stackentry)23 b Fr(records.)863 2599 y(This)h Fo(*cur-stack*)c Fr(is)k(compared)f(from)h(b)r(ottom)g (to)g(top)g(with)h(the)f Fo(*last-stack*)p Fr(,)739 2698 y(the)30 b(stac)n(k)g(captured)f(while)i(the)f(prior)f(sampling)h(in)n (terrupt.)44 b(The)30 b(statistics)g(gathered)739 2798 y(are)c(stored)h(in)h Fo(profinfo)c Fr(records.)863 2898 y(F)-7 b(or)31 b(eac)n(h)g(stac)n(k-en)n(try)e(in)j(the)g Fo(*cur-stack*)p Fr(,)c(sev)n(eral)i(p)r(ossibilities)h(exist)g(in)h (con-)739 2997 y(junction)c(to)g(the)g(en)n(try)f(at)g(the)h(same)f (depth)h(in)g(the)g Fo(*last-stack*)p Fr(:)p Black 863 3147 a Fn(\017)p Black 41 w Fr(there)g(is)f(no)h(suc)n(h)f(en)n(try:)36 b(the)28 b(con)n(tin)n(uation)f(m)n(ust)h(b)r(e)g(the)g(result)f(of)g (a)h(new)f(call)p Black 863 3304 a Fn(\017)p Black 41 w Fr(b)r(oth)33 b(en)n(tries)e(are)g(the)h(same)g(con)n(tin)n(uation:) 44 b(nothing)32 b(c)n(hanged,)g(the)g(pro)r(cedure)946 3404 y(is)c(still)g(running)p Black 863 3562 a Fn(\017)p Black 41 w Fr(en)n(tries)22 b(are)f(not)h(the)h(same)e(con)n(tin)n (uation:)34 b(the)22 b(follo)n(wing)f(en)n(tries)h(up)g(in)h(the)f (stac)n(k)946 3661 y(m)n(ust)30 b(ha)n(v)n(e)e(c)n(hanged.)41 b(If)30 b(the)g(templates)f(of)h(the)f(curren)n(t)g(en)n(tries)g(are)f (the)i(same,)946 3761 y(the)38 b(con)n(tin)n(uation)f(coun)n(ts)g(as)f (the)i(still)g(same)f(call)g(to)g(the)h(pro)r(cedure)e(\(but)i(at)946 3861 y(another)f(expression)f(in)i(the)g(pro)r(cedure\).)67 b(A)38 b(suc)n(h)f(situation)h(only)f(coun)n(ts)g(as)946 3960 y(a)d(new)h(call)f(if)g(the)h(con)n(tin)n(uation)f(ob)5 b(ject)34 b(has)f(c)n(hanged,)j(but)e(the)h(con)n(tin)n(uation)946 4060 y(program-coun)n(ter,)25 b(argumen)n(ts)h(and)h(the)h(template)g (sta)n(y)n(ed)f(the)h(same.)739 4209 y(As)39 b(w)n(e)g(ascend)g(in)h (the)g(call-stac)n(k,)g(c)n(hanges)e(in)i(the)g(lo)n(w)n(er)e(lev)n (els)g(indicate)i(that)g(all)739 4309 y(en)n(tries)30 b(ab)r(o)n(v)n(e)g(ha)n(v)n(e)g(to)i(b)r(e)f(new)h(calls.)47 b(This)31 b(w)n(a)n(y)-7 b(,)31 b(the)h(pro\014ler)e(gathers)g (information)739 4408 y(ab)r(out)d(ho)n(w)g(often)h(a)f(template)h(is)g (called)f(b)n(y)g(another)g(template.)863 4508 y(Additionally)-7 b(,)26 b(ev)n(ery)d(time)j(a)e(pro)r(cedure)g(is)g(seen,)h(w)n(e)g (record)e(this)i(\\o)r(ccurrence".)34 b(If)739 4608 y(the)29 b(pro)r(cedure)e(is)h(a)g(the)g(top)h(of)f(the)h(stac)n(k,)e(it)i(is)f (curren)n(tly)f(running.)39 b(Based)27 b(on)h(these)739 4707 y(n)n(um)n(b)r(ers,)i(the)h(a)n(v)n(erage)d(in)n(terrupt)i(time)h (and)f(the)h(n)n(um)n(b)r(er)f(of)g(calls,)g(w)n(e)g(can)g(estimate)739 4807 y(the)e(self)g(and)f(c)n(hild)h(times.)863 4907 y(While)22 b(running,)g(the)g(pro\014ler)e(collects)h(information)f(ab) r(out)h(heap)g(memory)g(usage)f(as)739 5006 y(w)n(ell.)36 b(After)28 b(comparing)e(the)h(curren)n(t)f(with)i(the)g(last)e(stac)n (k,)h(the)g(pro\014ler)f(kno)n(ws)g(whic)n(h)p Black 2130 5255 a(16)p Black eop end %%Page: 17 25 TeXDict begin 17 24 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(pro)r(cedures)28 b(\014nished,)i(whic)n(h)f(pro)r(cedures) f(are)g(new)i(and)f(whic)n(h)g(pro)r(cedure)g(called)g(the)291 623 y(new)j(pro)r(cedures.)52 b(This)33 b(information)f(is)g(used)h(to) g(distribute)g(the)g(di\013erence)g(in)g(heap)291 722 y(memory)26 b(usage)h(b)r(et)n(w)n(een)g(the)h(prior)e(and)i(the)f (curren)n(t)g(sample.)37 b(The)27 b(pro\014ler)f(uses)i(the)291 822 y Fo(memory-status)i Fr(primitiv)n(e)35 b(for)g(retrieving)f(a)n(v) -5 b(ailable)34 b(heap)h(space)g(and)g(the)h(n)n(um)n(b)r(er)291 922 y(of)29 b(garbage)e(collector)i(runs)g(\()p Fo(gc-count)p Fr(\).)40 b(Di\013erence)30 b(in)g(used)f(memory)g(b)r(et)n(w)n(een)h (t)n(w)n(o)291 1021 y(samples)d(is)g(distributed)h(b)n(y)f(the)h(follo) n(wing)f(principles:)p Black 415 1202 a Fn(\017)p Black 41 w Fr(if)35 b Fo(gc-count)24 b Fr(increased,)j(distribution)g(cannot) g(b)r(e)h(done)p Black 415 1387 a Fn(\017)p Black 41 w Fr(if)33 b(the)h(same)e(con)n(tin)n(uation)g(is)g(still)i(at)e(top,)i (credit)f(its)g(template)g(with)g(all)g(used)498 1487 y(memory)27 b(b)r(et)n(w)n(een)g(the)h(t)n(w)n(o)f(samplings)p Black 415 1672 a Fn(\017)p Black 41 w Fr(if)d(there)f(are)f(stac)n(k)n (en)n(try-templates)f(gone)i(or)f(new,)i(distribute)g(the)f(used)h (memory)498 1772 y Fq(e)l(qual)t(ly)29 b Fr(b)r(et)n(w)n(een)e(them:)p Black 592 1957 a Fm({)p Black 41 w Fr(gone)f(templates)i(could)g(ha)n (v)n(e)e(used)i(some)f(memory)f(b)r(efore)i(\\returning")p Black 592 2099 a Fm({)p Black 41 w Fr(new)f(templates)h(could)g(ha)n(v) n(e)e(used)h(some)g(memory)g(while)h(running)p Black 592 2242 a Fm({)p Black 41 w Fr(the)k(caller)f(of)g(new)h(templates)g (could)g(ha)n(v)n(e)e(used)i(some)f(memory)g(b)r(et)n(w)n(een)681 2341 y(the)d(calling)f(of)g(gone)g(and)g(new)h(pro)r(cedures)415 2527 y(The)42 b(b)n(yte-co)r(de)g(optimizer)g Fo(profiler-instrum)o (ent)o(at)o(ion)36 b Fr(adds)41 b(a)h(call)g(to)h(the)291 2626 y(\\pro\014le-coun)n(t")32 b(pro)r(cedure)h(of)i(the)g(pro\014ler) e(structure.)57 b(This)35 b(pro)r(cedure)e(is)i(resp)r(on-)291 2726 y(sible)27 b(for)g(the)h(exact)f(call-times)g(measuremen)n(t.)415 2830 y(After)21 b(collection)e(of)h(the)h(data,)g(pro)r(cedures)e(are)g (n)n(um)n(b)r(ered)h(and)g(cycles)f(are)g(detected)291 2930 y(b)n(y)33 b(ascending)f(in)i(the)g(call)f(tree.)54 b(Time)34 b(is)f(b)r(eing)h(propagated)e(from)h(top)g(to)h(b)r(ottom,) 291 3030 y(remem)n(b)r(ering)23 b(self)i(and)f(c)n(hild)g(times.)36 b(Most)24 b(of)h(the)g(time,)g(cycles)f(are)f(b)r(eing)i(considered)291 3129 y(as)i(one)g(pro)r(cedure.)291 3429 y Fj(3.7)135 b(Settings)291 3620 y Fr(There)27 b(are)h(a)g(n)n(um)n(b)r(er)g(of)g (settings)g(that)h(con)n(trol)d(the)j(b)r(eha)n(vior)e(of)h(the)h (command)f(pro-)291 3720 y(cessor;)d(most)h(of)g(them)h(are)e(b)r(o)r (oleans.)36 b(They)26 b(can)g(b)r(e)h(set)f(using)g(the)g Fo(,set)f Fr(and)h Fo(,unset)291 3819 y Fr(commands.)p Black Black 332 4021 a Fo(,set)42 b Fq(setting)51 b Fo([on)42 b(|)h(off)f(|)i(literal)c(|)j(?])498 4121 y Fr(This)32 b(sets)h(the)f(v)-5 b(alue)33 b(of)f(setting)h Fq(setting)7 b Fr(.)52 b(F)-7 b(or)31 b(a)h(b)r(o)r(olean)g(setting,)i(the)f(second) 498 4221 y(argumen)n(t)26 b(m)n(ust)h(b)r(e)g Fo(on)f Fr(or)g Fo(off)p Fr(;)g(it)h(then)g(defaults)g(to)g Fo(on)p Fr(.)36 b(Otherwise,)26 b(the)h(v)-5 b(alue)498 4320 y(m)n(ust)30 b(b)r(e)h(a)e(literal,)h(t)n(ypically)g(a)f(p)r(ositiv)n (e)h(n)n(um)n(b)r(er.)44 b(If)30 b(the)h(second)e(argumen)n(t)g(is)498 4420 y Fo(?)36 b Fr(the)27 b(v)-5 b(alue)25 b(of)33 b Fq(setting)g Fr(is)26 b(is)g(displa)n(y)n(ed)f(and)h(not)g(c)n(hanged.) 35 b(Doing)26 b Fo(,set)42 b(?)36 b Fr(will)498 4519 y(displa)n(y)27 b(a)g(list)h(of)g(the)f(setting)h(and)g(their)f(curren) n(t)g(v)-5 b(alues.)p Black Black 332 4705 a Fo(,unset)41 b Fq(setting)498 4804 y Fo(,unset)g Fq(setting)35 b Fr(is)27 b(the)h(same)f(as)g Fo(,set)42 b Fq(setting)51 b Fo(off)p Fr(.)415 5006 y(The)28 b(settings)f(are)g(as)g(follo)n(ws:)p Black 1681 5255 a(17)p Black eop end %%Page: 18 26 TeXDict begin 18 25 bop 0 TeXcolorgray Black Black Black Black Black 780 523 a Fo(batch)26 b Fr(\(b)r(o)r(olean\))946 623 y(In)d(`batc)n(h)g(mo)r(de')f(an)n(y)g(error)f(or)h(in)n(terrupt)g (that)h(comes)f(up)h(will)g(cause)f(Sc)n(heme)g(48)946 722 y(to)28 b(exit)g(immediately)g(with)g(a)g(non-zero)e(exit)i (status.)37 b(Also,)28 b(the)g(command)f(pro-)946 822 y(cessor)f(do)r(esn't)i(prin)n(t)g(prompts.)36 b(Batc)n(h)27 b(mo)r(de)h(is)f(o\013)h(b)n(y)f(default.)p Black Black 780 999 a Fo(levels)f Fr(\(b)r(o)r(olean\))946 1099 y(Enables)h(or)g (disables)f(the)i(automatic)f(pushing)h(of)f(a)g(new)h(command)f(lev)n (el)g(when)946 1198 y(an)34 b(error,)g(in)n(terrupt,)h(or)e(other)h (breakp)r(oin)n(t)f(o)r(ccurs.)55 b(When)35 b(enabled)f(\(the)g(de-)946 1298 y(fault\),)h(breakp)r(oin)n(ts)d(push)h(a)g(new)f(command)h(lev)n (el,)h(and)e Fn(h)p Fr(eof)p Fn(i)i Fr(\(see)e(ab)r(o)n(v)n(e\))g(or) 946 1398 y Fo(,reset)24 b Fr(is)i(required)f(to)h(return)g(to)g(top)g (lev)n(el.)36 b(The)26 b(e\013ects)g(of)g(pushed)h(command)946 1497 y(lev)n(els)g(include:)p Black 1046 1674 a Fn(\017)p Black 41 w Fr(a)g(longer)g(prompt)p Black 1046 1813 a Fn(\017)p Black 41 w Fr(reten)n(tion)g(of)h(the)g(con)n(tin)n(uation)e (in)i(e\013ect)g(at)g(the)g(p)r(oin)n(t)g(of)f(error)p Black 1046 1951 a Fn(\017)p Black 41 w Fr(confusion)g(among)g(some)g (new)n(comers)946 2128 y(With)h Fo(levels)c Fr(disabled)i(one)g(m)n (ust)h(issue)f(a)g Fo(,push)f Fr(command)h(immediately)h(fol-)946 2228 y(lo)n(wing)36 b(an)g(error)f(in)i(order)e(to)i(retain)f(the)h (error)d(con)n(tin)n(uation)i(for)g(debugging)946 2327 y(purp)r(oses;)i(otherwise)c(the)h(con)n(tin)n(uation)e(is)i(lost)f(as) g(so)r(on)g(as)g(the)h(fo)r(cus)f(ob)5 b(ject)946 2427 y(c)n(hanges.)35 b(If)27 b(y)n(ou)d(don't)i(kno)n(w)f(an)n(ything)g(ab) r(out)h(the)g(a)n(v)-5 b(ailable)25 b(debugging)g(to)r(ols,)946 2527 y(then)k Fo(levels)c Fr(migh)n(t)i(as)g(w)n(ell)h(b)r(e)g (disabled.)p Black Black 780 2704 a Fo(break-on-warnings)21 b Fr(\(b)r(o)r(olean\))946 2803 y(En)n(ter)k(a)h(new)g(command)f(lev)n (el)h(when)g(a)f(w)n(arning)g(is)h(pro)r(duced,)g(just)g(as)f(when)i (an)946 2903 y(error)k(o)r(ccurs.)50 b(Normally)31 b(w)n(arnings)f (only)i(result)g(in)h(a)e(displa)n(y)n(ed)h(message)e(and)946 3003 y(the)e(program)e(do)r(es)h(not)h(stop)f(executing.)p Black Black 780 3180 a Fo(ask-before-loadin)o(g)22 b Fr(\(b)r(o)r(olean\))946 3279 y(If)33 b(on,)f(the)h(system)e(will)h (ask)f(b)r(efore)h(loading)f(mo)r(dules)h(that)g(are)f(argumen)n(ts)f (to)946 3379 y(the)e Fo(,open)e Fr(command.)37 b Fo(Ask-before-load)o (ing)21 b Fr(is)27 b(o\013)h(b)n(y)f(default.)p Black Black 946 3589 a Fo(>)44 b(,set)e(ask-before-load)o(ing)946 3689 y(will)g(ask)h(before)e(loading)g(modules)946 3789 y(>)j(,open)d(random)946 3888 y(Load)h(structure)e(random)h(\(y/n\)?)g (y)946 3988 y(>)p Black Black 780 4198 a(load-noisily)23 b Fr(\(b)r(o)r(olean\))946 4298 y(When)h(on,)g(the)g(system)f(will)h (prin)n(t)f(out)g(the)h(names)f(of)g(mo)r(dules)h(and)f(\014les)g(as)g (they)946 4397 y(are)k(loaded.)36 b Fo(Load-noisily)23 b Fr(is)k(o\013)h(b)n(y)f(default.)p Black Black 946 4608 a Fo(>)44 b(,set)e(load-noisily)946 4707 y(will)g(notify)f(when)h (loading)f(modules)g(and)h(files)946 4807 y(>)i(,open)d(random)946 4907 y([random)g(/usr/local/lib/sc)o(he)o(me)o(48/)o(bi)o(g/r)o(an)o (do)o(m.s)o(cm)o(])946 5006 y(>)p Black 2130 5255 a Fr(18)p Black eop end %%Page: 19 27 TeXDict begin 19 26 bop 0 TeXcolorgray Black Black Black Black Black 332 523 a Fo(inline-values)22 b Fr(\(b)r(o)r(olean\))498 623 y(This)d(con)n(trols)d(whether)j(or)e(not)i(the)g(compiler)e(is)i (allo)n(w)n(ed)e(to)h(substitute)h(v)-5 b(ariables')498 722 y(v)g(alues)21 b(in-line.)34 b(When)22 b Fo(inline-values)15 b Fr(mo)r(de)21 b(is)g(on,)h(some)e(Sc)n(heme)h(pro)r(cedures)498 822 y(will)29 b(b)r(e)f(substituted)i(in-line;)f(when)f(it)h(is)f (o\013,)h(none)f(will.)39 b(Section)p 0 0 1 TeXcolorrgb 28 w(2.4)p Black 28 w(has)28 b(more)498 922 y(information.)p Black Black 332 1088 a Fo(inspector-menu-l)o(imi)o(t)21 b Fr(\(p)r(ositiv)n(e)28 b(in)n(teger\))498 1188 y(This)23 b(con)n(trols)e(ho)n(w)g(man)n(y)h(items)h(the)g(displa)n(y)n(ed)e(p)r (ortion)h(of)h(the)g(insp)r(ector)f(men)n(u)498 1288 y(con)n(tains)27 b(at)g(most.)37 b(\(See)28 b(Section)p 0 0 1 TeXcolorrgb 27 w(3.8)p Black(.\))p Black Black 332 1455 a Fo(inspector-writin)o(g-d)o(ep)o(th)21 b Fr(\(p)r(ositiv)n (e)28 b(in)n(teger\))498 1554 y(This)35 b(con)n(trols)d(the)j(maxim)n (um)g(depth)g(to)f(whic)n(h)g(the)h(insp)r(ector)f(prin)n(ts)g(v)-5 b(alues.)498 1654 y(\(See)28 b(Section)p 0 0 1 TeXcolorrgb 28 w(3.8)p Black(.\))p Black Black 332 1821 a Fo(inspector-writin)o (g-l)o(en)o(gth)21 b Fr(\(p)r(ositiv)n(e)27 b(in)n(teger\))498 1920 y(This)33 b(con)n(trols)e(the)i(maxim)n(um)f(length)h(to)f(whic)n (h)h(the)g(insp)r(ector)f(prin)n(ts)g(v)-5 b(alues.)498 2020 y(\(See)28 b(Section)p 0 0 1 TeXcolorrgb 28 w(3.8)p Black(.\))p Black Black 332 2187 a Fo(condition-writin)o(g-d)o(ep)o(th) 21 b Fr(\(p)r(ositiv)n(e)28 b(in)n(teger\))498 2287 y(This)g(con)n (trols)e(the)i(maxim)n(um)f(depth)h(to)g(whic)n(h)f(conditions)h(are)e (prin)n(ted.)p Black Black 332 2453 a Fo(condition-writin)o(g-l)o(en)o (gth)21 b Fr(\(p)r(ositiv)n(e)27 b(in)n(teger\))498 2553 y(This)h(con)n(trols)e(the)i(maxim)n(um)f(length)h(to)f(whic)n(h)h (conditions)f(are)g(prin)n(ted.)p Black Black 332 2720 a Fo(profiler-interru)o(pt-)o(ti)o(me)21 b Fr(\(p)r(ositiv)n(e)28 b(in)n(teger\))498 2820 y(This)33 b(con)n(trols)e(the)i(time)g(b)r(et)n (w)n(een)f(t)n(w)n(o)g(pro\014ler)g(sampling)g(in)n(terrupts)g(\(in)h (mil-)498 2919 y(liseconds,)27 b(see)g(section)p 0 0 1 TeXcolorrgb 27 w(3.6)p Black(\).)p Black Black 332 3086 a Fo(profiler-measure)o(-no)o(ni)o(nst)o(r)21 b Fr(\(b)r(o)r(olean\)) 498 3186 y(When)36 b(this)g(\015ag)f(is)g(enabled,)j(call-times)d(will) h(b)r(e)g(measured)e(b)n(y)i(the)g(sampling)498 3285 y(pro)r(cess.)48 b(When)32 b(it)g(is)f(disabled,)h(call-times)f(will)h (only)f(b)r(e)h(measured)f(when)h(the)498 3385 y(pro)r(cedure)27 b(has)g(b)r(een)h(instrumen)n(ted)g(\(see)f(section)p 0 0 1 TeXcolorrgb 27 w(3.6)p Black(\).)p Black Black 332 3552 a Fo(trace-writing-le)o(ngt)o(h)21 b Fr(\(p)r(ositiv)n(e)28 b(in)n(teger\))498 3651 y(This)22 b(con)n(trols)f(the)i(maxim)n(um)f (length)g(to)g(whic)n(h)g(tracing)f(prin)n(ts)h(pro)r(cedure)f(calls.) 291 3927 y Fj(3.8)135 b(Insp)t(ection)45 b(mo)t(de)291 4109 y Fr(There)33 b(is)h(a)g(data)f(insp)r(ector)h(a)n(v)-5 b(ailable)32 b(via)i(the)g Fo(,inspect)d Fr(and)j Fo(,debug)d Fr(commands.)291 4209 y(The)22 b(insp)r(ector)g(is)g(particularly)f (useful)h(with)h(pro)r(cedures,)f(con)n(tin)n(uations,)g(and)h (records.)291 4309 y(The)33 b(command)h(pro)r(cessor)e(can)h(b)r(e)h (tak)n(en)f(out)h(of)g(insp)r(ection)g(mo)r(de)g(b)n(y)g(using)f(the)h Fo(q)291 4408 y Fr(command.)50 b(When)33 b(in)g(insp)r(ection)f(mo)r (de,)i(input)f(that)g(b)r(egins)f(with)h(a)f(letter)g(or)g(digit)291 4508 y(is)f(read)f(as)g(a)h(command,)g(not)g(as)g(an)g(expression.)45 b(T)-7 b(o)31 b(see)g(the)g(v)-5 b(alue)31 b(of)g(a)g(v)-5 b(ariable)30 b(or)291 4608 y(n)n(um)n(b)r(er,)d(do)g Fo(\(begin)41 b Fq(exp)5 b Fo(\))28 b Fr(or)f(use)g(the)h Fo(,run)42 b Fq(exp)33 b Fr(command.)415 4707 y(In)c(insp)r(ection)g (mo)r(de)g(the)g(command)g(pro)r(cessor)d(prin)n(ts)j(out)f(a)h(men)n (u)g(of)f(selectable)291 4807 y(comp)r(onen)n(ts)33 b(for)g(the)h (curren)n(t)f(fo)r(cus)h(ob)5 b(ject.)55 b(T)-7 b(o)33 b(insp)r(ect)h(a)g(particular)e(comp)r(onen)n(t,)291 4907 y(just)24 b(t)n(yp)r(e)g(the)g(corresp)r(onding)e(n)n(um)n(b)r(er) i(in)g(the)g(men)n(u.)36 b(That)23 b(comp)r(onen)n(t)h(b)r(ecomes)g (the)291 5006 y(new)j(fo)r(cus)h(ob)5 b(ject.)37 b(F)-7 b(or)26 b(example:)p Black 1681 5255 a(19)p Black eop end %%Page: 20 28 TeXDict begin 20 27 bop 0 TeXcolorgray Black Black Black Black Black 739 523 a Fo(>)43 b(,inspect)d('\(a)j(\(b)f(c\))h(d\))739 623 y(\(a)g(\(b)f(c\))h(d\))739 822 y([0])f(a)739 922 y([1])g(\(b)h(c\))739 1021 y([2])f(d)739 1121 y(:)h(1)739 1220 y(\(b)g(c\))739 1420 y([0])f(b)739 1519 y([1])g(c)739 1619 y(:)863 1788 y Fr(When)25 b(a)e(new)h(fo)r(cus)g(ob)5 b(ject)23 b(is)h(selected)f(the)h(previous)f(one)g(is)h(pushed)g(on)n (to)f(a)g(stac)n(k.)739 1887 y(Y)-7 b(ou)29 b(can)g(p)r(op)g(the)h (stac)n(k,)f(rev)n(erting)e(to)i(the)h(previous)e(ob)5 b(ject,)29 b(with)h(the)g Fo(u)f Fr(command,)739 1987 y(or)e(use)g(the)h Fo(stack)e Fr(command)h(to)g(mo)n(v)n(e)g(to)g(an)h (earlier)e(ob)5 b(ject.)863 2087 y(Commands)27 b(useful)h(when)g(in)g (insp)r(ection)g(mo)r(de:)p Black 863 2256 a Fn(\017)p Black 41 w Fo(u)g Fr(\(up\))g(p)r(op)g(ob)5 b(ject)27 b(stac)n(k)p Black 863 2425 a Fn(\017)p Black 41 w Fo(m)h Fr(\(more\))f(prin)n(t)h(more)e(of)i(a)f(long)g(men)n(u)p Black 863 2595 a Fn(\017)p Black 41 w Fo(\(...\))35 b Fr(ev)-5 b(aluate)27 b(a)h(form)f(and)g(select)h(result)p Black 863 2764 a Fn(\017)p Black 41 w Fo(q)g Fr(quit)p Black 863 2934 a Fn(\017)p Black 41 w Fo(template)h Fr(select)j(a)f (closure)g(or)g(con)n(tin)n(uation's)g(template)h(\(T)-7 b(emplates)32 b(are)f(the)946 3033 y(static)25 b(comp)r(onen)n(ts)f(of) g(pro)r(cedures;)h(these)f(are)g(found)h(inside)g(of)f(pro)r(cedures)f (and)946 3133 y(con)n(tin)n(uations,)37 b(and)f(con)n(tain)f(the)h (quoted)f(constan)n(ts)g(and)h(top-lev)n(el)f(v)-5 b(ariables)946 3233 y(referred)27 b(to)g(b)n(y)h(b)n(yte-compiled)f(co)r(de.\))p Black 863 3402 a Fn(\017)p Black 41 w Fo(d)e Fr(\(do)n(wn\))f(mo)n(v)n (e)g(to)h(the)g(next)f(con)n(tin)n(uation)g(\(curren)n(t)g(ob)5 b(ject)25 b(m)n(ust)f(b)r(e)i(a)e(con)n(tin-)946 3502 y(uation\))p Black 863 3671 a Fn(\017)p Black 41 w Fo(menu)i Fr(prin)n(t)i(the)g(selection)f(men)n(u)h(for)f(the)h(fo)r(cus)f(ob)5 b(ject)863 3840 y(Multiple)39 b(selection)e(commands)g(\()p Fo(u)p Fr(,)j Fo(d)p Fr(,)f(and)f(men)n(u)f(indexes\))h(ma)n(y)e(b)r(e) i(put)g(on)g(a)739 3939 y(single)27 b(line.)863 4040 y(All)21 b(ordinary)d(commands)h(are)g(a)n(v)-5 b(ailable)18 b(when)i(in)g(insp)r(ection)g(mo)r(de.)35 b(Similarly)-7 b(,)21 b(the)739 4139 y(insp)r(ection)28 b(commands)f(can)g(b)r(e)h (used)f(when)h(not)g(in)g(insp)r(ection)f(mo)r(de.)37 b(F)-7 b(or)27 b(example:)p Black Black 739 4309 a Fo(>)43 b(\(list)f('a)g('\(b)h(c\))f('d\))739 4408 y('\(a)g(\(b)h(c\))g(d\))739 4508 y(>)g(,1)739 4608 y('\(b)f(c\))739 4707 y(>)h(,menu)739 4807 y([0])f(b)739 4907 y([1])g(c)739 5006 y(>)p Black 2130 5255 a Fr(20)p Black eop end %%Page: 21 29 TeXDict begin 21 28 bop 0 TeXcolorgray Black Black Black 415 523 a Fr(If)34 b(the)f(curren)n(t)f(command)h(lev)n(el)f(w)n(as)g (initiated)i(b)r(ecause)f(of)g(a)f(breakp)r(oin)n(t)g(in)i(the)291 623 y(next)d(lev)n(el)f(do)n(wn,)i(then)f Fo(,debug)e Fr(will)i(in)n(v)n(ok)n(e)f(the)h(insp)r(ector)g(on)f(the)i(con)n(tin)n (uation)e(at)291 722 y(the)h(p)r(oin)n(t)g(of)g(the)h(error.)45 b(The)31 b Fo(u)g Fr(and)g Fo(d)g Fr(\(up)g(and)g(do)n(wn\))g(commands) g(then)g(mak)n(e)g(the)291 822 y(insp)r(ected-v)-5 b(alue)19 b(stac)n(k)f(lo)r(ok)g(lik)n(e)g(a)h(con)n(v)n(en)n(tional)e(stac)n(k)h (debugger,)i(with)f(con)n(tin)n(uations)291 922 y(pla)n(ying)f(the)h (role)f(of)h(stac)n(k)f(frames.)34 b Fo(D)19 b Fr(go)r(es)f(to)h(older) f(or)g(deep)r(er)h(con)n(tin)n(uations)f(\(frames\),)291 1021 y(and)27 b Fo(u)g Fr(go)r(es)g(bac)n(k)g(up)h(to)f(more)g(recen)n (t)g(ones.)291 1295 y Fj(3.9)135 b(Command)45 b(programs)291 1477 y Fr(The)31 b Fo(exec)e Fr(pac)n(k)-5 b(age)30 b(con)n(tains)g (pro)r(cedures)g(that)h(are)f(used)h(to)g(execute)g(the)g(command)291 1576 y(pro)r(cessor's)16 b(commands.)34 b(A)19 b(command)f Fo(,)p Fq(fo)l(o)25 b Fr(is)19 b(executed)g(b)n(y)g(applying)f(the)i(v) -5 b(alue)19 b(of)g(the)291 1676 y(iden)n(ti\014er)k Fq(fo)l(o)31 b Fr(in)24 b(the)g Fo(exec)e Fr(pac)n(k)-5 b(age)23 b(to)g(the)i(\(suitably)f(parsed\))f(command)g(argumen)n(ts.)p Black Black 332 1853 a Fo(,exec)42 b([)p Fq(c)l(ommand)9 b Fo(])498 1952 y Fr(Ev)-5 b(aluate)27 b Fq(c)l(ommand)37 b Fr(in)28 b(the)g Fo(exec)e Fr(pac)n(k)-5 b(age.)35 b(F)-7 b(or)27 b(example,)g(use)p Black Black 498 2146 a Fo(,exec)42 b(,load)f Fq(\014lename)498 2340 y Fr(to)35 b(load)f(a)h(\014le)g(con)n(taining)f(commands.)59 b(If)36 b(no)e Fq(c)l(ommand)45 b Fr(is)35 b(giv)n(en,)h(the)f Fo(exec)498 2439 y Fr(pac)n(k)-5 b(age)26 b(b)r(ecomes)h(the)h (execution)g(pac)n(k)-5 b(age)26 b(for)h(future)h(commands.)415 2616 y(The)g(required)e(argumen)n(t)h(t)n(yp)r(es)g(are)g(as)g(follo)n (ws:)p Black 415 2778 a Fn(\017)p Black 41 w Fr(\014lenames)g(should)h (b)r(e)g(strings)p Black 415 2942 a Fn(\017)p Black 41 w Fr(other)f(names)g(and)h(iden)n(ti\014ers)f(should)g(b)r(e)h(sym)n(b) r(ols)p Black 415 3105 a Fn(\017)p Black 41 w Fr(expressions)e(should)h (b)r(e)h(s-expressions)p Black 415 3269 a Fn(\017)p Black 41 w Fr(commands)j(\(as)h(for)f Fo(,config)e Fr(and)j Fo(,exec)e Fr(itself)6 b(\))33 b(should)e(b)r(e)h(lists)g(of)g(the)g (form)498 3369 y Fo(\()p Fq(c)l(ommand-name)50 b(ar)l(gument)h Fo(...\))35 b Fr(where)27 b Fq(c)l(ommand-name)35 b Fr(is)27 b(a)g(sym)n(b)r(ol.)415 3530 y(F)-7 b(or)27 b(example,)g(the)h(follo)n (wing)f(t)n(w)n(o)g(commands)g(are)f(equiv)-5 b(alen)n(t:)p Black Black 291 3692 a Fo(,config)40 b(,load)i(my-file.scm)291 3891 y(,exec)f(\(config)g('\(load)g("my-file.scm"\)\))415 4053 y Fr(The)26 b(\014le)g Fo(scheme/vm/load-vm)o(.s)o(cm)19 b Fr(in)27 b(the)f(source)f(directory)f(con)n(tains)h(an)h(exam-)291 4152 y(ple)h(of)h(an)f Fo(exec)f Fr(program.)291 4426 y Fj(3.10)135 b(Building)45 b(images)p Black Black 332 4608 a Fo(,dump)d Fq(\014lename)50 b Fo([)p Fq(identi\014c)l(ation)6 b Fo(])498 4707 y Fr(W)-7 b(rites)36 b(the)f(curren)n(t)g(heap)g(out)g (to)h(a)f(\014le,)i(whic)n(h)f(can)f(then)g(b)r(e)h(run)f(using)h(the) 498 4807 y(virtual)29 b(mac)n(hine.)41 b(The)30 b(new)f(image)f(\014le) i(includes)f(the)h(command)f(pro)r(cessor.)39 b(If)498 4907 y(presen)n(t,)g Fq(identi\014c)l(ation)45 b Fr(should)37 b(b)r(e)h(a)f(string)f(\(written)i(with)g(double)f(quotes\);)498 5006 y(this)28 b(string)f(will)h(b)r(e)g(part)f(of)g(the)h(greeting)f (message)f(as)h(the)h(image)f(starts)g(up.)p Black 1681 5255 a(21)p Black eop end %%Page: 22 30 TeXDict begin 22 29 bop 0 TeXcolorgray Black Black Black Black Black 780 523 a Fo(,build)42 b Fq(exp)48 b(\014lename)j Fo([)p Fq(option)30 b(.)13 b(.)g(.)g Fo(])946 623 y Fr(Lik)n(e)34 b Fo(,dump)p Fr(,)g(except)g(that)g(the)h(image)e(\014le)h(con)n(tains) f(the)i(v)-5 b(alue)34 b(of)40 b Fq(exp)5 b Fr(,)36 b(whic)n(h)946 722 y(should)21 b(b)r(e)g(a)f(pro)r(cedure)f(of)i(one)f(argumen)n(t,)h (instead)f(of)g(the)h(command)f(pro)r(cessor.)946 822 y(When)33 b Fq(\014lename)40 b Fr(is)32 b(resumed,)h(that)g(pro)r (cedure)e(will)i(b)r(e)g(in)n(v)n(ok)n(ed)e(on)h(the)h(VM's)946 922 y Fo(-a)e Fr(argumen)n(ts,)g(whic)n(h)g(are)f(passed)h(as)f(a)h (list)h(of)f(OS)g(strings)f(\(see)i(section)p 0 0 1 TeXcolorrgb 30 w(5.15)p Black(.)946 1021 y(The)25 b(pro)r(cedure)e(should)h(return) f(an)h(in)n(teger,)g(whic)n(h)g(is)g(returned)g(to)g(the)g(program)946 1121 y(that)j(in)n(v)n(ok)n(ed)e(the)h(VM.)h(The)f(command)g(pro)r (cessor)e(and)i(debugging)f(system)h(are)946 1220 y(not)h(included)h (in)f(the)g(image)f(\(unless)h(y)n(ou)f(go)g(to)h(some)f(e\013ort)h(to) g(preserv)n(e)e(them,)946 1320 y(suc)n(h)j(as)f(retaining)f(a)i(con)n (tin)n(uation\).)946 1450 y(If)46 b Fo(no-warnings)33 b Fr(app)r(ears)38 b(as)f(an)h Fq(option)46 b Fr(after)38 b(the)h(\014le)f(name,)j(no)d(w)n(arnings)946 1549 y(ab)r(out)30 b(unde\014ned)h(external)e(bindings)h(\(see)g(Section)p 0 0 1 TeXcolorrgb 30 w(8.2)p Black(\))f(will)i(b)r(e)f(prin)n(ted)g(up) r(on)946 1649 y(resuming)e(the)h(image.)38 b(This)28 b(is)g(useful)h(when)f(the)h(de\014nitions)f(of)h(external)e(bind-)946 1749 y(ings)d(app)r(ear)g(in)h(shared)e(ob)5 b(jects)24 b(that)h(are)e(only)h(loaded)g(after)g(the)h(resumption)f(of)946 1848 y(the)k(image.)946 1978 y(Doing)39 b Fo(,flush)e Fr(b)r(efore)i(building)g(an)g(image)f(will)i(reduce)e(the)i(amoun)n(t) e(of)h(de-)946 2078 y(bugging)c(information)g(in)h(the)g(image,)h (making)e(for)h(a)f(smaller)g(image)g(\014le,)j(but)946 2177 y(if)33 b(an)e(error)f(o)r(ccurs,)i(the)g(error)e(message)g(ma)n (y)h(b)r(e)h(less)f(helpful.)50 b(Doing)32 b Fo(,flush)946 2277 y(source)42 b(maps)25 b Fr(b)r(efore)h(loading)g(an)n(y)f (programs)g(used)h(in)h(the)g(image)f(will)h(mak)n(e)f(it)946 2377 y(still)i(smaller.)36 b(See)28 b(section)p 0 0 1 TeXcolorrgb 27 w(3.11)p Black 26 w(for)f(more)g(information.)739 2648 y Fj(3.11)135 b(Resource)46 b(query)f(and)g(con)l(trol)p Black Black 780 2830 a Fo(,time)d Fq(exp)946 2930 y Fr(Measure)27 b(execution)g(time.)p Black Black 780 3090 a Fo(,collect)946 3189 y Fr(In)n(v)n(ok)n(e)h(the)i(garbage)e(collector.)42 b(Ordinarily)28 b(this)i(happ)r(ens)f(automatically)-7 b(,)30 b(but)946 3289 y(the)i(command)e(tells)h(ho)n(w)g(m)n(uc)n(h)f (space)g(is)h(a)n(v)-5 b(ailable)30 b(b)r(efore)g(and)h(after)g(the)g (col-)946 3389 y(lection.)p Black Black 780 3549 a Fo(,keep)42 b Fq(kind)p Black Black 780 3709 a Fo(,flush)g Fq(kind)946 3808 y Fr(These)34 b(con)n(trol)f(the)h(amoun)n(t)f(of)h(debugging)f (information)g(retained)g(after)h(com-)946 3908 y(piling)29 b(pro)r(cedures.)39 b(This)29 b(information)f(can)g(consume)g(a)h(fair) f(amoun)n(t)g(of)h(space.)946 4007 y Fq(kind)37 b Fr(is)28 b(one)f(of)h(the)g(follo)n(wing:)p Black 1046 4167 a Fn(\017)p Black 41 w Fo(maps)e Fr(-)h(en)n(vironmen)n(t)g(maps)g(\(lo)r (cal)h(v)-5 b(ariable)26 b(names,)h(for)g(insp)r(ector\))p Black 1046 4294 a Fn(\017)p Black 41 w Fo(source)e Fr(-)j(source)e(co)r (de)h(for)g(con)n(tin)n(uations)g(\(displa)n(y)n(ed)g(b)n(y)g(insp)r (ector\))p Black 1046 4421 a Fn(\017)p Black 41 w Fo(names)j Fr(-)h(pro)r(cedure)g(names)h(\(as)f(displa)n(y)n(ed)g(b)n(y)h Fo(write)e Fr(and)i(in)g(error)e(mes-)1129 4520 y(sages\))p Black 1046 4647 a Fn(\017)p Black 41 w Fo(files)c Fr(-)h(source)f (\014le)i(names)946 4807 y(These)c(commands)f(refer)g(to)h(future)g (compilations)f(only)-7 b(,)24 b(not)g(to)f(pro)r(cedures)g(that)946 4907 y(already)j(exist.)36 b(T)-7 b(o)27 b(ha)n(v)n(e)f(an)n(y)g (e\013ect,)i(they)f(m)n(ust)g(b)r(e)g(done)g(b)r(efore)g(programs)d (are)946 5006 y(loaded.)37 b(The)27 b(default)h(is)g(to)f(k)n(eep)g (all)h(four)f(t)n(yp)r(es.)p Black 2130 5255 a(22)p Black eop end %%Page: 23 31 TeXDict begin 23 30 bop 0 TeXcolorgray Black Black Black Black Black 332 523 a Fo(,flush)498 623 y Fr(The)33 b(\015ush)g (command)f(with)h(no)f(argumen)n(t)g(deletes)h(the)g(database)e(of)i (names)f(of)498 722 y(initial)27 b(pro)r(cedures.)35 b(Doing)27 b Fo(,flush)d Fr(b)r(efore)i(a)g Fo(,build)f Fr(or)g Fo(,dump)g Fr(will)i(mak)n(e)f(the)498 822 y(resulting)e(image) f(signi\014can)n(tly)g(smaller,)h(but)g(will)g(compromise)f(the)i (information)498 922 y(con)n(ten)n(t)i(of)h(man)n(y)f(error)f (messages.)291 1199 y Fj(3.12)135 b(Threads)291 1382 y Fr(Eac)n(h)30 b(command)h(lev)n(el)g(has)g(its)h(o)n(wn)e(set)i(of)f (threads.)48 b(These)31 b(threads)g(are)g(susp)r(ended)291 1482 y(when)c(a)g(new)g(lev)n(el)g(is)g(en)n(tered)g(and)g(resumed)g (when)g(the)h(o)n(wning)e(lev)n(el)h(again)f(b)r(ecomes)291 1581 y(the)h(curren)n(t)g(lev)n(el.)36 b(A)27 b(thread)g(that)h(raises) d(an)i(error)f(is)h(not)g(resumed)g(unless)g(explicitly)291 1681 y(restarted)32 b(using)h(the)i Fo(,proceed)30 b Fr(command.)55 b(In)34 b(addition)f(to)h(an)n(y)f(threads)g(spa)n(wned) 291 1780 y(b)n(y)c(the)i(user,)f(eac)n(h)f(lev)n(el)g(has)h(a)f(thread) h(that)g(runs)f(the)i(command)e(pro)r(cessor)f(on)i(that)291 1880 y(lev)n(el.)42 b(A)29 b(new)h(command-pro)r(cessor)c(thread)j(is)h (started)f(if)h(the)f(curren)n(t)g(one)g(dies)g(or)g(is)291 1980 y(terminated.)44 b(When)31 b(a)f(command)g(lev)n(el)f(is)i (abandoned)e(for)h(a)f(lo)n(w)n(er)g(lev)n(el,)i(or)e(when)h(a)291 2079 y(lev)n(el)g(is)h(restarted)e(using)i Fo(,reset)p Fr(,)e(all)h(of)h(the)g(threads)f(on)h(that)g(lev)n(el)f(are)g (terminated)291 2179 y(and)d(an)n(y)h Fo(dynamic-wind)23 b Fr(\\after")j(th)n(unks)i(are)e(run.)415 2279 y(The)44 b(follo)n(wing)f(commands)h(are)f(useful)h(when)h(debugging)e(m)n (ultithreaded)h(pro-)291 2379 y(grams:)p Black Black 332 2547 a Fo(,resume)d([)p Fq(numb)l(er)9 b Fo(])498 2646 y Fr(P)n(ops)32 b(out)g(to)h(a)f(giv)n(en)g(lev)n(el)h(and)f (resumes)g(running)h(all)f(threads)h(at)f(that)h(lev)n(el.)498 2746 y Fq(Numb)l(er)j Fr(defaults)28 b(to)f(zero.)p Black Black 332 2914 a Fo(,threads)498 3014 y Fr(In)n(v)n(ok)n(es)k(the)j (insp)r(ector)f(on)g(a)g(list)g(of)g(the)h(threads)e(running)h(at)g (the)h(next)f(lo)n(w)n(er)498 3113 y(command)27 b(lev)n(el.)p Black Black 332 3282 a Fo(,exit-when-done)37 b([)p Fq(exp)5 b Fo(])498 3381 y Fr(W)-7 b(aits)35 b(un)n(til)g(all)g(user)f(threads)h (ha)n(v)n(e)e(completed)i(and)g(then)g(exits)g(bac)n(k)f(out)h(to)498 3481 y(shell)26 b(\(or)f(executiv)n(e)g(or)g(whatev)n(er)f(in)n(v)n(ok) n(ed)h(Sc)n(heme)g(48)g(in)h(the)g(\014rst)f(place\).)37 b Fq(Exp)498 3580 y Fr(should)19 b(ev)-5 b(aluate)18 b(to)h(an)f(in)n(teger)g(whic)n(h)h(is)f(then)i(returned)e(to)h(the)g (calling)f(program.)291 3858 y Fj(3.13)135 b(Quite)46 b(obscure)p Black Black 332 4041 a Fo(,go)c Fq(exp)498 4141 y Fr(This)31 b(is)f(lik)n(e)g Fo(,exit)42 b Fq(exp)36 b Fr(except)30 b(that)h(the)g(ev)-5 b(aluation)30 b(of)37 b Fq(exp)f Fr(is)30 b(tail-recursiv)n(e)498 4240 y(with)i(resp)r(ect)g (to)f(the)h(command)f(pro)r(cessor.)47 b(This)31 b(means)g(that)h(the)g (command)498 4340 y(pro)r(cessor)25 b(itself)i(can)f(probably)f(b)r(e)i (GC'ed,)g(should)f(a)g(garbage)f(collection)h(o)r(ccur)498 4439 y(in)37 b(the)g(execution)f(of)43 b Fq(exp)5 b Fr(.)64 b(If)37 b(an)f(error)e(o)r(ccurs)i(Sc)n(heme)g(48)g(will)h(exit)f(with) h(a)498 4539 y(non-zero)26 b(v)-5 b(alue.)p Black Black 332 4707 a Fo(,translate)40 b Fq(fr)l(om)50 b(to)498 4807 y Fr(F)-7 b(or)22 b Fo(load)e Fr(and)i(the)h Fo(,load)d Fr(command)i(\(but)h(not)g(for)e Fo(open-)p Fn(f)p Fo(in|out)p Fn(g)p Fo(put-)o(fi)o(le)o Fr(\),)498 4907 y(\014le)f(names)e(b)r (eginning)h(with)h(the)g(string)f Fq(fr)l(om)27 b Fr(will)19 b(b)r(e)h(c)n(hanged)e(so)h(that)g(the)h(initial)498 5006 y Fq(fr)l(om)35 b Fr(is)27 b(replaced)g(b)n(y)g(the)h(string)g Fq(to)5 b Fr(.)37 b(E.g.)p Black 1681 5255 a(23)p Black eop end %%Page: 24 32 TeXDict begin 24 31 bop 0 TeXcolorgray Black Black Black Black Black 946 523 a Fo(,translate)40 b(/usr/gjc/)g(/zu/gjc/)946 722 y Fr(will)26 b(cause)e Fo(\(load)42 b("/usr/gjc/foo.sc)o(m")o(\))19 b Fr(to)25 b(ha)n(v)n(e)f(the)i(same)e(e\013ect)i(as)e Fo(\(load)946 822 y("/zu/gjc/foo.scm")o(\))p Fr(.)p Black Black 780 988 a Fo(,from-file)40 b Fq(\014lename)50 b(form)h Fo(...)42 b(,end)946 1088 y Fr(This)31 b(is)f(used)g(b)n(y)h(the)f Fo(cmuscheme48)c Fr(Emacs)k(library)f(to)h(indicate)g(the)h(\014le)g (from)946 1187 y(whic)n(h)c(the)g Fq(form)6 b Fr(s)28 b(came.)36 b Fq(Filename)f Fr(is)26 b(then)i(used)e(b)n(y)h(the)g (command)f(pro)r(cessor)946 1287 y(to)i(determine)g(the)g(pac)n(k)-5 b(age)26 b(in)h(whic)n(h)h(the)g Fq(form)6 b Fr(s)29 b(are)d(to)i(b)r(e)g(ev)-5 b(aluated.)p Black 2130 5255 a(24)p Black eop end %%Page: 25 33 TeXDict begin 25 32 bop 0 TeXcolorgray Black Black Black 291 1150 a Fl(Chapter)64 b(4)291 1570 y Fp(Mo)6 b(dule)78 b(system)291 2006 y Fr(This)41 b(c)n(hapter)f(describ)r(es)h(Sc)n(heme) g(48's)f(mo)r(dule)i(system.)77 b(The)41 b(mo)r(dule)h(system)f(is)291 2105 y(unique)18 b(in)h(the)g(exten)n(t)f(to)g(whic)n(h)h(it)f(supp)r (orts)g(b)r(oth)h(static)f(linking)h(and)f(rapid)g(turnaround)291 2205 y(during)43 b(program)e(dev)n(elopmen)n(t.)84 b(The)43 b(design)g(w)n(as)g(in\015uenced)h(b)n(y)f(Standard)g(ML)291 2305 y(mo)r(dules[)p 0 0 1 TeXcolorrgb(7)p Black -1 w(])35 b(and)g(b)n(y)g(the)g(mo)r(dule)g(system)g(for)g(Sc)n(heme)f(Xero)n(x[) p 0 0 1 TeXcolorrgb(4)p Black -1 w(].)59 b(It)35 b(has)g(also)e(b)r (een)291 2404 y(shap)r(ed)d(b)n(y)g(the)h(needs)f(of)h(Sc)n(heme)f(48,) h(whic)n(h)f(is)g(designed)g(to)h(run)f(b)r(oth)h(on)f(w)n(orksta-)291 2504 y(tions)d(and)g(on)h(relativ)n(ely)e(small)h(\(less)h(than)f(1)h (Mb)n(yte\))f(em)n(b)r(edded)i(con)n(trollers.)415 2608 y(Except)21 b(where)f(noted,)i(ev)n(erything)e(describ)r(ed)h(here)f (is)h(implemen)n(ted)h(in)f(Sc)n(heme)g(48,)291 2707 y(and)f(exercised)g(b)n(y)g(the)h(Sc)n(heme)g(48)f(implemen)n(tation)g (and)h(some)f(application)g(programs.)415 2812 y(Unlik)n(e)k(the)g (Common)f(Lisp)g(pac)n(k)-5 b(age)22 b(system,)j(the)f(mo)r(dule)g (system)f(describ)r(ed)g(here)291 2911 y(con)n(trols)32 b(the)i(mapping)g(of)g(names)f(to)h(denotations,)h(not)f(the)g(mapping) g(of)g(strings)f(to)291 3011 y(sym)n(b)r(ols.)291 3309 y Fj(4.1)135 b(In)l(tro)t(duction)291 3499 y Fr(The)40 b(mo)r(dule)h(system)f(supp)r(orts)g(the)h(structured)f(division)g(of)g (a)g(corpus)g(of)g(Sc)n(heme)291 3598 y(soft)n(w)n(are)30 b(in)n(to)i(a)g(set)h(of)f(mo)r(dules.)51 b(Eac)n(h)31 b(mo)r(dule)i(has)f(its)g(o)n(wn)g(isolated)g(namespace,)291 3698 y(with)24 b(visibilit)n(y)f(of)h(bindings)g(con)n(trolled)e(b)n(y) i(mo)r(dule)g(descriptions)f(written)h(in)g(a)f(sp)r(ecial)291 3798 y Fq(c)l(on\014gur)l(ation)29 b(language.)415 3902 y Fr(A)j(mo)r(dule)g(ma)n(y)f(b)r(e)i(instan)n(tiated)e(m)n(ultiple)i (times,)g(pro)r(ducing)e(sev)n(eral)f Fq(p)l(ackages)p Fr(,)291 4001 y(just)19 b(as)e(a)h(lam)n(b)r(da-expression)f(can)h(b)r (e)g(instan)n(tiated)h(m)n(ultiple)g(times)f(to)h(pro)r(duce)f(sev)n (eral)291 4101 y(di\013eren)n(t)26 b(pro)r(cedures.)35 b(Since)27 b(single)f(instan)n(tiation)f(is)i(the)f(normal)g(case,)f(w) n(e)h(will)h(defer)291 4200 y(discussion)d(of)i(m)n(ultiple)g(instan)n (tiation)f(un)n(til)h(a)g(later)f(section.)35 b(F)-7 b(or)25 b(no)n(w)g(y)n(ou)g(can)g(think)291 4300 y(of)41 b(a)g(pac)n(k)-5 b(age)40 b(as)h(simply)g(a)g(mo)r(dule's)h(in)n (ternal)e(en)n(vironmen)n(t)h(mapping)g(names)g(to)291 4400 y(denotations.)415 4504 y(A)25 b(mo)r(dule)g(exp)r(orts)g (bindings)f(b)n(y)h(pro)n(viding)e(views)i(on)n(to)f(the)h(underlying)f (pac)n(k)-5 b(age.)291 4603 y(Suc)n(h)25 b(a)f(view)h(is)g(called)f(a)h Fq(structur)l(e)e Fr(\(terminology)h(from)g(Standard)h(ML\).)g(One)g (mo)r(dule)291 4703 y(ma)n(y)32 b(pro)n(vide)g(sev)n(eral)f(di\013eren) n(t)j(views.)53 b(A)33 b(structure)g(is)g(just)h(a)e(subset)h(of)h(the) f(pac)n(k-)291 4803 y(age's)26 b(bindings.)38 b(The)27 b(particular)g(set)h(of)f(names)h(whose)f(bindings)h(are)e(exp)r(orted) i(is)g(the)291 4902 y(structure's)e Fq(interfac)l(e)p Fr(.)415 5006 y(A)38 b(mo)r(dule)g(imp)r(orts)g(bindings)g(from)f (other)g(mo)r(dules)h(b)n(y)f(either)h Fq(op)l(ening)h Fr(or)e Fq(ac-)p Black 1681 5255 a Fr(25)p Black eop end %%Page: 26 34 TeXDict begin 26 33 bop 0 TeXcolorgray Black Black Black 739 523 a Fq(c)l(essing)31 b Fr(some)f(structures)g(that)h(are)f(built) h(on)f(other)g(pac)n(k)-5 b(ages.)45 b(When)31 b(a)f(structure)g(is)739 623 y(op)r(ened,)e(all)f(of)g(its)h(exp)r(orted)f(bindings)h(are)f (visible)g(in)h(the)g(clien)n(t)g(pac)n(k)-5 b(age.)863 728 y(F)e(or)27 b(example:)p Black Black 739 918 a Fo (\(define-structur)o(e)37 b(foo)43 b(\(export)d(a)k(c)f(cons\))826 1018 y(\(open)f(scheme\))826 1117 y(\(begin)f(\(define)g(a)i(1\))1131 1217 y(\(define)e(\(b)i(x\))f(\(+)h(a)g(x\)\))1131 1317 y(\(define)e(\(c)i(y\))f(\(*)h(\(b)g(a\))g(y\)\)\)\))739 1516 y(\(define-structur)o(e)37 b(bar)43 b(\(export)d(d\))826 1615 y(\(open)i(scheme)f(foo\))826 1715 y(\(begin)g(\(define)g(\(d)i (w\))f(\(+)h(a)g(\(c)g(w\)\)\)\)\))739 1899 y Fr(This)38 b(con\014guration)e(de\014nes)j(t)n(w)n(o)e(structures,)j Fo(foo)d Fr(and)h Fo(bar)p Fr(.)67 b Fo(foo)37 b Fr(is)h(a)g(view)g(on) g(a)739 1999 y(pac)n(k)-5 b(age)25 b(in)h(whic)n(h)h(the)g Fo(scheme)d Fr(structure's)h(bindings)i(\(including)g Fo(define)d Fr(and)i Fo(+)p Fr(\))g(are)739 2098 y(visible,)38 b(together)e(with)g(bindings)h(for)e Fo(a)p Fr(,)j Fo(b)p Fr(,)h(and)d Fo(c)p Fr(.)62 b Fo(foo)p Fr('s)35 b(in)n(terface)h(is)g Fo(\(export)41 b(a)739 2198 y(c)i(cons\))p Fr(,)31 b(so)g(of)h(the)g (bindings)g(in)g(its)g(underlying)f(pac)n(k)-5 b(age,)31 b Fo(foo)g Fr(only)g(exp)r(orts)h(those)739 2298 y(three.)53 b(Similarly)-7 b(,)34 b(structure)f Fo(bar)e Fr(consists)i(of)g(the)g (binding)g(of)g Fo(d)g Fr(from)g(a)f(pac)n(k)-5 b(age)32 b(in)739 2397 y(whic)n(h)h(b)r(oth)h Fo(scheme)p Fr('s)d(and)j Fo(foo)p Fr('s)e(bindings)i(are)e(visible.)55 b Fo(foo)p Fr('s)32 b(binding)i(of)f Fo(cons)f Fr(is)739 2497 y(imp)r(orted)c (from)f(the)h(Sc)n(heme)f(structure)g(and)h(then)g(re-exp)r(orted.)863 2602 y(A)j(mo)r(dule's)g(b)r(o)r(dy)-7 b(,)31 b(the)g(part)f(follo)n (wing)f Fo(begin)f Fr(in)j(the)g(ab)r(o)n(v)n(e)e(example,)h(is)h(ev)-5 b(alu-)739 2702 y(ated)24 b(in)h(an)f(isolated)g(lexical)g(scop)r(e)g (completely)g(sp)r(eci\014ed)h(b)n(y)f(the)h(pac)n(k)-5 b(age)23 b(de\014nition's)739 2802 y Fo(open)30 b Fr(and)h Fo(access)f Fr(clauses.)48 b(In)31 b(particular,)h(the)g(binding)f(of)h (the)g(syn)n(tactic)f(op)r(erator)739 2901 y Fo(define-structure)25 b Fr(is)31 b(not)h(visible)f(unless)g(it)h(comes)f(from)g(some)g(op)r (ened)h(structure.)739 3001 y(Similarly)-7 b(,)25 b(bindings)h(from)f (the)h Fo(scheme)d Fr(structure)i(aren't)g(visible)g(unless)h(they)f(b) r(ecome)739 3100 y(so)i(b)n(y)g Fo(scheme)e Fr(\(or)i(an)h(equiv)-5 b(alen)n(t)27 b(structure\))g(b)r(eing)h(op)r(ened.)739 3407 y Fj(4.2)135 b(The)45 b(con\014guration)g(language)739 3600 y Fr(The)25 b(con\014guration)f(language)g(consists)h(of)g (top-lev)n(el)g(de\014ning)g(forms)g(for)g(mo)r(dules)g(and)739 3699 y(in)n(terfaces.)36 b(Its)28 b(syn)n(tax)e(is)i(giv)n(en)e(in)i (\014gure)p 0 0 1 TeXcolorrgb 27 w(4.1)p Black(.)863 3805 y(A)c Fo(define-structure)17 b Fr(form)23 b(in)n(tro)r(duces)f(a)h (binding)h(of)f(a)g(name)g(to)g(a)g(structure.)35 b(A)739 3904 y(structure)28 b(is)g(a)g(view)g(on)g(an)g(underlying)g(pac)n(k)-5 b(age)26 b(whic)n(h)i(is)h(created)e(according)g(to)h(the)739 4004 y(clauses)33 b(of)i(the)f Fo(define-structure)28 b Fr(form.)57 b(Eac)n(h)33 b(structure)h(has)f(an)h(in)n(terface)g (that)739 4104 y(sp)r(eci\014es)d(whic)n(h)h(bindings)g(in)g(the)g (structure's)f(underlying)g(pac)n(k)-5 b(age)30 b(can)h(b)r(e)h(seen)g (via)739 4203 y(that)c(structure)f(in)h(other)f(pac)n(k)-5 b(ages.)863 4309 y(An)22 b Fo(open)d Fr(clause)i(sp)r(eci\014es)f(whic) n(h)h(structures)g(will)g(b)r(e)g(op)r(ened)g(up)g(for)g(use)g(inside)g (the)739 4408 y(new)k(pac)n(k)-5 b(age.)34 b(A)n(t)26 b(least)e(one)h(structure)g(m)n(ust)g(b)r(e)g(sp)r(eci\014ed)h(or)e (else)h(it)g(will)g(b)r(e)h(imp)r(ossi-)739 4508 y(ble)21 b(to)f(write)h(an)n(y)e(useful)i(programs)e(inside)h(the)h(pac)n(k)-5 b(age,)21 b(since)f Fo(define)p Fr(,)g Fo(lambda)p Fr(,)g Fo(cons)p Fr(,)739 4608 y(etc.)33 b(will)g(b)r(e)g(una)n(v)-5 b(ailable.)52 b(P)n(ac)n(k)-5 b(ages)30 b(t)n(ypically)i(include)h Fo(scheme)p Fr(,)f(whic)n(h)g(exp)r(orts)h(all)739 4707 y(bindings)22 b(appropriate)e(to)i(Revised)1885 4677 y Fk(5)1945 4707 y Fr(Sc)n(heme,)h(in)f(an)g Fo(open)f Fr(clause.)34 b(F)-7 b(or)21 b(building)i(struc-)739 4807 y(tures)34 b(that)g(exp)r(ort)f(structures,)i(there)f(is)g(a)g Fo(defpackage)c Fr(pac)n(k)-5 b(age)32 b(that)j(exp)r(orts)e(the)739 4907 y(op)r(erators)26 b(of)h(the)h(con\014guration)e(language.)35 b(Man)n(y)27 b(other)g(structures,)g(suc)n(h)h(as)f(record)739 5006 y(and)g(hash)h(table)f(facilities,)h(are)e(also)h(a)n(v)-5 b(ailable)26 b(in)i(the)g(Sc)n(heme)g(48)e(implemen)n(tation.)p Black 2130 5255 a(26)p Black eop end %%Page: 27 35 TeXDict begin 27 34 bop 0 TeXcolorgray Black Black Black Black 340 510 a Fn(h)p Fr(con\014guration)p Fn(i)27 b(\000)-14 b(!)27 b(h)p Fr(de\014nition)p Fn(i)1475 480 y Fd(\003)390 609 y Fn(h)p Fr(de\014nition)p Fn(i)i(\000)-14 b(!)99 b Fo(\(define-structure)37 b Fn(h)p Fr(name)p Fn(i)44 b(h)p Fr(in)n(terface)p Fn(i)f(h)p Fr(clause)p Fn(i)2843 579 y Fd(\003)2881 609 y Fo(\))934 709 y Fn(j)100 b Fo (\(define-structure)o(s)37 b(\(\()p Fn(h)p Fr(name)p Fn(i)43 b(h)p Fr(in)n(terface)p Fn(i)p Fo(\))2692 679 y Fd(\003)2730 709 y Fo(\))g Fn(h)p Fr(clause)p Fn(i)3099 679 y Fd(\003)3137 709 y Fo(\))934 809 y Fn(j)100 b Fo (\(define-interface)37 b Fn(h)p Fr(name)p Fn(i)44 b(h)p Fr(in)n(terface)p Fn(i)o Fo(\))934 908 y Fn(j)100 b Fo(\(define-syntax) 38 b Fn(h)p Fr(name)p Fn(i)44 b(h)p Fr(transformer-sp)r(ec)p Fn(i)n Fo(\))390 1008 y Fn(h)p Fr(clause)p Fn(i)28 b(\000)-15 b(!)100 b Fo(\(open)42 b Fn(h)p Fr(structure)p Fn(i)1588 978 y Fd(\003)1626 1008 y Fo(\))810 1108 y Fn(j)100 b Fo(\(access)41 b Fn(h)p Fr(name)p Fn(i)1540 1077 y Fd(\003)1578 1108 y Fo(\))810 1207 y Fn(j)100 b Fo(\(begin)41 b Fn(h)p Fr(program)p Fn(i)o Fo(\))810 1307 y Fn(j)100 b Fo(\(files)41 b Fn(h)p Fr(\014lesp)r(ec)p Fn(i)1564 1277 y Fd(\003)1602 1307 y Fo(\))810 1406 y Fn(j)100 b Fo(\(optimize)40 b Fn(h)p Fr(optimize-sp)r(ec)p Fn(i)1925 1376 y Fd(\003)1963 1406 y Fo(\))810 1506 y Fn(j)100 b Fo(\(for-syntax)39 b Fn(h)p Fr(clause)p Fn(i)1738 1476 y Fd(\003)1776 1506 y Fo(\))390 1606 y Fn(h)p Fr(in)n(terface)p Fn(i)28 b(\000)-15 b(!)100 b Fo(\(export)41 b Fn(h)p Fr(item)p Fn(i)1600 1576 y Fd(\003)1638 1606 y Fo(\))902 1705 y Fn(j)100 b(h)p Fr(name)p Fn(i)902 1805 y(j)g Fo(\(compound-interf)o(ace)37 b Fn(h)p Fr(in)n(terface)p Fn(i)2271 1775 y Fd(\003)2309 1805 y Fo(\))390 1905 y Fn(h)p Fr(item)p Fn(i)29 b(\000)-14 b(!)55 b(h)p Fr(name)p Fn(i)1068 2004 y(j)100 b Fo(\()p Fn(h)p Fr(name)p Fn(i)43 b(h)p Fr(t)n(yp)r(e)p Fn(i)q Fo(\))1068 2104 y Fn(j)100 b Fo(\(\()p Fn(h)p Fr(name)p Fn(i)1536 2074 y Fd(\003)1575 2104 y Fo(\))43 b Fn(h)p Fr(t)n(yp)r(e)p Fn(i)p Fo(\))390 2203 y Fn(h)p Fr(structure)p Fn(i)28 b(\000)-14 b(!)99 b(h)p Fr(name)p Fn(i)922 2303 y(j)g Fo(\(modify)41 b Fn(h)p Fr(structure)p Fn(i)i(h)p Fr(mo)r(di\014er)p Fn(i)2192 2273 y Fd(\003)2230 2303 y Fo(\))922 2403 y Fn(j)99 b Fo(\(subset)41 b Fn(h)p Fr(structure)p Fn(i)i Fo(\()p Fn(h)p Fr(name)p Fn(i)2131 2373 y Fd(\003)2170 2403 y Fo(\)\))922 2502 y Fn(j)99 b Fo(\(with-prefix)39 b Fn(h)p Fr(structure)p Fn(i)k(h)p Fr(name)p Fn(i)q Fo(\))390 2602 y Fn(h)p Fr(mo)r(di\014er)p Fn(i)28 b(\000)-14 b(!)100 b Fo(\(expose)40 b Fn(h)p Fr(name)p Fn(i)1621 2572 y Fd(\003)1659 2602 y Fo(\))891 2702 y Fn(j)100 b Fo(\(hide)41 b Fn(h)p Fr(name)p Fn(i)1533 2671 y Fd(\003)1572 2702 y Fo(\))891 2801 y Fn(j)100 b Fo(\(rename)40 b(\()p Fn(h)p Fr(name)p Fn(i)1664 2813 y Fk(0)1745 2801 y Fn(h)p Fr(name)p Fn(i)2003 2813 y Fk(1)2040 2801 y Fo(\))2084 2771 y Fd(\003)2122 2801 y Fo(\))891 2901 y Fn(j)100 b Fo(\(alias)41 b(\()p Fn(h)p Fr(name)p Fn(i)1621 2913 y Fk(0)1701 2901 y Fn(h)p Fr(name)p Fn(i)1960 2913 y Fk(1)1997 2901 y Fo(\))2041 2871 y Fd(\003)2079 2901 y Fo(\))891 3000 y Fn(j)100 b Fo(\(prefix)40 b Fn(h)p Fr(name)p Fn(i)q Fo(\))p Black 1001 3179 a Fr(Figure)27 b(4.1:)p 0 TeXcolorgray Black 36 w(The)h(con\014guration)e(language.)p Black Black 415 3445 a(The)21 b Fo(modify)p Fr(,)e Fo(subset)p Fr(,)g(and)i Fo(prefix)d Fr(forms)h(pro)r(duce)h(new)h(views)f(on)g (existing)g(struc-)291 3544 y(tures)30 b(b)n(y)h(renaming)f(or)g (hiding)h(exp)r(orted)f(names.)47 b Fo(Subset)29 b Fr(returns)h(a)g (new)h(structure)291 3644 y(that)24 b(exp)r(orts)g(only)g(the)h(listed) g(names)f(from)g(its)h Fn(h)p Fr(structure)p Fn(i)g Fr(argumen)n(t.)34 b Fo(With-prefix)291 3743 y Fr(returns)23 b(a)h(new)g(structure)g(that) g(adds)g Fn(h)p Fr(pre\014x)p Fn(i)h Fr(to)f(eac)n(h)f(of)h(the)h (names)f(exp)r(orted)g(b)n(y)g(the)291 3843 y Fn(h)p Fr(structure)p Fn(i)j Fr(argumen)n(t.)36 b(F)-7 b(or)27 b(example,)g(if)h(structure)f Fo(s)h Fr(exp)r(orts)f Fo(a)g Fr(and)g Fo(b)p Fr(,)h(then)p Black Black 291 4009 a Fo(\(subset)40 b(s)j(\(a\)\))291 4176 y Fr(exp)r(orts)26 b(only)j Fo(a)e Fr(and)p Black Black 291 4342 a Fo(\(with-prefix)38 b(s)43 b(p/\))291 4508 y Fr(exp)r(orts)26 b Fo(a)i Fr(as)f Fo(p/a)f Fr(and)i Fo(b)f Fr(as)g Fo(p/b)p Fr(.)415 4608 y(Both)i Fo(subset)e Fr(and)i Fo(with-prefix)24 b Fr(are)k(simple)i (macros)d(that)j(expand)e(in)n(to)h(uses)g(of)291 4707 y Fo(modify)p Fr(,)38 b(a)g(more)g(general)f(renaming)g(form.)69 b(In)39 b(a)e Fo(modify)f Fr(structure)i(sp)r(eci\014cation)291 4807 y(the)26 b Fn(h)p Fr(command)p Fn(i)p Fr(s)f(are)g(applied)h(to)f (the)h(names)f(exp)r(orted)g(b)n(y)h Fn(h)p Fr(structure)p Fn(i)g Fr(to)f(pro)r(duce)g(a)291 4907 y(new)31 b(set)f(of)h(names)g (for)f(the)h Fn(h)p Fr(structure)p Fn(i)p Fr('s)g(bindings.)47 b Fo(Expose)28 b Fr(mak)n(es)i(only)g(the)i(listed)291 5006 y(names)26 b(visible.)37 b Fo(Hide)26 b Fr(mak)n(es)g(all)h(but)h (the)g(listed)f(names)g(visible.)37 b Fo(Rename)24 b Fr(mak)n(es)j(eac)n(h)p Black 1681 5255 a(27)p Black eop end %%Page: 28 36 TeXDict begin 28 35 bop 0 TeXcolorgray Black Black Black 739 523 a Fn(h)p Fr(name)p Fn(i)997 535 y Fk(0)1055 523 y Fr(visible)21 b(as)f Fn(h)p Fr(name)p Fn(i)1658 535 y Fk(1)1716 523 y Fr(name)h(and)f(not)h(visible)g(as)f Fn(h)p Fr(name)p Fn(i)2829 535 y Fk(0)2887 523 y Fr(,)j(while)e Fo(alias)d Fr(mak)n(es)739 623 y(eac)n(h)24 b Fn(h)p Fr(name)p Fn(i)1182 635 y Fk(0)1244 623 y Fr(visible)h(as)g(b)r(oth)h Fn(h)p Fr(name)p Fn(i)2050 635 y Fk(0)2113 623 y Fr(and)f Fn(h)p Fr(name)p Fn(i)2530 635 y Fk(1)2567 623 y Fr(.)36 b Fo(Prefix)23 b Fr(adds)i Fn(h)p Fr(name)p Fn(i)h Fr(to)f(the)739 722 y(b)r(eginning)j(of)g(eac)n(h)f(exp)r(orted)g(name.)38 b(The)28 b(mo)r(di\014ers)g(are)f(applied)h(from)f(righ)n(t)h(to)f (left.)739 822 y(Th)n(us)p Black Black 739 1008 a Fo(\(modify)41 b(scheme)g(\(prefix)f(foo/\))i(\(rename)f(\(car)h(bus\)\)\)\))739 1190 y Fr(mak)n(es)26 b Fo(car)h Fr(a)n(v)-5 b(ailable)26 b(as)h Fo(foo/bus)p Fr(.)863 1295 y(The)h(pac)n(k)-5 b(age's)26 b(b)r(o)r(dy)j(is)e(sp)r(eci\014ed)h(b)n(y)g Fo(begin)e Fr(and/or)g Fo(files)g Fr(clauses.)37 b Fo(begin)25 b Fr(and)739 1394 y Fo(files)e Fr(ha)n(v)n(e)i(the)g(same)g(seman)n (tics,)g(except)h(that)g(for)e Fo(begin)g Fr(the)i(text)g(is)f(giv)n (en)f(directly)739 1494 y(in)32 b(the)g(pac)n(k)-5 b(age)30 b(de\014nition,)j(while)e(for)g Fo(files)f Fr(the)i(text)g(is)f(stored) g(somewhere)f(in)i(the)739 1593 y(\014le)38 b(system.)66 b(The)37 b(b)r(o)r(dy)h(consists)f(of)g(a)g(Sc)n(heme)h(program,)g (that)f(is,)j(a)d(sequence)g(of)739 1693 y(de\014nitions)27 b(and)g(expressions)e(to)h(b)r(e)i(ev)-5 b(aluated)26 b(in)h(order.)36 b(In)27 b(practice,)f(w)n(e)g(alw)n(a)n(ys)f(use)739 1793 y Fo(files)h Fr(in)h(preference)g(to)h Fo(begin)p Fr(;)d Fo(begin)h Fr(exists)h(mainly)h(for)f(exp)r(ository)f(purp)r (oses.)863 1897 y(A)42 b(name's)f(imp)r(orted)h(binding)f(ma)n(y)g(b)r (e)h(lexically)f(o)n(v)n(erridden)e(or)i Fq(shadowe)l(d)j Fr(b)n(y)739 1997 y(de\014ning)38 b(the)h(name)g(using)f(a)g (de\014ning)h(form)f(suc)n(h)g(as)g Fo(define)e Fr(or)h Fo(define-syntax)p Fr(.)739 2097 y(This)i(will)h(create)e(a)h(new)h (binding)g(without)f(ha)n(ving)g(an)n(y)f(e\013ect)i(on)g(the)f (binding)h(in)739 2196 y(the)32 b(op)r(ened)f(pac)n(k)-5 b(age.)47 b(F)-7 b(or)30 b(example,)i(one)f(can)g(do)g Fo(\(define)41 b(car)h('chevy\))29 b Fr(without)739 2296 y(a\013ecting)e(the)h(binding)g(of)g(the)g(name)f Fo(car)f Fr(in)i(the)g Fo(scheme)d Fr(pac)n(k)-5 b(age.)863 2401 y(Assignmen)n(ts)33 b(\(using)g Fo(set!)p Fr(\))e(to)i(imp)r(orted)g (and)g(unde\014ned)g(v)-5 b(ariables)32 b(are)g(not)h(al-)739 2500 y(lo)n(w)n(ed.)58 b(In)35 b(order)e(to)i Fo(set!)e Fr(a)i(top-lev)n(el)f(v)-5 b(ariable,)35 b(the)h(pac)n(k)-5 b(age)33 b(b)r(o)r(dy)i(m)n(ust)g(con)n(tain)739 2600 y(a)i Fo(define)e Fr(form)i(de\014ning)g(that)h(v)-5 b(ariable.)65 b(Applied)38 b(to)f(bindings)g(from)g(the)h Fo(scheme)739 2700 y Fr(structure,)31 b(this)h(restriction)e(is)h (compatible)g(with)g(the)h(requiremen)n(ts)e(of)h(the)g(Revised)3566 2669 y Fk(5)739 2799 y Fr(Sc)n(heme)c(rep)r(ort.)863 2904 y(It)d(is)f(an)h(error)d(for)i(t)n(w)n(o)f(of)i(a)f(pac)n(k)-5 b(age's)21 b(op)r(ened)j(structures)e(to)i(exp)r(ort)f(t)n(w)n(o)f (di\013eren)n(t)739 3003 y(bindings)36 b(for)h(the)g(same)f(name.)63 b(Ho)n(w)n(ev)n(er,)37 b(the)g(curren)n(t)f(implemen)n(tation)h(do)r (es)f(not)739 3103 y(c)n(hec)n(k)e(for)h(this)g(situation;)k(a)34 b(name's)h(binding)g(is)g(alw)n(a)n(ys)e(tak)n(en)i(from)f(the)i (structure)739 3203 y(that)28 b(is)f(listed)h(\014rst)f(within)i(the)f Fo(open)e Fr(clause.)36 b(This)28 b(ma)n(y)e(b)r(e)i(\014xed)g(in)g (the)g(future.)863 3307 y(File)f(names)f(in)h(a)f Fo(files)f Fr(clause)h(can)g(b)r(e)h(sym)n(b)r(ols,)f(strings,)g(or)g(lists)g (\(Maclisp-st)n(yle)739 3407 y(\\namelists"\).)72 b(A)40 b(\\)p Fo(.scm)p Fr(")e(\014le)h(t)n(yp)r(e)h(su\016x)g(is)g(assumed.) 73 b(Sym)n(b)r(ols)39 b(are)g(con)n(v)n(erted)739 3507 y(to)31 b(\014le)g(names)g(b)n(y)g(con)n(v)n(erting)e(to)i(upp)r(er)g (or)g(lo)n(w)n(er)e(case)h(as)h(appropriate)e(for)i(the)g(host)739 3606 y(op)r(erating)18 b(system.)34 b(A)19 b(namelist)g(is)g(an)g(op)r (erating-system-indep)r(enden)n(t)f(w)n(a)n(y)g(to)h(sp)r(ecify)739 3706 y(a)31 b(\014le)h(obtained)g(from)g(a)f(sub)r(directory)-7 b(.)49 b(F)-7 b(or)31 b(example,)i(the)f(namelist)g Fo(\(rts)42 b(record\))739 3806 y Fr(sp)r(eci\014es)27 b(the)h(\014le)g Fo(record.scm)c Fr(in)k(the)f Fo(rts)g Fr(sub)r(directory)-7 b(.)863 3910 y(If)22 b(the)f Fo(define-structur)o(e)15 b Fr(form)20 b(w)n(as)g(itself)h(obtained)g(from)f(a)g(\014le,)j(then)e (\014le)g(names)739 4010 y(in)29 b Fo(files)f Fr(clauses)g(are)g(in)n (terpreted)h(relativ)n(e)f(to)h(the)h(directory)e(in)i(whic)n(h)f(the)h (\014le)f(con-)739 4110 y(taining)34 b(the)g Fo(define-structure)28 b Fr(form)34 b(w)n(as)f(found.)57 b(Y)-7 b(ou)34 b(can't)g(at)g(presen) n(t)g(put)h(an)739 4209 y(absolute)27 b(path)h(name)f(in)h(the)g Fo(files)d Fr(list.)739 4511 y Fj(4.3)135 b(In)l(terfaces)739 4702 y Fo(define-interface)863 4807 y Fr(An)24 b(in)n(terface)f(can)f (b)r(e)i(though)n(t)f(of)g(as)g(the)g(t)n(yp)r(e)h(of)f(a)g(structure.) 35 b(In)23 b(its)g(basic)g(form)g(it)739 4907 y(is)h(just)h(a)f(list)g (of)h(v)-5 b(ariable)23 b(names,)i(written)f Fo(\(export)41 b Fq(name)50 b Fo(...\))p Fr(.)34 b(Ho)n(w)n(ev)n(er,)23 b(in)i(place)739 5006 y(of)j(a)f(name)h(one)f(ma)n(y)g(write)h Fo(\()p Fq(name)50 b(typ)l(e)6 b Fo(\))p Fr(,)28 b(indicating)f(the)i (t)n(yp)r(e)f(of)34 b Fq(name)6 b Fr('s)28 b(binding.)p Black 2130 5255 a(28)p Black eop end %%Page: 29 37 TeXDict begin 29 36 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(The)26 b(t)n(yp)r(e)h(\014eld)g(is)g(optional,)f(except)g (that)h(exp)r(orted)g(macros)e(m)n(ust)i(b)r(e)g(indicated)f(with)291 623 y(t)n(yp)r(e)h Fo(:syntax)p Fr(.)415 722 y(In)n(terfaces)g(ma)n(y)g (b)r(e)h(either)f(anon)n(ymous,)f(as)h(in)h(the)g(example)f(in)h(the)g (in)n(tro)r(duction,)291 822 y(or)e(they)i(ma)n(y)f(b)r(e)h(giv)n(en)f (names)g(b)n(y)g(a)g Fo(define-interface)21 b Fr(form,)28 b(for)f(example)p Black Black 291 974 a Fo(\(define-interfa)o(ce)37 b(foo-interface)h(\(export)j(a)i(c)g(cons\)\))291 1074 y(\(define-structu)o(re)37 b(foo)42 b(foo-interface)d(...\))291 1227 y Fr(In)23 b(principle,)h(in)n(terfaces)e(needn't)i(ev)n(er)e(b)r (e)h(named.)36 b(If)23 b(an)g(in)n(terface)f(had)h(to)g(b)r(e)h(giv)n (en)e(at)291 1326 y(the)i(p)r(oin)n(t)g(of)g(a)g(structure's)f(use)h (as)f(w)n(ell)h(as)f(at)h(the)g(p)r(oin)n(t)g(of)g(its)g(de\014nition,) i(it)e(w)n(ould)g(b)r(e)291 1426 y(imp)r(ortan)n(t)i(to)h(name)g(in)n (terfaces)f(in)i(order)e(to)h(a)n(v)n(oid)e(ha)n(ving)h(to)h(write)g (them)h(out)f(t)n(wice,)291 1526 y(with)h(risk)f(of)g(mismatc)n(h)g (should)h(the)g(in)n(terface)f(ev)n(er)f(c)n(hange.)36 b(But)28 b(they)g(don't.)415 1625 y(Still,)g(there)g(are)e(sev)n(eral)g (reasons)g(to)h(use)h Fo(define-interface)o Fr(:)p Black 392 1778 a(1.)p Black 41 w(It)j(is)f(imp)r(ortan)n(t)g(to)g(separate)e (the)j(in)n(terface)e(de\014nition)i(from)f(the)g(pac)n(k)-5 b(age)29 b(def-)498 1877 y(initions)36 b(when)g(there)g(are)f(m)n (ultiple)i(distinct)g(structures)e(that)h(ha)n(v)n(e)f(the)h(same)498 1977 y(in)n(terface)27 b(|)h(that)g(is,)f(m)n(ultiple)h(implemen)n (tations)g(of)f(the)h(same)f(abstraction.)p Black 392 2136 a(2.)p Black 41 w(It)34 b(is)f(conceptually)g(cleaner,)g(and)h (often)f(useful)h(for)f(do)r(cumen)n(tation)g(purp)r(oses,)498 2236 y(to)i(separate)e(a)h(mo)r(dule's)h(sp)r(eci\014cation)g(\(in)n (terface\))f(from)h(its)g(implemen)n(tation)498 2336 y(\(pac)n(k)-5 b(age\).)p Black 392 2495 a(3.)p Black 41 w(Our)39 b(exp)r(erience)h(is)f(that)h(con\014gurations)e(that)j (are)d(separated)h(in)n(to)h(in)n(terface)498 2594 y(de\014nitions)g (and)g(pac)n(k)-5 b(age)38 b(de\014nitions)j(are)e(easier)f(to)i(read;) 45 b(the)c(long)e(lists)h(of)498 2694 y(exp)r(orted)27 b(bindings)h(just)g(get)f(in)h(the)g(w)n(a)n(y)f(most)g(of)h(the)g (time.)415 2847 y(The)j Fo(compound-interfac)o(e)25 b Fr(op)r(erator)30 b(forms)h(an)g(in)n(terface)f(that)i(is)f(the)h (union)f(of)291 2946 y(t)n(w)n(o)26 b(or)h(more)g(comp)r(onen)n(t)g(in) n(terfaces.)36 b(F)-7 b(or)27 b(example,)p Black Black 291 3099 a Fo(\(define-interfa)o(ce)37 b(bar-interface)378 3198 y(\(compound-interf)o(ac)o(e)g(foo-interface)i(\(export)h (mumble\)\)\))291 3351 y Fr(de\014nes)27 b Fo(bar-interface)22 b Fr(to)28 b(b)r(e)g Fo(foo-interface)22 b Fr(with)28 b(the)g(name)g Fo(mumble)d Fr(added.)291 3623 y Fj(4.4)135 b(Macros)291 3804 y Fr(Hygienic)32 b(macros,)g(as)g(describ)r(ed)h(in)g ([)p 0 0 1 TeXcolorrgb(2)p Black -1 w(,)p 0 0 1 TeXcolorrgb 33 w(3)p Black(],)h(are)e(implemen)n(ted.)52 b(Structures)32 b(ma)n(y)g(ex-)291 3904 y(p)r(ort)26 b(macros;)g(auxiliary)g(names)g (in)n(tro)r(duced)h(in)n(to)g(the)h(expansion)e(are)g(resolv)n(ed)f(in) j(the)291 4004 y(en)n(vironmen)n(t)e(of)i(the)g(macro's)e (de\014nition.)415 4103 y(F)-7 b(or)29 b(example,)h(the)g Fo(scheme)d Fr(structure's)h Fo(delay)g Fr(macro)g(is)i(de\014ned)g(b)n (y)f(the)h(rewrite)291 4203 y(rule)p Black Black 291 4356 a Fo(\(delay)41 b Fq(exp)5 b Fo(\))87 b Fr(=)-14 b Fn(\))87 b Fo(\(make-promise)38 b(\(lambda)j(\(\))h Fq(exp)5 b Fo(\)\).)291 4508 y Fr(The)19 b(v)-5 b(ariable)18 b Fo(make-promise)c Fr(is)19 b(de\014ned)g(in)g(the)h Fo(scheme)c Fr(structure's)j(underlying)f(pac)n(k-)291 4608 y(age,)30 b(but)h(is)g(not)g(exp)r(orted.)45 b(A)31 b(use)g(of)f(the)h Fo(delay)e Fr(macro,)h(ho)n(w)n(ev)n(er,)g(alw)n(a)n (ys)e(accesses)291 4707 y(the)d(correct)e(de\014nition)i(of)f Fo(make-promise)p Fr(.)31 b(Similarly)-7 b(,)25 b(the)g Fo(case)e Fr(macro)g(expands)h(in)n(to)291 4807 y(uses)j(of)h Fo(cond)p Fr(,)e Fo(eqv?)p Fr(,)g(and)i(so)f(on.)37 b(These)27 b(names)h(are)e(exp)r(orted)i(b)n(y)f Fo(scheme)p Fr(,)f(but)i(their) 291 4907 y(correct)i(bindings)i(will)h(b)r(e)f(found)g(ev)n(en)g(if)g (they)h(are)e(shado)n(w)n(ed)f(b)n(y)i(de\014nitions)g(in)h(the)291 5006 y(clien)n(t)27 b(pac)n(k)-5 b(age.)p Black 1681 5255 a(29)p Black eop end %%Page: 30 38 TeXDict begin 30 37 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(4.5)135 b(Higher-order)46 b(mo)t(dules)739 705 y Fr(There)30 b(are)f Fo(define-module)c Fr(and)30 b Fo(define)e Fr(forms)i(for)g(de\014ning)g(mo)r(dules)g(that)h(are)e (in-)739 805 y(tended)j(to)f(b)r(e)h(instan)n(tiated)f(m)n(ultiple)h (times.)49 b(But)32 b(these)g(are)e(prett)n(y)h(kludgey)g(|)h(for)739 904 y(example,)c(compiled)g(co)r(de)g(isn't)h(shared)e(b)r(et)n(w)n (een)h(the)g(instan)n(tiations)g(|)g(so)g(w)n(e)g(w)n(on't)739 1004 y(describ)r(e)d(them)h(y)n(et.)36 b(If)25 b(y)n(ou)g(m)n(ust)g (kno)n(w,)g(\014gure)g(it)h(out)f(from)g(the)h(follo)n(wing)e(grammar.) p Black Black 999 1142 a Fn(h)p Fr(de\014nition)p Fn(i)k(\000)-14 b(!)100 b Fo(\(define-module)37 b(\()p Fn(h)p Fr(name)p Fn(i)44 b Fo(\()p Fn(h)p Fr(name)p Fn(i)f(h)p Fr(in)n(terface)p Fn(i)p Fo(\))3428 1112 y Fd(\003)3466 1142 y Fo(\))1832 1242 y Fn(h)p Fr(de\014nition)p Fn(i)2238 1212 y Fd(\003)1832 1342 y Fn(h)p Fr(name)p Fn(i)p Fo(\))1543 1441 y Fn(j)100 b Fo(\(define)40 b Fn(h)p Fr(name)p Fn(i)k Fo(\()p Fn(h)p Fr(name)p Fn(i)g(h)p Fr(name)p Fn(i)2920 1411 y Fd(\003)2958 1441 y Fo(\)\))739 1683 y Fj(4.6)135 b(Compiling)46 b(and)f(linking)739 1865 y Fr(Sc)n(heme)24 b(48)f(has)g(a)g(static)h(link)n(er)f(that)i (pro)r(duces)e(stand-alone)f(heap)i(images)f(from)g(mo)r(d-)739 1964 y(ule)j(descriptions.)36 b(The)26 b(programmer)e(sp)r(eci\014es)i (a)g(particular)f(pro)r(cedure)g(in)h(a)g(particu-)739 2064 y(lar)j(structure)g(to)g(b)r(e)h(the)g(image's)f(startup)g(pro)r (cedure)g(\(en)n(try)g(p)r(oin)n(t\),)i(and)e(the)h(link)n(er)739 2164 y(traces)d(dep)r(endency)i(links)f(as)f(giv)n(en)g(b)n(y)h Fo(open)f Fr(and)h Fo(access)d Fr(clauses)j(to)g(determine)g(the)739 2263 y(comp)r(osition)f(of)g(the)h(heap)g(image.)863 2363 y(There)23 b(is)g(not)g(curren)n(tly)f(an)n(y)g(pro)n(vision)f (for)i(separate)e(compilation;)j(the)g(only)e(input)739 2462 y(to)i(the)h(static)f(link)n(er)f(is)i(source)e(co)r(de.)35 b(Ho)n(w)n(ev)n(er,)23 b(it)i(will)f(not)h(b)r(e)f(di\016cult)h(to)g (implemen)n(t)739 2562 y(separate)c(compilation.)35 b(The)23 b(unit)h(of)f(compilation)f(is)h(one)f(mo)r(dule)i(\(not)f(one)f (\014le\).)36 b(An)n(y)739 2662 y(op)r(ened)19 b(or)f(accessed)f (structures)h(from)g(whic)n(h)h(macros)e(are)h(obtained)g(m)n(ust)h(b)r (e)g(pro)r(cessed)739 2761 y(to)28 b(the)h(exten)n(t)f(of)g(extracting) f(its)i(macro)e(de\014nitions.)39 b(The)28 b(compiler)g(kno)n(ws)f (from)h(the)739 2861 y(in)n(terface)34 b(of)h(an)g(op)r(ened)g(or)f (accessed)f(structure)i(whic)n(h)g(of)g(its)g(exp)r(orts)f(are)g (macros.)739 2961 y(Except)f(for)f(macros,)i(a)f(mo)r(dule)g(ma)n(y)g (b)r(e)g(compiled)h(without)f(an)n(y)g(kno)n(wledge)f(of)h(the)739 3060 y(implemen)n(tation)f(of)g(its)h(op)r(ened)f(and)g(accessed)f (structures.)50 b(Ho)n(w)n(ev)n(er,)32 b(in)n(ter-mo)r(dule)739 3160 y(optimization)27 b(ma)n(y)g(b)r(e)h(a)n(v)-5 b(ailable)26 b(as)h(an)h(option.)863 3259 y(The)23 b(main)g(di\016cult)n(y)f(with)h (separate)f(compilation)g(is)g(resolution)f(of)i(auxiliary)e(bind-)739 3359 y(ings)26 b(in)n(tro)r(duced)h(in)n(to)f(macro)g(expansions.)35 b(The)27 b(mo)r(dule)g(compiler)f(m)n(ust)h(transmit)f(to)739 3459 y(the)j(loader)e(or)g(link)n(er)h(the)g(searc)n(h)f(path)i(b)n(y)f (whic)n(h)g(suc)n(h)g(bindings)g(are)g(to)g(b)r(e)h(resolv)n(ed.)739 3558 y(In)f(the)g(case)f(of)h(the)g Fo(delay)e Fr(macro's)g(auxiliary)g Fo(make-promise)d Fr(\(see)28 b(example)f(ab)r(o)n(v)n(e\),)739 3658 y(the)g(loader)e(or)h(link)n(er)g(needs)h(to)g(kno)n(w)e(that)j (the)f(desired)f(binding)h(of)f Fo(make-promise)c Fr(is)739 3758 y(the)30 b(one)f(apparen)n(t)f(in)h Fo(delay)p Fr('s)e(de\014ning) j(pac)n(k)-5 b(age,)28 b(not)h(in)h(the)g(pac)n(k)-5 b(age)27 b(b)r(eing)j(loaded)739 3857 y(or)d(link)n(ed.)739 4127 y Fj(4.7)135 b(Seman)l(tics)46 b(of)f(con\014guration)g(m)l (utation)739 4309 y Fr(During)28 b(program)e(dev)n(elopmen)n(t)h(it)i (is)f(often)g(desirable)f(to)h(mak)n(e)f(c)n(hanges)g(to)h(pac)n(k)-5 b(ages)739 4408 y(and)25 b(in)n(terfaces.)36 b(In)26 b(static)f(languages)f(it)i(ma)n(y)f(b)r(e)h(necessary)e(to)i (recompile)e(and)i(re-link)739 4508 y(a)21 b(program)f(in)j(order)d (for)i(suc)n(h)f(c)n(hanges)g(to)h(b)r(e)g(re\015ected)g(in)g(a)g (running)f(system.)35 b(Ev)n(en)21 b(in)739 4608 y(in)n(teractiv)n(e)c (Common)i(Lisp)f(implemen)n(tations,)j(a)d(c)n(hange)g(to)h(a)f(pac)n (k)-5 b(age's)17 b(exp)r(orts)h(often)739 4707 y(requires)33 b(reloading)g(clien)n(ts)i(that)g(ha)n(v)n(e)e(already)g(men)n(tioned)i (names)f(whose)g(bindings)739 4807 y(c)n(hange.)62 b(Once)36 b Fo(read)f Fr(resolv)n(es)f(a)i(use)g(of)h(a)f(name)g(to)g(a)g(sym)n (b)r(ol,)i(that)f(resolution)e(is)739 4907 y(\014xed,)j(so)d(a)h(c)n (hange)f(in)h(the)g(w)n(a)n(y)f(that)h(a)g(name)g(resolv)n(es)e(to)i(a) f(sym)n(b)r(ol)h(can)f(only)h(b)r(e)739 5006 y(re\015ected)27 b(b)n(y)h(re-)p Fo(read)p Fr(ing)c(all)k(suc)n(h)f(references.)p Black 2130 5255 a(30)p Black eop end %%Page: 31 39 TeXDict begin 31 38 bop 0 TeXcolorgray Black Black Black 415 523 a Fr(The)19 b(Sc)n(heme)g(48)f(dev)n(elopmen)n(t)g(en)n (vironmen)n(t)g(supp)r(orts)h(rapid)f(turnaround)g(in)h(mo)r(d-)291 623 y(ular)25 b(program)g(dev)n(elopmen)n(t)h(b)n(y)g(allo)n(wing)f(m)n (utations)i(to)f(a)g(program's)e(con\014guration,)291 722 y(and)j(giving)g(a)g(clear)f(seman)n(tics)h(to)g(suc)n(h)h(m)n (utations.)36 b(The)28 b(rule)f(is)g(that)h(v)-5 b(ariable)27 b(bind-)291 822 y(ings)33 b(in)h(a)g(running)f(program)f(are)h(alw)n(a) n(ys)f(resolv)n(ed)g(according)h(to)g(curren)n(t)g(structure)291 922 y(and)28 b(in)n(terface)g(bindings,)h(ev)n(en)g(when)f(these)h (bindings)g(c)n(hange)f(as)g(a)g(result)g(of)h(edits)g(to)291 1021 y(the)f(con\014guration.)35 b(F)-7 b(or)27 b(example,)g(consider)g (the)h(follo)n(wing:)p Black Black 291 1189 a Fo(\(define-interfa)o(ce) 37 b(foo-interface)h(\(export)j(a)i(c\)\))291 1289 y(\(define-structu)o (re)37 b(foo)42 b(foo-interface)378 1389 y(\(open)f(scheme\))378 1488 y(\(begin)g(\(define)g(a)i(1\))683 1588 y(\(define)e(\(b)h(x\))h (\(+)g(a)g(x\)\))683 1687 y(\(define)e(\(c)h(y\))h(\(*)g(\(b)g(a\))f (y\)\)\)\))291 1787 y(\(define-structu)o(re)37 b(bar)42 b(\(export)f(d\))378 1887 y(\(open)g(scheme)g(foo\))378 1986 y(\(begin)g(\(define)g(\(d)h(w\))h(\(+)g(\(b)g(w\))f(a\)\)\)\))291 2154 y Fr(This)24 b(program)f(has)h(a)g(bug.)36 b(The)25 b(v)-5 b(ariable)23 b Fo(b)p Fr(,)i(whic)n(h)g(is)f(free)h(in)g(the)g (de\014nition)g(of)f Fo(d)p Fr(,)h(has)291 2254 y(no)30 b(binding)i(in)f Fo(bar)p Fr('s)f(pac)n(k)-5 b(age.)46 b(Supp)r(ose)31 b(that)h Fo(b)f Fr(w)n(as)f(supp)r(osed)h(to)g(b)r(e)g (exp)r(orted)g(b)n(y)291 2353 y Fo(foo)p Fr(,)g(but)h(w)n(as)f(omitted) h(from)f Fo(foo-interface)26 b Fr(b)n(y)31 b(mistak)n(e.)48 b(It)32 b(is)g(not)f(necessary)f(to)291 2453 y(re-pro)r(cess)23 b Fo(bar)h Fr(or)g(an)n(y)g(of)i Fo(foo)p Fr('s)e(other)g(clien)n(ts)h (at)g(this)h(p)r(oin)n(t.)36 b(One)25 b(need)g(only)g(c)n(hange)291 2552 y Fo(foo-interface)c Fr(and)26 b(inform)g(the)h(dev)n(elopmen)n(t) f(system)h(of)f(that)h(c)n(hange)e(\(using,)i(sa)n(y)-7 b(,)291 2652 y(an)33 b(appropriate)e(Emacs)h(command\),)j(and)e Fo(foo)p Fr('s)f(binding)i(of)f Fo(b)g Fr(will)g(b)r(e)h(found)g(when) 291 2752 y(pro)r(cedure)26 b Fo(d)h Fr(is)h(called.)415 2852 y(Similarly)-7 b(,)23 b(it)g(is)f(also)f(p)r(ossible)h(to)g (replace)f(a)h(structure;)i(clien)n(ts)e(of)g(the)g(old)g(structure)291 2952 y(will)k(b)r(e)h(mo)r(di\014ed)g(so)f(that)h(they)g(see)f (bindings)g(from)h(the)f(new)h(one.)36 b(Shado)n(wing)26 b(is)g(also)291 3051 y(supp)r(orted)h(in)h(the)g(same)f(w)n(a)n(y)-7 b(.)36 b(Supp)r(ose)28 b(that)g(a)f(clien)n(t)h(pac)n(k)-5 b(age)26 b Fc(C)34 b Fr(op)r(ens)27 b(a)g(structure)291 3151 y Fo(foo)32 b Fr(that)i(exp)r(orts)f(a)h(name)f Fo(x)p Fr(,)i(and)f Fo(foo)p Fr('s)f(implemen)n(tation)g(obtains)h(the) g(binding)g(of)291 3250 y Fo(x)g Fr(as)g(an)h(imp)r(ort)g(from)g(some)f (other)g(structure)h Fo(bar)p Fr(.)57 b(Then)35 b Fc(C)42 b Fr(will)35 b(see)f(the)i(binding)291 3350 y(from)31 b Fo(bar)p Fr(.)46 b(If)32 b(one)f(then)h(alters)e Fo(foo)g Fr(so)h(that)g(it)h(shado)n(ws)e Fo(bar)p Fr('s)g(binding)h(of)h Fo(x)f Fr(with)g(a)291 3450 y(de\014nition)g(of)g(its)f(o)n(wn,)i(then) f(pro)r(cedures)e(in)i Fc(C)38 b Fr(that)31 b(reference)f Fo(x)g Fr(will)h(automatically)291 3549 y(see)c Fo(foo)p Fr('s)f(de\014nition)i(instead)f(of)h(the)g(one)f(from)g Fo(bar)g Fr(that)h(they)g(sa)n(w)e(earlier.)415 3649 y(This)31 b(seman)n(tics)g(migh)n(t)g(app)r(ear)f(to)h(require)f(a)h (large)f(amoun)n(t)g(of)h(computation)g(on)291 3749 y(ev)n(ery)23 b(v)-5 b(ariable)23 b(reference:)35 b(The)24 b(sp)r(eci\014ed)h(b)r (eha)n(vior)e(requires)g(scanning)h(the)h(pac)n(k)-5 b(age's)291 3849 y(list)23 b(of)g(op)r(ened)f(structures,)i(examining)e (their)h(in)n(terfaces,)g(on)f(ev)n(ery)g(v)-5 b(ariable)22 b(reference,)291 3948 y(not)29 b(just)g(at)g(compile)g(time.)42 b(Ho)n(w)n(ev)n(er,)28 b(the)i(dev)n(elopmen)n(t)e(en)n(vironmen)n(t)g (uses)h(cac)n(hing)291 4048 y(with)f(cac)n(he)e(in)n(v)-5 b(alidation)27 b(to)h(mak)n(e)f(v)-5 b(ariable)26 b(references)h(fast.) 291 4325 y Fj(4.8)135 b(Command)45 b(pro)t(cessor)g(supp)t(ort)291 4508 y Fr(While)24 b(it)h(is)e(p)r(ossible)h(to)g(use)g(the)g(Sc)n (heme)g(48)f(static)h(link)n(er)f(for)h(program)d(dev)n(elopmen)n(t,) 291 4608 y(it)30 b(is)h(far)f(more)f(con)n(v)n(enien)n(t)h(to)g(use)g (the)h(dev)n(elopmen)n(t)f(en)n(vironmen)n(t,)g(whic)n(h)g(supp)r(orts) 291 4707 y(rapid)25 b(turnaround)g(for)h(program)e(c)n(hanges.)34 b(The)27 b(programmer)c(in)n(teracts)i(with)i(the)f(de-)291 4807 y(v)n(elopmen)n(t)21 b(en)n(vironmen)n(t)g(through)g(a)g Fq(c)l(ommand)k(pr)l(o)l(c)l(essor)p Fr(.)36 b(The)22 b(command)f(pro)r(cessor)291 4907 y(is)f(lik)n(e)g(the)h(usual)f(Lisp)g (read-ev)-5 b(al-prin)n(t)18 b(lo)r(op)i(in)h(that)g(it)f(accepts)g(Sc) n(heme)g(forms)g(to)g(ev)-5 b(al-)291 5006 y(uate.)36 b(Ho)n(w)n(ev)n(er,)26 b(all)h(meta-lev)n(el)f(op)r(erations,)g(suc)n (h)h(as)g(exiting)g(the)h(Sc)n(heme)f(system)g(or)p Black 1681 5255 a(31)p Black eop end %%Page: 32 40 TeXDict begin 32 39 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(requests)25 b(for)h(trace)f(output,)i(are)e(handled)h(b)n (y)g Fq(c)l(ommands,)i Fr(whic)n(h)e(are)f(lexically)g(distin-)739 623 y(guished)h(from)g(Sc)n(heme)g(forms.)36 b(This)27 b(arrangemen)n(t)d(is)i(b)r(orro)n(w)n(ed)f(from)h(the)h(Sym)n(b)r (olics)739 722 y(Lisp)c(Mac)n(hine)g(system,)i(and)e(is)h(reminiscen)n (t)f(of)g(non-Lisp)g(debuggers.)34 b(Commands)23 b(are)739 822 y(a)35 b(little)h(easier)e(to)h(t)n(yp)r(e)g(than)g(Sc)n(heme)g (forms)g(\(no)g(paren)n(theses,)h(so)f(y)n(ou)f(don't)h(ha)n(v)n(e)739 922 y(to)c(shift\),)j(but)e(more)f(imp)r(ortan)n(tly)-7 b(,)32 b(making)f(them)h(distinct)h(from)e(Sc)n(heme)g(forms)g(en-)739 1021 y(sures)d(that)i(programs')d(namespaces)h(aren't)h(cluttered)h (with)f(inappropriate)f(bindings.)739 1121 y(Equiv)-5 b(alen)n(tly)e(,)30 b(the)h(command)f(set)g(is)g(a)n(v)-5 b(ailable)29 b(for)h(use)g(regardless)e(of)i(what)g(bindings)739 1220 y(happ)r(en)35 b(to)f(b)r(e)h(visible)g(in)g(the)g(curren)n(t)f (program.)55 b(This)35 b(is)g(esp)r(ecially)f(imp)r(ortan)n(t)g(in)739 1320 y(conjunction)29 b(with)h(the)f(mo)r(dule)h(system,)f(whic)n(h)g (puts)h(strict)f(con)n(trols)e(on)i(visibilit)n(y)g(of)739 1420 y(bindings.)863 1519 y(The)f(Sc)n(heme)g(48)f(command)g(pro)r (cessor)e(supp)r(orts)j(the)g(mo)r(dule)g(system)f(with)h(a)g(v)-5 b(a-)739 1619 y(riet)n(y)29 b(of)g(sp)r(ecial)h(commands.)42 b(F)-7 b(or)29 b(commands)g(that)h(require)e(structure)h(names,)h (these)739 1719 y(names)g(are)f(resolv)n(ed)g(in)i(a)f(designated)g (con\014guration)f(pac)n(k)-5 b(age)28 b(that)j(is)f(distinct)i(from) 739 1818 y(the)26 b(curren)n(t)e(pac)n(k)-5 b(age)24 b(for)h(ev)-5 b(aluating)24 b(Sc)n(heme)h(forms)g(giv)n(en)g(to)g(the)h (command)e(pro)r(ces-)739 1918 y(sor.)54 b(The)33 b(command)g(pro)r (cessor)f(in)n(terprets)g(Sc)n(heme)i(forms)f(in)h(a)f(particular)f (curren)n(t)739 2017 y(pac)n(k)-5 b(age,)30 b(and)i(there)f(are)f (commands)g(that)i(mo)n(v)n(e)e(the)h(command)g(pro)r(cessor)e(b)r(et)n (w)n(een)739 2117 y(di\013eren)n(t)f(pac)n(k)-5 b(ages.)863 2217 y(Commands)41 b(are)f(in)n(tro)r(duced)h(b)n(y)g(a)g(comma)f(\()p Fo(,)p Fr(\))45 b(and)c(end)g(at)g(the)h(end)f(of)g(line.)739 2316 y(The)30 b(command)g(pro)r(cessor's)e(prompt)i(consists)f(of)h (the)h(name)f(of)g(the)g(curren)n(t)g(pac)n(k)-5 b(age)739 2416 y(follo)n(w)n(ed)26 b(b)n(y)i(a)f(greater-than)e(\()p Fo(>)p Fr(\).)p Black Black 780 2569 a Fo(,open)42 b Fq(structur)l(e)1370 2539 y Fd(\003)946 2669 y Fr(The)33 b Fo(,open)e Fr(command)h(op)r(ens)h(new)g(structures)f(in)h(the)g (curren)n(t)f(pac)n(k)-5 b(age,)33 b(as)f(if)946 2768 y(the)e(pac)n(k)-5 b(age's)28 b(de\014nition's)h Fo(open)f Fr(clause)h(had)g(listed)h Fq(structur)l(e)6 b Fr(.)40 b(As)30 b(with)g Fo(open)946 2868 y Fr(clauses)d(the)h(visible)g(names) f(can)g(b)r(e)h(mo)r(di\014ed,)g(as)f(in)p Black Black 946 3038 a Fo(,open)42 b(\(subset)f(foo)h(\(bar)g(baz\)\))946 3208 y Fr(whic)n(h)28 b(only)f(mak)n(es)g(the)h Fo(bar)e Fr(and)i Fo(baz)e Fr(bindings)i(from)f(structure)g Fo(foo)f Fr(visible.)p Black Black 780 3362 a Fo(,config)946 3461 y Fr(The)i Fo(,config)d Fr(command)i(sets)h(the)g(command)f(pro)r (cessor's)e(curren)n(t)i(pac)n(k)-5 b(age)26 b(to)946 3561 y(b)r(e)40 b(the)f(curren)n(t)e(con\014guration)g(pac)n(k)-5 b(age.)69 b(F)-7 b(orms)38 b(en)n(tered)g(at)g(this)h(p)r(oin)n(t)g (are)946 3661 y(in)n(terpreted)28 b(as)e(b)r(eing)i(con\014guration)e (language)g(forms,)h(not)h(Sc)n(heme)f(forms.)p Black Black 780 3815 a Fo(,config)41 b Fq(c)l(ommand)946 3915 y Fr(This)d(form)f(of)g(the)h Fo(,config)c Fr(command)j(executes)g (another)f(command)h(in)h(the)946 4014 y(curren)n(t)27 b(con\014guration)f(pac)n(k)-5 b(age.)35 b(F)-7 b(or)27 b(example,)p Black Black 946 4184 a Fo(,config)41 b(,load)h(foo.scm)946 4354 y Fr(in)n(terprets)29 b(con\014guration)e(language)g(forms)h(from) h(the)g(\014le)g Fo(foo.scm)d Fr(in)k(the)f(cur-)946 4453 y(ren)n(t)f(con\014guration)e(pac)n(k)-5 b(age.)p Black Black 780 4608 a Fo(,config-package-i)o(s)38 b Fq(struct-name)946 4707 y Fr(The)23 b Fo(,config-package)o(-is)15 b Fr(command)22 b(designates)f(a)h(new)g(con\014guration)e(pac)n(k-)946 4807 y(age)29 b(for)h(use)g(b)n(y)f(the)h Fo(,config)e Fr(command)h(and)h(resolution)f(of)36 b Fq(struct-name)6 b Fr(s)29 b(for)946 4907 y(other)h(commands)g(suc)n(h)g(as)f Fo(,in)g Fr(and)h Fo(,open)p Fr(.)43 b(See)30 b(section)p 0 0 1 TeXcolorrgb 30 w(4.9)p Black 29 w(for)g(information)946 5006 y(on)e(making)f(new)g(con\014guration)f(pac)n(k)-5 b(ages.)p Black 2130 5255 a(32)p Black eop end %%Page: 33 41 TeXDict begin 33 40 bop 0 TeXcolorgray Black Black Black Black Black 332 523 a Fo(,in)42 b Fq(struct-name)498 623 y Fr(The)21 b Fo(,in)e Fr(command)h(mo)n(v)n(es)f(the)i(command)f (pro)r(cessor)e(to)i(a)g(sp)r(eci\014ed)h(structure's)498 722 y(underlying)27 b(pac)n(k)-5 b(age.)35 b(F)-7 b(or)27 b(example:)p Black Black 498 904 a Fo(user>)42 b(,config)498 1004 y(config>)f(\(define-structur)o(e)c(foo)43 b(\(export)d(a\))934 1104 y(\(open)i(scheme\)\))498 1203 y(config>)f(,in)h(foo)498 1303 y(foo>)g(\(define)f(a)i(13\))498 1402 y(foo>)f(a)498 1502 y(13)498 1684 y Fr(In)32 b(this)f(example)g(the)h(command)f(pro)r (cessor)e(starts)i(in)h(a)f(pac)n(k)-5 b(age)29 b(called)i Fo(user)p Fr(,)498 1784 y(but)25 b(the)f Fo(,config)d Fr(command)j(mo)n(v)n(es)e(it)j(in)n(to)e(the)i(con\014guration)d(pac)n (k)-5 b(age,)23 b(whic)n(h)498 1883 y(has)g(the)h(name)f Fo(config)p Fr(.)33 b(The)23 b Fo(define-structure)17 b Fr(form)23 b(binds,)h(in)g Fo(config)p Fr(,)e(the)498 1983 y(name)31 b Fo(foo)f Fr(to)h(a)f(structure)h(that)g(exp)r(orts)g Fo(a)p Fr(.)47 b(Finally)-7 b(,)32 b(the)f(command)g Fo(,in)42 b(foo)498 2083 y Fr(mo)n(v)n(es)26 b(the)i(command)g(pro)r (cessor)d(in)n(to)i(structure)g Fo(foo)p Fr('s)g(underlying)g(pac)n(k) -5 b(age.)498 2212 y(A)33 b(pac)n(k)-5 b(age's)31 b(b)r(o)r(dy)i(isn't) h(executed)f(\(ev)-5 b(aluated\))33 b(un)n(til)g(the)g(pac)n(k)-5 b(age)31 b(is)i Fq(lo)l(ade)l(d)p Fr(,)498 2312 y(whic)n(h)28 b(is)f(accomplished)g(b)n(y)g(the)h Fo(,load-package)23 b Fr(command.)p Black Black 332 2471 a Fo(,in)42 b Fq(struct-name)49 b(c)l(ommand)498 2571 y Fr(This)33 b(form)g(of)g(the)g Fo(,in)f Fr(command)h(executes)g(a)f(single)h(command)f(in)i(the)f(sp)r (ec-)498 2670 y(i\014ed)e(pac)n(k)-5 b(age)30 b(without)h(mo)n(ving)f (the)i(command)e(pro)r(cessor)f(in)n(to)i(that)g(pac)n(k)-5 b(age.)498 2770 y(Example:)p Black Black 498 2952 a Fo(,in)42 b(mumble)g(\(cons)f(1)i(2\))498 3051 y(,in)f(mumble)g(,trace)f(foo)p Black Black 332 3234 a(,user)h([)p Fq(c)l(ommand)9 b Fo(])498 3333 y Fr(This)22 b(is)f(similar)g(to)h(the)g Fo(,config)d Fr(and)j Fo(,in)e Fr(commands.)34 b(It)22 b(mo)n(v)n(es)f(to)g(or)g(executes)498 3433 y(a)33 b(command)g(in)g (the)h(user)f(pac)n(k)-5 b(age)31 b(\(whic)n(h)j(is)f(the)h(default)f (pac)n(k)-5 b(age)32 b(when)i(the)498 3532 y(Sc)n(heme)28 b(48)e(command)i(pro)r(cessor)d(starts\).)p Black Black 332 3692 a Fo(,user-package-is)37 b Fq(name)498 3791 y Fr(The)30 b Fo(,user-package-is)23 b Fr(command)29 b(designates)f(a)i(new)f(user)g(pac)n(k)-5 b(age)28 b(for)h(use)498 3891 y(b)n(y)e(the)h Fo(,user)e Fr(command.)p Black Black 332 4050 a Fo(,load-package)38 b Fq(struct-name)498 4150 y Fr(The)32 b Fo(,load-package)26 b Fr(command)31 b(ensures)g(that)h (the)g(sp)r(eci\014ed)g(structure's)f(un-)498 4249 y(derlying)h(pac)n (k)-5 b(age's)31 b(program)g(has)h(b)r(een)i(loaded.)52 b(This)32 b(consists)g(of)h(\(1\))g(recur-)498 4349 y(siv)n(ely)24 b(ensuring)f(that)i(the)g(pac)n(k)-5 b(ages)23 b(of)h(an)n(y)g(op)r (ened)g(or)g(accessed)f(structures)h(are)498 4449 y(loaded,)35 b(follo)n(w)n(ed)e(b)n(y)h(\(2\))g(executing)g(the)g(pac)n(k)-5 b(age's)32 b(b)r(o)r(dy)i(as)g(sp)r(eci\014ed)g(b)n(y)g(its)498 4548 y(de\014nition's)28 b Fo(begin)e Fr(and)h Fo(files)f Fr(forms.)p Black Black 332 4707 a Fo(,reload-package)37 b Fq(struct-name)498 4807 y Fr(This)30 b(command)g(re-executes)f(the)h (structure's)g(pac)n(k)-5 b(age's)28 b(program.)43 b(It)30 b(is)g(most)498 4907 y(useful)k(if)g(the)f(program)e(comes)i(from)g(a)g (\014le)g(or)g(\014les,)h(when)g(it)f(will)h(up)r(date)g(the)498 5006 y(pac)n(k)-5 b(age's)26 b(bindings)i(after)f(m)n(utations)g(to)g (its)h(source)f(\014le.)p Black 1681 5255 a(33)p Black eop end %%Page: 34 42 TeXDict begin 34 41 bop 0 TeXcolorgray Black Black Black Black Black 780 523 a Fo(,load)42 b Fq(\014lesp)l(e)l(c)49 b Fo(...)946 623 y Fr(The)29 b Fo(,load)e Fr(command)i(executes)f (forms)g(from)h(the)g(sp)r(eci\014ed)g(\014le)g(or)f(\014les)h(in)g (the)946 722 y(curren)n(t)19 b(pac)n(k)-5 b(age.)32 b Fo(,load)42 b Fq(\014lesp)l(e)l(c)24 b Fr(is)19 b(similar)f(to)h Fo(\(load)41 b(")p Fq(\014lesp)l(e)l(c)5 b Fo("\))18 b Fr(except)h(that)946 822 y(the)25 b(name)f Fo(load)f Fr(needn't)i(b)r(e)f(b)r(ound)h(in)f(the)h(curren)n(t)e(pac)n(k)-5 b(age)23 b(to)h(Sc)n(heme's)g Fo(load)946 922 y Fr(pro)r(cedure.)p Black Black 780 1088 a Fo(,for-syntax)39 b([)p Fq(c)l(ommand)9 b Fo(])946 1188 y Fr(This)22 b(is)g(similar)f(to)g(the)h Fo(,config)d Fr(and)j Fo(,in)e Fr(commands.)35 b(It)22 b(mo)n(v)n(es)e(to)i(or)f(executes)946 1288 y(a)34 b(command)g(in)g (the)g(curren)n(t)f(pac)n(k)-5 b(age's)33 b(\\pac)n(k)-5 b(age)31 b(for)j(syn)n(tax,")g(whic)n(h)g(is)g(the)946 1387 y(pac)n(k)-5 b(age)21 b(in)h(whic)n(h)g(the)g(forms)f Fc(f)31 b Fr(in)22 b Fo(\(define-syntax)38 b Fq(name)50 b(f)18 b Fo(\))k Fr(are)e(ev)-5 b(aluated.)p Black Black 780 1554 a Fo(,new-package)39 b([)p Fq(struct-name)48 b Fo(...])946 1654 y Fr(The)28 b Fo(,new-package)c Fr(command)j (creates)g(a)h(new)g(pac)n(k)-5 b(age)26 b(and)i(mo)n(v)n(es)f(the)h (com-)946 1754 y(mand)40 b(pro)r(cessor)e(to)h(it.)73 b(With)41 b(no)e(argumen)n(ts,)j(only)d(the)h(standard)e(Sc)n(heme)946 1853 y(bindings)32 b(are)e(visible)i(in)f(the)h(new)g(pac)n(k)-5 b(age.)46 b(Otherwise,)32 b(the)g(structures)f(sp)r(ec-)946 1953 y(i\014ed)h(as)e(command)h(argumen)n(ts)f(\(and)h(not)h(the)f Fo(scheme)e Fr(structure\))i(are)f(op)r(ened)946 2052 y(in)e(the)g(new)g(pac)n(k)-5 b(age.)p Black Black 780 2219 a Fo(,structure)40 b Fq(name)50 b(interfac)l(e)946 2319 y Fr(The)30 b Fo(,structure)25 b Fr(command)30 b(de\014nes)f Fq(name)36 b Fr(in)30 b(the)g(con\014guration)d(pac)n(k)-5 b(age)28 b(to)946 2419 y(b)r(e)g(a)g(structure)f(with)h(in)n(terface)f Fq(interfac)l(e)35 b Fr(based)27 b(on)g(the)h(curren)n(t)f(pac)n(k)-5 b(age.)739 2694 y Fj(4.9)135 b(Con\014guration)46 b(pac)l(k)-7 b(ages)739 2877 y Fr(It)29 b(is)g(p)r(ossible)f(to)h(set)g(up)g(m)n (ultiple)g(con\014guration)e(pac)n(k)-5 b(ages.)39 b(The)29 b(default)g(con\014gura-)739 2976 y(tion)f(pac)n(k)-5 b(age)26 b(op)r(ens)h(the)h(follo)n(wing)e(structures:)p Black 863 3143 a Fn(\017)p Black 41 w Fo(module-system)p Fr(,)20 b(whic)n(h)j(exp)r(orts)g Fo(define-structure)17 b Fr(and)24 b(the)g(other)f(con\014gu-)946 3242 y(ration)f(language)f (k)n(eyw)n(ords,)h(as)g(w)n(ell)g(as)g(standard)g(t)n(yp)r(es)h(and)f (t)n(yp)r(e)h(constructors)946 3342 y(\()p Fo(:syntax)p Fr(,)j Fo(:value)p Fr(,)f Fo(proc)p Fr(,)h(etc.\).)p Black 863 3509 a Fn(\017)p Black 41 w Fo(built-in-structur)o(es)p Fr(,)k(whic)n(h)k(exp)r(orts)f(structures)h(that)h(are)e(built)i(in)n (to)f(the)946 3609 y(initial)41 b(Sc)n(heme)g(48)e(image;)47 b(these)40 b(include)h Fo(scheme)p Fr(,)h Fo(threads)p Fr(,)f Fo(tables)p Fr(,)g(and)946 3708 y Fo(records)p Fr(.)p Black 863 3875 a Fn(\017)p Black 41 w Fo(more-structures)p Fr(,)j(whic)n(h)h(exp)r(orts)f(additional)g(structures)g(that)h(are)f (a)n(v)-5 b(ail-)946 3975 y(able)35 b(in)g(the)h(dev)n(elopmen)n(t)e (en)n(vironmen)n(t.)59 b(A)35 b(complete)g(listing)g(can)f(b)r(e)i (found)946 4074 y(in)h(the)f(de\014nition)h(of)42 b Fo (more-structures-i)o(nt)o(er)o(fac)o(e)30 b Fr(at)36 b(the)g(end)h(of)f(the)g(\014le)946 4174 y Fo(scheme/packages.s)o(cm)p Fr(.)739 4341 y(Note)28 b(that)f(it)h(do)r(es)g(not)f(op)r(en)h Fo(scheme)p Fr(.)863 4441 y(Y)-7 b(ou)28 b(can)g(de\014ne)g(additional) f(con\014guration)f(pac)n(k)-5 b(ages)26 b(b)n(y)h(making)g(a)h(pac)n (k)-5 b(age)26 b(that)739 4540 y(op)r(ens)18 b Fo(module-system)13 b Fr(and,)20 b(optionally)-7 b(,)20 b Fo(built-in-structu)o(re)o(s)p Fr(,)14 b Fo(more-structures)p Fr(,)739 4640 y(or)27 b(other)g(structures)f(that)i(exp)r(ort)f(structures)g(and)h(in)n (terfaces.)863 4740 y(F)-7 b(or)27 b(example:)p Black Black 739 4907 a Fo(>)43 b(,config)e(\(define-structur)o(e)c(foo)43 b(\(export\))1262 5006 y(\(open)e(module-system)p Black 2130 5255 a Fr(34)p Black eop end %%Page: 35 43 TeXDict begin 35 42 bop 0 TeXcolorgray Black Black Black 1075 523 a Fo(built-in-structur)o(es)1075 623 y(more-structures\)\))291 722 y(>)43 b(,in)f(foo)291 822 y(foo>)g(\(define-structu)o(re)37 b(x)43 b(\(export)e(a)i(b\))596 922 y(\(open)e(scheme\))596 1021 y(\(files)g(x\)\))291 1121 y(foo>)415 1288 y Fr(Unfortunately)-7 b(,)25 b(the)f(ab)r(o)n(v)n(e)f(example)h(do)r(es)f(not)h(w)n(ork.)34 b(The)25 b(problem)e(is)h(that)g(ev)n(ery)291 1387 y(en)n(vironmen)n(t) d(in)h(whic)n(h)g Fo(define-structure)16 b Fr(is)22 b(used)g(m)n(ust)g (also)f(ha)n(v)n(e)g(a)h(w)n(a)n(y)f(to)h(create)291 1487 y(\\syn)n(tactic)j(to)n(w)n(ers".)35 b(A)27 b(new)g(syn)n(tactic)f (to)n(w)n(er)g(is)g(required)g(whenev)n(er)g(a)h(new)f(en)n(viron-)291 1587 y(men)n(t)i(is)h(created)e(for)h(compiling)g(the)h(source)e(co)r (de)i(in)f(the)h(pac)n(k)-5 b(age)27 b(asso)r(ciated)g(with)i(a)291 1686 y(new)f(structure.)38 b(The)29 b(en)n(vironmen)n(t's)e(to)n(w)n (er)f(is)j(used)f(at)g(compile)g(time)h(for)f(ev)-5 b(aluating)291 1786 y(the)28 b Fq(macr)l(o-sour)l(c)l(e)34 b Fr(in)p Black Black 291 1953 a Fo(\(define-syntax)j Fq(name)50 b(macr)l(o-sour)l(c)l(e)6 b Fo(\))291 2053 y(\(let-syntax)39 b(\(\()p Fq(name)49 b(macr)l(o-sour)l(c)l(e)6 b Fo(\))43 b(...\))f Fq(b)l(o)l(dy)7 b Fo(\))291 2220 y Fr(and)23 b(so)g(forth.)36 b(It)24 b(is)f(a)h(\\to)n(w)n(er")d(b)r(ecause)i(that) h(en)n(vironmen)n(t,)g(in)g(turn,)h(has)e(to)g(sa)n(y)g(what)291 2319 y(en)n(vironmen)n(t)j(to)i(use)f(if)35 b Fo(macro-source)22 b Fr(itself)28 b(con)n(tains)f(a)g(use)h(of)34 b Fo(let-syntax)p Fr(.)415 2419 y(The)26 b(simplest)f(w)n(a)n(y)g(to)g(pro)n(vide)f(a)h (to)n(w)n(er)g(mak)n(er)f(is)h(to)h(pass)e(on)h(the)h(one)g(used)f(b)n (y)g(an)291 2519 y(existing)18 b(con\014guration)e(pac)n(k)-5 b(age.)33 b(The)18 b(sp)r(ecial)g(form)g Fo(export-syntactic)o(-to)o (we)o(r-m)o(ak)o(er)291 2618 y Fr(creates)23 b(an)h(in)n(terface)g (that)g(exp)r(orts)g(a)g(con\014guration)f(pac)n(k)-5 b(age's)22 b(to)n(w)n(er.)35 b(The)24 b(follo)n(wing)291 2718 y(example)i(uses)h Fo(export-syntactic)o(-t)o(ow)o(er-)o(ma)o(ker) 20 b Fr(and)27 b(the)g Fo(,structure)c Fr(command)291 2818 y(to)k(obtain)g(a)h(to)n(w)n(er)e(mak)n(er)g(and)h(create)g(a)g (new)h(con\014guration)e(en)n(vironmen)n(t.)p Black Black 291 3002 a Fo(>)43 b(,config)d(,structure)g(t)j(\(export-syntacti)o (c-t)o(ow)o(er-)o(ma)o(ke)o(r\))291 3101 y(>)g(,config)d (\(define-structure)d(foo)42 b(\(export\))814 3201 y(\(open)f (module-system)1075 3300 y(t)1075 3400 y(built-in-structur)o(es)1075 3500 y(more-structures\)\))415 3684 y Fr(Before)18 b(Sc)n(heme)g(48)f (1.9,)j Fo(export-syntactic)o(-t)o(ow)o(er-)o(ma)o(ker)12 b Fr(w)n(as)17 b(named)h Fo(export-reflective)o(-t)o(owe)o(r-)o(ma)o (ker)o Fr(;)291 3783 y(this)27 b(name)h(is)f(still)h(supp)r(orted)g (for)f(bac)n(kw)n(ards)e(compatibilit)n(y)-7 b(.)291 4059 y Fj(4.10)135 b(Discussion)291 4242 y Fr(This)25 b(mo)r(dule)h(system)g(w)n(as)f(not)h(designed)f(as)g(the)h(b)r(e-all)g (and)f(end-all)h(of)f(Sc)n(heme)h(mo)r(d-)291 4341 y(ule)35 b(systems;)j(it)d(w)n(as)f(only)g(in)n(tended)h(to)g(help)g(us)g (organize)e(the)i(Sc)n(heme)g(48)f(system.)291 4441 y(Not)h(only)g(do)r (es)g(the)g(mo)r(dule)h(system)f(help)h(a)n(v)n(oid)d(name)i(clashes)g (b)n(y)g(k)n(eeping)f(di\013er-)291 4540 y(en)n(t)39 b(subsystems)g(in)h(di\013eren)n(t)g(namespaces,)i(it)e(has)f(also)f (help)r(ed)j(us)e(to)h(tigh)n(ten)g(up)291 4640 y(and)c(generalize)f (Sc)n(heme)i(48's)e(in)n(ternal)h(in)n(terfaces.)63 b(Sc)n(heme)37 b(48)e(is)i(un)n(usual)f(among)291 4740 y(Lisp)26 b(implemen)n(tations) h(in)g(admitting)g(man)n(y)g(di\013eren)n(t)g(p)r(ossible)f(mo)r(des)h (of)g(op)r(eration.)291 4839 y(Examples)f(of)i(suc)n(h)f(m)n(ultiple)h (mo)r(des)g(include)f(the)h(follo)n(wing:)p Black 415 5006 a Fn(\017)p Black 41 w Fr(Linking)f(can)h(b)r(e)g(either)f(static) h(or)e(dynamic.)p Black 1681 5255 a(35)p Black eop end %%Page: 36 44 TeXDict begin 36 43 bop 0 TeXcolorgray Black Black Black Black 863 523 a Fn(\017)p Black 41 w Fr(The)22 b(dev)n(elopmen)n(t)f (en)n(vironmen)n(t)f(\(compiler,)j(debugger,)e(and)g(command)g(pro)r (ces-)946 623 y(sor\))k(can)g(run)g(either)g(in)h(the)g(same)e(address) g(space)h(as)g(the)g(program)f(b)r(eing)h(dev)n(el-)946 722 y(op)r(ed)30 b(or)e(in)h(a)g(di\013eren)n(t)g(address)f(space.)41 b(The)29 b(en)n(vironmen)n(t)f(and)h(user)f(program)946 822 y(ma)n(y)c(ev)n(en)g(run)g(on)g(di\013eren)n(t)g(pro)r(cessors)e (under)i(di\013eren)n(t)h(op)r(erating)e(systems[)p 0 0 1 TeXcolorrgb(8)p Black -1 w(].)p Black 863 1012 a Fn(\017)p Black 41 w Fr(The)32 b(virtual)e(mac)n(hine)h(can)g(b)r(e)g(supp)r (orted)g(b)n(y)g(either)g(of)g(t)n(w)n(o)f(implemen)n(tations)946 1112 y(of)e(its)g(implemen)n(tation)f(language,)f(Presc)n(heme.)739 1296 y(The)34 b(mo)r(dule)g(system)f(has)g(b)r(een)h(helpful)h(in)f (organizing)d(these)j(m)n(ultiple)g(mo)r(des.)56 b(By)739 1396 y(forcing)19 b(us)h(to)g(write)g(do)n(wn)f(in)n(terfaces)h(and)f (mo)r(dule)i(dep)r(endencies,)h(the)e(mo)r(dule)g(system)739 1495 y(helps)k(us)h(to)f(k)n(eep)g(the)g(system)g(clean,)h(or)e(at)h (least)g(to)h(k)n(eep)e(us)i(honest)f(ab)r(out)g(ho)n(w)g(clean)739 1595 y(or)j(not)g(it)h(is.)863 1700 y(The)c(need)f(to)g(mak)n(e)f (structures)h(and)f(in)n(terfaces)h(second-class)e(instead)i(of)g (\014rst-class)739 1800 y(results)g(from)g(the)h(requiremen)n(ts)f(of)h (static)f(program)f(analysis:)33 b(it)25 b(m)n(ust)e(b)r(e)h(p)r (ossible)g(for)739 1900 y(the)30 b(compiler)e(and)i(link)n(er)e(to)i (expand)f(macros)f(and)h(resolv)n(e)f(v)-5 b(ariable)28 b(bindings)i(b)r(efore)739 1999 y(the)24 b(program)d(is)j(executed.)36 b(Structures)23 b(could)g(b)r(e)h(made)g(\014rst-class)e(\(as)h(in)h (FX[)p 0 0 1 TeXcolorrgb(10)p Black -1 w(]\))h(if)f(a)739 2099 y(t)n(yp)r(e)i(system)f(w)n(ere)f(added)i(to)f(Sc)n(heme)g(and)g (the)h(de\014nitions)g(of)f(exp)r(orted)g(macros)f(w)n(ere)739 2199 y(de\014ned)33 b(in)h(in)n(terfaces)e(instead)h(of)g(in)h(mo)r (dule)f(b)r(o)r(dies,)i(but)e(ev)n(en)g(in)h(that)f(case)f(t)n(yp)r(es) 739 2298 y(and)27 b(in)n(terfaces)g(w)n(ould)g(remain)g(second-class.) 863 2404 y(The)34 b(prohibition)f(on)g(assignmen)n(t)f(to)i(imp)r (orted)f(bindings)g(mak)n(es)g(substitution)h(a)739 2503 y(v)-5 b(alid)31 b(optimization)f(when)h(a)g(mo)r(dule)g(is)f(compiled) h(as)f(a)h(blo)r(c)n(k.)46 b(The)31 b(blo)r(c)n(k)f(compiler)739 2603 y(\014rst)f(scans)f(the)i(en)n(tire)f(mo)r(dule)h(b)r(o)r(dy)-7 b(,)30 b(noting)f(whic)n(h)g(v)-5 b(ariables)29 b(are)f(assigned.)41 b(Those)739 2703 y(that)20 b(aren't)g(assigned)e(\(only)i Fo(define)p Fr(d\))e(ma)n(y)i(b)r(e)g(assumed)g(nev)n(er)f(assigned,)h (ev)n(en)g(if)g(they)739 2802 y(are)j(exp)r(orted.)35 b(The)24 b(optimizer)f(can)g(then)i(p)r(erform)e(a)g(v)n(ery)g (simple-minded)h(analysis)e(to)739 2902 y(determine)30 b(automatically)f(that)h(some)f(pro)r(cedures)g(can)g(and)h(should)f (ha)n(v)n(e)g(their)h(calls)739 3002 y(compiled)d(in)h(line.)863 3107 y(The)d(programming)e(st)n(yle)h(encouraged)f(b)n(y)h(the)h(mo)r (dule)g(system)g(is)g(consisten)n(t)f(with)739 3207 y(the)j(unextended) f(Sc)n(heme)g(language.)35 b(Because)25 b(mo)r(dule)i(system)f (features)g(do)g(not)g(gen-)739 3307 y(erally)f(sho)n(w)f(up)i(within)h (mo)r(dule)f(b)r(o)r(dies,)g(an)g(individual)f(mo)r(dule)h(ma)n(y)f(b)r (e)i(understo)r(o)r(d)739 3406 y(b)n(y)g(someone)g(who)h(is)f(not)h (familiar)f(with)i(the)f(mo)r(dule)g(system.)37 b(This)28 b(is)g(a)f(great)g(aid)g(to)739 3506 y(co)r(de)g(presen)n(tation)f(and) h(p)r(ortabilit)n(y)-7 b(.)36 b(If)28 b(a)f(few)g(simple)h(conditions)e (are)h(met)g(\(no)g(name)739 3605 y(con\015icts)34 b(b)r(et)n(w)n(een)h (pac)n(k)-5 b(ages,)34 b(and)g(use)h(of)f Fo(files)e Fr(in)j(preference)f(to)g Fo(begin)p Fr(\),)h(then)g(a)739 3705 y(m)n(ulti-mo)r(dule)30 b(program)e(can)i(b)r(e)g(loaded)g(in)n (to)g(a)f(Sc)n(heme)h(implemen)n(tation)g(that)h(do)r(es)739 3805 y(not)24 b(supp)r(ort)g(the)g(mo)r(dule)g(system.)36 b(The)24 b(Sc)n(heme)g(48)f(static)h(link)n(er)f(satis\014es)g(these)h (con-)739 3904 y(ditions,)32 b(and)g(can)f(therefore)g(run)g(in)h (other)f(Sc)n(heme)g(implemen)n(tations.)49 b(Sc)n(heme)31 b(48's)739 4004 y(b)r(o)r(otstrap)19 b(pro)r(cess,)h(whic)n(h)g(is)g (based)g(on)f(the)h(static)g(link)n(er,)h(is)f(therefore)f (nonincestuous.)739 4104 y(This)28 b(con)n(trasts)f(with)j(most)e (other)g(in)n(tegrated)g(programming)e(en)n(vironmen)n(ts,)i(suc)n(h)g (as)739 4203 y(Smalltalk-80,)33 b(where)f(the)i(system)e(can)h(only)g (b)r(e)g(built)h(using)e(an)h(existing)g(v)n(ersion)e(of)739 4303 y(the)d(system)f(itself.)863 4408 y(Lik)n(e)34 b(ML)g(mo)r(dules,) h(but)g(unlik)n(e)f(Sc)n(heme)g(Xero)n(x)e(mo)r(dules,)k(this)e(mo)r (dule)g(system)739 4508 y(is)e(comp)r(ositional.)48 b(That)32 b(is,)h(structures)e(are)g(constructed)h(b)n(y)f(single)h(syn)n(tactic) f(units)739 4608 y(that)j(comp)r(ose)f(existing)g(structures)g(with)h (a)f(b)r(o)r(dy)h(of)f(co)r(de.)55 b(In)33 b(Sc)n(heme)h(Xero)n(x,)g (the)739 4707 y(set)25 b(of)h(mo)r(dules)f(that)h(can)f(con)n(tribute)g (to)h(an)f(in)n(terface)g(is)g(op)r(en-ended)h(|)f(an)n(y)g(mo)r(dule) 739 4807 y(can)30 b(con)n(tribute)h(bindings)g(to)f(an)n(y)h(in)n (terface)f(whose)g(name)h(is)g(in)g(scop)r(e.)46 b(The)31 b(mo)r(dule)739 4907 y(system)25 b(implemen)n(tation)h(is)f(a)g (cross-bar)e(that)j(c)n(hannels)f(de\014nitions)h(from)f(mo)r(dules)g (to)739 5006 y(in)n(terfaces.)35 b(The)25 b(mo)r(dule)h(system)e (describ)r(ed)h(here)g(has)f(simpler)h(seman)n(tics)f(and)h(mak)n(es)p Black 2130 5255 a(36)p Black eop end %%Page: 37 45 TeXDict begin 37 44 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(dep)r(endencies)38 b(easier)f(to)h(trace.)68 b(It)39 b(also)e(allo)n(ws)g(for)g(higher-order)f(mo)r(dules,)41 b(whic)n(h)291 623 y(Sc)n(heme)27 b(Xero)n(x)f(considers)h(unimp)r (ortan)n(t.)p Black 1681 5255 a(37)p Black eop end %%Page: 38 46 TeXDict begin 38 45 bop 0 TeXcolorgray Black Black Black 739 1146 a Fl(Chapter)65 b(5)739 1561 y Fp(Libraries)739 1993 y Fr(Use)28 b(the)h Fo(,open)d Fr(command)i(\(section)p 0 0 1 TeXcolorrgb 29 w(3.4)p Black(\))f(or)h(the)g(mo)r(dule)h (language)e(\(c)n(hapter)p 0 0 1 TeXcolorrgb 28 w(2.6)p Black(\))g(to)739 2093 y(op)r(en)h(the)g(structures)e(describ)r(ed)i(b) r(elo)n(w.)739 2369 y Fj(5.1)135 b(General)46 b(utilities)739 2552 y Fr(These)27 b(are)g(in)h(the)g Fo(big-util)c Fr(structure.)p Black 755 2702 a Fn(\017)p Black 42 w Fo(\(atom?)47 b Fq(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)739 2852 y Fo(\(atom?)85 b Fq(x)9 b Fo(\))27 b Fr(is)h(the)g(same)f(as)g Fo(\(not)42 b(\(pair?)84 b Fq(x)10 b Fo(\)\))p Fr(.)p Black 755 3003 a Fn(\017)p Black 42 w Fo(\(null-list?)45 b Fq(list)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)739 3153 y Fr(Returns)27 b(true)g(for)g(the)h(empt)n(y)f(list,)h(false)f (for)g(a)g(pair,)f(and)i(signals)e(an)h(error)e(otherwise.)p Black 755 3303 a Fn(\017)p Black 42 w Fo(\(neq?)47 b Fq(value)c(value)6 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)739 3454 y Fo(\(neq?)85 b Fq(x)53 b(y)8 b Fo(\))27 b Fr(is)g(the)h(same)f (as)g Fo(\(not)42 b(\(eq?)86 b Fq(x)53 b(y)8 b Fo(\)\))p Fr(.)p Black 755 3604 a Fn(\017)p Black 42 w Fo(\(n=)40 b Fq(numb)l(er)h(numb)l(er)9 b Fo(\))40 b Fn(!)h Fq(b)l(o)l(ole)l(an) 739 3754 y Fo(\(n=)h Fq(x)53 b(y)8 b Fo(\))27 b Fr(is)h(the)g(same)f (as)g Fo(\(not)42 b(\(=)g Fq(x)53 b(y)8 b Fo(\)\))p Fr(.)p Black 755 3905 a Fn(\017)p Black 42 w Fo(\(identity)37 b Fq(value)6 b Fo(\))42 b Fn(!)g Fq(value)p Black 755 4004 a Fn(\017)p Black 42 w Fo(\(no-op)d Fq(value)6 b Fo(\))41 b Fn(!)h Fq(value)739 4155 y Fr(These)24 b(b)r(oth)h(just)h (return)e(their)g(argumen)n(t.)35 b Fo(No-op)23 b Fr(is)h(guaran)n (teed)f(not)i(to)f(b)r(e)h(compiled)739 4254 y(in-line,)j Fo(identity)c Fr(ma)n(y)j(b)r(e.)p Black 755 4405 a Fn(\017)p Black 42 w Fo(\(memq?)47 b Fq(value)42 b(list)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)739 4555 y Fr(Returns)27 b(true)h(if)g Fq(value)34 b Fr(is)28 b(in)g Fq(list)8 b Fr(,)28 b(false)f(otherwise.)p Black 755 4706 a Fn(\017)p Black 42 w Fo(\(any?)47 b Fq(pr)l(e)l(dic)l(ate)c(list)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)739 4856 y Fr(Returns)27 b(true)h(if)g Fq(pr)l(e)l(dic)l(ate)35 b Fr(is)28 b(true)f(for)g(an)n (y)g(elemen)n(t)h(of)f Fq(list)8 b Fr(.)p Black 755 5006 a Fn(\017)p Black 42 w Fo(\(every?)47 b Fq(pr)l(e)l(dic)l(ate)42 b(list)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 2130 5255 a Fr(38)p Black eop end %%Page: 39 47 TeXDict begin 39 46 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(Returns)27 b(true)h(if)g Fq(pr)l(e)l(dic)l(ate)35 b Fr(is)27 b(true)h(for)f(ev)n(ery)f(elemen)n(t)i(of)f Fq(list)8 b Fr(.)p Black 307 684 a Fn(\017)p Black 41 w Fo(\(any)40 b Fq(pr)l(e)l(dic)l(ate)j(list)8 b Fo(\))41 b Fn(!)g Fq(value)p Black 307 783 a Fn(\017)p Black 41 w Fo(\(first)e Fq(pr)l(e)l(dic)l(ate)k(list)8 b Fo(\))41 b Fn(!)h Fq(value)291 944 y Fo(Any)25 b Fr(returns)g(some)h(elemen)n(t) g(of)g Fq(list)35 b Fr(for)25 b(whic)n(h)i Fq(pr)l(e)l(dic)l(ate)33 b Fr(is)26 b(true,)h(or)e(false)h(if)h(there)f(are)291 1044 y(none.)52 b Fo(First)32 b Fr(do)r(es)g(the)i(same)e(except)h (that)g(it)h(returns)e(the)i(\014rst)e(elemen)n(t)h(for)g(whic)n(h)291 1143 y Fq(pr)l(e)l(dic)l(ate)i Fr(is)27 b(true.)p Black 307 1304 a Fn(\017)p Black 41 w Fo(\(filter)39 b Fq(pr)l(e)l(dic)l(ate) k(list)8 b Fo(\))41 b Fn(!)g Fq(list)p Black 307 1403 a Fn(\017)p Black 41 w Fo(\(filter!)47 b Fq(pr)l(e)l(dic)l(ate)c(list)8 b Fo(\))41 b Fn(!)g Fq(list)291 1564 y Fr(Returns)30 b(a)f(list)i(con)n(taining)e(all)h(of)g(the)h(elemen)n(ts)f(of)g Fq(list)38 b Fr(for)30 b(whic)n(h)g Fq(pr)l(e)l(dic)l(ate)38 b Fr(is)30 b(true.)291 1664 y(The)d(order)f(of)i(the)g(elemen)n(ts)f (is)h(preserv)n(ed.)35 b Fo(Filter!)f Fr(ma)n(y)27 b(reuse)g(the)h (storage)e(of)h Fq(list)8 b Fr(.)p Black 307 1824 a Fn(\017)p Black 41 w Fo(\(filter-map)37 b Fq(pr)l(o)l(c)l(e)l(dur)l(e)42 b(list)8 b Fo(\))41 b Fn(!)h Fq(list)291 1985 y Fr(The)34 b(same)f(as)g Fo(filter)f Fr(except)i(the)g(returned)g(list)g(con)n (tains)f(the)h(results)g(of)g(applying)291 2084 y Fq(pr)l(o)l(c)l(e)l (dur)l(e)29 b Fr(instead)22 b(of)g(elemen)n(ts)h(of)f Fq(list)8 b Fr(.)36 b Fo(\(filter-map)j Fq(p)49 b(l)9 b Fo(\))22 b Fr(is)g(the)h(same)f(as)g Fo(\(filter)291 2184 y(identity)40 b(\(map)i Fq(p)49 b(l)9 b Fo(\)\))p Fr(.)p Black 307 2345 a Fn(\017)p Black 41 w Fo(\(partition-list)36 b Fq(pr)l(e)l(dic)l(ate)42 b(list)8 b Fo(\))41 b Fn(!)h Fq(list)g(list)p Black 307 2444 a Fn(\017)p Black 41 w Fo(\(partition-list!)i Fq(pr)l(e)l(dic)l(ate)e(list)8 b Fo(\))41 b Fn(!)h Fq(list)g(list)291 2605 y Fr(The)21 b(\014rst)f(return)h(v)-5 b(alue)20 b(con)n(tains)g(those)h(elemen)n (ts)g Fq(list)29 b Fr(for)20 b(whic)n(h)h Fq(pr)l(e)l(dic)l(ate)29 b Fr(is)20 b(true,)j(the)291 2705 y(second)f(con)n(tains)g(the)i (remaining)e(elemen)n(ts.)36 b(The)23 b(order)f(of)h(the)g(elemen)n(ts) g(is)h(preserv)n(ed.)291 2804 y Fo(Partition-list!)30 b Fr(ma)n(y)d(reuse)g(the)h(storage)e(of)h(the)h Fq(list)8 b Fr(.)p Black 307 2965 a Fn(\017)p Black 41 w Fo(\(remove-duplicate)o (s)35 b Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)291 3125 y Fr(Returns)32 b(its)g(argumen)n(t)g(with)h(all)f(duplicate)g(elemen)n (ts)h(remo)n(v)n(ed.)50 b(The)32 b(\014rst)g(instance)291 3225 y(of)27 b(eac)n(h)g(elemen)n(t)h(is)f(preserv)n(ed.)p Black 307 3386 a Fn(\017)p Black 41 w Fo(\(delq)40 b Fq(value)i(list)8 b Fo(\))41 b Fn(!)g Fq(list)p Black 307 3485 a Fn(\017)p Black 41 w Fo(\(delq!)48 b Fq(value)42 b(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 307 3585 a Fn(\017)p Black 41 w Fo(\(delete)d Fq(pr)l(e)l(dic)l(ate)k(list)8 b Fo(\))41 b Fn(!)g Fq(list)291 3746 y Fr(All)35 b(three)g(of)g(these)g (return)g Fq(list)43 b Fr(with)36 b(some)f(elemen)n(ts)g(remo)n(v)n (ed.)57 b Fo(Delq)34 b Fr(remo)n(v)n(es)f(all)291 3845 y(elemen)n(ts)22 b Fo(eq?)34 b Fr(to)22 b Fq(value)7 b Fr(.)35 b Fo(Delq!)e Fr(do)r(es)22 b(the)h(same)f(and)g(ma)n(y)g(mo)r (dify)h(the)f(list)h(argumen)n(t.)291 3945 y Fo(Delete)f Fr(remo)n(v)n(es)g(all)j(elemen)n(ts)f(for)g(whic)n(h)g Fq(pr)l(e)l(dic)l(ate)32 b Fr(is)25 b(true.)36 b(Both)24 b Fo(delq)f Fr(and)h Fo(delete)291 4044 y Fr(ma)n(y)i(reuse)h(some)g (of)h(the)g(storage)e(in)h(the)h(list)g(argumen)n(t,)f(but)h(w)n(on't)f (mo)r(dify)h(it.)p Black 307 4205 a Fn(\017)p Black 41 w Fo(\(reverse!)46 b Fq(list)8 b Fo(\))42 b Fn(!)f Fq(list)291 4366 y Fr(Destructiv)n(ely)27 b(rev)n(erses)e Fq(list)8 b Fr(.)p Black 307 4526 a Fn(\017)p Black 41 w Fo(\(concatenate-symb)o (ol)35 b Fq(value)42 b(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(symb)l(ol)291 4687 y Fr(Returns)30 b(the)i(sym)n(b)r(ol)e(whose)g (name)h(is)g(pro)r(duced)f(b)n(y)h(concatenating)e(the)j Fo(display)p Fr(ed)291 4787 y(represen)n(tations)25 b(of)j Fq(value)34 b Fr(.)14 b(.)g(.)g(.)p Black Black 291 4988 a Fo(\(concatenate-sy)o(mbo)o(l)37 b('abc)42 b("-")h(4\))f Fr(=)-14 b Fn(\))44 b Fo('abc-4)p Black 1681 5255 a Fr(39)p Black eop end %%Page: 40 48 TeXDict begin 40 47 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(5.2)135 b(Prett)l(y-prin)l(ting)739 705 y Fr(These)27 b(are)g(in)h(the)g Fo(pp)e Fr(structure.)p Black 755 847 a Fn(\017)p Black 42 w Fo(\(p)40 b Fq(value)6 b Fo(\))p Black 755 947 a Fn(\017)p Black 42 w Fo(\(p)40 b Fq(value)i(output-p)l(ort)8 b Fo(\))p Black 755 1046 a Fn(\017)p Black 42 w Fo(\(pretty-print)36 b Fq(value)42 b(output-p)l(ort)e(p)l(osition)6 b Fo(\))739 1189 y Fr(Prett)n(y-prin)n (t)43 b Fq(value)52 b Fr(The)45 b(curren)n(t)f(output)h(p)r(ort)g(is)f (used)h(if)g(no)g(p)r(ort)f(is)h(sp)r(eci\014ed.)739 1288 y Fq(Position)k Fr(is)40 b(the)i(starting)e(o\013set.)76 b Fq(V)-6 b(alue)47 b Fr(will)42 b(b)r(e)f(prett)n(y-prin)n(ted)f(to)h (the)g(righ)n(t)f(of)739 1388 y(this)28 b(column.)739 1661 y Fj(5.3)135 b(Bit)l(wise)47 b(in)l(teger)f(op)t(erations)739 1843 y Fr(These)27 b(functions)h(use)f(the)h(t)n(w)n(o's-complemen)n(t) d(represen)n(tation)h(for)h(in)n(tegers.)36 b(There)26 b(is)739 1943 y(no)d(limit)h(to)g(the)g(n)n(um)n(b)r(er)f(of)g(bits)h (in)g(an)f(in)n(teger.)35 b(They)23 b(are)g(in)g(the)h(structures)f Fo(bitwise)739 2042 y Fr(and)k Fo(big-scheme)p Fr(.)p Black 755 2185 a Fn(\017)p Black 42 w Fo(\(bitwise-and)36 b Fq(inte)l(ger)42 b(inte)l(ger)f(.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(inte)l(ger)p Black 755 2284 a Fn(\017)p Black 42 w Fo(\(bitwise-ior)36 b Fq(inte)l(ger)42 b(inte)l(ger)f(.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(inte)l(ger)p Black 755 2384 a Fn(\017)p Black 42 w Fo(\(bitwise-xor)36 b Fq(inte)l(ger)42 b(inte)l(ger)f(.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(inte)l(ger)p Black 755 2483 a Fn(\017)p Black 42 w Fo(\(bitwise-not)36 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)739 2626 y Fr(These)24 b(p)r(erform)g(v)-5 b(arious)24 b(logical)f(op)r(erations)g(on)i(in)n(tegers)e(on)h(a)h (bit-b)n(y-bit)f(basis.)35 b(`)p Fo(ior)p Fr(')739 2725 y(is)27 b(inclusiv)n(e)h(OR)f(and)g(`)p Fo(xor)p Fr(')g(is)g(exclusiv)n (e)g(OR.)p Black 755 2868 a Fn(\017)p Black 42 w Fo(\(arithmetic-shi)o (ft)35 b Fq(inte)l(ger)42 b(bit-c)l(ount)8 b Fo(\))40 b Fn(!)h Fq(inte)l(ger)739 3010 y Fr(Shifts)26 b(the)g(in)n(teger)f(b)n (y)g(the)h(giv)n(en)f(bit)h(coun)n(t,)g(whic)n(h)f(m)n(ust)h(b)r(e)g (an)f(in)n(teger,)h(shifting)g(left)739 3110 y(for)j(p)r(ositiv)n(e)f (coun)n(ts)h(and)g(righ)n(t)g(for)f(negativ)n(e)g(ones.)42 b(Shifting)30 b(preserv)n(es)d(the)i(in)n(teger's)739 3209 y(sign.)p Black 755 3352 a Fn(\017)p Black 42 w Fo(\(bit-count)37 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)739 3494 y Fr(Coun)n(ts)37 b(the)g(n)n(um)n(b)r(er)g(of)g (bits)g(set)g(in)h(the)f(in)n(teger.)65 b(If)37 b(the)h(argumen)n(t)e (is)h(negativ)n(e)f(a)739 3594 y(bit)n(wise)27 b(NOT)h(op)r(eration)e (is)i(p)r(erformed)f(b)r(efore)g(coun)n(ting.)739 3867 y Fj(5.4)135 b(Byte)45 b(v)l(ectors)739 4048 y Fr(These)38 b(are)f(homogeneous)f(v)n(ectors)g(of)i(small)g(in)n(tegers)e(\(0)k Fn(\024)g Fc(i)g Fn(\024)g Fr(255\).)67 b(The)38 b(func-)739 4148 y(tions)28 b(that)g(op)r(erate)g(on)f(them)i(are)e(analogous)f(to) i(those)g(for)f(v)n(ectors.)37 b(They)28 b(are)f(in)i(the)739 4248 y(structure)e Fo(byte-vectors)p Fr(.)p Black 755 4390 a Fn(\017)p Black 42 w Fo(\(byte-vector?)44 b Fq(value)6 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 4490 a Fn(\017)p Black 42 w Fo(\(make-byte-vect)o(or)35 b Fq(k)42 b(\014l)t(l)9 b Fo(\))41 b Fn(!)g Fq(byte-ve)l(ctor)p Black 755 4589 a Fn(\017)p Black 42 w Fo(\(byte-vector)36 b Fq(b)42 b(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(byte-ve)l(ctor)p Black 755 4689 a Fn(\017)p Black 42 w Fo(\(byte-vector-le)o(ng)o(th)35 b Fq(byte-ve)l(ctor)9 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)p Black 755 4789 a Fn(\017)p Black 42 w Fo(\(byte-vector-re)o(f)35 b Fq(byte-ve)l(ctor)42 b(k)9 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)p Black 755 4888 a Fn(\017)p Black 42 w Fo(\(byte-vector-se)o(t!)35 b Fq(byte-ve)l(ctor)42 b(k)g(b)5 b Fo(\))p Black 755 4988 a Fn(\017)p Black 42 w Fo(\(byte-vector=?)44 b Fq(byte-ve)l(ctor)e (byte-ve)l(ctor)9 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 2130 5255 a Fr(40)p Black eop end %%Page: 41 49 TeXDict begin 41 48 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(5.5)135 b(Sparse)45 b(v)l(ectors)291 705 y Fr(These)36 b(are)g(v)n(ectors)g(that)h(gro)n(w)e(as)i(large)e(as)i (they)g(need)g(to.)65 b(That)37 b(is,)j(they)d(can)g(b)r(e)291 805 y(indexed)c(b)n(y)g(arbitrarily)e(large)h(nonnegativ)n(e)f(in)n (tegers.)53 b(The)33 b(implemen)n(tation)g(allo)n(ws)291 904 y(for)h(arbitrarily)f(large)g(gaps)h(b)n(y)h(arranging)d(the)j(en)n (tries)g(in)g(a)f(tree.)59 b(They)34 b(are)g(in)i(the)291 1004 y(structure)27 b Fo(sparse-vectors)p Fr(.)p Black 307 1153 a Fn(\017)p Black 41 w Fo(\(make-sparse-vect)o(or)o(\))35 b Fn(!)42 b Fq(sp)l(arse-ve)l(ctor)p Black 307 1253 a Fn(\017)p Black 41 w Fo(\(sparse-vector-re)o(f)35 b Fq(sp)l(arse-ve)l (ctor)43 b(k)9 b Fo(\))41 b Fn(!)g Fq(value)p Black 307 1353 a Fn(\017)p Black 41 w Fo(\(sparse-vector-se)o(t!)35 b Fq(sp)l(arse-ve)l(ctor)42 b(k)g(value)6 b Fo(\))p Black 307 1452 a Fn(\017)p Black 41 w Fo(\(sparse-vector->l)o(is)o(t)35 b Fq(sp)l(arse-ve)l(ctor)9 b Fo(\))42 b Fn(!)g Fq(list)291 1602 y Fo(Make-sparse-vec)o(tor)o Fr(,)14 b Fo(sparse-vector-ref)o Fr(,)h(and)j Fo(sparse-vector-se)o(t!)27 b Fr(are)18 b(anal-)291 1701 y(ogous)40 b(to)i Fo(make-vector)p Fr(,)g Fo(vector-ref)p Fr(,)g(and)g Fo(vector-set!)p Fr(,)g(except)g(that)g (the)h(in-)291 1801 y(dices)38 b(passed)f(to)i Fo(sparse-vector-r)o(ef) 32 b Fr(and)38 b Fo(sparse-vector-set)o(!)63 b Fr(can)38 b(b)r(e)h(arbi-)291 1901 y(trarily)29 b(large.)43 b(F)-7 b(or)30 b(indices)g(whose)g(elemen)n(ts)g(ha)n(v)n(e)f(not)i(b)r(een)f (set)h(in)f(a)g(sparse)f(v)n(ector,)291 2000 y Fo(sparse-vector-r)o(ef) 21 b Fr(returns)27 b Fo(#f)p Fr(.)415 2100 y Fo(Sparse-vector->l)o(ist) 22 b Fr(is)28 b(for)g(debugging:)38 b(It)29 b(returns)f(a)g(list)h(of)g (the)g(consecutiv)n(e)291 2200 y(elemen)n(ts)35 b(in)g(a)g(sparse)f(v)n (ector)g(from)h(0)g(to)g(the)g(highest)h(elemen)n(t)f(that)g(has)g(b)r (een)h(set.)291 2299 y(Note)27 b(that)h(the)g(list)g(will)g(also)e (include)i(all)g(the)f Fo(#f)g Fr(elemen)n(ts)h(for)f(the)h(unset)g (elemen)n(ts.)291 2574 y Fj(5.6)135 b(Cells)291 2756 y Fr(These)29 b(hold)g(a)g(single)f(v)-5 b(alue)30 b(and)f(are)f (useful)i(when)f(a)g(simple)h(indirection)f(is)g(required.)291 2856 y(The)d(system)h(uses)f(these)h(to)g(hold)f(the)h(v)-5 b(alues)27 b(of)g(lexical)f(v)-5 b(ariables)25 b(that)i(ma)n(y)f(b)r(e) h Fo(set!)p Fr(.)p Black 307 3005 a Fn(\017)p Black 41 w Fo(\(cell?)48 b Fq(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 307 3105 a Fn(\017)p Black 41 w Fo(\(make-cell)d Fq(value)6 b Fo(\))41 b Fn(!)h Fq(c)l(el)t(l)p Black 307 3204 a Fn(\017)p Black 41 w Fo(\(cell-ref)c Fq(c)l(el)t(l)9 b Fo(\))41 b Fn(!)h Fq(value)p Black 307 3304 a Fn(\017)p Black 41 w Fo(\(cell-set!)c Fq(c)l(el)t(l)k(value)6 b Fo(\))291 3579 y Fj(5.7)135 b(Queues)291 3761 y Fr(These)34 b(are)f(ordinary)g(\014rst-in,)j(\014rst-out)e(queues.)57 b(The)35 b(pro)r(cedures)e(are)h(in)g(structure)291 3860 y Fo(queues)p Fr(.)p Black 307 4010 a Fn(\017)p Black 41 w Fo(\(make-queue\))j Fn(!)k Fq(queue)p Black 307 4110 a Fn(\017)p Black 41 w Fo(\(queue?)47 b Fq(value)6 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 4209 a Fn(\017)p Black 41 w Fo(\(queue-empty?)j Fq(queue)6 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 4309 a Fn(\017)p Black 41 w Fo(\(list->queue)c Fq(values)7 b Fo(\))41 b Fn(!)h Fq(queue)p Black 307 4408 a Fn(\017)p Black 41 w Fo(\(enqueue!)c Fq(queue)j(value)6 b Fo(\))p Black 307 4508 a Fn(\017)p Black 41 w Fo(\(enqueue-many!)36 b Fq(queue)41 b(list)8 b Fo(\))p Black 307 4608 a Fn(\017)p Black 41 w Fo(\(queue-head-or-va)o(lu)o(e)35 b Fq(queue)42 b(value)6 b Fo(\))42 b Fn(!)f Fq(value)p Black 307 4707 a Fn(\017)p Black 41 w Fo(\(queue-head-or-th)o(un)o(k)35 b Fq(queue)42 b(thunk)9 b Fo(\))40 b Fn(!)i Fq(value)p Black 307 4807 a Fn(\017)p Black 41 w Fo(\(queue-head)37 b Fq(queue)6 b Fo(\))41 b Fn(!)h Fq(value)p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(maybe-queue-head)35 b Fq(queue)6 b Fo(\))41 b Fn(!)g Fq(value)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(dequeue-or-value)o(!)j Fq(queue)d(value)6 b Fo(\))42 b Fn(!)f Fq(value)p Black 1681 5255 a Fr(41)p Black eop end %%Page: 42 50 TeXDict begin 42 49 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(dequeue-or-thu)o(nk)o(!)44 b Fq(queue)d(thunk)9 b Fo(\))41 b Fn(!)g Fq(value)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(dequeue!)46 b Fq(queue)6 b Fo(\))41 b Fn(!)g Fq(value)p Black 755 722 a Fn(\017)p Black 42 w Fo(\(maybe-dequeue!)i Fq(queue)6 b Fo(\))41 b Fn(!)h Fq(value)p Black 755 822 a Fn(\017)p Black 42 w Fo(\(empty-queue!)36 b Fq(queue)6 b Fo(\))739 957 y(Make-queue)37 b Fr(creates)k(an)g(empt)n(y)h(queue,)i Fo(queue?)77 b Fr(is)41 b(a)g(predicate)g(for)g(iden)n(tifying)739 1057 y(queues,)22 b(and)g Fo(queue-empty?)30 b Fr(tells)21 b(y)n(ou)g(if)h(a)f(queue)g(is)h(empt)n(y)-7 b(.)35 b Fo(List->queue)17 b Fr(returns)k(a)739 1156 y(queue)g(con)n(taining)e Fq(values)8 b Fr(,)22 b(preserving)d(their)i(order.)33 b Fo(Enqueue!)f Fr(adds)20 b(one)g(v)-5 b(alue)21 b(to)g(the)739 1256 y(queue;)g Fo(enqueue-many!)29 b Fr(adds)18 b(a)g(list)g(of)h(v)-5 b(alues)18 b(to)g(the)h(queue.)33 b Fo(Queue-head-or-val)o(ue)p Fr(,)739 1356 y Fo(queue-head-or-th)o(un)o(k)p Fr(,)j Fo(queue-head)p Fr(,)h(and)h Fo(maybe-queue-head)32 b Fr(return)38 b(the)h(\014rst)739 1455 y(v)-5 b(alue)19 b(in)g Fq(queue)25 b Fr(if)20 b(it)f(is)g(not)h(empt)n(y;)i(if)d(the)h (queue)f(is)g(empt)n(y)-7 b(,)21 b Fo(queue-head-or-va)o(lu)o(e)13 b Fr(re-)739 1555 y(turns)21 b Fq(value)7 b Fr(,)23 b Fo(queue-head-or-th)o(un)o(k)15 b Fr(tail-calls)21 b Fq(thunk)8 b Fr(,)23 b Fo(queue-head)17 b Fr(raises)j(an)h(error,)739 1654 y(and)j Fo(maybe-queue-head)19 b Fr(returns)24 b Fo(#f)p Fr(.)35 b Fo(Dequeue-or-value)o(!)p Fr(,)19 b Fo(dequeue-or-thunk!)o Fr(,)739 1754 y Fo(dequeue!)p Fr(,)25 b(and)j Fo(maybe-dequeue!)k Fr(remo)n(v)n(e)27 b(a)g(v)-5 b(alue)28 b(from)g(the)g(queue)g(if)h(one)e(is)h(a)n(v)-5 b(ail-)739 1854 y(able;)21 b(if)e(the)g(queue)f(is)g(empt)n(y)-7 b(,)21 b Fo(dequeue-or-value)o(!)28 b Fr(returns)17 b Fq(value)7 b Fr(,)20 b Fo(dequeue-or-thunk!)739 1953 y Fr(tail-calls)35 b Fq(thunk)8 b Fr(,)38 b Fo(dequeue!)59 b Fr(raises)34 b(an)i(error,)g(and)g Fo(maybe-dequeue!)56 b Fr(returns)35 b Fo(#f)p Fr(.)739 2053 y Fo(Empty-queue!)d Fr(remo)n(v)n(es)25 b(all)j(v)-5 b(alues)27 b(from)g Fq(queue)6 b Fr(.)863 2153 y Fo(\(Dequeue-or-value)o(!)81 b(q)43 b(value\))16 b Fr(is)j(more)e(e\016cien)n(t)i(than,)h(but)f (otherwise)e(equiv-)739 2252 y(alen)n(t)27 b(to:)p Black Black 739 2404 a Fo(\(ensure-atomicit)o(y)782 2504 y(\(if)43 b(\(queue-empty?)38 b(q\))957 2603 y(value)957 2703 y(\(dequeue!)i (q\)\)\))863 2855 y Fr(Because)34 b Fo(queue-head)d Fr(and)k Fo(dequeue!)56 b Fr(raise)34 b(exceptions)g(if)i(they)f(are)f(called)h (on)739 2954 y(an)28 b(empt)n(y)g(queue,)g(they)h Fq(must)g(not)f Fr(b)r(e)g(called)g(with)h(a)f(prop)r(osal)e(already)h(activ)n(e)g (unless)739 3054 y Fo(queue-empty?)32 b Fr(has)27 b(returned)g Fo(#f)g Fr(with)h(the)g(same)f(prop)r(osal)f(activ)n(e.)863 3153 y(The)c(follo)n(wing)f(pro)r(cedures)g(are)g(not)g(used)h(in)g (the)g(Sc)n(heme)g(48)f(system,)i(and)f(are)e Fq(very)739 3253 y Fr(slo)n(w.)38 b(These)29 b(op)r(erations)e(ma)n(y)g(b)r(e)i (remo)n(v)n(ed)e(from)h(the)h Fo(queues)d Fr(structure)i(in)h(a)f (future)739 3353 y(revision.)p Black 755 3505 a Fn(\017)p Black 42 w Fo(\(queue-length)36 b Fq(queue)6 b Fo(\))41 b Fn(!)g Fq(inte)l(ger)p Black 755 3604 a Fn(\017)p Black 42 w Fo(\(queue->list)36 b Fq(queue)6 b Fo(\))41 b Fn(!)h Fq(values)p Black 755 3704 a Fn(\017)p Black 42 w Fo(\(delete-from-qu)o (eu)o(e!)i Fq(queue)d(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 755 3803 a Fn(\017)p Black 42 w Fo(\(on-queue?)k Fq(queue)d(value)6 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)739 3955 y Fo(Queue-length)32 b Fr(returns)37 b(the)h(n)n(um)n(b)r(er)f(of) g(v)-5 b(alues)37 b(in)g Fq(queue)6 b Fr(.)66 b Fo(Queue->list)33 b Fr(returns)739 4055 y(the)41 b(v)-5 b(alues)39 b(in)i Fq(queue)46 b Fr(as)40 b(a)g(list,)k(in)c(the)h(order)e(in)h(whic)n(h)g (the)h(v)-5 b(alues)40 b(w)n(ere)f(added.)739 4154 y Fo(Delete-from-queu)o(e!)28 b Fr(remo)n(v)n(es)17 b(the)j(\014rst)f (instance)g(of)h Fq(value)26 b Fr(from)19 b Fq(queue)6 b Fr(,)22 b(using)e Fo(eqv?)739 4254 y Fr(for)k(comparisons.)35 b Fo(Delete-from-que)o(ue!)29 b Fr(returns)c Fo(#t)f Fr(if)i(it)f(remo)n(v)n(es)e(an)i(elemen)n(t)g(and)739 4354 y Fo(#f)g Fr(if)h(it)h(do)r(es)e(not.)36 b Fo(On-queue?)d Fr(returns)25 b Fo(#t)g Fr(if)i Fq(value)32 b Fr(is)26 b(in)g(the)g Fq(queue)32 b Fr(\(using)27 b Fo(eqv?)35 b Fr(for)739 4453 y(comparisons\))26 b(and)h Fo(#f)g Fr(if)h(it)g(is)g(not.)739 4725 y Fj(5.8)135 b(Arra)l(ys)739 4907 y Fr(These)19 b(pro)n(vide)g(N-dimensional,)h(zero-based)e(arra)n (ys)f(and)i(are)g(in)h(the)g(structure)f Fo(arrays)p Fr(.)739 5006 y(The)28 b(arra)n(y)d(in)n(terface)i(is)g(deriv)n(ed)g (from)g(one)g(in)n(v)n(en)n(ted)h(b)n(y)f(Alan)h(Ba)n(wden.)p Black 2130 5255 a(42)p Black eop end %%Page: 43 51 TeXDict begin 43 50 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(\(make-array)37 b Fq(value)42 b(dimension)1505 535 y Fk(0)1585 523 y Fq(.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(arr)l(ay)p Black 307 623 a Fn(\017)p Black 41 w Fo(\(array)d Fq(dimensions)k (element)1416 635 y Fk(0)1495 623 y Fq(.)13 b(.)g(.)g Fo(\))50 b Fn(!)42 b Fq(arr)l(ay)p Black 307 722 a Fn(\017)p Black 41 w Fo(\(copy-array)37 b Fq(arr)l(ay)7 b Fo(\))43 b Fn(!)e Fq(arr)l(ay)291 871 y Fo(Make-array)23 b Fr(mak)n(es)k(a)g (new)g(arra)n(y)f(with)i(the)g(giv)n(en)f(dimensions,)g(eac)n(h)g(of)g (whic)n(h)h(m)n(ust)291 970 y(b)r(e)21 b(a)h(non-negativ)n(e)d(in)n (teger.)34 b(Ev)n(ery)20 b(elemen)n(t)i(is)f(initially)h(set)f(to)h Fq(value)6 b Fr(.)36 b Fo(Array)19 b Fr(Returns)291 1070 y(a)j(new)h(arra)n(y)e(with)i(the)h(giv)n(en)e(dimensions)g(and)h (elemen)n(ts.)35 b Fq(Dimensions)c Fr(m)n(ust)23 b(b)r(e)g(a)g(list)291 1169 y(of)h(p)r(ositiv)n(e)g(in)n(tegers,)g(The)g(n)n(um)n(b)r(er)g(of) g(elemen)n(ts)h(should)f(b)r(e)g(the)h(equal)f(to)g(the)h(pro)r(duct) 291 1269 y(of)i(the)h(dimensions.)37 b(The)27 b(elemen)n(ts)h(are)e (stored)h(in)h(ro)n(w-ma)5 b(jor)25 b(order.)p Black Black 291 1434 a Fo(\(make-array)39 b('a)j(2)i(3\))e Fn(!)i(f)p Fo(Array)d(2)i(3)p Fn(g)291 1633 y Fo(\(array)e('\(2)h(3\))h ('a)g('b)f('c)h('d)g('e)g('f\))465 1733 y Fn(!)h(f)p Fo(Array)d(2)i(3)p Fn(g)415 1898 y Fo(Copy-array)23 b Fr(returns)j(a)g(cop)n(y)g(of)33 b Fq(arr)l(ay)7 b Fr(.)38 b(The)27 b(cop)n(y)f(is)h(iden)n(tical)f(to)h(the)g Fq(arr)l(ay)35 b Fr(but)291 1997 y(do)r(es)27 b(not)g(share)g(storage)f(with)i(it.)p Black 307 2146 a Fn(\017)p Black 41 w Fo(\(array?)47 b Fq(value)6 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)291 2294 y Fr(Returns)27 b Fo(#t)g Fr(if)34 b Fq(value)h Fr(is)27 b(an)h(arra)n(y)-7 b(.)p Black 307 2442 a Fn(\017)p Black 41 w Fo(\(array-ref)38 b Fq(arr)l(ay)k(index)1291 2454 y Fk(0)1370 2442 y Fq(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(value)p Black 307 2542 a Fn(\017)p Black 41 w Fo(\(array-set!)c Fq(arr)l(ay)43 b(value)f(index)1561 2554 y Fk(0)1640 2542 y Fq(.)13 b(.)g(.)g Fo(\))p Black 307 2641 a Fn(\017)p Black 41 w Fo(\(array->vector)36 b Fq(arr)l(ay)7 b Fo(\))42 b Fn(!)g Fq(ve)l(ctor)p Black 307 2741 a Fn(\017)p Black 41 w Fo(\(array-shape)37 b Fq(arr)l(ay)7 b Fo(\))42 b Fn(!)g Fq(list)291 2889 y Fo(Array-ref)32 b Fr(returns)j(the)h(sp)r(eci\014ed)h(arra)n(y)c (elemen)n(t)j(and)g Fo(array-set!)58 b Fr(replaces)35 b(the)291 2989 y(elemen)n(t)27 b(with)h Fq(value)6 b Fr(.)p Black Black 291 3154 a Fo(\(let)42 b(\(\(a)g(\(array)f('\(2)h (3\))h('a)g('b)g('c)f('d)h('e)g('f\)\)\))378 3253 y(\(let)f(\(\(x)g (\(array-ref)d(a)44 b(0)f(1\)\)\))465 3353 y(\(array-set!)c(a)k('g)g(0) g(1\))465 3453 y(\(list)e(x)j(\(array-ref)39 b(a)k(0)g(1\)\)\)\))465 3552 y Fn(!)h Fo('\(b)e(g\))415 3717 y(Array->vector)29 b Fr(returns)34 b(a)h(v)n(ector)e(con)n(taining)h(the)h(elemen)n(ts)f (of)41 b Fq(arr)l(ay)j Fr(in)34 b(ro)n(w-)291 3817 y(ma)5 b(jor)26 b(order.)35 b Fo(Array-shape)24 b Fr(returns)i(the)i (dimensions)g(of)f(the)h(arra)n(y)e(as)g(a)i(list.)p Black 307 3965 a Fn(\017)p Black 41 w Fo(\(make-shared-arra)o(y)35 b Fq(arr)l(ay)43 b(line)l(ar-map)f(dimension)2245 3977 y Fk(0)2325 3965 y Fq(.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(arr)l(ay)291 4113 y Fo(Make-shared-arr)o(ay)34 b Fr(mak)n(es)k(a)i(new)g(arra)n(y)e(that)i(shares)e(storage)g(with)j Fq(arr)l(ay)48 b Fr(and)291 4213 y(uses)27 b Fq(line)l(ar-map)34 b Fr(to)27 b(map)h(indexes)f(to)h(elemen)n(ts.)37 b Fq(Line)l(ar-map)d Fr(m)n(ust)27 b(accept)h(as)f(man)n(y)291 4312 y(argumen)n(ts)32 b(as)g(the)i(n)n(um)n(b)r(er)f(of)39 b Fq(dimension)6 b Fr(s)35 b(giv)n(en)e(and)g(m)n(ust)g(return)g(a)g(list)g(of)g(non-) 291 4412 y(negativ)n(e)26 b(in)n(tegers)g(that)i(are)f(v)-5 b(alid)28 b(indexes)f(in)n(to)g Fq(arr)l(ay)7 b Fr(.)p Black Black 291 4577 a Fo(\(array-ref)39 b(\(make-shared-arr)o(ay)e(a) 43 b(f)h(i0)e(i1)h(...\))770 4677 y(j0)g(j1)g(...\))291 4841 y Fr(is)27 b(equiv)-5 b(alen)n(t)27 b(to)p Black Black 291 5006 a Fo(\(apply)41 b(array-ref)f(a)j(\(f)f(j0)h(j1)g (...\)\))p Black 1681 5255 a Fr(43)p Black eop end %%Page: 44 52 TeXDict begin 44 51 bop 0 TeXcolorgray Black Black Black 863 523 a Fr(As)19 b(an)f(example,)i(the)f(follo)n(wing)e(function)i (mak)n(es)e(the)i(transp)r(ose)e(of)h(a)g(t)n(w)n(o-dimensional)739 623 y(arra)n(y:)p Black Black 739 790 a Fo(\(define)41 b(\(transpose)e(array\))826 889 y(\(let)j(\(\(shape)f(\(array-shape)d (array\)\)\))913 989 y(\(make-shared-arra)o(y)f(array)1741 1089 y(\(lambda)k(\(x)i(y\))1829 1188 y(\(list)e(y)i(x\)\))1741 1288 y(\(cadr)f(shape\))1741 1388 y(\(car)g(shape\)\)\)\))739 1587 y(\(array->vector)826 1686 y(\(transpose)913 1786 y(\(array)f('\(2)i(3\))f('a)h('b)g('c)g('d)f('e)h('f\)\)\))1000 1886 y Fn(!)h Fo('\(a)e(d)i(b)f(e)g(c)g(f\))739 2162 y Fj(5.9)135 b(Records)739 2344 y Fr(New)29 b(t)n(yp)r(es)g(can)f(b)r (e)h(constructed)f(using)h(the)g Fo(define-record-t)o(ype)22 b Fr(macro)27 b(from)i(the)739 2444 y Fo(define-record-ty)o(pe)o(s)22 b Fr(structure)27 b(The)g(general)g(syn)n(tax)f(is:)p Black Black 739 2611 a Fo(\(define-record-t)o(yp)o(e)38 b([)p Fq(tag)7 b Fo(])43 b Fq(typ)l(e-name)826 2711 y Fo(\()p Fq(c)l(onstructor-name)49 b(\014eld-tag)i Fo(...\))826 2810 y Fq(pr)l(e)l(dic)l(ate-name)826 2910 y Fo(\()p Fq(\014eld-tag)g(ac)l(c)l(essor-name)g Fo([)p Fq(mo)l(di\014er-name)6 b Fo(]\))826 3009 y(...\))739 3176 y Fr(This)27 b(mak)n(es)g(the)h (follo)n(wing)f(de\014nitions:)p Black 755 3343 a Fn(\017)p Black 42 w Fq(typ)l(e-name)2236 b Fr(t)n(yp)r(e)p Black 755 3443 a Fn(\017)p Black 42 w Fo(\()p Fq(c)l(onstructor-name)46 b(\014eld-init)c(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(typ)l(e-name)p Black 755 3542 a Fn(\017)p Black 42 w Fo(\()p Fq(pr)l(e)l(dic)l(ate-name)48 b(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 755 3642 a Fn(\017)p Black 42 w Fo(\()p Fq(ac)l(c)l(essor-name)48 b(typ)l(e-name)6 b Fo(\))41 b Fn(!)h Fq(value)p Black 755 3742 a Fn(\017)p Black 42 w Fo(\()p Fq(mo)l(di\014er-name)48 b(typ)l(e-name)41 b(value)6 b Fo(\))739 3909 y Fq(T)-6 b(yp)l(e-name)35 b Fr(is)27 b(the)h(record)f(t)n(yp)r(e)h(itself,)g(and)g(can)f(b)r(e)h (used)g(to)g(sp)r(ecify)g(a)f(prin)n(t)h(metho)r(d)739 4008 y(\(see)40 b(b)r(elo)n(w\).)76 b Fq(Constructor-name)46 b Fr(is)40 b(a)g(constructor)f(that)i(accepts)f(v)-5 b(alues)40 b(for)g(the)739 4108 y(\014elds)22 b(whose)g(tags)g(are)f (sp)r(eci\014ed.)36 b Fq(Pr)l(e)l(dic)l(ate-name)29 b Fr(is)23 b(a)f(predicate)g(that)g(returns)g Fo(#t)g Fr(for)739 4208 y(elemen)n(ts)f(of)g(the)h(t)n(yp)r(e)f(and)g Fo(#f)g Fr(for)f(ev)n(erything)g(else.)35 b(The)21 b Fq(ac)l(c)l(essor-name)6 b Fr(s)22 b(retriev)n(e)e(the)739 4307 y(v)-5 b(alues)29 b(of)g(\014elds,)h(and)f(the)g Fq(mo)l(di\014er-name)6 b Fr('s)30 b(up)r(date)g(them.)43 b Fq(T)-6 b(ag)37 b Fr(is)29 b(used)g(in)h(prin)n(ting)739 4407 y(instances)e(of)g(the)h (record)d(t)n(yp)r(e)j(and)f(the)h Fq(\014eld-tag)7 b Fr(s)29 b(are)e(used)h(in)h(the)f(insp)r(ector)g(and)g(to)739 4506 y(matc)n(h)j(constructor)g(argumen)n(ts)f(with)i(\014elds.)50 b(If)38 b Fq(tag)i Fr(is)31 b(not)h(sp)r(eci\014ed,)h Fq(typ)l(e-name)38 b Fr(is)739 4606 y(used)27 b(instead.)p Black 755 4756 a Fn(\017)p Black 42 w Fo(\(define-record-)o(di)o(scl)o (os)o(er)35 b Fq(typ)l(e)42 b(discloser)9 b Fo(\))739 4907 y(Define-record-di)o(sc)o(los)o(er)30 b Fr(determines)36 b(ho)n(w)g(records)f(of)i(t)n(yp)r(e)g Fq(typ)l(e)43 b Fr(are)35 b(prin)n(ted.)739 5006 y Fq(Discloser)49 b Fr(should)39 b(b)r(e)g(pro)r(cedure)f(whic)n(h)h(tak)n(es)f(a)h (single)f(record)g(of)h(t)n(yp)r(e)g Fq(typ)l(e)45 b Fr(and)p Black 2130 5255 a(44)p Black eop end %%Page: 45 53 TeXDict begin 45 52 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(returns)32 b(a)i(list)f(whose)g(car)g(is)g(a)h(sym)n(b)r (ol.)54 b(The)34 b(record)e(will)i(b)r(e)g(prin)n(ted)f(as)g(the)h(v)-5 b(alue)291 623 y(returned)27 b(b)n(y)h Fq(discloser)39 b Fr(with)28 b(curly)f(braces)f(used)i(instead)f(of)h(the)g(usual)f (paren)n(thesis.)415 722 y(F)-7 b(or)27 b(example)p Black Black 291 867 a Fo(\(define-record-)o(typ)o(e)37 b(pare)42 b(:pare)378 966 y(\(kons)f(x)i(y\))378 1066 y(pare?)378 1165 y(\(x)g(kar)f(set-kar!\))378 1265 y(\(y)h(kdr\)\))291 1409 y Fr(de\014nes)27 b Fo(kons)g Fr(to)g(b)r(e)h(a)g(constructor,)e Fo(kar)h Fr(and)h Fo(kdr)e Fr(to)i(b)r(e)g(accessors,)e Fo(set-kar!)34 b Fr(to)28 b(b)r(e)291 1509 y(a)33 b(mo)r(di\014er,)j (and)e Fo(pare?)54 b Fr(to)34 b(b)r(e)h(a)e(predicate)h(for)f(a)h(new)g (t)n(yp)r(e)g(of)g(ob)5 b(ject.)57 b(The)34 b(t)n(yp)r(e)291 1608 y(itself)28 b(is)f(named)h Fo(:pare)p Fr(.)35 b Fo(Pare)26 b Fr(is)h(a)g(tag)g(used)h(in)g(prin)n(ting)f(the)h(new)f (ob)5 b(jects.)415 1708 y(By)36 b(default,)j(the)e(new)g(ob)5 b(jects)35 b(prin)n(t)i(as)f Fo(#)p Fn(f)p Fo(Pare)p Fn(g)p Fr(.)60 b(The)36 b(prin)n(t)h(metho)r(d)f(can)h(b)r(e)291 1808 y(mo)r(di\014ed)28 b(using)g Fo(define-record-di)o(scl)o(os)o(er)o Fr(:)p Black Black 291 1952 a Fo(\(define-record-)o(dis)o(cl)o(os)o(er) 37 b(:pare)378 2052 y(\(lambda)j(\(p\))j(`\(pare)e(,\(kar)g(p\))i (,\(kdr)f(p\)\)\)\))291 2196 y Fr(will)27 b(cause)g(the)h(result)g(of) 34 b Fo(\(kons)41 b(1)i(2\))27 b Fr(to)h(prin)n(t)f(as)g Fo(#)p Fn(f)p Fo(Pare)41 b(1)i(2)p Fn(g)p Fr(.)415 2295 y Fo(Define-record-re)o(sum)o(er)20 b Fr(\(section)p 0 0 1 TeXcolorrgb 26 w(8.7.6)p Black(\))26 b(can)f(b)r(e)i(used)g(to)f (con)n(trol)f(ho)n(w)h(records)291 2395 y(are)g(stored)h(in)h(heap)f (images.)291 2623 y Fe(5.9.1)112 b(Lo)m(w-lev)m(el)39 b(access)f(to)f(records)291 2776 y Fr(Records)28 b(are)g(implemen)n (ted)i(using)e(primitiv)n(e)h(ob)5 b(jects)29 b(exactly)g(analogous)d (to)j(v)n(ectors.)291 2876 y(Ev)n(ery)c(record)h(has)h(a)f(record)g(t)n (yp)r(e)i(\(whic)n(h)f(is)g(another)f(record\))g(in)i(the)f(\014rst)g (slot.)37 b(Note)291 2975 y(that)21 b(use)g(of)g(these)g(pro)r (cedures,)g(esp)r(ecially)h Fo(record-set!)p Fr(,)c(breaks)i(the)h (record)f(abstrac-)291 3075 y(tion)27 b(describ)r(ed)h(ab)r(o)n(v)n(e;) e(caution)h(is)h(advised.)415 3175 y(These)f(pro)r(cedures)g(are)f(in)i (the)g(structure)f Fo(records)p Fr(.)p Black 307 3302 a Fn(\017)p Black 41 w Fo(\(make-record)37 b Fq(n)k(value)6 b Fo(\))42 b Fn(!)f Fq(r)l(e)l(c)l(or)l(d)p Black 307 3402 a Fn(\017)p Black 41 w Fo(\(record)e Fq(value)j(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(r)l(e)l(c)l(or)l(d-ve)l(ctor)p Black 307 3501 a Fn(\017)p Black 41 w Fo(\(record?)47 b Fq(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 307 3601 a Fn(\017)p Black 41 w Fo(\(record-length)36 b Fq(r)l(e)l(c)l(or)l(d)9 b Fo(\))41 b Fn(!)g Fq(inte)l(ger)p Black 307 3701 a Fn(\017)p Black 41 w Fo(\(record-type)c Fq(r)l(e)l(c)l(or)l(d)9 b Fo(\))41 b Fn(!)g Fq(value)p Black 307 3800 a Fn(\017)p Black 41 w Fo(\(record-ref)c Fq(r)l(e)l(c)l(or)l(d)42 b(i)8 b Fo(\))42 b Fn(!)g Fq(value)p Black 307 3900 a Fn(\017)p Black 41 w Fo(\(record-set!)37 b Fq(r)l(e)l(c)l(or)l(d)42 b(i)g(value)6 b Fo(\))291 4028 y Fr(These)30 b(the)h(same)f(as)g(the)h(standard)e Fo(vector-)f Fr(pro)r(cedures)i(except)g(that)h(they)g(op)r(erate)291 4127 y(on)24 b(records.)34 b(The)24 b(v)-5 b(alue)25 b(returned)f(b)n(y)h Fo(record-length)19 b Fr(includes)25 b(the)f(slot)h(holding)f(the)291 4227 y(record's)i(t)n(yp)r(e.)37 b Fo(\(record-type)h Fq(x)10 b Fo(\))27 b Fr(is)g(equiv)-5 b(alen)n(t)28 b(to)f Fo(\(record-ref)39 b Fq(x)53 b Fo(0\))p Fr(.)291 4454 y Fe(5.9.2)112 b(Record)37 b(t)m(yp)s(es)291 4608 y Fr(Record)17 b(t)n(yp)r(es)h(are)g(themselv)n(es)g(records)e(of) j(a)f(particular)f(t)n(yp)r(e)h(\(the)h(\014rst)f(slot)g(of)25 b Fo(:record-type)291 4707 y Fr(p)r(oin)n(ts)34 b(to)g(itself)6 b(\).)57 b(A)34 b(record)f(t)n(yp)r(e)h(con)n(tains)f(four)h(v)-5 b(alues:)50 b(the)34 b(name)g(of)g(the)g(record)291 4807 y(t)n(yp)r(e,)c(a)g(list)g(of)g(the)h(names)e(its)h(\014elds,)h(and)f (pro)r(cedures)e(for)i(disclosing)f(and)h(resuming)291 4907 y(records)j(of)j(that)f(t)n(yp)r(e.)61 b(Pro)r(cedures)33 b(for)i(manipulating)h(them)g(are)e(in)i(the)f(structure)291 5006 y Fo(record-types)p Fr(.)p Black 1681 5255 a(45)p Black eop end %%Page: 46 54 TeXDict begin 46 53 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(make-record-ty)o(pe)35 b Fq(name)42 b(\014eld-names)7 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(c)l(or)l (d-typ)l(e)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(record-type?)i Fq(value)6 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 722 a Fn(\017)p Black 42 w Fo(\(record-type-na)o(me)35 b Fq(r)l(e)l(c)l(or)l(d-typ)l(e)6 b Fo(\))42 b Fn(!)f Fq(symb)l(ol)p Black 755 822 a Fn(\017)p Black 42 w Fo (\(record-type-fi)o(el)o(d-n)o(am)o(es)35 b Fq(r)l(e)l(c)l(or)l(d-typ)l (e)6 b Fo(\))42 b Fn(!)f Fq(symb)l(ols)p Black 755 1024 a Fn(\017)p Black 42 w Fo(\(record-constru)o(ct)o(or)35 b Fq(r)l(e)l(c)l(or)l(d-typ)l(e)42 b(\014eld-names)7 b Fo(\))41 b Fn(!)h Fq(pr)l(o)l(c)l(e)l(dur)l(e)p Black 755 1124 a Fn(\017)p Black 42 w Fo(\(record-predica)o(te)35 b Fq(r)l(e)l(c)l(or)l(d-typ)l(e)6 b Fo(\))42 b Fn(!)f Fq(pr)l(o)l(c)l(e)l(dur)l(e)p Black 755 1223 a Fn(\017)p Black 42 w Fo(\(record-accesso)o(r)35 b Fq(r)l(e)l(c)l(or)l(d-typ)l(e) 42 b(\014eld-name)6 b Fo(\))42 b Fn(!)f Fq(pr)l(o)l(c)l(e)l(dur)l(e)p Black 755 1323 a Fn(\017)p Black 42 w Fo(\(record-modifie)o(r)35 b Fq(r)l(e)l(c)l(or)l(d-typ)l(e)42 b(\014eld-name)6 b Fo(\))42 b Fn(!)f Fq(pr)l(o)l(c)l(e)l(dur)l(e)739 1474 y Fr(These)18 b(pro)r(cedures)f(construct)h(the)h(usual)f (record-manipulating)e(pro)r(cedures.)33 b Fo(Record-construc)o(to)o(r) 739 1574 y Fr(returns)24 b(a)g(constructor)f(that)i(is)f(passed)g(the)h (initial)g(v)-5 b(alues)24 b(for)g(the)h(\014elds)g(sp)r(eci\014ed)f (and)739 1673 y(returns)29 b(a)h(new)g(record.)42 b Fo (Record-predicate)24 b Fr(returns)29 b(a)g(predicate)h(that)g(return)f (true)739 1773 y(when)23 b(passed)e(a)h(record)f(of)i(t)n(yp)r(e)g Fq(r)l(e)l(c)l(or)l(d-typ)l(e)29 b Fr(and)22 b(false)g(otherwise.)34 b Fo(Record-accessor)739 1872 y Fr(and)29 b Fo(record-modifier)23 b Fr(return)29 b(pro)r(cedures)f(that)i(reference)e(and)h(set)h(the)f (giv)n(en)g(\014eld)739 1972 y(in)f(records)e(of)h(the)h(appropriate)e (t)n(yp)r(e.)p Black 755 2123 a Fn(\017)p Black 42 w Fo(\(define-record-)o(di)o(scl)o(os)o(er)35 b Fq(r)l(e)l(c)l(or)l (d-typ)l(e)42 b(discloser)9 b Fo(\))p Black 755 2223 a Fn(\017)p Black 42 w Fo(\(define-record-)o(re)o(sum)o(er)35 b Fq(r)l(e)l(c)l(or)l(d-typ)l(e)42 b(r)l(esumer)9 b Fo(\))739 2373 y(Record-types)k Fr(is)19 b(the)f(initial)h(exp)r(orter)f(of)24 b Fo(define-record-dis)o(cl)o(ose)o(r)12 b Fr(\(re-exp)r(orted)739 2473 y(b)n(y)32 b Fo(define-record-typ)o(es)25 b Fr(describ)r(ed)31 b(ab)r(o)n(v)n(e\))g(and)g Fo(define-record-re)o(su)o(mer)25 b Fr(\(re-)739 2573 y(exp)r(orted)i(b)n(y)i Fo(external-calls)21 b Fr(\(section)p 0 0 1 TeXcolorrgb 28 w(8.7.6)p Black(\)\).)863 2673 y(The)30 b(pro)r(cedures)f(describ)r(ed)g(in)h(this)h(section)e (can)g(b)r(e)i(used)e(to)h(de\014ne)g(new)g(record-)739 2772 y(t)n(yp)r(e-de\014ning)d(macros.)p Black Black 739 2940 a Fo(\(define-record-t)o(yp)o(e)38 b(pare)k(:pare)826 3040 y(\(kons)g(x)h(y\))826 3140 y(pare?)826 3239 y(\(x)g(kar)f (set-kar!\))826 3339 y(\(y)h(kdr\)\))739 3506 y Fr(is)27 b(\(seman)n(tically\))g(equiv)-5 b(alen)n(t)28 b(to)p Black Black 739 3674 a Fo(\(define)41 b(:pare)g(\(make-record-typ)o(e)d ('pare)j('\(x)i(y\)\)\))739 3774 y(\(define)e(kons)h(\(record-constru)o (ct)o(or)37 b(:pare)42 b('\(x)g(y\)\)\))739 3874 y(\(define)f(kar)h (\(record-accessor)37 b(:pare)k('x\)\))739 3973 y(\(define)g(set-kar!)f (\(record-modifier)d(:pare)k('x\)\))739 4073 y(\(define)g(kdr)h (\(record-accessor)37 b(:pare)k('y\)\))863 4240 y Fr(The)32 b(\\\(seman)n(tically\)")e(ab)r(o)n(v)n(e)g(is)i(b)r(ecause)f Fo(define-record-ty)o(pe)25 b Fr(adds)31 b(declara-)739 4340 y(tions,)25 b(whic)n(h)f(allo)n(ws)f(the)i(t)n(yp)r(e)f(c)n(hec)n (k)n(er)e(to)j(detect)f(some)g(misuses)g(of)g(records,)g(and)g(uses)739 4440 y(more)h(e\016cien)n(t)h(de\014nitions)g(for)f(the)i(constructor,) d(accessors,)g(and)i(mo)r(di\014ers.)36 b(Ignoring)739 4539 y(the)22 b(declarations,)f(whic)n(h)h(will)g(ha)n(v)n(e)e(to)i(w)n (ait)f(for)g(another)g(edition)g(of)h(the)g(man)n(ual,)g(what)739 4639 y(the)28 b(ab)r(o)n(v)n(e)e(example)h(actually)g(expands)g(in)n (to)h(is:)p Black Black 739 4807 a Fo(\(define)41 b(:pare)g (\(make-record-typ)o(e)d('pare)j('\(x)i(y\)\)\))739 4907 y(\(define)e(\(kons)g(x)i(y\))g(\(record)e(:pare)g(x)i(y\)\))739 5006 y(\(define)e(\(kar)h(r\))g(\(checked-record-r)o(ef)37 b(r)43 b(:pare)f(1\)\))p Black 2130 5255 a Fr(46)p Black eop end %%Page: 47 55 TeXDict begin 47 54 bop 0 TeXcolorgray Black Black Black 291 523 a Fo(\(define)40 b(\(set-kar!)g(r)j(new\))378 623 y(\(checked-record-)o(se)o(t!)37 b(r)43 b(:pare)f(1)h(new\)\))291 722 y(\(define)d(\(kdr)i(r\))h(\(checked-record-)o(ref)37 b(r)43 b(:pare)e(2\)\))291 889 y(Checked-record-)o(ref)17 b Fr(and)23 b Fo(Checked-record-s)o(et)o(!)29 b Fr(are)23 b(lo)n(w-lev)n(el)f(pro)r(cedures)g(that)291 989 y(c)n(hec)n(k)j(the)j (t)n(yp)r(e)f(of)f(the)h(record)f(and)g(access)g(or)g(mo)r(dify)h(it)g (using)g(a)f(single)g(VM)h(instruc-)291 1088 y(tion.)291 1364 y Fj(5.10)135 b(Finite)46 b(record)e(t)l(yp)t(es)291 1547 y Fr(The)30 b(structure)h Fo(finite-types)26 b Fr(has)k(t)n(w)n(o) g(macros)f(for)h(de\014ning)h(`\014nite')h(record)d(t)n(yp)r(es.)291 1646 y(These)j(are)f(record)g(t)n(yp)r(es)h(for)g(whic)n(h)g(there)h (are)e(a)h(\014xed)g(n)n(um)n(b)r(er)g(of)h(instances,)g(all)f(of)291 1746 y(whic)n(h)h(are)g(created)g(at)h(the)g(same)g(time)g(as)f(the)i (record)d(t)n(yp)r(e)i(itself.)57 b(The)33 b(syn)n(tax)g(for)291 1846 y(de\014ning)27 b(an)h(en)n(umerated)e(t)n(yp)r(e)i(is:)p Black Black 291 2013 a Fo(\(define-enumera)o(ted)o(-t)o(yp)o(e)38 b Fq(tag)51 b(typ)l(e-name)378 2113 y(pr)l(e)l(dic)l(ate-name)378 2212 y(ve)l(ctor-of-instanc)l(es-name)378 2312 y(name-ac)l(c)l(essor) 378 2411 y(index-ac)l(c)l(essor)378 2511 y Fo(\()p Fq(instanc)l(e-name) e Fo(...\)\))291 2678 y Fr(This)33 b(de\014nes)g(a)g(new)g(record)e(t)n (yp)r(e,)k(b)r(ound)f(to)f Fq(typ)l(e-name)6 b Fr(,)35 b(with)e(as)g(man)n(y)f(instances)291 2778 y(as)j(there)g(are)g Fq(instanc)l(e-name)6 b Fr('s.)62 b Fq(V)-6 b(e)l(ctor-of-instanc)l (es-name)41 b Fr(is)36 b(b)r(ound)g(to)g(a)f(v)n(ector)291 2877 y(con)n(taining)g(the)i(instances)f(of)h(the)g(t)n(yp)r(e)f(in)h (the)g(same)f(order)f(as)h(the)h Fq(instanc)l(e-name)291 2977 y Fr(list.)77 b Fq(T)-6 b(ag)49 b Fr(is)41 b(b)r(ound)h(to)f(a)g (macro)e(that)j(when)f(giv)n(en)f(an)h Fq(instanc)l(e-name)47 b Fr(expands)291 3076 y(in)n(to)36 b(an)g(expression)e(that)j(returns)f (corresp)r(onding)e(instance.)63 b(The)36 b(name)g(lo)r(okup)g(is)291 3176 y(done)25 b(at)h(macro)f(expansion)g(time.)37 b Fq(Pr)l(e)l(dic)l(ate-name)c Fr(is)26 b(a)g(predicate)g(for)f(the)i (new)f(t)n(yp)r(e.)291 3276 y Fq(Name-ac)l(c)l(essor)48 b Fr(and)39 b Fq(index-ac)l(c)l(essor)48 b Fr(are)38 b(accessors)f(for)h(the)h(name)g(and)f(index)h(\(in)291 3375 y Fq(ve)l(ctor-of-instanc)l(es)7 b Fr(\))28 b(of)f(instances)g(of) h(the)g(t)n(yp)r(e.)p Black Black 291 3559 a Fo(\(define-enumera)o(ted) o(-t)o(yp)o(e)38 b(color)j(:color)378 3659 y(color?)378 3759 y(colors)378 3858 y(color-name)378 3958 y(color-index)378 4058 y(\(black)g(white)g(purple)g(maroon\)\))291 4257 y(\(color-name)e(\(vector-ref)g(colors)i(0\)\))h Fn(!)i Fo(black)291 4356 y(\(color-name)39 b(\(color)i(white\)\))389 b Fn(!)44 b Fo(white)291 4456 y(\(color-index)38 b(\(color)j (purple\)\))302 b Fn(!)44 b Fo(2)415 4640 y Fr(Finite)27 b(t)n(yp)r(es)e(are)g(en)n(umerations)g(that)h(allo)n(w)e(the)i(user)f (to)h(add)g(additional)f(\014elds)h(in)291 4739 y(the)i(t)n(yp)r(e.)37 b(The)27 b(syn)n(tax)g(for)g(de\014ning)h(a)f(\014nite)h(t)n(yp)r(e)g (is:)p Black Black 291 4907 a Fo(\(define-finite-)o(typ)o(e)37 b Fq(tag)51 b(typ)l(e-name)378 5006 y Fo(\()p Fq(\014eld-tag)g Fo(...\))p Black 1681 5255 a Fr(47)p Black eop end %%Page: 48 56 TeXDict begin 48 55 bop 0 TeXcolorgray Black Black Black 826 523 a Fq(pr)l(e)l(dic)l(ate-name)826 623 y(ve)l(ctor-of-instanc)l (es-name)826 722 y(name-ac)l(c)l(essor)826 822 y(index-ac)l(c)l(essor) 826 922 y Fo(\()p Fq(\014eld-tag)51 b(ac)l(c)l(essor-name)g Fo([)p Fq(mo)l(di\014er-name)6 b Fo(]\))826 1021 y(...)826 1121 y(\(\()p Fq(instanc)l(e-name)49 b(\014eld-value)h Fo(...\))870 1220 y(...\)\))739 1403 y Fr(The)32 b(additional)g (\014elds)g(are)f(sp)r(eci\014ed)i(exactly)e(as)h(with)h Fo(define-record-ty)o(pe)o Fr(.)45 b(The)739 1502 y(\014eld)30 b(argumen)n(ts)e(to)h(the)h(constructor)e(are)g(listed)i(after)f(the)h Fq(typ)l(e-name)6 b Fr(;)31 b(these)e(do)g(not)739 1602 y(include)39 b(the)g(name)f(and)h(index)f(\014elds.)70 b(The)39 b(form)f(ends)g(with)h(the)g(names)f(and)h(the)739 1701 y(initial)21 b(\014eld)g(v)-5 b(alues)20 b(for)g(the)h(instances)f (of)g(the)h(t)n(yp)r(e.)35 b(The)21 b(instances)f(are)f(constructed)i (b)n(y)739 1801 y(applying)g(the)g(\(unnamed\))h(constructor)e(to)i (these)f(initial)h(\014eld)f(v)-5 b(alues.)35 b(The)21 b(name)g(m)n(ust)739 1901 y(b)r(e)26 b(\014rst)g(and)f(the)i(remaining) e(v)-5 b(alues)25 b(m)n(ust)h(matc)n(h)g(the)g Fq(\014eld-tag)7 b Fr(s)27 b(in)f(the)g(constructor's)739 2000 y(argumen)n(t)g(list.)p Black Black 739 2210 a Fo(\(define-finite-t)o(yp)o(e)38 b(color)j(:color)826 2309 y(\(red)h(green)g(blue\))826 2409 y(color?)826 2509 y(colors)826 2608 y(color-name)826 2708 y(color-index)826 2808 y(\(red)129 b(color-red\))826 2907 y(\(green)41 b(color-green\))826 3007 y(\(blue)85 b(color-blue\))826 3106 y(\(\(black)172 b(0)130 b(0)g(0\))870 3206 y(\(white)84 b(255)43 b(255)f(255\))870 3306 y(\(purple)e(160)86 b(32)43 b(240\))870 3405 y(\(maroon)d(176)86 b(48)h(96\)\)\))739 3605 y(\(color-name)39 b(\(color)i(black\)\))389 b Fn(!)44 b Fo(black)739 3704 y(\(color-name)39 b(\(vector-ref)g(colors)i(1\)\))h Fn(!)i Fo(white)739 3804 y(\(color-index)39 b(\(color)i(purple\)\))301 b Fn(!)44 b Fo(2)739 3903 y(\(color-red)39 b(\(color)i(maroon\)\))389 b Fn(!)44 b Fo(176)739 4206 y Fj(5.11)135 b(Sets)46 b(o)l(v)l(er)g (\014nite)f(t)l(yp)t(es)739 4398 y Fr(The)35 b(structure)g Fo(enum-sets)d Fr(has)j(a)g(macro)g(for)g(de\014ning)g(t)n(yp)r(es)h (for)f(sets)g(of)g(elemen)n(ts)739 4498 y(of)43 b(\014nite)i(t)n(yp)r (es.)85 b(These)43 b(w)n(ork)f(naturally)h(with)h(the)g(\014nite)g(t)n (yp)r(es)g(de\014ned)g(b)n(y)f(the)739 4598 y Fo(finite-types)33 b Fr(structure,)40 b(but)e(are)f(not)h(tied)g(to)f(them.)68 b(The)38 b(syn)n(tax)f(for)g(de\014ning)739 4697 y(suc)n(h)27 b(a)g(t)n(yp)r(e)h(is:)p Black Black 739 4907 a Fo(\(define-enum-set)o (-t)o(ype)37 b Fq(id)53 b(typ)l(e-name)d(pr)l(e)l(dic)l(ate)h(c)l (onstructor)870 5006 y(element-syntax)h(element-pr)l(e)l(dic)l(ate)f (al)t(l-elements)g(element-index-r)l(ef)18 b Fo(\))p Black 2130 5255 a Fr(48)p Black eop end %%Page: 49 57 TeXDict begin 49 56 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(This)39 b(de\014nes)g Fq(id)49 b Fr(to)39 b(b)r(e)h(syn)n(tax)f(for)g(constructing)f(sets,)k Fq(typ)l(e-name)k Fr(to)39 b(b)r(e)h(a)f(v)-5 b(alue)291 623 y(represen)n(ting)21 b(the)j(t)n(yp)r(e,)g Fq(pr)l(e)l(dic)l(ate)31 b Fr(to)23 b(b)r(e)h(a)e(predicate)h(for)g(those)g(sets,)g(and)g Fq(c)l(onstructor)291 722 y Fr(a)k(pro)r(cedure)f(for)h(constructing)g (one)g(from)h(a)f(list.)415 822 y Fq(Element-syntax)38 b Fr(m)n(ust)28 b(b)r(e)g(the)h(name)f(of)g(a)g(macro)f(for)g (constructing)h(set)g(elemen)n(ts)291 922 y(from)22 b(names)h(\(akin)g (to)g(the)g Fq(tag)31 b Fr(argumen)n(t)22 b(to)g Fo(define-enumerated)o (-ty)o(pe)o Fr(\).)30 b Fq(Element-)291 1021 y(pr)l(e)l(dic)l(ate)36 b Fr(m)n(ust)28 b(b)r(e)h(a)f(predicate)g(for)g(the)h(elemen)n(t)g(t)n (yp)r(e,)g Fq(al)t(l-elements)36 b Fr(a)28 b(v)n(ector)g(of)g(all)291 1121 y(v)-5 b(alues)29 b(of)g(the)h(elemen)n(t)g(t)n(yp)r(e,)g(and)g Fq(element-index-r)l(ef)47 b Fr(m)n(ust)30 b(return)f(the)h(index)g(of) f(an)291 1220 y(elemen)n(t)e(within)i(the)f Fq(al)t(l-elements)35 b Fr(v)n(ector.)p Black 307 1365 a Fn(\017)p Black 41 w Fo(\(enum-set->list)h Fq(enum-set)8 b Fo(\))39 b Fn(!)j Fq(list)p Black 307 1465 a Fn(\017)p Black 41 w Fo(\(enum-set-member?)h Fq(enum-set)d(enumer)l(and)9 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 1564 a Fn(\017)p Black 41 w Fo(\(enum-set=?)46 b Fq(enum-set)40 b(enum-set)8 b Fo(\))40 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 1664 a Fn(\017)p Black 41 w Fo(\(enum-set-subset?)i Fq(enum-set)d(enum-set)8 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 307 1764 a Fn(\017)p Black 41 w Fo(\(enum-set-union)36 b Fq(enum-set)k(enum-set)8 b Fo(\))39 b Fn(!)j Fq(enum-set)p Black 307 1863 a Fn(\017)p Black 41 w Fo(\(enum-set-interse)o(ct)o(ion) 35 b Fq(enum-set)40 b(enum-set)8 b Fo(\))40 b Fn(!)83 b Fq(enum-set)p Black 307 1963 a Fn(\017)p Black 41 w Fo(\(enum-set-differe)o(nc)o(e)35 b Fq(enum-set)41 b(enum-set)8 b Fo(\))39 b Fn(!)83 b Fq(enum-set)p Black 307 2063 a Fn(\017)p Black 41 w Fo(\(enum-set-negatio)o(n)35 b Fq(enum-set)8 b Fo(\))40 b Fn(!)i Fq(enum-set)291 2207 y Fo(Enum-set->list)25 b Fr(con)n(v)n(erts)30 b(a)h(set)g(in)n(to)h(a)f(list)g(of)h(its)f (elemen)n(ts.)48 b Fo(Enum-set-member?)291 2307 y Fr(tests)41 b(for)g(mem)n(b)r(ership.)79 b Fo(Enum-set=?)c Fr(tests)42 b(t)n(w)n(o)f(sets)g(of)h(equal)f(t)n(yp)r(e)h(for)f(equal-)291 2406 y(it)n(y)-7 b(.)74 b(\(If)40 b(its)h(argumen)n(ts)d(are)h(not)h (of)g(the)g(same)g(t)n(yp)r(e,)j Fo(enum-set=?)70 b Fr(raises)39 b(an)g(ex-)291 2506 y(ception.\))80 b Fo(Enum-set-subset?)74 b Fr(tests,)46 b(for)41 b(t)n(w)n(o)h(sets)f(of)i(equal)e(t)n(yp)r(e,) 46 b(if)d(the)f(\014rst)291 2606 y(set)f(is)g(a)f(subset)i(of)f(the)g (second)g(one.)77 b Fo(Enum-set-union)35 b Fr(computes)41 b(the)h(union)f(of)291 2705 y(t)n(w)n(o)h(sets)g(of)h(equal)f(t)n(yp)r (e,)47 b Fo(enum-set-interse)o(ct)o(ion)36 b Fr(computes)43 b(the)g(in)n(tersection,)291 2805 y Fo(enum-set-differ)o(enc)o(e)12 b Fr(computes)18 b(the)h(in)n(tersection,)h(and)e Fo(enum-set-negatio)o (n)12 b Fr(com-)291 2905 y(putes)27 b(the)h(complemen)n(t)g(of)g(a)f (set.)415 3004 y(Here)g(is)h(an)f(example.)37 b(Giv)n(en)27 b(an)g(en)n(umerated)g(t)n(yp)r(e:)p Black Black 291 3181 a Fo(\(define-enumera)o(ted)o(-t)o(yp)o(e)38 b(color)j(:color)378 3281 y(color?)378 3380 y(colors)378 3480 y(color-name)378 3579 y(color-index)378 3679 y(\(red)h(blue)g(green\)\))415 3856 y Fr(w)n(e)27 b(can)h(de\014ne)f(sets)h(of)f(colors:)p Black Black 291 4032 a Fo(\(define-enum-se)o(t-t)o(yp)o(e)37 b(color-set)j(:color-set)1249 4132 y(color-set?)1249 4232 y(make-color-set)378 4331 y(color)h(color?)g(colors)g (color-index\))p Black Black 291 4508 a(>)i(\(enum-set->list)37 b(\(color-set)j(red)i(blue\)\))291 4608 y(\(#{Color)e(red})i(#{Color)e (blue}\))291 4707 y(>)j(\(enum-set->list)37 b(\(enum-set-negatio)o(n)g (\(color-set)j(red)i(blue\)\)\))291 4807 y(\(#{Color)e(green}\))291 4907 y(>)j(\(enum-set-member)o(?)37 b(\(color-set)j(red)i(blue\))g (\(color)f(blue\)\))291 5006 y(#t)p Black 1681 5255 a Fr(49)p Black eop end %%Page: 50 58 TeXDict begin 50 57 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(5.12)135 b(Hash)46 b(tables)739 709 y Fr(These)20 b(are)f(generic)g(hash)h(tables,)h(and)f(are)f(in)i(the)f(structure)g Fo(tables)p Fr(.)32 b(Strictly)20 b(sp)r(eaking)739 808 y(they)32 b(are)f(more)h(maps)g(than)g(tables,)h(as)f(ev)n(ery)e(table) j(has)e(a)h(v)-5 b(alue)32 b(for)g(ev)n(ery)f(p)r(ossible)739 908 y(k)n(ey)c(\(for)g(that)h(t)n(yp)r(e)g(of)f(table\).)38 b(All)28 b(but)g(a)f(\014nite)h(n)n(um)n(b)r(er)f(of)h(those)f(v)-5 b(alues)27 b(are)g Fo(#f)p Fr(.)p Black 755 1063 a Fn(\017)p Black 42 w Fo(\(make-table\))36 b Fn(!)42 b Fq(table)p Black 755 1163 a Fn(\017)p Black 42 w Fo(\(make-symbol-ta)o(bl)o(e\))35 b Fn(!)42 b Fq(symb)l(ol-table)p Black 755 1263 a Fn(\017)p Black 42 w Fo(\(make-string-ta)o(bl)o(e\))35 b Fn(!)42 b Fq(string-table)p Black 755 1362 a Fn(\017)p Black 42 w Fo(\(make-integer-t)o(ab)o(le\))35 b Fn(!)41 b Fq(inte)l (ger-table)p Black 755 1462 a Fn(\017)p Black 42 w Fo(\(make-table-mak) o(er)35 b Fq(c)l(omp)l(ar)l(e-pr)l(o)l(c)43 b(hash-pr)l(o)l(c)5 b Fo(\))42 b Fn(!)f Fq(pr)l(o)l(c)l(e)l(dur)l(e)p Black 755 1562 a Fn(\017)p Black 42 w Fo(\(make-table-imm)o(ut)o(abl)o(e!)35 b Fq(table)6 b Fo(\))739 1717 y Fr(The)37 b(\014rst)f(four)h(functions) g(listed)g(mak)n(e)f(v)-5 b(arious)36 b(kinds)h(of)g(tables.)64 b Fo(Make-table)33 b Fr(re-)739 1817 y(turns)28 b(a)g(table)h(whose)f (k)n(eys)f(ma)n(y)h(b)r(e)h(sym)n(b)r(ols,)f(in)n(teger,)g(c)n (haracters,)e(b)r(o)r(oleans,)i(or)g(the)739 1916 y(empt)n(y)e(list)g (\(these)g(are)f(also)g(the)h(v)-5 b(alues)26 b(that)g(ma)n(y)f(b)r(e)i (used)f(in)g Fo(case)e Fr(expressions\).)35 b(As)739 2016 y(with)27 b Fo(case)p Fr(,)e(comparison)g(is)i(done)f(using)h Fo(eqv?)p Fr(.)35 b(The)27 b(comparison)e(pro)r(cedures)g(used)i(in)739 2116 y(sym)n(b)r(ol,)g(string,)g(and)g(in)n(teger)g(tables)g(are)g Fo(eq?)p Fr(,)g Fo(string=?)p Fr(,)d(and)j Fo(=)p Fr(.)863 2217 y Fo(Make-table-maker)16 b Fr(tak)n(es)21 b(t)n(w)n(o)g(pro)r (cedures)g(as)g(argumen)n(ts)g(and)g(returns)h(a)f(n)n(ullary)739 2317 y(table-making)d(pro)r(cedure.)33 b Fq(Comp)l(ar)l(e-pr)l(o)l(c)25 b Fr(should)18 b(b)r(e)i(a)e(t)n(w)n(o-argumen)n(t)f(equalit)n(y)h (pred-)739 2417 y(icate.)67 b Fq(Hash-pr)l(o)l(c)43 b Fr(should)37 b(b)r(e)i(a)e(one)g(argumen)n(t)g(pro)r(cedure)f(that)i (tak)n(es)f(a)g(k)n(ey)g(and)739 2516 y(returns)24 b(a)h(non-negativ)n (e)f(in)n(teger)g(hash)h(v)-5 b(alue.)36 b(If)c Fo(\()p Fq(c)l(omp)l(ar)l(e-pr)l(o)l(c)49 b(x)k(y)7 b Fo(\))26 b Fr(returns)e(true,)739 2616 y(then)37 b Fo(\(=)42 b(\()p Fq(hash-pr)l(o)l(c)50 b(x)10 b Fo(\))42 b(\()p Fq(hash-pr)l(o)l(c)50 b(y)7 b Fo(\)\))36 b Fr(m)n(ust)g(also)f(return)h(true.)63 b(F)-7 b(or)36 b(example,)739 2715 y Fo(make-integer-tab)o(le)21 b Fr(could)28 b(b)r(e)g(de\014ned)f(as)g Fo(\(make-table-maker)37 b(=)43 b(abs\))p Fr(.)863 2817 y Fo(Make-table-immuta)o(ble)o(!)31 b Fr(prohibits)c(future)h(mo)r(di\014cation)f(to)h(its)f(argumen)n(t.)p Black 755 2973 a Fn(\017)p Black 42 w Fo(\(table?)47 b Fq(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 755 3072 a Fn(\017)p Black 42 w Fo(\(table-ref)c Fq(table)42 b(key)7 b Fo(\))42 b Fn(!)g Fq(value)g(or)g Fo(#f)p Black 755 3172 a Fn(\017)p Black 42 w Fo(\(table-set!)36 b Fq(table)43 b(key)f(value)6 b Fo(\))p Black 755 3272 a Fn(\017)p Black 42 w Fo(\(table-walk)36 b Fq(pr)l(o)l(c)l(e)l(dur)l (e)42 b(table)6 b Fo(\))p Black 755 3371 a Fn(\017)p Black 42 w Fo(\(table->entry-l)o(is)o(t)36 b Fq(table)6 b Fo(\))42 b Fn(!)f Fq(list)h(of)g(p)l(airs)739 3527 y Fo(Table?)62 b Fr(is)36 b(the)i(predicate)e(for)g(tables.)64 b Fo(Table-ref)33 b Fr(and)k Fo(table-set!)60 b Fr(access)35 b(and)739 3626 y(mo)r(dify)g(the)g(v)-5 b(alue)35 b(of)41 b Fq(key)i Fr(in)35 b Fq(table)6 b Fr(.)60 b Fo(Table-walk)31 b Fr(applies)j Fq(pr)l(o)l(c)l(e)l(dur)l(e)6 b Fr(,)37 b(whic)n(h)e(m)n(ust)739 3726 y(accept)42 b(t)n(w)n(o)f(argumen)n(ts,)k (to)d(ev)n(ery)g(asso)r(ciated)f(k)n(ey)g(and)h(non-)p Fo(#f)f Fr(v)-5 b(alue)43 b(in)f Fo(table)p Fr(.)739 3826 y Fo(Table->entry-lis)o(t)22 b Fr(returns)k(a)i(list)f(with)i(the) f(v)-5 b(alues)27 b(of)g(the)h(table.)p Black 755 3981 a Fn(\017)p Black 42 w Fo(\(default-hash-f)o(un)o(cti)o(on)35 b Fq(value)6 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)p Black 755 4081 a Fn(\017)p Black 42 w Fo(\(string-hash)36 b Fq(string)7 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)p Black 755 4180 a Fn(\017)p Black 42 w Fo(\(symbol-hash)36 b Fq(symb)l(ol)9 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)739 4336 y Fo(Default-hash-fun)o(ct)o(ion)29 b Fr(is)36 b(the)g(hash)f (function)h(used)g(in)g(the)g(tables)f(returned)h(b)n(y)739 4436 y Fo(make-table)p Fr(,)16 b Fo(string-hash)e Fr(is)k(the)h(one)f (used)g(b)n(y)i Fo(make-string-tab)o(le)p Fr(,)14 b(and)k Fo(symbol-hash)739 4535 y Fr(is)27 b(the)h(one)g(used)f(b)n(y)i Fo(make-symbol-tab)o(le)p Fr(.)739 4821 y Fj(5.13)135 b(P)l(ort)46 b(extensions)739 5006 y Fr(These)27 b(pro)r(cedures)g(are) f(in)i(structure)f Fo(extended-ports)p Fr(.)p Black 2130 5255 a(50)p Black eop end %%Page: 51 59 TeXDict begin 51 58 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(\(make-string-inpu)o(t-)o(por)o (t)35 b Fq(string)7 b Fo(\))42 b Fn(!)f Fq(input-p)l(ort)p Black 307 623 a Fn(\017)p Black 41 w Fo(\(make-string-outp)o(ut)o(-po)o (rt)o(\))35 b Fn(!)42 b Fq(output-p)l(ort)p Black 307 722 a Fn(\017)p Black 41 w Fo(\(string-output-po)o(rt)o(-ou)o(tp)o(ut) 35 b Fq(string-output-p)l(ort)8 b Fo(\))40 b Fn(!)h Fq(string)291 865 y Fo(Make-string-inp)o(ut-)o(po)o(rt)13 b Fr(returns)20 b(an)f(input)i(p)r(ort)f(that)g(that)g(reads)f(c)n(haracters)e(from)291 965 y(the)39 b(supplied)h(string.)72 b(An)40 b(end-of-\014le)f(ob)5 b(ject)40 b(is)f(returned)g(if)h(the)g(user)f(reads)f(past)291 1065 y(the)29 b(end)h(of)f(the)g(string.)42 b Fo(Make-string-out)o(put) o(-p)o(or)o(t)23 b Fr(returns)29 b(an)g(output)h(p)r(ort)f(that)291 1164 y(sa)n(v)n(es)39 b(the)j(c)n(haracters)d(written)j(to)f(it.)79 b(These)41 b(are)g(then)h(returned)f(as)f(a)h(string)g(b)n(y)291 1264 y Fo(string-output-p)o(ort)o(-o)o(ut)o(put)o Fr(.)p Black Black 291 1438 a Fo(\(read)g(\(make-string-inp)o(ut-)o(po)o(rt)c ("\(a)43 b(b\)"\)\))465 1538 y Fn(!)h Fo('\(a)e(b\))291 1737 y(\(let)g(\(\(p)g(\(make-string-out)o(pu)o(t-p)o(or)o(t\)\))o(\)) 378 1837 y(\(write)f('\(a)h(b\))h(p\))378 1937 y(\(let)f(\(\(s)g (\(string-output-p)o(ort)o(-o)o(utp)o(ut)37 b(p\)\)\))465 2036 y(\(display)j("c")j(p\))465 2136 y(\(list)e(s)j(\(string-output-)o (por)o(t-)o(out)o(pu)o(t)37 b(p\)\)\)\))465 2235 y Fn(!)44 b Fo('\("\(a)d(b\)")h("\(a)h(b\)c"\))p Black 307 2410 a Fn(\017)p Black 41 w Fo(\(limit-output)36 b Fq(output-p)l(ort)41 b(n)g(pr)l(o)l(c)l(e)l(dur)l(e)6 b Fo(\))291 2553 y Fq(Pr)l(o)l(c)l(e)l (dur)l(e)32 b Fr(is)26 b(called)g(on)g(an)f(output)i(p)r(ort.)36 b(Output)27 b(written)f(to)g(that)g(p)r(ort)g(is)g(copied)g(to)291 2653 y Fq(output-p)l(ort)32 b Fr(un)n(til)25 b Fq(n)31 b Fr(c)n(haracters)23 b(ha)n(v)n(e)h(b)r(een)h(written,)h(at)f(whic)n (h)g(p)r(oin)n(t)g Fo(limit-output)291 2752 y Fr(returns.)52 b(If)33 b Fq(pr)l(o)l(c)l(e)l(dur)l(e)39 b Fr(returns)32 b(b)r(efore)h(writing)f Fq(n)39 b Fr(c)n(haracters,)32 b(then)i Fo(limit-output)291 2852 y Fr(also)24 b(returns)g(at)h(that)g (time,)i(regardless)22 b(of)j(ho)n(w)g(man)n(y)f(c)n(haracters)f(ha)n (v)n(e)h(b)r(een)i(written.)p Black 307 2995 a Fn(\017)p Black 41 w Fo(\(make-tracking-in)o(pu)o(t-p)o(or)o(t)35 b Fq(input-p)l(ort)8 b Fo(\))41 b Fn(!)g Fq(input-p)l(ort)p Black 307 3095 a Fn(\017)p Black 41 w Fo(\(make-tracking-ou)o(tp)o(ut-) o(po)o(rt)35 b Fq(output-p)l(ort)8 b Fo(\))40 b Fn(!)i Fq(output-p)l(ort)p Black 307 3194 a Fn(\017)p Black 41 w Fo(\(current-row)37 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)g Fq(inte)l(ger)h(or)g Fo(#f)p Black 307 3294 a Fn(\017)p Black 41 w Fo(\(current-column)36 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)g Fq(inte)l(ger)h(or)g Fo(#f)p Black 307 3393 a Fn(\017)p Black 41 w Fo(\(fresh-line)37 b Fq(output-p)l(ort)8 b Fo(\))291 3536 y(Make-tracking-i)o(npu)o(t-)o(po) o(rt)k Fr(and)18 b Fo(make-tracking-out)o(pu)o(t-p)o(or)o(t)12 b Fr(return)18 b(p)r(orts)g(that)291 3636 y(k)n(eep)j(trac)n(k)g(of)g (the)i(curren)n(t)e(ro)n(w)f(and)i(column)g(and)f(are)g(otherwise)g (iden)n(tical)h(to)f(their)h(ar-)291 3736 y(gumen)n(ts.)33 b(Closing)17 b(a)h(trac)n(king)f(p)r(ort)h(do)r(es)h(not)f(close)f(the) i(underlying)f(p)r(ort.)34 b Fo(Current-row)291 3835 y Fr(and)27 b Fo(current-column)22 b Fr(return)27 b Fq(p)l(ort)8 b Fr('s)27 b(curren)n(t)g(read)g(or)f(write)i(lo)r(cation.)36 b(They)27 b(return)291 3935 y Fo(#f)36 b Fr(if)i Fq(p)l(ort)46 b Fr(do)r(es)37 b(not)h(k)n(eep)f(trac)n(k)f(of)i(its)g(lo)r(cation.)66 b Fo(Fresh-line)33 b Fr(writes)38 b(a)f(newline)291 4035 y(c)n(haracter)25 b(to)j Fq(output-p)l(ort)34 b Fr(if)h Fo(\(current-row)j Fq(p)l(ort)8 b Fo(\))28 b Fr(is)f(not)h(0.)p Black Black 291 4209 a Fo(\(define)40 b(p)j(\(make-tracking-ou)o(tpu)o (t-)o(por)o(t)37 b(\(open-output-file)g("/tmp/temp"\)\)\))291 4309 y(\(list)k(\(current-row)e(p\))j(\(current-column)c(p\)\))465 4408 y Fn(!)44 b Fo('\(0)e(0\))291 4508 y(\(display)e("012")h(p\))291 4608 y(\(list)g(\(current-row)e(p\))j(\(current-column)c(p\)\))465 4707 y Fn(!)44 b Fo('\(0)e(3\))291 4807 y(\(fresh-line)d(p\))291 4907 y(\(list)i(\(current-row)e(p\))j(\(current-column)c(p\)\))465 5006 y Fn(!)44 b Fo('\(1)e(0\))p Black 1681 5255 a Fr(51)p Black eop end %%Page: 52 60 TeXDict begin 52 59 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(\(fresh-line)39 b(p\))739 623 y(\(list)i(\(current-row)e (p\))k(\(current-column)37 b(p\)\))913 722 y Fn(!)44 b Fo('\(1)e(0\))739 996 y Fj(5.14)135 b(Fluid)45 b(bindings)739 1178 y Fr(These)29 b(pro)r(cedures)g(implemen)n(t)h(dynamic)g(binding)g (and)g(are)e(in)i(structure)g Fo(fluids)p Fr(.)41 b(A)739 1277 y Fq(\015uid)34 b Fr(is)26 b(a)f(cell)h(whose)e(v)-5 b(alue)26 b(can)f(b)r(e)h(b)r(ound)g(dynamically)-7 b(.)36 b(Eac)n(h)24 b(\015uid)i(has)f(a)g(top-lev)n(el)739 1377 y(v)-5 b(alue)18 b(that)h(is)g(used)f(when)h(the)g(\015uid)g(is)f(un)n (b)r(ound)h(in)g(the)g(curren)n(t)f(dynamic)g(en)n(vironmen)n(t.)p Black 755 1521 a Fn(\017)p Black 42 w Fo(\(make-fluid)36 b Fq(value)6 b Fo(\))42 b Fn(!)g Fq(\015uid)p Black 755 1621 a Fn(\017)p Black 42 w Fo(\(fluid)d Fq(\015uid)9 b Fo(\))40 b Fn(!)i Fq(value)p Black 755 1720 a Fn(\017)p Black 42 w Fo(\(let-fluid)37 b Fq(\015uid)42 b(value)g(thunk)9 b Fo(\))40 b Fn(!)i Fq(value\(s\))p Black 755 1820 a Fn(\017)p Black 42 w Fo(\(let-fluids)36 b Fq(\015uid)1520 1832 y Fk(0)1599 1820 y Fq(value)1783 1832 y Fk(0)1863 1820 y Fq(\015uid)2024 1832 y Fk(1)2103 1820 y Fq(value)2287 1832 y Fk(1)2366 1820 y Fq(.)13 b(.)g(.)g(thunk)c Fo(\))41 b Fn(!)h Fq(value\(s\))739 1964 y Fo(Make-fluid)25 b Fr(returns)j(a)g(new)h(\015uid)h(with)f Fq(value)36 b Fr(as)28 b(its)h(initial)h(top-lev)n(el)e(v)-5 b(alue.)40 b Fo(Fluid)739 2064 y Fr(returns)f Fo(fluid)p Fr('s)f(curren)n(t)h(v)-5 b(alue.)73 b Fo(Let-fluid)37 b Fr(calls)i Fo(thunk)p Fr(,)i(with)f Fq(\015uid)49 b Fr(b)r(ound)40 b(to)739 2163 y Fq(value)45 b Fr(un)n(til)38 b Fo(thunk)d Fr(returns.)67 b(Using)38 b(a)f(con)n(tin)n(uation)g(to)g(thro)n(w)g(out)h(of)g(the)g (call)f(to)739 2263 y Fo(thunk)25 b Fr(causes)g Fq(\015uid)36 b Fr(to)26 b(rev)n(ert)f(to)i(its)g(original)e(v)-5 b(alue,)26 b(while)h(thro)n(wing)f(bac)n(k)f(in)i(causes)739 2363 y Fq(\015uid)j Fr(to)21 b(b)r(e)h(reb)r(ound)f(to)g Fq(value)6 b Fr(.)36 b Fo(Let-fluid)17 b Fr(returns)k(the)g(v)-5 b(alue\(s\))22 b(returned)f(b)n(y)h Fq(thunk)9 b Fr(.)739 2462 y Fo(Let-fluids)21 b Fr(is)k(iden)n(tical)g(to)g Fo(let-fluid)c Fr(except)k(that)h(it)f(binds)h(an)e(arbitrary)f(n)n(um) n(b)r(er)739 2562 y(of)k(\015uids)h(to)g(new)f(v)-5 b(alues.)p Black Black 739 2738 a Fo(\(let*)41 b(\(\(f)i(\(make-fluid)c('a\)\)) 1044 2838 y(\(v0)j(\(fluid)f(f\)\))1044 2937 y(\(v1)h(\(let-fluid)e(f)j ('b)1306 3037 y(\(lambda)d(\(\))1393 3136 y(\(fluid)h(f\)\)\)\))1044 3236 y(\(v2)h(\(fluid)f(f\)\)\))826 3336 y(\(list)h(v0)g(v1)h(v2\)\)) 826 3435 y Fn(!)h Fo('\(a)e(b)h(a\))p Black Black 739 3611 a(\(let)f(\(\(f)g(\(make-fluid)d('a\)\))1000 3711 y(\(path)j('\(\)\))1000 3811 y(\(c)h(#f\)\))826 3910 y(\(let)f(\(\(add)g(\(lambda)e(\(\))1393 4010 y(\(set!)h(path)h(\(cons) g(\(fluid)f(f\))i(path\)\)\)\)\))913 4110 y(\(add\))913 4209 y(\(let-fluid)d(f)j('b)1000 4309 y(\(lambda)e(\(\))1088 4408 y(\(call-with-curr)o(ent)o(-c)o(on)o(tin)o(ua)o(tio)o(n)1175 4508 y(\(lambda)f(\(c0\))1262 4608 y(\(set!)h(c)j(c0\)\)\))1088 4707 y(\(add\)\)\))913 4807 y(\(add\))913 4907 y(\(if)f(\(<)f(\(length) f(path\))h(5\))1088 5006 y(\(c\))p Black 2130 5255 a Fr(52)p Black eop end %%Page: 53 61 TeXDict begin 53 60 bop 0 TeXcolorgray Black Black Black 639 523 a Fo(\(reverse)41 b(path\)\)\)\))378 623 y Fn(!)i Fo('\(a)g(b)g(a)g(b)g(a\))291 907 y Fj(5.15)135 b(OS)45 b(strings)291 1093 y Fr(On)26 b(common)g(op)r(erating)g(systems)g(suc)n (h)g(as)g(Unix)h(and)g(Windo)n(ws,)f(v)-5 b(arious)26 b(parameters)291 1192 y(to)j(OS)g(functionalit)n(y|suc)n(h)g(as)g (\014le)h(names,)f(user)g(names,)g(command-line)g(argumen)n(ts)291 1292 y(etc.|app)r(ear)e(as)g(text)h(in)g(most)f(con)n(texts,)g(but)i (are)d(really)h(b)n(yte)h(sequences:)36 b(On)28 b(Unix,)291 1391 y(the)j(b)n(yte)g(sequence)g(ma)n(y)g(b)r(e)g(in)n(terpreted)g(as) g(text)h(through)e(some)h(lo)r(cale-determined)291 1491 y(enco)r(ding.)k(On)24 b(Windo)n(ws,)h(suc)n(h)f(parameters)f(are)h(t)n (ypically)g(represen)n(ted)f(as)h(sequences)291 1591 y(of)i(UTF-16)f(co)r(de)i(units.)36 b(In)27 b(b)r(oth)g(cases,)e(not)i (ev)n(ery)e(suc)n(h)h(b)n(yte)g(sequence)g(has)g(a)g(string)291 1690 y(equiv)-5 b(alen)n(t:)38 b(On)28 b(Unix,)h(a)f(b)n(yte)h (sequence)f(enco)r(ding)g(a)g(\014le)h(name)f(using)g(Latin-1)g(often) 291 1790 y(cannot)34 b(b)r(e)h(deco)r(ded)g(using)g(UTF-8.)59 b(On)34 b(Windo)n(ws,)j(unpaired)d(UTF-16)g(surrogates)291 1890 y(are)26 b(admissible)h(in)h(enco)r(dings,)f(and)h(no)f(lossless)f (text)i(deco)r(ding)f(for)g(them)i(exists.)415 1991 y(F)-7 b(or)26 b(represen)n(ting)e(suc)n(h)i(string-lik)n(e)f(parameters,)f (Sc)n(heme)i(48)g(uses)f(an)h(abstraction)291 2091 y(called)39 b Fq(OS)h(strings)p Fr(.)73 b(An)40 b(OS)f(string)g(is)h(created)f (from)g(either)h(a)f(string)g(or)g(a)g(NUL-)291 2190 y(terminated)33 b(b)n(yte)h(sequence)f(stored)f(in)i(a)f(b)n(yte)h(v)n (ector,)g(and)f(has)g(an)g(asso)r(ciated)g(text)291 2290 y(co)r(dec)28 b(\(see)i(section)p 0 0 1 TeXcolorrgb 28 w(6.6.1)p Black(\))e(that)i(is)f(able)g(to)g(con)n(v)n(ert)e(from)i (one)g(represen)n(tation)e(to)j(the)291 2390 y(other.)65 b(The)37 b(exact)g(meaning)f(of)h(a)g(NUL-terminated)g(b)n(yte)g (sequence)g(is)g(dep)r(enden)n(t)291 2489 y(on)28 b(this)h(text)g(co)r (dec.)40 b(Ho)n(w)n(ev)n(er,)27 b(only)h(co)r(decs)g(for)h(enco)r (dings)f(that)h(are)e(a)i(conserv)-5 b(ativ)n(e)291 2589 y(extension)33 b(of)h(ASCI)r(I)h(\(suc)n(h)f(as)f(ASCI)r(I)i(itself,)h (Latin-1,)f(or)e(UTF-8\))h(should)g(b)r(e)g(used)291 2688 y(here,)28 b(to)g(allo)n(w)g(a)g(minimal)h(set)f(of)h(p)r(ortable) f(\014le)g(names.)40 b(\(The)29 b(Windo)n(ws)f(p)r(ort)g(uses)g(a)291 2788 y(sp)r(ecial)18 b(syn)n(thetic)h(enco)r(ding)f(called)h(UTF-8of16) e(compatible)i(with)g(UTF-8)f(but)i(capable)291 2888 y(of)33 b(enco)r(ding)g(ev)n(en)g(in)n(v)-5 b(alid)33 b(UTF-16)f(in)n(ternally)-7 b(,)35 b(but)f(uses)f(the)g(UTF-8)g(co)r (dec)g(at)h(the)291 2987 y(Sc)n(heme)27 b(lev)n(el.\))415 3089 y(Most)35 b(pro)r(cedures)f(accepting)h(OS)g(strings)g(also)f (accept)h(strings)g(or)f(b)n(yte)h(v)n(ectors,)291 3188 y(whic)n(h)20 b(are)f(then)i(used)g(to)f(construct)g(a)g(OS)g(string.) 34 b(In)20 b(the)h(headers)e(of)i(the)g(sp)r(eci\014cations)291 3288 y(of)38 b(these)g(pro)r(cedures,)h(suc)n(h)f(argumen)n(ts)f(o)r (ccur)g(as)h Fq(os-string-thing)7 b Fr(.)69 b(The)38 b(standard)291 3388 y(Sc)n(heme)d(pro)r(cedures)g(suc)n(h)h(as)f Fo(open-input-file)30 b Fr(that)36 b(tak)n(e)g(\014le)g(names)f(all)h (accept)291 3487 y Fq(os-string-thing)f Fr(argumen)n(ts.)g(OS)28 b(strings)e(are)h(in)h(the)g Fo(os-strings)23 b Fr(structure.)p Black 307 3642 a Fn(\017)p Black 41 w Fo(\(os-string?)46 b Fq(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 307 3742 a Fn(\017)p Black 41 w Fo(\(make-os-string)36 b Fq(text-c)l(o)l(de)l(c)k(string/byte-ve)l(ctor)9 b Fo(\))42 b Fn(!)f Fq(os-string)291 3897 y Fr(The)30 b Fo(os-string?)40 b Fr(predicate)29 b(returns)g Fo(#t)h Fr(if)g(its)h(argumen)n(t)d(is)i(an)g(OS)g(string,)g Fo(#f)f Fr(oth-)291 3997 y(erwise.)415 4098 y(The)d Fo(make-os-string) 20 b Fr(pro)r(cedure)k(creates)h(an)g(OS)g(string)g(from)h(a)f(text)h (co)r(dec)f(and)291 4198 y(a)c(b)n(yte)h(v)n(ector)e(or)h(string)g (that)h(de\014nes)g(its)f(con)n(ten)n(ts.)35 b(If)22 b(the)g(argumen)n(t)f(is)g(a)h(b)n(yte)f(v)n(ector,)291 4298 y(it)28 b(do)r(es)f(not)g(matter)h(if)g(it)g(is)f(NUL-terminated)h (or)f(not.)p Black 307 4453 a Fn(\017)p Black 41 w Fo (\(string->os-strin)o(g)35 b Fq(string)7 b Fo(\))42 b Fn(!)f Fq(os-string)p Black 307 4552 a Fn(\017)p Black 41 w Fo(\(byte-vector->os-)o(st)o(rin)o(g)35 b Fq(byte-ve)l(ctor)9 b Fo(\))42 b Fn(!)f Fq(os-string)p Black 307 4652 a Fn(\017)p Black 41 w Fo(\(x->os-string)36 b Fq(os-string-thing)7 b Fo(\))42 b Fn(!)f Fq(os-string)291 4807 y Fr(These)30 b(pro)r(cedures)f(create)h(an)g(OS)h(string)f(from)g(a)g(string,)h(a)f (b)n(yte-v)n(ector)f(\(whose)h(last)291 4907 y(v)-5 b(alue)27 b(should)f(b)r(e)i(0\),)f(and)g(an)g Fq(os-string-thing)34 b Fr(argumen)n(t,)27 b(resp)r(ectiv)n(ely)-7 b(,)26 b(alw)n(a)n(ys)f (using)291 5006 y(the)j(standard)e(OS-string)g(text)i(co)r(dec)g(\(see) f(b)r(elo)n(w\).)p Black 1681 5255 a(53)p Black eop end %%Page: 54 62 TeXDict begin 54 61 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(os-string->byt)o(e-)o(vec)o (to)o(r)36 b Fq(os-string)7 b Fo(\))41 b Fn(!)g Fq(byte-ve)l(ctor)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(os-string->str)o(in)o(g)36 b Fq(os-string)7 b Fo(\))41 b Fn(!)h Fq(string)739 786 y Fr(These)28 b(pro)r(cedures)g(yield)g(the)h(con)n(ten)n(ts)f(of)h(an) f(OS)h(string.)39 b(F)-7 b(or)28 b(an)h(OS)f(string)g(created)739 886 y(from)e(a)h(string,)f Fo(os-string->string)20 b Fr(will)27 b(return)f(a)h(string)f(with)h(the)h(same)e(con)n(ten)n(ts;) 739 985 y(for)39 b(an)f(OS)h(string)g(created)f(from)h(a)g(b)n(yte)g(v) n(ector,)i Fo(os-string->byte-)o(ve)o(cto)o(r)33 b Fr(will)739 1085 y(return)d(a)g(b)n(yte)g(v)n(ector)f(with)i(the)g(same)f(con)n (ten)n(ts.)44 b(F)-7 b(or)30 b(the)h(other)e(cases,)h(data)g(loss)g(as) 739 1184 y(determined)e(b)n(y)f(the)h(text)g(co)r(dec)f(is)h(p)r (ossible.)p Black 755 1348 a Fn(\017)p Black 42 w Fo(\(os-string-text)o (-c)o(ode)o(c)35 b Fq(os-string)7 b Fo(\))42 b Fn(!)f Fq(text-c)l(o)l(de)l(c)739 1511 y Fr(This)27 b(pro)r(cedure)g(returns)g (the)h(text)g(co)r(dec)f(of)h(the)g(OS)f(string.)p Black 755 1674 a Fn(\017)p Black 42 w Fo(\(os-string=?)45 b Fq(os-string)c(os-string)7 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)739 1837 y Fr(This)30 b(pro)r(cedure)g(returns)f Fo(#t)h Fr(if)h(its)f(argumen)n(ts)f(denote)i(the)f(same)g(b)n(yte)g(sequence,) h Fo(#f)739 1937 y Fr(otherwise.)p Black 755 2100 a Fn(\017)p Black 42 w Fo(\(x->os-byte-vec)o(to)o(r)36 b Fq(os-string-thing)7 b Fo(\))41 b Fn(!)h Fq(byte-ve)l(ctor)p Black 755 2200 a Fn(\017)p Black 42 w Fo(\(string->os-byt)o(e-)o(vec)o(to)o(r)36 b Fq(string)7 b Fo(\))41 b Fn(!)g Fq(byte-ve)l(ctor)739 2363 y Fr(These)19 b(are)g(con)n(v)n(enience)f(pro)r(cedures:)32 b(The)19 b(\014rst)h(is)f(the)h(comp)r(osition)f(of)26 b Fo(x->os-string)739 2463 y Fr(and)18 b Fo(os-string->byte-)o(vec)o (to)o(r)p Fr(,)c(and)19 b(the)f(second)g(is)g(the)h(comp)r(osition)f (of)25 b Fo(string->os-stri)o(ng)739 2562 y Fr(and)i Fo(os-string->byte-v)o(ec)o(tor)o Fr(.)p Black 755 2726 a Fn(\017)p Black 42 w Fo(\(current-os-str)o(in)o(g-t)o(ex)o(t-c)o(od)o (ec\))35 b Fn(!)41 b Fq(text-c)l(o)l(de)l(c)p Black 755 2825 a Fn(\017)p Black 42 w Fo(\(call-with-os-s)o(tr)o(ing)o(-t)o(ext)o (-c)o(ode)o(c)35 b Fq(text-c)l(o)l(de)l(c)41 b(thunk)9 b Fo(\))40 b Fn(!)84 b Fq(value\(s\))739 2988 y Fr(The)32 b Fo(current-os-string)o(-t)o(ex)o(t-c)o(od)o(ec)26 b Fr(returns)31 b(the)i(curren)n(t)e(text)i(co)r(dec)f(used)g(for)739 3088 y(creating)k(new)i(OS)f(strings.)65 b(The)37 b(initial)h(default)g (is)f(determined)g(b)n(y)h(the)f(op)r(erating)739 3188 y(system.)d(\(On)21 b(Unix,)h(this)f(is)f(the)h(text)g(co)r(dec)f (determined)h(b)n(y)f(the)h(lo)r(cale.)34 b(On)21 b(Windo)n(ws,)739 3287 y(this)e(is)f(UTF-8.\))34 b(The)18 b Fo(call-with-os-stri)o(ng-)o (te)o(xt)o(-co)o(de)o(c)13 b Fr(pro)r(cedure)k(dynamically)739 3387 y(binds)28 b(the)g(curren)n(t)e(text)i(co)r(dec)g(to)f Fq(text-c)l(o)l(de)l(c)32 b Fr(during)27 b(the)h(in)n(v)n(o)r(cation)e (of)i Fq(thunk)8 b Fr(.)739 3686 y Fj(5.16)135 b(Shell)46 b(commands)739 3876 y Fr(Structure)27 b Fo(c-system-function)21 b Fr(pro)n(vides)26 b(access)h(to)g(the)h(C)g Fo(system\(\))c Fr(function.)p Black 755 4040 a Fn(\017)p Black 42 w Fo(\(have-system?\))44 b Fn(!)e Fq(b)l(o)l(ole)l(an)p Black 755 4139 a Fn(\017)p Black 42 w Fo(\(system)c Fq(os-string-thing) 7 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)739 4302 y Fo(Have-system?)30 b Fr(returns)23 b(true)h(if)g(the)g(underlying)e(C)i(implemen)n(tation) g(has)f(a)g(command)739 4402 y(pro)r(cessor.)47 b Fo(\(System)41 b Fq(string)7 b Fo(\))31 b Fr(passes)g Fq(string)39 b Fr(to)32 b(the)g(C)g Fo(system\(\))c Fr(function)k(and)g(re-)739 4502 y(turns)27 b(the)h(result.)p Black Black 739 4707 a Fo(\(begin)826 4807 y(\(system)41 b("echo)g(foo)i(>)g(test-file"\)) 826 4907 y(\(call-with-input)o(-fi)o(le)37 b("test-file")i(read\)\))739 5006 y Fn(!)44 b Fo('foo)p Black 2130 5255 a Fr(54)p Black eop end %%Page: 55 63 TeXDict begin 55 62 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(5.17)135 b(So)t(c)l(k)l(ets)291 705 y Fr(Structure)25 b Fo(sockets)e Fr(pro)n(vides)i(access)g(to)g(TCP/IP)g(so)r(c)n(k)n (ets)f(for)i(in)n(terpro)r(cess)e(and)i(net-)291 805 y(w)n(ork)g(comm)n(unication.)p Black 307 944 a Fn(\017)p Black 41 w Fo(\(open-socket\))36 b Fn(!)42 b Fq(so)l(cket)p Black 307 1044 a Fn(\017)p Black 41 w Fo(\(open-socket)37 b Fq(p)l(ort-numb)l(er)9 b Fo(\))40 b Fn(!)h Fq(so)l(cket)p Black 307 1143 a Fn(\017)p Black 41 w Fo(\(socket-port-numb)o(er)35 b Fq(so)l(cket)8 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)p Black 307 1243 a Fn(\017)p Black 41 w Fo(\(close-socket)36 b Fq(so)l(cket)8 b Fo(\))p Black 307 1343 a Fn(\017)p Black 41 w Fo(\(socket-accept)36 b Fq(so)l(cket)8 b Fo(\))41 b Fn(!)h Fq(input-p)l(ort)f(output-p)l(ort)p Black 307 1442 a Fn(\017)p Black 41 w Fo(\(get-host-name\))36 b Fn(!)41 b Fq(string)291 1582 y Fo(Open-socket)29 b Fr(creates)k(a)g (new)h(so)r(c)n(k)n(et.)55 b(If)34 b(no)g Fq(p)l(ort-numb)l(er)42 b Fr(is)34 b(supplied)g(the)g(system)291 1682 y(pic)n(ks)j(one)g(at)h (random.)66 b Fo(Socket-port-numbe)o(r)32 b Fr(returns)37 b(a)g(so)r(c)n(k)n(et's)g(p)r(ort)g(n)n(um)n(b)r(er.)291 1781 y Fo(Close-socket)13 b Fr(closes)k(a)h(so)r(c)n(k)n(et,)i(prev)n (en)n(ting)d(an)n(y)g(further)i(connections.)33 b Fo(Socket-accept)291 1881 y Fr(accepts)f(a)g(single)h(connection)f(on)h Fq(so)l(cket)8 b Fr(,)34 b(returning)e(an)h(input)g(p)r(ort)g(and)g(an)f(output)291 1980 y(p)r(ort)d(for)f(comm)n(unicating)h(with)h(the)f(clien)n(t.)42 b(If)30 b(no)f(clien)n(t)g(is)h(w)n(aiting)f Fo(socket-accept)291 2080 y Fr(blo)r(c)n(ks)c(un)n(til)i(one)f(app)r(ears.)35 b Fo(Get-host-name)21 b Fr(returns)26 b(the)g(net)n(w)n(ork)f(name)h (of)h(the)f(ma-)291 2180 y(c)n(hine.)p Black 307 2319 a Fn(\017)p Black 41 w Fo(\(socket-client)36 b Fq(host-name)42 b(p)l(ort-numb)l(er)9 b Fo(\))40 b Fn(!)h Fq(input-p)l(ort)h(output-p)l (ort)291 2459 y Fo(Socket-client)27 b Fr(connects)k(to)i(the)f(serv)n (er)f(at)h Fq(p)l(ort-numb)l(er)40 b Fr(on)32 b(the)h(mac)n(hine)f (named)291 2559 y Fq(host-name)6 b Fr(.)37 b Fo(Socket-client)22 b Fr(blo)r(c)n(ks)27 b(un)n(til)h(the)g(serv)n(er)e(accepts)h(the)h (connection.)415 2658 y(The)22 b(follo)n(wing)f(simple)h(example)f(sho) n(ws)g(a)h(serv)n(er)e(and)h(clien)n(t)h(for)g(a)f(cen)n(tralized)g (UID)291 2758 y(service.)p Black Black 291 2914 a Fo(\(define)40 b(\(id-server\))378 3014 y(\(let)i(\(\(socket)e(\(open-socket\)\)\))465 3113 y(\(display)g("Waiting)g(on)j(port)f("\))465 3213 y(\(display)e(\(socket-port-numb)o(er)d(socket\)\))465 3313 y(\(newline\))465 3412 y(\(let)42 b(loop)g(\(\(next-id)e(0\)\))552 3512 y(\(call-with-value)o(s)639 3611 y(\(lambda)h(\(\))726 3711 y(\(socket-accept)d(socket\)\))639 3811 y(\(lambda)j(\(in)h(out\)) 726 3910 y(\(display)f(next-id)f(out\))726 4010 y(\(close-input-port)d (in\))726 4110 y(\(close-output-por)o(t)h(out\))726 4209 y(\(loop)k(\(+)h(next-id)d(1\)\)\)\)\)\)\))291 4408 y(\(define)g (\(get-id)h(machine)g(port-number\))378 4508 y(\(call-with-value)o(s) 465 4608 y(\(lambda)g(\(\))552 4707 y(\(socket-client)d(machine)j (port-number\)\))465 4807 y(\(lambda)g(\(in)h(out\))552 4907 y(\(let)g(\(\(id)g(\(read)f(in\)\)\))639 5006 y (\(close-input-port)c(in\))p Black 1681 5255 a Fr(55)p Black eop end %%Page: 56 64 TeXDict begin 56 63 bop 0 TeXcolorgray Black Black Black 1088 523 a Fo(\(close-output-p)o(ort)37 b(out\))1088 623 y(id\)\)\)\))739 897 y Fj(5.18)135 b(Pro\014ling)739 1079 y Fr(The)26 b(pro\014ler)f(can)h(b)r(e)g(used)h(programmatically)c (from)j(within)h(the)f(co)r(de)g(and)g(its)h(results)739 1178 y(can)g(b)r(e)h(pro)r(cessed)f(dynamically)-7 b(.)863 1278 y(The)44 b(structure)e Fo(profiler)e Fr(o\013ers)i(basic)h(data)g (structures)f(and)h(functions.)84 b(All)739 1378 y(functions)45 b(need)f(a)h Fo(profile-data)39 b Fr(record)k(argumen)n(t)h(that)h(can) f(b)r(e)h(created)f(with)739 1477 y Fo(make-empty-profi)o(le)o(-da)o (ta)o Fr(.)p Black 755 1626 a Fn(\017)p Black 42 w Fo(\(make-empty-pro) o(fi)o(le-)o(da)o(ta\))35 b Fn(!)41 b Fq(pr)l(o\014le-data)p Black 755 1725 a Fn(\017)p Black 42 w Fo(\(profile-thunk)35 b Fq(pr)l(o\014le-data)43 b(thunk)e([interrupt-time)g ([with-non-instr?]])9 b Fo(\))52 b Fn(!)41 b Fq(value)863 1874 y Fo(profile-thunk)14 b Fr(executes)19 b(a)g(th)n(unk)g(under)g (the)h(pro\014ler.)32 b(The)20 b(data)e(is)h(stored)f(in)i(the)739 1973 y Fq(pr)l(o\014le-data)36 b Fr(record)26 b(passed)i(as)f(argumen)n (t.)38 b(Optionally)27 b(the)i(timeout)f(for)g(the)g(pro\014ler)739 2073 y(in)n(terrupt)21 b(can)g(b)r(e)h(passed)e(\(in)i(milliseconds\).) 35 b(The)21 b(return)g(v)-5 b(alue)21 b(of)28 b Fo(profile-thunk)16 b Fr(is)739 2172 y(the)21 b(return)g(v)-5 b(alue)20 b(of)28 b Fo(thunk)p Fr(.)k(By)21 b(default,)i(non-instrumen)n(ted)d(co)r(de)h (will)g(b)r(e)g(pro\014led)g(b)n(y)739 2272 y(the)30 b(sampling)g(pro)r(cess.)43 b(By)30 b(passing)g Fo(with-non-instr?)81 b(=)43 b(#f)29 b Fr(only)h(instrumen)n(ted)739 2372 y(functions)e(will) g(b)r(e)g(pro\014led.)863 2471 y(After)g(pro\014ling)f(data,)g(can)h(b) r(e)g(retriev)n(ed)e(with)i(the)g(follo)n(wing)f(accessors:)p Black 755 2620 a Fn(\017)p Black 42 w Fo(\(profile-data-s)o(ta)o(rtt)o (im)o(e)36 b Fq(pr)l(o\014le-data)6 b Fo(\))42 b Fn(!)g Fq(numb)l(er)p Black 755 2719 a Fn(\017)p Black 42 w Fo(\(profile-data-e)o(nd)o(tim)o(e)35 b Fq(pr)l(o\014le-data)6 b Fo(\))43 b Fn(!)f Fq(numb)l(er)p Black 755 2819 a Fn(\017)p Black 42 w Fo(\(profile-data-r)o(un)o(tim)o(e)35 b Fq(pr)l (o\014le-data)6 b Fo(\))43 b Fn(!)f Fq(numb)l(er)p Black 755 2919 a Fn(\017)p Black 42 w Fo(\(profile-data-m)o(em)o(ory)o(us)o (e)36 b Fq(pr)l(o\014le-data)6 b Fo(\))42 b Fn(!)g Fq(numb)l(er)p Black 755 3018 a Fn(\017)p Black 42 w Fo(\(profile-data-g)o(cr)o(uns)35 b Fq(pr)l(o\014le-data)6 b Fo(\))43 b Fn(!)e Fq(numb)l(er)p Black 755 3118 a Fn(\017)p Black 42 w Fo(\(profile-data-s)o(am)o(ple)o (s)35 b Fq(pr)l(o\014le-data)6 b Fo(\))43 b Fn(!)f Fq(numb)l(er)p Black 755 3217 a Fn(\017)p Black 42 w Fo(\(profile-data-i)o(nt)o(err)o (up)o(tti)o(me)35 b Fq(pr)l(o\014le-data)6 b Fo(\))43 b Fn(!)e Fq(numb)l(er)863 3366 y Fr(Times)28 b(are)f(in)g (milliseconds,)h(memory)e(usage)h(in)h(b)n(ytes.)863 3465 y(The)23 b(follo)n(wing)f(functions)g(pro)r(duce)h(the)f(same)g (output)h(as)f(the)h Fo(,profile)d Fr(command)739 3565 y(\(see)40 b(section)p 0 0 1 TeXcolorrgb 39 w(3.6)p Black(\).)73 b(They)40 b(all)g(tak)n(e)f(an)h(optional)f Fq(p)l(ort)48 b Fr(argumen)n(t.)72 b(Default)41 b(is)f(the)739 3665 y Fo(current-output-p)o(or)o(t)p Fr(.)p Black 755 3813 a Fn(\017)p Black 42 w Fo(\(profile-displa)o(y)35 b Fq(pr)l (o\014le-data)43 b([p)l(ort])9 b Fo(\))p Black 755 3913 a Fn(\017)p Black 42 w Fo(\(profile-displa)o(y-)o(ove)o(rv)o(iew)35 b Fq(pr)l(o\014le-data)42 b([p)l(ort])9 b Fo(\))p Black 755 4012 a Fn(\017)p Black 42 w Fo(\(profile-displa)o(y-)o(fla)o(t)35 b Fq(pr)l(o\014le-data)43 b([p)l(ort])9 b Fo(\))p Black 755 4112 a Fn(\017)p Black 42 w Fo(\(profile-displa)o(y-)o(tre)o(e)35 b Fq(pr)l(o\014le-data)43 b([p)l(ort])9 b Fo(\))863 4260 y(profile-display)k Fr(prin)n(ts)18 b(the)g(full)h(output)g(of)g(the)f (pro\014ler.)33 b(The)19 b(other)e Fo(profile-display-.)o(..)739 4360 y Fr(functions)28 b(only)f(displa)n(y)g(the)h(resp)r(ectiv)n(e)f (part)g(of)g(the)h(output.)863 4459 y(The)e(single)g(\014elds)g(in)g (the)g(\015at)g(pro\014le)f(can)g(b)r(e)i(retriev)n(ed)d(with)j(the)f (follo)n(wing)f(acces-)739 4559 y(sors:)p Black 755 4707 a Fn(\017)p Black 42 w Fo(\(profile-functi)o(on)o(-ca)o(ll)o(s)36 b Fq(pr)l(o\014le-data)42 b(names)7 b Fo(\))p Black 755 4807 a Fn(\017)p Black 42 w Fo(\(profile-functi)o(on)o(-re)o(cc)o(all)o (s)35 b Fq(pr)l(o\014le-data)43 b(names)7 b Fo(\))p Black 755 4907 a Fn(\017)p Black 42 w Fo(\(profile-functi)o(on)o(-no)o(nr)o (ecc)o(al)o(ls)35 b Fq(pr)l(o\014le-data)43 b(names)7 b Fo(\))p Black 755 5006 a Fn(\017)p Black 42 w Fo(\(profile-functi)o (on)o(-oc)o(cu)o(rs)35 b Fq(pr)l(o\014le-data)43 b(names)7 b Fo(\))p Black 2130 5255 a Fr(56)p Black eop end %%Page: 57 65 TeXDict begin 57 64 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(\(profile-function)o(-h)o(ist) 35 b Fq(pr)l(o\014le-data)42 b(names)7 b Fo(\))p Black 307 623 a Fn(\017)p Black 41 w Fo(\(profile-function)o(-m)o(emo)o(ry)o (us)o(e)36 b Fq(pr)l(o\014le-data)42 b(names)7 b Fo(\))p Black 307 722 a Fn(\017)p Black 41 w Fo(\(profile-function)o(-t)o(ime)o (sh)o(ar)o(e)36 b Fq(pr)l(o\014le-data)42 b(names)7 b Fo(\))p Black 307 822 a Fn(\017)p Black 41 w Fo(\(profile-function)o (-t)o(ime)o(-c)o(um)o(ula)o(ti)o(ve)35 b Fq(pr)l(o\014le-data)43 b(names)7 b Fo(\))p Black 307 922 a Fn(\017)p Black 41 w Fo(\(profile-function)o(-t)o(ime)o(-s)o(el)o(f)36 b Fq(pr)l(o\014le-data)42 b(names)7 b Fo(\))415 1072 y Fr(Here)27 b Fq(names)35 b Fr(is)27 b(the)h(list)g(of)f(names)g(sp)r (ecifying)h(the)g(function,)g(optionally)f(with)h(it's)291 1172 y(mo)r(dule.)36 b(F)-7 b(or)24 b(example,)i Fo(names)41 b(=)i(\("dynamic-wind",)37 b("wind"\))23 b Fr(w)n(ould)h(sp)r(ecify)i (the)291 1271 y Fo(dynamic-wind)j Fr(function)35 b(in)g(the)g(mo)r (dule)g Fo(wind)p Fr(,)g(if)g(it)g(w)n(as)e(seen)i(while)g (pro\014ling.)56 b(If)291 1371 y(t)n(w)n(o)27 b(or)g(more)h(functions)g (matc)n(h,)h(the)f(\014rst)g(one)g(is)g(used.)39 b(If)29 b(no)f(function)h(matc)n(hes,)f(the)291 1471 y(functions)f(return)h Fo(#)p Fn(f)p Fo(Unspecific)p Fn(g)p Fr(.)415 1571 y(The)19 b(argumen)n(t)e Fq(names)25 b Fr(can)18 b(also)g(b)r(e)g(a)g(plain)h (string,)g(as)f(in)h Fo(\(profile-displa)o(y-)o(fun)o(ct)o(ion)o(-f)o (lat)291 1670 y(prof-data)39 b("module"\))p Fr(.)69 b(This)39 b(will)h(displa)n(y)f(all)g(\015at)g(function)h(pro\014les)e(that)i(ha) n(v)n(e)291 1770 y(\\mo)r(dule")26 b(either)i(as)f(name)g(or)g(mo)r (dule.)415 1870 y(The)h(meanings)f(of)g(the)h(\014elds)g(that)g(the)g (functions)g(return)f(are)f(as)h(follo)n(ws:)p Black 415 2037 a Fn(\017)p Black 41 w Fo(calls)p Fr(:)34 b(total)24 b(n)n(um)n(b)r(er)h(of)g(calls)g(\(recursiv)n(e)e(and)i(non-recursiv)n (e\))e(to)i(the)g(function)p Black 415 2204 a Fn(\017)p Black 41 w Fo(reccalls)p Fr(:)34 b(total)27 b(n)n(um)n(b)r(er)g(of)h (recursiv)n(e)e(calls)h(to)g(the)h(function)p Black 415 2372 a Fn(\017)p Black 41 w Fo(nonreccalls)p Fr(:)33 b(total)27 b(n)n(um)n(b)r(er)g(of)h(non-recursiv)n(e)d(calls)i(to)g (the)h(function)p Black 415 2539 a Fn(\017)p Black 41 w Fo(occurs)p Fr(:)35 b(n)n(um)n(b)r(er)27 b(of)h(times)f(the)h (function)h(w)n(as)d(seen)h(on)h(stac)n(k)e(while)i(pro\014ling)p Black 415 2707 a Fn(\017)p Black 41 w Fo(hist)p Fr(:)35 b(n)n(um)n(b)r(er)28 b(of)f(times)h(the)g(function)g(w)n(as)f(seen)g (running)h(while)f(pro\014ling)p Black 415 2874 a Fn(\017)p Black 41 w Fo(memoryuse)p Fr(:)33 b(b)n(ytes)28 b(of)f(memory)g(used)h (b)n(y)f(the)h(function)p Black 415 3042 a Fn(\017)p Black 41 w Fo(timeshare)p Fr(:)38 b(p)r(ercen)n(tage)29 b(of)h(time)h(used)f(b)n(y)g(the)h(function)f(itself)h(\(n)n(um)n(b)r (er)f(from)498 3141 y(0)d(to)h(1\))p Black 415 3309 a Fn(\017)p Black 41 w Fo(time-cumulative)p Fr(:)j(total)c(time)h(in)g (ms)g(the)g(function)g(w)n(as)f(on)g(call-stac)n(k)p Black 415 3476 a Fn(\017)p Black 41 w Fo(time-self)p Fr(:)33 b(total)28 b(time)g(in)g(ms)f(the)h(function)g(activ)n(ely)f (running)415 3643 y(The)32 b(follo)n(wing)f(sho)n(ws)g(a)g(short)h (example)f(of)h(the)h(usage)d(of)i(the)h(pro\014ler)e(in)n(terface,)291 3743 y(where)c Fo(main)f Fr(is)h(the)h(function)g(to)g(b)r(e)g (pro\014led:)p Black Black 291 3910 a Fo(\(define)40 b(prof-data)g(\(make-empty-profi)o(le)o(-d)o(ata)o(\)\))291 4110 y(\(profile-thunk)d(prof-data)j(\(lambda)h(\(\))i(\(main)e (22\)\)\))291 4209 y(\(display)f("Samples:)g("\))291 4309 y(\(display)g(\(profile-data-sa)o(mp)o(les)d(prof-data\)\))291 4408 y(\(newline\))291 4608 y(\(profile-displa)o(y-o)o(ve)o(rv)o(iew)g (prof-data\))291 4707 y(\(profile-displa)o(y-f)o(la)o(t)g(prof-data)j (\(current-output-p)o(or)o(t\)\))291 4807 y(\(profile-displa)o(y-t)o (re)o(e)d(prof-data\))291 5006 y(;)43 b(print)e(only)h(function)e("a")p Black 1681 5255 a Fr(57)p Black eop end %%Page: 58 66 TeXDict begin 58 65 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(\(profile-display)o(-f)o(unc)o(ti)o(on-)o(fl)o(at)37 b(prof-data)j('\("a"\)\))739 722 y(;)j(print)f(only)g(function)e("a")i (in)h(file)f("x.scm")739 822 y(\(profile-display)o(-f)o(unc)o(ti)o(on-) o(fl)o(at)37 b(prof-data)j('\("a")h("x.scm"\)\))739 1021 y(;)i(print)f(all)g(profiled)e(functions)g(in)j(file)f("x.scm")739 1121 y(\(profile-display)o(-f)o(unc)o(ti)o(on-)o(fl)o(at)37 b(prof-data)j("x.scm"\))739 1320 y(;)j(print)f(percentage)d(of)k(time)f ("a")g(was)g(running)739 1420 y(\(display)e(\(*)j(\(profile-functio)o (n-)o(tim)o(es)o(har)o(e)37 b(prof-data)j('\("a"\)\))h(100\)\))739 1710 y Fj(5.19)135 b(Macros)45 b(for)g(writing)h(lo)t(ops)739 1898 y Fo(Iterate)29 b Fr(and)j Fo(reduce)d Fr(are)i(extensions)g(of)h (named-)p Fo(let)f Fr(for)g(writing)h(lo)r(ops)f(that)h(w)n(alk)739 1997 y(do)n(wn)c(one)f(or)h(more)f(sequences,)h(suc)n(h)g(as)f(the)i (elemen)n(ts)f(of)g(a)g(list)h(or)e(v)n(ector,)g(the)i(c)n(har-)739 2097 y(acters)i(read)h(from)g(a)g(p)r(ort,)h(or)e(an)h(arithmetic)h (series.)50 b(Additional)32 b(sequences)g(can)g(b)r(e)739 2196 y(de\014ned)c(b)n(y)f(the)h(user.)36 b Fo(Iterate)25 b Fr(and)j Fo(reduce)d Fr(are)h(in)i(structure)f Fo(reduce)p Fr(.)739 2445 y Fe(5.19.1)112 b Fb(Iterate)739 2603 y Fr(The)28 b(syn)n(tax)e(of)34 b Fo(iterate)25 b Fr(is:)p Black Black 826 2782 a Fo(\(iterate)40 b Fq(lo)l(op-name)1218 2881 y Fo(\(\()p Fq(se)l(quenc)l(e-typ)l(e)49 b(element-variable)j(se)l (quenc)l(e-data)e Fo(...\))1262 2981 y(...\))1218 3080 y(\(\()p Fq(state-variable)h(initial-value)6 b Fo(\))1262 3180 y(...\))913 3280 y Fq(b)l(o)l(dy-expr)l(ession)913 3379 y Fo([)p Fq(\014nal-expr)l(ession)g Fo(]\))863 3554 y(Iterate)21 b Fr(steps)i(the)h Fq(element-variable)6 b Fr(s)25 b(in)e(parallel)f(through)h(the)h(sequences,)f(while)739 3654 y(eac)n(h)g Fq(state-variable)32 b Fr(has)23 b(the)h(corresp)r (onding)f Fq(initial-value)32 b Fr(for)23 b(the)i(\014rst)e(iteration)g (and)739 3754 y(ha)n(v)n(e)30 b(later)g(v)-5 b(alues)30 b(supplied)i(b)n(y)g Fq(b)l(o)l(dy-expr)l(ession)6 b Fr(.)48 b(If)31 b(an)n(y)g(sequence)f(has)g(reac)n(hed)g(its)739 3853 y(limit)39 b(the)g(v)-5 b(alue)38 b(of)h(the)g Fo(iterate)c Fr(expression)i(is)i(the)g(v)-5 b(alue)38 b(of)45 b Fq(\014nal-expr)l (ession)6 b Fr(,)42 b(if)739 3953 y(presen)n(t,)24 b(or)e(the)i(curren) n(t)f(v)-5 b(alues)23 b(of)h(the)f Fq(state-variable)6 b Fr(s,)26 b(returned)e(as)e(m)n(ultiple)j(v)-5 b(alues.)739 4052 y(If)39 b(no)f(sequence)g(has)f(reac)n(hed)h(its)g(limit,)k Fq(b)l(o)l(dy-expr)l(ession)k Fr(is)38 b(ev)-5 b(aluated)38 b(and)g(either)739 4152 y(calls)31 b Fq(lo)l(op-name)39 b Fr(with)31 b(new)h(v)-5 b(alues)31 b(for)g(the)h Fq(state-variable)6 b Fr(s,)34 b(or)c(returns)h(some)g(other)739 4252 y(v)-5 b(alue\(s\).)863 4354 y(The)30 b Fq(lo)l(op-name)38 b Fr(and)30 b(the)g Fq(state-variable)6 b Fr(s)31 b(and)f Fq(initial-value)6 b Fr(s)32 b(b)r(eha)n(v)n(e)d(exactly)g(as)739 4454 y(in)f(named-)p Fo(let)p Fr(.)35 b(The)28 b(named-)p Fo(let)e Fr(expression)p Black Black 826 4632 a Fo(\(let)42 b(loop-name)e(\(\(state-variable)d(initial-value\))h(...\))913 4732 y(body)k(...\))739 4907 y Fr(is)27 b(equiv)-5 b(alen)n(t)26 b(to)h(an)g Fo(iterate)d Fr(expression)h(with)j(no)f(sequences)f(\(and) h(with)g(an)g(explicit)739 5006 y Fo(let)21 b Fr(wrapp)r(ed)h(around)f (the)h(b)r(o)r(dy)h(expressions)d(to)i(tak)n(e)g(care)f(of)h(an)n(y)f (in)n(ternal)h Fo(define)p Fr(s\):)p Black 2130 5255 a(58)p Black eop end %%Page: 59 67 TeXDict begin 59 66 bop 0 TeXcolorgray Black Black Black Black Black 378 523 a Fo(\(iterate)40 b(loop-name)770 623 y(\(\))770 722 y(\(\(state-variable)d(initial-value\))h(...\))465 822 y(\(let)k(\(\))h(body)f(...\)\))415 993 y Fr(The)32 b Fq(se)l(quenc)l(e-typ)l(e)6 b Fr(s)32 b(are)g(k)n(eyw)n(ords)e (\(they)j(are)e(actually)g(macros)g(of)h(a)g(particular)291 1093 y(form;)43 b(it)38 b(is)g(easy)f(to)h(add)g(additional)f(t)n(yp)r (es)h(of)g(sequences\).)68 b(Examples)37 b(are)g Fo(list*)291 1193 y Fr(whic)n(h)29 b(w)n(alks)f(do)n(wn)h(the)h(elemen)n(ts)g(of)f (a)g(list)h(and)f Fo(vector*)e Fr(whic)n(h)i(do)r(es)h(the)g(same)e (for)291 1292 y(v)n(ectors.)35 b(F)-7 b(or)26 b(eac)n(h)h(iteration,)f (eac)n(h)g Fq(element-variable)36 b Fr(is)27 b(b)r(ound)g(to)g(the)g (next)h(elemen)n(t)291 1392 y(of)f(the)h(sequence.)36 b(The)28 b Fq(se)l(quenc)l(e-data)34 b Fr(giv)n(es)27 b(the)h(actual)f(list)h(or)e(v)n(ector)h(or)f(whatev)n(er.)415 1493 y(If)35 b(there)f(is)g(a)g Fq(\014nal-expr)l(ession)6 b Fr(,)36 b(it)f(is)f(ev)-5 b(aluated)34 b(when)g(the)h(end)f(of)h(one) e(or)h(more)291 1593 y(sequences)29 b(is)h(reac)n(hed.)44 b(If)30 b(the)h Fq(b)l(o)l(dy-expr)l(ession)38 b Fr(do)r(es)30 b(not)g(call)g Fq(lo)l(op-name)38 b Fr(the)30 b Fq(\014nal-)291 1693 y(expr)l(ession)39 b Fr(is)33 b(not)g(ev)-5 b(aluated.)52 b(The)33 b Fq(state-variable)6 b Fr(s)35 b(are)d(visible)g(in)i Fq(\014nal-expr)l(ession)291 1792 y Fr(but)28 b(the)g Fq(se)l(quenc)l(e-variable)6 b Fr(s)29 b(are)d(not.)415 1894 y(The)j Fq(b)l(o)l(dy-expr)l(ession)36 b Fr(and)29 b(the)g Fq(\014nal-expr)l(ession)36 b Fr(are)28 b(in)h(tail-p)r (osition)f(within)i(the)291 1993 y Fo(iterate)p Fr(.)48 b(Unlik)n(e)33 b(named-)p Fo(let)p Fr(,)f(the)h(b)r(eha)n(vior)e(of)h (a)h(non-tail-recursiv)n(e)c(call)j(to)h Fq(lo)l(op-)291 2093 y(name)c Fr(is)22 b(unsp)r(eci\014ed)h(\(b)r(ecause)f(iterating)g (do)n(wn)g(a)g(sequence)g(ma)n(y)f(in)n(v)n(olv)n(e)g(side)i (e\013ects,)291 2193 y(suc)n(h)k(as)g(reading)f(c)n(haracters)f(from)j (a)f(p)r(ort\).)291 2435 y Fe(5.19.2)112 b Fb(Reduce)291 2591 y Fr(If)19 b(an)f Fo(iterate)e Fr(expression)i(is)g(not)h(mean)n (t)g(to)f(terminate)h(b)r(efore)f(a)h(sequence)f(has)g(reac)n(hed)291 2691 y(its)30 b(end,)i Fq(b)l(o)l(dy-expr)l(ession)38 b Fr(will)31 b(alw)n(a)n(ys)e(end)i(with)g(a)f(tail)h(call)f(to)h Fq(lo)l(op-name)6 b Fr(.)47 b Fo(Reduce)291 2791 y Fr(is)28 b(a)g(macro)f(that)i(mak)n(es)e(this)i(common)e(case)h(explicit.)40 b(The)28 b(syn)n(tax)f(of)35 b Fo(reduce)26 b Fr(is)j(the)291 2890 y(same)18 b(as)g(that)i(of)25 b Fo(iterate)p Fr(,)18 b(except)h(that)h(there)e(is)h(no)g Fq(lo)l(op-name)6 b Fr(.)36 b(The)19 b Fq(b)l(o)l(dy-expr)l(ession)291 2990 y Fr(returns)26 b(new)g(v)-5 b(alues)27 b(of)f(the)h Fq(state-variable)6 b Fr(s)29 b(instead)d(of)h(passing)f(them)h(to)f Fq(lo)l(op-name)6 b Fr(.)291 3090 y(Th)n(us)30 b Fq(b)l(o)l(dy-expr)l (ession)38 b Fr(m)n(ust)31 b(return)f(as)g(man)n(y)g(v)-5 b(alues)31 b(as)f(there)g(are)g(state)g(v)-5 b(ariables.)291 3189 y(By)21 b(sp)r(ecial)h(disp)r(ensation,)h(if)g(there)f(are)f(no)h (state)g(v)-5 b(ariables)21 b(then)i Fq(b)l(o)l(dy-expr)l(ession)30 b Fr(ma)n(y)291 3289 y(return)d(an)n(y)g(n)n(um)n(b)r(er)g(of)g(v)-5 b(alues,)28 b(all)f(of)h(whic)n(h)f(are)g(ignored.)415 3390 y(The)h(syn)n(tax)e(of)34 b Fo(reduce)26 b Fr(is:)p Black Black 378 3564 a Fo(\(reduce)40 b(\(\()p Fq(se)l(quenc)l(e-typ)l (e)49 b(element-variable)j(se)l(quenc)l(e-data)e Fo(...\))814 3663 y(...\))770 3763 y(\(\()p Fq(state-variable)h(initial-value)6 b Fo(\))814 3862 y(...\))465 3962 y Fq(b)l(o)l(dy-expr)l(ession)465 4062 y Fo([)p Fq(\014nal-expr)l(ession)g Fo(]\))415 4233 y Fr(The)29 b(v)-5 b(alue\(s\))29 b(returned)f(b)n(y)g(an)h(instance)f (of)35 b Fo(reduce)26 b Fr(is)j(the)g(v)-5 b(alue\(s\))29 b(returned)f(b)n(y)291 4333 y(the)38 b Fq(\014nal-expr)l(ession)6 b Fr(,)41 b(if)d(presen)n(t,)h(or)e(the)h(curren)n(t)f(v)-5 b(alue\(s\))38 b(of)g(the)g(state)f(v)-5 b(ariables)291 4433 y(when)27 b(the)h(end)g(of)g(one)f(or)g(more)f(sequences)h(is)h (reac)n(hed.)415 4534 y(A)i Fo(reduce)d Fr(expression)h(can)h(b)r(e)h (rewritten)f(as)f(an)i(equiv)-5 b(alen)n(t)29 b Fo(iterate)d Fr(expression)291 4634 y(b)n(y)g(adding)g(a)g Fq(lo)l(op-var)37 b Fr(and)26 b(a)g(wrapp)r(er)f(for)h(the)h Fq(b)l(o)l(dy-expr)l(ession) 34 b Fr(that)26 b(calls)g(the)h Fq(lo)l(op-)291 4733 y(var)9 b Fr(.)p Black Black 291 4907 a Fo(\(iterate)40 b(loop)683 5006 y(\(\()p Fq(se)l(quenc)l(e-typ)l(e)48 b(element-variable)k(se)l(quenc)l(e-data)e Fo(...\))p Black 1681 5255 a Fr(59)p Black eop end %%Page: 60 68 TeXDict begin 60 67 bop 0 TeXcolorgray Black Black Black 1175 523 a Fo(...\))1131 623 y(\(\()p Fq(state-variable)51 b(initial-value)6 b Fo(\))1175 722 y(...\))826 822 y(\(call-with-value) o(s)38 b(\(lambda)i(\(\))1698 922 y Fq(b)l(o)l(dy-expr)l(ession)6 b Fo(\))1611 1021 y(loop\))826 1121 y([)p Fq(\014nal-expr)l(ession)g Fo(]\))739 1385 y Fe(5.19.3)112 b(Sequence)39 b(t)m(yp)s(es)739 1550 y Fr(The)28 b(prede\014ned)f(sequence)g(t)n(yp)r(es)h(are:)p Black 755 1734 a Fn(\017)p Black 42 w Fo(\(list*)39 b Fq(elt-var)50 b(list)8 b Fo(\))1781 b Fr(syn)n(tax)p Black 755 1833 a Fn(\017)p Black 42 w Fo(\(list-spine*)36 b Fq(elt-var)51 b(list)8 b Fo(\))1519 b Fr(syn)n(tax)p Black 755 1933 a Fn(\017)p Black 42 w Fo(\(list-spine-cyc)o(le)o(-sa)o (fe)o(*)36 b Fq(elt-var)50 b(list)g(on-cycle-thunk)9 b Fo(\))465 b Fr(syn)n(tax)p Black 755 2033 a Fn(\017)p Black 42 w Fo(\(vector*)38 b Fq(elt-var)50 b(ve)l(ctor)9 b Fo(\))1586 b Fr(syn)n(tax)p Black 755 2132 a Fn(\017)p Black 42 w Fo(\(string*)38 b Fq(elt-var)50 b(string)7 b Fo(\))1596 b Fr(syn)n(tax)p Black 755 2232 a Fn(\017)p Black 42 w Fo(\(count*)38 b Fq(elt-var)51 b(start)e Fo([)p Fq(end)h Fo([)p Fq(step)5 b Fo(]]\))1137 b Fr(syn)n(tax)p Black 755 2332 a Fn(\017)p Black 42 w Fo(\(bits*)39 b Fq(elt-var)50 b(i)h Fo([)p Fq(size)6 b Fo(]\))1596 b Fr(syn)n(tax)p Black 755 2431 a Fn(\017)p Black 42 w Fo(\(input*)38 b Fq(elt-var)51 b(input-p)l(ort)e(r)l(e)l(ad-pr)l(o)l(c) l(e)l(dur)l(e)6 b Fo(\))924 b Fr(syn)n(tax)p Black 755 2531 a Fn(\017)p Black 42 w Fo(\(stream*)38 b Fq(elt-var)50 b(pr)l(o)l(c)l(e)l(dur)l(e)e(initial-data)6 b Fo(\))1024 b Fr(syn)n(tax)863 2715 y(F)-7 b(or)24 b(lists,)h(v)n(ectors,)e(and)h (strings)f(the)i(elemen)n(t)f(v)-5 b(ariable)23 b(is)h(b)r(ound)g(to)g (the)h(successiv)n(e)739 2815 y(elemen)n(ts)i(of)h(the)g(list)g(or)e(v) n(ector,)h(or)f(the)i(c)n(haracters)e(in)i(the)g(string.)863 2920 y(F)-7 b(or)35 b Fo(list-spine*)30 b Fr(the)36 b(elemen)n(t)f(v)-5 b(ariable)34 b(is)h(b)r(ound)g(to)g(the)g(successiv)n(e)f(pairs)g(in) 739 3020 y(the)g(spine)f(of)h(the)g(list.)54 b Fo(List-spine-cycle-)o (saf)o(e*)27 b Fr(is)33 b(similar,)i(but)f(calls)f Fq(on-cycle-)739 3119 y(thunk)43 b Fr(with)35 b(no)f(argumen)n(ts)f(and)h(with)h(the)g (con)n(tin)n(uation)e(of)h(the)h(lo)r(op)f(macro)f(at)i(an)739 3219 y(unsp)r(eci\014ed)28 b(time)g(if)35 b Fq(list)g Fr(con)n(tains)27 b(a)g(cycle.)863 3325 y(F)-7 b(or)27 b Fo(count*)f Fr(the)i(elemen)n(t)f(v)-5 b(ariable)27 b(is)g(b)r(ound)h(to)g(the)g(elemen)n(ts)f(of)h(the)g(sequence)p Black Black 782 3515 a Fq(start)8 b Fo(,)43 b Fq(start)51 b Fo(+)43 b Fq(step)5 b Fo(,)44 b Fq(start)51 b Fo(+)43 b(2)p Fq(step)5 b Fo(,)43 b(...,)f Fq(end)739 3699 y Fr(inclusiv)n(e)34 b(of)41 b Fq(start)h Fr(and)35 b(exclusiv)n(e)f(of) 41 b Fq(end)9 b Fr(.)58 b(The)35 b(default)g Fq(step)40 b Fr(is)34 b(1.)58 b(The)35 b(sequence)739 3799 y(do)r(es)30 b(not)g(terminate)g(if)h(no)f Fq(end)40 b Fr(is)30 b(giv)n(en)f(or)h (if)h(there)f(is)g(no)g Fc(N)37 b(>)27 b Fr(0)j(suc)n(h)g(that)g Fq(end)40 b Fr(=)739 3898 y Fq(start)g Fr(+)32 b(N)p Fq(step)39 b Fr(\()p Fo(=)32 b Fr(is)h(used)g(to)f(test)h(for)f (termination\).)52 b(F)-7 b(or)32 b(example,)i Fo(\(count*)40 b(i)k(0)739 3998 y(-1\))31 b Fr(do)r(esn't)h(terminate)g(b)r(ecause)g (it)g(b)r(egins)g(past)g(the)h Fq(end)41 b Fr(v)-5 b(alue)32 b(and)g Fo(\(count*)40 b(i)k(0)739 4098 y(1)f(2\))27 b Fr(do)r(esn't)h(terminate)f(b)r(ecause)g(it)h(skips)f(o)n(v)n(er)f (the)i Fq(end)37 b Fr(v)-5 b(alue.)863 4203 y(F)e(or)25 b Fo(bits*)p Fr(,)e(the)j(elemen)n(t)f(v)-5 b(ariable)24 b(is)h(b)r(ound)g(to)g(a)g(sequence)f(of)h(represen)n(tations)e(of)739 4303 y(successiv)n(e)d(bit-\014elds)h(of)28 b Fq(i)8 b Fr(,)24 b(from)d(least)g(to)g(most)g(signi\014can)n(t.)34 b(If)28 b Fq(size)g Fr(is)21 b(presen)n(t,)h(it)g(m)n(ust)739 4402 y(b)r(e)29 b(a)f(p)r(ositiv)n(e)g(exact)g(in)n(teger,)g(and)h(the) g(elemen)n(t)f(v)-5 b(ariable)28 b(is)h(b)r(ound)g(to)f(a)g(sequence)g (of)739 4502 y Fq(size)6 b Fr(-bit)29 b(in)n(tegers.)38 b(If)e Fq(size)f Fr(is)28 b(omitted,)h Fo(bits*)e Fr(iterates)g (through)h(single)g(bits,)h(and)f(the)739 4602 y(elemen)n(t)33 b(v)-5 b(ariable)31 b(is)i(b)r(ound)g(to)f(a)g(sequence)g(of)h(b)r(o)r (oleans.)51 b Fo(#t)32 b Fr(represen)n(ts)f(1,)j(and)e Fo(#f)739 4701 y Fr(represen)n(ts)26 b(0.)863 4807 y(F)-7 b(or)32 b Fo(input*)e Fr(the)j(elemen)n(ts)f(are)g(the)g(results)g(of)h (successiv)n(e)e(applications)g(of)39 b Fq(r)l(e)l(ad-)739 4907 y(pr)l(o)l(c)l(e)l(dur)l(e)45 b Fr(to)39 b Fq(input-p)l(ort)8 b Fr(.)69 b(The)39 b(sequence)f(ends)h(when)g Fq(r)l(e)l(ad-pr)l(o)l(c) l(e)l(dur)l(e)46 b Fr(returns)38 b(an)739 5006 y(end-of-\014le)27 b(ob)5 b(ject.)p Black 2130 5255 a(60)p Black eop end %%Page: 61 69 TeXDict begin 61 68 bop 0 TeXcolorgray Black Black Black 415 523 a Fr(F)-7 b(or)23 b(a)f(stream,)i(the)f Fq(pr)l(o)l(c)l(e)l (dur)l(e)30 b Fr(tak)n(es)22 b(the)i(curren)n(t)e(data)h(v)-5 b(alue)23 b(as)f(an)h(argumen)n(t)f(and)291 623 y(returns)k(t)n(w)n(o)g (v)-5 b(alues,)26 b(the)i(next)f(v)-5 b(alue)26 b(of)h(the)g(sequence)g (and)f(a)h(new)f(data)h(v)-5 b(alue.)36 b(If)28 b(the)291 722 y(new)f(data)g(is)h Fo(#f)f Fr(then)h(the)g(previous)e(elemen)n(t)i (w)n(as)f(the)h(last)f(one.)36 b(F)-7 b(or)27 b(example,)p Black Black 378 891 a Fo(\(list*)41 b(elt)h(my-list\))291 1058 y Fr(is)27 b(the)h(same)f(as)p Black Black 378 1227 a Fo(\(stream*)40 b(elt)i(list->stream)d(my-list\))291 1395 y Fr(where)27 b Fo(list->stream)22 b Fr(is)p Black Black 378 1563 a Fo(\(lambda)40 b(\(list\))465 1663 y(\(if)i(\(null?)f (list\))639 1762 y(\(values)g('ignored)f(#f\))639 1862 y(\(values)h(\(car)h(list\))f(\(cdr)h(list\)\)\)\))291 2097 y Fe(5.19.4)112 b(Sync)m(hronous)39 b(sequences)291 2252 y Fr(When)25 b(using)g(the)g(sequence)g(t)n(yp)r(es)g(describ)r (ed)f(ab)r(o)n(v)n(e,)h(a)f(lo)r(op)h(terminates)g(when)g(an)n(y)f(of) 291 2351 y(its)29 b(sequences)f(reac)n(hes)f(its)i(end.)40 b(T)-7 b(o)29 b(help)g(detect)g(bugs)f(it)h(is)g(useful)g(to)g(ha)n(v)n (e)e(sequence)291 2451 y(t)n(yp)r(es)e(that)h(c)n(hec)n(k)f(to)h(see)f (if)h(t)n(w)n(o)f(or)g(more)g(sequences)f(end)i(on)g(the)g(same)f (iteration.)36 b(F)-7 b(or)291 2551 y(this)24 b(purp)r(ose)f(there)h (is)g(second)f(set)h(of)g(sequence)f(t)n(yp)r(es)h(called)g(sync)n (hronous)e(sequences.)291 2650 y(These)28 b(are)h(iden)n(tical)g(to)g (the)g(ones)g(listed)g(ab)r(o)n(v)n(e)f(except)h(that)h(they)f(cause)g (an)g(error)e(to)291 2750 y(b)r(e)i(signalled)f(if)h(a)f(lo)r(op)h(is)f (terminated)h(b)n(y)f(a)h(sync)n(hronous)e(sequence)h(and)g(some)g (other)291 2849 y(sync)n(hronous)d(sequence)i(did)h(not)g(reac)n(h)e (its)i(end)g(on)f(the)h(same)f(iteration.)415 2950 y(Sequences)k(are)e (c)n(hec)n(k)n(ed)h(for)g(termination)h(in)g(order,)f(from)h(left)h(to) e(righ)n(t,)h(and)g(if)g(a)291 3049 y(lo)r(op)c(is)g(terminated)h(b)n (y)f(a)g(non-sync)n(hronous)e(sequence)i(no)h(further)f(c)n(hec)n(king) g(is)g(done.)415 3149 y(The)h(sync)n(hronous)d(sequences)i(are:)p Black 307 3301 a Fn(\017)p Black 41 w Fo(\(list\045)39 b Fq(elt-var)51 b(list)8 b Fo(\))1781 b Fr(syn)n(tax)p Black 307 3400 a Fn(\017)p Black 41 w Fo(\(list-spine\045)37 b Fq(elt-var)51 b(list)8 b Fo(\))1519 b Fr(syn)n(tax)p Black 307 3500 a Fn(\017)p Black 41 w Fo(\(list-spine-cycle)o(-s)o(afe) o(\045)35 b Fq(elt-var)51 b(list)f(on-cycle-thunk)9 b Fo(\))465 b Fr(syn)n(tax)p Black 307 3599 a Fn(\017)p Black 41 w Fo(\(vector\045)38 b Fq(elt-var)51 b(ve)l(ctor)9 b Fo(\))1586 b Fr(syn)n(tax)p Black 307 3699 a Fn(\017)p Black 41 w Fo(\(string\045)38 b Fq(elt-var)51 b(string)7 b Fo(\))1596 b Fr(syn)n(tax)p Black 307 3799 a Fn(\017)p Black 41 w Fo(\(count\045)39 b Fq(elt-var)51 b(start)e(end)h Fo([)p Fq(step)5 b Fo(]\))1225 b Fr(syn)n(tax)p Black 307 3898 a Fn(\017)p Black 41 w Fo(\(input\045)39 b Fq(elt-var)51 b(input-p)l(ort)e(r)l(e)l(ad-pr)l(o)l(c)l(e)l(dur)l(e)6 b Fo(\))924 b Fr(syn)n(tax)p Black 307 3998 a Fn(\017)p Black 41 w Fo(\(stream\045)38 b Fq(elt-var)51 b(pr)l(o)l(c)l(e)l(dur)l (e)d(initial-data)6 b Fo(\))1024 b Fr(syn)n(tax)415 4149 y(Note)35 b(that)h(the)f(sync)n(hronous)e Fo(count\045)g Fr(m)n(ust)i(ha)n(v)n(e)f(an)h Fq(end)9 b Fr(,)37 b(unlik)n(e)e(the)h (nonsyn-)291 4249 y(c)n(hronous)26 b Fo(count*)p Fr(.)291 4484 y Fe(5.19.5)112 b(Examples)291 4639 y Fr(Gathering)26 b(the)i(indexes)g(of)f(list)h(elemen)n(ts)g(that)f(answ)n(er)g(true)g (to)h(some)f(predicate.)p Black Black 291 4807 a Fo(\(lambda)40 b(\(my-list)h(predicate\))378 4907 y(\(reduce)f(\(\(list*)h(elt)h (my-list\))770 5006 y(\(count*)f(i)i(0\)\))p Black 1681 5255 a Fr(61)p Black eop end %%Page: 62 70 TeXDict begin 62 69 bop 0 TeXcolorgray Black Black Black 1175 523 a Fo(\(\(hits)41 b('\(\)\)\))913 623 y(\(if)i(\(predicate)c (elt\))1088 722 y(\(cons)i(i)i(hits\))1088 822 y(hits\))913 922 y(\(reverse)e(hits\)\))739 1089 y Fr(Lo)r(oking)26 b(for)h(the)h(index)g(of)g(an)f(elemen)n(t)h(of)f(a)g(list.)p Black Black 739 1257 a Fo(\(lambda)41 b(\(my-list)f(predicate\))826 1356 y(\(iterate)g(loop)1218 1456 y(\(\(list*)h(elt)h(my-list\))1262 1556 y(\(count*)f(i)i(0\)\))1218 1655 y(\(\))1394 b(;)43 b(no)g(state)913 1755 y(\(if)g(\(predicate)c(elt\))1088 1855 y(i)1088 1954 y(\(loop\)\)\)\))739 2122 y Fr(Reading)27 b(one)g(line.)p Black Black 739 2289 a Fo(\(define)41 b(\(read-line)e(port\))826 2389 y(\(iterate)h(loop)1218 2489 y(\(\(input*)h(c)i(port)f(read-char\)\))1218 2588 y(\(\(chars)f('\(\)\)\))913 2688 y(\(if)i(\(char=?)d(c)j(#\\newline\)) 1088 2788 y(\(list->string)38 b(\(reverse)i(chars\)\))1088 2887 y(\(loop)h(\(cons)h(c)h(chars\)\)\))913 2987 y(\(if)g(\(null?)e (chars\))1088 3087 y(\(eof-object\))1088 3186 y(;)i(no)g(newline)d(at)j (end)f(of)h(file)1088 3286 y(\(list->string)38 b(\(reverse)i (chars\)\)\)\)\))739 3453 y Fr(Coun)n(ting)27 b(the)i(lines)f(in)g(a)g (\014le.)38 b(W)-7 b(e)28 b(can't)g(use)g Fo(count*)e Fr(b)r(ecause)h(w)n(e)h(need)g(the)g(v)-5 b(alue)28 b(of)739 3553 y(the)g(coun)n(t)f(after)g(the)h(lo)r(op)g(has)f(\014nished.)p Black Black 739 3721 a Fo(\(define)41 b(\(line-count)e(name\))826 3820 y(\(call-with-input)o(-fi)o(le)e(name)913 3920 y(\(lambda)k (\(in\))1000 4020 y(\(reduce)g(\(\(input*)f(l)k(in)e(read-line\)\))1349 4119 y(\(\(i)g(0\)\))1088 4219 y(\(+)g(i)i(1\)\)\)\)\))739 4454 y Fe(5.19.6)112 b(De\014ning)39 b(sequence)f(t)m(yp)s(es)739 4608 y Fr(The)24 b(sequence)g(t)n(yp)r(es)g(are)f(ob)5 b(ject-orien)n(ted)23 b(macros)g(similar)g(to)i(en)n(umerations.)34 b(A)25 b(non-)739 4707 y(sync)n(hronous)c(sequence)i(macro)e(needs)i (to)g(supply)h(three)f(v)-5 b(alues:)34 b Fo(#f)22 b Fr(to)h(indicate)g(that)h(it)739 4807 y(isn't)g(sync)n(hronous,)f(a)h (list)g(of)g(state)f(v)-5 b(ariables)23 b(and)h(their)g(initializers,)g (and)g(the)g(co)r(de)g(for)739 4907 y(one)i(iteration.)36 b(The)26 b(\014rst)g(t)n(w)n(o)g(metho)r(ds)h(are)e(CPS'ed:)36 b(they)27 b(tak)n(e)f(another)f(macro)g(and)739 5006 y(argumen)n(t)32 b(to)i(whic)n(h)f(to)h(pass)f(their)g(result.)55 b(The)33 b Fo(sync)f Fr(metho)r(d)i(gets)f(no)h(additional)p Black 2130 5255 a(62)p Black eop end %%Page: 63 71 TeXDict begin 63 70 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(argumen)n(ts.)58 b(The)36 b Fo(state-vars)31 b Fr(metho)r(d)36 b(is)f(passed)f(a)h(list)h(of)f(names)g(whic)n(h)g (will)h(b)r(e)291 623 y(b)r(ound)g(to)g(the)h(argumen)n(ts)e(to)h(the)h (sequence.)62 b(The)36 b(\014nal)g(metho)r(d,)j(for)d(the)g(step,)j(is) 291 722 y(passed)25 b(the)i(list)g(of)f(names)g(b)r(ound)h(to)g(the)f (argumen)n(ts)g(and)g(the)h(list)f(of)h(state)f(v)-5 b(ariables.)291 822 y(In)25 b(addition)h(there)f(is)h(a)f(v)-5 b(ariable)25 b(to)g(b)r(e)h(b)r(ound)g(to)g(the)g(next)g(elemen)n(t)g (of)f(the)h(sequence,)291 922 y(the)i(b)r(o)r(dy)f(expression)g(for)g (the)h(lo)r(op,)f(and)g(an)h(expression)e(for)h(terminating)g(the)h(lo) r(op.)415 1022 y(The)g(de\014nition)g(of)34 b Fo(list*)25 b Fr(is)p Black Black 291 1189 a Fo(\(define-syntax)37 b(list*)378 1289 y(\(syntax-rules)h(\(sync)j(state-vars)f(step\))465 1389 y(\(\(list*)h(sync)h(\(next)f(more\)\))509 1488 y(\(next)g(#f)i(more\)\))465 1588 y(\(\(list*)e(state-vars)e (\(start-list\))g(\(next)i(more\)\))509 1687 y(\(next)g(\(\(list-var)e (start-list\)\))g(more\)\))465 1787 y(\(\(list*)i(step)h (\(start-list\))c(\(list-var\))814 1887 y(value-var)h(loop-body)h (final-exp\))509 1986 y(\(if)i(\(null?)f(list-var\))683 2086 y(final-exp)683 2186 y(\(let)h(\(\(value-var)d(\(car)j (list-var\)\))944 2285 y(\(list-var)e(\(cdr)i(list-var\)\)\))770 2385 y(loop-body\)\)\)\)\))415 2552 y Fr(Sync)n(hronized)34 b(sequences)g(are)g(the)i(same,)g(except)f(that)g(they)h(need)f(to)g (pro)n(vide)e(a)291 2652 y(termination)c(test)i(to)f(b)r(e)g(used)g (when)g(some)g(other)f(sync)n(hronized)g(metho)r(d)h(terminates)291 2751 y(the)e(lo)r(op.)p Black Black 291 2919 a Fo(\(define-syntax)37 b(list\045)378 3019 y(\(syntax-rules)h(\(sync)j(done\))465 3118 y(\(\(list\045)g(sync)h(\(next)f(more\)\))509 3218 y(\(next)g(#t)i(more\)\))465 3318 y(\(\(list\045)e(done)h (\(start-list\))c(\(list-var\)\))509 3417 y(\(null?)j(list-var\)\))465 3517 y(\(\(list\045)g(stuff)g(...\))509 3617 y(\(list*)g(stuff)g (...\)\)\)\))291 3851 y Fe(5.19.7)112 b(Expanded)39 b(co)s(de)291 4005 y Fr(The)27 b(expansion)g(of)p Black Black 378 4173 a Fo(\(reduce)40 b(\(\(list*)h(x)i('\(1)g(2)g(3\)\)\))726 4273 y(\(\(r)g('\(\)\)\))465 4372 y(\(cons)e(x)j(r\)\))291 4540 y Fr(is)p Black Black 378 4707 a Fo(\(let)e(\(\(final)e(\(lambda)h (\(r\))h(\(values)f(r\)\)\))639 4807 y(\(list)h('\(1)g(2)h(3\)\))639 4907 y(\(r)g('\(\)\)\))465 5006 y(\(let)f(loop)g(\(\(list)f(list\))g (\(r)i(r\)\))p Black 1681 5255 a Fr(63)p Black eop end %%Page: 64 72 TeXDict begin 64 71 bop 0 TeXcolorgray Black Black Black 1000 523 a Fo(\(if)43 b(\(null?)e(list\))1175 623 y(\(final)g(r\))1175 722 y(\(let)h(\(\(x)g(\(car)g(list\)\))1436 822 y(\(list)g(\(cdr)g (list\)\)\))1262 922 y(\(let)g(\(\(continue)d(\(lambda)i(\(r\))2046 1021 y(\(loop)h(list)g(r\)\)\)\))1349 1121 y(\(continue)e(\(cons)h(x)j (r\)\)\)\)\)\)\))863 1302 y Fr(The)26 b(only)g(ine\016ciencies)g(in)g (this)h(co)r(de)e(are)g(the)i Fo(final)d Fr(and)i Fo(continue)c Fr(pro)r(cedures,)739 1402 y(b)r(oth)32 b(of)f(whic)n(h)g(could)g(b)r (e)h(substituted)g(in-line.)48 b(The)31 b(macro)f(expander)h(could)g (do)g(the)739 1501 y(substitution)d(for)g Fo(continue)c Fr(when)k(there)g(is)g(no)f(explicit)h(pro)r(ceed)g(v)-5 b(ariable,)27 b(as)g(in)h(this)739 1601 y(case,)f(but)h(not)f(in)h (general.)739 1902 y Fj(5.20)135 b(Sorting)46 b(lists)g(and)e(v)l (ectors)739 2094 y Fr(\(This)31 b(section,)g(as)f(the)h(libraries)e(it) i(describ)r(es,)g(w)n(as)f(written)h(mostly)f(b)n(y)h(Olin)f(Shiv)n (ers)739 2193 y(for)d(the)h(draft)f(of)h(SRFI)g(32.\))863 2298 y(The)g(sort)f(libraries)f(in)i(Sc)n(heme)f(48)g(include)p Black 863 2479 a Fn(\017)p Black 41 w Fr(v)n(ector)g(insert)g(sort)g (\(stable\))p Black 863 2666 a Fn(\017)p Black 41 w Fr(v)n(ector)g (heap)g(sort)p Black 863 2852 a Fn(\017)p Black 41 w Fr(v)n(ector)33 b(quic)n(k)h(sort)f(\(with)h(regular)f(comparisons)f (and)h(with)i(median-of-3)e(piv)n(ot)946 2952 y(pic)n(king\))p Black 863 3138 a Fn(\017)p Black 41 w Fr(v)n(ector)27 b(merge)f(sort)h(\(stable\))p Black 863 3324 a Fn(\017)p Black 41 w Fr(pure)h(and)f(destructiv)n(e)g(list)h(merge)f(sort)f (\(stable\))p Black 863 3511 a Fn(\017)p Black 41 w Fr(stable)i(v)n (ector)e(and)h(list)h(merge)p Black 863 3697 a Fn(\017)p Black 41 w Fr(miscellaneous)43 b(sort-related)f(pro)r(cedures:)67 b(v)n(ector)42 b(and)i(list)g(merging,)i(sorted)946 3796 y(predicates,)23 b(v)n(ector)e(binary)g(searc)n(h,)h(v)n(ector)e(and)i (list)g(delete-equal-neigh)n(b)r(or)e(pro-)946 3896 y(cedures.)p Black 863 4082 a Fn(\017)p Black 41 w Fr(a)27 b(general,)e (non-algorithmic)g(set)h(of)h(pro)r(cedure)f(names)g(for)g(general)f (sorting)g(and)946 4182 y(merging)739 4441 y Fe(5.20.1)112 b(Design)38 b(rules)739 4604 y Fm(What)22 b(vs.)39 b(ho)m(w)83 b Fr(There)18 b(are)g(t)n(w)n(o)g(di\013eren)n(t)h(in)n(terfaces:)32 b(\\what")18 b(\(simple\))h(and)g(\\ho)n(w")739 4704 y(\(detailed\).)p Black 739 4907 a Fm(Simple)p Black 40 w Fr(y)n(ou)32 b(sp)r(ecify)i(seman)n(tics:)47 b(datat)n(yp)r(e)33 b(\(list)g(or)g(v)n(ector\),)g(m)n(utabilit)n(y)-7 b(,)35 b(and)e(sta-)946 5006 y(bilit)n(y)-7 b(.)p Black 2130 5255 a(64)p Black eop end %%Page: 65 73 TeXDict begin 65 72 bop 0 TeXcolorgray Black Black Black Black 291 523 a Fm(Detailed)p Black 40 w Fr(y)n(ou)25 b(sp)r(ecify)g(the)g(actual)f(algorithm)g(\(quic)n(k,)h(heap,)g (insert,)g(merge\).)36 b(Di\013er-)498 623 y(en)n(t)26 b(algorithms)e(ha)n(v)n(e)g(di\013eren)n(t)h(prop)r(erties,)g(b)r(oth)h (seman)n(tic)f(and)g(pragmatic,)g(so)498 722 y(these)j(exp)r(orts)f (are)f(necessary)-7 b(.)498 858 y(It)29 b(is)f(necessarily)e(the)j (case)e(that)i(the)g(sp)r(eci\014cations)e(of)h(these)h(pro)r(cedures)e (mak)n(e)498 957 y(statemen)n(ts)i(ab)r(out)h(execution)f (\\pragmatics.")40 b(F)-7 b(or)29 b(example,)g(the)h(sole)f(distinc-) 498 1057 y(tion)23 b(b)r(et)n(w)n(een)f(heap)h(sort)e(and)i(quic)n(k)f (sort|b)r(oth)g(of)h(whic)n(h)f(are)g(pro)n(vided)f(b)n(y)i(this)498 1157 y(library|-is)28 b(one)h(of)g(execution)g(time,)i(whic)n(h)e(is)g (not)h(a)f(\\seman)n(tic")e(distinction.)498 1256 y(Similar)36 b(resource-use)f(statemen)n(ts)h(are)f(made)i(ab)r(out)f(\\iterativ)n (e")f(pro)r(cedures,)498 1356 y(meaning)g(that)h(they)f(can)g(execute)g (on)g(input)i(of)e(arbitrary)e(size)i(in)h(a)f(constan)n(t)498 1456 y(n)n(um)n(b)r(er)27 b(of)h(stac)n(k)f(frames.)291 1678 y Fm(Consistency)32 b(across)h(pro)s(cedure)f(signatures)83 b Fr(The)28 b(t)n(w)n(o)g(in)n(terfaces)f(share)h(com-)291 1778 y(mon)e(pro)r(cedure)g(signatures)f(wherev)n(er)h(p)r(ossible,)g (to)h(facilitate)g(switc)n(hing)f(a)g(giv)n(en)g(call)291 1877 y(from)h(one)g(pro)r(cedure)g(to)g(another.)291 2100 y Fm(Less-than)j(parameter)i(\014rst,)e(data)i(parameter)f(after) 84 b Fr(These)26 b(pro)r(cedures)g(uni-)291 2200 y(formly)d(observ)n(e) f(the)i(follo)n(wing)f(parameter)f(order:)33 b(the)24 b(data)g(to)f(b)r(e)h(sorted)f(comes)g(after)291 2299 y(the)28 b(comparison)d(pro)r(cedure.)36 b(That)28 b(is,)f(w)n(e)h (write)p Black Black 378 2489 a Fo(\(sort)41 b Fc(<)i Fq(list)9 b Fo(\))415 2677 y Fr(not)p Black Black 378 2866 a Fo(\(sort)41 b Fq(list)52 b Fc(<)p Fo(\))291 3088 y Fm(Ordering,)40 b(comparison)f(pro)s(cedures)g(and)h(stabilit)m(y)82 b Fr(These)34 b(routines)g(tak)n(e)f(a)291 3188 y Fc(<)k Fr(comparison)e(pro)r(cedure,)k(not)e(a)g Fn(\024)g Fr(comparison)f (pro)r(cedure,)j(and)e(they)h(sort)e(in)n(to)291 3288 y(increasing)31 b(order.)50 b(The)33 b(di\013erence)g(b)r(et)n(w)n(een) f(a)g Fc(<)h Fr(sp)r(ec)f(and)h(a)f Fn(\024)g Fr(sp)r(ec)h(comes)f(up)h (in)291 3387 y(t)n(w)n(o)26 b(places:)p Black 415 3575 a Fn(\017)p Black 41 w Fr(the)i(de\014nition)g(of)g(an)f(ordered)f(or)h (sorted)g(data)g(set,)g(and)p Black 415 3747 a Fn(\017)p Black 41 w Fr(the)h(de\014nition)g(of)g(a)f(stable)g(sorting)g (algorithm.)415 3934 y(W)-7 b(e)25 b(sa)n(y)f(that)i(a)e(data)h(set)g (\(a)f(list)i(or)e(v)n(ector\))g(is)h Fq(sorte)l(d)34 b Fr(or)24 b Fq(or)l(der)l(e)l(d)34 b Fr(if)26 b(it)f(con)n(tains)f(no) 291 4034 y(adjacen)n(t)j(pair)g(of)g(v)-5 b(alues)27 b Fc(:)14 b(:)g(:)g(x;)g(y)j(:)d(:)g(:)27 b Fr(suc)n(h)h(that)g Fc(y)d(<)e(x)p Fr(.)415 4135 y(In)28 b(other)f(w)n(ords,)f(scanning)h (across)f(the)i(data)f(nev)n(er)f(tak)n(es)h(a)g(\\do)n(wn)n(w)n(ards") d(step.)415 4236 y(If)j(y)n(ou)e(use)i(a)e Fn(\024)h Fr(pro)r(cedure)g(where)f(these)i(algorithms)e(exp)r(ect)h(a)g Fc(<)g Fr(pro)r(cedure,)g(y)n(ou)291 4336 y(ma)n(y)20 b(not)h(get)g(the)g(answ)n(ers)e(y)n(ou)h(exp)r(ect.)35 b(F)-7 b(or)21 b(example,)h(the)f Fo(list-sorted?)30 b Fr(pro)r(cedure)291 4435 y(will)k(return)g(false)g(if)h(y)n(ou)f (pass)f(it)i(a)f Fn(\024)g Fr(comparison)f(pro)r(cedure)g(and)i(an)f (ordered)f(list)291 4535 y(con)n(taining)26 b(adjacen)n(t)h(equal)g (elemen)n(ts.)415 4636 y(A)22 b(\\stable")e(sort)h(is)h(one)f(that)h (preserv)n(es)e(the)i(pre-existing)e(order)g(of)i(equal)f(elemen)n(ts.) 291 4735 y(Supp)r(ose,)h(for)e(example,)i(that)f(w)n(e)f(sort)g(a)g (list)h(of)g(n)n(um)n(b)r(ers)f(b)n(y)h(comparing)e(their)i(absolute) 291 4835 y(v)-5 b(alues,)27 b(i.e.,)h(using)f(comparison)f(pro)r (cedure)p Black Black 291 5006 a Fo(\(lambda)40 b(\(x)j(y\))g(\(<)g (\(abs)e(x\))i(\(abs)f(y\)\)\))p Black 1681 5255 a Fr(65)p Black eop end %%Page: 66 74 TeXDict begin 66 73 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(If)28 b(w)n(e)f(sort)g(a)g(list)h(that)g(con)n(tains)e(b)r (oth)i(3)g(and)f(-3:)1894 668 y Fc(:)14 b(:)g(:)g Fr(3)p Fc(;)g(:)g(:)g(:)f(;)h Fn(\000)p Fr(3)g Fc(:)g(:)g(:)739 813 y Fr(then)37 b(a)f(stable)h(sort)e(is)i(an)f(algorithm)g(that)g (will)h(not)g(sw)n(ap)f(the)h(order)e(of)h(these)h(t)n(w)n(o)739 913 y(elemen)n(ts,)27 b(that)h(is,)g(the)g(answ)n(er)e(is)h(guaran)n (teed)f(to)i(to)f(lo)r(ok)g(lik)n(e)1968 1058 y Fc(:)14 b(:)g(:)g Fr(3)p Fc(;)g Fn(\000)p Fr(3)g Fc(:)g(:)g(:)739 1203 y Fr(not)1957 1303 y Fc(:)g(:)g(:)k Fn(\000)g Fr(3)p Fc(;)c Fr(3)g Fc(:)g(:)g(:)739 1430 y Fr(Cho)r(osing)29 b Fc(<)h Fr(for)g(the)h(comparison)d(pro)r(cedure)i(instead)g(of)g Fn(\024)g Fr(a\013ects)h(ho)n(w)e(stabilit)n(y)h(is)739 1529 y(co)r(ded.)35 b(Giv)n(en)23 b(an)f(adjacen)n(t)g(pair)g Fc(x;)14 b(y)s Fr(,)24 b Fo(\(<)43 b Fc(y)j(x)p Fo(\))23 b Fr(means)f(\\)p Fc(x)h Fr(should)f(b)r(e)h(mo)n(v)n(ed)f(in)h(fron)n (t)739 1629 y(of)30 b Fc(x)p Fr("|otherwise,)f(lea)n(v)n(e)g(things)h (as)f(they)h(are.)43 b(So)29 b(using)h(a)f Fn(\024)h Fr(pro)r(cedure)f(where)g(a)h Fc(<)739 1729 y Fr(pro)r(cedure)c(is)i (exp)r(ected)g(will)g Fq(invert)35 b Fr(stabilit)n(y)-7 b(.)863 1828 y(This)28 b(is)f(due)h(to)g(the)g(de\014nition)g(of)f (equalit)n(y)-7 b(,)27 b(giv)n(en)g(a)g Fc(<)h Fr(comparator:)p Black Black 913 1964 a Fo(\(and)42 b(\(not)g(\(<)h(x)g(y\)\))1131 2064 y(\(not)f(\(<)h(y)g(x\)\)\))739 2200 y Fr(The)28 b(de\014nition)g(is)f(rather)g(di\013eren)n(t,)g(giv)n(en)g(a)g Fn(\024)h Fr(comparator:)p Black Black 913 2336 a Fo(\(and)42 b(\(<=)h(x)g(y\))1131 2436 y(\(<=)g(y)g(x\)\))739 2572 y Fr(A)37 b(\\stable")f(merge)g(is)h(one)f(that)h(reliably)f(fa)n(v)n (ors)f(one)i(of)g(its)g(data)f(sets)h(when)g(equal)739 2671 y(items)29 b(app)r(ear)g(in)g(b)r(oth)h(data)f(sets.)42 b Fq(A)n(l)t(l)31 b(mer)l(ge)h(op)l(er)l(ations)g(in)g(this)f(libr)l (ary)i(ar)l(e)f(stable)p Fr(,)739 2771 y(breaking)f(ties)i(b)r(et)n(w)n (een)f(data)g(sets)g(in)h(fa)n(v)n(or)e(of)h(the)h(\014rst)f(data)g (set|elemen)n(ts)g(of)h(the)739 2870 y(\014rst)27 b(list)h(come)f(b)r (efore)h(equal)f(elemen)n(ts)g(in)h(the)g(second)f(list.)863 2970 y(So,)36 b(if)f(w)n(e)f(are)g(merging)f(t)n(w)n(o)g(lists)i(of)f (n)n(um)n(b)r(ers)g(ordered)f(b)n(y)h(absolute)g(v)-5 b(alue,)36 b(the)739 3070 y(stable)27 b(merge)g(op)r(eration)f Fo(list-merge)p Black Black 913 3206 a(\(list-merge)39 b(\(lambda)i(\(x)i(y\))f(\(<)h(\(abs)f(x\))h(\(abs)f(y\)\)\))1436 3305 y('\(0)h(-2)f(4)i(8)f(-10\))f('\(-1)g(3)h(-4)g(7\)\))739 3441 y Fr(reliably)24 b(places)h(the)h(4)f(of)g(the)h(\014rst)f(list)h (b)r(efore)f(the)h(equal-comparing)d(-4)i(of)g(the)h(second)739 3541 y(list:)p Black Black 913 3677 a Fo(\(0)43 b(-1)g(-2)g(4)g(-4)f(7) i(8)f(-10\))739 3813 y Fr(Some)25 b(sort)g(algorithms)f Fq(wil)t(l)29 b(not)e(work)i(c)l(orr)l(e)l(ctly)k Fr(if)26 b(giv)n(en)e(a)h Fn(\024)h Fr(when)f(they)h(exp)r(ect)g(a)f Fc(<)739 3913 y Fr(comparison)h(\(or)h(vice-v)n(ersa\).)863 4012 y(In)h(short,)f(if)h(y)n(our)f(comparison)e(pro)r(cedure)i Fc(f)36 b Fr(answ)n(ers)26 b(true)i(to)f Fo(\()p Fc(f)52 b Fo(x)43 b(x\))p Fr(,)27 b(then)p Black 863 4148 a Fn(\017)p Black 41 w Fr(using)f(a)f(stable)g(sorting)f(or)h(merging)g(algorithm)f (will)i(not)f(giv)n(e)g(y)n(ou)g(a)g(stable)g(sort)946 4248 y(or)i(merge,)p Black 863 4399 a Fn(\017)p Black 41 w Fo(list-sorted?)32 b Fr(ma)n(y)27 b(surprise)g(y)n(ou.)739 4535 y(Note)h(that)f(y)n(ou)g(can)g(syn)n(thesize)g(a)h Fc(<)f Fr(pro)r(cedure)f(from)i(a)f Fn(\024)g Fr(pro)r(cedure)g(with)p Black Black 913 4671 a Fo(\(lambda)41 b(\(x)i(y\))f(\(not)g(\(<=)h(y)g (x\)\)\))739 4807 y Fr(if)28 b(need)g(b)r(e.)863 4907 y(Precise)f(de\014nitions)h(giv)n(e)f(sharp)h(edges)f(to)h(to)r(ols,)f (but)i(require)e(care)g(in)h(use.)38 b(\\Mea-)739 5006 y(sure)27 b(t)n(wice,)g(cut)h(once.")p Black 2130 5255 a(66)p Black eop end %%Page: 67 75 TeXDict begin 67 74 bop 0 TeXcolorgray Black Black Black 291 523 a Fm(All)21 b(v)m(ector)j(op)s(erations)d(accept)j(optional)e (subrange)g(parameters)84 b Fr(The)19 b(v)n(ector)291 623 y(op)r(erations)28 b(sp)r(eci\014ed)i(b)r(elo)n(w)g(all)f(tak)n(e)h (optional)f Fo(start)p Fr(/)p Fo(end)d Fr(argumen)n(ts)j(indicating)g (a)291 722 y(selected)k(subrange)f(of)h(a)g(v)n(ector's)f(elemen)n(ts.) 55 b(If)34 b(a)f Fo(start)e Fr(parameter)h(or)h Fo(start)p Fr(/)p Fo(end)291 822 y Fr(parameter)27 b(pair)i(is)g(giv)n(en)f(to)i (suc)n(h)e(a)h(pro)r(cedure,)g(they)g(m)n(ust)h(b)r(e)f(exact,)h (non-negativ)n(e)291 922 y(in)n(tegers,)c(suc)n(h)h(that)920 1121 y(0)22 b Fn(\024)h Fq(start)31 b Fn(\024)22 b Fq(end)32 b Fn(\024)23 b Fo(\(vector-length)38 b Fq(ve)l(ctor)9 b Fo(\))291 1321 y Fr(where)31 b Fq(ve)l(ctor)41 b Fr(is)32 b(the)g(related)g(v)n(ector)e(parameter.)49 b(If)32 b(not)g(sp)r (eci\014ed,)i(they)e(default)g(to)291 1421 y(0)c(and)i(the)f(length)h (of)f(the)g(v)n(ector,)g(resp)r(ectiv)n(ely)-7 b(.)41 b(They)29 b(are)f(in)n(terpreted)h(to)g(select)h(the)291 1521 y(range)g([)p Fq(start)7 b Fc(;)14 b Fq(end)9 b Fr(\),)33 b(that)f(is,)g(all)g(elemen)n(ts)f(from)g(index)h Fq(start)39 b Fr(\(inclusiv)n(e\))32 b(up)g(to,)g(but)291 1620 y(not)27 b(including,)h(index)g Fq(end)9 b Fr(.)291 1882 y Fm(Required)39 b(vs.)h(allo)m(w)m(ed)g(side-e\013ects)81 b Fo(List-sort!)54 b Fr(and)35 b Fo(List-stable-sort)o(!)291 1982 y Fr(are)29 b(allo)n(w)n(ed,)g(but)i(not)g(required,)f(to)g(alter) f(their)i(argumen)n(ts')e(cons)g(cells)h(to)g(construct)291 2081 y(the)d(result)f(list.)37 b(This)27 b(is)g(consisten)n(t)f(with)i (the)f(what-not-ho)n(w)e(c)n(haracter)g(of)i(the)g(group)291 2181 y(of)g(pro)r(cedures)f(to)i(whic)n(h)f(they)h(b)r(elong)f(\(the)i Fo(sorting)c Fr(structure\).)415 2289 y(The)k Fo(list-delete-neigh)o (bo)o(r-d)o(up)o(s!)p Fr(,)23 b Fo(list-merge!)37 b Fr(and)29 b Fo(list-merge-sort!)291 2389 y Fr(pro)r(cedures,)23 b(on)h(the)g(other)g(hand,)g(pro)n(vide)f(sp)r(eci\014c)h(algorithms,)g (and,)g(as)g(suc)n(h,)g(explic-)291 2488 y(itly)30 b(commit)h(to)f(the) h(use)f(of)g(side-e\013ects)g(on)g(their)h(input)g(lists)f(in)h(order)e (to)h(guaran)n(tee)291 2588 y(their)d(k)n(ey)g(algorithmic)f(prop)r (erties)h(\(e.g.,)h(linear-time)f(op)r(eration\).)291 2866 y Fe(5.20.2)112 b(Pro)s(cedure)37 b(sp)s(eci\014cation)p Black Black 344 3033 a Fr(Structure)27 b(name)670 b(F)-7 b(unctionalit)n(y)p 295 3067 2858 4 v 344 3136 a Fo(sorting)925 b Fr(General)27 b(sorting)f(for)h(lists)h(and)f(v)n(ectors)344 3236 y Fo(sorted)969 b Fr(Sorted)27 b(predicates)g(for)g(lists)g(and)h (v)n(ectors)344 3336 y Fo(list-merge-sort)573 b Fr(List)27 b(merge)g(sort)344 3435 y Fo(vector-merge-sor)o(t)486 b Fr(V)-7 b(ector)27 b(merge)g(sort)344 3535 y Fo(vector-heap-sort)529 b Fr(V)-7 b(ector)27 b(heap)g(sort)344 3634 y Fo(vector-quick-sor)o(t) 486 b Fr(V)-7 b(ector)27 b(quic)n(k)g(sort)344 3734 y Fo(vector-quick-sor)o(t3)442 b Fr(V)-7 b(ector)27 b(quic)n(k)g(sort)g (with)h(3-w)n(a)n(y)d(comparisons)344 3834 y Fo(vector-insert-so)o(rt) 442 b Fr(V)-7 b(ector)27 b(insertion)g(sort)344 3933 y Fo(delete-neighbor-)o(dup)o(li)o(ca)o(tes)93 b Fr(List)27 b(and)h(v)n(ector)e(delete)i(neigh)n(b)r(or)f(duplicates)344 4033 y Fo(binary-searches)573 b Fr(V)-7 b(ector)27 b(binary)g(searc)n (h)291 4246 y(Note)e(that)h(there)g(is)g(no)f(\\list)h(insert)f(sort")f (pac)n(k)-5 b(age,)25 b(as)g(y)n(ou)g(migh)n(t)h(as)f(w)n(ell)g(alw)n (a)n(ys)f(use)291 4346 y(list)k(merge)g(sort.)38 b(The)28 b(reference)g(implemen)n(tation's)g(destructiv)n(e)g(list)h(merge)e (sort)h(will)291 4446 y(do)f(few)n(er)g Fo(set-cdr!)p Fr(s)d(than)k(a)f(destructiv)n(e)g(insert)g(sort.)291 4707 y Fm(Pro)s(cedure)45 b(naming)g(and)h(functionalit)m(y)83 b Fr(Almost)40 b(all)f(of)g(the)h(pro)r(cedures)e(de-)291 4807 y(scrib)r(ed)26 b(b)r(elo)n(w)h(are)f(v)-5 b(arian)n(ts)25 b(of)i(t)n(w)n(o)g(basic)f(op)r(erations:)35 b(sorting)26 b(and)h(merging.)35 b(These)291 4907 y(pro)r(cedures)25 b(are)g(consisten)n(tly)h(named)h(b)n(y)f(comp)r(osing)f(a)h(set)h(of)f (basic)g(lexemes)g(to)h(indi-)291 5006 y(cate)g(what)g(they)h(do.)p Black 1681 5255 a(67)p Black eop end %%Page: 68 76 TeXDict begin 68 75 bop 0 TeXcolorgray Black Black Black Black Black 838 510 a Fr(Lexeme)99 b(Meaning)p 788 543 2767 4 v 838 613 a Fo(sort)199 b Fr(The)33 b(pro)r(cedure)f(sorts)g (its)h(input)g(data)g(set)g(b)n(y)f(some)h Fc(<)f Fr(comparison)1213 712 y(pro)r(cedure.)838 812 y Fo(merge)155 b Fr(The)18 b(pro)r(cedure)g(merges)f(t)n(w)n(o)h(ordered)f(data)h(sets)g(in)n(to)g (a)g(single)g(ordered)1213 912 y(result.)838 1011 y Fo(stable)111 b Fr(This)27 b(lexeme)h(indicates)f(that)h(the)g(sort)f(is)g(a)h (stable)f(one.)838 1111 y Fo(vector)111 b Fr(The)28 b(pro)r(cedure)e (op)r(erates)h(up)r(on)h(v)n(ectors.)838 1210 y Fo(list)199 b Fr(The)28 b(pro)r(cedure)e(op)r(erates)h(up)r(on)h(lists.)838 1310 y Fo(!)331 b Fr(Pro)r(cedures)26 b(that)j(end)f(in)h Fo(!)38 b Fr(are)27 b(allo)n(w)n(ed,)g(and)h(sometimes)g(required,)1213 1410 y(to)f(reuse)g(their)h(input)g(storage)e(to)h(construct)g(their)h (answ)n(er.)739 1623 y Fm(T)m(yp)s(es)23 b(of)g(parameters)h(and)g (return)f(v)-5 b(alues)83 b Fr(In)20 b(the)g(pro)r(cedures)f(sp)r (eci\014ed)i(b)r(elo)n(w,)p Black 863 1791 a Fn(\017)p Black 41 w Fr(A)34 b Fo(<)e Fr(or)g Fo(=)g Fr(parameter)g(is)g(a)h(pro) r(cedure)f(accepting)g(t)n(w)n(o)g(argumen)n(ts)f(tak)n(en)i(from)946 1890 y(the)28 b(sp)r(eci\014ed)g(pro)r(cedure's)f(data)g(set\(s\),)h (and)f(returning)g(a)g(b)r(o)r(olean;)p Black 863 2058 a Fn(\017)p Black 41 w Fo(Start)39 b Fr(and)i Fo(end)f Fr(parameters)f(are)h(exact,)k(non-negativ)n(e)c(in)n(tegers)f(that)j (serv)n(e)946 2157 y(as)34 b(v)n(ector)f(indices)i(selecting)f(a)g (subrange)f(of)h(some)g(asso)r(ciated)f(v)n(ector.)56 b(When)946 2257 y(sp)r(eci\014ed,)28 b(they)g(m)n(ust)g(satisfy)f(the)h (relation)1472 2440 y(0)23 b Fn(\024)f Fq(start)31 b Fn(\024)22 b Fq(end)32 b Fn(\024)23 b Fo(\(vector-length)38 b Fq(ve)l(ctor)9 b Fo(\))946 2623 y Fr(where)28 b Fq(ve)l(ctor)36 b Fr(is)28 b(the)g(asso)r(ciated)e(v)n(ector.)739 2790 y(P)n(assing)33 b(v)-5 b(alues)34 b(to)h(pro)r(cedures)e(with)j(these)e (parameters)f(that)j(do)e(not)h(satisfy)f(these)739 2890 y(t)n(yp)r(es)27 b(is)h(an)f(error.)863 2990 y(If)f(a)f(pro)r(cedure)f (is)h(said)g(to)g(return)g(\\unsp)r(eci\014ed,")g(this)g(means)g(that)g (nothing)g(at)h(all)739 3090 y(is)e(said)f(ab)r(out)h(what)g(the)g(pro) r(cedure)f(returns,)h(not)g(ev)n(en)f(the)i(n)n(um)n(b)r(er)e(of)h (return)g(v)-5 b(alues.)739 3189 y(Suc)n(h)31 b(a)f(pro)r(cedure)g(is)h (not)f(ev)n(en)h(required)f(to)g(b)r(e)i(consisten)n(t)e(from)g(call)h (to)f(call)h(in)g(the)739 3289 y(nature)h(or)f(n)n(um)n(b)r(er)h(of)h (its)f(return)g(v)-5 b(alues.)51 b(It)33 b(is)f(simply)h(required)e(to) h(return)g(a)g(v)-5 b(alue)739 3388 y(\(or)31 b(v)-5 b(alues\))32 b(that)h(ma)n(y)e(b)r(e)i(passed)e(to)h(a)g(command)g(con) n(tin)n(uation,)g(e.g.)50 b(as)32 b(the)g(v)-5 b(alue)739 3488 y(of)35 b(an)f(expression)f(app)r(earing)h(as)g(a)g(non-terminal)g (subform)g(of)h(a)f Fo(begin)f Fr(expression.)739 3588 y(Note)d(that)g(in)g(R)1284 3558 y Fk(5)1322 3588 y Fr(RS,)g(this)g (restricts)f(suc)n(h)h(a)f(pro)r(cedure)g(to)h(returning)f(a)h(single)f (v)-5 b(alue;)739 3687 y(non-R)962 3657 y Fk(5)999 3687 y Fr(RS)28 b(systems)f(ma)n(y)g(not)g(ev)n(en)g(pro)n(vide)g(this)h (restriction.)739 3905 y Fo(sorting)p Fm(|general)h(sorting)i(pac)m(k) -5 b(age)739 4059 y Fr(This)20 b(library)g(pro)n(vides)f(basic)h (sorting)f(and)h(merging)g(functionalit)n(y)g(suitable)h(for)f(general) 739 4158 y(programming.)68 b(The)38 b(pro)r(cedures)g(are)f(named)i(b)n (y)f(their)g(seman)n(tic)h(prop)r(erties,)h(i.e.,)739 4258 y(what)27 b(they)h(do)g(to)f(the)h(data)f(\(sort,)g(stable)h (sort,)e(merge,)h(and)g(so)g(forth\).)p Black 755 4408 a Fn(\017)p Black 42 w Fo(\(list-sorted?)44 b Fc(<)d Fq(list)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 755 4508 a Fn(\017)p Black 42 w Fo(\(list-merge)36 b Fc(<)42 b Fq(list)1574 4520 y Fk(1)1653 4508 y Fq(list)1761 4520 y Fk(2)1798 4508 y Fo(\))f Fn(!)h Fq(list)p Black 755 4608 a Fn(\017)p Black 42 w Fo(\(list-merge!)j Fc(<)c Fq(list)1626 4620 y Fk(1)1705 4608 y Fq(list)1813 4620 y Fk(2)1850 4608 y Fo(\))g Fn(!)h Fq(list)p Black 755 4707 a Fn(\017)p Black 42 w Fo(\(list-sort)37 b Fc(<)k Fq(lis)7 b Fo(\))42 b Fn(!)f Fq(list)p Black 755 4807 a Fn(\017)p Black 42 w Fo(\(list-sort!)k Fc(<)c Fq(lis)7 b Fo(\))42 b Fn(!)f Fq(list)p Black 755 4907 a Fn(\017)p Black 42 w Fo(\(list-stable-so)o(rt)35 b Fc(<)41 b Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 755 5006 a Fn(\017)p Black 42 w Fo(\(list-stable-so)o(rt)o(!)i Fc(<)d Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 2130 5255 a Fr(68)p Black eop end %%Page: 69 77 TeXDict begin 69 76 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(\(list-delete-neig)o(hb)o(or-)o (du)o(ps)35 b Fr(=)41 b Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 307 623 a Fn(\017)p Black 41 w Fo(\(vector-sorted?)i Fc(<)d Fq(v)h([start)f([end]])9 b Fo(\))43 b Fn(!)e Fq(b)l(o)l(ole)l (an)p Black 307 722 a Fn(\017)p Black 41 w Fo(\(vector-merge)36 b Fc(<)41 b Fq(v)1142 734 y Fk(1)1221 722 y Fq(v)1259 734 y Fk(2)1338 722 y Fq([start)p Fr(1)g Fq([end)p Fr(1)h Fq([start)p Fr(2)f Fq([end)p Fr(2)p Fq(]]]])9 b Fo(\))43 b Fn(!)f Fq(ve)l(ctor)p Black 307 822 a Fn(\017)p Black 41 w Fo(\(vector-merge!)36 b Fc(<)41 b Fq(v)h(v)1266 834 y Fk(1)1345 822 y Fq(v)1383 834 y Fk(2)1462 822 y Fq([start)f([start)p Fr(1)g Fq([end)p Fr(1)h Fq([start)p Fr(2)f Fq([end)p Fr(2)p Fq(]]]]])9 b Fo(\))p Black 307 922 a Fn(\017)p Black 41 w Fo(\(vector-sort)37 b Fc(<)k Fq(v)h([start)f([end]])9 b Fo(\))43 b Fn(!)e Fq(ve)l(ctor)p Black 307 1021 a Fn(\017)p Black 41 w Fo(\(vector-sort!)36 b Fc(<)41 b Fq(v)h([start)g([end]])9 b Fo(\))p Black 307 1121 a Fn(\017)p Black 41 w Fo(\(vector-stable-so)o(rt)35 b Fc(<)41 b Fq(v)h([start)f([end]])9 b Fo(\))43 b Fn(!)e Fq(ve)l(ctor)p Black 307 1220 a Fn(\017)p Black 41 w Fo(\(vector-stable-so)o(rt)o(!)35 b Fc(<)42 b Fq(v)f([start)h([end]])9 b Fo(\))p Black 307 1320 a Fn(\017)p Black 41 w Fo(\(vector-delete-ne)o (ig)o(hbo)o(r-)o(du)o(ps)35 b Fr(=)41 b Fq(v)h([start)f([end]])9 b Fo(\))43 b Fn(!)e Fq(ve)l(ctor)p Black Black 678 1502 a Fr(Pro)r(cedure)979 b(Suggested)26 b(algorithm)p 628 1535 2189 4 v 678 1605 a Fo(list-sort)953 b Fr(v)n(ector)26 b(heap)h(or)g(quic)n(k)678 1705 y Fo(list-sort!)909 b Fr(list)27 b(merge)g(sort)678 1804 y Fo(list-stable-sort)645 b Fr(v)n(ector)26 b(merge)h(sort)678 1904 y Fo(list-stable-sort!)601 b Fr(list)27 b(merge)g(sort)678 2003 y Fo(vector-sort)865 b Fr(heap)27 b(or)g(quic)n(k)g(sort)678 2103 y Fo(vector-sort!)821 b Fr(heap)27 b(or)g(quic)n(k)g(sort)678 2203 y Fo(vector-stable-sor)o (t)558 b Fr(v)n(ector)26 b(merge)h(sort)678 2302 y Fo (vector-stable-sor)o(t!)j Fr(merge)d(sort)291 2481 y Fo(List-Sorted?)36 b Fr(and)29 b Fo(vector-sorted?)36 b Fr(return)29 b(true)g(if)h(their)f(input)h(list)g(or)e(v)n(ector)g (is)291 2581 y(in)f(sorted)g(order,)f(as)h(determined)h(b)n(y)g(their)f Fc(<)g Fr(comparison)f(parameter.)415 2681 y(All)34 b(four)g(merge)e (op)r(erations)h(are)f(stable:)49 b(an)33 b(elemen)n(t)h(of)g(the)g (initial)g(list)g Fq(list)3010 2693 y Fk(1)3081 2681 y Fr(or)291 2780 y(v)n(ector)c Fq(ve)l(ctor)759 2792 y Fk(1)829 2780 y Fr(will)j(come)e(b)r(efore)h(an)g(equal-comparing)e (elemen)n(t)i(in)h(the)f(second)g(list)291 2880 y Fq(list)399 2892 y Fk(2)464 2880 y Fr(or)26 b(v)n(ector)h Fq(ve)l(ctor)1030 2892 y Fk(2)1095 2880 y Fr(in)h(the)g(result.)415 2980 y(The)g(pro)r(cedures)p Black 415 3146 a Fn(\017)p Black 41 w Fo(list-merge)p Black 415 3312 a Fn(\017)p Black 41 w Fo(list-sort)p Black 415 3478 a Fn(\017)p Black 41 w Fo(list-stable-sort)p Black 415 3644 a Fn(\017)p Black 41 w Fo(list-delete-neigh)o(bo)o(r-)o(dup)o(s)291 3810 y Fr(do)21 b(not)h(alter)g(their)g(inputs)g(and)g(are)f(allo)n(w)n (ed)g(to)h(return)f(a)h(v)-5 b(alue)22 b(that)g(shares)f(a)g(common)291 3910 y(tail)27 b(with)h(a)f(list)h(argumen)n(t.)415 4010 y(The)g(pro)r(cedure)p Black 415 4176 a Fn(\017)p Black 41 w Fo(list-sort!)p Black 415 4342 a Fn(\017)p Black 41 w Fo(list-stable-sort!)291 4508 y Fr(are)f(\\linear)g(up)r(date")h (op)r(erators|they)e(are)h(allo)n(w)n(ed,)g(but)i(not)f(required,)g(to) g(alter)g(the)291 4608 y(cons)f(cells)g(of)g(their)h(argumen)n(ts)e(to) i(pro)r(duce)f(their)g(results.)415 4707 y(On)19 b(the)h(other)f(hand,) j(the)e Fo(list-merge!)29 b Fr(pro)r(cedure)19 b(mak)n(e)g(only)g(a)g (single,)i(iterativ)n(e,)291 4807 y(linear-time)30 b(pass)h(o)n(v)n(er) e(its)j(argumen)n(t)e(list,)j(using)f Fo(set-cdr!)p Fr(s)c(to)j (rearrange)d(the)k(cells)291 4907 y(of)40 b(the)g(list)g(in)n(to)g(the) h(\014nal)f(result)f(|it)i(w)n(orks)d(\\in)i(place.")74 b(Hence,)43 b(an)n(y)c(cons)h(cell)291 5006 y(app)r(earing)29 b(in)h(the)h(result)f(m)n(ust)g(ha)n(v)n(e)f(originally)g(app)r(eared)g (in)i(an)f(input.)45 b(The)31 b(in)n(ten)n(t)p Black 1681 5255 a(69)p Black eop end %%Page: 70 78 TeXDict begin 70 77 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(of)31 b(this)h(iterativ)n(e-algorithm)d(commitmen)n(t)j (is)g(to)f(allo)n(w)f(the)i(programmer)e(to)h(b)r(e)h(sure)739 623 y(that)i(if,)j(for)c(example,)j Fo(list-merge!)52 b Fr(is)34 b(ask)n(ed)f(to)h(merge)f(t)n(w)n(o)g(ten-million-elemen)n (t)739 722 y(lists,)27 b(the)h(op)r(eration)f(will)g(complete)h (without)g(p)r(erforming)f(some)f(extremely)h(\(p)r(ossibly)739 822 y(t)n(w)n(en)n(t)n(y-million\))g(deep)g(recursion.)863 922 y(The)h(v)n(ector)e(pro)r(cedures)p Black 863 1089 a Fn(\017)p Black 41 w Fo(vector-sort)p Black 863 1256 a Fn(\017)p Black 41 w Fo(vector-stable-sor)o(t)p Black 863 1424 a Fn(\017)p Black 41 w Fo(vector-delete-nei)o(ghb)o(or)o(-du)o (ps)739 1591 y Fr(do)31 b(not)g(alter)g(their)g(inputs,)h(but)g(allo)r (cate)f(a)f(fresh)h(v)n(ector)f(for)h(their)g(result,)h(of)f(length)739 1691 y Fq(end)c Fn(\000)18 b Fq(start)8 b Fr(.)863 1791 y(The)28 b(v)n(ector)e(pro)r(cedures)p Black 863 1958 a Fn(\017)p Black 41 w Fo(vector-sort!)p Black 863 2125 a Fn(\017)p Black 41 w Fo(vector-stable-sor)o(t!)739 2292 y Fr(sort)33 b(their)h(data)f(in-place.)56 b(\(But)34 b(note)g(that)h Fo(vector-stable-s)o(ort)o(!)50 b Fr(ma)n(y)33 b(allo)r(cate)739 2392 y(temp)r(orary)26 b(storage)g(prop)r(ortional)g (to)h(the)h(size)f(of)h(the)g(input)g(.\))863 2492 y Fo(Vector-merge)23 b Fr(returns)k(a)g(v)n(ector)g(of)g(length)h(\()p Fq(end)2527 2504 y Fk(1)2583 2492 y Fn(\000)18 b Fq(start)2833 2504 y Fk(1)2888 2492 y Fr(+)g(\()p Fq(end)3130 2504 y Fk(2)3187 2492 y Fn(\000)g Fq(start)3437 2504 y Fk(2)3473 2492 y Fr(\).)863 2592 y Fo(Vector-merge!)32 b Fr(writes)27 b(its)g(result)h(in)n(to)f(v)n(ector)f Fq(v)9 b Fr(,)28 b(b)r(eginning)f(at)g(index)h Fq(start)7 b Fr(,)28 b(for)739 2691 y(indices)c(less)g(than)g Fq(end)32 b Fr(=)22 b Fq(start)d Fr(+)11 b(\()p Fq(end)2015 2703 y Fk(1)2064 2691 y Fn(\000)g Fq(start)2307 2703 y Fk(1)2344 2691 y Fr(\))g(+)g(\()p Fq(end)2622 2703 y Fk(2)2671 2691 y Fn(\000)g Fq(start)2914 2703 y Fk(2)2951 2691 y Fr(\).)36 b(The)24 b(target)f(sub-)739 2791 y(v)n(ector)d Fq(v)9 b Fr([)p Fq(start)e Fc(;)14 b Fq(end)9 b Fr(\))21 b(ma)n(y)f(not)h(o)n (v)n(erlap)e(either)i(source)f(sub)n(v)n(ector)f Fq(ve)l(ctor)3105 2803 y Fk(1)3143 2791 y Fr([)p Fq(start)3333 2803 y Fk(1)3369 2791 y Fc(;)14 b Fq(end)3533 2803 y Fk(1)3571 2791 y Fr(\))739 2891 y Fq(ve)l(ctor)954 2903 y Fk(2)991 2891 y Fr([)p Fq(start)1181 2903 y Fk(2)1218 2891 y Fc(;)g Fq(end)1382 2903 y Fk(2)1420 2891 y Fr(\).)863 2991 y(The)26 b Fo(...-delete-neig)o(hbo)o(r-)o(du)o(ps-)o(..)o(.)k Fr(pro)r(cedures:)k(These)25 b(pro)r(cedures)f(delete)739 3090 y(adjacen)n(t)41 b(duplicate)h(elemen)n(ts)g(from)g(a)f(list)h(or) f(a)h(v)n(ector,)i(using)e(a)f(giv)n(en)g(elemen)n(t-)739 3190 y(equalit)n(y)36 b(pro)r(cedure.)64 b(The)37 b(\014rst/leftmost)g (elemen)n(t)g(of)g(a)f(run)h(of)g(equal)g(elemen)n(ts)f(is)739 3289 y(the)28 b(one)f(that)h(surviv)n(es.)35 b(The)28 b(list)g(or)f(v)n(ector)f(is)h(not)h(otherwise)f(disordered.)863 3389 y(These)19 b(pro)r(cedures)e(are)g(linear)h(time|m)n(uc)n(h)g (faster)g(than)h(the)f Fc(O)r Fr(\()p Fc(n)2996 3359 y Fk(2)3034 3389 y Fr(\))h(general)e(duplicate-)739 3489 y(elemen)n(t)32 b(deletors)f(that)h(do)f(not)h(assume)f(an)n(y)g (\\bunc)n(hing")g(of)g(elemen)n(ts)h(\(suc)n(h)g(as)f(the)739 3589 y(ones)23 b(pro)n(vided)f(b)n(y)h(SRFI)h(1\).)36 b(If)24 b(y)n(ou)e(w)n(an)n(t)h(to)h(delete)f(duplicate)h(elemen)n(ts)f (from)h(a)f(large)739 3688 y(list)j(or)f(v)n(ector,)g(y)n(ou)g(can)h (sort)f(the)i(elemen)n(ts)e(to)h(bring)g(equal)f(items)h(together,)g (then)g(use)739 3788 y(one)h(of)h(these)f(pro)r(cedures,)g(for)g(a)g (total)g(time)h(of)g Fc(O)r Fr(\()p Fc(n)14 b Fr(log)q(\()p Fc(n)p Fr(\)\).)863 3888 y(The)32 b(comparison)f(pro)r(cedure)g(=)g (passed)h(to)g(these)g(pro)r(cedures)e(is)i(alw)n(a)n(ys)e(applied)739 3987 y Fo(\()p Fr(=)43 b Fc(x)h(y)s Fo(\))27 b Fr(where)g Fc(x)h Fr(comes)f(b)r(efore)g Fc(y)j Fr(in)e(the)g(con)n(taining)f (list)h(or)e(v)n(ector.)p Black 863 4172 a Fn(\017)p Black 41 w Fo(List-delete-neigh)o(bor)o(-d)o(ups)17 b Fr(do)r(es)24 b(not)g(alter)f(its)h(input)h(list;)g(its)f(answ)n(er)f (ma)n(y)946 4271 y(share)k(storage)f(with)i(the)g(input)g(list.)p Black 863 4439 a Fn(\017)p Black 41 w Fo(Vector-delete-nei)o(ghb)o(or)o (-du)o(ps)13 b Fr(do)r(es)20 b(not)g(alter)f(its)h(input)h(v)n(ector,)f (but)g(rather)946 4538 y(allo)r(cates)27 b(a)g(fresh)g(v)n(ector)g(to)g (hold)h(the)g(result.)739 4722 y(Examples:)p Black Black 739 4907 a Fo(\(list-delete-nei)o(gh)o(bor)o(-d)o(ups)37 b(=)43 b('\(1)f(1)h(2)h(7)f(7)g(7)g(0)g(-2)g(-2\)\))826 5006 y Fr(=)-14 b Fn(\))43 b Fo(\(1)g(2)g(7)h(0)f(-2\))p Black 2130 5255 a Fr(70)p Black eop end %%Page: 71 79 TeXDict begin 71 78 bop 0 TeXcolorgray Black Black Black 291 623 a Fo(\(vector-delete-)o(nei)o(gh)o(bo)o(r-d)o(up)o(s)38 b(=)43 b('#\(1)f(1)h(2)g(7)g(7)g(7)h(0)f(-2)f(-2\)\))378 722 y Fr(=)-15 b Fn(\))44 b Fo(#\(1)e(2)i(7)f(0)g(-2\))291 922 y(\(vector-delete-)o(nei)o(gh)o(bo)o(r-d)o(up)o(s)38 b(=)43 b('#\(1)f(1)h(2)g(7)g(7)g(7)h(0)f(-2)f(-2\))h(3)g(7\))378 1021 y Fr(=)-15 b Fn(\))44 b Fo(#\(7)e(0)i(-2\))291 1243 y Fm(Algorithm-sp)s(eci\014c)30 b(sorting)g(pac)m(k)-5 b(ages)291 1398 y Fr(These)23 b(pac)n(k)-5 b(ages)21 b(pro)n(vide)h(more)h(sp)r(eci\014c)h(sorting)e(functionalit)n(y)-7 b(,)24 b(that)g(is,)g(sp)r(eci\014c)g(com-)291 1498 y(mitmen)n(t)30 b(to)f(particular)f(algorithms)g(that)h(ha)n(v)n(e)f(particular)g (pragmatic)g(consequences)291 1598 y(\(suc)n(h)g(as)g(memory)g(lo)r (calit)n(y)-7 b(,)29 b(asymptotic)f(running)g(time\))i(b)r(ey)n(ond)e (their)h(seman)n(tic)f(b)r(e-)291 1697 y(ha)n(viour)f(\(sorting,)i (stable)h(sorting,)e(merging,)h(etc.\).)43 b(Programmers)26 b(that)k(need)f(a)g(par-)291 1797 y(ticular)e(algorithm)f(can)h(use)h (one)f(of)h(these)f(pac)n(k)-5 b(ages.)291 2019 y Fo(sorted)p Fm(|sorted)29 b(predicates)p Black 307 2188 a Fn(\017)p Black 41 w Fo(\(list-sorted?)45 b Fc(<)c Fq(list)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 2288 a Fn(\017)p Black 41 w Fo(\(vector-sorted?)i Fc(<)d Fq(ve)l(ctor)9 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 2388 a Fn(\017)p Black 41 w Fo(\(vector-sorted?)i Fc(<)d Fq(ve)l(ctor)h (start)8 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 307 2487 a Fn(\017)p Black 41 w Fo(\(vector-sorted?)i Fc(<)d Fq(ve)l(ctor)h(start)f(end)9 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)415 2657 y Fr(Return)30 b Fo(#f)f Fr(i\013)h(there)f(is)h(an)f(adjacen)n(t)g(pair)g Fc(:)14 b(:)g(:)g(x;)g(y)j(:)d(:)g(:)29 b Fr(in)h(the)g(input)h(list)e(or)g(v)n (ector)291 2756 y(suc)n(h)18 b(that)g Fc(y)26 b(<)d(x)p Fr(.)34 b(The)18 b(optional)g Fq(start)7 b Fr(/)p Fq(end)27 b Fr(range)17 b(argumen)n(ts)g(restrict)h Fo(vector-sorted?)291 2856 y Fr(to)27 b(the)h(indicated)g(sub)n(v)n(ector.)291 3078 y Fo(list-merge-sort)o Fm(|list)d(merge)31 b(sort)p Black 307 3247 a Fn(\017)p Black 41 w Fo(\(list-merge-sort)k Fc(<)41 b Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 307 3347 a Fn(\017)p Black 41 w Fo(\(list-merge-sort!)h Fc(<)e Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 307 3447 a Fn(\017)p Black 41 w Fo(\(list-merge)37 b Fq(list)1019 3459 y Fk(1)1098 3447 y Fc(<)k Fq(list)1312 3459 y Fk(2)1350 3447 y Fo(\))g Fn(!)g Fq(list)p Black 307 3546 a Fn(\017)p Black 41 w Fo(\(list-merge!)k Fq(list)1071 3558 y Fk(1)1150 3546 y Fc(<)c Fq(list)1364 3558 y Fk(2)1402 3546 y Fo(\))g Fn(!)g Fq(list)291 3716 y Fr(The)22 b(sort)f(pro)r (cedures)f(sort)h(their)h(data)g(using)f(a)h(list)g(merge)f(sort,)h (whic)n(h)g(is)g(stable.)35 b(\(The)291 3815 y(reference)d(implemen)n (tation)i(is,)h(additionally)-7 b(,)34 b(a)f(\\natural")f(sort.)54 b(See)33 b(b)r(elo)n(w)h(for)f(the)291 3915 y(prop)r(erties)26 b(of)i(this)g(algorithm.\))415 4016 y(The)22 b Fo(!)34 b Fr(pro)r(cedures)21 b(are)g(destructiv)n(e|they)g(use)g Fo(set-cdr!)p Fr(s)e(to)i(rearrange)e(the)j(cells)291 4116 y(of)28 b(the)g(lists)g(in)n(to)g(the)h(prop)r(er)e(order.)38 b(As)28 b(suc)n(h,)g(they)g(do)g(not)h(allo)r(cate)e(an)n(y)g(extra)h (cons)291 4215 y(cells|they)f(are)g(\\in)g(place")g(sorts.)415 4316 y(The)36 b(merge)g(op)r(erations)f(are)g(stable:)54 b(an)36 b(elemen)n(t)h(of)f Fq(list)2349 4328 y Fk(1)2423 4316 y Fr(will)g(come)g(b)r(efore)g(an)291 4416 y(equal-comparing)25 b(elemen)n(t)j(in)f Fq(list)1427 4428 y Fk(2)1492 4416 y Fr(in)h(the)g(result)g(list.)291 4637 y Fo(vector-merge-so)o(rt)p Fm(|v)m(ector)f(merge)k(sort)p Black 307 4807 a Fn(\017)p Black 41 w Fo(\(vector-merge-sor)o(t)k Fc(<)41 b Fq(ve)l(ctor)h([start) g([end)g([temp]]])9 b Fo(\))43 b Fn(!)e Fq(ve)l(ctor)p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(vector-merge-sor)o(t!)35 b Fc(<)41 b Fq(ve)l(ctor)h([start)f([end)i([temp]]])9 b Fo(\))p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(vector-merge)36 b Fc(<)41 b Fq(ve)l(ctor)1319 5018 y Fk(1)1399 5006 y Fq(ve)l(ctor)1614 5018 y Fk(2)1693 5006 y Fq([start)1885 5018 y Fk(1)1963 5006 y Fq([end)2115 5018 y Fk(1)2195 5006 y Fq([start)2387 5018 y Fk(2)2466 5006 y Fq([end)2618 5018 y Fk(2)2656 5006 y Fq(]]]])9 b Fo(\))42 b Fn(!)g Fq(ve)l(ctor)p Black 1681 5255 a Fr(71)p Black eop end %%Page: 72 80 TeXDict begin 72 79 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(vector-merge!)35 b Fc(<)41 b Fq(ve)l(ctor)h(ve)l(ctor)2068 535 y Fk(1)2147 523 y Fq(ve)l(ctor)2362 535 y Fk(2)2441 523 y Fq([start)g([start)2867 535 y Fk(1)2946 523 y Fq([end)3098 535 y Fk(1)3177 523 y Fq([start)3369 535 y Fk(2)3448 523 y Fq([end)3600 535 y Fk(2)3638 523 y Fq(]]]]])9 b Fo(\))739 690 y Fr(The)35 b(sort)g(pro)r(cedures)f(sort)h(their)g(data)g(using)g(v)n(ector)g (merge)f(sort,)j(whic)n(h)e(is)g(stable.)739 790 y(\(The)29 b(reference)f(implemen)n(tation)h(is,)g(additionally)-7 b(,)28 b(a)g(\\natural")f(sort.)40 b(See)28 b(b)r(elo)n(w)h(for)739 889 y(the)f(prop)r(erties)f(of)g(this)h(algorithm.\))863 989 y(The)42 b(optional)e Fq(start)8 b Fr(/)p Fq(end)50 b Fr(argumen)n(ts)40 b(pro)n(vide)g(for)h(sorting)f(of)h(subranges,)i (and)739 1089 y(default)28 b(to)f(0)h(and)f(the)h(length)g(of)f(the)h (corresp)r(onding)e(v)n(ector.)863 1189 y(Merge-sorting)20 b(a)h(v)n(ector)g(requires)g(the)h(allo)r(cation)f(of)h(a)f(temp)r (orary)g(\\scratc)n(h")f(w)n(ork)739 1288 y(v)n(ector)26 b(for)g(the)i(duration)e(of)h(the)g(sort.)36 b(This)27 b(scratc)n(h)f(v)n(ector)g(can)g(b)r(e)i(passed)e(in)h(b)n(y)g(the)739 1388 y(clien)n(t)h(as)f(the)i(optional)e Fq(temp)33 b Fr(argumen)n(t;)27 b(if)i(so,)e(the)h(supplied)h(v)n(ector)d(m)n(ust)i (b)r(e)h(of)f(size)739 1488 y Fn(\024)k Fq(end)8 b Fr(,)35 b(and)e(will)g(not)g(b)r(e)g(altered)g(outside)f(the)i(range)d ([start,end\).)53 b(If)34 b(not)f(supplied,)739 1587 y(the)28 b(sort)f(routines)g(allo)r(cate)f(one)h(themselv)n(es.)863 1687 y(The)i(merge)e(op)r(erations)f(are)i(stable:)37 b(an)28 b(elemen)n(t)g(of)g Fq(ve)l(ctor)2830 1699 y Fk(1)2896 1687 y Fr(will)g(come)g(b)r(efore)g(an)739 1787 y(equal-comparing)d(elemen)n(t)j(in)g Fq(ve)l(ctor)1983 1799 y Fk(2)2048 1787 y Fr(in)g(the)g(result)f(v)n(ector.)p Black 863 1971 a Fn(\017)p Black 41 w Fo(Vector-merge-sort)o(!)k Fr(lea)n(v)n(es)26 b(its)i(result)f(in)h Fq(ve)l(ctor)9 b Fr([)p Fq(start)f Fc(;)14 b Fq(end)8 b Fr(\).)p Black 863 2138 a Fn(\017)p Black 41 w Fo(Vector-merge-sort)21 b Fr(returns)27 b(a)g(v)n(ector)f(of)i(length)g Fq(end)f Fn(\000)18 b Fq(start)7 b Fr(.)p Black 863 2305 a Fn(\017)p Black 41 w Fo(Vector-merge)21 b Fr(returns)k(a)f(v)n(ector)g(of)i (length)f(\()p Fq(end)2596 2317 y Fk(1)2648 2305 y Fn(\000)13 b Fq(start)2893 2317 y Fk(1)2930 2305 y Fr(\))h(+)g(\()p Fq(end)3214 2317 y Fk(2)3266 2305 y Fn(\000)f Fq(start)3511 2317 y Fk(2)3548 2305 y Fr(\).)p Black 863 2473 a Fn(\017)p Black 41 w Fo(Vector-merge!)31 b Fr(writes)26 b(its)h(result)e(in)n(to) h Fq(ve)l(ctor)10 b Fr(,)26 b(b)r(eginning)g(at)g(index)h Fq(start)7 b Fr(,)27 b(for)946 2572 y(indices)c(less)f(than)h Fq(end)32 b Fr(=)22 b Fq(start)16 b Fr(+)8 b(\()p Fq(end)2212 2584 y Fk(1)2258 2572 y Fn(\000)g Fq(start)2498 2584 y Fk(1)2535 2572 y Fr(\))g(+)g(\()p Fq(end)2807 2584 y Fk(2)2853 2572 y Fn(\000)g Fq(start)3093 2584 y Fk(2)3130 2572 y Fr(\).)36 b(The)22 b(target)946 2672 y(sub)n(v)n(ector)1961 2772 y Fq(ve)l(ctor)10 b Fr([)p Fq(start)d Fc(;)14 b Fq(end)9 b Fr(\))946 2923 y(ma)n(y)27 b(not)h(o)n(v)n(erlap)d(either)j (source)e(sub)n(v)n(ector)1467 3106 y Fq(ve)l(ctor)1682 3118 y Fk(1)1720 3106 y Fr([)p Fq(start)1910 3118 y Fk(1)1946 3106 y Fc(;)14 b Fq(end)2110 3118 y Fk(1)2148 3106 y Fr(\))p Fc(;)42 b Fr(or)26 b Fq(ve)l(ctor)2561 3118 y Fk(2)2599 3106 y Fr([)p Fq(start)2789 3118 y Fk(2)2826 3106 y Fc(;)14 b Fq(end)2990 3118 y Fk(2)3027 3106 y Fr(\))p Fc(:)739 3323 y Fo(vector-heap-sort)o Fm(|v)m(ector)28 b(heap)k(sort)p Black 755 3490 a Fn(\017)p Black 42 w Fo(\(vector-heap-so)o(rt)j Fc(<)41 b Fq(ve)l(ctor)h([start)f([end]])9 b Fo(\))43 b Fn(!)f Fq(ve)l(ctor)p Black 755 3590 a Fn(\017)p Black 42 w Fo(\(vector-heap-so)o(rt)o(!)36 b Fc(<)41 b Fq(ve)l(ctor)h([start)f([end]])9 b Fo(\))739 3757 y Fr(These)29 b(pro)r(cedures)e(sort)h(their)h(data)g(using)f(heap)h (sort,)g(whic)n(h)f(is)h(not)g(a)g(stable)f(sorting)739 3856 y(algorithm.)863 3956 y Fo(Vector-heap-sort)12 b Fr(returns)18 b(a)g(v)n(ector)f(of)h(length)h Fq(end)9 b Fn(\000)p Fq(start)e Fr(.)33 b Fo(Vector-heap-sort!)739 4056 y Fr(is)27 b(in-place,)g(lea)n(ving)g(its)h(result)f(in)h Fq(ve)l(ctor)9 b Fr([)p Fq(start)f Fc(;)14 b Fq(end)8 b Fr(\).)739 4273 y Fo(vector-quick-sor)o(t)p Fm(|v)m(ector)27 b(quic)m(k)33 b(sort)p Black 755 4440 a Fn(\017)p Black 42 w Fo(\(vector-quick-s)o(or)o(t)j Fc(<)41 b Fq(ve)l(ctor)h([start)f ([end]])9 b Fo(\))43 b Fn(!)e Fq(ve)l(ctor)p Black 755 4540 a Fn(\017)p Black 42 w Fo(\(vector-quick-s)o(or)o(t!)35 b Fc(<)41 b Fq(ve)l(ctor)h([start)g([end]])9 b Fo(\))739 4707 y Fr(These)27 b(pro)r(cedures)f(sort)h(their)g(data)g(using)g (quic)n(k)g(sort,)f(whic)n(h)i(is)f(not)g(a)g(stable)g(sorting)739 4807 y(algorithm.)863 4907 y Fo(Vector-quick-sort)12 b Fr(returns)18 b(a)f(v)n(ector)h(of)g(length)g Fq(end)9 b Fn(\000)p Fq(start)e Fr(.)34 b Fo(Vector-quick-sor)o(t!)739 5006 y Fr(is)27 b(in-place,)g(lea)n(ving)g(its)h(result)f(in)h Fq(ve)l(ctor)9 b Fr([)p Fq(start)f Fc(;)14 b Fq(end)8 b Fr(\).)p Black 2130 5255 a(72)p Black eop end %%Page: 73 81 TeXDict begin 73 80 bop 0 TeXcolorgray Black Black Black 291 523 a Fo(vector-quick-so)o(rt3)o Fm(|v)m(ector)28 b(quic)m(k)k(sort)g(with)g(3-w)m(a)m(y)g(comparisons)p Black 307 672 a Fn(\017)p Black 41 w Fo(\(vector-quick-sor)o(t3)j Fq(c)l(omp)42 b(ve)l(ctor)g([start)f([end]])9 b Fo(\))43 b Fn(!)e Fq(ve)l(ctor)p Black 307 771 a Fn(\017)p Black 41 w Fo(\(vector-quick-sor)o(t3)o(!)35 b Fq(c)l(omp)43 b(ve)l(ctor)f([start)f([end]])9 b Fo(\))291 920 y Fr(These)27 b(pro)r(cedures)f(sort)g(their)i(data)f(using)g(quic)n(k)f(sort,)h (whic)n(h)g(is)h(not)f(a)g(stable)g(sorting)291 1019 y(algorithm.)415 1119 y Fo(Vector-quick-sor)o(t3)12 b Fr(returns)18 b(a)g(v)n(ector)f(of)h(length)h Fq(end)8 b Fn(\000)p Fq(start)f Fr(.)34 b Fo(Vector-quick-sort)o(3!)291 1219 y Fr(is)27 b(in-place,)g(lea)n(ving)g(its)g(result)h(in)f Fq(ve)l(ctor)10 b Fr([)p Fq(start)d Fc(;)14 b Fq(end)9 b Fr(\).)415 1318 y(These)30 b(pro)r(cedures)f(implemen)n(t)i(a)f(v)-5 b(arian)n(t)29 b(of)h(quic)n(k-sort)f(that)i(tak)n(es)e(a)h(three-w)n (a)n(y)291 1418 y(comparison)d(pro)r(cedure)i Fc(C)6 b Fr(.)43 b Fc(C)36 b Fr(compares)28 b(a)h(pair)g(of)g(elemen)n(ts)h (and)f(returns)g(an)g(exact)291 1518 y(in)n(teger)d(whose)h(sign)g (indicates)h(their)f(relationship:)1311 1678 y(\()p Fc(C)6 b(xy)s Fr(\))24 b Fc(<)e Fr(0)83 b Fn(\))g Fc(x)23 b(<)g(y)1311 1803 y Fr(\()p Fc(C)6 b(xy)s Fr(\))24 b(=)e(0)83 b Fn(\))g Fc(x)23 b Fr(=)g Fc(y)1311 1927 y Fr(\()p Fc(C)6 b(xy)s Fr(\))24 b Fc(>)e Fr(0)83 b Fn(\))g Fc(x)23 b(>)g(y)415 2088 y Fr(T)-7 b(o)33 b(help)i(remem)n(b)r(er)e(the)h(relationship)f(b) r(et)n(w)n(een)g(the)h(sign)g(of)f(the)h(result)g(and)g(the)291 2188 y(relation,)24 b(use)h(the)h(pro)r(cedure)e Fn(\000)h Fr(as)f(the)h(mo)r(del)h(for)e Fc(C)6 b Fr(:)36 b(\()p Fn(\000)p Fc(xy)s Fr(\))24 b Fc(<)e Fr(0)j(means)g(that)g Fc(x)e(<)g(y)s Fr(;)291 2287 y(\()p Fn(\000)p Fc(xy)s Fr(\))g Fc(>)g Fr(0)k(means)g(that)h Fc(x)23 b(>)g(y)s Fr(.)291 2499 y Fo(vector-insert-s)o(ort)o Fm(|v)m(ector)28 b(insertion)i(sort)p Black 307 2648 a Fn(\017)p Black 41 w Fo(\(vector-insert-so)o(rt)35 b Fc(<)41 b Fq(ve)l(ctor)h([start)f ([end]])9 b Fo(\))43 b Fn(!)e Fq(ve)l(ctor)p Black 307 2748 a Fn(\017)p Black 41 w Fo(\(vector-insert-so)o(rt)o(!)35 b Fc(<)42 b Fq(ve)l(ctor)f([start)h([end]])9 b Fo(\))291 2896 y Fr(These)27 b(pro)r(cedures)f(stably)h(sort)g(their)h(data)f (using)g(insertion)g(sort.)p Black 415 3045 a Fn(\017)p Black 41 w Fo(Vector-insert-sor)o(t)21 b Fr(returns)27 b(a)g(v)n(ector)g(of)g(length)h Fq(end)f Fn(\000)18 b Fq(start)8 b Fr(.)p Black 415 3202 a Fn(\017)p Black 41 w Fo(Vector-insert-sor)o(t!)30 b Fr(is)e(in-place,)f(lea)n(ving)f (its)i(result)f(in)h Fq(ve)l(ctor)9 b Fr([)p Fq(start)f Fc(;)14 b Fq(end)9 b Fr(\).)291 3414 y Fo(delete-neighbor)o(-du)o(pl)o (ic)o(ate)o(s)p Fm(|li)o(st)42 b(and)49 b(v)m(ector)g(delete)e(neigh)m (b)s(or)h(dupli-)291 3514 y(cates)p Black 307 3662 a Fn(\017)p Black 41 w Fo(\(list-delete-neig)o(hb)o(or-)o(du)o(ps)35 b Fr(=)41 b Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 307 3762 a Fn(\017)p Black 41 w Fo(\(list-delete-neig)o(hb)o(or-)o(du)o (ps)o(!)i Fr(=)d Fq(list)8 b Fo(\))41 b Fn(!)h Fq(list)p Black 307 3861 a Fn(\017)p Black 41 w Fo(\(vector-delete-ne)o(ig)o(hbo) o(r-)o(du)o(ps)35 b Fr(=)41 b Fq(ve)l(ctor)h([start)g([end]])9 b Fo(\))42 b Fn(!)g Fq(ve)l(ctor)p Black 307 3961 a Fn(\017)p Black 41 w Fo(\(vector-delete-ne)o(ig)o(hbo)o(r-)o(du)o(ps!)h Fr(=)e Fq(ve)l(ctor)h([start)g([end]])9 b Fo(\))42 b Fn(!)g Fq(end)2850 3931 y Fd(0)291 4110 y Fr(These)37 b(pro)r(cedures)g(delete)h(adjacen)n(t)g(duplicate)g(elemen)n(ts)g (from)g(a)f(list)h(or)g(a)f(v)n(ector,)291 4209 y(using)23 b(a)g(giv)n(en)f(elemen)n(t-equalit)n(y)g(pro)r(cedure)h(=.)35 b(The)23 b(\014rst/leftmost)g(elemen)n(t)h(of)f(a)g(run)291 4309 y(of)31 b(equal)h(elemen)n(ts)g(is)g(the)g(one)f(that)i(surviv)n (es.)48 b(The)32 b(list)g(or)f(v)n(ector)g(is)h(not)g(otherwise)291 4408 y(disordered.)415 4508 y(These)18 b(pro)r(cedures)f(are)h(linear)f (time|m)n(uc)n(h)i(faster)f(than)g(the)h Fc(O)r Fr(\()p Fc(n)2548 4478 y Fk(2)2586 4508 y Fr(\))g(general)e(duplicate-)291 4608 y(elemen)n(t)31 b(deletors)g(that)h(do)g(not)g(assume)f(an)n(y)g (\\bunc)n(hing")f(of)i(elemen)n(ts)g(\(suc)n(h)f(as)h(the)291 4707 y(ones)22 b(pro)n(vided)h(b)n(y)g(SRFI)h(1\).)35 b(If)24 b(y)n(ou)f(w)n(an)n(t)g(to)g(delete)h(duplicate)g(elemen)n(ts)f (from)g(a)g(large)291 4807 y(list)j(or)f(v)n(ector,)g(y)n(ou)g(can)h (sort)f(the)h(elemen)n(ts)g(to)g(bring)f(equal)h(items)g(together,)g (then)g(use)291 4907 y(one)h(of)g(these)h(pro)r(cedures,)e(for)h(a)h (total)f(time)h(of)g Fc(O)r Fr(\()p Fc(n)14 b Fr(log\()p Fc(n)p Fr(\)\).)415 5006 y(The)28 b(comparison)e(pro)r(cedure)g(=)h (passed)g(to)h(these)f(pro)r(cedures)g(is)g(alw)n(a)n(ys)f(applied)p Black 1681 5255 a(73)p Black eop end %%Page: 74 82 TeXDict begin 74 81 bop 0 TeXcolorgray Black Black Black Black Black 739 523 a Fo(\()p Fr(=)43 b Fc(x)h(y)s Fo(\))863 712 y Fr(where)28 b Fc(x)g Fr(comes)f(b)r(efore)g Fc(y)j Fr(in)e(the)g(con)n(taining)f(list)g(or)g(v)n(ector.)p Black 863 882 a Fn(\017)p Black 41 w Fo(List-delete-neigh)o(bor)o(-d)o (ups)17 b Fr(do)r(es)24 b(not)g(alter)f(its)h(input)h(list;)g(its)f (answ)n(er)f(ma)n(y)946 982 y(share)k(storage)f(with)i(the)g(input)g (list.)p Black 863 1154 a Fn(\017)p Black 41 w Fo(Vector-delete-nei)o (ghb)o(or)o(-du)o(ps)13 b Fr(do)r(es)20 b(not)g(alter)f(its)h(input)h (v)n(ector,)f(but)g(rather)946 1254 y(allo)r(cates)27 b(a)g(fresh)g(v)n(ector)g(to)g(hold)h(the)g(result.)p Black 863 1426 a Fn(\017)p Black 41 w Fo(List-delete-neigh)o(bor)o(-d)o (ups)o(!)i Fr(is)c(p)r(ermitted,)g(but)h(not)e(required,)h(to)f(m)n (utate)946 1526 y(its)j(input)h(list)e(in)h(order)f(to)g(construct)g (its)h(answ)n(er.)p Black 863 1698 a Fn(\017)p Black 41 w Fo(Vector-delete-nei)o(ghb)o(or)o(-du)o(ps)o(!)38 b Fr(reuses)29 b(its)h(input)g(v)n(ector)f(to)h(hold)g(the)g(an-)946 1798 y(sw)n(er,)i(pac)n(king)f(its)h(answ)n(er)e(in)n(to)h(the)h(index) g(range)f([)p Fq(start)7 b Fc(;)14 b Fq(end)3009 1767 y Fd(0)3033 1798 y Fr(\),)33 b(where)e Fq(end)3492 1767 y Fd(0)3547 1798 y Fr(is)946 1897 y(the)c(non-negativ)n(e)e(exact)g(in) n(teger)h(returned)f(as)h(its)g(v)-5 b(alue.)37 b(It)26 b(returns)g Fq(end)3365 1867 y Fd(0)3415 1897 y Fr(as)f(its)946 1997 y(result.)37 b(The)28 b(v)n(ector)e(is)h(not)h(altered)f(outside)g (the)h(range)f([)p Fq(start)7 b Fc(;)14 b Fq(end)3155 1967 y Fd(0)3179 1997 y Fr(\).)739 2167 y(Examples:)p Black Black 739 2358 a Fo(\(list-delete-nei)o(gh)o(bor)o(-d)o(ups)37 b(=)43 b('\(1)f(1)h(2)h(7)f(7)g(7)g(0)g(-2)g(-2\)\))826 2457 y Fr(=)-14 b Fn(\))43 b Fo(\(1)g(2)g(7)h(0)f(-2\))739 2657 y(\(vector-delete-n)o(ei)o(ghb)o(or)o(-du)o(ps)37 b(=)43 b('#\(1)f(1)h(2)g(7)h(7)f(7)g(0)g(-2)g(-2\)\))826 2756 y Fr(=)-14 b Fn(\))43 b Fo(#\(1)g(2)g(7)g(0)g(-2\))739 2956 y(\(vector-delete-n)o(ei)o(ghb)o(or)o(-du)o(ps)37 b(=)43 b('#\(1)f(1)h(2)g(7)h(7)f(7)g(0)g(-2)g(-2\))f(3)h(7\))826 3055 y Fr(=)-14 b Fn(\))43 b Fo(#\(7)g(0)g(-2\))739 3254 y(;;)g(Result)e(left)h(in)g(v[3,9\):)739 3354 y(\(let)g(\(\(v)g (\(vector)f(0)i(0)g(0)g(1)h(1)f(2)g(2)g(3)g(3)g(4)h(4)f(5)g(5)g(6)g (6\)\)\))826 3454 y(\(cons)f(\(vector-delete-)o(nei)o(gh)o(bo)o(r-d)o (up)o(s!)37 b(=)43 b(v)h(3\))1088 3553 y(v\)\))870 3653 y Fr(=)-15 b Fn(\))44 b Fo(\(9)f(.)g(#\(0)f(0)h(0)h(1)f(2)g(3)g(4)g(5)g (6)h(4)f(4)g(5)g(5)g(6)h(6\)\))739 3877 y(binary-searches)p Fm(|v)m(ector)27 b(binary)33 b(searc)m(h)p Black 755 4047 a Fn(\017)p Black 42 w Fo(\(vector-binary-)o(se)o(arc)o(h)i Fc(<)41 b Fq(elt-)p Fc(>)p Fq(key)h(key)g(ve)l(ctor)g([start)f([end]])9 b Fo(\))43 b Fn(!)f Fq(inte)l(ger)f(or)h Fo(#f)p Black 755 4147 a Fn(\017)p Black 42 w Fo(\(vector-binary-)o(se)o(arc)o(h3)35 b Fq(c)l(omp)l(ar)l(e-pr)l(o)l(c)43 b(ve)l(ctor)e([start)h([end]])9 b Fo(\))42 b Fn(!)g Fq(inte)l(ger)g(or)g Fo(#f)863 4318 y(vector-binary-sea)o(rch)20 b Fr(searc)n(hes)k Fq(ve)l(ctor)36 b Fr(in)27 b(range)e([)p Fq(start)7 b Fc(;)14 b Fq(end)9 b Fr(\))27 b(\(whic)n(h)g(default)739 4417 y(to)37 b(0)g(and)g(the)h (length)f(of)h Fq(ve)l(ctor)9 b Fr(,)40 b(resp)r(ectiv)n(ely\))d(for)f (an)h(elemen)n(t)h(whose)f(asso)r(ciated)739 4517 y(k)n(ey)31 b(is)g(equal)g(to)g Fq(key)9 b Fr(.)48 b(The)32 b(pro)r(cedure)e Fq(elt-)p Fc(>)p Fq(key)39 b Fr(is)32 b(used)f(to)g(map)h(an)f(elemen)n (t)h(to)f(its)739 4617 y(asso)r(ciated)25 b(k)n(ey)-7 b(.)36 b(The)27 b(elemen)n(ts)f(of)h(the)g(v)n(ector)e(are)h(assumed)g (to)h(b)r(e)g(ordered)e(b)n(y)i(the)g Fc(<)739 4716 y Fr(relation)g(on)g(these)g(k)n(eys.)36 b(That)28 b(is,)p Black Black 739 4907 a Fo(\(vector-sorted?)37 b(\(lambda)k(\(x)i(y\))f (\()p Fc(<)h Fo(\()p Fq(elt-)p Fc(>)p Fq(key)51 b Fo(x\))42 b(\()p Fq(elt-)p Fc(>)p Fq(key)51 b Fo(y\)\)\))1436 5006 y Fq(ve)l(ctor)i(start)e(end)9 b Fo(\))43 b Fr(=)-14 b Fn(\))44 b Fo(true)p Black 2130 5255 a Fr(74)p Black eop end %%Page: 75 83 TeXDict begin 75 82 bop 0 TeXcolorgray Black Black Black 415 523 a Fr(An)25 b(elemen)n(t)g Fq(e)31 b Fr(of)24 b Fq(ve)l(ctor)34 b Fr(is)24 b(a)g(matc)n(h)h(for)f Fq(key)32 b Fr(if)25 b(it's)g(neither)f(less)g(nor)g(greater)f(than)291 623 y(the)28 b(k)n(ey:)p Black Black 291 837 a Fo(\(and)42 b(\(not)f(\()p Fc(<)i Fo(\()p Fq(elt-)p Fc(>)p Fq(key)51 b(e)6 b Fo(\))43 b Fq(key)8 b Fo(\)\))509 937 y(\(not)41 b(\()p Fc(<)i Fq(key)52 b Fo(\()p Fq(elt-)p Fc(>)p Fq(key)e(e)7 b Fo(\)\)\)\))415 1145 y Fr(If)29 b(there)f(is)g(suc)n(h)g(an)g(elemen) n(t,)h(the)g(pro)r(cedure)e(returns)g(its)i(index)f(in)h(the)g(v)n (ector)e(as)291 1245 y(an)20 b(exact)g(in)n(teger.)34 b(If)21 b(there)g(is)f(no)h(suc)n(h)f(elemen)n(t)h(in)g(the)g(searc)n (hed)e(range,)i(the)g(pro)r(cedure)291 1344 y(returns)26 b(false.)p Black Black 291 1559 a Fo(\(vector-binary-)o(sea)o(rc)o(h)37 b(<)44 b(car)e(4)h('#\(\(1)f(.)h(one\))f(\(3)h(.)g(three\))1729 1658 y(\(4)g(.)g(four\))e(\(25)i(.)g(twenty-five\)\)\))291 1758 y Fr(=)-15 b Fn(\))44 b Fo(2)291 1957 y(\(vector-binary-)o(sea)o (rc)o(h)37 b(<)44 b(car)e(7)h('#\(\(1)f(.)h(one\))f(\(3)h(.)g(three\)) 1729 2057 y(\(4)g(.)g(four\))e(\(25)i(.)g(twenty-five\)\)\))291 2156 y Fr(=)-15 b Fn(\))44 b Fo(#f)415 2365 y(Vector-binary-se)o(arc)o (h3)18 b Fr(is)24 b(a)g(v)-5 b(arian)n(t)23 b(that)h(uses)g(a)g (three-w)n(a)n(y)f(comparison)f(pro-)291 2464 y(cedure)28 b Fq(c)l(omp)l(ar)l(e-pr)l(o)l(c)6 b Fr(.)43 b Fq(Comp)l(ar)l(e-pr)l(o) l(c)35 b Fr(compares)28 b(its)i(parameter)e(to)h(the)h(searc)n(h)d(k)n (ey)-7 b(,)291 2564 y(and)28 b(returns)f(an)h(exact)g(in)n(teger)f (whose)g(sign)h(indicates)g(its)h(relationship)e(to)h(the)g(searc)n(h) 291 2663 y(k)n(ey)-7 b(.)827 2777 y(\()p Fq(c)l(omp)l(ar)l(e-pr)l(o)l (c)33 b Fc(x)p Fr(\))84 b Fc(<)f Fr(0)f Fn(\))h Fc(x)h(<)e Fq(se)l(ar)l(ch-key)827 2876 y Fr(\()p Fq(c)l(omp)l(ar)l(e-pr)l(o)l(c) 33 b Fc(x)p Fr(\))84 b(=)f(0)f Fn(\))h Fc(x)h Fr(=)e Fq(se)l(ar)l(ch-key)827 2976 y Fr(\()p Fq(c)l(omp)l(ar)l(e-pr)l(o)l(c) 33 b Fc(x)p Fr(\))84 b Fc(>)f Fr(0)f Fn(\))h Fc(x)h(>)e Fq(se)l(ar)l(ch-key)p Black Black 291 3187 a Fo(\(vector-binary-)o(sea) o(rc)o(h3)37 b(\(lambda)k(\(elt\))g(\(-)i(\(car)f(elt\))g(4\)\))1293 3286 y('#\(\(1)g(.)h(one\))f(\(3)g(.)i(three\))1424 3386 y(\(4)f(.)g(four\))e(\(25)i(.)g(twenty-five\)\)\))291 3486 y Fr(=)-15 b Fn(\))44 b Fo(2)291 3752 y Fe(5.20.3)112 b(Algorithmic)37 b(prop)s(erties)291 3917 y Fr(Di\013eren)n(t)26 b(sort)f(and)h(merge)g(algorithms)e(ha)n(v)n(e)h(di\013eren)n(t)h(prop) r(erties.)36 b(Cho)r(ose)25 b(the)i(algo-)291 4017 y(rithm)g(that)h (matc)n(hes)f(y)n(our)g(needs:)p Black 291 4225 a Fm(V)-8 b(ector)32 b(insert)f(sort)p Black 42 w Fr(Stable,)c(but)i(only)e (suitable)g(for)g(small)h(v)n(ectors|)p Fc(O)r Fr(\()p Fc(n)2821 4195 y Fk(2)2857 4225 y Fr(\).)p Black 291 4416 a Fm(V)-8 b(ector)32 b(quic)m(k)h(sort)p Black 41 w Fr(Not)d(stable.)41 b(Is)30 b(fast)f(on)g(a)n(v)n(erage|)p Fc(O)r Fr(\()p Fc(n)14 b Fr(log)n(\()p Fc(n)p Fr(\)\)|but)30 b(has)f(bad)498 4516 y(w)n(orst-case)i(b)r(eha)n(viour.)52 b(Has)33 b(go)r(o)r(d)g(memory)f(lo)r(calit)n(y)g(for)h(big)g(v)n (ectors)f(\(unlik)n(e)498 4615 y(heap)g(sort\).)49 b(A)33 b(clev)n(er)d(piv)n(ot-pic)n(king)h(tric)n(k)g(\(median)i(of)e(three)h (samples\))g(helps)498 4715 y(a)n(v)n(oid)26 b(w)n(orst-case)f(b)r(eha) n(viour,)i(but)h(pathological)e(cases)g(can)i(still)f(blo)n(w)g(up.)p Black 291 4907 a Fm(V)-8 b(ector)32 b(heap)g(sort)p Black 41 w Fr(Not)22 b(stable.)35 b(Guaran)n(teed)20 b(fast|)p Fc(O)r Fr(\()p Fc(n)14 b Fr(log)q(\()p Fc(n)p Fr(\)\))22 b Fq(worst)30 b Fr(case.)k(P)n(o)r(or)498 5006 y(lo)r(calit)n(y)27 b(on)g(large)f(v)n(ectors.)36 b(A)28 b(v)n(ery)e(reliable)h(w)n (orkhorse.)p Black 1681 5255 a(75)p Black eop end %%Page: 76 84 TeXDict begin 76 83 bop 0 TeXcolorgray Black Black Black Black 739 523 a Fm(V)-8 b(ector)32 b(merge)f(sort)p Black 42 w Fr(Stable.)j(Not)18 b(in-place|requires)f(a)h(temp)r(orary)f (bu\013er)i(of)g(equal)946 623 y(size.)37 b(F)-7 b(ast|)p Fc(O)r Fr(\()p Fc(n)14 b Fr(log)q(\()p Fc(n)p Fr(\)\)|and)27 b(has)g(go)r(o)r(d)g(memory)f(lo)r(calit)n(y)h(for)g(large)f(v)n (ectors.)946 754 y(The)d(implemen)n(tation)g(of)f(v)n(ector)f(merge)h (sort)g(pro)n(vided)f(b)n(y)h(this)h(implemen)n(tation)946 853 y(is,)33 b(additionally)-7 b(,)32 b(a)f(\\natural")f(sort,)i (meaning)f(that)h(it)g(exploits)f(existing)h(order)946 953 y(in)c(the)g(input)h(data,)e(pro)n(viding)f Fc(O)r Fr(\()p Fc(n)p Fr(\))j(b)r(est)f(case.)p Black 739 1116 a Fm(Destructiv)m(e)k(list)f(merge)g(sort)p Black 41 w Fr(Stable,)e(fast)g(and)g(in-place)f(\(i.e.,)h(allo)r(cates)f(no)g (new)946 1215 y(cons)23 b(cells\).)36 b(\\F)-7 b(ast")22 b(means)i Fc(O)r Fr(\()p Fc(n)14 b Fr(log\()p Fc(n)p Fr(\)\))25 b(w)n(orst-case,)d(and)h(substan)n(tially)g(b)r(etter)946 1315 y(if)29 b(the)g(data)f(is)g(already)f(mostly)h(ordered,)g(all)g (the)h(w)n(a)n(y)e(do)n(wn)h(to)g(linear)g(time)h(for)946 1415 y(a)f(completely-ordered)d(input)k(list)f(\(i.e.,)g(it)g(is)f(a)g (\\natural")f(sort\).)946 1546 y(Note)33 b(that)f(sorting)f(lists)h(in) n(v)n(olv)n(es)f(c)n(hasing)g(p)r(oin)n(ters)g(through)h(memory)-7 b(,)32 b(whic)n(h)946 1646 y(can)23 b(b)r(e)g(a)f(loser)f(on)h(mo)r (dern)h(mac)n(hine)f(arc)n(hitectures)f(b)r(ecause)h(of)h(p)r(o)r(or)f (cac)n(he)f(and)946 1745 y(page)27 b(lo)r(calit)n(y)-7 b(.)36 b(Sorting)27 b(v)n(ectors)f(has)h(inheren)n(tly)h(b)r(etter)g (lo)r(calit)n(y)-7 b(.)946 1876 y(This)26 b(implemen)n(tation's)g (destructiv)n(e)g(list)g(merge)f(and)h(merge)f(sort)g(implemen)n(ta-) 946 1976 y(tions)e(are)f(opp)r(ortunistic|they)h(a)n(v)n(oid)f (redundan)n(t)h Fo(set-cdr!)p Fr(s,)d(and)j(try)g(to)g(tak)n(e)946 2076 y(long)k(already-ordered)e(runs)i(of)g(list)h(structure)f(as-is)g (when)h(doing)f(the)h(merges.)p Black 739 2238 a Fm(Pure)k(list)f (merge)g(sort)p Black 41 w Fr(Stable)j(and)g(fast|)p Fc(O)r Fr(\()p Fc(n)14 b Fr(log\()p Fc(n)p Fr(\)\))35 b(w)n(orst-case,)e(and)h(p)r(ossibly)946 2338 y Fc(O)r Fr(\()p Fc(n)p Fr(\),)29 b(dep)r(ending)f(up)r(on)g(the)g(input)g(list) g(\(see)g(discussion)f(ab)r(o)n(v)n(e\).)p Black Black 1013 2512 a(Algorithm)208 b(Stable?)99 b(W)-7 b(orst)28 b(case)121 b(Av)n(erage)25 b(case)99 b(In-place)p 963 2545 2417 4 v 1013 2614 a(V)-7 b(ector)27 b(insert)113 b(Y)-7 b(es)239 b Fc(O)r Fr(\()p Fc(n)2104 2584 y Fk(2)2142 2614 y Fr(\))299 b Fc(O)r Fr(\()p Fc(n)2620 2584 y Fk(2)2658 2614 y Fr(\))351 b(Y)-7 b(es)1013 2714 y(V)g(ector)27 b(quic)n(k)125 b(No)260 b Fc(O)r Fr(\()p Fc(n)2104 2684 y Fk(2)2142 2714 y Fr(\))299 b Fc(O)r Fr(\()p Fc(n)14 b Fr(log\()p Fc(n)p Fr(\)\))154 b(Y)-7 b(es)1013 2814 y(V)g(ector)27 b(heap)146 b(No)260 b Fc(O)r Fr(\()p Fc(n)14 b Fr(log)q(\()p Fc(n)p Fr(\)\))101 b Fc(O)r Fr(\()p Fc(n)14 b Fr(log\()p Fc(n)p Fr(\)\))154 b(Y)-7 b(es)1013 2913 y(V)g(ector)27 b(merge)99 b(Y)-7 b(es)239 b Fc(O)r Fr(\()p Fc(n)14 b Fr(log)q(\()p Fc(n)p Fr(\)\))101 b Fc(O)r Fr(\()p Fc(n)14 b Fr(log\()p Fc(n)p Fr(\)\))154 b(No)1013 3013 y(List)27 b(merge)195 b(Y)-7 b(es)239 b Fc(O)r Fr(\()p Fc(n)14 b Fr(log)q(\()p Fc(n)p Fr(\)\))101 b Fc(O)r Fr(\()p Fc(n)14 b Fr(log\()p Fc(n)p Fr(\)\))154 b(Either)739 3258 y Fj(5.21)135 b(Regular)47 b(expressions)739 3440 y Fr(This)22 b(section)h(describ)r(es)e(a)i(functional)f(in)n(terface)g (for)g(building)h(regular)e(expressions)f(and)739 3539 y(matc)n(hing)26 b(them)h(against)e(strings.)35 b(The)27 b(matc)n(hing)e(is)i(done)f(using)g(the)g(POSIX)g(regular)739 3639 y(expression)g(pac)n(k)-5 b(age.)35 b(Regular)27 b(expressions)f(are)g(in)i(the)g(structure)f Fo(regexps)p Fr(.)863 3739 y(A)j(regular)d(expression)g(is)i(either)g(a)f(c)n (haracter)f(set,)i(whic)n(h)g(matc)n(hes)f(an)n(y)g(c)n(haracter)739 3838 y(in)36 b(the)g(set,)h(or)e(a)g(comp)r(osite)g(expression)f(con)n (taining)h(one)g(or)g(more)g(sub)r(expressions.)739 3938 y(A)d(regular)f(expression)g(can)g(b)r(e)i(matc)n(hed)f(against)f(a)h (string)f(to)h(determine)h(success)e(or)739 4037 y(failure,)c(and)h(to) f(determine)h(the)g(substrings)e(matc)n(hed)i(b)n(y)f(particular)f(sub) r(expressions.)p Black 755 4180 a Fn(\017)p Black 42 w Fo(\(regexp?)46 b Fq(value)6 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an) 739 4323 y Fr(Returns)23 b Fo(#t)g Fr(if)30 b Fq(value)g Fr(is)23 b(a)g(regular)f(expression)f(created)i(using)g(the)g (functional)h(in)n(terface)739 4423 y(for)j(regular)f(expressions,)g (and)h Fo(#f)g Fr(otherwise.)739 4654 y Fe(5.21.1)112 b(Character)38 b(sets)739 4807 y Fr(Character)c(sets)h(ma)n(y)h(b)r(e)g (de\014ned)g(using)f(a)h(list)g(of)f(c)n(haracters)f(and)h(strings,)i (using)f(a)739 4907 y(range)29 b(or)h(ranges)f(of)i(c)n(haracters,)e (or)h(b)n(y)h(using)f(set)h(op)r(erations)e(on)i(existing)f(c)n (haracter)739 5006 y(sets.)p Black 2130 5255 a(76)p Black eop end %%Page: 77 85 TeXDict begin 77 84 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(\(set)40 b Fq(char)l (acter-or-string)j(.)13 b(.)g(.)g Fo(\))50 b Fn(!)42 b Fq(char-set)p Black 307 623 a Fn(\017)p Black 41 w Fo(\(range)d Fq(low-char)k(high-char)9 b Fo(\))44 b Fn(!)d Fq(char-set)p Black 307 722 a Fn(\017)p Black 41 w Fo(\(ranges)e Fq(low-char)k(high-char)h(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(char-set)p Black 307 822 a Fn(\017)p Black 41 w Fo(\(ascii-range)c Fq(low-char)43 b(high-char)9 b Fo(\))43 b Fn(!)f Fq(char-set)p Black 307 922 a Fn(\017)p Black 41 w Fo(\(ascii-ranges)36 b Fq(low-char)43 b(high-char)h(.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(char-set)291 1071 y Fo(Set)29 b Fr(returns)h(a)g(set)h(that)g(con)n(tains)e(the)i(c)n (haracter)e(argumen)n(ts)g(and)h(the)h(c)n(haracters)e(in)291 1171 y(an)n(y)c(string)h(argumen)n(ts.)35 b Fo(Range)24 b Fr(returns)h(a)h(c)n(haracter)e(set)i(that)h(con)n(tain)e(all)h(c)n (haracters)291 1270 y(b)r(et)n(w)n(een)j Fq(low-char)40 b Fr(and)29 b Fq(high-char)9 b Fr(,)32 b(inclusiv)n(e.)42 b Fo(Ranges)26 b Fr(returns)j(a)g(set)g(that)h(con)n(tains)291 1370 y(all)e(c)n(haracters)e(in)j(the)g(giv)n(en)f(ranges.)38 b Fo(Range)27 b Fr(and)h Fo(ranges)e Fr(use)j(the)g(ordering)d(induced) 291 1469 y(b)n(y)31 b Fo(char->integer)p Fr(.)42 b Fo(Ascii-range)27 b Fr(and)k Fo(ascii-ranges)26 b Fr(use)k(the)i(ASCI)r(I)g(ordering.)291 1569 y(It)39 b(is)f(an)h(error)e(for)h(a)g Fq(high-char)51 b Fr(to)38 b(b)r(e)h(less)g(than)g(the)g(preceding)g Fq(low-char)49 b Fr(in)40 b(the)291 1669 y(appropriate)25 b(ordering.)p Black 307 1818 a Fn(\017)p Black 41 w Fo(\(negate)39 b Fq(char-set)8 b Fo(\))41 b Fn(!)h Fq(char-set)p Black 307 1918 a Fn(\017)p Black 41 w Fo(\(intersection)36 b Fq(char-set)42 b(char-set)8 b Fo(\))42 b Fn(!)f Fq(char-set)p Black 307 2017 a Fn(\017)p Black 41 w Fo(\(union)e Fq(char-set)j (char-set)8 b Fo(\))42 b Fn(!)f Fq(char-set)p Black 307 2117 a Fn(\017)p Black 41 w Fo(\(subtract)d Fq(char-set)k(char-set)8 b Fo(\))41 b Fn(!)h Fq(char-set)291 2267 y Fr(These)27 b(p)r(erform)g(the)h(indicated)g(op)r(erations)e(on)h(c)n(haracter)f (sets.)415 2366 y(The)i(follo)n(wing)e(c)n(haracter)g(sets)h(are)g (prede\014ned:)496 2618 y Fo(lower-case)183 b(\(set)42 b("abcdefghijklmn)o(opq)o(rs)o(tuv)o(wx)o(yz)o("\))496 2718 y(upper-case)183 b(\(set)42 b("ABCDEFGHIJKLMN)o(OPQ)o(RS)o(TUV)o (WX)o(YZ)o("\))496 2817 y(alphabetic)183 b(\(union)41 b(lower-case)e(upper-case\))496 2917 y(numeric)315 b(\(set)42 b("0123456789"\))496 3017 y(alphanumeric)95 b(\(union)41 b(alphabetic)e(numeric\))496 3116 y(punctuation)139 b(\(set)42 b("!\\"#$\045&'\(\)*+,-)o(./:)o(;<)o(=>?)o(@[)o(\\\\)o(]^_)o(`{)o(|}~)o ("\))496 3216 y(graphic)315 b(\(union)41 b(alphanumeric)d (punctuation\))496 3315 y(printing)271 b(\(union)41 b(graphic)g(\(set)g (#\\space\)\))496 3415 y(control)315 b(\(negate)40 b(printing\))496 3515 y(blank)403 b(\(set)42 b(#\\space)e(\(ascii->char)f(9\)\))26 b Fr(;)i(9)f(is)h(tab)496 3614 y Fo(whitespace)183 b(\(union)41 b(\(set)h(#\\space\))e(\(ascii-range)f(9)k(13\)\))496 3714 y(hexdigit)271 b(\(set)42 b("0123456789abcd)o(efA)o(BC)o(DEF)o ("\))p Black Black 291 4266 a Fr(The)i(ab)r(o)n(v)n(e)f(are)g(tak)n(en) h(from)g(the)h(default)f(lo)r(cale)g(in)g(POSIX.)g(The)h(c)n(haracters) d(in)291 4365 y Fo(whitespace)27 b Fr(are)j Fq(sp)l(ac)l(e)6 b Fr(,)33 b Fq(tab)5 b Fr(,)33 b Fq(new)t(line)38 b Fr(\(=)31 b Fq(line)i(fe)l(e)l(d)9 b Fr(\),)33 b Fq(vertic)l(al)h(tab)5 b Fr(,)33 b Fq(form)h(fe)l(e)l(d)9 b Fr(,)32 b(and)291 4465 y Fq(c)l(arriage)f(r)l(eturn)6 b Fr(.)291 4746 y Fe(5.21.2)112 b(Anc)m(horing)p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(string-start\))36 b Fn(!)41 b Fq(r)l(e)l(g-exp)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(string-end\))c Fn(!)k Fq(r)l(e)l(g-exp)p Black 1681 5255 a Fr(77)p Black eop end %%Page: 78 86 TeXDict begin 78 85 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(String-start)27 b Fr(returns)k(a)g(regular)f(expression)g (that)i(matc)n(hes)f(the)i(b)r(eginning)e(of)h(the)739 623 y(string)27 b(b)r(eing)h(matc)n(hed)f(against;)f(string-end)h (returns)g(one)g(that)h(matc)n(hes)f(the)h(end.)739 854 y Fe(5.21.3)112 b(Comp)s(osite)39 b(expressions)p Black 755 1007 a Fn(\017)p Black 42 w Fo(\(sequence)e Fq(r)l(e)l(g-exp)42 b(.)13 b(.)g(.)g Fo(\))50 b Fn(!)42 b Fq(r)l(e)l(g-exp)p Black 755 1107 a Fn(\017)p Black 42 w Fo(\(one-of)c Fq(r)l(e)l(g-exp)j (.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(r)l(e)l(g-exp)739 1252 y Fo(Sequence)21 b Fr(matc)n(hes)i(the)h(concatenation)f(of)h(its) g(argumen)n(ts,)g Fo(one-of)d Fr(matc)n(hes)i(an)n(y)h(one)739 1352 y(of)j(its)h(argumen)n(ts.)p Black 755 1497 a Fn(\017)p Black 42 w Fo(\(text)39 b Fq(string)7 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(g-exp)739 1642 y Fo(Text)19 b Fr(returns)g(a)h(regular)f (expression)f(that)j(matc)n(hes)f(the)g(c)n(haracters)e(in)j Fq(string)7 b Fr(,)22 b(in)f(order.)p Black 755 1787 a Fn(\017)p Black 42 w Fo(\(repeat)38 b Fq(r)l(e)l(g-exp)5 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(g-exp)p Black 755 1887 a Fn(\017)p Black 42 w Fo(\(repeat)c Fq(c)l(ount)j(r)l(e)l(g-exp)5 b Fo(\))41 b Fn(!)g Fq(r)l(e)l(g-exp)p Black 755 1987 a Fn(\017)p Black 42 w Fo(\(repeat)d Fq(min)k(max)f(r)l(e)l(g-exp)5 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(g-exp)739 2132 y Fo(Repeat)c Fr(returns)j(a)f(regular)f(expression)h(that)h(matc)n(hes)f(zero)g(or)g (more)g(o)r(ccurrences)739 2231 y(of)34 b(its)g Fq(r)l(e)l(g-exp)40 b Fr(argumen)n(t.)55 b(With)35 b(no)f(coun)n(t)g(the)h(result)f(will)g (matc)n(h)g(an)n(y)f(n)n(um)n(b)r(er)h(of)739 2331 y(times)e(\()p Fq(r)l(e)l(g-exp)5 b Fr(*\).)50 b(With)33 b(a)e(single)g(coun)n(t)h (the)g(returned)f(expression)g(will)h(matc)n(h)g Fq(r)l(e)l(g-)739 2431 y(exp)j Fr(exactly)29 b(that)h(n)n(um)n(b)r(er)g(of)g(times.)44 b(The)30 b(\014nal)f(case)g(will)h(matc)n(h)g(from)f Fq(min)37 b Fr(to)29 b Fq(max)739 2530 y Fr(rep)r(etitions,)41 b(inclusiv)n(e.)68 b Fq(Max)48 b Fr(ma)n(y)38 b(b)r(e)h Fo(#f)p Fr(,)h(in)e(whic)n(h)g(case)f(there)h(is)h(no)e(maxim)n(um)739 2630 y(n)n(um)n(b)r(er)f(of)h(matc)n(hes.)64 b Fq(Count)44 b Fr(and)37 b Fq(min)43 b Fr(should)37 b(b)r(e)g(exact,)h(non-negativ)n (e)d(in)n(tegers;)739 2730 y Fq(max)i Fr(should)28 b(either)f(b)r(e)h (an)g(exact)f(non-negativ)n(e)f(in)n(teger)g(or)h Fo(#f)p Fr(.)739 2961 y Fe(5.21.4)112 b(Case)39 b(sensitivit)m(y)739 3114 y Fr(Regular)26 b(expressions)g(are)h(normally)f(case-sensitiv)n (e.)p Black 755 3276 a Fn(\017)p Black 42 w Fo(\(ignore-case)36 b Fq(r)l(e)l(g-exp)5 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(g-exp)p Black 755 3376 a Fn(\017)p Black 42 w Fo(\(use-case)37 b Fq(r)l(e)l(g-exp)5 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(g-exp)739 3537 y Fr(The)30 b(v)-5 b(alue)30 b(returned)f(b)n(y)i Fo(ignore-case)25 b Fr(is)30 b(iden)n(tical)f(its)h(argumen)n(t)f (except)h(that)g(case)739 3637 y(will)h(b)r(e)h(ignored)e(when)i(matc)n (hing.)47 b(The)31 b(v)-5 b(alue)31 b(returned)g(b)n(y)h Fo(use-case)c Fr(is)k(protected)739 3737 y(from)18 b(future)h (applications)e(of)25 b Fo(ignore-case)p Fr(.)k(The)19 b(expressions)d(returned)i(b)n(y)i Fo(use-case)739 3836 y Fr(and)27 b Fo(ignore-case)d Fr(are)i(una\013ected)i(b)n(y)g(later)f (uses)g(of)h(the)g(these)f(pro)r(cedures.)36 b(By)27 b(w)n(a)n(y)739 3936 y(of)g(example,)h(the)g(follo)n(wing)e(matc)n(hes) h Fo("ab")f Fr(but)i(not)g Fo("aB")p Fr(,)e Fo("Ab")p Fr(,)g(or)h Fo("AB")p Fr(.)p Black Black 739 4098 a Fo(\(text)41 b("ab"\))739 4259 y Fr(while)p Black Black 739 4421 a Fo(\(ignore-case)e(\(test)i("ab"\)\))739 4583 y Fr(matc)n(hes)27 b Fo("ab")p Fr(,)f Fo("aB")p Fr(,)g Fo("Ab")p Fr(,)g(and)i Fo("AB")e Fr(and)p Black Black 739 4745 a Fo(\(ignore-case)39 b(\(sequence)g(\(text)j("a"\))1741 4844 y(\(use-case)e(\(text)i ("b"\)\)\)\))739 5006 y Fr(matc)n(hes)27 b Fo("ab")f Fr(and)h Fo("Ab")f Fr(but)j(not)e Fo("aB")f Fr(or)h Fo("AB")p Fr(.)p Black 2130 5255 a(78)p Black eop end %%Page: 79 87 TeXDict begin 79 86 bop 0 TeXcolorgray Black Black Black 291 523 a Fe(5.21.5)112 b(Submatc)m(hes)39 b(and)f(matc)m(hing)291 676 y Fr(A)21 b(sub)r(expression)f(within)i(a)f(larger)f(expression)f (can)i(b)r(e)h(mark)n(ed)e(as)h(a)g(submatc)n(h.)34 b(When)291 776 y(an)g(expression)g(is)h(matc)n(hed)g(against)f(a)g(string,)i(the)g (success)e(or)g(failure)h(of)g(eac)n(h)f(sub-)291 876 y(matc)n(h)22 b(within)h(that)f(expression)f(is)h(rep)r(orted,)h(as)e (w)n(ell)h(as)g(the)g(lo)r(cation)g(of)g(the)h(substring)291 975 y(matc)n(hed)k(b)r(e)h(eac)n(h)f(successful)g(submatc)n(h.)p Black 307 1118 a Fn(\017)p Black 41 w Fo(\(submatch)38 b Fq(key)k(r)l(e)l(g-exp)5 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(g-exp)p Black 307 1217 a Fn(\017)p Black 41 w Fo(\(no-submatches)36 b Fq(r)l(e)l(g-exp)5 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(g-exp)291 1360 y Fo(Submatch)31 b Fr(returns)j(a)h(regular)e(expression)h(that)h (matc)n(hes)f(its)h(argumen)n(t)f(and)h(causes)291 1459 y(the)i(result)g(of)f(matc)n(hing)h(its)g(argumen)n(t)f(to)g(b)r(e)i (rep)r(orted)e(b)n(y)h(the)g Fo(match)e Fr(pro)r(cedure.)291 1559 y Fq(Key)44 b Fr(is)36 b(used)g(to)g(indicate)g(the)h(result)f(of) g(this)h(particular)e(submatc)n(h)h(in)g(the)h(alist)f(of)291 1658 y(successful)f(submatc)n(hes)h(returned)f(b)n(y)i Fo(match)p Fr(.)60 b(An)n(y)36 b(v)-5 b(alue)35 b(ma)n(y)h(b)r(e)g (used)g(as)f(a)h Fq(key)7 b Fr(.)291 1758 y Fo(No-submatches)21 b Fr(returns)26 b(an)h(expression)e(iden)n(tical)i(to)g(its)g(argumen)n (t,)f(except)h(that)g(all)291 1858 y(submatc)n(hes)g(ha)n(v)n(e)f(b)r (een)i(elided.)p Black 307 2000 a Fn(\017)p Black 41 w Fo(\(any-match?)46 b Fq(r)l(e)l(g-exp)41 b(string)7 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 2100 a Fn(\017)p Black 41 w Fo(\(exact-match?)j Fq(r)l(e)l(g-exp)c(string)7 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 2199 a Fn(\017)p Black 41 w Fo(\(match)d Fq(r)l(e)l(g-exp)i(string)7 b Fo(\))42 b Fn(!)f Fq(match)h(or)g Fo(#f)p Black 307 2299 a Fn(\017)p Black 41 w Fo(\(match-start)37 b Fq(match)6 b Fo(\))42 b Fn(!)f Fq(index)p Black 307 2399 a Fn(\017)p Black 41 w Fo(\(match-end)d Fq(match)6 b Fo(\))42 b Fn(!)f Fq(index)p Black 307 2498 a Fn(\017)p Black 41 w Fo(\(match-submatches) 35 b Fq(match)6 b Fo(\))42 b Fn(!)f Fq(alist)291 2641 y Fo(Any-match?)j Fr(returns)31 b Fo(#t)f Fr(if)39 b Fq(string)f Fr(matc)n(hes)31 b Fq(r)l(e)l(g-exp)37 b Fr(or)30 b(con)n(tains)h(a)g(substring)g(that)291 2740 y(do)r(es,)23 b(and)f Fo(#f)f Fr(otherwise.)35 b Fo(Exact-match?)30 b Fr(returns)21 b Fo(#t)h Fr(if)29 b Fq(string)h Fr(matc)n(hes)22 b Fq(r)l(e)l(g-exp)27 b Fr(and)291 2840 y Fo(#f)f Fr(otherwise.)415 2939 y Fo(Match)i Fr(returns)h Fo(#f)g Fr(if)36 b Fq(r)l(e)l(g-exp)f Fr(do)r(es)30 b(not)f(matc)n(h)h Fq(string)37 b Fr(and)29 b(a)h(matc)n(h)f(record)f(if)i(it)291 3039 y(do)r(es)i(matc)n(h.)51 b(A)32 b(matc)n(h)g(record)f(con)n(tains)h(three)g(v)-5 b(alues:)46 b(the)33 b(b)r(eginning)f(and)g(end)h(of)291 3139 y(the)25 b(substring)g(that)g(matc)n(hed)g(the)h(pattern)f(and)g (an)g(a-list)g(of)g(submatc)n(h)g(k)n(eys)f(and)h(cor-)291 3238 y(resp)r(onding)f(matc)n(h)h(records)f(for)g(an)n(y)h(submatc)n (hes)g(that)g(also)f(matc)n(hed.)36 b Fo(Match-start)291 3338 y Fr(returns)20 b(the)i(index)f(of)g(the)g(\014rst)g(c)n(haracter) e(in)j(the)f(matc)n(hing)g(substring)g(and)g Fo(match-end)291 3438 y Fr(giv)n(es)c(index)h(of)h(the)f(\014rst)g(c)n(haracter)f(after) h(the)h(matc)n(hing)e(substring.)34 b Fo(Match-submatche)o(s)291 3537 y Fr(returns)20 b(an)h(alist)g(of)h(submatc)n(h)f(k)n(eys)f(and)h (matc)n(h)g(records.)33 b(Only)21 b(the)h(top)f(matc)n(h)g(record)291 3637 y(returned)27 b(b)n(y)h Fo(match)e Fr(has)h(a)g(submatc)n(h)g (alist.)415 3737 y(Matc)n(hing)j(o)r(ccurs)f(according)g(to)h(POSIX.)g (The)g(matc)n(h)g(returned)g(is)g(the)h(one)e(with)291 3836 y(the)i(lo)n(w)n(est)f(starting)g(index)i(in)f Fq(string)7 b Fr(.)48 b(If)32 b(there)e(is)h(more)g(than)g(one)g(suc)n(h)g(matc)n (h,)h(the)291 3936 y(longest)k(is)i(returned.)67 b(Within)38 b(that)g(matc)n(h)g(the)g(longest)f(p)r(ossible)g(submatc)n(hes)g(are) 291 4035 y(returned.)415 4135 y(All)31 b(three)f(matc)n(hing)g(pro)r (cedures)f(cac)n(he)g(a)h(compiled)g(v)n(ersion)f(of)36 b Fq(r)l(e)l(g-exp)5 b Fr(.)45 b(Subse-)291 4235 y(quen)n(t)27 b(calls)g(with)h(the)g(same)f Fq(r)l(e)l(g-exp)33 b Fr(will)28 b(b)r(e)g(more)f(e\016cien)n(t.)415 4334 y(The)34 b(C)f(in)n(terface)g (to)h(the)g(POSIX)f(regular)f(expression)g(co)r(de)i(uses)f(ASCI)r(I)h Fo(nul)f Fr(as)291 4434 y(an)g(end-of-string)f(mark)n(er.)53 b(The)34 b(matc)n(hing)f(pro)r(cedures)f(will)i(ignore)e(an)n(y)h(c)n (haracters)291 4534 y(follo)n(wing)26 b(an)h(em)n(b)r(edded)h(ASCI)r(I) h Fo(nul)p Fr(s)d(in)i Fq(string)7 b Fr(.)p Black Black 291 4707 a Fo(\(define)40 b(pattern)h(\(text)g("abc"\)\))291 4807 y(\(any-match?)e(pattern)h("abc"\))390 b Fn(!)44 b Fo(#t)291 4907 y(\(any-match?)39 b(pattern)h("abx"\))390 b Fn(!)44 b Fo(#f)291 5006 y(\(any-match?)39 b(pattern)h("xxabcxx"\)) 214 b Fn(!)44 b Fo(#t)p Black 1681 5255 a Fr(79)p Black eop end %%Page: 80 88 TeXDict begin 80 87 bop 0 TeXcolorgray Black Black Black 739 623 a Fo(\(exact-match?)38 b(pattern)j("abc"\))302 b Fn(!)44 b Fo(#t)739 722 y(\(exact-match?)38 b(pattern)j("abx"\))302 b Fn(!)44 b Fo(#f)739 822 y(\(exact-match?)38 b(pattern)j("xxabcxx"\)) 126 b Fn(!)44 b Fo(#f)739 1021 y(\(match)d(pattern)g("abc"\))607 b Fn(!)44 b Fo(#)p Fn(f)p Fo(match)d(0)i(3)p Fn(g)739 1121 y Fo(\(match)e(pattern)g("abx"\))607 b Fn(!)44 b Fo(#f)739 1220 y(\(match)d(pattern)g("xxabcxx"\))431 b Fn(!)44 b Fo(#)p Fn(f)p Fo(match)d(2)i(5)p Fn(g)739 1420 y Fo(\(let)f(\(\(x)g(\(match)f(\(sequence)f(\(text)i("ab"\))1872 1519 y(\(submatch)e('foo)i(\(text)f("cd"\)\))1872 1619 y(\(text)h("ef"\)\))1436 1719 y("xxxabcdefxx"\)\)\))826 1818 y(\(list)g(x)h(\(match-submatche)o(s)37 b(x\)\)\))826 1918 y Fn(!)44 b Fo(\(#)p Fn(f)p Fo(match)c(3)j(9)p Fn(g)g Fo(\(\(foo)e(.)i(#)p Fn(f)p Fo(match)e(5)i(7)p Fn(g)p Fo(\)\))739 2117 y(\(match-submatche)o(s)826 2217 y(\(match)e (\(sequence)1218 2316 y(\(set)h("a"\))1218 2416 y(\(one-of)f (\(submatch)f('foo)i(\(text)f("bc"\)\))1567 2516 y(\(submatch)f('bar)i (\(text)f("BC"\)\)\)\))1131 2615 y("xxxaBCd"\)\))826 2715 y Fn(!)j Fo(\(\(bar)d(.)i(#)p Fn(f)p Fo(match)e(4)i(6)p Fn(g)p Fo(\)\))739 2994 y Fj(5.22)135 b(SRFIs)739 3178 y Fr(`SRFI')26 b(stands)g(for)f(`Sc)n(heme)h(Request)f(F)-7 b(or)25 b(Implemen)n(tation'.)37 b(An)26 b(SRFI)g(is)g(a)f(descrip-)739 3278 y(tion)33 b(of)f(an)g(extension)g(to)h(standard)e(Sc)n(heme.)52 b(Draft)33 b(and)f(\014nal)h(SRFI)g(do)r(cumen)n(ts,)h(a)739 3377 y(F)-9 b(A)n(Q,)18 b(and)g(other)g(information)g(ab)r(out)g(SRFIs) h(can)f(b)r(e)g(found)h(at)f Fo(http://srfi.schem)o(er)o(s.o)o(rg)o Fr(.)863 3478 y(Sc)n(heme)28 b(48)f(includes)g(implemen)n(tations)h(of) f(the)h(follo)n(wing)f(\(\014nal\))h(SRFIs:)p Black 863 3647 a Fn(\017)p Black 41 w Fr(SRFI)h(1)e({)g(List)h(Library)p Black 863 3817 a Fn(\017)p Black 41 w Fr(SRFI)h(2)e({)g Fo(and-let*)p Black 863 3987 a Fn(\017)p Black 41 w Fr(SRFI)i(4)e({)g (Homogeneous)f(n)n(umeric)h(v)n(ector)f(datat)n(yp)r(es)h(\(see)h(note) f(b)r(elo)n(w\))p Black 863 4157 a Fn(\017)p Black 41 w Fr(SRFI)i(5)e({)g Fo(let)f Fr(with)i(signatures)f(and)g(rest)g (argumen)n(ts)p Black 863 4327 a Fn(\017)p Black 41 w Fr(SRFI)i(6)e({)g(Basic)g(string)g(p)r(orts)p Black 863 4496 a Fn(\017)p Black 41 w Fr(SRFI)i(7)e({)g(Program)e (con\014guration)p Black 863 4666 a Fn(\017)p Black 41 w Fr(SRFI)k(8)e({)g Fo(receive)p Black 863 4836 a Fn(\017)p Black 41 w Fr(SRFI)i(9)e({)g(De\014ning)h(record)e(t)n(yp)r(es)p Black 863 5006 a Fn(\017)p Black 41 w Fr(SRFI)j(11)d({)h(Syn)n(tax)g (for)h(receiving)e(m)n(ultiple)i(v)-5 b(alues)p Black 2130 5255 a(80)p Black eop end %%Page: 81 89 TeXDict begin 81 88 bop 0 TeXcolorgray Black Black Black Black 415 523 a Fn(\017)p Black 41 w Fr(SRFI)28 b(13)f({)g(String)g (Library)p Black 415 702 a Fn(\017)p Black 41 w Fr(SRFI)h(14)f({)g (Character-Set)f(Library)g(\(see)i(note)f(b)r(elo)n(w\))p Black 415 882 a Fn(\017)p Black 41 w Fr(SRFI)h(16)f({)g(Syn)n(tax)g (for)g(pro)r(cedures)g(of)g(v)-5 b(ariable)27 b(arit)n(y)p Black 415 1061 a Fn(\017)p Black 41 w Fr(SRFI)h(17)f({)g(Generalized)g Fo(set!)p Black 415 1240 a Fn(\017)p Black 41 w Fr(SRFI)h(19)f({)g (Time)h(Data)f(T)n(yp)r(es)h(and)f(Pro)r(cedures)p Black 415 1420 a Fn(\017)p Black 41 w Fr(SRFI)h(22)f({)g(Running)h(Sc)n(heme) f(Scripts)h(on)f(Unix)p Black 415 1599 a Fn(\017)p Black 41 w Fr(SRFI)h(23)f({)g(Error)e(rep)r(orting)i(mec)n(hanism)p Black 415 1778 a Fn(\017)p Black 41 w Fr(SRFI)h(25)f({)g (Multi-dimensional)g(Arra)n(y)f(Primitiv)n(es)p Black 415 1958 a Fn(\017)p Black 41 w Fr(SRFI)i(26)f({)g(Notation)g(for)g(Sp) r(ecializing)h(P)n(arameters)d(without)j(Currying)p Black 415 2137 a Fn(\017)p Black 41 w Fr(SRFI)g(27)f({)g(Sources)g(of)g (Random)g(Bits)p Black 415 2316 a Fn(\017)p Black 41 w Fr(SRFI)h(28)f({)g(Basic)g(F)-7 b(ormat)27 b(Strings)p Black 415 2496 a Fn(\017)p Black 41 w Fr(SRFI)h(31)f({)g(A)h(sp)r (ecial)f(form)h Fo(rec)e Fr(for)h(recursiv)n(e)f(ev)-5 b(aluation)p Black 415 2675 a Fn(\017)p Black 41 w Fr(SRFI)28 b(34)f({)g(Exception)g(Handling)g(for)h(Programs)p Black 415 2854 a Fn(\017)p Black 41 w Fr(SRFI)g(37)f({)g(args-fold:)35 b(a)27 b(program)f(argumen)n(t)g(pro)r(cessor)p Black 415 3034 a Fn(\017)p Black 41 w Fr(SRFI)i(40)f({)g(A)h(Library)e(of)i (Streams)p Black 415 3213 a Fn(\017)p Black 41 w Fr(SRFI)g(42)f({)g (Eager)f(Comprehensions)p Black 415 3392 a Fn(\017)p Black 41 w Fr(SRFI)i(43)f({)g(V)-7 b(ector)27 b(library)p Black 415 3572 a Fn(\017)p Black 41 w Fr(SRFI)h(45)f({)g(Primitiv)n(es) g(for)g(Expressing)e(Iterativ)n(e)i(Lazy)g(Algorithms)p Black 415 3751 a Fn(\017)p Black 41 w Fr(SRFI)h(60)f({)g(In)n(tegers)f (as)h(Bits)p Black 415 3930 a Fn(\017)p Black 41 w Fr(SRFI)h(61)f({)g (A)h(more)f(general)f(cond)h(clause)p Black 415 4110 a Fn(\017)p Black 41 w Fr(SRFI)h(62)f({)g(S-expression)f(commen)n(ts)p Black 415 4289 a Fn(\017)p Black 41 w Fr(SRFI)i(63)f({)g(Homogeneous)f (and)h(Heterogeneous)f(Arra)n(ys)p Black 415 4468 a Fn(\017)p Black 41 w Fr(SRFI)i(66)f({)g(Octet)h(V)-7 b(ectors)p Black 415 4648 a Fn(\017)p Black 41 w Fr(SRFI)28 b(67)f({)g(Compare)f (Pro)r(cedures)p Black 415 4827 a Fn(\017)p Black 41 w Fr(SRFI)i(74)f({)g(Octet-Addressed)g(Binary)f(Blo)r(c)n(ks)p Black 415 5006 a Fn(\017)p Black 41 w Fr(SRFI)i(78)f({)g(Ligh)n(t)n(w)n (eigh)n(t)f(testing)p Black 1681 5255 a(81)p Black eop end %%Page: 82 90 TeXDict begin 82 89 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(Do)r(cumen)n(tation)28 b(on)f(these)g(can)h(b)r(e)g(found) g(at)f(the)h(w)n(eb)f(site)h(men)n(tioned)g(ab)r(o)n(v)n(e.)863 623 y(SRFI)22 b(4)g(sp)r(eci\014es)f(an)g(external)g(represen)n(tation) f(for)h(homogeneous)f(n)n(umeric)h(v)n(ectors)739 722 y(that)36 b(is)g(incompatible)g(with)h(R)1780 692 y Fk(5)1817 722 y Fr(RS.)g(The)f(Sc)n(heme)g(48)f(v)n(ersion)g(of)h(SRFI)h(4)e(do)r (es)h(not)739 822 y(supp)r(ort)27 b(this)h(external)f(represen)n (tation.)863 922 y(SRFI)d(14)d(includes)i(the)g(pro)r(cedure)e Fo(->char-set)e Fr(whic)n(h)j(is)h(not)g(a)f(standard)f(Sc)n(heme)739 1021 y(iden)n(ti\014er)i(\(in)g(R)1268 991 y Fk(5)1306 1021 y Fr(RS)g(the)g(only)g(required)f(iden)n(ti\014er)h(starting)f (with)h Fo(-)g Fr(is)g Fo(-)f Fr(itself)6 b(\).)37 b(In)23 b(the)739 1121 y(Sc)n(heme)k(48)g(v)n(ersion)f(of)i(SRFI)g(14)e(w)n(e)i (ha)n(v)n(e)e(renamed)h Fo(->char-set)d Fr(as)j Fo(x->char-set)p Fr(.)863 1220 y(SRFI)j(bindings)f(can)f(b)r(e)i(accessed)d(either)i(b)n (y)g(op)r(ening)f(the)i(appropriate)d(structure)739 1320 y(\(the)20 b(structure)f Fo(srfi-)p Fq(n)k Fr(con)n(tains)18 b(SRFI)i Fq(n)6 b Fr(\))20 b(or)e(b)n(y)i(loading)e(structure)h Fo(srfi-7)e Fr(and)i(then)739 1420 y(using)29 b(the)h Fo(,load-srfi-7-prog)o(ram)23 b Fr(command)29 b(to)h(load)f(an)g(SRFI)i (7-st)n(yle)d(program.)739 1519 y(The)g(syn)n(tax)e(for)h(the)h (command)f(is)p Black Black 739 1685 a Fo(,load-srfi-7-pro)o(gr)o(am)37 b Fq(name)50 b(\014lename)739 1851 y Fr(This)19 b(creates)e(a)h(new)h (structure)f(and)h(asso)r(ciated)e(pac)n(k)-5 b(age,)19 b(binds)g(the)g(structure)f(to)h Fq(name)739 1951 y Fr(in)k(the)g (con\014guration)f(pac)n(k)-5 b(age,)22 b(and)h(then)g(loads)f(the)i (program)c(found)k(in)f Fq(\014lename)29 b Fr(in)n(to)739 2051 y(the)f(pac)n(k)-5 b(age.)863 2150 y(As)28 b(an)f(example,)h(if)g (the)g(\014le)g Fo(test.scm)c Fr(con)n(tains)p Black Black 739 2316 a Fo(\(program)40 b(\(code)i(\(define)e(x)k(10\)\)\))739 2482 y Fr(this)28 b(program)d(can)j(b)r(e)g(loaded)e(as)h(follo)n(ws:)p Black Black 739 2648 a Fo(>)43 b(,load-package)38 b(srfi-7)739 2748 y(>)43 b(,load-srfi-7-pro)o(gra)o(m)37 b(test)42 b(test.scm)739 2848 y([test])739 2947 y(>)h(,in)f(test)739 3047 y(test>)f(x)739 3147 y(10)739 3246 y(test>)p Black 2130 5255 a Fr(82)p Black eop end %%Page: 83 91 TeXDict begin 83 90 bop 0 TeXcolorgray Black Black Black 291 1162 a Fl(Chapter)64 b(6)291 1594 y Fp(Unico)6 b(de)291 2042 y Fr(Sc)n(heme)35 b(48)g(fully)h(supp)r(orts)f(ISO)g(10646)f (\(Unico)r(de\):)53 b(Sc)n(heme)36 b(c)n(haracters)d(represen)n(t)291 2142 y(Unico)r(de)k(scalar)e(v)-5 b(alues,)39 b(and)d(Sc)n(heme)h (strings)f(are)g(arra)n(ys)e(of)j(scalar)e(v)-5 b(alues.)64 b(More)291 2241 y(information)27 b(on)g(Unico)r(de)h(can)f(b)r(e)h (found)g(at)f Fo(http://www.unicod)o(e.)o(org)o(/)p Fr(.)291 2603 y Fj(6.1)135 b(Characters)46 b(and)e(their)i(co)t(des)291 2816 y Fr(Sc)n(heme)18 b(48)f(in)n(ternally)h(represen)n(ts)f(c)n (haracters)f(as)i(Unico)r(de)g(scalar)f(v)-5 b(alues.)33 b(The)19 b Fo(unicode)291 2915 y Fr(structure)25 b(con)n(tains)h(pro)r (cedures)f(for)h(con)n(v)n(erting)e(b)r(et)n(w)n(een)j(c)n(haracters)d (and)i(scalar)e(v)-5 b(al-)291 3015 y(ues:)p Black 307 3231 a Fn(\017)p Black 41 w Fo(\(char->scalar-val)o(ue)35 b Fq(char)9 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)p Black 307 3330 a Fn(\017)p Black 41 w Fo(\(scalar-value->ch)o(ar)35 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)g Fq(char)p Black 307 3430 a Fn(\017)p Black 41 w Fo(\(scalar-value?)j Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)291 3645 y Fo(Char->scalar-va)o(lue)12 b Fr(returns)17 b(the)i(scalar)e(v) -5 b(alue)18 b(of)g(a)g(c)n(haracter,)g(and)h Fo(scalar-value->c)o(har) 291 3745 y Fr(con)n(v)n(erts)25 b(in)h(the)h(other)g(direction.)36 b Fo(Scalar-value->c)o(har)20 b Fr(signals)25 b(an)i(error)e(if)i (passed)291 3845 y(an)g(in)n(teger)g(that)g(is)h(not)g(a)f(scalar)f(v) -5 b(alue.)415 3961 y(Note)28 b(that)g(the)g(Unico)r(de)f(scalar)f(v)-5 b(alue)28 b(range)e(is)1032 4176 y([0)p Fc(;)14 b Fr(#)p Fc(x)p Fq(D7FF)d Fr(])19 b Fn([)g Fr([#)p Fc(x)p Fq(E000)13 b Fc(;)h Fr(#)p Fc(x)p Fq(10FFFF)g Fr(])291 4392 y(In)26 b(particular,)f(this)i(excludes)f(the)g(surrogates,)e(whic)n(h)i (UTF-16)g(uses)f(to)i(enco)r(de)f(scalar)291 4492 y(v)-5 b(alues)25 b(with)i(t)n(w)n(o)f(16-bit)f(w)n(ords.)35 b(Note)27 b(that)f(this)h(represen)n(tation)d(di\013ers)i(from)g(that)h (of)291 4591 y(Ja)n(v)-5 b(a,)21 b(whic)n(h)g(uses)g(UTF-16)f(co)r(de)h (units)g(as)g(the)g(c)n(haracter)f(represen)n(tation|Sc)n(heme)f(48)291 4691 y(e\013ectiv)n(ely)25 b(uses)h(UTF-32,)f(and)h(is)f(th)n(us)h(in)g (line)g(with)g(other)f(Sc)n(heme)h(implemen)n(tations)291 4790 y(and)h(the)h(curren)n(t)f(Unico)r(de)h(prop)r(osal)e(for)h(R)1730 4760 y Fk(6)1767 4790 y Fr(RS,)h(as)f(set)h(forth)f(in)h(SRFI)g(75.)415 4907 y(The)21 b(R)640 4876 y Fk(5)678 4907 y Fr(RS)g(pro)r(cedures)f Fo(char->integer)c Fr(and)21 b Fo(integer->char)15 b Fr(are)20 b(synon)n(yms)g(for)291 5006 y Fo(char->scalar-va)o(lue)h Fr(and)27 b Fo(scalar-value->cha)o(r)p Fr(,)22 b(resp)r(ectiv)n(ely)-7 b(.)p Black 1681 5255 a(83)p Black eop end %%Page: 84 92 TeXDict begin 84 91 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(6.2)135 b(Character)46 b(and)f(string)g(literals)739 705 y Fr(The)f(syn)n(tax)f(sp)r(eci\014ed)h(here)g(is)g(in)g(line)h (with)f(the)h(curren)n(t)e(Unico)r(de)h(prop)r(osal)f(for)739 805 y(R)800 774 y Fk(6)837 805 y Fr(RS,)31 b(as)e(set)h(forth)g(in)g (SRFI)h(75,)f(except)g(for)f(case-sensitivit)n(y)-7 b(.)43 b(\(Sc)n(heme)30 b(48)f(is)h(case-)739 904 y(insensitiv)n(e.\))739 1136 y Fe(6.2.1)112 b(Character)38 b(literals)739 1289 y Fr(The)24 b(follo)n(wing)e(c)n(haracter)g(names)h(are)f(a)n(v)-5 b(ailable)23 b(in)h(addition)f(to)h(what)f(R)3111 1259 y Fk(5)3149 1289 y Fr(RS)h(pro)n(vides:)p Black 863 1451 a Fn(\017)p Black 41 w Fo(#\\nul)i Fr(\(ASCI)r(I)j(0\))p Black 863 1616 a Fn(\017)p Black 41 w Fo(#\\alarm)c Fr(\(ASCI)r(I)k (7\))p Black 863 1780 a Fn(\017)p Black 41 w Fo(#\\backspace)24 b Fr(\(ASCI)r(I)k(8\))p Black 863 1944 a Fn(\017)p Black 41 w Fo(#\\tab)e Fr(\(ASCI)r(I)j(9\))p Black 863 2109 a Fn(\017)p Black 41 w Fo(#\\vtab)d Fr(\(ASCI)r(I)i(11\))p Black 863 2273 a Fn(\017)p Black 41 w Fo(#\\page)e Fr(\(ASCI)r(I)i (12\))p Black 863 2437 a Fn(\017)p Black 41 w Fo(#\\return)d Fr(\(ASCI)r(I)j(13\))p Black 863 2601 a Fn(\017)p Black 41 w Fo(#\\esc)e Fr(\(ASCI)r(I)j(27\))p Black 863 2766 a Fn(\017)p Black 41 w Fo(#\\rubout)c Fr(\(ASCI)r(I)j(127\))p Black 863 2930 a Fn(\017)p Black 41 w Fo(#\\x)p Fn(h)p Fr(x)p Fn(ih)p Fr(x)p Fn(i)p Fr(.)14 b(.)g(.)62 b(hex,)33 b(explicitly)e(or)g(implicitly)h(delimited,)h(where)e Fn(h)p Fr(x)p Fn(i)q(h)p Fr(x)p Fn(i)p Fr(.)14 b(.)g(.)62 b(de-)946 3029 y(notes)28 b(the)g(scalar)e(v)-5 b(alue)27 b(of)h(the)g(c)n(haracter)739 3261 y Fe(6.2.2)112 b(String)38 b(literals)739 3414 y Fr(The)f(follo)n(wing)f(escap)r(e)g(c)n (haracters)f(in)i(string)f(literals)h(are)f(a)n(v)-5 b(ailable)35 b(in)j(addition)e(to)739 3514 y(what)27 b(R)1007 3484 y Fk(5)1045 3514 y Fr(RS)h(pro)n(vides:)p Black 863 3692 a Fn(\017)p Black 41 w Fo(\\a)p Fr(:)37 b(alarm)26 b(\(ASCI)r(I)j(7\))p Black 863 3856 a Fn(\017)p Black 41 w Fo(\\b)p Fr(:)37 b(bac)n(kspace)25 b(\(ASCI)r(I)k(8\))p Black 863 4021 a Fn(\017)p Black 41 w Fo(\\t)p Fr(:)37 b(tab)27 b(\(ASCI)r(I)i(9\))p Black 863 4185 a Fn(\017)p Black 41 w Fo(\\n)p Fr(:)37 b(linefeed)28 b(\(ASCI)r(I)g(10\))p Black 863 4349 a Fn(\017)p Black 41 w Fo(\\v)p Fr(:)37 b(v)n(ertical)26 b(tab)i(\(ASCI)r(I)g(11\))p Black 863 4513 a Fn(\017)p Black 41 w Fo(\\f)p Fr(:)37 b(formfeed)27 b(\(ASCI)r(I)i(12\))p Black 863 4678 a Fn(\017)p Black 41 w Fo(\\r)p Fr(:)37 b(return)27 b(\(ASCI)r(I)h(13\))p Black 863 4842 a Fn(\017)p Black 41 w Fo(\\e)p Fr(:)37 b(escap)r(e)27 b(\(ASCI)r(I)h(27\))p Black 863 5006 a Fn(\017)p Black 41 w Fo(\\')p Fr(:)37 b(quote)27 b(\(ASCI)r(I)h(39,)f (same)g(as)g(unquoted\))p Black 2130 5255 a(84)p Black eop end %%Page: 85 93 TeXDict begin 85 92 bop 0 TeXcolorgray Black Black Black Black 415 523 a Fn(\017)p Black 41 w Fo(\\)p Fn(h)p Fr(newline)p Fn(ih)p Fr(in)n(traline)28 b(whitespace)p Fn(i)p Fr(:)33 b(elided)20 b(\(allo)n(ws)e(a)i(single-line)f(string)g(to)g(span)498 623 y(source)27 b(lines\))p Black 415 795 a Fn(\017)p Black 41 w Fo(\\x)p Fn(h)p Fr(x)p Fn(ih)p Fr(x)p Fn(i)p Fr(.)14 b(.)g(.)g Fo(;)19 b Fr(hex,)h(where)f Fn(h)p Fr(x)p Fn(ih)p Fr(x)p Fn(i)q Fr(.)14 b(.)g(.)48 b(denotes)18 b(the)i(scalar)d(v)-5 b(alue)19 b(of)g(the)h(c)n(haracter)291 1036 y Fe(6.2.3)112 b(Iden)m(ti\014ers)38 b(and)g(sym)m(b)s(ol)h (literals)291 1192 y Fr(Where)21 b(R)611 1162 y Fk(5)648 1192 y Fr(RS)g(allo)n(ws)f(a)h Fn(h)p Fr(letter)p Fn(i)p Fr(,)i(Sc)n(heme)e(48)f(allo)n(ws)g(in)h(addition)g(an)n(y)g(c)n (haracter)e(whose)291 1292 y(scalar)27 b(v)-5 b(alue)29 b(is)h(greater)d(than)i(127)f(and)h(whose)g(Unico)r(de)h(general)d (category)h(is)h(Lu,)h(Ll,)291 1391 y(Lt,)d(Lm,)h(Lo,)f(Mn,)h(Mc,)g (Me,)g(Nd,)g(Nl,)g(No,)g(Pd,)f(Pc,)g(P)n(o,)g(Sc,)g(Sm,)h(Sk,)g(So,)f (or)g(Co.)415 1493 y(Moreo)n(v)n(er,)18 b(when)h(a)g(bac)n(kslash)e (app)r(ears)h(in)h(a)g(sym)n(b)r(ol,)h(it)g(m)n(ust)f(start)f(a)h Fo(\\x)p Fn(h)p Fr(x)p Fn(i)o(h)p Fr(x)p Fn(i)q Fr(.)13 b(.)h(.)g Fo(;)291 1592 y Fr(escap)r(e,)31 b(whic)n(h)g(iden)n (ti\014es)g(an)g(arbitrary)e(c)n(haracter)g(to)i(include)g(in)h(the)f (sym)n(b)r(ol.)47 b(Note)291 1692 y(that)27 b(a)h(bac)n(kslash)e (itself)i(can)f(b)r(e)h(sp)r(eci\014ed)g(as)f Fo(\\x5C;)p Fr(.)291 1975 y Fj(6.3)135 b(Character)46 b(classi\014cation)g(and)f (case)g(mappings)291 2160 y Fr(The)18 b(R)513 2129 y Fk(5)550 2160 y Fr(RS)h(c)n(haracter)d(predicates|)p Fo(char-whitespace)o(?)p Fr(,)e Fo(char-lower-case?)p Fr(,)g Fo(char-upper-case?)o Fr(,)291 2259 y Fo(char-numeric?)p Fr(,)22 b(and)27 b Fo(char-alphabetic?)p Fr(|a)o(ll)22 b(treat)27 b(the)h(full)h(Unico)r(de)e(range.)415 2360 y Fo(Char-upcase)14 b Fr(and)k Fo(char-downcase)13 b Fr(as)18 b(w)n(ell)g(as)g Fo(char-ci=?)p Fr(,)e Fo(char-ci?)p Fr(,)f Fo(char-ci>=?)p Fr(,)g Fo(string-ci=?)p Fr(,)g Fo(string-ci?)p Fr(,)g Fo(string-ci<=?)p Fr(,)291 2560 y Fo(string-ci>=?)32 b Fr(all)27 b(use)g(the)h(standard)f (simple)g(lo)r(cale-insensitiv)n(e)g(Unico)r(de)g(case)g(fold-)291 2659 y(ing.)415 2761 y(In)e(addition,)g(Sc)n(heme)g(48)e(pro)n(vides)h (the)h Fo(unicode-char-map)o(s)18 b Fr(structure)25 b(for)f(more)291 2860 y(complete)29 b(access)g(to)h(the)g(Unico)r(de)g(c)n(haracter)e (classi\014cation)h(with)h(the)g(follo)n(wing)f(pro-)291 2960 y(cedures)d(and)i(macros:)p Black 307 3131 a Fn(\017)p Black 41 w Fo(\(general-category)35 b Fq(gener)l(al-c)l(ate)l (gory-name)6 b Fo(\))28 b Fn(!)g Fq(gener)l(al-c)l(ate)l(gory)174 b Fr(syn)n(tax)p Black 307 3230 a Fn(\017)p Black 41 w Fo(\(general-category)o(?)44 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 307 3330 a Fn(\017)p Black 41 w Fo(\(general-category)o(-i)o(d)35 b Fq(gener)l(al-c)l(ate)l (gory)7 b Fo(\))43 b Fn(!)f Fq(string)p Black 307 3430 a Fn(\017)p Black 41 w Fo(\(char-general-cat)o(eg)o(ory)35 b Fq(char)9 b Fo(\))42 b Fn(!)f Fq(gener)l(al-c)l(ate)l(gory)291 3600 y Fr(The)25 b(syn)n(tax)e Fo(general-category)c Fr(returns)24 b(a)g(Unico)r(de)i(general)d(category)g(ob)5 b(ject)25 b(asso-)291 3700 y(ciated)18 b(with)h Fq(gener)l(al-c)l(ate)l (gory-name)6 b Fr(.)35 b(\(See)19 b(Figure)p 0 0 1 TeXcolorrgb 17 w(6.1)p Black 18 w(b)r(elo)n(w.\))34 b Fo(General-categor)o(y?)291 3800 y Fr(is)21 b(the)h(predicate)f(for)g(general-category)d(ob)5 b(jects.)34 b Fo(General-category)o(-id)15 b Fr(returns)21 b(the)291 3899 y(Unico)r(de)d(category)f(id)h(as)g(a)g(string)g(\(also) f(listed)i(in)f(Figure)p 0 0 1 TeXcolorrgb 18 w(6.1)p Black(\).)33 b Fo(Char-general-cate)o(gor)o(y)291 3999 y Fr(returns)26 b(the)i(general)f(category)e(of)j(a)f(c)n(haracter.)p Black 307 4153 a Fn(\017)p Black 41 w Fo(\(general-category)o(-p)o(rim) o(ar)o(y-)o(cat)o(eg)o(ory)35 b Fq(gener)l(al-c)l(ate)l(gory)7 b Fo(\))42 b Fn(!)g Fq(primary-c)l(ate)l(gory)p Black 307 4253 a Fn(\017)p Black 41 w Fo(\(primary-category)35 b Fq(primary-c)l(ate)l(gory-name)6 b Fo(\))29 b Fn(!)f Fq(primary-c)l(ate)l(gory)109 b Fr(syn)n(tax)p Black 307 4352 a Fn(\017)p Black 41 w Fo(\(primary-category)o(?)44 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)291 4507 y Fo(General-categor)o(y-p)o(ri)o(ma)o(ry-)o(ca)o(teg)o(or)o(y)25 b Fr(maps)31 b(the)g(general)f(category)f(to)h(its)i(asso-)291 4606 y(ciated)40 b(primary)g(category|also)e(listed)j(in)g(Figure)p 0 0 1 TeXcolorrgb 40 w(6.1)p Black(.)76 b(The)40 b Fo(primary-category) 291 4706 y Fr(syn)n(tax)32 b(returns)h(the)g(primary-category)d(ob)5 b(ject)33 b(asso)r(ciated)f(with)i Fq(primary-c)l(ate)l(gory-)291 4805 y(name)6 b Fr(.)37 b Fo(Primary-category)o(?)31 b Fr(is)c(the)h(predicate)f(for)g(primary-category)d(ob)5 b(jects.)415 4907 y(The)37 b Fo(unicode-char-ma)o(ps)30 b Fr(pro)r(cedure)36 b(also)f(pro)n(vides)g(the)i(follo)n(wing)e (additional)291 5006 y(case-mapping)26 b(pro)r(cedures)g(for)h(c)n (haracters:)p Black 1681 5255 a(85)p Black eop end %%Page: 86 94 TeXDict begin 86 93 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(char-titlecase)o(?)44 b Fq(char)9 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(char-titlecase)35 b Fq(char)9 b Fo(\))42 b Fn(!)f Fq(char)p Black 755 722 a Fn(\017)p Black 42 w Fo(\(char-foldcase)35 b Fq(char)9 b Fo(\))42 b Fn(!)g Fq(char)739 918 y Fo(Char-titlecase?)d Fr(tests)31 b(if)g(a)f(c)n(haracter)f(is)h(in)h(titlecase.)45 b Fo(Char-titlecase)25 b Fr(returns)739 1017 y(the)39 b(titlecase)f(coun)n(terpart)g(of)g(a)g(c)n(haracter.)68 b Fo(Char-foldcase)34 b Fr(folds)k(the)h(case)f(of)h(a)739 1117 y(c)n(haracter,)24 b(i.e.)i(maps)f(it)h(to)f(upp)r(ercase)g (\014rst,)h(then)g(to)g(lo)n(w)n(ercase.)33 b(The)26 b(follo)n(wing)e(case-)739 1217 y(mapping)j(pro)r(cedures)g(on)g (strings)g(are)f(a)n(v)-5 b(ailable:)p Black 755 1412 a Fn(\017)p Black 42 w Fo(\(string-upcase)35 b Fq(string)7 b Fo(\))42 b Fn(!)f Fq(string)p Black 755 1512 a Fn(\017)p Black 42 w Fo(\(string-downcas)o(e)35 b Fq(string)7 b Fo(\))42 b Fn(!)f Fq(string)p Black 755 1611 a Fn(\017)p Black 42 w Fo(\(string-titleca)o(se)35 b Fq(string)7 b Fo(\))41 b Fn(!)h Fq(string)p Black 755 1711 a Fn(\017)p Black 42 w Fo(\(string-foldcas)o(e)35 b Fq(string)7 b Fo(\))42 b Fn(!)f Fq(string)739 1906 y Fr(These)27 b(implemen)n(t)g (the)h(simple)f(case)f(mappings)h(de\014ned)g(b)n(y)g(the)h(Unico)r(de) f(standard|)739 2006 y(note)c(that)g(the)g(length)g(of)g(the)g(output)h (string)e(ma)n(y)g(b)r(e)i(di\013eren)n(t)f(from)f(that)h(of)g(the)g (input)739 2105 y(string.)739 2432 y Fj(6.4)135 b(SRFI)45 b(14)739 2632 y Fr(The)35 b(SRFI)h(14)e(\(\\Character)f(Sets"\))i (implemen)n(tation)g(in)h(the)f Fo(srfi-14)e Fr(structure)h(is)739 2731 y(fully)28 b(Unico)r(de-complian)n(t.)739 3058 y Fj(6.5)135 b(R6RS)739 3258 y Fr(The)25 b Fo(r6rs-unicode)20 b Fr(structure)25 b(exp)r(orts)f(the)i(pro)r(cedures)e(from)g(the)i Fo(\(r6rs)41 b(unicode\))739 3357 y Fr(library)26 b(of)i(5.91)e(draft)h (of)h(R)1640 3327 y Fk(6)1677 3357 y Fr(RS)g(that)g(are)f(not)g (already)f(in)i(the)g Fo(scheme)e Fr(structure:)p Black Black 739 3589 a Fo(string-normalize)o(-n)o(fd)739 3689 y(string-normalize)o(-n)o(fkd)739 3788 y(string-normalize)o(-n)o(fc)739 3888 y(string-normalize)o(-n)o(fkc)739 3987 y(char-titlecase)739 4087 y(char-title-case?)739 4187 y(char-foldcase)739 4286 y(string-upcase)739 4386 y(string-downcase)739 4486 y(string-foldcase)739 4585 y(string-titlecase)739 4807 y Fr(The)21 b Fo(r6rs-unicode)16 b Fr(structure)21 b(also)f(exp)r(orts) g(a)h Fo(char-general-cat)o(eg)o(or)o(y)15 b Fr(pro)r(cedure)739 4907 y(compatible)32 b(with)g(the)g Fo(\(r6rs)42 b(unicode\))28 b Fr(library)-7 b(.)49 b(Note)32 b(that,)h(as)e(Sc)n(heme)h(48)f (treats)739 5006 y(source)26 b(co)r(de)i(case-insensitiv)n(ely)-7 b(,)26 b(the)i(sym)n(b)r(ols)e(it)i(returns)f(are)g(all-lo)n(w)n (ercase.)p Black 2130 5255 a(86)p Black eop end %%Page: 87 95 TeXDict begin 87 94 bop 0 TeXcolorgray Black Black Black 291 530 a Fj(6.6)135 b(I/O)291 714 y Fr(P)n(orts)39 b(m)n(ust)i(enco)r (de)g(an)n(y)f(text)h(a)g(program)e(writes)i(to)f(an)h(output)h(p)r (ort)f(to)f(a)h(b)n(yte)291 814 y(sequence,)h(and)d(con)n(v)n(ersely)e (deco)r(de)i(b)n(yte)h(sequences)e(when)i(a)f(program)e(reads)i(text) 291 914 y(from)f(an)g(input)i(p)r(ort.)69 b(Therefore,)41 b(eac)n(h)d(p)r(ort)g(has)g(an)g(asso)r(ciated)g Fq(text)h(c)l(o)l(de)l (c)44 b Fr(that)291 1013 y(describ)r(es)27 b(ho)n(w)g(enco)r(de)g(and)g (deco)r(de)h(text.)415 1114 y(Note)j(that)g(the)g(in)n(terface)f(to)g (the)h(text)g(co)r(dec)g(functionalit)n(y)f(is)h(exp)r(erimen)n(tal)f (and)291 1214 y(v)n(ery)c(lik)n(ely)h(to)h(c)n(hange)e(in)i(the)g (future.)291 1455 y Fe(6.6.1)112 b(T)-9 b(ext)37 b(co)s(decs)291 1611 y Fr(The)27 b Fo(i/o)g Fr(structure)g(de\014nes)g(the)h(follo)n (wing)f(pro)r(cedures:)p Black 307 1782 a Fn(\017)p Black 41 w Fo(\(port-text-codec)35 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)h Fq(text-c)l(o)l(de)l(c)p Black 307 1881 a Fn(\017)p Black 41 w Fo(\(set-port-text-co)o(de)o(c!)35 b Fq(p)l(ort)42 b(text-c)l(o)l(de)l(c)5 b Fo(\))291 2052 y Fr(These)34 b(t)n(w)n(o)f(pro)r(cedures)h(retriev)n(e)f(and)h(set)g(the)h(text)g (co)r(dec)f(asso)r(ciated)f(with)i(a)f(p)r(ort,)291 2152 y(resp)r(ectiv)n(ely)-7 b(.)36 b(A)27 b(program)e(can)i(set)h(text)f (co)r(dec)g(of)h(a)e(p)r(ort)i(at)f(an)n(y)f(time,)i(ev)n(en)f(if)h(it) f(has)291 2251 y(already)f(p)r(erformed)h(I/O)g(on)g(the)h(p)r(ort.)415 2352 y(The)g Fo(text-codecs)23 b Fr(structure)k(de\014nes)h(the)g (follo)n(wing)e(pro)r(cedures)g(and)i(macros:)p Black 307 2506 a Fn(\017)p Black 41 w Fo(\(text-codec?)45 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 2606 a Fn(\017)p Black 41 w Fo(null-text-codec)1731 b Fr(text-co)r(dec)p Black 307 2706 a Fn(\017)p Black 41 w Fo(us-ascii-codec)1775 b Fr(text-co)r(dec)p Black 307 2805 a Fn(\017)p Black 41 w Fo(latin-1-codec)1819 b Fr(text-co)r(dec)p Black 307 2905 a Fn(\017)p Black 41 w Fo(utf-8-codec)1907 b Fr(text-co)r(dec)p Black 307 3005 a Fn(\017)p Black 41 w Fo(utf-16le-codec)1775 b Fr(text-co)r(dec)p Black 307 3104 a Fn(\017)p Black 41 w Fo(utf-16be-codec)g Fr(text-co)r(dec)p Black 307 3204 a Fn(\017)p Black 41 w Fo(utf-32le-codec)g Fr(text-co)r(dec)p Black 307 3303 a Fn(\017)p Black 41 w Fo(utf-32be-codec)g Fr(text-co)r(dec)p Black 307 3403 a Fn(\017)p Black 41 w Fo(\(find-text-codec)35 b Fq(string)7 b Fo(\))41 b Fn(!)h Fq(text-c)l(o)l(de)l(c)f(or)h Fo(#f)291 3557 y(Text-codec?)62 b Fr(is)38 b(the)g(predicate)f(for)g(text)h(co)r(decs.)66 b Fo(Null-text-codec)32 b Fr(is)37 b(primar-)291 3657 y(ily)f(mean)n(t)h(for)f(n)n(ull)h(p)r(orts)f(that)h(nev)n(er)f(yield)h (input)g(and)g(sw)n(allo)n(w)e(all)h(output.)65 b(The)291 3756 y(follo)n(wing)28 b(text)i(co)r(decs)f(implemen)n(t)h(the)g (US-ASCI)r(I,)g(Latin-1,)f(Unico)r(de)h(UTF-8,)g(Uni-)291 3856 y(co)r(de)35 b(UTF-16)h(\(little-endian\),)j(Unico)r(de)d(UTF-16)f (\(big-endian\),)j(Unico)r(de)f(UTF-32)291 3956 y(\(little-endian\),)28 b(Unico)r(de)g(UTF-32)f(\(big-endian\))g(enco)r(dings,)g(resp)r(ectiv)n (ely)-7 b(.)415 4057 y Fo(Find-text-codec)26 b Fr(\014nds)31 b(the)h(co)r(dec)g(asso)r(ciated)e(with)i(an)f(enco)r(ding)g(name.)49 b(The)291 4156 y(names)22 b(of)h(the)g(ab)r(o)n(v)n(e)f(enco)r(dings)g (are)g Fo("null")p Fr(,)f Fo("US-ASCII")p Fr(,)f Fo("ISO8859-1")p Fr(,)g Fo("UTF-8")p Fr(,)291 4256 y Fo("UTF-16LE")p Fr(,)j Fo("UTF-16BE")p Fr(,)h Fo("UTF-32LE")p Fr(,)f(and)28 b Fo("UTF-32BE")p Fr(,)23 b(resp)r(ectiv)n(ely)-7 b(.)291 4497 y Fe(6.6.2)112 b(T)-9 b(ext-co)s(dec)37 b(utilities)291 4653 y Fr(The)32 b Fo(text-codec-utils)26 b Fr(structure)32 b(exp)r(orts)g(a)g(few)h(utilities)g(for)g(dealing)e(with)j(text)291 4753 y(co)r(decs:)p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(guess-port-text-)o(co)o(dec)o(-a)o(cc)o(ord)o(in)o(g-t)o(o-)o (bo)o(m)i Fq(p)l(ort)8 b Fo(\))41 b Fn(!)g Fq(text-c)l(o)l(de)l(c)g(or) h Fo(#f)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(set-port-text-co)o (de)o(c-a)o(cc)o(or)o(din)o(g-)o(to-)o(bo)o(m!)h Fq(p)l(ort)8 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 1681 5255 a Fr(87)p Black eop end %%Page: 88 96 TeXDict begin 88 95 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(These)23 b(pro)r(cedures)g(lo)r(ok)g(at)g(the)h(b)n (yte-order-mark)d(\(also)i(called)g(the)h(\\BOM",)e Fo(U+FEFF)p Fr(\))739 623 y(at)f(the)g(b)r(eginning)g(of)f(a)h(p)r(ort)f(and)h (guess)f(the)h(appropriate)e(text)i(co)r(dec.)35 b(This)21 b(w)n(orks)e(only)739 722 y(for)f(UTF-16)f(\(little-endian)i(and)f (big-endian\))g(and)h(UTF-8.)33 b Fo(Guess-port-text-)o(cod)o(ec)o(-ac) o(co)o(rd)o(ing)o(-t)o(o-b)o(om)739 822 y Fr(returns)26 b(the)i(text)f(co)r(dec,)g(or)g Fo(#f)f Fr(if)i(it)f(found)h(no)f (UTF-16)f(or)g(UTF-8)h(BOM.)g(Note)g(that)739 922 y(this)i(actually)g (reads)f(from)h(the)g(p)r(ort.)42 b(If)29 b(the)h(guess)e(do)r(es)h (not)g(succeed,)h(it)f(is)g(probably)739 1021 y(a)j(go)r(o)r(d)h(idea)f (to)h(re-op)r(en)f(the)h(p)r(ort.)52 b Fo(Set-port-text-cod)o(ec-)o(ac) o(cor)o(di)o(ng)o(-to)o(-b)o(om!)739 1121 y Fr(calls)28 b Fo(guess-port-text-c)o(od)o(ec)o(-ac)o(co)o(rdi)o(ng)o(-to)o(-b)o(om) o Fr(,)c(sets)k(the)i(p)r(ort)e(text)i(co)r(dec)e(to)739 1220 y(the)i(result)e(if)i(successful)f(and)g(returns)g Fo(#t)p Fr(.)41 b(If)29 b(it)h(is)f(not)g(successful,)h(it)g(returns)e Fo(#f)p Fr(.)41 b(As)739 1320 y(with)e Fo(guess-port-text-c)o(ode)o(c-) o(acc)o(or)o(di)o(ng-)o(to)o(-bo)o(m)p Fr(,)d(this)j(reads)f(from)h (the)g(p)r(ort,)739 1420 y(whether)27 b(successful)h(or)e(not.)739 1661 y Fe(6.6.3)112 b(Creating)38 b(text)f(co)s(decs)p Black 755 1816 a Fn(\017)p Black 42 w Fo(\(make-text-code)o(c)e Fq(strings)42 b(enc)l(o)l(de-pr)l(o)l(c)g(de)l(c)l(o)l(de-pr)l(o)l(c)5 b Fo(\))42 b Fn(!)g Fq(text-c)l(o)l(de)l(c)p Black 755 1916 a Fn(\017)p Black 42 w Fo(\(text-codec-nam)o(es)35 b Fq(text-c)l(o)l(de)l(c)5 b Fo(\))40 b Fn(!)i Fq(list)f(of)i(strings)p Black 755 2015 a Fn(\017)p Black 42 w Fo(\(text-codec-enc)o(od)o(e-c)o (ha)o(r-p)o(ro)o(c)35 b Fq(text-c)l(o)l(de)l(c)5 b Fo(\))41 b Fn(!)83 b Fq(enc)l(o)l(de-pr)l(o)l(c)p Black 755 2115 a Fn(\017)p Black 42 w Fo(\(text-codec-dec)o(od)o(e-c)o(ha)o(r-p)o(ro)o (c)35 b Fq(text-c)l(o)l(de)l(c)5 b Fo(\))41 b Fn(!)83 b Fq(de)l(c)l(o)l(de-pr)l(o)l(c)p Black 755 2214 a Fn(\017)p Black 42 w Fo(\(define-text-co)o(de)o(c)36 b Fq(id)51 b(name)d(enc)l(o)l(de-pr)l(o)l(c)f(de)l(c)l(o)l(de-pr)l(o)l(c)5 b Fo(\))420 b Fr(syn)n(tax)p Black 755 2314 a Fn(\017)p Black 42 w Fo(\(define-text-co)o(de)o(c)36 b Fq(id)51 b Fo(\()p Fq(name)c Fo(...\))84 b Fq(enc)l(o)l(de-pr)l(o)l(c)47 b(de)l(c)l(o)l(de-pr)l(o)l(c)5 b Fo(\))117 b Fr(syn)n(tax)739 2469 y Fo(Make-text-codec)34 b Fr(constructs)39 b(a)g(text)i(co)r(dec)e (from)h(a)f(list)i(of)e(names,)k(and)d(an)f(en-)739 2568 y(co)r(de)h(and)f(a)h(deco)r(de)f(pro)r(cedure.)73 b(\(See)40 b(b)r(elo)n(w)g(on)f(ho)n(w)h(to)f(construct)h(enco)r(de)f(and)739 2668 y(deco)r(de)26 b(pro)r(cedures.\))36 b Fo(Text-codec-names)o Fr(,)22 b Fo(text-codec-enco)o(de)o(-ch)o(ar)o(-pr)o(oc)o Fr(,)f(and)739 2768 y Fo(text-codec-decod)o(e-)o(cha)o(r-)o(pro)o(c)12 b Fr(are)18 b(the)g(accessors)e(for)i(text)h(co)r(dec.)33 b(The)19 b Fo(define-text-code)o(c)739 2867 y Fr(is)24 b(a)g(shorthand)g(for)g(binding)h(a)f(global)f(iden)n(ti\014er)h(to)h (a)f(text)h(co)r(dec.)35 b(Its)25 b(\014rst)f(form)g(is)h(for)739 2967 y(co)r(decs)i(with)h(only)f(one)g(name,)h(the)g(second)f(for)g(co) r(decs)g(with)h(sev)n(eral)e(names.)863 3068 y(Enco)r(ding)h(and)h (deco)r(ding)f(pro)r(cedures)f(w)n(ork)g(as)h(follo)n(ws:)p Black 755 3239 a Fn(\017)p Black 42 w Fo(\()p Fq(enc)l(o)l(de-pr)l(o)l (c)46 b(char)d(bu\013er)e(start)g(c)l(ount)8 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)g(mayb)l(e-c)l(ount)p Black 755 3339 a Fn(\017)p Black 42 w Fo(\()p Fq(de)l(c)l(o)l(de-pr)l(o)l(c) 47 b(bu\013er)41 b(start)g(c)l(ount)8 b Fo(\))40 b Fn(!)i Fq(mayb)l(e-char)h(c)l(ount)739 3510 y Fr(An)33 b Fq(enc)l(o)l(de-pr)l (o)l(c)39 b Fr(consumes)32 b(a)g(c)n(haracter)f Fq(char)43 b Fr(to)32 b(enco)r(de,)i(a)f(b)n(yte)f(v)n(ector)g Fq(bu\013er)41 b Fr(to)739 3610 y(receiv)n(e)36 b(the)i(enco)r(ding,)h(an)e(index)h Fq(start)44 b Fr(in)n(to)37 b(the)h(bu\013er,)i(and)d(a)g(blo)r(c)n(k)g (size)g Fq(c)l(ount)7 b Fr(.)739 3709 y(It)34 b(is)g(supp)r(osed)g(to)g (enco)r(de)g(the)g(b)n(ytes)g(in)n(to)f(the)i(blo)r(c)n(k)e(at)h([)p Fq(start)8 b Fc(;)14 b Fq(start)29 b(+)g(c)l(ount)7 b Fr(\))q(.)56 b(If)739 3809 y(the)37 b(enco)r(ding)f(is)h(successful,)i (the)e(pro)r(cedure)f(m)n(ust)h(return)f Fo(#t)g Fr(and)h(the)g(n)n(um) n(b)r(er)f(of)739 3909 y(b)n(ytes)d(needed)g(b)n(y)f(the)i(enco)r (ding.)52 b(If)34 b(the)f(c)n(haracter)e(cannot)i(b)r(e)g(enco)r(ded)g (at)g(all,)h(the)739 4008 y(pro)r(cedure)c(m)n(ust)h(return)f Fo(#f)g Fr(and)h Fo(#f)p Fr(.)46 b(If)31 b(the)h(enco)r(ding)e(is)h(p)r (ossible)f(but)i(the)f(space)f(is)739 4108 y(not)24 b(su\016cien)n(t,)g (the)g(pro)r(cedure)f(m)n(ust)h(return)f Fo(#f)g Fr(and)g(a)g(total)h (n)n(um)n(b)r(er)f(of)h(b)n(ytes)f(needed)739 4207 y(for)k(the)h(enco)r (ding.)863 4309 y(A)f Fq(de)l(c)l(o)l(de-pr)l(o)l(c)32 b Fr(consumes)26 b(a)g(b)n(yte)g(v)n(ector)f Fq(bu\013er)9 b Fr(,)26 b(an)g(index)h Fq(start)33 b Fr(in)n(to)26 b(the)h(bu\013er,)739 4408 y(and)18 b(a)g(blo)r(c)n(k)g(size)g Fq(c)l(ount)7 b Fr(.)34 b(It)19 b(is)f(supp)r(osed)g(to)g(deco)r(de)h (the)f(b)n(ytes)g(at)h(indices)f([)p Fq(start)7 b Fc(;)14 b Fq(start)30 b(+)f(c)l(ount)7 b Fr(\).)739 4508 y(If)34 b(the)g(deco)r(ding)f(is)h(successful,)h(it)f(m)n(ust)f(return)h(the)g (deco)r(ded)f(c)n(haracter)f(at)h(the)h(b)r(e-)739 4608 y(ginning)d(of)h(the)h(blo)r(c)n(k,)f(and)g(the)g(n)n(um)n(b)r(er)g(of) g(b)n(ytes)f(consumed.)50 b(If)32 b(the)g(blo)r(c)n(k)g(cannot)739 4707 y(b)r(egin)25 b(with)h(or)e(b)r(e)h(a)g(pre\014x)f(of)h(a)g(v)-5 b(alid)25 b(enco)r(ding,)g(the)g(pro)r(cedure)f(m)n(ust)i(return)e Fo(#f)g Fr(and)739 4807 y Fo(#f)p Fr(.)41 b(If)30 b(the)f(blo)r(c)n(k)g (con)n(tains)f(a)h(true)g(pre\014x)g(of)g(a)g(v)-5 b(alid)29 b(enco)r(ding,)g(the)h(pro)r(cedure)e(m)n(ust)739 4907 y(return)h Fo(#f)f Fr(and)h(a)g(total)g(coun)n(t)f(of)h(b)n(ytes)g (\(including)h(the)f(bu\013er\))h(needed)f(to)g(complete)739 5006 y(the)c(enco)r(ding.)35 b(Note)24 b(that)h(this)g(b)n(yte)f(coun)n (t)g(is)g(only)g(a)g(guess:)34 b(the)25 b(system)f(will)g(pro)n(vide)p Black 2130 5255 a(88)p Black eop end %%Page: 89 97 TeXDict begin 89 96 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(that)29 b(man)n(y)f(b)n(ytes,)h(but)g(the)g(deco)r(ding)g (pro)r(cedures)e(migh)n(t)i(still)g(signal)f(an)h(incomplete)291 623 y(enco)r(ding,)e(causing)g(the)h(system)f(to)g(try)h(to)f(obtain)g (more.)291 897 y Fj(6.7)135 b(Default)46 b(enco)t(dings)291 1079 y Fr(The)18 b(default)h(enco)r(ding)f(for)g(new)g(p)r(orts)g(is)g (UTF-8.)34 b(F)-7 b(or)18 b(the)g(default)h Fo(current-input-por)o(t)p Fr(,)291 1179 y Fo(current-output-)o(por)o(t)p Fr(,)k(and)28 b Fo(current-error-por)o(t)p Fr(,)23 b(Sc)n(heme)28 b(48)g(consults)g (the)h(OS)291 1278 y(for)e(enco)r(ding)g(information.)415 1378 y(F)-7 b(or)28 b(Unix,)h(it)g(consults)f Fo(nl)p 1289 1378 27 4 v 31 w(langinfo\(3\))p Fr(,)c(whic)n(h)29 b(in)g(turn)f(consults)g(the)h Fo(LC)p 2925 1378 V 60 w Fr(en)n(vi-)291 1478 y(ronmen)n(t)h(v)-5 b(ariables.)46 b(If)31 b(the)h(enco)r(ding)e(is)h(not)g(de\014ned)g(that)h(w)n(a)n(y) -7 b(,)30 b(Sc)n(heme)h(48)f(rev)n(erts)291 1577 y(to)d(US-ASCI)r(I.) 415 1677 y(Under)20 b(Windo)n(ws,)h(Sc)n(heme)f(48)f(uses)g(Unico)r(de) h(I/O)f(\(using)h(UTF-16\))f(for)g(the)h(default)291 1776 y(p)r(orts)27 b(connected)g(to)h(the)g(console,)e(and)i(Latin-1)e (for)h(default)h(p)r(orts)g(that)f(are)g(not.)p Black 1681 5255 a(89)p Black eop end %%Page: 90 98 TeXDict begin 90 97 bop 0 TeXcolorgray Black Black Black Black 789 1057 a Fq(gener)l(al-c)l(ate)l(gory-name)p 1927 1087 4 100 v 386 w(primary-c)l(ate)l(gory-name)p 2869 1087 V 108 w Fr(Unico)r(de)28 b(category)d(id)p 739 1090 2959 4 v 789 1160 a Fo(uppercase-letter)p 1927 1190 4 100 v 485 w(letter)p 2869 1190 V 679 w("Lu")789 1260 y(lowercase-letter)p 1927 1290 V 485 w(letter)p 2869 1290 V 679 w("Ll")789 1359 y(titlecase-letter)p 1927 1389 V 485 w(letter)p 2869 1389 V 679 w("Lt")789 1459 y(modified-letter)p 1927 1489 V 529 w(letter)p 2869 1489 V 679 w("Lm")789 1559 y(other-letter)p 1927 1624 4 136 v 661 w(letter)p 2869 1624 V 679 w("Lo")789 1694 y(non-spacing-mark)p 1927 1724 4 100 v 485 w(mark)p 2869 1724 V 767 w("Mn")789 1794 y(combining-spacin)o(g-)o(ma)o(rk)p 1927 1824 V 224 w(mark)p 2869 1824 V 767 w("Mc")789 1893 y(enclosing-mark)p 1927 1959 4 136 v 573 w(mark)p 2869 1959 V 767 w("Me")789 2029 y(decimal-digit-nu)o(mb)o(er)p 1927 2059 4 100 v 311 w(number)p 2869 2059 V 679 w("Nd")789 2128 y(letter-number)p 1927 2158 V 617 w(number)p 2869 2158 V 679 w("Nl")789 2228 y(other-number)p 1927 2294 4 136 v 661 w(number)p 2869 2294 V 679 w("No")789 2363 y(opening-punctuat)o(io)o(n)p 1927 2393 4 100 v 355 w(punctuation)p 2869 2393 V 459 w("Ps")789 2463 y(closing-punctuat)o(io)o(n)p 1927 2493 V 355 w(punctuation)p 2869 2493 V 459 w("Pe")789 2563 y(initial-quote-pu)o(nc)o(tu)o(ati)o(on)p 1927 2592 V 93 w(punctuation)p 2869 2592 V 459 w("Pi")789 2662 y(final-quote-punc)o(tu)o(at)o(ion)p 1927 2692 V 180 w(punctuation)p 2869 2692 V 459 w("Pf")789 2762 y(dash-punctuation)p 1927 2792 V 485 w(punctuation)p 2869 2792 V 459 w("Pd")789 2861 y(connector-punctu)o(at)o(io)o(n)p 1927 2891 V 268 w(punctuation)p 2869 2891 V 459 w("Pc")789 2961 y(other-punctuatio)o(n) p 1927 3027 4 136 v 442 w(punctuation)p 2869 3027 V 459 w("Po")789 3096 y(currency-symbol)p 1927 3126 4 100 v 529 w(symbol)p 2869 3126 V 679 w("Sc")789 3196 y(mathematical-sym)o(bo) o(l)p 1927 3226 V 355 w(symbol)p 2869 3226 V 679 w("Sm")789 3296 y(modifier-symbol)p 1927 3326 V 529 w(symbol)p 2869 3326 V 679 w("Sk")789 3395 y(other-symbol)p 1927 3461 4 136 v 661 w(symbol)p 2869 3461 V 679 w("So")789 3531 y(space-separator)p 1927 3561 4 100 v 529 w(separator)p 2869 3561 V 547 w("Zs")789 3630 y(paragraph-separa)o(to)o(r)p 1927 3660 V 355 w(separator)p 2869 3660 V 547 w("Zp")789 3730 y(line-separator)p 1927 3796 4 136 v 573 w(separator)p 2869 3796 V 547 w("Zl")789 3865 y(control-characte)o(r)p 1927 3895 4 100 v 442 w(miscellaneous)p 2869 3895 V 371 w("Cc")789 3965 y(formatting-chara)o(ct)o(er)p 1927 3995 V 311 w(miscellaneous)p 2869 3995 V 371 w("Cf")789 4065 y(surrogate)p 1927 4094 V 793 w(miscellaneous)p 2869 4094 V 371 w("Cs")789 4164 y(private-use-char)o(ac)o(te)o(r)p 1927 4194 V 268 w(miscellaneous)p 2869 4194 V 371 w("Co")789 4264 y(unassigned)p 1927 4294 V 749 w(miscellaneous)p 2869 4294 V 371 w("Cn")p Black 1044 4443 a Fr(Figure)i(6.1:)p 0 TeXcolorgray Black 36 w(Unico)r(de)h(general)e(categories)f(and)j (primary)e(categories)p Black Black Black 2130 5255 a(90)p Black eop end %%Page: 91 99 TeXDict begin 91 98 bop 0 TeXcolorgray Black Black Black 291 1147 a Fl(Chapter)64 b(7)291 1563 y Fp(Threads)291 1996 y Fr(This)26 b(c)n(hapter)f(describ)r(es)g(Sc)n(heme)h(48's)f (thread)h(system:)36 b(Sc)n(heme)26 b(48)f(threads)g(are)g(fully)291 2096 y(preemptiv)n(e;)e(all)d(threads)h(\(curren)n(tly\))g(run)g (within)h(a)e(single)h(op)r(erating)f(system)h(pro)r(cess.)291 2196 y(Sc)n(heme)h(48)f(allo)n(ws)g(writing)h(customized,)h(nested)g (sc)n(hedulers,)f(and)g(pro)n(vides)f(n)n(umerous)291 2295 y(facilities)i(for)h(the)g(sync)n(hronization)e(of)i (shared-memory)d(programs,)i(most)g(imp)r(ortan)n(tly)291 2395 y Fq(pr)l(op)l(osals)36 b Fr(for)27 b(optimistic)h(concurrency)-7 b(.)291 2676 y Fj(7.1)135 b(Creating)46 b(and)f(con)l(trolling)h (threads)291 2860 y Fr(The)27 b(bindings)h(describ)r(ed)f(in)h(this)g (section)f(are)g(part)g(of)g(the)h Fo(threads)d Fr(structure.)p Black 307 3030 a Fn(\017)p Black 41 w Fo(\(spawn)39 b Fq(thunk)9 b Fo(\))41 b Fn(!)g Fq(thr)l(e)l(ad)p Black 307 3130 a Fn(\017)p Black 41 w Fo(\(spawn)e Fq(thunk)i(name)6 b Fo(\))42 b Fn(!)f Fq(thr)l(e)l(ad)291 3300 y Fo(Spawn)31 b Fr(creates)h(a)g(new)i(thread,)g(passes)e(that)h(thread)g(to)g(the)g (curren)n(t)f(sc)n(heduler,)i(and)291 3399 y(instructs)h(the)h(sc)n (heduler)e(to)h(run)h Fq(thunk)43 b Fr(in)36 b(that)g(thread.)59 b(The)36 b Fq(name)42 b Fr(argumen)n(t)34 b(\(a)291 3499 y(sym)n(b)r(ol\))26 b(asso)r(ciates)g(a)h(sym)n(b)r(olic)f(name)h(with) h(the)f(thread;)g(it)h(is)f(purely)f(for)h(debugging)291 3599 y(purp)r(oses.)p Black 307 3769 a Fn(\017)p Black 41 w Fo(\(relinquish-times)o(li)o(ce)-6 b(\))p Black 307 3868 a Fn(\017)p Black 41 w Fo(\(sleep)39 b Fq(time-in-mil)t(lise)l (c)l(onds)7 b Fo(\))p Black 307 3968 a Fn(\017)p Black 41 w Fo(\(terminate-curren)o(t-)o(thr)o(ea)o(d)-6 b(\))291 4138 y(Relinquish-time)o(sli)o(ce)20 b Fr(instructs)27 b(the)g(sc)n(heduler)f(to)g(run)h(another)f(thread,)g(th)n(us)h(re-)291 4237 y(linquishing)j(the)h(timeslice)f(of)h(the)f(curren)n(t)g(thread.) 45 b Fo(Sleep)28 b Fr(do)r(es)i(the)h(same)f(and)g(asks)291 4337 y(the)20 b(sc)n(heduler)g(to)g(susp)r(end)h(the)g(curren)n(t)f (thread)g(for)g(at)g(least)g Fq(time-in-mil)t(lise)l(c)l(onds)29 b Fr(mil-)291 4437 y(liseconds)i(b)r(efore)i(resuming)e(it.)53 b(Finally)-7 b(,)34 b Fo(terminate-curre)o(nt-)o(th)o(re)o(ad)26 b Fr(terminates)291 4536 y(the)i(curren)n(t)e(thread.)415 4637 y(Eac)n(h)35 b(thread)h(is)g(represen)n(ted)f(b)n(y)g(a)h(thread)g (ob)5 b(ject.)62 b(The)36 b(follo)n(wing)f(pro)r(cedures)291 4737 y(op)r(erate)26 b(on)i(that)f(ob)5 b(ject:)p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(current-thread\))35 b Fn(!)42 b Fq(thr)l(e)l(ad)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(thread?)47 b Fq(thing)7 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 1681 5255 a Fr(91)p Black eop end %%Page: 92 100 TeXDict begin 92 99 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(thread-name)36 b Fq(thr)l(e)l(ad)9 b Fo(\))41 b Fn(!)h Fq(name)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(thread-uid)36 b Fq(thr)l(e)l(ad)9 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)739 815 y Fo(Current-thread)13 b Fr(returns)k(the)i(thread)f(ob)5 b(ject)18 b(asso)r(ciated)f(with)i (the)g(curren)n(tly)f(running)739 915 y(thread.)36 b Fo(Thread?)e Fr(is)27 b(the)g(predicate)f(for)h(thread)f(ob)5 b(jects.)36 b Fo(Thread-name)23 b Fr(extracts)j(the)739 1014 y(name)38 b(of)g(the)h(thread,)h(if)f(one)f(w)n(as)f(sp)r (eci\014ed)i(in)f(the)h(call)f(to)g Fo(spawn)p Fr(,)h Fo(#f)e Fr(otherwise.)739 1114 y Fo(Thread-uid)d Fr(returns)j(the)h Fq(uid)47 b Fr(of)38 b(the)g(thread,)i(a)e(unique)g(in)n(teger)f (assigned)f(b)n(y)i(the)739 1214 y(thread)27 b(system.)739 1535 y Fj(7.2)135 b(Adv)-7 b(anced)44 b(thread)h(handling)739 1733 y Fr(The)28 b(follo)n(wing)e(bindings)i(are)e(part)h(of)h(the)g Fo(threads-internal)21 b Fr(structure:)p Black 755 1925 a Fn(\017)p Black 42 w Fo(\(terminate-thre)o(ad)o(!)36 b Fq(thr)l(e)l(ad)9 b Fo(\))p Black 755 2025 a Fn(\017)p Black 42 w Fo(\(kill-thread!)36 b Fq(thr)l(e)l(ad)9 b Fo(\))739 2217 y(Terminate-thread)o(!)46 b Fr(un)n(winds)33 b(the)g(thread)g(asso)r(ciated)e(with)i Fq(thr)l(e)l(ad)9 b Fr(,)35 b(running)d(an)n(y)739 2317 y(p)r(ending)22 b Fo(dynamic-wind)15 b Fq(after)30 b Fr(th)n(unks)21 b(\(in)g(that)f(thread\),)i(after)e(whic)n(h)g(the)h(thread)f(ter-)739 2417 y(minates.)39 b Fo(Kill-thread!)34 b Fr(causes)27 b(the)i(thread)f(asso)r(ciated)f(with)i Fq(thr)l(e)l(ad)37 b Fr(to)28 b(terminate)739 2516 y(immediately)g(without)g(un)n(winding) f(its)h(con)n(tin)n(uation.)739 2837 y Fj(7.3)135 b(Debugging)46 b(m)l(ultithreaded)g(programs)739 3036 y Fr(Debugging)27 b(m)n(ultithreaded)g(programs)f(can)h(b)r(e)h(di\016cult.)863 3144 y(As)k(describ)r(ed)f(in)h(section)p 0 0 1 TeXcolorrgb 31 w(3.12)p Black(,)g(when)f(an)n(y)g(thread)g(signals)g(an)g(error,)g (Sc)n(heme)g(48)739 3244 y(stops)c(running)g(all)h(of)f(the)h(threads)f (at)g(that)h(command)g(lev)n(el.)863 3352 y(The)22 b(follo)n(wing)e (pro)r(cedure)g(\(exp)r(orted)h(b)n(y)g(the)h(structure)f Fo(debug-messages)p Fr(\))16 b(is)21 b(use-)739 3452 y(ful)28 b(in)g(debugging)f(m)n(ulti-threaded)g(programs.)p Black 755 3644 a Fn(\017)p Black 42 w Fo(\(debug-message)35 b Fq(element)1768 3656 y Fk(0)1847 3644 y Fq(.)13 b(.)g(.)g Fo(\))739 3836 y(Debug-message)i Fr(prin)n(ts)20 b(the)h(elemen)n(ts)f (to)g(`)p Fo(stderr)p Fr(',)g(follo)n(w)n(ed)f(b)n(y)h(a)g(newline.)35 b(The)21 b(only)739 3936 y(t)n(yp)r(es)29 b(of)g(v)-5 b(alues)28 b(that)i Fo(debug-message)24 b Fr(prin)n(ts)k(in)h(full)h (are)e(small)h(in)n(tegers)f(\(\014xn)n(ums\),)739 4036 y(strings,)23 b(c)n(haracters,)e(sym)n(b)r(ols,)i(b)r(o)r(oleans,)g (and)g(the)g(empt)n(y)g(list.)35 b(V)-7 b(alues)22 b(of)h(other)f(t)n (yp)r(es)739 4135 y(are)k(abbreviated)h(as)g(follo)n(ws:)p Black Black 1421 4315 a(pair)314 b Fo(\(...\))1421 4414 y Fr(v)n(ector)235 b Fo(#\(...\))1421 4514 y Fr(pro)r(cedure)99 b Fo(#)p Fn(f)p Fo(procedure)p Fn(g)1421 4614 y Fr(record)230 b Fo(#)p Fn(f)p Fo()p Fn(g)1421 4713 y Fr(all)28 b(others)119 b Fo(???)739 4907 y Fr(The)26 b(great)g(thing)g(ab)r(out)h Fo(debug-message)21 b Fr(is)26 b(that)h(it)g(b)n(ypasses)e(Sc)n(heme)h(48's)g(I/O)f(and)739 5006 y(thread)i(handling.)37 b(The)27 b(message)f(app)r(ears)h (immediately)-7 b(,)28 b(with)g(no)f(dela)n(ys)g(or)f(errors.)p Black 2130 5255 a(92)p Black eop end %%Page: 93 101 TeXDict begin 93 100 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(7.4)135 b(Optimistic)46 b(concurrency)291 705 y Fr(Most)18 b(of)g(the)h(bindings)f(describ)r(ed)g(in)h(this)g (section)f(are)f(part)h(of)g(the)h Fo(proposals)c Fr(structure|)291 805 y(the)32 b(lo)n(w-lev)n(el)d(bindings)j(describ)r(ed)f(at)h(the)g (v)n(ery)e(end)i(of)f(the)h(section)f(are)g(part)g(of)h(the)291 904 y Fo(low-proposals)22 b Fr(structure.)415 1004 y(A)27 b Fq(pr)l(op)l(osal)36 b Fr(is)26 b(a)g(record)f(of)h(reads)f(from)h (and)g(and)g(writes)g(to)g(lo)r(cations)f(in)i(memory)-7 b(.)291 1103 y(Eac)n(h)22 b(thread)h(has)h(an)f(asso)r(ciated)f Fq(curr)l(ent)j(pr)l(op)l(osal)35 b Fr(\(whic)n(h)24 b(ma)n(y)f(b)r(e)h Fo(#f)p Fr(\).)35 b(The)24 b Fq(lo)l(gging)291 1203 y Fr(op)r(erations)18 b(listed)i(b)r(elo)n(w)g(record)f(an)n(y)g (v)-5 b(alues)19 b(read)g(or)g(written)i(in)f(the)g(curren)n(t)f(prop)r (osal.)291 1303 y(A)i(reading)f(op)r(eration,)h(suc)n(h)g(as)f Fo(provisional-vecto)o(r-)o(ref)o Fr(,)d(\014rst)j(c)n(hec)n(ks)g(to)h (see)g(if)h(the)291 1402 y(curren)n(t)29 b(prop)r(osal)g(con)n(tains)g (a)h(v)-5 b(alue)30 b(for)g(the)g(relev)-5 b(an)n(t)30 b(lo)r(cation.)44 b(If)31 b(so,)f(that)h(v)-5 b(alue)30 b(is)291 1502 y(returned)g(as)h(the)g(result)g(of)g(the)h(read.)46 b(If)32 b(not,)g(the)f(curren)n(t)g(con)n(ten)n(ts)f(of)h(the)h(lo)r (cation)291 1602 y(are)22 b(stored)g(in)h(the)g(prop)r(osal)f(and)h (then)g(returned)g(as)f(the)i(result)e(of)h(the)h(read.)34 b(A)24 b(logging)291 1701 y(write)k(to)g(a)g(lo)r(cation)g(stores)g (the)h(new)f(v)-5 b(alue)29 b(as)f(the)h(curren)n(t)e(con)n(ten)n(ts)h (of)h(the)g(lo)r(cation)291 1801 y(in)e(the)h(curren)n(t)f(prop)r (osal;)f(the)i(con)n(ten)n(ts)f(of)h(the)g(lo)r(cation)f(itself)h (remain)f(unc)n(hanged.)415 1900 y Fq(Committing)35 b Fr(to)27 b(a)g(prop)r(osal)f(v)n(eri\014es)g(that)h(an)n(y)f(reads)g (logged)g(in)i(the)f(prop)r(osal)f(are)291 2000 y(still)j(v)-5 b(alid)30 b(and,)g(if)g(so,)g(p)r(erforms)f(an)n(y)f(writes)h(that)h (the)g(prop)r(osal)e(con)n(tains.)42 b(A)30 b(logged)291 2100 y(read)25 b(is)h(v)-5 b(alid)26 b(if,)h(at)f(the)h(time)g(of)f (the)h(commit,)f(the)h(lo)r(cation)f(con)n(tains)f(the)h(same)g(v)-5 b(alue)291 2199 y(it)33 b(had)f(at)h(the)g(time)g(of)g(the)g(original)e (read)h(\(note)h(that)g(this)g(do)r(es)f(not)h(mean)f(that)h(no)291 2299 y(c)n(hange)25 b(o)r(ccurred,)g(simply)h(that)h(the)f(v)-5 b(alue)26 b(no)n(w)g(is)g(the)g(same)g(as)f(the)i(v)-5 b(alue)26 b(then\).)37 b(If)26 b(a)291 2399 y(prop)r(osal)f(has)i(an)g (in)n(v)-5 b(alid)28 b(read)e(then)i(the)g(e\013ort)f(to)g(commit)h (fails;)f(no)h(c)n(hange)e(is)h(made)291 2498 y(to)22 b(the)i(v)-5 b(alue)22 b(of)h(an)n(y)f(lo)r(cation.)35 b(The)23 b(v)n(eri\014cations)e(and)i(subsequen)n(t)g(writes)f(to)h (memory)291 2598 y(are)j(p)r(erformed)h(atomically)g(with)h(resp)r(ect) f(to)h(other)f(prop)r(osal)f(commit)i(attempts.)415 2697 y(The)37 b Fo(queues)e Fr(structure)i(\(with)h(source)e(in)h Fo(scheme/big/queue.)o(scm)o Fr(\))32 b(is)37 b(a)g(thor-)291 2797 y(oughly)17 b(commen)n(ted)h(example)g(of)h(a)f(mo)r(derately)f (complex)h(data)g(structure)g(made)g(thread-)291 2897 y(safe)27 b(using)g(optimistic)h(concurrency)-7 b(.)p Black 307 3035 a Fn(\017)p Black 41 w Fo(\(call-ensuring-at)o(om)o(ici) o(ty)35 b Fq(thunk)9 b Fo(\))40 b Fn(!)i Fq(value)g(.)13 b(.)g(.)p Black 307 3135 a Fn(\017)p Black 41 w Fo(\(call-ensuring-at)o (om)o(ici)o(ty)o(!)35 b Fq(thunk)9 b Fo(\))p Black 307 3235 a Fn(\017)p Black 41 w Fo(\(ensure-atomicity)35 b Fq(exp)47 b Fo(...\))26 b Fn(!)h Fq(value)k(.)13 b(.)g(.)950 b Fr(syn)n(tax)p Black 307 3334 a Fn(\017)p Black 41 w Fo(\(ensure-atomicity)o(!)35 b Fq(exp)47 b Fo(...\))1359 b Fr(syn)n(tax)291 3473 y(If)18 b(there)h(is)f(a)g(prop)r(osal)f(in)h (place)g Fo(call-ensuring-ato)o(mi)o(cit)o(y)12 b Fr(and)18 b Fo(call-ensuring-ato)o(mi)o(cit)o(y!)291 3572 y Fr(simply)29 b(mak)n(e)f(a)h(\(tail-recursiv)n(e\))f(call)h(to)g Fq(thunk)9 b Fr(.)41 b(If)29 b(the)h(curren)n(t)e(prop)r(osal)g(is)h Fo(#f)g Fr(they)291 3672 y(create)36 b(a)i(new)g(prop)r(osal,)g (install)g(it,)j(call)c Fq(thunk)9 b Fr(,)40 b(and)e(then)g(try)f(to)h (commit)g(to)g(the)291 3772 y(prop)r(osal.)60 b(This)36 b(pro)r(cess)e(rep)r(eats,)k(with)e(a)f(new)h(prop)r(osal)f(on)g(eac)n (h)g(iteration,)i(un)n(til)291 3871 y(the)30 b(commit)h(succeeds.)45 b Fo(Call-ensuring-at)o(om)o(ici)o(ty)24 b Fr(returns)30 b(whatev)n(er)f(v)-5 b(alues)30 b(are)291 3971 y(returned)h(b)n(y)i Fq(thunk)40 b Fr(on)32 b(its)g(\014nal)g(in)n(v)n(o)r(cation,)f(while)h Fo(ensure-atomicity!)43 b Fr(discards)291 4071 y(an)n(y)26 b(suc)n(h)i(v)-5 b(alues)27 b(and)g(returns)g(nothing.)415 4170 y Fo(Ensure-atomicity)12 b Fr(and)18 b Fo(ensure-atomicity!)27 b Fr(are)17 b(macro)g(v)n(ersions)g(of)25 b Fo(call-ensuring-at)o(om)o (ic)o(ity)291 4270 y Fr(and)18 b Fo(call-ensuring-at)o(om)o(ici)o(ty)o (!)p Fr(:)26 b Fo(\(ensure-atomicity)37 b Fq(exp)49 b Fo(...\))32 b Fr(expands)18 b(in)n(to)291 4369 y Fo(\(call-ensuring-)o (ato)o(mi)o(ci)o(ty)37 b(\(lambda)k(\(\))i Fq(exp)49 b Fo(...\)\))p Fr(;)19 b(lik)n(ewise)f(for)g Fo(ensure-atomicit)o(y!) 291 4469 y Fr(and)27 b Fo(call-ensuring-at)o(omi)o(ci)o(ty)o(!)p Fr(.)p Black 307 4608 a Fn(\017)p Black 41 w Fo(\(provisional-car)35 b Fq(p)l(air)9 b Fo(\))42 b Fn(!)g Fq(value)p Black 307 4707 a Fn(\017)p Black 41 w Fo(\(provisional-cdr)35 b Fq(p)l(air)9 b Fo(\))42 b Fn(!)g Fq(value)p Black 307 4807 a Fn(\017)p Black 41 w Fo(\(provisional-set-)o(ca)o(r!)35 b Fq(p)l(air)43 b(value)6 b Fo(\))p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(provisional-set-)o(cd)o(r!)35 b Fq(p)l(air)43 b(value)6 b Fo(\))p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(provisional-cell)o(-r)o(ef)35 b Fq(c)l(el)t(l)9 b Fo(\))42 b Fn(!)f Fq(value)p Black 1681 5255 a Fr(93)p Black eop end %%Page: 94 102 TeXDict begin 94 101 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(provisional-ce)o(ll)o(-se)o (t!)35 b Fq(c)l(el)t(l)42 b(value)6 b Fo(\))p Black 755 623 a Fn(\017)p Black 42 w Fo(\(provisional-ve)o(ct)o(or-)o(re)o(f)36 b Fq(ve)l(ctor)41 b(i)8 b Fo(\))42 b Fn(!)g Fq(value)p Black 755 722 a Fn(\017)p Black 42 w Fo(\(provisional-ve)o(ct)o(or-)o (se)o(t!)35 b Fq(ve)l(ctor)42 b(i)g(value)6 b Fo(\))p Black 755 822 a Fn(\017)p Black 42 w Fo(\(provisional-st)o(ri)o(ng-)o (re)o(f)36 b Fq(ve)l(ctor)41 b(i)8 b Fo(\))42 b Fn(!)g Fq(char)p Black 755 922 a Fn(\017)p Black 42 w Fo(\(provisional-st)o (ri)o(ng-)o(se)o(t!)35 b Fq(ve)l(ctor)42 b(i)g(char)9 b Fo(\))p Black 755 1021 a Fn(\017)p Black 42 w Fo(\(provisional-by)o (te)o(-ve)o(ct)o(or-)o(re)o(f)35 b Fq(ve)l(ctor)42 b(i)8 b Fo(\))42 b Fn(!)g Fq(k)p Black 755 1121 a Fn(\017)p Black 42 w Fo(\(provisional-by)o(te)o(-ve)o(ct)o(or-)o(se)o(t!)35 b Fq(ve)l(ctor)42 b(i)g(k)9 b Fo(\))739 1272 y Fr(These)27 b(are)g(all)h(logging)e(v)n(ersions)g(of)h(their)h(Sc)n(heme)g(coun)n (terparts.)35 b(Reads)28 b(are)e(c)n(hec)n(k)n(ed)739 1371 y(when)c(the)g(curren)n(t)e(prop)r(osal)h(is)g(committed)h(and)g (writes)f(are)f(dela)n(y)n(ed)h(un)n(til)h(the)g(commit)739 1471 y(succeeds.)51 b(If)33 b(the)f(curren)n(t)g(prop)r(osal)f(is)h Fo(#f)g Fr(these)g(p)r(erform)g(exactly)g(as)g(their)g(Sc)n(heme)739 1570 y(coun)n(terparts.)863 1671 y(The)23 b(follo)n(wing)e(implemen)n (tation)i(of)f(a)g(simple)h(coun)n(ter)e(ma)n(y)h(not)g(function)h (prop)r(erly)739 1770 y(when)28 b(used)f(b)n(y)h(m)n(ultiple)g (threads.)p Black Black 739 1938 a Fo(\(define)41 b(\(make-counter\)) 826 2038 y(\(let)h(\(\(value)f(0\)\))913 2137 y(\(lambda)g(\(\))1000 2237 y(\(set!)h(value)f(\(+)i(value)f(1\)\))1000 2336 y(value\)\)\))863 2504 y Fr(Here)29 b(is)g(the)g(same)g(pro)r(cedure)f (using)h(a)f(prop)r(osal)g(to)h(ensure)f(that)h(eac)n(h)f(incremen)n(t) 739 2603 y(op)r(eration)33 b(happ)r(ens)h(atomically)-7 b(.)55 b(The)35 b(v)-5 b(alue)34 b(of)g(the)g(coun)n(ter)f(is)h(k)n (ept)g(in)h(a)e(cell)h(\(see)739 2703 y(section)p 0 0 1 TeXcolorrgb 27 w(5.6)p Black(\))27 b(to)h(allo)n(w)e(the)i(use)g(of)f (logging)f(op)r(erations.)p Black Black 739 2871 a Fo(\(define)41 b(\(make-counter\))826 2970 y(\(let)h(\(\(value)f(\(make-cell)e (0\)\)\))913 3070 y(\(lambda)i(\(\))1000 3170 y(\(ensure-atomicity)1088 3269 y(\(lambda)f(\(\))1175 3369 y(\(let)i(\(\(v)g(\(+)h (\(provisional-cel)o(l-)o(ref)37 b(value\))1698 3469 y(1\)\)\))1262 3568 y(\(provisional-cel)o(l-)o(set)o(!)g(value)42 b(v\))1262 3668 y(v\)\)\)\)\)\))863 3835 y Fr(Because)33 b Fo(ensure-atomicity)27 b Fr(creates)33 b(a)g(new)h(prop)r(osal)e (only)h(if)h(there)g(is)f(no)h(ex-)739 3935 y(isting)h(prop)r(osal)f (in)h(place,)i(m)n(ultiple)f(atomic)f(actions)g(can)g(b)r(e)g(merged)g (in)n(to)g(a)g(single)739 4034 y(atomic)f(action.)56 b(F)-7 b(or)34 b(example,)h(the)g(follo)n(wing)e(pro)r(cedure)h (incremen)n(ts)f(an)h(arbitrary)739 4134 y(n)n(um)n(b)r(er)j(of)h(coun) n(ters)f(at)g(the)h(same)f(time.)68 b(This)38 b(w)n(orks)e(ev)n(en)h (if)h(the)g(same)f(coun)n(ter)739 4234 y(app)r(ears)22 b(m)n(ultiple)i(times;)i Fo(\(step-counters!)81 b(c0)42 b(c0\))23 b Fr(w)n(ould)g(add)g(t)n(w)n(o)g(to)g(the)h(v)-5 b(alue)739 4333 y(of)27 b(coun)n(ter)g Fo(c0)p Fr(.)p Black Black 739 4501 a Fo(\(define)41 b(\(step-counters!)c(.)43 b(counters\))826 4601 y(\(ensure-atomicit)o(y)913 4700 y(\(lambda)e(\(\))1000 4800 y(\(for-each)f(\(lambda)h(\(counter\))1523 4900 y(\(counter\)\))1436 4999 y(counters\)\)\)\))p Black 2130 5255 a Fr(94)p Black eop end %%Page: 95 103 TeXDict begin 95 102 bop 0 TeXcolorgray Black Black Black Black Black 291 523 a Fo(\(define-synchro)o(niz)o(ed)o(-r)o(eco)o(rd)o (-ty)o(pe)37 b Fq(tag)51 b(typ)l(e-name)378 623 y Fo(\()p Fq(c)l(onstructor-name)d(\014eld-tag)k Fo(...\))378 722 y([\()29 b Fq(\014eld-tag)51 b Fo(...\)])378 822 y Fq(pr)l(e)l(dic)l (ate-name)378 922 y Fo(\()p Fq(\014eld-tag)g(ac)l(c)l(essor-name)f Fo([)p Fq(mo)l(di\014er-name)6 b Fo(]\))378 1021 y(...\))291 1200 y Fr(This)30 b(is)h(the)f(same)g(as)g Fo(define-record-typ)o(e)24 b Fr(except)31 b(all)f(\014eld)h(reads)e(and)i(writes)f(are)291 1299 y(logged)e(in)j(the)f(curren)n(t)f(prop)r(osal.)43 b(If)30 b(the)g(optional)g(list)g(of)g(\014eld)g(tags)f(is)h(presen)n (t)f(then)291 1399 y(only)e(those)g(\014elds)h(will)f(b)r(e)h(logged.)p Black 307 1545 a Fn(\017)p Black 41 w Fo(\(call-atomically)35 b Fq(thunk)9 b Fo(\))41 b Fn(!)g Fq(value\(s\))p Black 307 1645 a Fn(\017)p Black 41 w Fo(\(call-atomically!)35 b Fq(thunk)9 b Fo(\))p Black 307 1745 a Fn(\017)p Black 41 w Fo(\(atomically)37 b Fq(exp)47 b Fo(...\))26 b Fn(!)i Fq(value\(s\))1241 b Fr(syn)n(tax)p Black 307 1844 a Fn(\017)p Black 41 w Fo(\(atomically!)37 b Fq(exp)47 b Fo(...\))1620 b Fr(syn)n(tax)291 1991 y Fo(Call-atomically)12 b Fr(and)18 b Fo(call-atomically!)27 b Fr(are)18 b(iden)n(tical)g(to)g Fo(call-ensuring-at)o(omi)o(ci)o(ty)291 2090 y Fr(and)35 b Fo(call-ensuring-ato)o(mi)o(ci)o(ty!)55 b Fr(except)35 b(that)h(they)g(alw)n(a)n(ys)e(install)i(a)f(new)h(pro-)291 2190 y(p)r(osal)f(b)r(efore)h(calling)h Fo(thunk)p Fr(.)61 b(The)37 b(curren)n(t)e(prop)r(osal)g(is)h(sa)n(v)n(ed)f(and)h(then)h (restored)291 2289 y(after)e Fo(thunk)f Fr(returns.)62 b Fo(Call-atomically)30 b Fr(and)35 b Fo(call-atomically!)56 b Fr(are)35 b(useful)h(if)291 2389 y Fo(thunk)25 b Fr(con)n(tains)i(co) r(de)g(that)h(is)g(not)f(to)h(b)r(e)g(com)n(bined)f(with)h(an)n(y)f (other)g(op)r(eration.)415 2489 y Fo(Atomically)21 b Fr(and)j Fo(atomically!)32 b Fr(are)24 b(macro)f(v)n(ersions)g(of)31 b Fo(call-atomically)19 b Fr(and)291 2588 y Fo(call-atomically)o(!)p Fr(:)36 b Fo(\(atomically)j Fq(exp)49 b Fo(...\))43 b Fr(expands)30 b(in)n(to)f Fo(\(call-atomically)291 2688 y(\(lambda)40 b(\(\))j Fq(exp)49 b Fo(...\)\))p Fr(;)26 b(lik)n(ewise)h(for)g Fo(atomically!)32 b Fr(and)27 b Fo(call-atomically!)p Fr(.)415 2788 y(The)d(follo)n(wing)e(pro)r (cedures)h(and)g(macro)f(are)h(in)n(tended)h(primarily)e(for)i(use)f (in)h(imple-)291 2887 y(men)n(ting)e(new)h(sync)n(hronization)e (primitiv)n(es)h(or)g(complex)h(thread-safe)e(data)i(structures.)p Black 307 3050 a Fn(\017)p Black 41 w Fo(\(with-new-proposa)o(l)35 b(\()p Fq(lose)6 b Fo(\))42 b Fq(exp)47 b Fo(...\))26 b Fn(!)i Fq(value)i(.)13 b(.)g(.)636 b Fr(syn)n(tax)p Black 307 3150 a Fn(\017)p Black 41 w Fo(\(maybe-commit\))36 b Fn(!)41 b Fq(b)l(o)l(ole)l(an)p Black 307 3249 a Fn(\017)p Black 41 w Fo(\(proposal-active?)o(\))j Fn(!)e Fq(b)l(o)l(ole)l(an)p Black 307 3349 a Fn(\017)p Black 41 w Fo(\(remove-current-p)o(ro)o(pos) o(al)o(!)-6 b(\))p Black 307 3449 a Fn(\017)p Black 41 w Fo(\(invalidate-curre)o(nt)o(-pr)o(op)o(os)o(al!)f(\))291 3611 y(With-new-propos)o(al)31 b Fr(sa)n(v)n(es)36 b(the)i(curren)n(t)f (prop)r(osal,)h(installs)g(a)f(new)g(one,)j(executes)291 3711 y(the)f(forms)f(in)i(the)f(b)r(o)r(dy)-7 b(,)43 b(reinstalls)38 b(the)h(formerly)f(curren)n(t)g(prop)r(osal,)j(and)e (returns)291 3811 y(whatev)n(er)28 b(the)j(last)e(b)r(o)r(dy)i(form)e (returned.)44 b(It)30 b(also)f(binds)h Fq(lose)37 b Fr(to)30 b(a)f(th)n(unk)i(rep)r(eating)291 3910 y(the)h(pro)r(cedure)e(of)i (installing)f(a)g(new)h(pro)r(cedure)e(and)h(running)h(the)g(b)r(o)r (dy)-7 b(.)49 b(T)n(ypically)-7 b(,)291 4010 y(the)27 b(b)r(o)r(dy)h(will)g(call)f Fo(maybe-commit)c Fr(and,)k(if)h(that)g (fails,)f(tail-call)g Fq(lose)34 b Fr(to)28 b(try)f(again.)35 b(If)291 4110 y Fq(lose)40 b Fr(is)33 b(called)g(from)g(a)g(non-tail)g (p)r(osition)g(of)h(the)f(b)r(o)r(dy)-7 b(,)35 b(the)f(results)f(are)f (unsp)r(eci\014ed)291 4209 y(\(and)27 b(probably)g(harmful\).)415 4309 y Fo(Maybe-commit)19 b Fr(v)n(eri\014es)k(that)i(an)n(y)e(reads)g (logged)g(in)i(the)f(curren)n(t)g(prop)r(osal)e(are)i(still)291 4408 y(v)-5 b(alid)22 b(and,)h(if)f(so,)h(p)r(erforms)e(an)n(y)g (writes)h(that)g(it)h(con)n(tains.)34 b(A)22 b(logged)f(read)g(is)h(v) -5 b(alid)22 b(if,)i(at)291 4508 y(the)i(time)g(of)g(the)h(commit,)f (the)h(lo)r(cation)e(read)g(con)n(tains)g(the)h(same)g(v)-5 b(alue)26 b(it)g(had)g(at)g(the)291 4608 y(time)d(of)g(the)g(original)e (read)h(\(note)h(that)g(this)h(do)r(es)e(not)h(mean)g(that)g(no)f(c)n (hange)g(o)r(ccurred,)291 4707 y(simply)g(that)g(the)g(v)-5 b(alue)22 b(no)n(w)g(is)f(the)i(same)e(as)g(the)i(v)-5 b(alue)22 b(then\).)36 b Fo(Maybe-commit)17 b Fr(returns)291 4807 y Fo(#t)26 b Fr(if)j(the)f(commit)f(succeeds)g(and)h Fo(#f)f Fr(if)h(it)g(fails.)415 4907 y Fo(Proposal-active?)64 b Fr(returns)38 b Fo(#t)f Fr(if)j(a)e(prop)r(osal)f(is)i(activ)n(e,)h (and)f Fo(#f)f Fr(otherwise.)291 5006 y Fo(Remove-current-)o(pro)o(po)o (sa)o(l!)49 b Fr(remo)n(v)n(es)32 b(and)i(discards)f(the)h(curren)n(t)f (prop)r(osal;)j(this)p Black 1681 5255 a(95)p Black eop end %%Page: 96 104 TeXDict begin 96 103 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(can)18 b(b)r(e)h(used)f(to)g(clean)g(up)h(b)r(efore)f (raising)f(an)h(error.)32 b Fo(Invalidate-curre)o(nt)o(-pr)o(op)o(osa)o (l!)739 623 y Fr(ensures)d(that)h(an)n(y)f(attempt)h(to)g(commit)g(the) g(curren)n(t)f(prop)r(osal)f(will)i(fail;)h(this)f(can)g(b)r(e)739 722 y(used)25 b(if)h(an)f(op)r(eration)f(on)h(a)f(thread-safe)g(data)h (structure)g(detects)g(that)h(it)f(has)g(seen)g(the)739 822 y(data)i(structure)g(in)h(an)f(inconsisten)n(t)g(state.)863 922 y(The)33 b(follo)n(wing)e(pro)r(cedures)g(giv)n(e)h(access)f(to)h (the)h(lo)n(w-lev)n(el)e(prop)r(osal)g(mec)n(hanism.)739 1022 y(They)c(are)g(de\014ned)h(in)g(the)g Fo(low-proposals)22 b Fr(structure.)p Black 755 1189 a Fn(\017)p Black 42 w Fo(\(make-proposal\))35 b Fn(!)41 b Fq(pr)l(op)l(osal)p Black 755 1288 a Fn(\017)p Black 42 w Fo(\(current-propos)o(al)o(\))36 b Fn(!)41 b Fq(pr)l(op)l(osal)p Black 755 1388 a Fn(\017)p Black 42 w Fo(\(set-current-pr)o(op)o(osa)o(l!)35 b Fq(pr)l(op)l(osal)9 b Fo(\))863 1555 y(Make-proposal)k Fr(creates)18 b(a)g(new)g(prop)r (osal.)32 b Fo(Current-proposal)12 b Fr(and)18 b Fo(set-current-propo)o (sal)739 1655 y Fr(access)f(and)h(set)h(the)f(curren)n(t)g(thread's)g (prop)r(osal.)32 b(It)19 b(is)f(an)g(error)e(to)j(pass)e(to)h Fo(set-current-propo)o(sal)o(!)739 1755 y Fr(a)27 b(prop)r(osal)f(that) i(is)g(already)e(in)i(use.)739 2031 y Fj(7.5)135 b(Condition)46 b(v)-7 b(ariables)739 2214 y Fq(Condition)32 b(variables)37 b Fr(\(de\014ned)29 b(in)g(the)g Fo(condvars)c Fr(structure\))j(allo)n (w)f(threads)h(p)r(erform)739 2313 y(condition)36 b(sync)n (hronization:)53 b(It)36 b(allo)n(ws)f(threads)h(to)g(blo)r(c)n(k,)i(w) n(aiting)e(for)g(a)g(sp)r(eci\014ed)739 2413 y(condition|asso)r(ciated) 22 b(with)i(a)f(condition)g(v)-5 b(ariable|to)22 b(o)r(ccur,)i(and)f (other)g(threads)f(to)739 2512 y(w)n(ak)n(e)k(up)i(the)g(w)n(aiting)f (threads)g(when)h(the)g(condition)f(is)g(ful\014lled.)863 2612 y(Note)i(that,)g(in)g(Sc)n(heme)g(48,)f(condition)h(v)-5 b(ariables)27 b(w)n(ork)g(in)i(conjunction)g(with)g(pro-)739 2712 y(p)r(osals,)f(not)h(with)g(m)n(utex)f(lo)r(c)n(ks)g(or)g (semaphores,)f(as)h(in)h(most)f(other)g(implemen)n(tations)739 2812 y(of)f(this)h(concept.)p Black 755 2962 a Fn(\017)p Black 42 w Fo(\(make-condvar\))35 b Fn(!)42 b Fq(c)l(ondvar)p Black 755 3062 a Fn(\017)p Black 42 w Fo(\(make-condvar)36 b Fq(id)9 b Fo(\))41 b Fn(!)h Fq(c)l(ondvar)p Black 755 3161 a Fn(\017)p Black 42 w Fo(\(condvar?)k Fq(thing)7 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 755 3261 a Fn(\017)p Black 42 w Fo(\(set-condvar-ha)o(s-)o(val)o(ue)o(?!)35 b Fq(c)l(ondvar)43 b(b)l(o)l(ole)l(an)6 b Fo(\))p Black 755 3361 a Fn(\017)p Black 42 w Fo(\(condvar-has-va)o(lu)o(e?)44 b Fq(c)l(ondvar)9 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 755 3460 a Fn(\017)p Black 42 w Fo(\(set-condvar-va)o(lu)o(e!)35 b Fq(c)l(ondvar)43 b(value)6 b Fo(\))p Black 755 3560 a Fn(\017)p Black 42 w Fo(\(condvar-value)35 b Fq(c)l(ondvar)9 b Fo(\))42 b Fn(!)g Fq(value)p Black 755 3660 a Fn(\017)p Black 42 w Fo(\(maybe-commit-a)o(nd)o(-wa)o(it)o(-fo)o(r-)o(con)o(dv)o (ar)35 b Fq(c)l(ondvar)9 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 3759 a Fn(\017)p Black 42 w Fo(\(maybe-commit-a)o(nd)o(-se)o (t-)o(con)o(dv)o(ar!)h Fq(c)l(ondvar)g(value)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)739 3910 y Fo(Make-condvar)24 b Fr(creates)k(a)h(condition)g(v)-5 b(ariable.)41 b(\(The)29 b(optional)g Fq(id)38 b Fr(argumen)n(t)29 b(is)g(only)739 4009 y(for)39 b(debugging)h(purp)r(oses;)45 b(the)c(discloser)d(for)i (condition)g(v)-5 b(ariables)38 b(prin)n(ts)i(it)h(out)f(if)739 4109 y(presen)n(t.\))c Fo(Condvar?)e Fr(is)28 b(the)f(predicate)g(for)h (condition)f(v)-5 b(ariables.)863 4209 y(Eac)n(h)27 b(condition)g(v)-5 b(ariable)26 b(has)h(an)g(asso)r(ciated)f(v)-5 b(alue)27 b(and)h(a)f(\015ag)g Fo(has-value?)33 b Fr(sig-)739 4308 y(nalling)18 b(if)h(the)f(condition)h(has)e(already)g(o)r(ccured.)33 b(The)19 b(accessor)d(for)i(\015ag)g(is)g Fo(condvar-has-valu)o(e?)o Fr(;)739 4408 y Fo(set-condvar-has-)o(va)o(lue)o(?!)64 b Fr(sets)38 b(it.)71 b(Both)38 b(are)g(pro)n(visional)e(op)r(erations) i(and)g(go)739 4508 y(through)28 b(the)i(curren)n(t)e(prop)r(osal.)40 b Fo(Set-condvar-val)o(ue!)34 b Fr(sets)29 b(the)h(v)-5 b(alue)29 b(of)g(the)g(con-)739 4607 y(dition)f(v)-5 b(ariable)26 b(\(pro)n(visionally\),)g(and)i Fo(condvar-value)22 b Fr(extracts)27 b(it.)863 4707 y Fo(Maybe-commit-and-)o(wai)o(t-)o(fo) o(r-c)o(on)o(dva)o(r)12 b Fr(attempts)19 b(to)f(commit)h(the)g(curren)n (t)e(pro-)739 4807 y(p)r(osal.)49 b(If)33 b(the)f(commit)g(succeeds,)h (it)f(susp)r(ends)g(the)g(curren)n(t)f(thread)h(and)g(registers)e(it) 739 4907 y(with)19 b(the)g Fq(c)l(ondvar)28 b Fr(condition)18 b(v)-5 b(ariable.)33 b(Up)r(on)19 b(w)n(aking)e(up)i(again)e Fo(maybe-commit-and)o(-w)o(ai)o(t-f)o(or)o(-co)o(nd)o(va)o(r)739 5006 y Fr(returns)27 b Fo(#t)p Fr(,)g(If)h(the)g(commit)f(fails,)h Fo(maybe-commit-and)o(-se)o(t-)o(co)o(ndv)o(ar)21 b Fr(returns)27 b Fo(#f)p Fr(.)p Black 2130 5255 a(96)p Black eop end %%Page: 97 105 TeXDict begin 97 104 bop 0 TeXcolorgray Black Black Black 415 523 a Fo(Maybe-commit-and)o(-se)o(t-)o(con)o(dv)o(ar!)39 b Fr(sets)30 b(the)h(v)-5 b(alue)31 b(of)f(the)h Fq(c)l(ondvar)41 b Fr(condition)291 623 y(v)-5 b(ariable)28 b(to)i Fq(value)6 b Fr(,)31 b(\(pro)n(visionally\))d(sets)i(the)g Fo(has-value?)39 b Fr(\015ag)29 b(to)h Fo(#t)p Fr(,)f(and)h(then)g(at-)291 722 y(tempt)24 b(to)g(commit)g(the)h(curren)n(t)e(prop)r(osal.)34 b(Up)r(on)24 b(success,)g(it)g(w)n(ak)n(es)f(up)h(all)g(susp)r(ended) 291 822 y(threads)i(registered)h(with)h Fq(c)l(ondvar)37 b Fr(and)28 b(returns)f Fo(#t)p Fr(,)g(otherwise,)f(it)i(returns)f Fo(#f)p Fr(.)291 1091 y Fj(7.6)135 b(Mutual)45 b(exclusion)291 1273 y Fr(Sc)n(heme)26 b(48)g(also)g(has)h(more)f(traditional)g(m)n (utual-exclusion)g(sync)n(hronization)f(abstrac-)291 1373 y(tions,)35 b(sp)r(eci\014cally)e(m)n(utex)h(lo)r(c)n(ks)f(and)g (placeholders.)54 b(Note)34 b(that)g(t)n(ypically)f(sync)n(hro-)291 1472 y(nization)20 b(via)g(optimistic)g(concurrency)f(is)i(usually)f (preferable:)32 b(Mutual)21 b(exclusion)f(often)291 1572 y(puts)h(the)g(running)g(program)e(in)n(to)h(an)h(inconsisten)n(t)g (state)g(for)f(the)h(time)h(of)f(the)g(inclusion,)291 1671 y(whic)n(h)27 b(has)g(adv)n(erse)f(e\013ects)i(on)f(mo)r(dularit)n (y)g(and)g(in)n(terruptibilit)n(y)-7 b(.)291 1899 y Fe(7.6.1)112 b(Lo)s(c)m(ks)291 2052 y Fr(The)27 b Fo(locks)f Fr(structure)h(con)n (tains)g(bindings)g(that)h(implemen)n(t)g(standard)f(m)n(utex)g(lo)r(c) n(ks:)p Black 307 2193 a Fn(\017)p Black 41 w Fo(\(make-lock\))37 b Fn(!)42 b Fq(lo)l(ck)p Black 307 2293 a Fn(\017)p Black 41 w Fo(\(lock?)48 b Fq(thing)7 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l (an)p Black 307 2392 a Fn(\017)p Black 41 w Fo(\(obtain-lock)c Fq(lo)l(ck)9 b Fo(\))p Black 307 2492 a Fn(\017)p Black 41 w Fo(\(maybe-obtain-loc)o(k)35 b Fq(lo)l(ck)9 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 2592 a Fn(\017)p Black 41 w Fo(\(release-lock)36 b Fq(lo)l(ck)9 b Fo(\))291 2733 y(Make-lock)30 b Fr(creates)k(a)g(lo)r(c)n(k)g(in)h(the)g (\\released")d(state.)57 b Fo(Lock?)f Fr(is)35 b(the)f(predicate)g(for) 291 2833 y(lo)r(c)n(ks.)415 2932 y Fo(Obtain-lock)21 b Fr(atomically)j(c)n(hec)n(ks)h(if)32 b Fq(lo)l(ck)j Fr(is)26 b(in)f(the)h(\\released")d(state.)36 b(If)26 b(it)g(is,)g(the)291 3032 y(lo)r(c)n(k)f(is)h(put)h(in)n(to)e(the)i (\\obtained")e(state,)h(and)g Fo(obtain-lock)c Fr(returns)j (immediately)-7 b(.)36 b(If)291 3132 y(the)18 b(lo)r(c)n(k)g(is)h(in)f (the)h(\\obtained")e(state,)k(the)d(curren)n(t)g(thread)g(is)g(susp)r (ended)h(and)f(registered)291 3231 y(with)26 b(the)f(lo)r(c)n(k.)36 b Fo(Maybe-obtain-loc)o(k)p Fr(,)20 b(lik)n(e)25 b Fo(obtain-lock)p Fr(,)d(c)n(hec)n(ks)i(the)i(state)f(of)32 b Fq(lo)l(ck)9 b Fr(:)291 3331 y(if)29 b(it)h(is)f(\\released,")e(the)j(lo)r(c)n(k)f (is)g(put)h(in)n(to)f(the)g(\\obtained")f(state,)i(if)f(it)h(is)f (\\obtained,")291 3430 y Fo(maybe-obtain-lo)o(ck)22 b Fr(returns)28 b(immediately)-7 b(.)40 b Fo(Maybe-obtain-loc)o(k)23 b Fr(returns)28 b Fo(#t)f Fr(if)i(it)291 3530 y(w)n(as)d(able)h(to)h (obtain)f(the)h(lo)r(c)n(k,)f(and)h Fo(#f)e Fr(otherwise.)415 3630 y Fo(Release-lock)34 b Fr(do)r(es)k(nothing)h(if)46 b Fq(lo)l(ck)i Fr(is)39 b(in)g(the)g(\\released")e(state.)70 b(If)39 b(it)g(is)g(in)291 3729 y(the)25 b(\\obtained")g(state,)g Fo(release-lock)c Fr(causes)j(one)h(of)h(the)g(threads)e(susp)r(ended)i (on)f(an)291 3829 y Fo(obtain-lock)30 b Fr(lo)r(c)n(k)k(op)r(eration)g (to)g(con)n(tin)n(ue)h(execution.)58 b(If)35 b(that)g(thread)f(is)h (the)g(last)291 3929 y(thread)29 b(registered)g(with)h(the)h(lo)r(c)n (k,)f(the)h(lo)r(c)n(k)e(is)h(transferred)f(to)h(the)g(\\released")e (state.)291 4028 y(In)f(an)n(y)g(case,)g Fo(release-lock)c Fr(returns)k(immediately)-7 b(.)291 4255 y Fe(7.6.2)112 b(Placeholders)291 4408 y Fr(The)36 b Fo(placeholders)c Fr(structure)37 b(con)n(tains)e(bindings)i(for)f Fq(plac)l(eholders)7 b Fr(|thread-safe,)291 4508 y(write-once)26 b(v)-5 b(ariables,)26 b(akin)i(to)f(ID-90)g(I-structures)f(or)h(CML)h(I-v)-5 b(ariables.)415 4608 y(The)36 b(t)n(ypical)f(scenario)f(for)h (placeholders)f(is)i(that,)i(sa)n(y)-7 b(,)36 b(a)g(thread)f(A)h (computes)f(a)291 4707 y(v)-5 b(alue)23 b(needed)h(b)n(y)f(another)f (thread)h(B)h(at)f(some)g(unsp)r(eci\014ed)h(time.)36 b(Both)23 b(threads)g(share)291 4807 y(access)31 b(to)h(a)h (placeholder;)h(when)e(A)h(has)f(computed)h(the)g(v)-5 b(alue,)34 b(it)f(places)f(it)h(in)n(to)g(the)291 4907 y(placeholder.)39 b(When)29 b(B)g(needs)f(the)h(v)-5 b(alue,)29 b(it)g(extracts)f(it)h(from)g(placeholder,)f(blo)r(c)n(king) 291 5006 y(if)g(necessary)-7 b(.)p Black 1681 5255 a(97)p Black eop end %%Page: 98 106 TeXDict begin 98 105 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(make-placehold)o(er)o(\))36 b Fn(!)41 b Fq(plac)l(eholder)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(make-placehold)o(er)35 b Fq(id)9 b Fo(\))42 b Fn(!)f Fq(plac)l(eholder)p Black 755 722 a Fn(\017)p Black 42 w Fo(\(placeholder?)j Fq(thing)7 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 755 822 a Fn(\017)p Black 42 w Fo(\(placeholder-se)o(t!)35 b Fq(plac)l(eholder)44 b(value)6 b Fo(\))p Black 755 922 a Fn(\017)p Black 42 w Fo(\(placeholder-va)o(lu)o(e)36 b Fq(plac)l(eholder)9 b Fo(\))44 b Fn(!)d Fq(value)739 1089 y Fo(Make-placeholder)26 b Fr(creates)31 b(an)h(empt)n(y)h(placeholder.)50 b(\(The)33 b(optional)e Fq(id)42 b Fr(argumen)n(t)739 1188 y(is)37 b(only)f(for)g(debugging)g(purp)r(oses;)41 b(the)c(discloser)f(for)g (placeholders)f(prin)n(ts)i(it)g(out)g(if)739 1288 y(presen)n(t.\))f Fo(Placeholder?)c Fr(is)c(the)g(predicate)f(for)g(placeholders.)863 1388 y Fo(Placeholder-set!)j Fr(places)c(a)g(v)-5 b(alue)26 b(in)n(to)g(a)g(placeholder.)36 b(Doing)26 b(this)h(more)e(than)739 1487 y(once)32 b(signals)g(an)g(error.)50 b Fo(Placeholder-value)26 b Fr(extracts)32 b(the)h(v)-5 b(alue)33 b(from)f(the)h(place-)739 1587 y(holder)c(and)g(returns)f(it.)43 b(If)30 b(the)g(placeholder)e (is)h(empt)n(y)-7 b(,)30 b(it)g(blo)r(c)n(ks)e(the)i(curren)n(t)f (thread)739 1687 y(un)n(til)f(it)g(b)r(ecomes)f(full.)739 1963 y Fj(7.7)135 b(W)-11 b(riting)31 b(custom)f(sync)l(hronization)g (abstractions)739 2146 y Fr(The)24 b(bindings)h(explained)f(in)g(this)h (section)f(are)f(part)h(of)g(the)h Fo(threads-internal)18 b Fr(struc-)739 2245 y(ture.)41 b(They)29 b(are)f(concerned)h(with)g (susp)r(ending)g(threads)g(and)g(making)f(them)i(runnable)739 2345 y(again)c(up)r(on)i(some)f(later)g(ev)n(en)n(t.)863 2445 y(T)n(ypically)-7 b(,)33 b(a)e(susp)r(ended)i(thread)e(needs)h(to) g(b)r(e)h(recorded)d(in)j(a)e(queue)h(somewhere)739 2544 y(for)d(later)g(w)n(aking-up.)42 b(T)-7 b(o)30 b(allo)n(w)e(a)i(thread) f(to)h(b)r(e)g(recorded)e(in)i(m)n(ultiple)h(queues)e(\(sa)n(y)-7 b(,)739 2644 y(when)31 b(it)g(w)n(aits)g(for)f(one)h(of)g(a)f(n)n(um)n (b)r(er)h(of)g(ev)n(en)n(ts\),)g(suc)n(h)g Fq(thr)l(e)l(ad)i(queues)38 b Fr(are)30 b(ordinary)739 2744 y(queues)37 b(con)n(taining)g(cells)h (that,)j(in)d(turn,)i(con)n(tain)e(the)g(thread)f(ob)5 b(jects)38 b(themselv)n(es.)739 2843 y(Eac)n(h)24 b(thread)g(has)h(at)f (most)h(one)g(suc)n(h)f(cell)h(asso)r(ciated)f(with)h(it)h(whic)n(h)f (is)f(shared)g(among)739 2943 y(all)29 b(queues)g(\(or)g(other)f(data)h (structures\))g(holding)g(on)g(to)g(the)h(susp)r(ended)g(thread.)41 b(The)739 3042 y(cell)27 b(is)h(cleared)f(when)g(the)h(thread)f(is)h(w) n(ok)n(en)e(up.)p Black 755 3210 a Fn(\017)p Black 42 w Fo(\(thread-queue-e)o(mp)o(ty?)43 b Fq(thr)l(e)l(ad-queue)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 755 3309 a Fn(\017)p Black 42 w Fo(\(maybe-dequeue-)o(th)o(rea)o(d!)i Fq(thr)l(e)l(ad-queue)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)739 3476 y Fo(Thread-queue-emp)o(ty)o(?)28 b Fr(atomically)17 b(c)n(hec)n(ks)g(whether)i(the)f Fq(thr)l(e)l(ad-queue)25 b Fr(thread)18 b(queue)739 3576 y(is)29 b(empt)n(y)-7 b(,)31 b(i.e.,)f(if)g(it)g(do)r(es)f(not)h(con)n(tain)e(non-empt)n(y)h (cells.)43 b Fo(Maybe-dequeue-th)o(re)o(ad!)739 3676 y Fr(pro)n(visionally)24 b(dequeues)j(a)f(thread)g(from)g Fq(thr)l(e)l(ad-queue)33 b Fr(if)27 b(it)g(con)n(tains)f(one.)36 b(It)27 b(returns)739 3775 y(the)h(dequeued)g(thread)f(or)f Fo(#f)h Fr(if)h(the)g(queue)g(is)f(empt)n(y)-7 b(.)p Black 755 3942 a Fn(\017)p Black 42 w Fo(\(maybe-commit-a)o(nd)o(-bl)o (oc)o(k)36 b Fq(c)l(el)t(l)9 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 755 4042 a Fn(\017)p Black 42 w Fo(\(maybe-commit-a)o(nd)o(-bl)o (oc)o(k-o)o(n-)o(que)o(ue)35 b Fq(thr)l(e)l(ad-queue)6 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 755 4141 a Fn(\017)p Black 42 w Fo(\(maybe-commit-a)o(nd)o(-ma)o(ke)o(-re)o(ad)o (y)35 b Fq(thr)l(e)l(ad-or-queue)6 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)739 4309 y Fo(Maybe-commit-and)o(-b)o(loc)o(k)32 b Fr(attempts)39 b(to)g(commit)f(the)h(curren)n(t)f(prop)r(osal.)68 b(If)39 b(this)739 4408 y(succeeds,)32 b(the)g(curren)n(t)e(thread)h (is)g(blo)r(c)n(k)n(ed,)h(the)g(thread's)e(cell)i(is)f(set)h(to)f Fq(c)l(el)t(l)9 b Fr(,)33 b(and)e Fo(#t)739 4508 y Fr(is)26 b(returned.)36 b(Otherwise,)26 b Fo(#f)g Fr(is)g(returned.)36 b Fo(Maybe-commit-and)o(-b)o(lo)o(ck-)o(on)o(-qu)o(eu)o(e)20 b Fr(is)739 4607 y(lik)n(e)i Fo(maybe-commit-and)o(-bl)o(oc)o(k)p Fr(,)c(excepts)k(that)h(it)g(creates)e(a)h(fresh)g(cell)h(for)f(the)h (thread)739 4707 y(and)k(enqueues)h(it)g(in)g Fq(thr)l(e)l(ad-queue)33 b Fr(if)c(the)e(commit)h(succeeds.)863 4807 y Fo(Maybe-commit-and-)o (mak)o(e-)o(re)o(ady)23 b Fr(accepts)30 b(either)f(a)h(thread)f(ob)5 b(ject)30 b(or)f(a)h(thread)739 4907 y(queue)e(as)f(an)h(argumen)n(t.) 37 b(In)28 b(either)g(case,)f Fo(maybe-commit-and)o(-m)o(ake)o(-r)o (ead)o(y)22 b Fr(tries)27 b(to)739 5006 y(commit)c(the)g(curren)n(t)f (prop)r(osal.)33 b(If)23 b(that)g(succeeds,)g Fo(maybe-commit-and-)o (ma)o(ke-)o(re)o(ady)p Black 2130 5255 a Fr(98)p Black eop end %%Page: 99 107 TeXDict begin 99 106 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(mak)n(es)18 b(its)j(argumen)n(t)d(runnable:)33 b(if)27 b Fq(thr)l(e)l(ad-or-queue)f Fr(is)20 b(a)g(thread,)h(that)f (thread)f(is)h(made)291 623 y(runnable,)31 b(if)h(it)f(is)g(a)g(thread) g(queue,)h(all)f(threads)f(on)h(the)g(queue)g(are)f(made)h(runnable.) 291 722 y(\(In)f(the)h(latter)e(case,)h(none)g(of)g(the)g(threads)g (actually)f(runs)h(un)n(til)g(all)g(ha)n(v)n(e)f(b)r(een)h(made)291 822 y(runnable.\))46 b Fo(Maybe-commit-and)o(-ma)o(ke)o(-re)o(ad)o(y)25 b Fr(returns)30 b Fo(#t)g Fr(if)h(it)h(succeeded,)f(and)g Fo(#f)291 922 y Fr(otherwise.)291 1195 y Fj(7.8)135 b(Concurren)l(t)45 b(ML)f(abstractions)291 1377 y Fr(The)25 b(in)n(terface)g(to)g(the)h (Concurren)n(t)e(ML)h(abstractions)f(in)h(Sc)n(heme)h(48)e(is)h(mostly) g(analo-)291 1477 y(gous)h(to)h(the)h(original)d(implemen)n(tation)j (shipp)r(ed)f(with)h(SML/NJ)f([)p 0 0 1 TeXcolorrgb(9)p Black(].)37 b(Note)27 b(that)g(b)r(oth)291 1576 y(the)h(in)n(terface)e (and)i(implemen)n(tation)g(are)e(new)i(and)f(ma)n(y)g(c)n(hange)g(in)g (future)h(releases.)415 1676 y(The)23 b(main)h(terminological)d (di\013erence)i(is)g(that)h(CML)f(ev)n(en)n(ts)f(are)h(called)g Fq(r)l(endezvous)291 1775 y Fr(in)32 b(Sc)n(heme)f(48.)48 b(F)-7 b(or)32 b(more)e(information)i(on)f(programming)f(with)i(the)g (CML)g(abstrac-)291 1875 y(tions,)27 b(Repp)n(y's)g(b)r(o)r(ok)h([)p 0 0 1 TeXcolorrgb(9)p Black -1 w(])g(is)f(recommended.)291 2106 y Fe(7.8.1)112 b(Basic)38 b(rendezv)m(ous)g(com)m(binators)291 2260 y Fr(The)27 b(basic)g(rendezv)n(ous)f(com)n(binators)g(liv)n(e)h (in)h(the)g Fo(rendezvous)c Fr(structure.)p Black 307 2421 a Fn(\017)p Black 41 w Fo(never-rv)2015 b Fr(rendezv)n(ous)p Black 307 2521 a Fn(\017)p Black 41 w Fo(\(always-rv)38 b Fq(value)6 b Fo(\))41 b Fn(!)h Fq(r)l(endezvous)291 2682 y Fo(Never-rv)27 b Fr(is)k(a)f(rendezv)n(ous)f(that)i(is)g(nev)n (er)f(enabled)h(for)f(sync)n(hronization.)44 b(\(It)32 b(is)f(the)291 2781 y(same)38 b(as)h(the)h Fo(never)d Fr(ev)n(en)n(t)i(in)h(CML.\))g Fo(Always-rv)c Fr(returns)i(a)h(rendezv) n(ous)f(that)i(is)291 2881 y(alw)n(a)n(ys)c(enabled)i(for)f(sync)n (hronization,)i(and)f(alw)n(a)n(ys)f(yields)h(the)g(same)g(v)-5 b(alue)38 b Fq(value)6 b Fr(.)291 2981 y(\(This)27 b(is)h(the)g(same)f (as)g(the)h Fo(alwaysEvt)c Fr(function)k(in)g(CML.\))p Black 307 3142 a Fn(\017)p Black 41 w Fo(\(choose)39 b Fq(r)l(endezvous)j(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(r)l(endezvous)291 3303 y Fo(Choose)23 b Fr(creates)h(a)h(rendezv)n (ous)f(represen)n(ting)g(the)h(c)n(hoice)g(of)g(its)h(argumen)n(ts:)34 b(Sync)n(hro-)291 3403 y(nization)c(on)g(the)h(resulting)g(rendezv)n (ous)e(will)i(sync)n(hronize)e(on)h(one)g(of)h(the)g(argumen)n(ts)291 3502 y(to)26 b Fo(choose)p Fr(,)e(dep)r(ending)j(on)f(whic)n(h)h(b)r (ecomes)f(enabled)g(\014rst.)37 b(\(This)26 b(is)h(the)g(same)f(as)g (the)291 3602 y Fo(choose)f Fr(function)j(in)g(CML.\))p Black 307 3763 a Fn(\017)p Black 41 w Fo(\(wrap)40 b Fq(r)l(endezvous)h(pr)l(o)l(c)5 b Fo(\))42 b Fn(!)f Fq(r)l(endezvous) 291 3925 y Fo(Wrap)36 b Fr(wraps)h(a)g(p)r(ost-sync)n(hronization)f (pro)r(cedure)h(around)g Fq(r)l(endezvous)7 b Fr(:)58 b(When)39 b(the)291 4024 y(resulting)24 b(rendezv)n(ous)g(is)h(sync)n (hronized,)g Fq(r)l(endezvous)32 b Fr(is)26 b(sync)n(hronized,)e(and)h (the)h(v)-5 b(alue)291 4124 y(it)30 b(yields)g(is)h(passed)e(to)h Fq(pr)l(o)l(c)5 b Fr(;)32 b(the)f(v)-5 b(alue)30 b(returned)g(b)n(y)h Fq(pr)l(o)l(c)36 b Fr(then)30 b(is)h(the)f(result)g(of)h(the)291 4224 y(sync)n(hronization.)k(\(This)27 b(is)h(the)g(same)f(as)g(the)h (CML)f Fo(wrap)f Fr(function.\))p Black 307 4385 a Fn(\017)p Black 41 w Fo(\(guard)39 b Fq(thunk)9 b Fo(\))41 b Fn(!)g Fq(r)l(endezvous)291 4546 y Fo(Guard)21 b Fr(dela)n(ys)h(the)i (creation)f(of)g(a)g(rendezv)n(ous)f(un)n(til)i(sync)n(hronization)d (time:)36 b(It)24 b(returns)291 4646 y(a)e(rendezv)n(ous)f(that)h (will,)i(up)r(on)f(sync)n(hronization,)f(turn)g(in)n(to)h(the)f (rendezv)n(ous)f(returned)291 4745 y(b)n(y)34 b Fq(thunk)9 b Fr(.)55 b Fo(Guard)32 b Fr(can)i(b)r(e)g(used)g(to)f(p)r(erform)h (pre-sync)n(hronization)d(actions)i(suc)n(h)h(as)291 4845 y(resource)25 b(allo)r(cation.)36 b(\(This)28 b(is)g(the)f(same)h (as)e(the)i(CML)g Fo(guard)e Fr(function.\))p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(with-nack)38 b Fq(pr)l(o)l(c)5 b Fo(\))41 b Fn(!)g Fq(r)l(endezvous)p Black 1681 5255 a Fr(99)p Black eop end %%Page: 100 108 TeXDict begin 100 107 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(With-nack)p Fr(,)18 b(lik)n(e)h Fo(guard)p Fr(,)h(creates)e(a)i(dela)n(y)n(ed)f(rendezv)n(ous:)31 b(Up)r(on)20 b(sync)n(hronization,)g(the)739 623 y(rendezv)n(ous)28 b(actually)h(used)g(is)h(the)g(one)f(returned)g(b)n(y)h Fq(pr)l(o)l(c)5 b Fr(.)43 b(In)30 b(addition)g(to)f(the)h(func-)739 722 y(tionalit)n(y)i(o\013ered)g(b)n(y)h Fo(guard)p Fr(,)f Fq(pr)l(o)l(c)38 b Fr(receiv)n(es,)32 b(as)g(an)g(argumen)n(t,)h (another)f(rendezv)n(ous)739 822 y(whic)n(h)e(b)r(ecomes)f(enabled)h (when)g Fq(another)40 b Fr(rendezv)n(ous)28 b(in)n(v)n(olv)n(ed)h(in)h (the)g(sync)n(hroniza-)739 922 y(tion)i(\(via)g Fo(choose)p Fr(\))e(is)i(pic)n(k)n(ed)g(instead)g(of)g(the)h(one)f(pro)r(duced)g(b) n(y)h Fq(pr)l(o)l(c)5 b Fr(.)51 b(\(This)33 b(is)f(the)739 1021 y(same)27 b(as)g(the)h(CML)f Fo(withNack)e Fr(function.\))p Black 755 1163 a Fn(\017)p Black 42 w Fo(\(sync)39 b Fq(r)l(endezvous)7 b Fo(\))41 b Fn(!)h Fq(value)p Black 755 1262 a Fn(\017)p Black 42 w Fo(\(select)c Fq(r)l(endezvous)k(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(value)739 1404 y Fo(Sync)28 b Fr(sync)n(hronizes)g(the)i(curren)n(t)f(thread)g(on)g(rendezv)n(ous)f Fq(r)l(endezvous)7 b Fr(,)31 b(returning)e(the)739 1503 y(v)-5 b(alue)27 b(it)h(yields.)37 b Fo(Select)24 b Fr(sync)n(hronizes) i(on)h(the)h(c)n(hoice)e(of)i(its)f(argumen)n(t;)g Fo(\(select)40 b Fc(r)3565 1515 y Fk(1)739 1603 y Fo(...)p Fc(r)908 1615 y Fa(n)952 1603 y Fo(\))30 b Fr(is)g(seman)n(tically)f(equiv)-5 b(alen)n(t)30 b(to)g Fo(\(sync)41 b(\(choose)g(select)g Fc(r)3043 1615 y Fk(1)3124 1603 y Fo(...)p Fc(r)3293 1615 y Fa(n)3338 1603 y Fo(\)\))p Fr(,)30 b(but)739 1703 y(ma)n(y)20 b(b)r(e)h(implemen)n(ted)g(more)f(e\016cien)n(tly)-7 b(.)34 b(\(These)21 b(are)e(the)i(same)f(as)g(the)h(CML)g(functions)739 1802 y Fo(sync)26 b Fr(and)h Fo(select)p Fr(.\))739 2029 y Fe(7.8.2)112 b(Sync)m(hronous)39 b(c)m(hannels)739 2183 y Fr(The)j Fo(rendezvous-chann)o(els)35 b Fr(structure)42 b(con)n(tains)f(abstractions)f(for)i(bidirectional,)739 2282 y(sync)n(hronous)26 b(c)n(hannels)g(for)h(comm)n(unicating)g(b)r (et)n(w)n(een)h(t)n(w)n(o)f(threads.)p Black 755 2424 a Fn(\017)p Black 42 w Fo(\(make-channel\))35 b Fn(!)42 b Fq(channel)p Black 755 2523 a Fn(\017)p Black 42 w Fo(\(channel?)k Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)739 2665 y Fo(Make-channel)32 b Fr(creates)j(a)h(new)h(sync)n(hronous)d(c)n (hannel.)64 b(\(This)37 b(is)f(the)h(same)f(as)g(the)739 2765 y(CML)28 b Fo(channel)c Fr(function.\))38 b Fo(Channel?)c Fr(is)27 b(the)h(predicate)f(for)g(sync)n(hronous)f(c)n(hannels.)p Black 755 2906 a Fn(\017)p Black 42 w Fo(\(send-rv)38 b Fq(channel)k(value)6 b Fo(\))42 b Fn(!)g Fq(r)l(endezvous)p Black 755 3006 a Fn(\017)p Black 42 w Fo(\(send)d Fq(channel)j(value)6 b Fo(\))739 3147 y(Send-rv)25 b Fr(creates)i(a)g(rendezv)n(ous)f(that,) i(up)r(on)h(sync)n(hronization,)d(sends)h(message)g Fq(value)739 3247 y Fr(on)32 b(the)h(sync)n(hronous)e(c)n(hannel)h Fq(channel)9 b Fr(.)52 b(The)32 b(sync)n(hronization)f(suceeds)h(only)g (when)739 3347 y(another)c(thread)g(attempts)h(to)f(receiv)n(e)g(a)g (message)f(from)h Fq(channel)9 b Fr(.)40 b(\(This)29 b(is)g(the)g(same)739 3446 y(as)23 b(the)h(CML)g Fo(sendEvt)d Fr(function.\))37 b Fo(Send)22 b Fr(directly)i(sends)f(a)h(message)e Fq(value)31 b Fr(on)24 b(c)n(hannel)739 3546 y Fq(channel)9 b Fr(;)48 b Fo(\(send)41 b Fc(c)j(v)s Fo(\))c Fr(is)h(equiv)-5 b(alen)n(t)40 b(to)h Fo(\(sync)g(\(send-rv)g Fc(c)i(v)s Fo(\)\))p Fr(.)76 b(\()p Fo(Send)39 b Fr(is)i(the)739 3645 y(same)27 b(as)g(the)h(CML)f Fo(send)f Fr(function.\))p Black 755 3787 a Fn(\017)p Black 42 w Fo(\(receive-rv)36 b Fq(channel)9 b Fo(\))42 b Fn(!)g Fq(r)l(endezvous)p Black 755 3887 a Fn(\017)p Black 42 w Fo(\(receive)c Fq(channel)9 b Fo(\))739 4028 y(Receive-rv)23 b Fr(creates)k(a)g (rendezv)n(ous)f(whic)n(h,)h(up)r(on)h(sync)n(hronization,)e(receiv)n (es)g(a)h(mes-)739 4128 y(sage)38 b(on)h(c)n(hannel)g Fq(channel)9 b Fr(.)72 b(\(This)39 b(is)h(the)f(same)g(as)g(the)g(CML)g Fo(recEvt)e Fr(function.\))739 4227 y Fo(Receive)j Fr(directly)i (receiv)n(es)f(a)h(message)f(on)h(c)n(hannel)g Fq(channel)9 b Fr(;)50 b Fo(\(receive)41 b Fc(c)i(v)s Fo(\))f Fr(is)739 4327 y(equiv)-5 b(alen)n(t)35 b(to)g Fo(\(sync)41 b(\(receive-rv)e Fc(c)44 b(v)s Fo(\)\))p Fr(.)58 b(\()p Fo(Receive)33 b Fr(is)i(the)g(same)f(as)h(the)g(CML)739 4427 y Fo(recv)26 b Fr(function.\))739 4654 y Fe(7.8.3)112 b(Sync)m(hronous)39 b(v)-6 b(ariables)739 4807 y Fr(Tw)n(o)17 b(structures)h(con)n(tain)g (abstractions)f(for)g(sync)n(hronous)g(v)-5 b(ariables:)31 b(the)18 b Fo(rendezvous-placeh)o(old)o(er)o(s)739 4907 y Fr(structure)g(for)g(so-called)f Fq(plac)l(eholders)28 b Fr(\(write-once)17 b(v)-5 b(ariables\),)20 b(and)e(the)g Fo(rendezvous-jars)739 5006 y Fr(structure)27 b(for)g Fq(jars)35 b Fr(\(whic)n(h)28 b(allo)n(w)f(m)n(ultiple)h(up)r(dates.\)) p Black 2109 5255 a(100)p Black eop end %%Page: 101 109 TeXDict begin 101 108 bop 0 TeXcolorgray Black Black Black 291 523 a Fm(Placeholders)291 681 y Fr(Placeholders)35 b(are)i(write-once)g(v)-5 b(ariables.)66 b(The)38 b(placeholders)f (implemen)n(ted)h(b)n(y)g(the)291 781 y Fo(rendezvous-plac)o(eho)o(ld)o (er)o(s)15 b Fr(structure)20 b(o\013er)h(equiv)-5 b(alen)n(t)21 b(functionalit)n(y)g(to)f(the)i(place-)291 880 y(holders)36 b(implemen)n(ted)h(b)n(y)g(the)g Fo(placeholders)32 b Fr(structure)k(\(see)h(Section)p 0 0 1 TeXcolorrgb 37 w(7.6.2)p Black(\),)h(but)291 980 y(additionally)31 b(allo)n(w)f(con)n (v)n(erting)g(a)i(placeholder)e(in)n(to)i(a)f(rendezv)n(ous.)48 b(Note,)33 b(ho)n(w)n(ev)n(er,)291 1080 y(that)20 b(placeholders)e (from)i Fo(placeholders)15 b Fr(are)k(di\013eren)n(t)h(from)g(and)g (not)g(in)n(terc)n(hangeable)291 1179 y(with)28 b(placeholders)e(from)h Fo(rendezvous-place)o(hol)o(de)o(rs)p Fr(.)p Black 307 1353 a Fn(\017)p Black 41 w Fo(\(make-placeholder)o(\))35 b Fn(!)42 b Fq(plac)l(eholder)p Black 307 1453 a Fn(\017)p Black 41 w Fo(\(make-placeholder)35 b Fq(id)9 b Fo(\))41 b Fn(!)h Fq(plac)l(eholder)p Black 307 1552 a Fn(\017)p Black 41 w Fo(\(placeholder?)j Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)291 1726 y Fo(Make-placeholde)o(r)26 b Fr(creates)32 b(an)g(empt)n(y)g(placeholder.)51 b(\(The)32 b(optional)g Fq(id)42 b Fr(argumen)n(t)291 1825 y(is)36 b(only)h(for)f(debugging)g(purp)r(oses;)41 b(the)c(discloser)e(for)i (placeholders)e(prin)n(ts)h(it)i(out)e(if)291 1925 y(presen)n(t.\))43 b(\(This)31 b(is)e(the)i(same)e(as)h(the)g(CML)g Fo(iVar)f Fr(function.\))44 b Fo(Placeholder?)c Fr(is)30 b(the)291 2025 y(predicate)d(for)g(placeholders.)p Black 307 2198 a Fn(\017)p Black 41 w Fo(\(placeholder-set!)35 b Fq(plac)l(eholder)44 b(value)6 b Fo(\))291 2372 y(Placeholder-set)o(!)55 b Fr(places)35 b(a)h(v)-5 b(alue)35 b(in)n(to)h(a)f(placeholder.)60 b(Doing)36 b(this)g(more)f(than)291 2472 y(once)27 b(signals)f(an)h (error.)35 b(\(This)28 b(is)g(the)g(same)f(as)g(the)h(CML)f Fo(iPut)f Fr(function.\))p Black 307 2645 a Fn(\017)p Black 41 w Fo(\(placeholder-valu)o(e-)o(rv)35 b Fq(plac)l(eholder)9 b Fo(\))44 b Fn(!)e Fq(r)l(endezvous)p Black 307 2745 a Fn(\017)p Black 41 w Fo(\(placeholder-valu)o(e)35 b Fq(plac)l(eholder)9 b Fo(\))44 b Fn(!)e Fq(value)291 2919 y Fo(Placeholder-val)o(ue)23 b Fr(extracts)29 b(the)h(v)-5 b(alue)30 b(from)f(the)h(placeholder)e(and)i(returns)f(it.)43 b(If)291 3018 y(the)21 b(placeholder)f(is)g(empt)n(y)-7 b(,)23 b(it)e(blo)r(c)n(ks)f(the)i(curren)n(t)e(thread)g(un)n(til)h(it) h(b)r(ecomes)e(full.)36 b(\(This)291 3118 y(is)26 b(the)h(same)f(as)f (the)i(CML)g Fo(iGet)e Fr(function.\))37 b Fo(Placeholder-valu)o(e-r)o (v)20 b Fr(creates)26 b(a)g(ren-)291 3218 y(dezv)n(ous)d(that)j(will,)g (up)r(on)f(sync)n(hronization,)e(extract)i(the)g(v)-5 b(alue)25 b(from)g(the)g(placeholder)291 3317 y(and)i(yield)h(it)g(as)f (a)g(result.)36 b(\(This)28 b(is)g(the)g(same)f(as)g(the)h(CML)f Fo(iGetEvt)e Fr(function.\))291 3547 y Fm(Jars)291 3705 y Fr(A)31 b(jar)f(is)h(a)g(sync)n(hronous)e(v)-5 b(ariable)30 b(whic)n(h)g(can)h(ha)n(v)n(e)f(t)n(w)n(o)g(states:)43 b(full)32 b(and)e(empt)n(y)-7 b(.)48 b(It)291 3804 y(b)r(ecomes)34 b(full)h(when)f(a)g(v)-5 b(alue)34 b(it)h(put)g(in)n(to)f(it;)39 b(putting)c(a)f(v)-5 b(alue)34 b(in)n(to)g(a)g(full)h(jar)f(is)g(an)291 3904 y(error.)j(Con)n(v)n(ersely)-7 b(,)27 b(it)i(b)r(ecomes)f(empt)n (y)g(when)h(a)f(v)-5 b(alue)28 b(is)h(tak)n(en)f(out)g(of)g(it.)40 b(T)-7 b(rying)28 b(to)291 4004 y(tak)n(e)g(a)h(v)-5 b(alue)30 b(out)f(of)g(an)g(empt)n(y)h(jar)f(blo)r(c)n(ks)f(un)n(til)i (it)g(b)r(ecomes)f(full.)43 b(\(Jars)28 b(are)h(similar)291 4103 y(to)e(ID-90)g(M-structures.\))36 b(Jars)26 b(liv)n(e)h(in)h(the)g Fo(rendezvous-jars)22 b Fr(structure.)p Black 307 4277 a Fn(\017)p Black 41 w Fo(\(make-jar\))38 b Fn(!)j Fq(jar)p Black 307 4377 a Fn(\017)p Black 41 w Fo(\(make-jar)d Fq(id)9 b Fo(\))42 b Fn(!)f Fq(jar)p Black 307 4476 a Fn(\017)p Black 41 w Fo(\(jar?)48 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)291 4650 y Fo(Make-jar)17 b Fr(creates)i(an)h(empt)n(y)h(jar.)34 b(\(The)21 b(optional)e Fq(id)30 b Fr(argumen)n(t)20 b(is)g(only)g(for)g(debugging)291 4749 y(purp)r(oses;)25 b(the)g(discloser)e(for)i(jars)f(prin)n(ts)g(it) h(out)g(if)g(presen)n(t.\))36 b(\(This)25 b(is)g(the)g(same)f(as)h(the) 291 4849 y(CML)i Fo(mVar)f Fr(function.\))38 b Fo(Jar?)d Fr(is)28 b(the)g(predicate)f(for)g(jars.)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(jar-put!)38 b Fq(jar)k(value)6 b Fo(\))p Black 1660 5255 a Fr(101)p Black eop end %%Page: 102 110 TeXDict begin 102 109 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(Jar-put!)38 b Fr(places)28 b(a)h(v)-5 b(alue)28 b(in)n(to)h(a)g(jar)f(if)i(it)f(is)g(empt)n(y)-7 b(.)41 b(Applying)30 b Fo(jar-put!)38 b Fr(to)29 b(a)g(full)739 623 y(jar)e(is)g(an)h(error.)35 b(\(This)28 b(is)f(the)h(same)f(as)g (the)h(CML)g Fo(mPut)e Fr(function.\))p Black 755 789 a Fn(\017)p Black 42 w Fo(\(jar-take-rv)36 b Fq(plac)l(eholder)9 b Fo(\))44 b Fn(!)e Fq(r)l(endezvous)p Black 755 888 a Fn(\017)p Black 42 w Fo(\(jar-take)37 b Fq(plac)l(eholder)9 b Fo(\))44 b Fn(!)e Fq(value)739 1054 y Fo(Jar-take)30 b Fr(tak)n(es)i(a)h(v)-5 b(alue)33 b(from)g(a)g(full)g(jar,)i(empt)n (ying)d(it)i(in)g(the)f(pro)r(cess.)53 b(If)33 b(the)h(jar)739 1154 y(is)28 b(empt)n(y)-7 b(,)28 b Fo(jar-take)d Fr(blo)r(c)n(ks)i(un) n(til)i(it)f(b)r(ecomes)g(full.)38 b(\(This)29 b(is)f(the)g(same)f(as)h (the)g(CML)739 1254 y Fo(mTake)18 b Fr(function.\))35 b Fo(Jar-take-rv)16 b Fr(creates)j(a)g(rendezv)n(ous)g(that,)j(up)r(on) e(sync)n(hronization,)739 1353 y(will)27 b(extract)f(the)h(v)-5 b(alue)26 b(from)h(a)f(jar)g(and)g(empt)n(y)h(it)g(in)g(the)g(pro)r (cess.)35 b(\(This)27 b(is)g(the)g(same)739 1453 y(as)g(the)h(CML)f Fo(mTakeEvt)e Fr(function.\))739 1685 y Fe(7.8.4)112 b(Timeouts)739 1839 y Fr(The)19 b Fo(rendezvous-time)12 b Fr(structure)18 b(allo)n(ws)g(creating)f(rendezv)n(ous)g(for)h (alarms)g(and)g(time-)739 1938 y(outs:)p Black 755 2104 a Fn(\017)p Black 42 w Fo(\(after-time-rv)35 b Fq(mil)t(lise)l(c)l (onds)7 b Fo(\))43 b Fn(!)f Fq(r)l(endezvous)p Black 755 2204 a Fn(\017)p Black 42 w Fo(\(at-real-time-r)o(v)35 b Fq(time)6 b Fo(\))42 b Fn(!)f Fq(r)l(endezvous)739 2370 y Fo(After-time-rv)17 b Fr(creates)k(a)h(rendezv)n(ous)f(that)i(b) r(ecomes)f(enabled)h(at)f(time)h(in)n(terv)-5 b(al)22 b Fq(mil-)739 2470 y(lise)l(c)l(onds)40 b Fr(after)32 b(sync)n(hronization.)50 b(\(Actually)-7 b(,)34 b Fq(mil)t(lise)l(c)l (onds)41 b Fr(is)33 b(a)f(minim)n(um)h(w)n(aiting)739 2569 y(time;)22 b(the)d(actual)f(dela)n(y)g(ma)n(y)g(b)r(e)h(longer.\)) 33 b(\(This)19 b(is)f(the)i(same)e(as)g(the)h(CML)f Fo(timeOutEvt)739 2669 y Fr(function.\))42 b Fo(At-real-time-rv)24 b Fr(creates)k(a)g (rendezv)n(ous)g(that)i(b)r(ecomes)e(enabled)h(at)h(an)739 2768 y(absolute)c(time)i(sp)r(eci\014ed)f(b)n(y)h Fq(time)6 b Fr(;)28 b(this)g(absolute)e(time)i(is)f(sp)r(eci\014ed)g(in)g(the)h (same)e(w)n(a)n(y)739 2868 y(as)32 b(the)g(return)g(v)-5 b(alue)32 b Fo(real-time)d Fr(from)j(the)h Fo(time)d Fr(structure.)51 b(\(This)32 b(is)g(the)h(same)f(as)739 2968 y(the)c(CML)g Fo(atTimeEvt)23 b Fr(function.\))739 3200 y Fe(7.8.5)112 b(CML)38 b(to)f(Sc)m(heme)i(corresp)s(ondence)739 3353 y Fr(The)27 b(follo)n(wing)f(table)h(lists)g(the)g(Sc)n(heme)g (names)g(that)g(corresp)r(ond)f(to)g(particular)g(CML)739 3453 y(names.)1467 3622 y(CML)i(name)126 b(Sc)n(heme)27 b(name)p 1418 3655 1507 4 v 1418 3655 V 1953 3725 a Fo(rendezvous)1467 3825 y(never)316 b(never-rv)1467 3924 y(alwaysEvt)140 b(always-rv)1467 4024 y(choose)272 b(choose)1467 4124 y(wrap)360 b(wrap)1467 4223 y(guard)316 b(guard)1467 4323 y(withNack)184 b(with-nack)1467 4423 y(sync)360 b(sync)1467 4522 y(select)272 b(select)1757 4658 y(rendezvous-chann)o (els)1467 4757 y(channel)228 b(make-channel)1467 4857 y(sendEvt)g(send-rv)1467 4956 y(send)360 b(send)p Black 2109 5255 a Fr(102)p Black eop end %%Page: 103 111 TeXDict begin 103 110 bop 0 TeXcolorgray Black Black Black 1019 523 a Fo(recEvt)272 b(receive-rv)1019 623 y(rec)404 b(receive)1221 758 y(rendezvous-placeh)o(old)o(er)o(s)1019 858 y(iVar)360 b(make-placeholde)o(r)1019 957 y(iPut)g(placeholder-set) o(!)1019 1057 y(iGet)g(placeholder-val)o(ue)1019 1157 y(iGetEvt)228 b(placeholder-val)o(ue-)o(rv)1396 1292 y(rendezvous-jars)1019 1392 y(mVar)360 b(make-jar)1019 1491 y(mTake)316 b(jar-take)1019 1591 y(mTakeEvt)184 b(jar-take-rv)1019 1690 y(mPut)360 b(jar-put!)1396 1826 y(rendezvous-time)1019 1925 y(timeOutEvt)96 b(after-time-rv)1019 2025 y(atTimeEvt)140 b(at-real-time-rv)p Black 1660 5255 a Fr(103)p Black eop end %%Page: 104 112 TeXDict begin 104 111 bop 0 TeXcolorgray Black Black Black 739 1146 a Fl(Chapter)65 b(8)739 1562 y Fp(Mixing)77 b(Sc)-6 b(heme)77 b(48)h(and)f(C)739 1994 y Fr(This)21 b(c)n(hapter)g(describ)r(es)g(the)h(foreign-function)f(in)n(terface)f (for)h(calling)g(C)h(functions)g(from)739 2094 y(Sc)n(heme,)k(calling)f (Sc)n(heme)h(functions)g(from)f(C,)h(and)g(allo)r(cating)e(storage)g (in)i(the)g(Sc)n(heme)739 2193 y(heap.)34 b(Sc)n(heme)21 b(48)f(manages)f(stub)i(functions)g(in)g(C)g(that)g(negotiate)f(b)r(et) n(w)n(een)h(the)g(calling)739 2293 y(con)n(v)n(en)n(tions)f(of)h(Sc)n (heme)h(and)g(C)f(and)h(the)g(memory)f(allo)r(cation)f(p)r(olicies)i (of)f(b)r(oth)h(w)n(orlds.)739 2393 y(No)27 b(stub)h(generator)e(is)h (a)n(v)-5 b(ailable)27 b(y)n(et,)g(but)h(writing)f(stubs)h(is)g(a)f (straigh)n(tforw)n(ard)d(task.)863 2493 y(The)40 b(foreign-function)f (in)n(terface)g(is)g(mo)r(deled)h(after)f(the)h(Ja)n(v)-5 b(a)39 b(Nativ)n(e)g(In)n(terface)739 2593 y(\(JNI\),)33 b(more)e(information)g(can)h(b)r(e)h(found)f(at)64 b(h)n(ttp://ja)n(v) -5 b(a.sun.com/ja)n(v)g(ase/6/do)r(cs-)739 2692 y(/tec)n (hnotes/guides/jni/index.h)n(tml.)863 2792 y(Curren)n(tly)e(,)48 b(Sc)n(heme)d(48)e(supp)r(orts)i(t)n(w)n(o)e(foreign-function)h(in)n (terfaces:)70 b(The)44 b(old)739 2892 y(GCPR)n(OTECT-st)n(yle)38 b(and)j(the)g(new)f(JNI-st)n(yle)g(in)n(terface)g(\(this)h(c)n (hapter\))f(liv)n(e)g(side)739 2992 y(b)n(y)33 b(side.)53 b(The)33 b(old)g(in)n(terface)f(is)h(deprecated)g(and)g(will)g(go)f(a)n (w)n(a)n(y)f(in)i(a)g(future)h(release.)739 3091 y(Section)p 0 0 1 TeXcolorrgb 23 w(8.12)p Black 23 w(giv)n(es)22 b(a)h(recip)r(e)g(ho)n(w)g(to)h(con)n(v)n(ert)e(external)g(co)r(de)i (from)f(the)h(old)f(to)g(the)h(new)739 3191 y(in)n(terface.)739 3468 y Fj(8.1)135 b(Av)-7 b(ailable)46 b(facilities)739 3651 y Fr(The)28 b(follo)n(wing)e(facilities)i(are)e(a)n(v)-5 b(ailable)27 b(for)g(in)n(terfacing)f(b)r(et)n(w)n(een)i(Sc)n(heme)f (48)g(and)h(C:)p Black 863 3819 a Fn(\017)p Black 41 w Fr(Sc)n(heme)g(co)r(de)f(can)h(call)f(C)g(functions.)p Black 863 3987 a Fn(\017)p Black 41 w Fr(The)32 b(external)f(in)n (terface)g(pro)n(vides)f(full)j(in)n(trosp)r(ection)e(for)g(all)g(Sc)n (heme)h(ob)5 b(jects.)946 4087 y(External)25 b(co)r(de)g(ma)n(y)g(insp) r(ect,)i(mo)r(dify)-7 b(,)27 b(and)e(allo)r(cate)g(Sc)n(heme)g(ob)5 b(jects)25 b(arbitrar-)946 4186 y(ily)-7 b(.)p Black 863 4355 a Fn(\017)p Black 41 w Fr(External)27 b(co)r(de)g(ma)n(y)g (raise)g(exceptions)g(bac)n(k)f(to)i(Sc)n(heme)f(48)g(to)g(signal)g (errors.)p Black 863 4523 a Fn(\017)p Black 41 w Fr(External)c(co)r(de) h(ma)n(y)f(call)g(bac)n(k)g(in)n(to)h(Sc)n(heme.)35 b(Sc)n(heme)24 b(48)f(correctly)f(unrolls)h(the)946 4623 y(pro)r(cess)k(stac)n(k)g(on) g(non-lo)r(cal)f(exits.)p Black 863 4791 a Fn(\017)p Black 41 w Fr(External)f(mo)r(dules)h(ma)n(y)f(register)f(bindings)i (of)f(names)h(to)f(v)-5 b(alues)26 b(with)g(a)f(cen)n(tral)946 4890 y(registry)37 b(accessible)g(from)h(Sc)n(heme.)68 b(Con)n(v)n(ersely)-7 b(,)38 b(Sc)n(heme)g(co)r(de)g(can)g(register)946 4990 y(shared)27 b(bindings)h(for)f(access)f(b)n(y)h(C)h(co)r(de.)p Black 2109 5255 a(104)p Black eop end %%Page: 105 113 TeXDict begin 105 112 bop 0 TeXcolorgray Black Black Black 291 523 a Fe(8.1.1)112 b(Sc)m(heme)38 b(structures)291 686 y Fr(The)i(structure)g Fo(external-calls)35 b Fr(has)40 b(most)g(of)g(the)h(Sc)n(heme)f(functions)h(describ)r(ed)291 786 y(here.)36 b(The)28 b(others)f(are)f(in)i Fo(load-dynamic-ext)o (ern)o(al)o(s)p Fr(,)22 b(whic)n(h)27 b(has)g(the)h(functions)g(for)291 885 y(dynamic)38 b(loading)g(and)g(name)h(lo)r(okup)f(from)g(Section)p 0 0 1 TeXcolorrgb 39 w(8.4)p Black(,)i(and)f Fo(shared-bindings)p Fr(,)291 985 y(whic)n(h)27 b(has)g(the)h(additional)f(shared-binding)g (functions)h(describ)r(ed)f(in)h(section)p 0 0 1 TeXcolorrgb 27 w(8.2.3)p Black(.)291 1245 y Fe(8.1.2)112 b(C)37 b(naming)i(con)m(v) m(en)m(tions)291 1408 y Fr(The)30 b(names)g(of)g(all)g(of)h(Sc)n(heme)f (48's)f(visible)h(C)h(bindings)f(b)r(egin)g(with)h(`)p Fo(s48)p 2766 1408 27 4 v 30 w Fr(')g(\(for)f(pro-)291 1508 y(cedures,)k(v)-5 b(ariables,)33 b(and)h(macros\).)53 b(Note)33 b(that)h(the)f(new)h(foreign-function)f(in)n(terface)291 1608 y(do)r(es)f(not)h(distinguish)g(b)r(et)n(w)n(een)g(pro)r(cedures)f (and)h(macros.)51 b(Whenev)n(er)33 b(a)f(C)h(name)g(is)291 1707 y(deriv)n(ed)c(from)i(a)f(Sc)n(heme)h(iden)n(ti\014er,)g(w)n(e)f (replace)g(`)p Fo(-)p Fr(')g(with)i(`)p 2283 1707 V 31 w(')f(and)f(con)n(v)n(ert)g(letters)g(to)291 1807 y(lo)n(w)n(ercase.)52 b(A)34 b(\014nal)g(`)p Fo(?)p Fr(')55 b(con)n(v)n(erted)32 b(to)i(`)p 1656 1807 V 31 w Fo(p)p Fr(',)h(a)e(\014nal)h(`)p Fo(!)p Fr(')55 b(is)33 b(dropp)r(ed.)55 b(As)34 b(a)f(naming)291 1907 y(con)n(v)n(en)n(tion,)d(all)h(functions)g(and)g(macros)f(of)h (the)g(new)g(foreign-function)f(in)n(terface)h(end)291 2006 y(in)24 b(`)p 412 2006 V 31 w Fo(2)p Fr(')g(\(for)f(no)n(w\))h(to) f(mak)n(e)g(them)i(distinguishable)e(from)h(the)g(old)g(in)n(terface's) f(functions)291 2106 y(and)33 b(macros.)52 b(Th)n(us)32 b(the)i(C)f(macro)f(for)h(Sc)n(heme's)f Fo(pair?)52 b Fr(is)33 b Fo(s48)p 2490 2106 V 30 w(pair)p 2696 2106 V 30 w(p)p 2770 2106 V 31 w(2)g Fr(and)g(the)291 2205 y(one)28 b(for)g Fo(set-car!)36 b Fr(is)29 b Fo(s48)p 1182 2205 V 30 w(set)p 1344 2205 V 30 w(car)p 1506 2205 V 30 w(2)p Fr(.)40 b(Pro)r(cedures)27 b(and)h(macros)f(that)i(do)f(not) h(c)n(hec)n(k)291 2305 y(the)f(t)n(yp)r(es)f(of)h(their)f(argumen)n(ts) f(ha)n(v)n(e)h(`)p Fo(unsafe)p Fr(')e(in)j(their)g(names.)415 2410 y(All)j(of)f(the)h(C)f(functions)g(and)h(macros)d(describ)r(ed)i (ha)n(v)n(e)f(protot)n(yp)r(es)g(or)h(de\014nitions)291 2510 y(in)d(the)h(\014le)g Fo(c/scheme48.h)p Fr(.)291 2770 y Fe(8.1.3)112 b(Garbage)39 b(collection)e(and)i(reference)e(ob)6 b(jects)291 2933 y Fr(Sc)n(heme)24 b(48)g(uses)h(a)f(precise,)h(cop)n (ying)e(garbage)g(collector.)35 b(The)25 b(garbage)d(collector)i(ma)n (y)291 3033 y(run)34 b(whenev)n(er)g(an)g(ob)5 b(ject)34 b(is)h(allo)r(cated)e(in)i(the)g(heap.)58 b(The)34 b(collector)g(m)n (ust)g(b)r(e)h(able)291 3132 y(to)c(lo)r(cate)g(all)f(references)h(to)g (ob)5 b(jects)30 b(allo)r(cated)h(in)g(the)h(Sc)n(heme)f(48)g(heap)g (in)g(order)f(to)291 3232 y(ensure)j(that)h(storage)e(is)h(not)h (reclaimed)f(prematurely)g(and)h(to)f(up)r(date)h(references)f(to)291 3332 y(ob)5 b(jects)29 b(mo)n(v)n(ed)h(b)n(y)g(the)g(collector.)44 b(This)30 b(in)n(terface)g(tak)n(es)f(care)g(of)i(comm)n(unicating)e (to)291 3431 y(the)36 b(garbage)e(collector)h(what)h(ob)5 b(jects)36 b(it)h(uses)e(in)i(most)f(situations.)62 b(It)37 b(reliev)n(es)e(the)291 3531 y(programmer)c(from)j(ha)n(ving)g(to)g (think)h(ab)r(out)f(garbage)e(collector)h(in)n(teractions)g(in)i(the) 291 3630 y(common)27 b(case.)415 3735 y(This)k(in)n(terface)f(do)r(es)h (not)g(giv)n(e)f(external)g(co)r(de)g(direct)h(access)f(to)h(Sc)n(heme) f(ob)5 b(jects.)291 3835 y(It)30 b(in)n(tro)r(duces)g(one)g(lev)n(el)g (of)g(indirection)g(as)g(external)g(co)r(de)g(nev)n(er)f(accepts)h(or)g (returns)291 3935 y(Sc)n(heme)f(v)-5 b(alues)29 b(directly)-7 b(.)43 b(Instead,)29 b(external)g(co)r(de)g(accepts)g(or)g(returns)g Fq(r)l(efer)l(enc)l(e)j(ob-)291 4034 y(je)l(cts)k Fr(of)30 b(t)n(yp)r(e)f Fo(s48)p 908 4034 V 31 w(ref)p 1071 4034 V 30 w(t)g Fr(that)h(refer)f(to)g(Sc)n(heme)g(v)-5 b(alues)30 b(\(their)f(C)h(t)n(yp)r(e)g(is)f(de\014ned)h(to)291 4134 y(b)r(e)25 b Fo(s48)p 538 4134 V 30 w(value)p Fr(\).)34 b(This)25 b(indirection)g(is)f(only)h(needed)g(as)f(an)g(in)n(terface)g (to)h(external)f(co)r(de,)291 4233 y(in)n(terior)i(p)r(oin)n(ters)h(in) h(Sc)n(heme)f(ob)5 b(jects)27 b(are)g(una\013ected.)415 4338 y(There)g(are)g(t)n(w)n(o)g(t)n(yp)r(es)g(of)h(reference)e(ob)5 b(jects:)p Black 291 4520 a Fm(lo)s(cal)31 b(references)p Black 41 w Fr(A)h(lo)r(cal)f(reference)g(is)g(v)-5 b(alid)32 b(for)f(the)h(duration)f(of)g(a)g(function)h(call)498 4620 y(from)22 b(Sc)n(heme)h(to)f(external)f(co)r(de)i(and)f(is)g (automatically)g(freed)g(after)g(the)h(external)498 4719 y(function)28 b(returns)f(to)h(the)g(virtual)f(mac)n(hine.)p Black 291 4907 a Fm(global)j(references)p Black 42 w Fr(A)c(global)f(reference)g(remains)h(v)-5 b(alid)26 b(un)n(til)g(external)f(co)r(de)h(explic-)498 5006 y(itly)i(frees)f (it.)p Black 1660 5255 a(105)p Black eop end %%Page: 106 114 TeXDict begin 106 113 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(Sc)n(heme)30 b(ob)5 b(jects)29 b(that)h(are)f (passed)g(to)h(external)f(functions)i(are)e(passed)g(as)g(lo)r(cal)g (refer-)739 623 y(ences.)49 b(External)31 b(functions)h(return)g(Sc)n (heme)g(ob)5 b(jects)31 b(as)g(lo)r(cal)h(references.)48 b(External)739 722 y(co)r(de)36 b(has)g(to)g(man)n(ually)f(manage)h(Sc) n(heme)g(ob)5 b(jects)36 b(that)g(outliv)n(e)g(a)g(function)h(call)f (as)739 822 y(global)26 b(references.)37 b(Sc)n(heme)27 b(ob)5 b(jects)28 b(outliv)n(e)f(a)g(function)i(call)e(if)h(they)g(are) f(assigned)f(to)739 922 y(a)k(global)f(v)-5 b(ariable)29 b(of)h(the)h(external)f(co)r(de)g(or)f(stored)h(in)g(long-living)f (external)h(ob)5 b(jects,)739 1021 y(see)27 b(section)p 0 0 1 TeXcolorrgb 27 w(8.7.1)p Black(.)863 1157 y(A)41 b(lo)r(cal)e(reference)g(is)h(v)-5 b(alid)40 b(only)g(within)h(the)f (dynamic)g(con)n(text)f(of)h(the)h(nativ)n(e)739 1257 y(metho)r(d)27 b(that)g(creates)f(it.)37 b(Therefore,)26 b(a)g(lo)r(cal)g(reference)g(b)r(eha)n(v)n(es)g(exactly)g(lik)n(e)g(a)h (lo)r(cal)739 1356 y(v)-5 b(ariable)31 b(in)h(the)h(external)e(co)r (de:)45 b(It)33 b(is)f(liv)n(e)f(as)h(long)f(as)g(external)g(co)r(de)h (can)g(access)f(it.)739 1456 y(T)-7 b(o)27 b(ac)n(hiev)n(e)f(this,)h (ev)n(ery)f(external)g(function)i(in)g(the)f(in)n(terface)g(that)g (accepts)g(or)f(returns)739 1556 y(reference)f(ob)5 b(jects)25 b(tak)n(es)g(a)h Fq(c)l(al)t(l)j(obje)l(ct)35 b Fr(of)26 b(t)n(yp)r(e)g Fo(s48)p 2453 1556 27 4 v 30 w(call)p 2659 1556 V 30 w(t)f Fr(as)h(its)g(\014rst)g(argumen)n(t.)35 b(A)739 1655 y(call)c(ob)5 b(ject)31 b(corresp)r(onds)e(to)i(a)g (particular)f(call)g(from)h(Sc)n(heme)g(to)g(C.)g(The)h(call)e(ob)5 b(ject)739 1755 y(holds)40 b(all)g(the)h(references)e(that)i(b)r(elong) e(to)i(a)f(call)g(\(lik)n(e)g(the)h(call's)e(argumen)n(ts)g(and)739 1854 y(return)34 b(v)-5 b(alue\))34 b(to)g(external)g(co)r(de)g(from)g (Sc)n(heme.)57 b(External)33 b(co)r(de)h(ma)n(y)f(pass)h(a)g(lo)r(cal) 739 1954 y(reference)i(through)h(m)n(ultiple)g(external)g(functions.)65 b(The)38 b(foreign-function)e(in)n(terface)739 2054 y(automatically)d (frees)h(all)h(the)g(lo)r(cal)f(references)f(a)h(call)h(ob)5 b(ject)34 b(o)n(wns,)h(along)f(with)h(the)739 2153 y(call)27 b(ob)5 b(ject)27 b(itself,)i(when)e(an)h(external)f(call)g(returns)g (to)g(Sc)n(heme.)863 2289 y(This)f(means)g(that)g(in)g(the)g(common)g (case)f(of)h(Sc)n(heme)g(calling)f(an)h(external)f(function)739 2389 y(that)e(do)r(es)g(some)f(w)n(ork)f(on)i(its)g(argumen)n(ts)e(and) i(returns)f(without)h(stashing)f(an)n(y)g(Sc)n(heme)739 2488 y(ob)5 b(jects)26 b(in)g(global)g(v)-5 b(ariables)25 b(or)g(global)g(data)h(structures,)g(the)h(external)e(co)r(de)h(do)r (es)g(not)739 2588 y(need)34 b(to)f(do)h(an)n(y)f(b)r(o)r(okk)n (eeping,)h(since)f(all)g(the)i(reference)d(ob)5 b(jects)33 b(the)i(external)d(co)r(de)739 2688 y(accum)n(ulates)37 b(are)g(lo)r(cal)g(references.)66 b(Once)37 b(the)i(call)e(returns,)j (the)e(foreign-function)739 2787 y(in)n(terface)27 b(frees)g(all)g(the) h(lo)r(cal)f(references.)863 2923 y(F)-7 b(or)34 b(example,)h(the)g (functions)f(to)g(construct)g(and)g(access)f(pairs)g(are)g(declared)h (lik)n(e)739 3023 y(this:)p Black 755 3281 a Fn(\017)p Black 42 w Fo(s48)p 976 3281 V 30 w(ref)p 1138 3281 V 30 w(t)41 b(s48)p 1385 3281 V 30 w(cons)p 1591 3281 V 30 w(2\(s48)p 1841 3281 V 29 w(call)p 2046 3281 V 30 w(t)g(call,)e(s48)p 2552 3281 V 30 w(ref)p 2714 3281 V 31 w(t)i(car,)f(s48)p 3178 3281 V 30 w(ref)p 3340 3281 V 30 w(t)h(cdr\);)p Black 755 3381 a Fn(\017)p Black 42 w Fo(s48)p 976 3381 V 30 w(ref)p 1138 3381 V 30 w(t)g(s48)p 1385 3381 V 30 w(car)p 1547 3381 V 30 w(2\(s48)p 1797 3381 V 29 w(call)p 2002 3381 V 30 w(t)g(call,)f(s48)p 2509 3381 V 30 w(ref)p 2671 3381 V 30 w(t)h(pair\);)p Black 755 3480 a Fn(\017)p Black 42 w Fo(s48)p 976 3480 V 30 w(ref)p 1138 3480 V 30 w(t)g(s48)p 1385 3480 V 30 w(cdr)p 1547 3480 V 30 w(2\(s48)p 1797 3480 V 29 w(call)p 2002 3480 V 30 w(t)g(call,)f(s48)p 2509 3480 V 30 w(ref)p 2671 3480 V 30 w(t)h(pair\);)863 3738 y Fr(This)23 b(foreign-function)e (in)n(terface)g(tak)n(es)h(a)f(signi\014can)n(t)h(burden)g(o\013)g(the) h(programmer)739 3838 y(as)31 b(it)g(handles)g(most)g(common)g(cases)g (automatically)-7 b(.)47 b(If)31 b(all)g(the)h(Sc)n(heme)f(ob)5 b(jects)31 b(are)739 3938 y(liv)n(e)g(for)g(the)h(exten)n(t)g(of)f(the) h(curren)n(t)f(external)g(call,)h(the)g(programmer)e(do)r(es)h(not)g (ha)n(v)n(e)739 4037 y(to)c(do)g(an)n(ything)g(at)g(all.)37 b(Since)27 b(the)h(lifetime)g(of)f(the)h(Sc)n(heme)f(ob)5 b(jects)27 b(is)h(then)f(iden)n(tical)739 4137 y(with)33 b(the)g(lifetime)g(of)g(the)g(according)d(reference)i(ob)5 b(jects.)51 b(In)33 b(this)g(case,)g(the)g(systems)739 4236 y(automatically)g(manages)g(b)r(oth)i(for)e(the)i(programmer.)54 b(Using)34 b(this)h(foreign-function)739 4336 y(in)n(terface)e(do)r(es) g(not)h(mak)n(e)f(the)h(co)r(de)g(more)f(complex;)j(the)e(co)r(de)g (sta)n(ys)e(compact)h(and)739 4436 y(readable.)i(The)27 b(programmer)d(has)i(to)h(get)f(accustomed)g(to)g(passing)g(the)h(call) f(argumen)n(t)739 4535 y(around.)863 4671 y(Ho)n(w)i(to)g(manage)f(Sc)n (heme)h(ob)5 b(jects)28 b(that)g(outliv)n(e)g(the)h(curren)n(t)e(call)h (is)g(describ)r(ed)g(in)739 4771 y(section)p 0 0 1 TeXcolorrgb 27 w(8.7.1)p Black(.)863 4907 y(Section)p 0 0 1 TeXcolorrgb 19 w(8.12)p Black 17 w(giv)n(es)17 b(a)h(recip)r(e)g(ho)n(w)g(to)g(con) n(v)n(ert)f(external)h(co)r(de)g(from)g(the)h(old)f(GCPR)n(OTECT-)739 5006 y(st)n(yle)27 b(in)n(terface)g(to)g(the)h(new)g(JNI-st)n(yle)f(in) n(terface.)p Black 2109 5255 a(106)p Black eop end %%Page: 107 115 TeXDict begin 107 114 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(8.2)135 b(Shared)45 b(bindings)291 705 y Fr(Shared)c(bindings)h(are)e(the)j(means)e(b)n(y)g(whic)n(h)h (named)g(v)-5 b(alues)41 b(are)g(shared)g(b)r(et)n(w)n(een)291 805 y(Sc)n(heme)35 b(co)r(de)h(and)f(C)h(co)r(de.)61 b(There)35 b(are)f(t)n(w)n(o)h(separate)f(tables)i(of)f(shared)g (bindings,)291 904 y(one)28 b(for)g(v)-5 b(alues)28 b(de\014ned)i(in)e (Sc)n(heme)h(and)g(accessed)e(from)i(C)f(and)h(the)g(other)f(for)g(v)-5 b(alues)291 1004 y(going)30 b(the)i(other)e(w)n(a)n(y)-7 b(.)48 b(Shared)30 b(bindings)i(actually)e(bind)i(names)f(to)h(cells,)g (to)f(allo)n(w)f(a)291 1103 y(name)d(to)h(b)r(e)g(lo)r(ok)n(ed)f(up)h (b)r(efore)f(it)h(has)g(b)r(een)g(assigned.)36 b(This)28 b(is)g(necessary)e(b)r(ecause)h(C)291 1203 y(initialization)j(co)r(de)h (ma)n(y)f(b)r(e)h(run)g(b)r(efore)f(or)g(after)g(the)i(corresp)r (onding)c(Sc)n(heme)j(co)r(de,)291 1303 y(dep)r(ending)25 b(on)f(whether)h(the)g(Sc)n(heme)g(co)r(de)g(is)f(in)h(the)h(resumed)e (image)g(or)g(is)h(run)f(in)i(the)291 1402 y(curren)n(t)g(session.)291 1634 y Fe(8.2.1)112 b(Exp)s(orting)37 b(Sc)m(heme)i(v)-6 b(alues)38 b(to)f(C)p Black 307 1787 a Fn(\017)p Black 41 w Fo(\(define-exported-)o(bi)o(ndi)o(ng)e Fq(name)41 b(value)6 b Fo(\))42 b Fn(!)g Fq(shar)l(e)l(d-binding)p Black 307 1931 a Fn(\017)p Black 41 w Fo(s48)p 527 1931 27 4 v 30 w(ref)p 689 1931 V 30 w(t)g(s48)p 937 1931 V 30 w(get)p 1099 1931 V 30 w(imported)p 1481 1931 V 28 w(binding)p 1817 1931 V 28 w(2\(char)d(*name\))p Black 307 2030 a Fn(\017)p Black 41 w Fo(s48)p 527 2030 V 30 w(ref)p 689 2030 V 30 w(t)j(s48)p 937 2030 V 30 w(get)p 1099 2030 V 30 w(imported)p 1481 2030 V 28 w(binding)p 1817 2030 V 28 w(local)p 2065 2030 V 30 w(2\(s48)p 2315 2030 V 29 w(call)p 2520 2030 V 30 w(t)f(call,)e(char)h(*name\))p Black 307 2130 a Fn(\017)p Black 41 w Fo(s48)p 527 2130 V 30 w(ref)p 689 2130 V 30 w(t)i(s48)p 937 2130 V 30 w(shared)p 1231 2130 V 29 w(binding)p 1568 2130 V 28 w(ref)p 1728 2130 V 30 w(2\(s48)p 1978 2130 V 30 w(call)p 2184 2130 V 29 w(t)f(call,)f(s48)p 2690 2130 V 30 w(ref)p 2852 2130 V 30 w(t)h(shared)p 3231 2130 V 29 w(binding\))291 2274 y(Define-exported)o(-bi)o(nd)o(in)o(g)16 b Fr(mak)n(es)k Fq(value)29 b Fr(a)n(v)-5 b(ailable)20 b(to)h(C)h(co)r(de)f(under)h Fq(name)6 b Fr(,)23 b(whic)n(h)291 2374 y(m)n(ust)32 b(b)r(e)g(a)f Fq(string)7 b Fr(,)33 b(creating)e(a)h(new)f(shared)g (binding)h(if)h(necessary)-7 b(.)48 b(The)31 b(C)h(function)291 2473 y Fo(s48)p 428 2473 V 30 w(get)p 590 2473 V 30 w(imported)p 972 2473 V 28 w(binding)p 1308 2473 V 28 w(2)f Fr(returns)e(a)h(global) g(reference)f(to)h(the)h(shared)f(binding)291 2573 y(de\014ned)18 b(for)g Fo(name)p Fr(,)h(again)e(creating)g(it)i(if)g(necessary)-7 b(,)19 b Fo(s48)p 2079 2573 V 30 w(get)p 2241 2573 V 30 w(imported)p 2623 2573 V 28 w(binding)p 2959 2573 V 28 w(local)p 3207 2573 V 30 w(2)291 2673 y Fr(returns)f(a)h(lo)r(cal) g(reference)g(to)g(the)h(shared)e(binding)i(\(see)f(section)p 0 0 1 TeXcolorrgb 19 w(8.1.3)p Black 18 w(for)g(details)g(on)g(ref-)291 2772 y(erence)i(ob)5 b(jects\).)35 b(The)22 b(C)g(macro)f Fo(s48)p 1514 2772 V 30 w(shared)p 1808 2772 V 29 w(binding)p 2145 2772 V 28 w(ref)p 2305 2772 V 31 w(2)g Fr(dereferences)g(a)h (shared)291 2872 y(binding,)27 b(returning)g(its)h(curren)n(t)f(v)-5 b(alue.)291 3103 y Fe(8.2.2)112 b(Exp)s(orting)37 b(C)h(v)-6 b(alues)38 b(to)f(Sc)m(heme)291 3256 y Fr(Since)29 b(shared)f(bindings) h(are)f(de\014ned)i(during)e(initialization,)h(i.e.)42 b(outside)29 b(an)g(external)291 3356 y(call,)g(there)h(is)f(no)h(call) f(ob)5 b(ject.)42 b(Therefore,)29 b(exp)r(orting)g(shared)g(bindings)g (from)h(C)f(do)r(es)291 3456 y(not)e(use)h(the)g(new)f (foreign-function)g(in)n(terfaces)g(sp)r(eci\014cations.)p Black 307 3600 a Fn(\017)p Black 41 w Fo(void)40 b(s48)p 743 3600 V 30 w(define)p 1037 3600 V 29 w(exported)p 1418 3600 V 28 w(binding\(char)d(*name,)i(s48)p 2446 3600 V 30 w(value)g(v\))p Black 307 3744 a Fn(\017)p Black 41 w Fo(\(lookup-imported-)o(bi)o(ndi)o(ng)c Fq(string)7 b Fo(\))41 b Fn(!)h Fq(shar)l(e)l(d-binding)p Black 307 3843 a Fn(\017)p Black 41 w Fo(\(shared-binding-r)o(ef)35 b Fq(shar)l(e)l(d-binding)7 b Fo(\))43 b Fn(!)f Fq(value)291 3987 y Fr(These)f(are)g(used)h(to)g(de\014ne)g(shared)f(bindings)g (from)h(C)g(and)f(to)h(access)f(them)h(from)291 4087 y(Sc)n(heme.)35 b(Again,)24 b(if)g(a)f(name)g(is)g(lo)r(ok)n(ed)f(up)i (b)r(efore)f(it)h(has)f(b)r(een)h(de\014ned,)g(a)f(new)h(binding)291 4187 y(is)j(created)g(for)g(it.)415 4286 y(The)32 b(common)g(case)f(of) h(exp)r(orting)g(a)f(C)h(function)h(to)f(Sc)n(heme)g(can)g(b)r(e)g (done)g(using)291 4386 y(the)c(macro)e Fo(s48)p 820 4386 V 30 w(export)p 1114 4386 V 29 w(function\()p Fq(name)6 b Fo(\))p Fr(.)33 b(This)28 b(expands)f(in)n(to)p Black Black 291 4547 a Fo(s48)p 428 4547 V 30 w(define)p 722 4547 V 29 w(exported)p 1103 4547 V 28 w(binding\(")p Fq(name)6 b Fo(",)1642 4646 y(s48)p 1779 4646 V 30 w(enter)p 2029 4646 V 29 w(pointer\()p Fq(name)g Fo(\)\))291 4807 y Fr(whic)n(h)32 b(b)r(o)n(xes)f(the)i(function)g(p)r(oin)n(ter)f(in)n (to)g(a)f(Sc)n(heme)i(b)n(yte)f(v)n(ector)f(and)h(then)h(exp)r(orts)291 4907 y(it.)i(Note)24 b(that)f Fo(s48)p 913 4907 V 31 w(enter)p 1164 4907 V 29 w(pointer)d Fr(allo)r(cates)j(space)f(in)i (the)g(Sc)n(heme)f(heap)g(and)g(migh)n(t)291 5006 y(trigger)j(a)h (garbage)e(collection;)i(see)g(Section)p 0 0 1 TeXcolorrgb 28 w(8.7)p Black(.)p Black 1660 5255 a(107)p Black eop end %%Page: 108 116 TeXDict begin 108 115 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(import-definit)o(io)o (n)36 b Fq(name)6 b Fo(\))1455 b Fr(syn)n(tax)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(import-definit)o(io)o(n)36 b Fq(name)41 b(c-name)6 b Fo(\))1151 b Fr(syn)n(tax)739 777 y(These)31 b(macros)g(simplify)h(imp)r(orting)g(de\014nitions)f (from)h(C)g(to)f(Sc)n(heme.)50 b(They)32 b(expand)739 876 y(in)n(to)863 977 y Fo(\(define)41 b Fq(name)50 b Fo(\(lookup-imported-)o(bi)o(nd)o(ing)37 b Fq(c-name)6 b Fo(\)\))739 1078 y Fr(where)29 b Fq(c-name)36 b Fr(is)30 b(as)f(supplied)h(for)f(the)i(second)e(form.)43 b(F)-7 b(or)29 b(the)h(\014rst)g(form)f Fq(c-name)36 b Fr(is)739 1178 y(deriv)n(ed)25 b(from)h Fq(name)33 b Fr(b)n(y)26 b(replacing)f(`)p Fo(-)p Fr(')h(with)h(`)p 2251 1178 27 4 v 31 w(')g(and)f(con)n(v)n(erting)e(letters)j(to)f(lo)n(w)n (ercase.)739 1278 y(F)-7 b(or)27 b(example,)g Fo(\(import-definiti)o (on)37 b(my-foo\))25 b Fr(expands)i(in)n(to)863 1379 y Fo(\(define)41 b(my-foo)g(\(lookup-imported-)o(bi)o(ndi)o(ng)c("my)p 2744 1379 V 30 w(foo"\)\))739 1619 y Fe(8.2.3)112 b(Complete)38 b(shared)h(binding)g(in)m(terface)739 1775 y Fr(There)24 b(are)f(a)i(n)n(um)n(b)r(er)f(of)g(other)g(Sc)n(heme)h(functions)g (related)f(to)g(shared)g(bindings;)h(these)739 1875 y(are)h(in)i(the)g (structure)f Fo(shared-bindings)p Fr(.)p Black 755 2029 a Fn(\017)p Black 42 w Fo(\(shared-binding)o(?)44 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 2128 a Fn(\017)p Black 42 w Fo(\(shared-binding)o(-n)o(ame)35 b Fq(shar)l(e)l(d-binding)7 b Fo(\))43 b Fn(!)e Fq(string)p Black 755 2228 a Fn(\017)p Black 42 w Fo(\(shared-binding)o(-i)o(s-i)o (mp)o(ort)o(?)j Fq(shar)l(e)l(d-binding)7 b Fo(\))43 b Fn(!)e Fq(b)l(o)l(ole)l(an)p Black 755 2328 a Fn(\017)p Black 42 w Fo(\(shared-binding)o(-s)o(et!)35 b Fq(shar)l(e)l(d-binding) 43 b(value)6 b Fo(\))p Black 755 2427 a Fn(\017)p Black 42 w Fo(\(define-importe)o(d-)o(bin)o(di)o(ng)35 b Fq(string)41 b(value)6 b Fo(\))p Black 755 2527 a Fn(\017)p Black 42 w Fo(\(lookup-exporte)o(d-)o(bin)o(di)o(ng)35 b Fq(string)7 b Fo(\))p Black 755 2627 a Fn(\017)p Black 42 w Fo(\(undefine-impor)o (te)o(d-b)o(in)o(din)o(g)35 b Fq(string)7 b Fo(\))p Black 755 2726 a Fn(\017)p Black 42 w Fo(\(undefine-expor)o(te)o(d-b)o(in)o (din)o(g)35 b Fq(string)7 b Fo(\))739 2880 y(Shared-binding?)32 b Fr(is)27 b(the)i(predicate)e(for)h(shared-bindings.)36 b Fo(Shared-binding-n)o(ame)739 2980 y Fr(returns)19 b(the)h(name)f(of)h(a)f(binding.)35 b Fo(Shared-binding-i)o(s-)o(im)o (por)o(t?)28 b Fr(is)19 b(true)h(if)g(the)g(bind-)739 3079 y(ing)26 b(w)n(as)f(de\014ned)h(from)g(C.)g Fo(Shared-binding-se)o (t!)k Fr(c)n(hanges)25 b(the)h(v)-5 b(alue)26 b(of)g(a)g(binding.)739 3179 y Fo(Define-imported-)o(bi)o(ndi)o(ng)35 b Fr(and)41 b Fo(lookup-exported)o(-bi)o(nd)o(ing)34 b Fr(are)40 b(Sc)n(heme)i(v)n(er-)739 3279 y(sions)h(of)51 b Fo(s48)p 1214 3279 V 30 w(define)p 1508 3279 V 29 w(exported)p 1889 3279 V 28 w(binding)42 b Fr(and)i Fo(s48)p 2577 3279 V 30 w(lookup)p 2871 3279 V 29 w(imported)p 3252 3279 V 28 w(binding)p Fr(.)739 3378 y(The)38 b(t)n(w)n(o)f Fo(undefine-)e Fr(pro)r(cedures)i(remo)n(v)n(e)f(bindings)i(from)g(the) h(t)n(w)n(o)e(tables.)68 b(They)739 3478 y(do)27 b(nothing)h(if)g(the)g (name)f(is)h(not)f(found)h(in)g(the)g(table.)863 3579 y(The)g(follo)n(wing)f(C)g(macros)f(corresp)r(ond)g(to)i(the)g(Sc)n (heme)f(functions)h(ab)r(o)n(v)n(e.)p Black 755 3733 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 3733 V 30 w(shared)p 1691 3733 V 29 w(binding)p 2028 3733 V 28 w(p\(s48)p 2276 3733 V 30 w(call)p 2482 3733 V 29 w(t)42 b(call,)d(x\))p Black 755 3833 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 3833 V 30 w(shared)p 1691 3833 V 29 w(binding)p 2028 3833 V 28 w(is)p 2144 3833 V 31 w(import)p 2439 3833 V 29 w(p\(s48)p 2688 3833 V 29 w(call)p 2893 3833 V 30 w(t)41 b(call,)e(s48)p 3399 3833 V 31 w(ref)p 3562 3833 V 30 w(t)i(s)p 3721 3833 V 31 w(b\))p Black 755 3932 a Fn(\017)p Black 42 w Fo(s48)p 976 3932 V 30 w(ref)p 1138 3932 V 30 w(t)g(s48)p 1385 3932 V 30 w(shared)p 1679 3932 V 29 w(binding)p 2016 3932 V 28 w(name\(s48)p 2396 3932 V 28 w(call)p 2600 3932 V 30 w(t)g(call,)f(s48)p 3107 3932 V 30 w(ref)p 3269 3932 V 30 w(t)h(s)p 3428 3932 V 31 w(b\))p Black 755 4032 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 4032 V 30 w(shared)p 1693 4032 V 29 w(binding)p 2030 4032 V 28 w(set\(s48)p 2366 4032 V 29 w(call)p 2571 4032 V 30 w(t)41 b(call,)e(s48)p 3077 4032 V 30 w(ref)p 3239 4032 V 30 w(t)j(s)p 3399 4032 V 31 w(b,)e(s48)p 3690 4032 V 30 w(ref)p 3852 4032 V 31 w(t)h(v\))739 4314 y Fj(8.3)135 b(Calling)47 b(C)e(functions)f(from)i(Sc)l(heme)739 4499 y Fr(There)34 b(are)f(di\013eren)n(t)h(w)n(a)n(ys)f(to)h(call)g(C) g(functions)h(from)e(Sc)n(heme,)j(dep)r(ending)f(on)f(ho)n(w)739 4599 y(the)28 b(C)g(function)g(w)n(as)e(obtained.)p Black 755 4753 a Fn(\017)p Black 42 w Fo(\(call-imported-)o(bi)o(ndi)o(ng)o (-2)35 b Fq(binding)43 b(ar)l(g)2342 4765 y Fk(0)2421 4753 y Fq(.)13 b(.)g(.)g Fo(\))51 b Fn(!)41 b Fq(value)739 4907 y Fr(Eac)n(h)19 b(of)h(these)g(applies)f(its)h(\014rst)g(argumen)n (t,)h(a)e(C)h(function)h(that)f(accepts)g(and/or)e(returns)739 5006 y(ob)5 b(jects)25 b(of)h(t)n(yp)r(e)f Fo(s48)p 1435 5006 V 31 w(ref)p 1598 5006 V 30 w(t)g Fr(and)g(has)h(its)f(\014rst)h (argumen)n(t)e(of)i(t)n(yp)r(e)g Fo(s48)p 3065 5006 V 30 w(call)p 3271 5006 V 30 w(t)p Fr(,)f(to)h(the)p Black 2109 5255 a(108)p Black eop end %%Page: 109 117 TeXDict begin 109 116 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(rest)30 b(of)i(the)f(argumen)n(ts.)47 b(F)-7 b(or)31 b Fo(call-imported-b)o(ind)o(in)o(g-2)24 b Fr(the)32 b(function)g(argumen)n(t)291 623 y(m)n(ust)27 b(b)r(e)h(an)g(imp)r(orted)f(binding.)415 727 y(F)-7 b(or)37 b(all)h(of)g(these,)i(the)f(in)n(terface)e(passes)f(the)j (curren)n(t)e(call)g(ob)5 b(ject)38 b(and)g(the)g Fq(ar)l(g)3127 739 y Fa(i)291 827 y Fr(v)-5 b(alues)21 b(to)h(the)g(C)g(function)g (and)g(the)g(v)-5 b(alue)22 b(returned)f(is)h(that)g(returned)f(b)n(y)h (C)g(pro)r(cedure.)291 927 y(No)32 b(automatic)f(represen)n(tation)g (con)n(v)n(ersion)f(o)r(ccurs)h(for)h(either)g(argumen)n(ts)f(or)g (return)291 1026 y(v)-5 b(alues.)47 b(Up)32 b(to)f(t)n(w)n(elv)n(e)f (argumen)n(ts)g(ma)n(y)h(b)r(e)h(passed.)47 b(There)31 b(is)g(no)g(metho)r(d)h(supplied)291 1126 y(for)25 b(returning)h(m)n (ultiple)h(v)-5 b(alues)25 b(to)h(Sc)n(heme)h(from)e(C)i(\(or)e(vice)h (v)n(ersa\))f(\(mainly)h(b)r(ecause)291 1225 y(C)h(do)r(es)g(not)h(ha)n (v)n(e)e(m)n(ultiple)j(return)e(v)-5 b(alues\).)415 1330 y(Keyb)r(oard)34 b(in)n(terrupts)h(that)g(o)r(ccur)g(during)g(a)g(call) g(to)g(a)g(C)g(function)h(are)e(ignored)291 1430 y(un)n(til)28 b(the)h(function)g(returns)e(to)h(Sc)n(heme)h(\(this)f(is)g(clearly)g (a)f(problem;)i(w)n(e)e(are)h(w)n(orking)291 1529 y(on)f(a)g (solution\).)p Black 307 1694 a Fn(\017)p Black 41 w Fo(\(import-lambda-de)o(fi)o(nit)o(io)o(n-)o(2)36 b Fq(name)47 b Fo(\()p Fq(formal)52 b Fo(...\)\))517 b Fr(syn)n(tax)p Black 307 1793 a Fn(\017)p Black 41 w Fo(\(import-lambda-de)o(fi)o(nit) o(io)o(n-)o(2)36 b Fq(name)47 b Fo(\()p Fq(formal)52 b Fo(...\))39 b Fq(c-name)6 b Fo(\))209 b Fr(syn)n(tax)291 1958 y(These)27 b(macros)e(simplify)j(imp)r(orting)f(functions)h(from)f (C)g(that)h(follo)n(w)e(the)i(return)f(v)-5 b(alue)291 2057 y(and)26 b(argumen)n(t)g(con)n(v)n(en)n(tions)f(of)i(the)g (foreign-function)f(in)n(terface)g(and)h(use)f Fo(s48)p 2880 2057 27 4 v 31 w(call)p 3087 2057 V 29 w(t)291 2157 y Fr(and)j Fo(s48)p 591 2157 V 30 w(ref)p 753 2157 V 30 w(t)g Fr(as)g(their)h(argumen)n(t)e(and)h(return)g(t)n(yp)r(es.)43 b(They)29 b(de\014ne)h Fq(name)36 b Fr(to)29 b(b)r(e)h(a)291 2256 y(function)c(with)g(the)g(giv)n(en)f(formals)f(that)i(applies)f (those)h(formals)e(to)i(the)g(corresp)r(onding)291 2356 y(C)h(binding.)37 b Fq(C-name)6 b Fr(,)29 b(if)f(supplied,)g(should)f (b)r(e)h(a)f(string.)36 b(These)28 b(expand)f(in)n(to)p Black Black 291 2563 a Fo(\(define)40 b(temp)i(\(lookup-imported-)o(bi) o(ndi)o(ng)37 b Fq(c-name)6 b Fo(\)\))291 2663 y(\(define)40 b Fq(name)378 2763 y Fo(\(lambda)g(\()p Fq(formal)54 b Fo(...\))465 2862 y(\(call-imported-b)o(in)o(din)o(g-)o(2)38 b(temp)k Fq(formal)53 b Fo(...\)\)\))320 3065 y Fr(If)36 b Fq(c-name)f Fr(is)29 b(not)g(supplied,)h(it)g(is)f(deriv)n(ed)f(from) h Fq(name)35 b Fr(b)n(y)29 b(con)n(v)n(erting)e(all)i(letters)g(to)291 3165 y(lo)n(w)n(ercase)c(and)i(replacing)f(`)p Fo(-)p Fr(')i(with)g(`)p 1507 3165 V 31 w('.)291 3465 y Fj(8.4)135 b(Dynamic)45 b(loading)291 3656 y Fr(External)18 b(co)r(de)h(can)g(b)r (e)h(loaded)e(in)n(to)h(a)g(running)g(Sc)n(heme)h(48|at)e(least)h(on)g (most)g(v)-5 b(arian)n(ts)291 3756 y(of)30 b(Unix)h(and)f(on)g(Windo)n (ws.)45 b(The)30 b(required)g(Sc)n(heme)g(functions)h(are)e(in)i(the)f (structure)291 3856 y Fo(load-dynamic-ex)o(ter)o(na)o(ls)o Fr(.)415 3960 y(T)-7 b(o)40 b(b)r(e)g(suitable)g(for)g(dynamic)f (loading,)j(the)f(externals)e(co)r(de)h(m)n(ust)g(reside)f(in)h(a)291 4060 y(shared)26 b(ob)5 b(ject.)37 b(The)27 b(shared)g(ob)5 b(ject)27 b(m)n(ust)h(de\014ne)g(a)f(function:)p Black 307 4241 a Fn(\017)p Black 41 w Fo(void)40 b(s48)p 743 4241 V 30 w(on)p 861 4241 V 31 w(load\(void\))291 4422 y Fr(The)29 b Fo(s48)p 600 4422 V 30 w(on)p 718 4422 V 31 w(load)f Fr(is)h(run)g(up)r(on)h(loading)f(the)h(shared)e(ob)5 b(jects.)42 b(It)30 b(t)n(ypically)f(con)n(tains)291 4521 y(in)n(v)n(o)r(cations)g(of)38 b Fo(S48)p 970 4521 V 30 w(EXPORT)p 1264 4521 V 29 w(FUNCTION)28 b Fr(to)j(mak)n(e)g(the)h (functionalit)n(y)f(de\014ned)h(b)n(y)f(the)291 4621 y(shared)26 b(ob)5 b(ject)28 b(kno)n(wn)e(to)i(Sc)n(heme)f(48.)415 4726 y(The)g(shared)f(ob)5 b(ject)27 b(ma)n(y)f(also)g(de\014ne)i (either)f(or)f(b)r(oth)h(of)g(the)h(follo)n(wing)e(functions:)p Black 307 4907 a Fn(\017)p Black 41 w Fo(void)40 b(s48)p 743 4907 V 30 w(on)p 861 4907 V 31 w(unload\(void\))p Black 307 5006 a Fn(\017)p Black 41 w Fo(void)g(s48)p 743 5006 V 30 w(on)p 861 5006 V 31 w(reload\(void\))p Black 1660 5255 a Fr(109)p Black eop end %%Page: 110 118 TeXDict begin 110 117 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(Sc)n(heme)39 b(48)g(calls)g Fo(s48)p 1505 523 27 4 v 30 w(on)p 1623 523 V 30 w(unload)e Fr(just)j(b)r(efore) g(it)g(unloads)e(the)i(shared)f(ob)5 b(ject.)72 b(If)739 623 y Fo(s48)p 876 623 V 30 w(on)p 994 623 V 31 w(reload)21 b Fr(is)j(presen)n(t,)g(Sc)n(heme)g(48)f(calls)g(it)h(when)h(it)f (loads)f(the)h(shared)f(ob)5 b(ject)24 b(for)739 722 y(the)33 b(second)e(time,)j(or)e(some)f(new)i(v)n(ersion)d(thereof.)51 b(If)33 b(it)g(is)f(not)g(presen)n(t,)h(Sc)n(heme)f(48)739 822 y(calls)27 b Fo(s48)p 1061 822 V 30 w(on)p 1179 822 V 31 w(load)f Fr(instead.)36 b(\(More)27 b(on)h(that)f(later.\))863 922 y(F)-7 b(or)33 b(Lin)n(ux,)i(the)e(follo)n(wing)g(commands)f (compile)h Fo(foo.c)f Fr(in)n(to)h(a)g(\014le)g Fo(foo.so)e Fr(that)739 1021 y(can)c(b)r(e)h(loaded)f(dynamically)-7 b(.)p Black Black 739 1189 a Fo(\045)43 b(gcc)f(-c)h(-o)g(foo.o)e (foo.c)739 1288 y(\045)i(ld)g(-shared)e(-o)h(foo.so)f(foo.o)739 1455 y Fr(The)27 b(follo)n(wing)f(pro)r(cedures)g(pro)n(vide)g(the)h (basic)g(functionalit)n(y)g(for)g(loading)f(shared)g(ob-)739 1555 y(jects)i(con)n(taining)e(dynamic)i(externals:)p Black 755 1721 a Fn(\017)p Black 42 w Fo(\(load-dynamic-e)o(xt)o(ern)o (al)o(s)36 b Fq(string)41 b(plete?)51 b(rr)l(ep)l(e)l(at?)f(rr)l (esume?)10 b Fo(\))51 b Fn(!)41 b Fq(dynamic-externals)p Black 755 1821 a Fn(\017)p Black 42 w Fo(\(unload-dynamic)o(-e)o(xte)o (rn)o(als)35 b Fq(string)7 b Fo(\))41 b Fn(!)83 b Fq(dynamic-externals) p Black 755 1921 a Fn(\017)p Black 42 w Fo(\(reload-dynamic)o(-e)o(xte) o(rn)o(als)35 b Fq(dynamic-externals)7 b Fo(\))739 2087 y(Load-dynamic-ext)o(er)o(nal)o(s)26 b Fr(loads)32 b(the)g(named)h (shared)e(ob)5 b(jects.)51 b(The)32 b Fq(plete?)63 b Fr(argu-)739 2187 y(men)n(t)33 b(determines)g(whether)g(Sc)n(heme)g(48) f(app)r(ends)h(the)g(OS-sp)r(eci\014c)g(su\016x)g(\(t)n(ypically)739 2287 y Fo(.so)h Fr(for)g(Unix,)k(and)d Fo(.dll)e Fr(for)i(Windo)n(ws\)) g(to)g(the)g(name.)59 b(The)35 b Fq(rr)l(ep)l(e)l(at?)70 b Fr(argumen)n(t)739 2386 y(determines)40 b(ho)n(w)h Fo(load-dynamic-ex)o(ter)o(na)o(ls)34 b Fr(b)r(eha)n(v)n(es)39 b(if)h(it)h(is)f(called)g(again)f(with)739 2486 y(the)34 b(same)f(argumen)n(t:)48 b(If)34 b(this)g(is)g(true,)h(it)f(reloads)e (the)i(shared)f(ob)5 b(ject)33 b(\(and)h(calls)f(its)739 2586 y Fo(s48)p 876 2586 V 30 w(on)p 994 2586 V 31 w(unload)27 b Fr(on)j(unloading)g(if)h(presen)n(t,)f(and,)h(after)f(reloading,)f Fo(s48)p 3119 2586 V 30 w(on)p 3237 2586 V 31 w(reload)f Fr(if)739 2685 y(presen)n(t)36 b(or)g Fo(s48)p 1285 2685 V 30 w(on)p 1403 2685 V 31 w(load)f Fr(if)i(not\),)j(otherwise,)e(it)f (will)g(not)g(do)g(an)n(ything.)64 b(The)36 b Fq(rr)l(e-)739 2785 y(sume?)49 b Fr(argumen)n(t)27 b(determines)h(if)g(an)g(image)g (subsequen)n(tly)f(dump)r(ed)j(will)e(try)g(to)g(load)739 2884 y(the)21 b(shared)f(ob)5 b(ject)21 b(again)f(automatically)-7 b(.)33 b(\(The)21 b(shared)f(ob)5 b(jects)21 b(will)g(b)r(e)g(loaded)g (b)r(efore)739 2984 y(an)n(y)j(record)f(resumers)g(run.\))36 b Fo(Load-dynamic-ex)o(ter)o(na)o(ls)18 b Fr(returns)24 b(a)g(handle)g(iden)n(tify-)739 3084 y(ing)j(the)h(shared)f(ob)5 b(ject)27 b(just)h(loaded.)863 3184 y Fo(Unload-dynamic-ex)o(ter)o(na)o (ls)22 b Fr(unloads)27 b(the)i(shared)e(ob)5 b(ject)27 b(asso)r(ciated)g(with)i(the)739 3283 y(handle)36 b(passed)f(as)g(its)h (argumen)n(t,)h(previously)e(calling)g(its)h Fo(s48)p 2864 3283 V 31 w(on)p 2983 3283 V 30 w(unload)e Fr(function)739 3383 y(if)d(presen)n(t.)47 b(Note)31 b(that)h(this)f(in)n(v)-5 b(alidates)30 b(all)h(external)f(bindings)i(asso)r(ciated)d(with)j(the) 739 3482 y(shared)26 b(ob)5 b(ject;)28 b(referring)e(to)h(an)n(y)g(of)h (them)g(will)g(probably)e(crash)h(the)h(program.)863 3582 y Fo(Reload-dynamic-ex)o(ter)o(na)o(ls)21 b Fr(will)28 b(reload)f(the)h(shared)f(ob)5 b(ject)27 b(named)h(b)n(y)g(its)f(ar-) 739 3682 y(gumen)n(t)c(and)g(call)g(its)g Fo(s48)p 1585 3682 V 30 w(on)p 1703 3682 V 31 w(unload)d Fr(function)k(b)r(efore)f (unloading,)g(and,)h(after)f(reload-)739 3782 y(ing,)k Fo(s48)p 1037 3782 V 30 w(on)p 1155 3782 V 31 w(reload)e Fr(if)j(presen)n(t)f(or)g Fo(s48)p 2074 3782 V 30 w(on)p 2192 3782 V 31 w(load)f Fr(if)i(not.)p Black 755 3932 a Fn(\017)p Black 42 w Fo(\(import-dynamic)o(-e)o(xte)o(rn)o(als)35 b Fq(string)7 b Fo(\))41 b Fn(!)h Fq(dynamic-externals)739 4082 y Fr(This)18 b(pro)r(cedure)g(represen)n(ts)f(the)h(exp)r(ected)h (most)f(usage)f(for)h(loading)g(dynamic-externals.)739 4182 y(It)28 b(is)f(b)r(est)h(explained)g(b)n(y)f(its)h(de\014nition:)p Black Black 739 4349 a Fo(\(define)41 b(\(import-dynamic)o(-ex)o(te)o (rn)o(als)c(name\))826 4448 y(\(load-dynamic-ex)o(ter)o(na)o(ls)g(name) 42 b(#t)h(#f)g(#t\)\))739 4724 y Fj(8.5)135 b(Accessing)45 b(Sc)l(heme)g(data)h(from)f(C)739 4907 y Fr(The)19 b(C)g(header)g (\014le)g Fo(scheme48.h)c Fr(pro)n(vides)j(access)g(to)h(Sc)n(heme)g (48)f(data)h(structures.)33 b(The)739 5006 y(t)n(yp)r(e)26 b Fo(s48)p 1061 5006 V 30 w(ref)p 1223 5006 V 31 w(t)f Fr(is)i(used)f(for)f(reference)h(ob)5 b(jects)25 b(that)i(refer)e(to)i (Sc)n(heme)f(v)-5 b(alues.)36 b(When)p Black 2109 5255 a(110)p Black eop end %%Page: 111 119 TeXDict begin 111 118 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(the)32 b(t)n(yp)r(e)g(of)g(a)g(v)-5 b(alue)32 b(is)g(kno)n(wn,)h(suc)n(h)e(as)h(the)g(in)n(teger)g (returned)f(b)n(y)i Fo(vector-length)291 623 y Fr(or)28 b(the)i(b)r(o)r(olean)f(returned)g(b)n(y)h Fo(pair?)p Fr(,)e(the)i(corresp)r(onding)d(C)j(pro)r(cedure)e(returns)h(a)g(C)291 722 y(v)-5 b(alue)23 b(of)g(the)g(appropriate)e(t)n(yp)r(e,)k(and)d (not)i(a)e Fo(s48)p 1880 722 27 4 v 30 w(ref)p 2042 722 V 30 w(t)p Fr(.)36 b(Predicates)21 b(return)i Fo(1)f Fr(for)h(true)291 822 y(and)k Fo(0)g Fr(for)g(false.)291 1080 y Fe(8.5.1)112 b(Constan)m(ts)291 1242 y Fr(The)27 b(follo)n(wing)g(macros)f(denote)h(Sc)n(heme)h(constan)n(ts:)p Black 415 1422 a Fn(\017)p Black 41 w Fo(s48)p 635 1422 V 30 w(false)p 885 1422 V 30 w(2\(s48)p 1135 1422 V 29 w(call)p 1340 1422 V 30 w(t\))e Fr(is)i Fo(#f)p Fr(.)p Black 415 1607 a Fn(\017)p Black 41 w Fo(s48)p 635 1607 V 30 w(true)p 841 1607 V 30 w(2\(s48)p 1091 1607 V 29 w(call)p 1296 1607 V 30 w(t\))f Fr(is)g Fo(#t)p Fr(.)p Black 415 1792 a Fn(\017)p Black 41 w Fo(s48)p 635 1792 V 30 w(null)p 841 1792 V 30 w(2\(s48)p 1091 1792 V 29 w(call)p 1296 1792 V 30 w(t\))g Fr(is)g(the)h(empt)n(y)g(list.)p Black 415 1977 a Fn(\017)p Black 41 w Fo(s48)p 635 1977 V 30 w(unspecific)p 1105 1977 V 28 w(2\(s48)p 1353 1977 V 29 w(call)p 1558 1977 V 30 w(t\))g Fr(is)i(a)e(v)-5 b(alue)30 b(used)f(for)g(functions)h(whic)n(h)f(ha)n(v)n(e)498 2077 y(no)42 b(meaningful)h(return)f(v)-5 b(alue)43 b(\(in)g(Sc)n(heme) f(48)g(this)h(v)-5 b(alue)42 b(returned)g(b)n(y)h(the)498 2176 y(n)n(ullary)27 b(pro)r(cedure)f Fo(unspecific)e Fr(in)k(the)g(structure)f Fo(util)p Fr(\).)p Black 415 2361 a Fn(\017)p Black 41 w Fo(s48)p 635 2361 V 30 w(eof)p 797 2361 V 30 w(2\(s48)p 1047 2361 V 30 w(call)p 1253 2361 V 29 w(t\))20 b Fr(is)h(the)g(end-of-\014le)f(ob)5 b(ject)20 b(\(in)h(Sc)n(heme)g(48)f(this)h(v)-5 b(alue)20 b(is)498 2461 y(returned)e(b)n(y)g(the)h(n)n(ullary)e(pro)r(cedure)h Fo(eof-object)c Fr(in)19 b(the)f(structure)g Fo(i/o-internal)p Fr(\).)291 2719 y Fe(8.5.2)112 b(Con)m(v)m(erting)38 b(v)-6 b(alues)291 2881 y Fr(The)26 b(follo)n(wing)g(macros)f(and)i (functions)g(con)n(v)n(ert)e(v)-5 b(alues)27 b(b)r(et)n(w)n(een)g(Sc)n (heme)f(and)h(C)g(rep-)291 2980 y(resen)n(tations.)42 b(The)30 b(`extract')g(ones)f(con)n(v)n(ert)g(from)g(Sc)n(heme)h(to)g (C)g(and)g(the)g(`en)n(ter's)g(go)291 3080 y(the)e(other)f(w)n(a)n(y)-7 b(.)p Black 307 3244 a Fn(\017)p Black 41 w Fo(int)290 b(s48)p 949 3244 V 30 w(extract)p 1287 3244 V 28 w(boolean)p 1623 3244 V 29 w(2\(s48)p 1872 3244 V 29 w(call)p 2077 3244 V 30 w(t,)40 b(s48)p 2367 3244 V 31 w(ref)p 2530 3244 V 30 w(t\))p Black 307 3343 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 3343 V 30 w(extract)p 1289 3343 V 28 w(char)p 1493 3343 V 30 w(2\(s48)p 1743 3343 V 29 w(call)p 1948 3343 V 30 w(t,)41 b(s48)p 2239 3343 V 30 w(ref)p 2401 3343 V 30 w(t\))p Black 307 3443 a Fn(\017)p Black 41 w Fo(char)f(*)166 b(s48)p 953 3443 V 30 w(extract)p 1291 3443 V 28 w(byte)p 1495 3443 V 30 w(vector)p 1789 3443 V 29 w(2\(s48)p 2038 3443 V 29 w(call)p 2243 3443 V 30 w(t,)41 b(s48)p 2534 3443 V 30 w(ref)p 2696 3443 V 30 w(t\))p Black 307 3543 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 3543 V 30 w(extract)p 1289 3543 V 28 w(long)p 1493 3543 V 30 w(2\(s48)p 1743 3543 V 29 w(call)p 1948 3543 V 30 w(t,)41 b(s48)p 2239 3543 V 30 w(ref)p 2401 3543 V 30 w(t\))p Black 307 3642 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 3642 V 30 w(extract)p 1289 3642 V 28 w(unsigned)p 1669 3642 V 28 w(long)p 1873 3642 V 30 w(2\(s48)p 2123 3642 V 29 w(call)p 2328 3642 V 30 w(t,)41 b(s48)p 2619 3642 V 30 w(ref)p 2781 3642 V 30 w(t\))p Black 307 3742 a Fn(\017)p Black 41 w Fo(double)164 b(s48)p 955 3742 V 30 w(extract)p 1293 3742 V 28 w(double)p 1585 3742 V 29 w(2\(s48)p 1834 3742 V 30 w(call)p 2040 3742 V 29 w(t,)41 b(s48)p 2330 3742 V 30 w(ref)p 2492 3742 V 30 w(t\))p Black 307 3842 a Fn(\017)p Black 41 w Fo(s48)p 527 3842 V 30 w(ref)p 689 3842 V 30 w(t)h(s48)p 937 3842 V 30 w(enter)p 1187 3842 V 29 w(boolean)p 1524 3842 V 29 w(2\(s48)p 1773 3842 V 29 w(call)p 1978 3842 V 30 w(t,)e(int\))p Black 307 3941 a Fn(\017)p Black 41 w Fo(s48)p 527 3941 V 30 w(ref)p 689 3941 V 30 w(t)i(s48)p 937 3941 V 30 w(enter)p 1187 3941 V 29 w(char)p 1392 3941 V 30 w(2\(s48)p 1642 3941 V 29 w(call)p 1847 3941 V 30 w(t,)e(long\))p Black 307 4041 a Fn(\017)p Black 41 w Fo(s48)p 527 4041 V 30 w(ref)p 689 4041 V 30 w(t)i(s48)p 937 4041 V 30 w(enter)p 1187 4041 V 29 w(byte)p 1392 4041 V 30 w(vector)p 1686 4041 V 29 w(2\(s48)p 1935 4041 V 29 w(call)p 2140 4041 V 30 w(t,)e(char)g(*,)h(long\))2785 4140 y Fr(\(ma)n(y)27 b(GC\))p Black 307 4240 a Fn(\017)p Black 41 w Fo(s48)p 527 4240 V 30 w(ref)p 689 4240 V 30 w(t)42 b(s48)p 937 4240 V 30 w(enter)p 1187 4240 V 29 w(long)p 1392 4240 V 30 w(2\(s48)p 1642 4240 V 29 w(call)p 1847 4240 V 30 w(t,)e(long\))565 b Fr(\(ma)n(y)27 b(GC\))p Black 307 4340 a Fn(\017)p Black 41 w Fo(s48)p 527 4340 V 30 w(ref)p 689 4340 V 30 w(t)42 b(s48)p 937 4340 V 30 w(enter)p 1187 4340 V 29 w(long)p 1392 4340 V 30 w(as)p 1510 4340 V 30 w(fixnum)p 1804 4340 V 29 w(2\(s48)p 2053 4340 V 30 w(call)p 2259 4340 V 29 w(t,)f(long\))153 b Fr(\(ma)n(y)27 b(GC\))p Black 307 4439 a Fn(\017)p Black 41 w Fo(s48)p 527 4439 V 30 w(ref)p 689 4439 V 30 w(t)42 b(s48)p 937 4439 V 30 w(enter)p 1187 4439 V 29 w(double)p 1480 4439 V 29 w(2\(s48)p 1729 4439 V 29 w(call)p 1934 4439 V 30 w(t,)f(double\))389 b Fr(\(ma)n(y)27 b(GC\))291 4603 y Fo(s48)p 428 4603 V 30 w(extract)p 766 4603 V 28 w(boolean)p 1102 4603 V 29 w(2)18 b Fr(is)g(false)g(if)h(its)f(argumen)n(t)g(is)g Fo(#f)g Fr(and)g(true)g(otherwise.)33 b Fo(s48)p 3010 4603 V 30 w(enter)p 3260 4603 V 29 w(boolean)p 3597 4603 V 29 w(2)291 4703 y Fr(is)27 b Fo(#f)g Fr(if)h(its)g(argumen)n(t)e(is)i (zero)e(and)i Fo(#t)f Fr(otherwise.)415 4807 y(The)j Fo(s48)p 725 4807 V 30 w(extract)p 1063 4807 V 29 w(char)p 1268 4807 V 30 w(2)f Fr(function)i(extracts)e(the)i(scalar)d(v)-5 b(alue)30 b(from)g(a)g(Sc)n(heme)291 4907 y(c)n(haracter)23 b(as)h(a)h(C)h Fo(long)p Fr(.)34 b(Con)n(v)n(ersely)-7 b(,)24 b Fo(s48)p 1708 4907 V 30 w(enter)p 1958 4907 V 29 w(char)p 2163 4907 V 30 w(2)h Fr(creates)f(a)h(Sc)n(heme)g(c)n (harac-)291 5006 y(ter)i(from)g(a)g(scalar)f(v)-5 b(alue.)37 b(\(Note)28 b(that)g(ASCI)r(I)g(v)-5 b(alues)27 b(are)g(also)f(scalar)g (v)-5 b(alues.\))p Black 1660 5255 a(111)p Black eop end %%Page: 112 120 TeXDict begin 112 119 bop 0 TeXcolorgray Black Black Black 863 523 a Fr(The)35 b Fo(s48)p 1178 523 27 4 v 31 w(extract)p 1517 523 V 28 w(byte)p 1721 523 V 30 w(vector)p 2015 523 V 29 w(2)f Fr(function)i(needs)e(to)h(deal)g(with)g(the)h (garbage)739 623 y(collector)c(to)h(a)n(v)n(oid)e(in)n(v)-5 b(alidating)33 b(the)h(returned)e(p)r(oin)n(ter.)53 b(F)-7 b(or)33 b(more)f(details)h(see)g(sec-)739 722 y(tion)p 0 0 1 TeXcolorrgb 28 w(8.7.3)p Black(.)863 822 y(The)41 b(second)f(argumen)n(t)f(to)h Fo(s48)p 1963 822 V 30 w(enter)p 2213 822 V 30 w(byte)p 2419 822 V 29 w(vector)p 2712 822 V 29 w(2)g Fr(is)h(the)f(length)h(of)f(b)n(yte)739 922 y(v)n(ector.)863 1021 y Fo(s48)p 1000 1021 V 31 w(enter)p 1251 1021 V 29 w(long)p 1456 1021 V 30 w(2\(\))19 b Fr(needs)i(to)g (allo)r(cate)f(storage)g(when)h(its)g(argumen)n(t)f(is)h(to)r(o)g (large)739 1121 y(to)27 b(\014t)g(in)h(a)e(Sc)n(heme)h(48)f(\014xn)n (um.)37 b(In)27 b(cases)f(where)h(the)g(n)n(um)n(b)r(er)g(is)g(kno)n (wn)f(to)h(\014t)h(within)739 1220 y(a)35 b(\014xn)n(um)h(\(curren)n (tly)e(30)h(bits)h(on)f(a)g(32-bits)g(arc)n(hitecture)f(and)h(62)g(bit) h(on)f(a)g(64-bits)739 1320 y(arc)n(hitecture)d(including)h(the)g (sign\),)h(the)f(follo)n(wing)f(pro)r(cedures)f(can)i(b)r(e)g(used.)53 b(These)739 1420 y(ha)n(v)n(e)20 b(the)h(disadv)-5 b(an)n(tage)20 b(of)h(only)f(ha)n(ving)g(a)h(limited)h(range,)f(but)g(the)h(adv)-5 b(an)n(tage)19 b(of)i(nev)n(er)739 1519 y(causing)h(a)g(garbage)e (collection.)35 b Fo(s48)p 1935 1519 V 30 w(fixnum)p 2229 1519 V 29 w(p)p 2302 1519 V 31 w(2\(s48)p 2553 1519 V 29 w(call)p 2758 1519 V 30 w(t\))22 b Fr(is)h(a)f(macro)f(that)i (true)739 1619 y(if)28 b(its)g(argumen)n(t)e(is)i(a)f(\014xn)n(um)h (and)f(false)g(otherwise.)p Black 755 1758 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 1758 V 30 w(fixnum)p 1691 1758 V 29 w(p)p 1764 1758 V 31 w(2\(s48)p 2015 1758 V 29 w(call)p 2220 1758 V 30 w(t,)41 b(s48)p 2511 1758 V 30 w(ref)p 2673 1758 V 30 w(t\))p Black 755 1858 a Fn(\017)p Black 42 w Fo(s48)p 976 1858 V 30 w(ref)p 1138 1858 V 30 w(t)g(s48)p 1385 1858 V 30 w(enter)p 1635 1858 V 29 w(long)p 1840 1858 V 30 w(as)p 1958 1858 V 31 w(fixnum)p 2253 1858 V 29 w(2\(s48)p 2502 1858 V 29 w(call)p 2707 1858 V 30 w(t,)f(long\))p Black 755 1958 a Fn(\017)p Black 42 w Fo(long)247 b(S48)p 1399 1958 V 30 w(MAX)p 1561 1958 V 30 w(FIXNUM)p 1855 1958 V 29 w(VALUE)p Black 755 2057 a Fn(\017)p Black 42 w Fo(long)g(S48)p 1399 2057 V 30 w(MIN)p 1561 2057 V 30 w(FIXNUM)p 1855 2057 V 29 w(VALUE)739 2197 y Fr(An)19 b(error)d(is)i(signaled)g(if)h(the)g (argumen)n(t)e(to)h Fo(s48)p 2236 2197 V 30 w(enter)p 2486 2197 V 30 w(fixnum)d Fr(is)k(less)f(than)g Fo(S48)p 3330 2197 V 30 w(MIN)p 3492 2197 V 30 w(FIXNUM)p 3786 2197 V 29 w(VALUE)739 2296 y Fr(or)25 b(greater)f(than)i Fo(S48)p 1448 2296 V 30 w(MAX)p 1610 2296 V 30 w(FIXNUM)p 1904 2296 V 29 w(VALUE)e Fr(\()p Fn(\000)p Fr(2)2311 2266 y Fk(29)2406 2296 y Fr(and)i(2)2608 2266 y Fk(29)2693 2296 y Fn(\000)14 b Fr(1)26 b(on)f(a)h(32-bits)f(arc)n(hitec-)739 2396 y(ture)i(and)h Fn(\000)p Fr(2)1183 2366 y Fk(61)1280 2396 y Fr(and)f(2)1483 2366 y Fk(62)1572 2396 y Fn(\000)18 b Fr(1)27 b(on)g(a)g(64-bits)g(arc)n(hitecture\).)p Black 755 2535 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 2535 V 30 w(true)p 1603 2535 V 30 w(p)p 1677 2535 V 31 w(2\(s48)p 1928 2535 V 29 w(call)p 2133 2535 V 30 w(t,)40 b(s48)p 2423 2535 V 31 w(ref)p 2586 2535 V 30 w(t\))p Black 755 2635 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 2635 V 30 w(false)p 1647 2635 V 29 w(p)p 1720 2635 V 31 w(2\(s48)p 1971 2635 V 30 w(call)p 2177 2635 V 29 w(t,)41 b(s48)p 2467 2635 V 30 w(ref)p 2629 2635 V 30 w(t\))739 2775 y(s48)p 876 2775 V 30 w(true)p 1082 2775 V 30 w(p)34 b Fr(is)g(true)g(if)h(its)g(argumen)n(t)e(is)h Fo(s48)p 2268 2775 V 30 w(true)f Fr(and)h Fo(s48)p 2807 2775 V 30 w(false)p 3057 2775 V 30 w(p)g Fr(is)g(true)g(if)h(its)739 2874 y(argumen)n(t)26 b(is)i Fo(s48)p 1331 2874 V 30 w(false)p Fr(.)p Black 755 3014 a Fn(\017)p Black 42 w Fo(s48)p 976 3014 V 30 w(ref)p 1138 3014 V 30 w(t)41 b(s48)p 1385 3014 V 30 w(enter)p 1635 3014 V 29 w(string)p 1928 3014 V 29 w(latin)p 2177 3014 V 30 w(1)p 2251 3014 V 31 w(2\(s48)p 2502 3014 V 29 w(call)p 2707 3014 V 30 w(t,)f(char*\);)66 b Fr(\(ma)n(y)27 b(GC\))p Black 755 3113 a Fn(\017)p Black 42 w Fo(s48)p 976 3113 V 30 w(ref)p 1138 3113 V 30 w(t)41 b(s48)p 1385 3113 V 30 w(enter)p 1635 3113 V 29 w(string)p 1928 3113 V 29 w(latin)p 2177 3113 V 30 w(1)p 2251 3113 V 31 w(n)p 2326 3113 V 31 w(2\(s48)p 2577 3113 V 29 w(call)p 2782 3113 V 30 w(t,)f(char*,)f(long\);)3234 3213 y Fr(\(ma)n(y)27 b(GC\))p Black 755 3313 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3313 V 30 w(string)p 1693 3313 V 29 w(latin)p 1942 3313 V 29 w(1)p 2015 3313 V 31 w(length)p 2310 3313 V 29 w(2\(s48)p 2559 3313 V 29 w(call)p 2764 3313 V 30 w(t,)41 b(s48)p 3055 3313 V 30 w(ref)p 3217 3313 V 30 w(t\);)p Black 755 3412 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3412 V 30 w(string)p 1693 3412 V 29 w(latin)p 1942 3412 V 29 w(1)p 2015 3412 V 31 w(length)p 2310 3412 V 29 w(n)p 2383 3412 V 31 w(2\(s48)p 2634 3412 V 29 w(call)p 2839 3412 V 30 w(t,)41 b(s48)p 3130 3412 V 30 w(ref)p 3292 3412 V 30 w(t,)g(long,)e(long\);)p Black 755 3512 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 3512 V 30 w(copy)p 1605 3512 V 30 w(latin)p 1855 3512 V 29 w(1)p 1928 3512 V 31 w(to)p 2047 3512 V 31 w(string)p 2342 3512 V 29 w(2\(s48)p 2591 3512 V 29 w(call)p 2796 3512 V 30 w(t,)40 b(char*,)f(s48)p 3389 3512 V 30 w(ref)p 3551 3512 V 31 w(t\);)p Black 755 3611 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 3611 V 30 w(copy)p 1605 3611 V 30 w(latin)p 1855 3611 V 29 w(1)p 1928 3611 V 31 w(to)p 2047 3611 V 31 w(string)p 2342 3611 V 29 w(n)p 2415 3611 V 31 w(2\(s48)p 2666 3611 V 29 w(call)p 2871 3611 V 30 w(t,)40 b(char*,)f(long,)h(s48)p 3724 3611 V 30 w(ref)p 3886 3611 V 30 w(t\);)p Black 755 3711 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 3711 V 30 w(copy)p 1605 3711 V 30 w(string)p 1899 3711 V 29 w(to)p 2016 3711 V 30 w(latin)p 2266 3711 V 30 w(1)p 2340 3711 V 31 w(2\(s48)p 2591 3711 V 29 w(call)p 2796 3711 V 30 w(t,)40 b(s48)p 3086 3711 V 30 w(ref)p 3248 3711 V 31 w(t,)g(char*\);)p Black 755 3811 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 3811 V 30 w(copy)p 1605 3811 V 30 w(string)p 1899 3811 V 29 w(to)p 2016 3811 V 30 w(latin)p 2266 3811 V 30 w(1)p 2340 3811 V 31 w(n)p 2415 3811 V 31 w(2\(s48)p 2666 3811 V 29 w(call)p 2871 3811 V 30 w(t,)40 b(s48)p 3161 3811 V 30 w(ref)p 3323 3811 V 31 w(t,)g(long,)g(long,)f(char*\);)p Black 755 3910 a Fn(\017)p Black 42 w Fo(s48)p 976 3910 V 30 w(ref)p 1138 3910 V 30 w(t)i(s48)p 1385 3910 V 30 w(enter)p 1635 3910 V 29 w(string)p 1928 3910 V 29 w(utf)p 2089 3910 V 30 w(8)p 2163 3910 V 31 w(2\(s48)p 2414 3910 V 30 w(call)p 2620 3910 V 29 w(t,)g(char*\);)153 b Fr(\(ma)n(y)27 b(GC\))p Black 755 4010 a Fn(\017)p Black 42 w Fo(s48)p 976 4010 V 30 w(ref)p 1138 4010 V 30 w(t)41 b(s48)p 1385 4010 V 30 w(enter)p 1635 4010 V 29 w(string)p 1928 4010 V 29 w(utf)p 2089 4010 V 30 w(8)p 2163 4010 V 31 w(n)p 2238 4010 V 31 w(2\(s48)p 2489 4010 V 30 w(call)p 2695 4010 V 29 w(t,)g(char*,)e(long\);)3234 4110 y Fr(\(ma)n(y)27 b(GC\))p Black 755 4209 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4209 V 30 w(string)p 1693 4209 V 29 w(utf)p 1854 4209 V 30 w(8)p 1928 4209 V 31 w(length)p 2223 4209 V 29 w(2\(s48)p 2472 4209 V 29 w(call)p 2677 4209 V 30 w(t,)41 b(s48)p 2968 4209 V 30 w(ref)p 3130 4209 V 30 w(t\);)p Black 755 4309 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4309 V 30 w(string)p 1693 4309 V 29 w(utf)p 1854 4309 V 30 w(8)p 1928 4309 V 31 w(length)p 2223 4309 V 29 w(n)p 2296 4309 V 31 w(2\(s48)p 2547 4309 V 29 w(call)p 2752 4309 V 30 w(t,)41 b(s48)p 3043 4309 V 30 w(ref)p 3205 4309 V 30 w(t,)g(long,)e(long\);)p Black 755 4408 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4408 V 30 w(copy)p 1605 4408 V 30 w(string)p 1899 4408 V 29 w(to)p 2016 4408 V 30 w(utf)p 2178 4408 V 30 w(8)p 2252 4408 V 31 w(2\(s48)p 2503 4408 V 30 w(call)p 2709 4408 V 29 w(t,)41 b(s48)p 2999 4408 V 30 w(ref)p 3161 4408 V 30 w(t,)g(char*\);)p Black 755 4508 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4508 V 30 w(copy)p 1605 4508 V 30 w(string)p 1899 4508 V 29 w(to)p 2016 4508 V 30 w(utf)p 2178 4508 V 30 w(8)p 2252 4508 V 31 w(n)p 2327 4508 V 31 w(2\(s48)p 2578 4508 V 30 w(call)p 2784 4508 V 29 w(t,)41 b(s48)p 3074 4508 V 30 w(ref)p 3236 4508 V 30 w(t,)g(long,)e(long,)h(char*\);)p Black 755 4608 a Fn(\017)p Black 42 w Fo(s48)p 976 4608 V 30 w(ref)p 1138 4608 V 30 w(t)h(s48)p 1385 4608 V 30 w(enter)p 1635 4608 V 29 w(string)p 1928 4608 V 29 w(utf)p 2089 4608 V 30 w(16be)p 2295 4608 V 30 w(2\(s48)p 2545 4608 V 29 w(call)p 2750 4608 V 30 w(t,)g(char*\);)3234 4707 y Fr(\(ma)n(y)27 b(GC\))p Black 755 4807 a Fn(\017)p Black 42 w Fo(s48)p 976 4807 V 30 w(ref)p 1138 4807 V 30 w(t)41 b(s48)p 1385 4807 V 30 w(enter)p 1635 4807 V 29 w(string)p 1928 4807 V 29 w(utf)p 2089 4807 V 30 w(16be)p 2295 4807 V 30 w(n)p 2369 4807 V 31 w(2\(s48)p 2620 4807 V 29 w(call)p 2825 4807 V 30 w(t,)g(char*,)e(long\);)3234 4907 y Fr(\(ma)n(y)27 b(GC\))p Black 755 5006 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 5006 V 30 w(string)p 1693 5006 V 29 w(utf)p 1854 5006 V 30 w(16be)p 2060 5006 V 30 w(length)p 2354 5006 V 29 w(2\(s48)p 2603 5006 V 29 w(call)p 2808 5006 V 30 w(t,)40 b(s48)p 3098 5006 V 31 w(ref)p 3261 5006 V 30 w(t\);)p Black 2109 5255 a Fr(112)p Black eop end %%Page: 113 121 TeXDict begin 113 120 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 523 27 4 v 30 w(string)p 1245 523 V 29 w(utf)p 1406 523 V 30 w(16be)p 1612 523 V 30 w(length)p 1906 523 V 28 w(n)p 1978 523 V 31 w(2\(s48)p 2229 523 V 30 w(call)p 2435 523 V 29 w(t,)41 b(s48)p 2725 523 V 30 w(ref)p 2887 523 V 30 w(t,)g(long,)f(long\);)p Black 307 623 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 623 V 30 w(copy)p 1157 623 V 29 w(string)p 1450 623 V 29 w(to)p 1567 623 V 31 w(utf)p 1730 623 V 30 w(16be)p 1936 623 V 30 w(2\(s48)p 2186 623 V 29 w(call)p 2391 623 V 30 w(t,)41 b(s48)p 2682 623 V 30 w(ref)p 2844 623 V 30 w(t,)f(char*\);)p Black 307 722 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 722 V 30 w(copy)p 1157 722 V 29 w(string)p 1450 722 V 29 w(to)p 1567 722 V 31 w(utf)p 1730 722 V 30 w(16be)p 1936 722 V 30 w(n)p 2010 722 V 31 w(2\(s48)p 2261 722 V 29 w(call)p 2466 722 V 30 w(t,)40 b(s48)p 2756 722 V 31 w(ref)p 2919 722 V 30 w(t,)g(long,)g(long,)f (char*\);)p Black 307 822 a Fn(\017)p Black 41 w Fo(s48)p 527 822 V 30 w(ref)p 689 822 V 30 w(t)j(s48)p 937 822 V 30 w(enter)p 1187 822 V 29 w(string)p 1480 822 V 29 w(utf)p 1641 822 V 30 w(16le)p 1847 822 V 30 w(2\(s48)p 2097 822 V 29 w(call)p 2302 822 V 30 w(t,)f(char*\);)2785 922 y Fr(\(ma)n(y)27 b(GC\))p Black 307 1021 a Fn(\017)p Black 41 w Fo(s48)p 527 1021 V 30 w(ref)p 689 1021 V 30 w(t)42 b(s48)p 937 1021 V 30 w(enter)p 1187 1021 V 29 w(string)p 1480 1021 V 29 w(utf)p 1641 1021 V 30 w(16le)p 1847 1021 V 30 w(n)p 1921 1021 V 31 w(2\(s48)p 2172 1021 V 29 w(call)p 2377 1021 V 30 w(t,)e(char*,)g(long\);)2785 1121 y Fr(\(ma)n(y)27 b(GC\))p Black 307 1220 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 1220 V 30 w(string)p 1245 1220 V 29 w(utf)p 1406 1220 V 30 w(16le)p 1612 1220 V 30 w(length)p 1906 1220 V 28 w(2\(s48)p 2154 1220 V 30 w(call)p 2360 1220 V 29 w(t,)41 b(s48)p 2650 1220 V 30 w(ref)p 2812 1220 V 30 w(t\);)p Black 307 1320 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 1320 V 30 w(string)p 1245 1320 V 29 w(utf)p 1406 1320 V 30 w(16le)p 1612 1320 V 30 w(length)p 1906 1320 V 28 w(n)p 1978 1320 V 31 w(2\(s48)p 2229 1320 V 30 w(call)p 2435 1320 V 29 w(t,)41 b(s48)p 2725 1320 V 30 w(ref)p 2887 1320 V 30 w(t,)g(long,)f(long\);)p Black 307 1420 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 1420 V 30 w(copy)p 1157 1420 V 29 w(string)p 1450 1420 V 29 w(to)p 1567 1420 V 31 w(utf)p 1730 1420 V 30 w(16le)p 1936 1420 V 30 w(2\(s48)p 2186 1420 V 29 w(call)p 2391 1420 V 30 w(t,)41 b(s48)p 2682 1420 V 30 w(ref)p 2844 1420 V 30 w(t,)f(char*\);)p Black 307 1519 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 1519 V 30 w(copy)p 1157 1519 V 29 w(string)p 1450 1519 V 29 w(to)p 1567 1519 V 31 w(utf)p 1730 1519 V 30 w(16le)p 1936 1519 V 30 w(n)p 2010 1519 V 31 w(2\(s48)p 2261 1519 V 29 w(call)p 2466 1519 V 30 w(t,)40 b(s48)p 2756 1519 V 31 w(ref)p 2919 1519 V 30 w(t,)g(long,)g(long,)f(char*\);) 291 1685 y Fr(The)d Fo(s48)p 607 1685 V 30 w(enter)p 857 1685 V 30 w(string)p 1151 1685 V 29 w(latin)p 1400 1685 V 29 w(1)p 1473 1685 V 31 w(2)g Fr(function)h(creates)f(a)g(Sc)n (heme)h(string,)h(initializ-)291 1785 y(ing)k(its)i(con)n(ten)n(ts)e (from)h(its)g(NUL-terminated,)48 b(Latin-1-enco)r(ded)41 b(argumen)n(t.)83 b(The)291 1885 y Fo(s48)p 428 1885 V 30 w(enter)p 678 1885 V 29 w(string)p 971 1885 V 29 w(latin)p 1220 1885 V 29 w(1)p 1293 1885 V 31 w(n)p 1368 1885 V 31 w(2)34 b Fr(function)g(do)r(es)g(the)g(same,)h(but)f(allo)n (ws)f(sp)r(ecifying)291 1984 y(the)28 b(length)f(explicitly|no)h(NUL)g (terminator)e(is)i(necessary)-7 b(.)415 2089 y(The)33 b Fo(s48)p 728 2089 V 30 w(string)p 1022 2089 V 29 w(latin)p 1271 2089 V 30 w(1)p 1345 2089 V 31 w(length)p 1640 2089 V 29 w(2)f Fr(function)i(computes)f(the)h(length)f(that)h(the)291 2189 y(Latin-1)22 b(enco)r(ding)i(of)f(its)h(argumen)n(t)f(\(a)h(Sc)n (heme)f(string\))h(w)n(ould)f(o)r(ccup)n(y)-7 b(,)24 b(not)g(including)291 2289 y(NUL)k(termination.)37 b(The)28 b Fo(s48)p 1288 2289 V 30 w(string)p 1582 2289 V 29 w(latin)p 1831 2289 V 30 w(1)p 1905 2289 V 31 w(length)p 2200 2289 V 29 w(2)f Fr(function)i(do)r(es)e(the)h(same,)291 2388 y(but)g(allo)n(ws)e(sp)r(ecifying)i(a)f(starting)g(index)g(and)h(a)f (coun)n(t)g(in)n(to)g(the)h(input)h(string.)415 2493 y(The)34 b Fo(s48)p 729 2493 V 30 w(copy)p 935 2493 V 30 w(latin)p 1185 2493 V 29 w(1)p 1258 2493 V 31 w(to)p 1377 2493 V 30 w(string)p 1671 2493 V 29 w(2)f Fr(function)h(copies)f (Latin-1-enco)r(ded)f(c)n(har-)291 2593 y(acters)19 b(from)h(its)h (second)f(NUL-terminated)g(argumen)n(t)f(to)i(the)g(Sc)n(heme)f(string) g(that)g(is)h(its)291 2693 y(third)30 b(argumen)n(t.)43 b(The)31 b Fo(s48)p 1223 2693 V 30 w(copy)p 1429 2693 V 30 w(latin)p 1679 2693 V 29 w(1)p 1752 2693 V 31 w(to)p 1871 2693 V 30 w(string)p 2165 2693 V 29 w(n)p 2238 2693 V 31 w(2)f Fr(do)r(es)g(the)h(same,)f(but)h(al-)291 2792 y(lo)n(ws)17 b(sp)r(ecifying)h(the)h(n)n(um)n(b)r(er)f(of)h(c)n (haracters)d(explicitly)-7 b(.)34 b(The)18 b Fo(s48)p 2419 2792 V 30 w(copy)p 2625 2792 V 30 w(string)p 2919 2792 V 29 w(to)p 3036 2792 V 30 w(latin)p 3286 2792 V 30 w(1)p 3360 2792 V 31 w(2)291 2892 y Fr(function)24 b(con)n(v)n(erts)e(the)i(c)n(haracters)e(of)h(the)i(Sc)n(heme)e(string) h(sp)r(eci\014ed)g(as)f(the)h(second)f(ar-)291 2992 y(gumen)n(t)h(in)n (to)h(Latin-1)f(and)g(writes)h(them)g(in)n(to)g(the)g(string)f(sp)r (eci\014ed)h(as)f(the)h(third)g(argu-)291 3091 y(men)n(t.)34 b(\(Note)18 b(that)h(it)g(do)r(es)f(not)g(NUL-terminate)h(the)f (result.\))34 b(The)19 b Fo(s48)p 2613 3091 V 30 w(copy)p 2819 3091 V 29 w(string)p 3112 3091 V 29 w(to)p 3229 3091 V 31 w(latin)p 3480 3091 V 29 w(1)p 3553 3091 V 31 w(n)p 3628 3091 V 31 w(2)291 3191 y Fr(function)30 b(do)r(es)f(the)h(same,)g(but)g(allo)n(ws)e(sp)r(ecifying)i(a)f (starting)g(index)g(and)h(a)f(c)n(haracter)291 3290 y(coun)n(t)e(in)n (to)g(the)h(source)f(string.)415 3396 y(The)19 b Fo(s48)p 714 3396 V 30 w(extract)p 1052 3396 V 28 w(latin)p 1300 3396 V 29 w(1)p 1373 3396 V 31 w(from)p 1580 3396 V 30 w(string)p 1874 3396 V 29 w(2)f Fr(function)h(returns)f(a)g(bu\013er)g (that)h(con-)291 3495 y(tains)26 b(the)g(Latin-1)g(enco)r(ded)g(c)n (haracters)e(including)i(NUL)h(termination)f(of)g(the)h(Sc)n(heme)291 3595 y(string)32 b(sp)r(eci\014ed.)54 b(The)34 b(bu\013er)f(that)g(is)h (returned)e(is)h(a)g(lo)r(cal)g(bu\013er)g(managed)g(b)n(y)g(the)291 3694 y(foreign-function)21 b(in)n(terface)h(and)g(is)g(automatically)g (freed)g(on)g(the)h(return)f(of)g(the)h(curren)n(t)291 3794 y(call.)415 3899 y(The)40 b Fo(s48)p 735 3899 V 30 w(enter)p 985 3899 V 29 w(string)p 1278 3899 V 29 w(utf)p 1439 3899 V 30 w(8)p 1513 3899 V 31 w(2)g Fr(function)g (creates)f(a)g(Sc)n(heme)h(string,)i(initial-)291 3999 y(izing)c(its)i(con)n(ten)n(ts)e(from)h(its)g(NUL-terminated,)j (UTF-8-enco)r(ded)d(argumen)n(t.)70 b(The)291 4099 y Fo(s48)p 428 4099 V 30 w(enter)p 678 4099 V 29 w(string)p 971 4099 V 29 w(utf)p 1132 4099 V 30 w(8)p 1206 4099 V 31 w(n)p 1281 4099 V 31 w(2)26 b Fr(function)h(do)r(es)f(the)g(same,) g(but)h(allo)n(ws)e(sp)r(ecifying)i(the)291 4198 y(length)g (explicitly|no)h(NUL)g(terminator)e(is)i(necessary)-7 b(.)415 4303 y(The)19 b Fo(s48)p 714 4303 V 30 w(string)p 1008 4303 V 29 w(utf)p 1169 4303 V 30 w(8)p 1243 4303 V 31 w(length)p 1538 4303 V 29 w(2)f Fr(function)h(computes)f(the)h (length)f(that)h(the)f(UTF-)291 4403 y(8)25 b(enco)r(ding)g(of)h(its)f (argumen)n(t)g(\(a)g(Sc)n(heme)h(string\))f(w)n(ould)g(o)r(ccup)n(y)-7 b(,)26 b(not)g(including)f(NUL)291 4503 y(termination.)42 b(The)30 b Fo(s48)p 1091 4503 V 30 w(string)p 1385 4503 V 29 w(utf)p 1546 4503 V 30 w(8)p 1620 4503 V 31 w(length)p 1915 4503 V 29 w(2)g Fr(function)g(do)r(es)f(the)i(same,)e(but)i(al-) 291 4602 y(lo)n(ws)26 b(sp)r(ecifying)i(a)f(starting)g(index)g(and)h(a) f(coun)n(t)g(in)n(to)h(the)g(input)g(string.)415 4707 y(The)40 b Fo(s48)p 735 4707 V 30 w(copy)p 941 4707 V 29 w(string)p 1234 4707 V 29 w(to)p 1351 4707 V 31 w(utf)p 1514 4707 V 30 w(8)p 1588 4707 V 31 w(2)f Fr(function)h(con)n(v)n(erts) d(the)j(c)n(haracters)d(of)j(the)291 4807 y(Sc)n(heme)34 b(string)g(sp)r(eci\014ed)h(as)f(the)i(second)e(argumen)n(t)f(in)n(to)i (UTF-8)f(and)h(writes)f(them)291 4907 y(in)n(to)f(the)h(string)f(sp)r (eci\014ed)h(as)f(the)h(third)g(argumen)n(t.)54 b(\(Note)34 b(that)g(it)g(do)r(es)f(not)h(NUL-)291 5006 y(terminate)j(the)g (result.\))66 b(The)37 b Fo(s48)p 1473 5006 V 30 w(copy)p 1679 5006 V 30 w(string)p 1973 5006 V 29 w(to)p 2090 5006 V 30 w(utf)p 2252 5006 V 30 w(8)p 2326 5006 V 31 w(n)p 2401 5006 V 31 w(2)g Fr(function)h(do)r(es)f(the)p Black 1660 5255 a(113)p Black eop end %%Page: 114 122 TeXDict begin 114 121 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(same,)41 b(but)f(allo)n(ws)e(sp)r(ecifying)h(a)f (starting)h(index)g(and)g(a)f(c)n(haracter)f(coun)n(t)i(in)n(to)g(the) 739 623 y(source)26 b(string.)36 b(Both)28 b(return)f(the)h(length)g (of)f(the)h(written)g(enco)r(dings)f(in)h(b)n(ytes.)863 722 y(The)i Fo(s48)p 1173 722 27 4 v 30 w(extract)p 1511 722 V 28 w(utf)p 1671 722 V 31 w(8)p 1746 722 V 31 w(from)p 1953 722 V 29 w(string)p 2246 722 V 29 w(2)f Fr(function)h(returns)f(a) g(bu\013er)g(that)h(con-)739 822 y(tains)e(the)g(UTF-8)g(enco)r(ded)g (c)n(haracters)e(including)i(NUL)h(termination)f(of)g(the)g(Sc)n(heme) 739 922 y(string)k(sp)r(eci\014ed.)55 b(The)33 b(bu\013er)g(that)h(is)f (returned)g(is)g(a)g(lo)r(cal)f(bu\013er)i(managed)e(b)n(y)h(the)739 1021 y(foreign-function)22 b(in)n(terface)f(and)h(is)h(automatically)e (freed)h(on)g(the)h(return)f(of)g(the)h(curren)n(t)739 1121 y(call.)863 1220 y(The)31 b(functions)h(with)f Fo(utf)p 1728 1220 V 30 w(16)f Fr(in)i(their)e(names)h(w)n(ork)e(analogously)g (to)i(their)f Fo(utf)p 3534 1220 V 31 w(8)739 1320 y Fr(coun)n(terparts,)h(but)i(implemen)n(t)f(the)g(UTF-16)f(enco)r (dings.)49 b(The)32 b(lengths)f(returned)h(b)r(e)739 1420 y(the)p 887 1420 V 59 w Fo(length)25 b Fr(and)i Fo(copy)p 1544 1420 V 30 w(string)p 1838 1420 V 29 w(to)f Fr(functions)i(are)e(in)i(terms)f(of)g(UTF-16)g(co)r(de)g(units.)739 1519 y(The)32 b Fo(extract)e Fr(function)j(returns)f(a)g(lo)r(cal)g (bu\013er)h(that)f(con)n(tains)g(UTF-16)g(co)r(de)g(units)739 1619 y(including)c(NUL)g(termination.)739 1848 y Fe(8.5.3)112 b(C)38 b(v)m(ersions)g(of)f(Sc)m(heme)i(pro)s(cedures)739 2001 y Fr(The)23 b(follo)n(wing)f(macros)g(and)h(pro)r(cedures)f(are)g (C)h(v)n(ersions)f(of)h(Sc)n(heme)g(pro)r(cedures.)34 b(The)739 2100 y(names)27 b(w)n(ere)g(deriv)n(ed)f(b)n(y)i(replacing)e (`)p Fo(-)p Fr(')i(with)g(`)p 2281 2100 V 31 w(',)g(`)p Fo(?)p Fr(')37 b(with)28 b(`)p 2725 2100 V 31 w Fo(p)p Fr(',)f(and)h(dropping)f(`)p Fo(!)p Fr(.)p Black 755 2233 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 2233 V 30 w(eq)p 1515 2233 V 31 w(p)p 1590 2233 V 31 w(2\(s48)p 1841 2233 V 29 w(call)p 2046 2233 V 30 w(t,)40 b(s48)p 2336 2233 V 30 w(ref)p 2498 2233 V 31 w(t,)g(s48)p 2789 2233 V 30 w(ref)p 2951 2233 V 30 w(t\))p Black 755 2332 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 2332 V 30 w(char)p 1603 2332 V 30 w(p)p 1677 2332 V 31 w(2\(s48)p 1928 2332 V 29 w(call)p 2133 2332 V 30 w(t,)40 b(s48)p 2423 2332 V 31 w(ref)p 2586 2332 V 30 w(t\))p Black 755 2432 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 2432 V 30 w(null)p 1603 2432 V 30 w(p)p 1677 2432 V 31 w(2\(s48)p 1928 2432 V 29 w(call)p 2133 2432 V 30 w(t,)40 b(s48)p 2423 2432 V 31 w(ref)p 2586 2432 V 30 w(t\))p Black 755 2564 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 2564 V 30 w(pair)p 1603 2564 V 30 w(p)p 1677 2564 V 31 w(2\(s48)p 1928 2564 V 29 w(call)p 2133 2564 V 30 w(t,)40 b(s48)p 2423 2564 V 31 w(ref)p 2586 2564 V 30 w(t\))p Black 755 2664 a Fn(\017)p Black 42 w Fo(s48)p 976 2664 V 30 w(ref)p 1138 2664 V 30 w(t)h(s48)p 1385 2664 V 30 w(car)p 1547 2664 V 30 w(2\(s48)p 1797 2664 V 29 w(call)p 2002 2664 V 30 w(t,)g(s48)p 2293 2664 V 30 w(ref)p 2455 2664 V 30 w(t\))p Black 755 2763 a Fn(\017)p Black 42 w Fo(s48)p 976 2763 V 30 w(ref)p 1138 2763 V 30 w(t)g(s48)p 1385 2763 V 30 w(cdr)p 1547 2763 V 30 w(2\(s48)p 1797 2763 V 29 w(call)p 2002 2763 V 30 w(t,)g(s48)p 2293 2763 V 30 w(ref)p 2455 2763 V 30 w(t\))p Black 755 2863 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 2863 V 30 w(set)p 1561 2863 V 30 w(car)p 1723 2863 V 30 w(2\(s48)p 1973 2863 V 30 w(call)p 2179 2863 V 29 w(t,)41 b(s48)p 2469 2863 V 30 w(ref)p 2631 2863 V 30 w(t,)g(s48)p 2922 2863 V 30 w(ref)p 3084 2863 V 30 w(t\))p Black 755 2963 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 2963 V 30 w(set)p 1561 2963 V 30 w(cdr)p 1723 2963 V 30 w(2\(s48)p 1973 2963 V 30 w(call)p 2179 2963 V 29 w(t,)41 b(s48)p 2469 2963 V 30 w(ref)p 2631 2963 V 30 w(t,)g(s48)p 2922 2963 V 30 w(ref)p 3084 2963 V 30 w(t\))p Black 755 3062 a Fn(\017)p Black 42 w Fo(s48)p 976 3062 V 30 w(ref)p 1138 3062 V 30 w(t)g(s48)p 1385 3062 V 30 w(cons)p 1591 3062 V 30 w(2\(s48)p 1841 3062 V 29 w(call)p 2046 3062 V 30 w(t,)f(s48)p 2336 3062 V 31 w(ref)p 2499 3062 V 30 w(t,)g(s48)p 2789 3062 V 31 w(ref)p 2952 3062 V 30 w(t\))169 b Fr(\(ma)n(y)27 b(GC\))p Black 755 3162 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3162 V 30 w(length)p 1693 3162 V 29 w(2\(s48)p 1942 3162 V 29 w(call)p 2147 3162 V 30 w(t,)41 b(s48)p 2438 3162 V 30 w(ref)p 2600 3162 V 30 w(t\))p Black 755 3294 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 3294 V 30 w(vector)p 1691 3294 V 29 w(p)p 1764 3294 V 31 w(2\(s48)p 2015 3294 V 29 w(call)p 2220 3294 V 30 w(t,)41 b(s48)p 2511 3294 V 30 w(ref)p 2673 3294 V 30 w(t\))p Black 755 3394 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3394 V 30 w(vector)p 1693 3394 V 29 w(length)p 1986 3394 V 29 w(2\(s48)p 2235 3394 V 29 w(call)p 2440 3394 V 30 w(t,)41 b(s48)p 2731 3394 V 30 w(ref)p 2893 3394 V 30 w(t\))p Black 755 3493 a Fn(\017)p Black 42 w Fo(s48)p 976 3493 V 30 w(ref)p 1138 3493 V 30 w(t)g(s48)p 1385 3493 V 30 w(vector)p 1679 3493 V 29 w(ref)p 1840 3493 V 30 w(2\(s48)p 2090 3493 V 29 w(call)p 2295 3493 V 30 w(t,)g(s48)p 2586 3493 V 30 w(ref)p 2748 3493 V 30 w(t,)g(long\))p Black 755 3593 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 3593 V 30 w(vector)p 1693 3593 V 29 w(set)p 1854 3593 V 30 w(2\(s48)p 2104 3593 V 29 w(call)p 2309 3593 V 30 w(t,)41 b(s48)p 2600 3593 V 30 w(ref)p 2762 3593 V 30 w(t,)g(long,)e(s48)p 3312 3593 V 30 w(ref)p 3474 3593 V 31 w(t\))p Black 755 3692 a Fn(\017)p Black 42 w Fo(s48)p 976 3692 V 30 w(ref)p 1138 3692 V 30 w(t)i(s48)p 1385 3692 V 30 w(make)p 1591 3692 V 30 w(vector)p 1885 3692 V 29 w(2\(s48)p 2134 3692 V 29 w(call)p 2339 3692 V 30 w(t,)f(long,)g(s48)p 2889 3692 V 30 w(ref)p 3051 3692 V 30 w(t\))70 b Fr(\(ma)n(y)27 b(GC\))p Black 755 3825 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 3825 V 30 w(string)p 1691 3825 V 29 w(p)p 1764 3825 V 31 w(2\(s48)p 2015 3825 V 29 w(call)p 2220 3825 V 30 w(t,)41 b(s48)p 2511 3825 V 30 w(ref)p 2673 3825 V 30 w(t\))p Black 755 3924 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3924 V 30 w(string)p 1693 3924 V 29 w(length)p 1986 3924 V 29 w(2\(s48)p 2235 3924 V 29 w(call)p 2440 3924 V 30 w(t,)41 b(s48)p 2731 3924 V 30 w(ref)p 2893 3924 V 30 w(t\))p Black 755 4024 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4024 V 30 w(string)p 1693 4024 V 29 w(ref)p 1854 4024 V 30 w(2\(s48)p 2104 4024 V 29 w(call)p 2309 4024 V 30 w(t,)41 b(s48)p 2600 4024 V 30 w(ref)p 2762 4024 V 30 w(t,)g(long\))p Black 755 4123 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 4123 V 30 w(string)p 1693 4123 V 29 w(set)p 1854 4123 V 30 w(2\(s48)p 2104 4123 V 29 w(call)p 2309 4123 V 30 w(t,)41 b(s48)p 2600 4123 V 30 w(ref)p 2762 4123 V 30 w(t,)g(long,)e(long\))p Black 755 4223 a Fn(\017)p Black 42 w Fo(s48)p 976 4223 V 30 w(ref)p 1138 4223 V 30 w(t)i(s48)p 1385 4223 V 30 w(make)p 1591 4223 V 30 w(string)p 1885 4223 V 29 w(2\(s48)p 2134 4223 V 29 w(call)p 2339 4223 V 30 w(t,)f(long,)g(char\))262 b Fr(\(ma)n(y)27 b(GC\))p Black 755 4355 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 4355 V 30 w(symbol)p 1691 4355 V 29 w(p)p 1764 4355 V 31 w(2\(s48)p 2015 4355 V 29 w(call)p 2220 4355 V 30 w(t,)41 b(s48)p 2511 4355 V 30 w(ref)p 2673 4355 V 30 w(t\))p Black 755 4455 a Fn(\017)p Black 42 w Fo(s48)p 976 4455 V 30 w(ref)p 1138 4455 V 30 w(t)g(s48)p 1385 4455 V 30 w(symbol)p 1679 4455 V 29 w(to)p 1796 4455 V 30 w(string)p 2090 4455 V 29 w(2\(s48)p 2339 4455 V 30 w(call)p 2545 4455 V 29 w(t,)g(s48)p 2835 4455 V 30 w(ref)p 2997 4455 V 30 w(t\))p Black 755 4587 a Fn(\017)p Black 42 w Fo(int)289 b(s48)p 1397 4587 V 30 w(byte)p 1603 4587 V 30 w(vector)p 1897 4587 V 29 w(p)p 1970 4587 V 31 w(2\(s48)p 2221 4587 V 29 w(call)p 2426 4587 V 30 w(t,)40 b(s48)p 2716 4587 V 30 w(ref)p 2878 4587 V 31 w(t\))p Black 755 4687 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4687 V 30 w(byte)p 1605 4687 V 30 w(vector)p 1899 4687 V 29 w(length)p 2192 4687 V 29 w(2\(s48)p 2441 4687 V 29 w(call)p 2646 4687 V 30 w(t,)40 b(s48)p 2936 4687 V 30 w(ref)p 3098 4687 V 31 w(t\))p Black 755 4786 a Fn(\017)p Black 42 w Fo(char)247 b(s48)p 1399 4786 V 30 w(byte)p 1605 4786 V 30 w(vector)p 1899 4786 V 29 w(ref)p 2060 4786 V 30 w(2\(s48)p 2310 4786 V 29 w(call)p 2515 4786 V 30 w(t,)41 b(s48)p 2806 4786 V 30 w(ref)p 2968 4786 V 30 w(t,)g(long\))p Black 755 4886 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 4886 V 30 w(byte)p 1605 4886 V 30 w(vector)p 1899 4886 V 29 w(set)p 2060 4886 V 30 w(2\(s48)p 2310 4886 V 29 w(call)p 2515 4886 V 30 w(t,)41 b(s48)p 2806 4886 V 30 w(ref)p 2968 4886 V 30 w(t,)g(long,)e(int\))p Black 755 4985 a Fn(\017)p Black 42 w Fo(s48)p 976 4985 V 30 w(ref)p 1138 4985 V 30 w(t)i(s48)p 1385 4985 V 30 w(make)p 1591 4985 V 30 w(byte)p 1797 4985 V 29 w(vector)p 2090 4985 V 29 w(2\(s48)p 2339 4985 V 30 w(call)p 2545 4985 V 29 w(t,)g(long,)f(int\))100 b Fr(\(ma)n(y)27 b(GC\))p Black 2109 5255 a(114)p Black eop end %%Page: 115 123 TeXDict begin 115 122 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(8.6)135 b(Calling)46 b(Sc)l(heme)f(functions)g(from) g(C)291 705 y Fr(External)29 b(co)r(de)h(that)g(has)g(b)r(een)h(called) f(from)f(Sc)n(heme)i(can)e(call)h(bac)n(k)g(to)g(Sc)n(heme)g(pro-)291 805 y(cedures)c(using)i(the)g(follo)n(wing)e(function.)p Black 307 936 a Fn(\017)p Black 41 w Fo(s48)p 527 936 27 4 v 30 w(ref)p 689 936 V 30 w(t)42 b(s48)p 937 936 V 30 w(call)p 1143 936 V 29 w(scheme)p 1436 936 V 29 w(2\(s48)p 1685 936 V 30 w(call)p 1891 936 V 29 w(t,)f(s48)p 2181 936 V 30 w(ref)p 2343 936 V 30 w(t)g(p,)g(long)f(nargs,)f(...\)) 291 1067 y Fr(This)34 b(calls)h(the)g(Sc)n(heme)g(pro)r(cedure)f Fo(p)g Fr(on)h Fo(nargs)e Fr(argumen)n(ts,)j(whic)n(h)e(are)g(passed)h (as)291 1166 y(additional)k(argumen)n(ts)g(to)h Fo(s48)p 1363 1166 V 30 w(call)p 1569 1166 V 30 w(scheme)p 1863 1166 V 29 w(2)p Fr(.)74 b(There)40 b(ma)n(y)f(b)r(e)i(at)f(most)g(t)n (w)n(elv)n(e)291 1266 y(argumen)n(ts.)61 b(The)36 b(v)-5 b(alue)37 b(returned)e(b)n(y)h(the)h(Sc)n(heme)f(pro)r(cedure)g(is)g (returned)g(b)n(y)g(the)291 1366 y(C)28 b(pro)r(cedure.)38 b(In)n(v)n(oking)27 b(an)n(y)h(Sc)n(heme)g(pro)r(cedure)g(ma)n(y)f(p)r (oten)n(tially)i(cause)e(a)h(garbage)291 1465 y(collection.)415 1565 y(There)19 b(are)e(some)i(complications)f(that)h(o)r(ccur)f(when)i (mixing)e(calls)h(from)f(C)h(to)g(Sc)n(heme)291 1665 y(with)29 b(con)n(tin)n(uations)f(and)h(threads.)40 b(C)29 b(only)g(supp)r(orts)f(do)n(wn)n(w)n(ard)f(con)n(tin)n(uations)h(\(via) 291 1764 y Fo(longjmp\(\))p Fr(\).)39 b(Sc)n(heme)30 b(con)n(tin)n(uations)e(that)i(capture)f(a)g(p)r(ortion)g(of)h(the)g(C) f(stac)n(k)g(ha)n(v)n(e)291 1864 y(to)40 b(follo)n(w)g(the)i(same)e (restriction.)76 b(F)-7 b(or)40 b(example,)k(supp)r(ose)c(Sc)n(heme)h (pro)r(cedure)f Fo(s0)291 1963 y Fr(captures)f(con)n(tin)n(uation)h Fo(a)g Fr(and)g(then)h(calls)f(C)g(pro)r(cedure)g Fo(c0)p Fr(,)j(whic)n(h)d(in)h(turn)g(calls)291 2063 y(Sc)n(heme)26 b(pro)r(cedure)g Fo(s1)p Fr(.)36 b(Pro)r(cedure)25 b Fo(s1)h Fr(can)g(safely)g(call)h(the)g(con)n(tin)n(uation)f Fo(a)p Fr(,)g(b)r(ecause)291 2163 y(that)32 b(is)g(a)g(do)n(wn)n(w)n (ard)e(use.)50 b(When)33 b Fo(a)e Fr(is)h(called)g(Sc)n(heme)g(48)f (will)i(remo)n(v)n(e)d(the)i(p)r(ortion)291 2262 y(of)k(the)i(C)e(stac) n(k)g(used)h(b)n(y)f(the)i(call)e(to)h Fo(c0)p Fr(.)63 b(On)37 b(the)g(other)f(hand,)k(if)j Fo(s1)36 b Fr(captures)g(a)291 2362 y(con)n(tin)n(uation,)e(that)f(con)n(tin)n(uation)g(cannot)f(b)r (e)i(used)g(from)f Fo(s0)p Fr(,)h(b)r(ecause)f(b)n(y)g(the)g(time)291 2462 y(con)n(trol)21 b(returns)h(to)g Fo(s0)g Fr(the)h(C)g(stac)n(k)e (used)i(b)n(y)h Fo(c0)d Fr(will)i(no)g(longer)e(b)r(e)i(v)-5 b(alid.)35 b(An)23 b(attempt)291 2561 y(to)31 b(in)n(v)n(ok)n(e)f(an)i (up)n(w)n(ard)e(con)n(tin)n(uation)h(that)h(is)g(closed)f(o)n(v)n(er)f (a)h(p)r(ortion)g(of)h(the)g(C)g(stac)n(k)291 2661 y(will)27 b(raise)g(an)g(exception.)415 2760 y(In)22 b(Sc)n(heme)f(48)f(threads)g (are)h(implemen)n(ted)h(using)e(con)n(tin)n(uations,)i(so)e(the)i(do)n (wn)n(w)n(ard)291 2860 y(restriction)27 b(applies)g(to)h(them)h(as)e(w) n(ell.)38 b(An)28 b(attempt)h(to)f(return)g(from)f(Sc)n(heme)h(to)g(C)g (at)291 2960 y(a)33 b(time)h(when)f(the)h(appropriate)e(C)i(frame)f(is) g(not)h(on)f(top)g(of)h(the)g(C)f(stac)n(k)g(will)h(cause)291 3059 y(the)c(curren)n(t)g(thread)f(to)i(blo)r(c)n(k)e(un)n(til)i(the)g (frame)e(is)i(a)n(v)-5 b(ailable.)43 b(F)-7 b(or)30 b(example,)g(supp)r (ose)291 3159 y(thread)20 b Fo(t0)h Fr(calls)g(a)g(C)g(pro)r(cedure)f (whic)n(h)h(calls)g(bac)n(k)g(to)g(Sc)n(heme,)h(at)f(whic)n(h)h(p)r (oin)n(t)f(con)n(trol)291 3259 y(switc)n(hes)f(to)i(thread)f Fo(t1)p Fr(,)h(whic)n(h)f(also)f(calls)h(C)h(and)f(then)h(bac)n(k)e(to) i(Sc)n(heme.)34 b(A)n(t)22 b(this)g(p)r(oin)n(t)291 3358 y(b)r(oth)28 b Fo(t0)f Fr(and)g Fo(t1)g Fr(ha)n(v)n(e)g(activ)n(e)g (calls)g(to)g(C)h(on)g(the)g(C)f(stac)n(k,)g(with)h Fo(t1)p Fr('s)f(C)h(frame)f(ab)r(o)n(v)n(e)291 3458 y Fo(t0)p Fr('s.)60 b(If)36 b(thread)f Fo(t0)g Fr(attempts)h(to)f(return)h(from)f (Sc)n(heme)g(to)h(C)g(it)g(will)g(blo)r(c)n(k,)h(as)e(its)291 3558 y(frame)28 b(is)i(not)f(accessible.)41 b(Once)29 b Fo(t1)f Fr(has)h(returned)g(to)g(C)h(and)f(from)g(there)g(to)g(Sc)n (heme,)291 3657 y Fo(t0)j Fr(will)h(b)r(e)g(able)g(to)g(resume.)52 b(The)34 b(return)e(to)h(Sc)n(heme)g(is)g(required)f(b)r(ecause)g(con)n (text)291 3757 y(switc)n(hes)e(can)g(only)g(o)r(ccur)g(while)h(Sc)n (heme)g(co)r(de)f(is)h(running.)45 b Fo(T0)30 b Fr(will)h(also)f(b)r(e) h(able)f(to)291 3856 y(resume)d(if)34 b Fo(t1)27 b Fr(uses)g(a)g(con)n (tin)n(uation)g(to)h(thro)n(w)e(past)i(its)f(call)h(to)f(C.)291 4127 y Fj(8.7)135 b(In)l(teracting)46 b(with)g(the)f(Sc)l(heme)g(heap) 291 4309 y Fr(Sc)n(heme)30 b(48)f(uses)h(a)g(cop)n(ying,)g(precise)g (garbage)e(collector.)44 b(An)n(y)30 b(pro)r(cedure)f(that)i(allo-)291 4408 y(cates)c(ob)5 b(jects)27 b(within)h(the)g(Sc)n(heme)f(48)g(heap)h (ma)n(y)e(trigger)g(a)i(garbage)d(collection.)415 4508 y(Lo)r(cal)i(ob)5 b(ject)28 b(references)f(refer)g(to)h(v)-5 b(alues)28 b(in)g(the)h(Sc)n(heme)f(48)f(heap)h(and)g(are)f(auto-)291 4608 y(matically)d(registered)g(with)i(the)g(garbage)d(collector)h(b)n (y)h(the)g(in)n(terface)g(for)g(the)h(duration)291 4707 y(of)h(a)g(function)h(call)f(from)h(Sc)n(heme)f(to)g(C)h(so)f(that)g (the)h(v)-5 b(alues)28 b(will)f(b)r(e)h(retained)f(and)h(the)291 4807 y(references)e(will)i(b)r(e)g(up)r(dated)g(if)g(the)g(garbage)d (collector)i(mo)n(v)n(es)f(the)i(ob)5 b(ject.)415 4907 y(Global)29 b(ob)5 b(ject)29 b(references)e(need)j(to)f(b)r(e)g (created)f(and)h(freed)g(explicitly)g(for)g(Sc)n(heme)291 5006 y(v)-5 b(alues)37 b(that)i(need)f(to)g(surviv)n(e)f(one)h (function)h(call,)h(e.g.)69 b(that)38 b(are)f(stored)h(in)g(global)p Black 1660 5255 a(115)p Black eop end %%Page: 116 124 TeXDict begin 116 123 bop 0 TeXcolorgray Black Black Black 739 523 a Fr(v)-5 b(ariables,)26 b(global)g(data)h(structures)f (or)g(are)g(passed)h(to)g(libraries.)35 b(See)27 b(section)p 0 0 1 TeXcolorrgb 27 w(8.7.1)p Black 26 w(for)739 623 y(details.)863 722 y(Additionally)-7 b(,)26 b(the)f(in)n(terface)f(pro) n(vides)f Fq(lo)l(c)l(al)28 b(bu\013ers)k Fr(that)25 b(are)f(mallo)r(c'd)g(regions)f(of)739 822 y(memory)18 b(v)-5 b(alid)18 b(for)h(the)g(duration)f(of)g(a)g(function)i(call)e (and)g(are)g(freed)g(automatically)g(up)r(on)739 922 y(return)36 b(from)f(the)i(external)e(co)r(de.)63 b(This)36 b(reliev)n(es)f(the)h(programmer)e(from)i(explicitly)739 1021 y(freeing)27 b(lo)r(cally)g(allo)r(cated)g(memory)-7 b(.)36 b(See)27 b(section)p 0 0 1 TeXcolorrgb 28 w(8.7.2)p Black 26 w(for)g(details.)863 1121 y(The)j(in)n(terface)f(treats)h(b)n (yte)f(v)n(ectors)g(in)h(a)f(sp)r(ecial)h(w)n(a)n(y)-7 b(,)29 b(since)g(the)i(garbage)c(collec-)739 1220 y(tor)e(has)h(no)g (facilit)n(y)g(for)f(up)r(dating)i(p)r(oin)n(ters)e(to)h(the)h(in)n (teriors)e(of)h(ob)5 b(jects,)26 b(so)f(that)i(suc)n(h)739 1320 y(p)r(oin)n(ters,)20 b(for)d(example)h(the)h(ones)f(returned)g(b)n (y)h Fo(s48)p 2389 1320 27 4 v 30 w(unsafe)p 2683 1320 V 29 w(extract)p 3020 1320 V 28 w(byte)p 3224 1320 V 30 w(vector)p 3518 1320 V 29 w(2)p Fr(,)739 1420 y(will)29 b(lik)n(ely)f(b)r(ecome)h(in)n(v)-5 b(alid)28 b(when)h(a)g(garbage)d (collection)i(o)r(ccurs.)39 b(The)29 b(in)n(terface)f(pro-)739 1519 y(vides)22 b(a)g(facilit)n(y)g(to)h(prev)n(en)n(t)e(a)h(garbage)e (collection)i(from)g(in)n(v)-5 b(alidating)22 b(p)r(oin)n(ters)g(to)g (b)n(yte)739 1619 y(v)n(ector's)k(memory)h(region,)f(see)h(section)p 0 0 1 TeXcolorrgb 28 w(8.7.3)p Black 26 w(for)g(details.)739 1848 y Fe(8.7.1)112 b(Registering)38 b(global)g(references)739 2001 y Fr(When)f(external)e(co)r(de)h(needs)g(a)g(reference)g(ob)5 b(ject)36 b(to)g(surviv)n(e)f(the)h(curren)n(t)g(call,)i(the)739 2101 y(external)31 b(co)r(de)i(needs)f(to)g(do)g(explicit)h(b)r(o)r (okk)n(eeping.)49 b(Lo)r(cal)32 b(references)f(m)n(ust)i(not)f(b)r(e) 739 2200 y(stored)27 b(in)h(global)e(v)-5 b(ariables)26 b(of)i(the)g(external)f(co)r(de)g(or)g(passed)g(to)g(other)g(threads,)g (since)739 2300 y(all)35 b(lo)r(cal)h(references)e(are)h(freed)g(once)h (the)g(call)f(returns,)i(whic)n(h)f(leads)f(to)h(a)f(dangling)739 2400 y(p)r(oin)n(ter)h(in)g(the)h(global)e(v)-5 b(ariable)35 b(or)g(other)h(thread)g(resp)r(ectiv)n(ely)-7 b(.)62 b(Instead,)38 b(promote)739 2499 y(a)31 b(lo)r(cal)g(reference)g(to)h (a)f(global)g(reference)f(and)i(store)f(it)h(in)g(a)f(global)g(v)-5 b(ariable)30 b(or)h(pass)739 2599 y(to)i(another)f(thread)h(as)f (global)g(references)g(will)i(surviv)n(e)e(the)h(curren)n(t)f(call.)54 b(Since)33 b(the)739 2698 y(foreign-function)g(in)n(terface)g(nev)n(er) g(automatically)f(frees)h(global)g(references,)h(the)g(pro-)739 2798 y(grammer)26 b(m)n(ust)i(free)f(them)h(at)g(the)g(righ)n(t)e (time.)p Black 755 2931 a Fn(\017)p Black 42 w Fo(s48)p 976 2931 V 30 w(ref)p 1138 2931 V 30 w(t)41 b(s48)p 1385 2931 V 30 w(make)p 1591 2931 V 30 w(global)p 1885 2931 V 29 w(ref\(s48)p 2222 2931 V 28 w(value)f(obj\))p Black 755 3030 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 3030 V 30 w(free)p 1605 3030 V 30 w(global)p 1899 3030 V 29 w(ref\(s48)p 2236 3030 V 28 w(ref)p 2396 3030 V 30 w(t)41 b(ref\))p Black 755 3130 a Fn(\017)p Black 42 w Fo(s48)p 976 3130 V 30 w(ref)p 1138 3130 V 30 w(t)g(s48)p 1385 3130 V 30 w(local)p 1635 3130 V 29 w(to)p 1752 3130 V 31 w(global)p 2047 3130 V 29 w(ref\(s48)p 2384 3130 V 28 w(ref)p 2544 3130 V 30 w(t)h(ref\))739 3263 y(s48)p 876 3263 V 30 w(make)p 1082 3263 V 30 w(global)p 1376 3263 V 29 w(ref)31 b Fr(p)r(ermanen)n(tly)h(registers)f(the)i(Sc)n (heme)g(v)-5 b(alue)32 b Fq(obj)46 b Fr(as)32 b(a)g(global)739 3363 y(reference)22 b(with)i(the)g(garbage)d(collector.)35 b(Basic)22 b(Sc)n(heme)h(v)-5 b(alues)23 b(are)p 2968 3363 V 54 w Fo(s48)p 3131 3363 V 30 w(value)p 3381 3363 V 30 w(true)p Fr(,)p 739 3462 V 765 3462 a Fo(s48)p 902 3462 V 30 w(value)p 1152 3462 V 30 w(false)p Fr(,)p 1443 3462 V 49 w Fo(s48)p 1606 3462 V 30 w(value)p 1856 3462 V 30 w(null)p Fr(,)p 2104 3462 V 50 w Fo(s48)p 2267 3462 V 30 w(value)p 2517 3462 V 29 w(unspecific)p Fr(,)p 3026 3462 V 48 w Fo(s48)p 3189 3462 V 30 w(value)p 3439 3462 V 29 w(undefined)p Fr(,)739 3562 y(and)p 906 3562 V 59 w Fo(s48)p 1069 3562 V 30 w(value)p 1319 3562 V 29 w(eof)p Fr(.)863 3661 y(T)-7 b(o)39 b(free)g(a)g(global)f(reference)g(an)h(to)g (unregister)f(it)h(with)h(the)g(garbage)c(collector,)739 3761 y(use)26 b Fo(s48)p 1018 3761 V 30 w(free)p 1224 3761 V 29 w(global)p 1517 3761 V 29 w(ref)p Fr(.)35 b(The)26 b(function)h Fo(s48)p 2361 3761 V 30 w(local)p 2611 3761 V 29 w(to)p 2728 3761 V 31 w(global)p 3023 3761 V 28 w(ref)e Fr(promotes)g(a)739 3861 y(lo)r(cal)i(reference)g(ob)5 b(ject)27 b(to)g(a)h(global)e(reference)h(ob)5 b(ject.)863 3960 y(F)-7 b(or)27 b(example,)f(to)h(main)n(tain)f(a)h(global)e(list)i (of)g(v)-5 b(alues,)27 b(declare)e(a)i(static)g(global)e(v)-5 b(ari-)739 4060 y(able)p Black Black 826 4222 a Fo(s48_ref_t)40 b(global_list)f(=)k(NULL;)739 4384 y Fr(and)27 b(initialize)h(it)g(in)g (the)g(external)f(co)r(de's)g(initialization)g(function)p Black Black 826 4545 a Fo(global_list)39 b(=)k(s48_make_global_r)o(ef)o (\(_s)o(48)o(_va)o(lu)o(e_)o(nul)o(l\))o(;)739 4707 y Fr(Note)27 b(that)g(y)n(ou)g(need)g(to)g(use)f(a)h(Sc)n(heme)g(v)-5 b(alue)27 b(\(not)g(a)g(reference)f(ob)5 b(ject\))27 b(as)f(the)i(argu-)739 4807 y(men)n(t)h(for)g Fo(s48)p 1216 4807 V 30 w(make)p 1422 4807 V 30 w(global)p 1716 4807 V 29 w(ref)p Fr(,)f(since)h(there)g(is)g(not)h(y)n(et)f(a)f(call)h (ob)5 b(ject)29 b(at)g(the)h(time)739 4907 y(external)j(co)r(de)h(gets) g(initialized.)57 b(T)-7 b(o)34 b(add)g Fo(new)p 2311 4907 V 30 w(value)e Fr(to)i(the)h(list,)h(y)n(ou)d(can)h(use)g(the)739 5006 y(follo)n(wing)26 b(snipp)r(et:)p Black 2109 5255 a(116)p Black eop end %%Page: 117 125 TeXDict begin 117 124 bop 0 TeXcolorgray Black Black Black Black Black 378 523 a Fo(temp)42 b(=)h(global_list;)378 623 y(global_list)c(=)87 b(s48_local_to_gl)o(oba)o(l_)o(re)o(f\(s)o(48) o(_co)o(ns)o(_2)o(\(ca)o(ll)o(,)38 b(new_value,)h(global_list\)\))378 722 y(s48_free_global_)o(re)o(f\()o(tem)o(p\))o(;)291 904 y Fr(Y)-7 b(ou)26 b(ha)n(v)n(e)f(to)h(remem)n(b)r(er)g(to)g(alw)n (a)n(ys)e(promote)i(reference)f(ob)5 b(jects)26 b(to)g(global)f (references)291 1003 y(when)33 b(assigning)f(to)i(a)f(global)f(v)-5 b(ariable)32 b(\(and)i(later,)g(to)g(free)f(them)h(man)n(ually\).)54 b(Note)291 1103 y(that)27 b(it)h(is)f(more)f(e\016cien)n(t)h(to)g(free) g(the)h(previous)e(head)h(of)g(the)h(list)f(when)g(adding)g(a)g(new)291 1202 y(elemen)n(t)g(to)h(the)g(list.)291 1435 y Fe(8.7.2)112 b(Lo)s(cal)38 b(bu\013ers)291 1588 y Fr(The)20 b(foreign-function)f(in) n(terface)g(supp)r(orts)h(the)h(programmer)c(with)k(allo)r(cating)e (memory)291 1687 y(in)30 b(external)f(co)r(de:)42 b(The)30 b(programmer)d(can)j(request)f(c)n(h)n(unks)h(of)g(memory)-7 b(,)30 b(called)f(lo)r(cal)291 1787 y(bu\013ers,)e(that)h(are)f (automatically)f(freed)i(on)f(return)g(from)g(the)h(curren)n(t)f(call.) p Black 307 1935 a Fn(\017)p Black 41 w Fo(void)40 b(*s48)p 787 1935 27 4 v 30 w(make)p 993 1935 V 30 w(local)p 1243 1935 V 29 w(buf)g(\(s48)p 1620 1935 V 30 w(call)p 1826 1935 V 30 w(t,)g(size)p 2160 1935 V 30 w(t\))p Black 307 2035 a Fn(\017)p Black 41 w Fo(void)g(s48)p 743 2035 V 30 w(free)p 949 2035 V 30 w(local)p 1199 2035 V 29 w(buf)h(\(s48)p 1577 2035 V 29 w(call)p 1782 2035 V 30 w(t,)g(void)f(*\))415 2183 y Fr(The)33 b(function)g Fo(s48)p 1058 2183 V 30 w(make)p 1264 2183 V 30 w(local)p 1514 2183 V 29 w(buf)f Fr(returns)g(a)g(blo)r(c)n(k)g(of)h(memory)f(of)h (the)g(giv)n(en)291 2283 y(size)j(in)h(b)n(ytes.)63 b(This)37 b(memory)f(freed)g(b)n(y)h(the)g(foreign-function)f(in)n(terface)g (when)h(the)291 2383 y(curren)n(t)26 b(call)i(returns.)36 b(T)-7 b(o)27 b(free)g(the)h(bu\013er)g(man)n(ually)-7 b(,)27 b(use)g Fo(s48)p 2369 2383 V 31 w(free)p 2576 2383 V 29 w(local)p 2825 2383 V 30 w(buf)p Fr(.)291 2615 y Fe(8.7.3)112 b(Sp)s(ecial)39 b(treatmen)m(t)e(for)g(b)m(yte)h(v)m (ectors)291 2768 y Fr(The)21 b(in)n(terface)g(treats)h(b)n(yte)f(v)n (ectors)f(in)i(a)g(sp)r(ecial)f(w)n(a)n(y)-7 b(,)22 b(since)f(the)i (garbage)c(collector)h(has)291 2868 y(no)28 b(facilit)n(y)h(for)f(up)r (dating)i(p)r(oin)n(ters)e(to)h(the)g(in)n(teriors)e(of)i(ob)5 b(jects,)29 b(so)f(that)h(suc)n(h)g(p)r(oin)n(t-)291 2967 y(ers,)23 b(for)f(example)g(the)i(ones)e(returned)g(b)n(y)i Fo(s48)p 1782 2967 V 30 w(unsafe)p 2076 2967 V 29 w(extract)p 2413 2967 V 29 w(byte)p 2618 2967 V 29 w(vector)p 2911 2967 V 29 w(2)p Fr(,)g(will)291 3067 y(lik)n(ely)e(b)r(ecome)g(in)n(v) -5 b(alid)23 b(when)g(a)f(garbage)f(collection)h(o)r(ccurs.)34 b(The)23 b(in)n(terface)f(pro)n(vides)f(a)291 3167 y(facilit)n(y)e(to)h (prev)n(en)n(t)e(a)i(garbage)d(collection)i(from)g(in)n(v)-5 b(alidating)19 b(p)r(oin)n(ters)g(to)h(b)n(yte)f(v)n(ector's)291 3266 y(memory)29 b(region.)43 b(It)31 b(do)r(es)f(this)g(b)n(y)g(cop)n (ying)f(b)n(yte)h(v)n(ectors)f(that)h(are)f(used)h(in)h(external)291 3366 y(co)r(de)c(from)g(and)h(to)f(the)h(Sc)n(heme)g(heap.)415 3465 y(These)f(functions)h(create)f(b)n(yte)h(v)n(ectors:)p Black 307 3614 a Fn(\017)p Black 41 w Fo(s48)p 527 3614 V 30 w(ref)p 689 3614 V 30 w(t)42 b(s48)p 937 3614 V 30 w(make)p 1143 3614 V 29 w(byte)p 1348 3614 V 30 w(vector)p 1642 3614 V 29 w(2\(s48)p 1891 3614 V 29 w(call)p 2096 3614 V 30 w(t,)f(long\))315 b Fr(\(ma)n(y)27 b(GC\))p Black 307 3713 a Fn(\017)p Black 41 w Fo(s48)p 527 3713 V 30 w(ref)p 689 3713 V 30 w(t)42 b(s48)p 937 3713 V 30 w(make)p 1143 3713 V 29 w(unmovable)p 1568 3713 V 28 w(byte)p 1772 3713 V 30 w(vector)p 2066 3713 V 29 w(2\(s48)p 2315 3713 V 29 w(call)p 2520 3713 V 30 w(t,)e(long\))2785 3813 y Fr(\(ma)n(y)27 b(GC\))p Black 307 3913 a Fn(\017)p Black 41 w Fo(s48)p 527 3913 V 30 w(ref)p 689 3913 V 30 w(t)42 b(s48)p 937 3913 V 30 w(enter)p 1187 3913 V 29 w(byte)p 1392 3913 V 30 w(vector)p 1686 3913 V 29 w(2\(s48)p 1935 3913 V 29 w(call)p 2140 3913 V 30 w(t,)e(const)g(char)g (*,)g(long\))2785 4012 y Fr(\(ma)n(y)27 b(GC\))p Black 307 4112 a Fn(\017)p Black 41 w Fo(s48)p 527 4112 V 30 w(ref)p 689 4112 V 30 w(t)42 b(s48)p 937 4112 V 30 w(enter)p 1187 4112 V 29 w(unmovable)p 1612 4112 V 28 w(byte)p 1816 4112 V 29 w(vector)p 2109 4112 V 29 w(2\(s48)p 2358 4112 V 30 w(call)p 2564 4112 V 29 w(t,)f(const)e(char)h(*,)h(long\)) 2785 4211 y Fr(\(ma)n(y)27 b(GC\))415 4360 y Fo(s48)p 552 4360 V 30 w(make)p 758 4360 V 30 w(byte)p 964 4360 V 30 w(vector)p 1258 4360 V 29 w(2)18 b Fr(creates)f(a)h(b)n(yte)g(v)n (ector)f(of)h(giv)n(en)g(size,)i Fo(s48)p 2690 4360 V 30 w(make)p 2896 4360 V 30 w(unmovable)p 3322 4360 V 28 w(byte)p 3526 4360 V 29 w(vector)p 3819 4360 V 29 w(2)291 4459 y Fr(creates)j(a)g(b)n(yte)h(v)n(ector)f(in)i(that)f(is)g (not)g(mo)n(v)n(ed)g(b)n(y)f(the)i(garbage)d(collector)h(\(only)h(the)g (Bi-)291 4559 y(b)r(op)k(garbage)f(collector)g(supp)r(orts)i(this\).)40 b(The)29 b(functions)g Fo(s48)p 2338 4559 V 30 w(enter)p 2588 4559 V 30 w(byte)p 2794 4559 V 29 w(vector)p 3087 4559 V 29 w(2)291 4659 y Fr(and)e Fo(s48)p 589 4659 V 30 w(enter)p 839 4659 V 29 w(unmovable)p 1264 4659 V 28 w(byte)p 1468 4659 V 30 w(vector)p 1762 4659 V 29 w(2)g Fr(create)g(and)g(initialize)h(b)n(yte)f(v)n(ectors.)415 4758 y(The)h(follo)n(wing)e(functions)i(cop)n(y)f(b)n(yte)g(v)n(ectors) f(from)i(and)f(to)h(the)g(Sc)n(heme)f(heap:)p Black 307 4907 a Fn(\017)p Black 41 w Fo(void)40 b(s48)p 743 4907 V 30 w(extract)p 1081 4907 V 29 w(byte)p 1286 4907 V 29 w(vector)p 1579 4907 V 29 w(region)p 1872 4907 V 29 w(2\(s48)p 2121 4907 V 30 w(call)p 2327 4907 V 29 w(t,)h(s48)p 2617 4907 V 30 w(ref)p 2779 4907 V 30 w(t,)g(long,)e(long,)h(char*\))p Black 307 5006 a Fn(\017)p Black 41 w Fo(void)g(s48)p 743 5006 V 30 w(enter)p 993 5006 V 30 w(byte)p 1199 5006 V 29 w(vector)p 1492 5006 V 29 w(region)p 1785 5006 V 29 w(2\(s48)p 2034 5006 V 29 w(call)p 2239 5006 V 30 w(t,)h(s48)p 2530 5006 V 30 w(ref)p 2692 5006 V 30 w(t,)g(long,)e (long,)h(char*\))p Black 1660 5255 a Fr(117)p Black eop end %%Page: 118 126 TeXDict begin 118 125 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(void)39 b(s48)p 1191 523 27 4 v 31 w(copy)p 1398 523 V 29 w(from)p 1603 523 V 30 w(byte)p 1809 523 V 30 w(vector)p 2103 523 V 29 w(2\(s48)p 2352 523 V 29 w(call)p 2557 523 V 30 w(t,)h(s48)p 2847 523 V 30 w(ref)p 3009 523 V 31 w(t,)g(char)g(*\))p Black 755 623 a Fn(\017)p Black 42 w Fo(void)f(s48)p 1191 623 V 31 w(copy)p 1398 623 V 29 w(to)p 1515 623 V 31 w(byte)p 1722 623 V 30 w(vector)p 2016 623 V 28 w(2\(s48)p 2264 623 V 30 w(call)p 2470 623 V 29 w(t,)i(s48)p 2760 623 V 30 w(ref)p 2922 623 V 30 w(t,)g(char)f(*\))863 749 y(s48)p 1000 749 V 31 w(extract)p 1339 749 V 28 w(byte)p 1543 749 V 30 w(vector)p 1837 749 V 29 w(region)p 2130 749 V 29 w(2)33 b Fr(copies)g(a)g(giv)n(en)g(section)g(from)g(the)h (giv)n(en)739 849 y(b)n(yte)d(v)n(ector)e(to)i(its)g(last)g(argumen)n (t,)f Fo(s48)p 2099 849 V 30 w(enter)p 2349 849 V 30 w(byte)p 2555 849 V 29 w(vector)p 2848 849 V 29 w(region)p 3141 849 V 29 w(2)h Fr(copies)f(the)739 949 y(con)n(ten)n(ts)18 b(of)g(its)g(last)h(argumen)n(t)e(to)h(its)h(\014rst)f(argumen)n(t)f (to)h(the)h(giv)n(en)f(index.)34 b Fo(s48)p 3307 949 V 30 w(copy)p 3513 949 V 29 w(from)p 3718 949 V 30 w(byte)p 3924 949 V 30 w(vector)p 4218 949 V 29 w(2)739 1048 y Fr(copies)28 b(the)h(whole)f(b)n(yte)h(v)n(ector)e(to)i(its)f(last)h (argumen)n(t,)f Fo(s48)p 2712 1048 V 30 w(copy)p 2918 1048 V 29 w(to)p 3035 1048 V 31 w(byte)p 3242 1048 V 30 w(vector)p 3536 1048 V 29 w(2)739 1148 y Fr(copies)f(the)h(con)n (ten)n(ts)f(of)g(its)h(last)f(argumen)n(t)g(to)g(the)h(b)n(yte)g(v)n (ector.)p Black 755 1274 a Fn(\017)p Black 42 w Fo(char)39 b(*s48)p 1235 1274 V 30 w(extract)p 1573 1274 V 29 w(byte)p 1778 1274 V 29 w(vector)p 2071 1274 V 29 w(unmanaged)p 2496 1274 V 28 w(2\(s48)p 2744 1274 V 29 w(call)p 2949 1274 V 30 w(t,)i(s48)p 3240 1274 V 30 w(ref)p 3402 1274 V 30 w(t\))p Black 755 1374 a Fn(\017)p Black 42 w Fo(void)81 b(s48)p 1233 1374 V 30 w(release)p 1571 1374 V 29 w(byte)p 1776 1374 V 29 w(vector)p 2069 1374 V 29 w(2\(s48)p 2318 1374 V 29 w(call)p 2523 1374 V 30 w(t,)41 b(s48)p 2814 1374 V 30 w(ref)p 2976 1374 V 30 w(t,)g(char*\))863 1501 y(s48)p 1000 1501 V 31 w(extract)p 1339 1501 V 28 w(byte)p 1543 1501 V 30 w(vector)p 1837 1501 V 29 w(unmanaged)p 2262 1501 V 27 w(2)31 b Fr(returns)f(a)g(lo)r(cal)g(bu\013er)h(that)g (is)f(v)-5 b(alid)739 1600 y(during)24 b(the)h(curren)n(t)e(external)h (call)g(and)g(copies)g(the)h(con)n(ten)n(ts)e(of)i(the)g(giv)n(en)e(b)n (yte)i(v)n(ector)739 1700 y(to)j(the)g(returned)g(bu\013er.)39 b(The)28 b(returned)f(b)n(yte)h(v)n(ector)f(ma)n(y)g(b)r(e)i(a)f(cop)n (y)f(of)h(the)g(Sc)n(heme)739 1800 y(b)n(yte)k(v)n(ector,)h(c)n(hanges) e(made)h(to)g(the)h(returned)f(b)n(yte)h(v)n(ector)e(will)i(not)f (necessarily)f(b)r(e)739 1899 y(re\015ected)c(in)h(Sc)n(heme)g(un)n (til)g Fo(s48)p 1799 1899 V 30 w(release)p 2137 1899 V 28 w(byte)p 2341 1899 V 30 w(vector)p 2635 1899 V 29 w(2)f Fr(is)h(called.)863 1999 y(The)i(follo)n(wing)e(functions)i(to)f (access)f(b)n(yte)i(v)n(ectors)e(come)h(with)g(the)h(most)f(supp)r(ort) 739 2098 y(from)36 b(the)h(foreign-function)f(in)n(terface.)62 b(Byte)37 b(v)n(ectors)e(that)i(are)e(accessed)g(via)h(these)739 2198 y(functions)e(are)g(automatically)f(managed)g(b)n(y)h(the)g(in)n (terface)g(and)g(are)f(copied)h(bac)n(k)f(to)739 2298 y(Sc)n(heme)27 b(on)h(return)f(from)g(the)h(curren)n(t)f(call:)p Black 755 2424 a Fn(\017)p Black 42 w Fo(char)39 b(*s48)p 1235 2424 V 30 w(extract)p 1573 2424 V 29 w(byte)p 1778 2424 V 29 w(vector)p 2071 2424 V 29 w(2\(s48)p 2320 2424 V 30 w(call)p 2526 2424 V 29 w(t,)i(s48)p 2816 2424 V 30 w(ref)p 2978 2424 V 30 w(t\))p Black 755 2524 a Fn(\017)p Black 42 w Fo(char)e(*s48)p 1235 2524 V 30 w(extract)p 1573 2524 V 29 w(byte)p 1778 2524 V 29 w(vector)p 2071 2524 V 29 w(readonly)p 2452 2524 V 28 w(2\(s48)p 2700 2524 V 30 w(call)p 2906 2524 V 29 w(t,)i(s48)p 3196 2524 V 30 w(ref)p 3358 2524 V 30 w(t\))863 2651 y(s48)p 1000 2651 V 31 w(extract)p 1339 2651 V 28 w(byte)p 1543 2651 V 30 w(vector)p 1837 2651 V 29 w(2)24 b Fr(extracts)g(a)g(b)n(yte)h(v)n (ector)e(from)i(Sc)n(heme)f(b)n(y)h(making)739 2750 y(a)18 b(cop)n(y)g(of)h(the)g(b)n(yte)g(v)n(ectors)e(con)n(ten)n(ts)h(and)h (returning)f(a)g(p)r(oin)n(ter)g(to)h(that)g(cop)n(y)-7 b(.)33 b(Changes)739 2850 y(to)27 b(the)h(b)n(yte)g(v)n(ector)e(are)h (automatically)f(copied)h(bac)n(k)g(to)g(the)h(Sc)n(heme)g(heap)f(when) h(the)739 2949 y(function)40 b(returns,)i(external)d(co)r(de)h(raises)e (an)i(exception,)i(or)d(external)g(co)r(de)h(calls)f(a)739 3049 y(Sc)n(heme)g(function.)74 b Fo(s48)p 1579 3049 V 30 w(extract)p 1917 3049 V 28 w(byte)p 2121 3049 V 30 w(vector)p 2415 3049 V 29 w(readonly)p 2796 3049 V 28 w(2)39 b Fr(should)g(b)r(e)h(used)g(for)739 3149 y(b)n(yte)23 b(v)n(ectors)f(that)i(are)f(not)g(mo)r(di\014ed)h(b)n(y)g(external)e (co)r(de,)j(since)e(these)h(b)n(yte)f(v)n(ectors)f(are)739 3248 y(not)27 b(copied)h(bac)n(k)f(to)g(Sc)n(heme.)739 3476 y Fe(8.7.4)112 b(Memory)39 b(o)m(v)m(erhead)739 3629 y Fr(Eac)n(h)27 b(reference)g(ob)5 b(ject)27 b(consumes)h(a)f (certain)g(amoun)n(t)h(of)g(memory)f(itself,)h(in)g(addition)739 3729 y(to)k(the)h(memory)e(tak)n(en)h(b)n(y)g(the)h(referred)e(Sc)n (heme)h(ob)5 b(ject)33 b(itself.)51 b(Ev)n(en)32 b(though)g(lo)r(cal) 739 3828 y(references)22 b(are)g(ev)n(en)n(tually)h(freed)g(on)g (return)g(of)g(an)h(external)e(call,)i(there)f(are)f(some)h(situ-)739 3928 y(ations)j(where)g(it)h(is)f(desirable)g(to)g(free)g(lo)r(cal)g (references)g(explicitly)-7 b(,)27 b(since)f(w)n(aiting)g(un)n(til)739 4028 y(the)31 b(call)e(returns)h(ma)n(y)g(b)r(e)g(to)r(o)g(long)g(or)f (nev)n(er)g(happ)r(en,)j(whic)n(h)e(could)g(k)n(eep)g(unneeded)739 4127 y(ob)5 b(jects)27 b(liv)n(e:)p Black 863 4281 a Fn(\017)p Black 41 w Fr(External)34 b(co)r(de)g(ma)n(y)g(create)g(a)g (large)f(n)n(um)n(b)r(er)i(of)f(lo)r(cal)g(references)g(in)h(a)f (single)946 4381 y(external)22 b(call.)35 b(An)23 b(example)f(is)h(the) g(tra)n(v)n(ersal)d(of)i(a)h(list:)34 b(Eac)n(h)22 b(call)g(from)g (external)946 4481 y(co)r(de)40 b(to)g(the)h(functions)f(that)h (corresp)r(ond)d(to)i Fo(car)f Fr(and)h Fo(cdr)f Fr(returns)h(a)g (fresh)946 4580 y(lo)r(cal)31 b(reference.)48 b(T)-7 b(o)32 b(a)n(v)n(oid)e(the)i(consumption)f(of)h(storage)d(for)i(lo)r (cal)g(references)946 4680 y(prop)r(ortional)20 b(to)h(the)h(length)f (of)h(the)f(list,)i(the)f(tra)n(v)n(ersal)c(m)n(ust)k(free)f(the)h (no-longer-)946 4779 y(needed)28 b(references)f(as)g(it)h(go)r(es.)946 4907 y(F)-7 b(or)34 b(example,)h(this)f(is)f(a)h(straigh)n(tforw)n(ard) c(de\014nition)35 b(of)e(an)h(external)f(function)946 5006 y(that)28 b(calculates)f(the)h(length)g(of)f(a)g(list:)p Black 2109 5255 a(118)p Black eop end %%Page: 119 127 TeXDict begin 119 126 bop 0 TeXcolorgray Black Black Black Black Black 585 523 a Fo(s48_ref_t)585 623 y(s48_length_2\(s48_)o (ca)o(ll_)o(t)37 b(call,)42 b(s48_ref_t)e(list\))585 722 y({)672 822 y(long)i(i)i(=)f(0;)672 922 y(while)f (\(!\(s48_null_p_2\()o(cal)o(l,)37 b(list\)\)\))760 1021 y({)847 1121 y(list)42 b(=)h(s48_cdr_2\(call,)37 b(list\);)847 1220 y(++i;)760 1320 y(})672 1420 y(return)42 b(s48_unsafe_ente)o(r_l)o (on)o(g_)o(as_)o(fi)o(xnu)o(m_)o(2\(c)o(al)o(l,)37 b(i\);)585 1519 y(})498 1771 y Fr(In)32 b(this)g(implemen)n(tation,)h(eac)n(h)e (iteration)g(step)g(creates)g(a)g(new)h(lo)r(cal)f(reference)498 1870 y(ob)5 b(ject)34 b(via)f Fo(s48)p 1035 1870 27 4 v 30 w(cdr)p 1197 1870 V 30 w(2)h Fr(that)g(is)g(actually)f(only)h (needed)g(for)f(the)h(next)h(iteration)498 1970 y(step.)76 b(As)40 b(a)h(result,)i(this)e(function)g(creates)e(new)i(lo)r(cal)f (references)f(for)h(ev)n(ery)498 2070 y(elemen)n(t)25 b(of)f(the)h(list.)36 b(The)25 b(lo)r(cal)f(references)f(are)h(liv)n(e) g(during)g(the)h(en)n(tire)f(function)498 2169 y(call.)498 2316 y(T)-7 b(o)32 b(a)n(v)n(oid)e(consuming)h(storage)f(prop)r (ortional)g(to)i(the)g(length)g(of)g(the)g(list)g(for)f(all)498 2416 y(those)22 b(lo)r(cal)g(reference)g(ob)5 b(jects,)23 b(the)g(impro)n(v)n(ed)f(v)n(ersion)f(cleans)h(up)h(the)g(unneeded)498 2516 y(lo)r(cal)k(reference)g(on)g(ev)n(ery)f(iteration)h(step:)p Black Black 585 2767 a Fo(s48_ref_t)585 2867 y(s48_length_2\(s48_)o(ca) o(ll_)o(t)37 b(call,)42 b(s48_ref_t)e(list\))585 2966 y({)672 3066 y(s48_ref_t)g(l)k(=)f(s48_copy_local_)o(ref)o(\(c)o(all)o (,)37 b(list\);)672 3166 y(long)42 b(i)i(=)f(0;)672 3265 y(while)f(\(!\(s48_null_p_2\()o(cal)o(l,)37 b(l\)\)\))760 3365 y({)847 3464 y(s48_ref_t)j(temp)i(=)h(l;)847 3564 y(l)g(=)g(s48_cdr_2\(call,)38 b(l\);)847 3664 y(s48_free_local_r)o(ef)o (\(ca)o(ll)o(,)f(temp\);)847 3763 y(++i;)760 3863 y(})672 3963 y(return)42 b(s48_unsafe_ente)o(r_l)o(on)o(g_)o(as_)o(fi)o(xnu)o (m_)o(2\(c)o(al)o(l,)37 b(i\);)585 4062 y(})498 4314 y Fr(Note)f(that)h(without)g(the)f(call)g(to)g Fo(s48)p 1773 4314 V 30 w(copy)p 1979 4314 V 30 w(local)p 2229 4314 V 29 w(ref)f Fr(the)i(reference)e(to)i(the)498 4413 y(head)c(of)h(the)f(list)h(w)n(ould)f(b)r(e)h(freed)f(along)f(with)i (all)f(the)h(temp)r(orary)e(references.)498 4513 y(This)18 b(w)n(ould)g(render)g(the)h(whole)f(list)g(un)n(usable)g(after)g(the)h (return)f(from)g Fo(s48)p 2875 4513 V 30 w(length)p 3169 4513 V 29 w(2)p Fr(.)p Black 415 4707 a Fn(\017)p Black 41 w Fr(The)26 b(external)e(call)h(do)r(es)g(not)h(return)e(at)i(all.) 36 b(If)25 b(the)h(external)f(function)h(en)n(ters)e(an)498 4807 y(in\014nite)f(ev)n(en)n(t)f(dispatc)n(h)g(lo)r(op,)h(for)f (example,)h(it)g(is)f(crucial)g(that)h(the)f(programmer)498 4907 y(releases)28 b(lo)r(cal)h(references)g(man)n(ually)f(that)i(he)g (created)f(inside)g(the)h(lo)r(op)g(so)f(that)498 5006 y(they)f(do)f(not)h(accum)n(ulate)f(inde\014nitely)h(and)f(lead)h(to)f (a)g(memory)g(leak.)p Black 1660 5255 a(119)p Black eop end %%Page: 120 128 TeXDict begin 120 127 bop 0 TeXcolorgray Black Black Black Black 863 523 a Fn(\017)p Black 41 w Fr(External)27 b(co)r(de)h(ma)n(y)f(hold)g(a)h(lo)r(cal)f(reference)g(to)g(a)h(large)e (Sc)n(heme)i(ob)5 b(ject.)37 b(After)946 623 y(the)31 b(external)e(co)r(de)h(is)h(done)e(w)n(orking)g(on)h(this)g(ob)5 b(ject,)31 b(it)g(p)r(erforms)e(some)h(addi-)946 722 y(tional)h(computation)f(b)r(efore)g(returning)g(to)g(the)h(caller.)45 b(The)31 b(lo)r(cal)f(reference)f(to)946 822 y(the)24 b(large)e(ob)5 b(ject)23 b(prev)n(en)n(ts)f(the)i(ob)5 b(ject)23 b(from)g(b)r(eing)g(garbage)e(collected)i(un)n(til)h(the)946 922 y(external)i(function)h(returns,)f(ev)n(en)h(if)g(the)g(ob)5 b(ject)26 b(is)g(no)h(longer)e(in)i(use)f(for)g(the)h(re-)946 1021 y(mainder)h(of)g(the)h(computation.)38 b(It)29 b(is)f(more)f (space-e\016cien)n(t)g(if)i(the)g(programmer)946 1121 y(frees)h(the)h(lo)r(cal)e(reference)g(when)i(the)f(external)g (function)g(do)r(es)g(not)g(need)g(it)h(an)n(y)946 1220 y(longer)c(and)g(will)h(not)g(return)f(for)g(quite)h(some)f(time.)p Black 863 1384 a Fn(\017)p Black 41 w Fr(There)i(are)g(common)f (situations)h(where)g(lo)r(cal)g(references)f(are)g(created)h(solely)f (to)946 1484 y(b)r(e)34 b(passed)f(to)h(another)e(function)i(and)g (afterw)n(ards)e(nev)n(er)g(used)i(again.)53 b(In)34 b(this)946 1583 y(case,)27 b(the)h(called)f(function)i(can)e(free)g (the)h(lo)r(cal)f(references)g(of)g(the)h(argumen)n(ts.)p Black 863 1747 a Fn(\017)p Black 41 w Fr(T)-7 b(o)29 b(impro)n(v)n(e)e(memory)g(usage)h(while)g(making)g(sub)r(calls)g(from) g(external)g(calls,)g(the)946 1847 y(foreign-function)c(in)n(terface)h (pro)n(vides)e(functionalit)n(y)i(to)f(create)g(a)h(new)f(\(sub-\)call) 946 1946 y(ob)5 b(ject)26 b(and)g(clean)g(the)h(lo)r(cal)e(references)g (that)i(are)e(created)g(during)h(that)g(sub)r(call:)p Black 963 2093 a Fn(\017)p Black 41 w Fo(s48)p 1183 2093 27 4 v 30 w(call)p 1389 2093 V 30 w(t)41 b(s48)p 1636 2093 V 30 w(make)p 1842 2093 V 30 w(subcall\(s48)p 2356 2093 V 27 w(call)p 2559 2093 V 29 w(t)h(call\))p Black 963 2193 a Fn(\017)p Black 41 w Fo(void)e(s48)p 1399 2193 V 30 w(free)p 1605 2193 V 30 w(subcall\(s48)p 2119 2193 V 27 w(call)p 2322 2193 V 29 w(t)h(subcall\))p Black 963 2292 a Fn(\017)p Black 41 w Fo(s48)p 1183 2292 V 30 w(ref)p 1345 2292 V 30 w(t)g(s48)p 1592 2292 V 31 w(finish)p 1887 2292 V 28 w(subcall\(s48)p 2399 2292 V 27 w(call)p 2602 2292 V 30 w(t)g(call,)f(s48)p 3109 2292 V 30 w(call)p 3315 2292 V 29 w(t)i(subcall,)c(s48)p 3952 2292 V 30 w(ref)p 4114 2292 V 30 w(t)j(ref\))946 2439 y(s48)p 1083 2439 V 31 w(make)p 1290 2439 V 29 w(subcall)29 b Fr(returns)i(a)g(new)g(call)h(ob)5 b(ject)31 b(that)h(represen)n(ts)e (a)h(sub)r(call)g(of)946 2539 y(the)j(curren)n(t)e(call)h(and)g(can)f (b)r(e)i(passed)e(as)g(the)i(call)e(argumen)n(t)g(to)h(an)n(y)g(sub)r (calls)946 2639 y(of)39 b(the)g(curren)n(t)f(call.)69 b(Up)r(on)39 b(return)f(of)h(a)f(sub)r(call,)j Fo(s48)p 2864 2639 V 30 w(free)p 3070 2639 V 30 w(subcall)36 b Fr(frees)946 2738 y(the)e(sub)r(call)f(and)f(all)h(the)g(lo)r(cal)g (references)e(asso)r(ciated)h(with)h(it.)54 b(The)33 b(function)946 2838 y(s48)p 1068 2838 25 4 v 29 w(\014nish)p 1291 2838 V 30 w(sub)r(call)27 b(also)e(frees)i(the)g(sub)r(call)f(and) h(all)f(the)h(lo)r(cal)f(references)g(asso)r(ci-)946 2938 y(ated)31 b(with)f(it,)i(but)f(copies)e(its)i(third)f(argumen)n(t) g(to)g(the)h(curren)n(t)e(call,)i(so)e(that)i(it)946 3037 y(surviv)n(es)c(the)h(sub)r(call.)739 3269 y Fe(8.7.5)112 b(Keeping)38 b(C)g(data)g(structures)f(in)h(the)f(Sc)m(heme)h(heap)739 3422 y Fr(C)32 b(data)g(structures)f(can)h(b)r(e)g(k)n(ept)g(in)g(the)h (Sc)n(heme)f(heap)g(b)n(y)f(em)n(b)r(edding)i(them)f(inside)739 3521 y(b)n(yte)27 b(v)n(ectors.)35 b(The)26 b(follo)n(wing)g(macros)f (can)h(b)r(e)i(used)e(to)h(create)f(and)g(access)g(em)n(b)r(edded)739 3621 y(C)i(ob)5 b(jects.)p Black 755 3766 a Fn(\017)p Black 42 w Fo(s48)p 976 3766 27 4 v 30 w(ref)p 1138 3766 V 30 w(t)41 b(s48)p 1385 3766 V 30 w(make)p 1591 3766 V 30 w(value)p 1841 3766 V 29 w(2\(s48)p 2090 3766 V 29 w(call)p 2295 3766 V 30 w(t,)g(type\))565 b Fr(\(ma)n(y)27 b(GC\))p Black 755 3865 a Fn(\017)p Black 42 w Fo(s48)p 976 3865 V 30 w(ref)p 1138 3865 V 30 w(t)41 b(s48)p 1385 3865 V 30 w(make)p 1591 3865 V 30 w(sized)p 1841 3865 V 29 w(value)p 2090 3865 V 29 w(2\(s48)p 2339 3865 V 30 w(call)p 2545 3865 V 29 w(t,)g(size\))316 b Fr(\(ma)n(y)27 b(GC\))p Black 755 3965 a Fn(\017)p Black 42 w Fo(type)247 b(s48)p 1399 3965 V 30 w(extract)p 1737 3965 V 29 w(value)p 1986 3965 V 29 w(2\(s48)p 2235 3965 V 29 w(call)p 2440 3965 V 30 w(t,)41 b(s48)p 2731 3965 V 30 w(ref)p 2893 3965 V 30 w(t,)g(type\))p Black 755 4065 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4065 V 30 w(value)p 1649 4065 V 29 w(size)p 1854 4065 V 30 w(2\(s48)p 2104 4065 V 29 w(call)p 2309 4065 V 30 w(t,)41 b(s48)p 2600 4065 V 30 w(ref)p 2762 4065 V 30 w(t\))p Black 755 4164 a Fn(\017)p Black 42 w Fo(type)e(*)166 b(s48)p 1401 4164 V 30 w(extract)p 1739 4164 V 29 w(value)p 1988 4164 V 29 w(pointer)p 2325 4164 V 28 w(2\(s48)p 2573 4164 V 30 w(call)p 2779 4164 V 29 w(t,)41 b(s48)p 3069 4164 V 30 w(ref)p 3231 4164 V 30 w(t,)g(type\))p Black 755 4264 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 4264 V 30 w(set)p 1561 4264 V 30 w(value)p 1811 4264 V 30 w(2\(s48)p 2061 4264 V 29 w(call)p 2266 4264 V 30 w(t,)40 b(s48)p 2556 4264 V 30 w(ref)p 2718 4264 V 31 w(t,)g(type,)g(value\))770 4408 y(s48)p 907 4408 V 30 w(make)p 1113 4408 V 29 w(value)p 1362 4408 V 30 w(2)30 b Fr(mak)n(es)g(a)g(b)n(yte)g(v)n(ector)g(large)f(enough)h(to)h(hold)f (an)g(ob)5 b(ject)31 b(whose)739 4508 y(t)n(yp)r(e)22 b(is)h Fq(typ)l(e)6 b Fr(.)35 b Fo(s48)p 1344 4508 V 31 w(make)p 1551 4508 V 29 w(sized)p 1800 4508 V 30 w(value)p 2050 4508 V 29 w(2)22 b Fr(mak)n(es)f(a)h(b)n(yte)g(v)n(ector)f(large)g (enough)h(to)g(hold)739 4608 y(an)e(ob)5 b(ject)19 b(of)27 b Fq(size)f Fr(b)n(ytes.)34 b Fo(s48)p 1725 4608 V 31 w(extract)p 2064 4608 V 28 w(value)p 2312 4608 V 29 w(2)20 b Fr(returns)f(the)i(con)n(ten)n(ts)e(of)h(a)f(b)n(yte)h(v)n(ec-)739 4707 y(tor)e(cast)g(to)g Fq(typ)l(e)6 b Fr(,)21 b Fo(s48)p 1449 4707 V 30 w(value)p 1699 4707 V 29 w(size)p 1904 4707 V 30 w(2)d Fr(returns)g(its)g(size,)i(and)e Fo(s48)p 2837 4707 V 30 w(extract)p 3175 4707 V 29 w(value)p 3424 4707 V 29 w(pointer)p 3761 4707 V 29 w(2)739 4807 y Fr(returns)36 b(a)g(p)r(oin)n(ter)g(to)h(the)g(con)n(ten)n(ts)f(of)h(the)g(b)n(yte)f (v)n(ector.)63 b(The)37 b(v)-5 b(alue)36 b(returned)h(b)n(y)739 4907 y Fo(s48)p 876 4907 V 30 w(extract)p 1214 4907 V 29 w(value)p 1463 4907 V 29 w(pointer)p 1800 4907 V 28 w(2)c Fr(is)g(v)-5 b(alid)33 b(only)f(un)n(til)i(the)f(next)g(garbage)e (collection.)739 5006 y Fo(s48)p 876 5006 V 30 w(set)p 1038 5006 V 30 w(value)p 1288 5006 V 29 w(2)d Fr(stores)e Fo(value)g Fr(in)n(to)h(the)h(b)n(yte)g(v)n(ector.)p Black 2109 5255 a(120)p Black eop end %%Page: 121 129 TeXDict begin 121 128 bop 0 TeXcolorgray Black Black Black 415 523 a Fr(P)n(oin)n(ters)26 b(to)h(C)h(data)f(structures)g (can)g(b)r(e)h(stored)f(in)h(the)g(Sc)n(heme)f(heap:)p Black 307 665 a Fn(\017)p Black 41 w Fo(s48)p 527 665 27 4 v 30 w(ref)p 689 665 V 30 w(t)42 b(s48)p 937 665 V 30 w(enter)p 1187 665 V 29 w(pointer)p 1524 665 V 29 w(2\(s48)p 1773 665 V 29 w(call)p 1978 665 V 30 w(t,)e(void)g(*\))350 b Fr(\(ma)n(y)27 b(GC\))p Black 307 765 a Fn(\017)p Black 41 w Fo(void)40 b(*)166 b(s48)p 953 765 V 30 w(extract)p 1291 765 V 28 w(pointer)p 1627 765 V 29 w(2\(s48)p 1876 765 V 29 w(call)p 2081 765 V 30 w(t,)41 b(s48)p 2372 765 V 30 w(ref)p 2534 765 V 30 w(t\))138 b Fr(\(ma)n(y)27 b(GC\))291 908 y(The)32 b(function)h Fo(s48)p 933 908 V 30 w(enter)p 1183 908 V 30 w(pointer)p 1521 908 V 28 w(2)f Fr(mak)n(es)g(a)g(b)n(yte)g(v)n(ector)g(large)f(enough)h(to)g (hold)291 1007 y(the)c(p)r(oin)n(ter)f(v)-5 b(alue)28 b(and)g(stores)f(the)h(p)r(oin)n(ter)g(v)-5 b(alue)27 b(in)i(the)f(b)n(yte)g(v)n(ector.)36 b(The)28 b(function)291 1107 y Fo(s48)p 428 1107 V 30 w(extract)p 766 1107 V 28 w(pointer)p 1102 1107 V 29 w(2)f Fr(extracts)g(the)h(p)r(oin)n(ter)f (v)-5 b(alue)27 b(from)g(the)h(sc)n(heme)g(heap.)291 1338 y Fe(8.7.6)112 b(C)37 b(co)s(de)h(and)g(heap)h(images)291 1491 y Fr(Sc)n(heme)31 b(48)g(uses)h(dump)r(ed)h(heap)e(images)g(to)h (restore)e(a)i(previous)f(system)g(state.)50 b(The)291 1591 y(Sc)n(heme)29 b(48)f(heap)g(is)h(written)h(in)n(to)f(a)f(\014le)h (in)h(a)e(mac)n(hine-indep)r(enden)n(t)h(and)g(op)r(erating-)291 1690 y(system-indep)r(enden)n(t)34 b(format.)55 b(The)33 b(pro)r(cedures)g(describ)r(ed)h(ab)r(o)n(v)n(e)e(ma)n(y)h(b)r(e)h (used)g(to)291 1790 y(create)26 b(ob)5 b(jects)27 b(in)h(the)g(Sc)n (heme)g(heap)f(that)h(con)n(tain)f(information)g(sp)r(eci\014c)h(to)g (the)g(cur-)291 1889 y(ren)n(t)39 b(mac)n(hine,)k(op)r(erating)d (system,)j(or)c(pro)r(cess.)74 b(A)41 b(heap)f(image)f(con)n(taining)g (suc)n(h)291 1989 y(ob)5 b(jects)27 b(ma)n(y)g(not)g(w)n(ork)f (correctly)g(when)i(resumed.)415 2089 y(T)-7 b(o)26 b(address)f(this)h (problem,)g(a)g(record)e(t)n(yp)r(e)j(ma)n(y)e(b)r(e)i(giv)n(en)e(a)h (`resumer')f(pro)r(cedure.)291 2188 y(On)k(startup,)g(the)g(resumer)f (pro)r(cedure)h(for)f(a)h(t)n(yp)r(e)g(is)g(applied)g(to)g(eac)n(h)g (record)f(of)h(that)291 2288 y(t)n(yp)r(e)i(in)g(the)g(image)f(b)r (eing)h(restarted.)45 b(This)31 b(pro)r(cedure)f(can)g(up)r(date)i(the) f(record)e(in)i(a)291 2388 y(manner)19 b(appropriate)f(to)i(the)g(mac)n (hine,)h(op)r(erating)d(system,)k(or)c(pro)r(cess)h(used)h(to)f(resume) 291 2487 y(the)28 b(image.)p Black 307 2630 a Fn(\017)p Black 41 w Fo(\(define-record-re)o(su)o(mer)35 b Fq(r)l(e)l(c)l(or)l (d-typ)l(e)41 b(pr)l(o)l(c)l(e)l(dur)l(e)6 b Fo(\))291 2772 y(Define-record-r)o(esu)o(me)o(r)18 b Fr(de\014nes)25 b Fq(pr)l(o)l(c)l(e)l(dur)l(e)6 b Fr(,)25 b(whic)n(h)g(should)f(accept) g(one)g(argumen)n(t,)291 2872 y(to)30 b(b)r(e)h(the)h(resumer)d(for)i Fq(r)l(e)l(c)l(or)l(d-typ)l(e)6 b Fr(.)47 b(The)30 b(order)g(in)h(whic) n(h)g(resumer)e(pro)r(cedures)h(are)291 2971 y(called)d(is)g(not)h(sp)r (eci\014ed.)415 3071 y(The)33 b Fq(pr)l(o)l(c)l(e)l(dur)l(e)39 b Fr(argumen)n(t)31 b(to)i Fo(define-record-re)o(sum)o(er)26 b Fr(ma)n(y)32 b(b)r(e)h Fo(#f)p Fr(,)g(in)g(whic)n(h)291 3171 y(case)21 b(records)g(of)i(the)g(giv)n(en)f(t)n(yp)r(e)h(are)f (not)h(written)g(out)f(in)h(heap)g(images.)34 b(When)23 b(writing)291 3270 y(a)36 b(heap)h(image)g(an)n(y)g(reference)f(to)h (suc)n(h)g(a)g(record)f(is)h(replaced)f(b)n(y)h(the)h(v)-5 b(alue)37 b(of)h(the)291 3370 y(record's)26 b(\014rst)h(\014eld,)h(and) f(an)h(exception)f(is)g(raised)g(after)g(the)h(image)f(is)g(written.) 291 3643 y Fj(8.8)135 b(Using)46 b(Sc)l(heme)f(records)f(in)h(C)g(co)t (de)291 3825 y Fr(External)26 b(mo)r(dules)i(can)f(create)f(records)g (and)i(access)e(their)i(slots)f(p)r(ositionally)-7 b(.)p Black 307 3967 a Fn(\017)p Black 41 w Fo(s48)p 527 3967 V 30 w(ref)p 689 3967 V 30 w(t)42 b(s48)p 937 3967 V 30 w(make)p 1143 3967 V 29 w(record)p 1436 3967 V 29 w(2\(s48)p 1685 3967 V 30 w(call)p 1891 3967 V 29 w(t,)f(s48)p 2181 3967 V 30 w(ref)p 2343 3967 V 30 w(t\))329 b Fr(\(ma)n(y)27 b(GC\))p Black 307 4067 a Fn(\017)p Black 41 w Fo(int)290 b(s48)p 949 4067 V 30 w(record)p 1243 4067 V 29 w(p)p 1316 4067 V 31 w(2\(s48)p 1567 4067 V 29 w(call)p 1772 4067 V 30 w(t,)40 b(s48)p 2062 4067 V 30 w(ref)p 2224 4067 V 31 w(t\))p Black 307 4166 a Fn(\017)p Black 41 w Fo(s48)p 527 4166 V 30 w(ref)p 689 4166 V 30 w(t)i(s48)p 937 4166 V 30 w(record)p 1231 4166 V 29 w(type)p 1436 4166 V 29 w(2\(s48)p 1685 4166 V 30 w(call)p 1891 4166 V 29 w(t,)f(s48)p 2181 4166 V 30 w(ref)p 2343 4166 V 30 w(t\))p Black 307 4266 a Fn(\017)p Black 41 w Fo(s48)p 527 4266 V 30 w(ref)p 689 4266 V 30 w(t)h(s48)p 937 4266 V 30 w(record)p 1231 4266 V 29 w(ref)p 1392 4266 V 30 w(2\(s48)p 1642 4266 V 29 w(call)p 1847 4266 V 30 w(t,)e(s48)p 2137 4266 V 31 w(ref)p 2300 4266 V 30 w(t,)g(long\))p Black 307 4366 a Fn(\017)p Black 41 w Fo(void)248 b(s48)p 951 4366 V 30 w(record)p 1245 4366 V 29 w(set)p 1406 4366 V 30 w(2\(s48)p 1656 4366 V 29 w(call)p 1861 4366 V 30 w(t,)41 b(s48)p 2152 4366 V 30 w(ref)p 2314 4366 V 30 w(t,)f(long,)g(s48)p 2864 4366 V 30 w(ref)p 3026 4366 V 30 w(t\))291 4508 y Fr(The)24 b(argumen)n(t)f(to)i Fo(s48)p 1062 4508 V 30 w(make)p 1268 4508 V 29 w(record)p 1561 4508 V 29 w(2)f Fr(should)g(b)r(e)h(a)f(shared)g(binding)g(whose)g (v)-5 b(alue)24 b(is)291 4608 y(a)k(record)f(t)n(yp)r(e.)40 b(In)29 b(C)g(the)g(\014elds)f(of)h(Sc)n(heme)g(records)e(are)g(only)h (accessible)g(via)g(o\013sets,)291 4707 y(with)f(the)g(\014rst)g (\014eld)g(ha)n(ving)f(o\013set)h(zero,)f(the)h(second)f(o\013set)h (one,)g(and)f(so)h(forth.)36 b(If)28 b(the)291 4807 y(order)e(of)i(the) g(\014elds)g(is)g(c)n(hanged)f(in)h(the)h(Sc)n(heme)e(de\014nition)i (of)f(the)g(record)e(t)n(yp)r(e)j(the)f(C)291 4907 y(co)r(de)f(m)n(ust) h(b)r(e)g(up)r(dated)g(as)f(w)n(ell.)415 5006 y(F)-7 b(or)27 b(example,)g(giv)n(en)g(the)h(follo)n(wing)f(record-t)n(yp)r(e) f(de\014nition)p Black 1660 5255 a(121)p Black eop end %%Page: 122 130 TeXDict begin 122 129 bop 0 TeXcolorgray Black Black Black Black Black 739 523 a Fo(\(define-record-t)o(yp)o(e)38 b(thing)j(:thing)826 623 y(\(make-thing)e(a)k(b\))826 722 y(thing?)826 822 y(\(a)g(thing-a\))826 922 y(\(b)g(thing-b\)\))739 1081 y Fr(the)28 b(iden)n(ti\014er)f Fo(:thing)f Fr(is)h(b)r(ound)h(to) f(the)h(record)f(t)n(yp)r(e)g(and)h(can)f(b)r(e)h(exp)r(orted)f(to)h (C:)p Black Black 739 1240 a Fo(\(define-exported)o(-b)o(ind)o(in)o(g) 38 b("thing-record-t)o(ype)o(")f(:thing\))739 1400 y(Thing)26 b Fr(records)f(can)j(then)g(b)r(e)g(made)f(in)h(C:)p Black Black 739 1559 a Fo(static)41 b(s48_ref_t)826 1659 y(thing_record_typ)o(e_b)o(in)o(din)o(g)c(=)43 b(NULL;)739 1858 y(void)f(initialize_thing)o(s\()o(voi)o(d\))739 1958 y Fn(f)826 2057 y Fo(thing_record_typ)o(e_b)o(in)o(din)o(g)37 b(=)957 2157 y(s48_get_imported)o(_b)o(ind)o(in)o(g_)o(2\(")o(th)o(ing) o(-r)o(eco)o(rd)o(-t)o(ype)o("\))o(;)739 2257 y Fn(g)739 2456 y Fo(s48_ref_t)j(make_thing\(s48_c)o(al)o(l_)o(t)e(call,)j (s48_ref_t)f(a,)j(s48_ref_t)d(b\))739 2555 y Fn(f)826 2655 y Fo(s48_ref_t)g(thing;)826 2755 y(thing)i(=)h(s48_make_record_)o (2\()o(ca)o(ll,)37 b(thing_record_typ)o(e_)o(bin)o(di)o(ng)o(\);)826 2854 y(s48_record_set_2)o(\(ca)o(ll)o(,)h(thing,)j(0,)h(a\);)826 2954 y(s48_record_set_2)o(\(ca)o(ll)o(,)c(thing,)j(1,)h(b\);)826 3054 y(return)f(thing;)739 3153 y Fn(g)739 3313 y Fr(Note)30 b(that)g(the)h(in)n(terface)e(tak)n(es)g(care)g(of)h(protecting)g(all)g (lo)r(cal)f(references)g(against)g(the)739 3412 y(p)r(ossibilit)n(y)18 b(of)g(a)g(garbage)e(collection)i(o)r(ccurring)f(during)h(the)h(call)f (to)g Fo(s48)p 3048 3412 27 4 v 30 w(make)p 3254 3412 V 30 w(record)p 3548 3412 V 29 w(2\(\))p Fr(;)739 3512 y(also)25 b(note)i(that)g(the)f(record)g(t)n(yp)r(e)g(binding)h(is)f(a) g(global)g(reference)f(that)i(is)g(liv)n(e)f(un)n(til)h(ex-)739 3611 y(plicitly)h(freed.)739 3885 y Fj(8.9)135 b(Raising)47 b(exceptions)e(from)g(external)i(co)t(de)739 4066 y Fr(The)34 b(follo)n(wing)f(macros)f(explicitly)i(raise)f(certain)h(errors,)f (immediately)h(returning)f(to)739 4166 y(Sc)n(heme)38 b(48.)66 b(Raising)37 b(an)h(exception)f(p)r(erforms)g(all)h(necessary) e(clean-up)h(actions)g(to)739 4266 y(prop)r(erly)30 b(return)h(to)g(Sc) n(heme)f(48,)i(including)f(adjusting)g(the)g(stac)n(k)f(of)h(protected) g(v)-5 b(ari-)739 4365 y(ables.)863 4465 y(The)28 b(follo)n(wing)e(pro) r(cedures)h(are)f(a)n(v)-5 b(ailable)27 b(for)g(raising)f(particular)g (t)n(yp)r(es)h(of)h(excep-)739 4565 y(tions.)37 b(These)27 b(nev)n(er)g(return.)p Black 755 4707 a Fn(\017)p Black 42 w Fo(s48)p 976 4707 V 30 w(assertion)p 1402 4707 V 27 w(violation)p 1825 4707 V 28 w(2\(s48)p 2073 4707 V 29 w(call)p 2278 4707 V 30 w(t,)41 b(const)e(char*)h(who,)f(const)h (char*)f(message,)g(long)g(count,)g(...\))p Black 755 4807 a Fn(\017)p Black 42 w Fo(s48)p 976 4807 V 30 w(error)p 1226 4807 V 29 w(2\(s48)p 1475 4807 V 29 w(call)p 1680 4807 V 30 w(t,)i(const)e(char*)h(who,)f(const)h(char*)f(message,)g (long)g(count,)g(...\))p Black 755 4907 a Fn(\017)p Black 42 w Fo(s48)p 976 4907 V 30 w(os)p 1094 4907 V 30 w(error)p 1344 4907 V 30 w(2\(s48)p 1594 4907 V 29 w(call)p 1799 4907 V 30 w(t,)h(const)g(char*)f(who,)h(const)f(char*)h(message,)e (long)i(count,)f(...\))p Black 755 5006 a Fn(\017)p Black 42 w Fo(s48)p 976 5006 V 30 w(out)p 1138 5006 V 30 w(of)p 1256 5006 V 30 w(memory)p 1550 5006 V 29 w(error)p 1799 5006 V 30 w(2\(s48)p 2049 5006 V 29 w(call)p 2254 5006 V 30 w(t,)h(\))p Black 2109 5255 a Fr(122)p Black eop end %%Page: 123 131 TeXDict begin 123 130 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(An)19 b(assertion)e(violation)g(signaled)h(via)g Fo(s48)p 1664 523 27 4 v 30 w(assertion)p 2090 523 V 28 w(violation)p 2514 523 V 27 w(2)g Fr(t)n(ypically)g(means)291 623 y(that)23 b(an)f(in)n(v)-5 b(alid)23 b(argumen)n(t)f(\(or)g(in)n(v) -5 b(alid)23 b(n)n(um)n(b)r(er)g(of)f(argumen)n(ts\))g(has)h(b)r(een)g (passed.)34 b(An)291 722 y(error)24 b(signaled)i(via)h Fo(s48)p 1084 722 V 30 w(error)p 1334 722 V 29 w(2)g Fr(means)f(that)h(an)g(en)n(vironmen)n(tal)e(error)g(\(lik)n(e)i(an)g (I/O)291 822 y(error\))38 b(has)h(o)r(ccurred.)73 b(In)41 b(b)r(oth)f(cases,)i Fo(who)d Fr(indicates)h(the)g(lo)r(cation)f(of)h (the)h(error,)291 922 y(t)n(ypically)26 b(the)h(name)g(of)f(the)i (function)f(it)g(o)r(ccurred)f(in.)37 b(It)27 b(ma)n(y)f(b)r(e)h Fo(NULL)p Fr(,)f(in)h(whic)n(h)g(the)291 1021 y(system)f(guesses)g(a)g (name.)37 b(The)27 b Fo(message)d Fr(argumen)n(t)i(is)h(an)f(error)f (message)h(enco)r(ded)h(in)291 1121 y(UTF-8.)35 b(Additional)23 b(argumen)n(ts)f(ma)n(y)g(b)r(e)h(passed)g(that)g(b)r(ecome)g(part)g (of)g(the)g(condition)291 1220 y(ob)5 b(ject)33 b(that)h(will)g(b)r(e)g (raised)f(on)g(the)h(Sc)n(heme)g(side:)49 b Fo(count)32 b Fr(indicates)h(their)h(n)n(um)n(b)r(er,)291 1320 y(and)27 b(the)h(argumen)n(ts)e(\(whic)n(h)i(m)n(ust)g(b)r(e)g(of)f(t)n(yp)r(e)h Fo(s48)p 2006 1320 V 30 w(ref)p 2168 1320 V 30 w(t)p Fr(\))g(follo)n(w.)415 1420 y(The)22 b Fo(s48)p 717 1420 V 31 w(os)p 836 1420 V 30 w(error)p 1086 1420 V 29 w(2)g Fr(function)h(is)f(lik)n(e)g Fo(s48)p 1858 1420 V 30 w(error)p 2108 1420 V 30 w(2)p Fr(,)h(except)f(that)g(the)h(error)d (mes-)291 1519 y(sage)d(is)h(inferred)g(from)g(an)g(OS)g(error)f(co)r (de)h(\(as)g(in)g Fo(strerror)p Fr(\).)31 b(The)19 b Fo(s48)p 2582 1519 V 30 w(out)p 2744 1519 V 30 w(of)p 2862 1519 V 31 w(memory)p 3157 1519 V 28 w(error)p 3405 1519 V 30 w(2)291 1619 y Fr(function)28 b(signals)e(that)i(the)g (system)f(has)g(run)h(out)f(of)h(memory)-7 b(.)415 1719 y(The)34 b(follo)n(wing)f(macros)g(raise)g(assertion)f(violations)h(if) i(their)f(argumen)n(t)f(do)r(es)h(not)291 1818 y(ha)n(v)n(e)26 b(the)i(required)f(t)n(yp)r(e.)37 b Fo(s48)p 1307 1818 V 30 w(check)p 1557 1818 V 29 w(boolean)p 1894 1818 V 29 w(2)27 b Fr(raises)f(an)i(error)d(if)k(its)e(argumen)n(t)g(is)291 1918 y(neither)g Fo(#t)g Fr(or)g Fo(#f)p Fr(.)p Black 307 2066 a Fn(\017)p Black 41 w Fo(void)40 b(s48)p 743 2066 V 30 w(check)p 993 2066 V 30 w(boolean)p 1331 2066 V 28 w(2\(s48)p 1579 2066 V 29 w(call)p 1784 2066 V 30 w(t,)h(s48)p 2075 2066 V 30 w(ref)p 2237 2066 V 30 w(t\))p Black 307 2165 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2165 V 30 w(check)p 993 2165 V 30 w(symbol)p 1287 2165 V 28 w(2\(s48)p 1535 2165 V 30 w(call)p 1741 2165 V 29 w(t,)h(s48)p 2031 2165 V 30 w(ref)p 2193 2165 V 30 w(t\))p Black 307 2265 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2265 V 30 w(check)p 993 2265 V 30 w(pair)p 1199 2265 V 29 w(2\(s48)p 1448 2265 V 30 w(call)p 1654 2265 V 29 w(t,)h(s48)p 1944 2265 V 30 w(ref)p 2106 2265 V 30 w(t\))p Black 307 2365 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2365 V 30 w(check)p 993 2365 V 30 w(string)p 1287 2365 V 28 w(2\(s48)p 1535 2365 V 30 w(call)p 1741 2365 V 29 w(t,)h(s48)p 2031 2365 V 30 w(ref)p 2193 2365 V 30 w(t\))p Black 307 2464 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2464 V 30 w(check)p 993 2464 V 30 w(integer)p 1331 2464 V 28 w(2\(s48)p 1579 2464 V 29 w(call)p 1784 2464 V 30 w(t,)h(s48)p 2075 2464 V 30 w(ref)p 2237 2464 V 30 w(t\))p Black 307 2564 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2564 V 30 w(check)p 993 2564 V 30 w(channel)p 1331 2564 V 28 w(2\(s48)p 1579 2564 V 29 w(call)p 1784 2564 V 30 w(t,)h(s48)p 2075 2564 V 30 w(ref)p 2237 2564 V 30 w(t\))p Black 307 2663 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2663 V 30 w(check)p 993 2663 V 30 w(byte)p 1199 2663 V 29 w(vector)p 1492 2663 V 29 w(2\(s48)p 1741 2663 V 29 w(call)p 1946 2663 V 30 w(t,)h(s48)p 2237 2663 V 30 w(ref)p 2399 2663 V 30 w(t\))p Black 307 2763 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2763 V 30 w(check)p 993 2763 V 30 w(record)p 1287 2763 V 28 w(2\(s48)p 1535 2763 V 30 w(call)p 1741 2763 V 29 w(t,)h(s48)p 2031 2763 V 30 w(ref)p 2193 2763 V 30 w(t\))p Black 307 2863 a Fn(\017)p Black 41 w Fo(void)f(s48)p 743 2863 V 30 w(check)p 993 2863 V 30 w(shared)p 1287 2863 V 28 w(binding)p 1623 2863 V 29 w(2\(s48)p 1872 2863 V 29 w(call)p 2077 2863 V 30 w(t,)h(s48)p 2368 2863 V 30 w(ref)p 2530 2863 V 30 w(t\))291 3137 y Fj(8.10)135 b(External)46 b(ev)l(en)l(ts)291 3319 y Fr(External)17 b(co)r(de)h(can)g(push)g(the)h(o)r(ccurrence)e (of)i(external)e(ev)n(en)n(ts)h(in)n(to)g(the)h(main)f(Sc)n(heme)g(48) 291 3418 y(ev)n(en)n(t)27 b(lo)r(op)g(and)g(Sc)n(heme)h(co)r(de)f(can)g (w)n(ait)h(and)f(act)g(on)h(external)e(ev)n(en)n(ts.)415 3518 y(On)18 b(the)h(Sc)n(heme)g(side,)h(the)f(external)f(ev)n(en)n(ts) g(functionalit)n(y)h(consists)e(of)i(the)g(follo)n(wing)291 3618 y(functions)27 b(from)h(the)g(structure)f Fo(primitives)p Fr(:)p Black 307 3766 a Fn(\017)p Black 41 w Fo(\(new-external-eve)o (nt)o(-ui)o(d)35 b Fq(shar)l(e)l(d-binding-or-#f)20 b Fo(\))41 b Fn(!)83 b Fq(uid)p Black 307 3865 a Fn(\017)p Black 41 w Fo(\(unregister-exter)o(na)o(l-e)o(ve)o(nt)o(-ui)o(d!)35 b Fq(uid)9 b Fo(\))291 4013 y Fr(And)28 b(the)g(follo)n(wing)e (functions)i(from)f(the)h(structure)g Fo(external-events)o Fr(:)p Black 307 4161 a Fn(\017)p Black 41 w Fo(\(register-condvar)o (-f)o(or-)o(ex)o(te)o(rna)o(l-)o(eve)o(nt)o(!)35 b Fq(uid)42 b(c)l(ondvar)9 b Fo(\))p Black 307 4261 a Fn(\017)p Black 41 w Fo(\(wait-for-externa)o(l-)o(eve)o(nt)35 b Fq(c)l(ondvar)9 b Fo(\))p Black 307 4360 a Fn(\017)p Black 41 w Fo(\(new-external-eve)o (nt)o(\))35 b Fn(!)83 b Fq(uid)42 b(c)l(ondvar)291 4508 y Fr(The)22 b(function)g Fo(new-external-even)o(t-)o(uid)15 b Fr(returns)22 b(a)f(fresh)h(ev)n(en)n(t)g(iden)n(ti\014er)f(on)h(ev)n (ery)291 4608 y(call.)33 b(When)19 b(called)f(with)h(a)f(shared)f (binding)i(instead)f(of)25 b Fo(#f)p Fr(,)19 b Fo(new-external-even)o (t-)o(uid)291 4707 y Fr(returns)e(a)h(named)g(ev)n(en)n(t)g(iden)n (ti\014er)h(for)e(p)r(ermanen)n(t)i(use.)33 b(The)19 b(function)g Fo(unregister-exte)o(rna)o(l-)o(ev)o(ent)o(-u)o(id)291 4807 y Fr(unregisters)26 b(the)i(giv)n(en)e(ev)n(en)n(t)i(iden)n (ti\014er.)415 4907 y(External)40 b(ev)n(en)n(ts)h(use)g(condition)g(v) -5 b(ariables)40 b(to)h(sync)n(hronize)e(the)j(o)r(ccurrence)e(of)291 5006 y(ev)n(en)n(ts,)21 b(see)g(section)p 0 0 1 TeXcolorrgb 21 w(7.5)p Black 20 w(for)g(more)f(information)h(on)g(condition)g(v)-5 b(ariables.)33 b(The)21 b(function)p Black 1660 5255 a(123)p Black eop end %%Page: 124 132 TeXDict begin 124 131 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(register-condvar)o(-f)o(or-)o(ex)o(ter)o(na)o(l-)o (eve)o(nt)14 b Fr(registers)20 b(a)g(condition)h(v)-5 b(ariable)20 b(with)i(an)739 623 y(ev)n(en)n(t)30 b(iden)n(ti\014er.)46 b(F)-7 b(or)30 b(con)n(v)n(enience,)g(the)h(function)g Fo(new-external-eve)o(nt)24 b Fr(com)n(bines)739 722 y Fo(new-external-eve)o(nt)o(-ui)o(d)31 b Fr(and)37 b Fo(register-condvar-)o(for)o(-e)o(xte)o(rn)o(al)o(-ev)o(en)o(t)31 b Fr(and)739 822 y(returns)c(a)g(fresh)g(ev)n(en)n(t)g(iden)n(ti\014er) h(and)f(the)h(corresp)r(onding)e(condition)h(v)-5 b(ariable.)863 922 y(The)39 b(function)g Fo(wait-for-extern)o(al-)o(ev)o(en)o(t)32 b Fr(blo)r(c)n(ks)38 b(the)h(caller)e(\(on)h(the)h(condi-)739 1022 y(tion)32 b(v)-5 b(ariable\))32 b(un)n(til)h(the)g(Sc)n(heme)g (main)f(ev)n(en)n(t)g(lo)r(op)g(receiv)n(es)f(an)i(ev)n(en)n(t)f (noti\014cation)739 1122 y(\(b)n(y)38 b Fo(s48)p 1034 1122 27 4 v 30 w(note)p 1240 1122 V 29 w(external)p 1621 1122 V 29 w(event)p Fr(\))c(of)j(the)g(ev)n(en)n(t)f(iden)n(ti\014er)g (that)h(is)g(registered)e(with)739 1221 y(the)e(giv)n(en)f(condition)h (v)-5 b(ariable)32 b(\(with)h Fo(register-condvar-)o(fo)o(r-e)o(xt)o (ern)o(al)o(-e)o(ven)o(t)p Fr(\).)739 1321 y(There)19 b(is)h(no)g(guaran)n(tee)e(that)i(the)g(caller)f(of)27 b Fo(wait-for-externa)o(l-)o(ev)o(ent)13 b Fr(is)20 b(un)n(blo)r(c)n(k) n(ed)739 1420 y(on)f(ev)n(ery)f(ev)n(en)n(t)h(noti\014cation,)h (therefore)f(the)h(caller)e(has)h(to)g(b)r(e)h(prepared)e(to)h(handle)g (m)n(ul-)739 1520 y(tiple)31 b(external)f(ev)n(en)n(ts)g(that)h(ha)n(v) n(e)e(o)r(ccurred)h(and)g(external)g(co)r(de)h(has)f(to)g(b)r(e)h (prepared)739 1620 y(to)c(store)g(m)n(ultiple)h(external)f(ev)n(en)n (ts.)863 1720 y(The)h(follo)n(wing)f(protot)n(yp)r(e)f(is)i(the)g(in)n (terface)f(on)g(the)h(external)f(side:)p Black 755 1872 a Fn(\017)p Black 42 w Fo(void)39 b(s48)p 1191 1872 V 31 w(note)p 1398 1872 V 29 w(external)p 1779 1872 V 28 w(event\(long\))739 2023 y Fr(External)17 b(co)r(de)h(has)g(to)g (collect)g(external)g(ev)n(en)n(ts)g(and)g(can)g(use)g Fo(s48)p 2853 2023 V 30 w(note)p 3059 2023 V 30 w(external)p 3441 2023 V 28 w(event)739 2123 y Fr(to)31 b(signal)g(the)h(o)r (ccurrence)e(of)i(an)f(external)g(ev)n(en)n(t)g(to)g(the)h(main)f(ev)n (en)n(t)h(lo)r(op.)48 b(The)31 b(ar-)739 2223 y(gumen)n(t)c(to)g Fo(s48)p 1274 2223 V 30 w(note)p 1480 2223 V 30 w(external)p 1862 2223 V 28 w(event)e Fr(is)i(an)g(ev)n(en)n(t)g(iden)n(ti\014er)g (that)g(w)n(as)f(previously)739 2322 y(registered)21 b(on)h(the)g(Sc)n(heme)g(side.)35 b(Th)n(us,)24 b(external)d(co)r(de)h (has)g(to)g(obtain)g(the)h(ev)n(en)n(t)e(iden-)739 2422 y(ti\014er)h(from)f(the)h(Sc)n(heme)g(side,)h(either)e(b)n(y)h(passing) f(the)h(ev)n(en)n(t)f(iden)n(ti\014er)h(as)f(an)g(argumen)n(t)739 2522 y(to)33 b(the)h(external)f(function)h(that)f(calls)g Fo(s48)p 2166 2522 V 30 w(note)p 2372 2522 V 30 w(external)p 2754 2522 V 28 w(event)e Fr(or)i(b)n(y)g(exp)r(orting)739 2621 y(the)28 b(Sc)n(heme)f(v)-5 b(alue)28 b(to)f(C)h(\(see)f(section)p 0 0 1 TeXcolorrgb 28 w(8.2.1)p Black(\).)863 2722 y(Since)19 b(the)g(main)f(ev)n(en)n(t)g(lo)r(op)g(do)r(es)g(not)g(guaran)n(tee)f (that)h(ev)n(ery)g(call)g(to)g Fo(s48)p 3227 2722 V 30 w(note)p 3433 2722 V 30 w(external)p 3815 2722 V 28 w(event)739 2821 y Fr(causes)33 b(the)h(just)g(o)r(ccurred)f(ev)n(en)n(t)g(to)g (get)h(handled)g(immediately)-7 b(,)35 b(external)e(co)r(de)h(has)739 2921 y(to)20 b(mak)n(e)f(sure)h(that)h(it)f(can)g(collect)g(m)n (ultiple)h(external)e(ev)n(en)n(ts)h(\(i.e.)35 b(k)n(eep)20 b(them)g(in)h(an)f(ap-)739 3020 y(propriate)d(data)h(structure\).)33 b(It)19 b(is)f(safe)g(for)g(external)g(co)r(de)g(to)g(call)g Fo(s48)p 2981 3020 V 30 w(note)p 3187 3020 V 30 w(external)p 3569 3020 V 28 w(event)739 3120 y Fr(on)34 b(ev)n(ery)g(collected)g (external)g(ev)n(en)n(t,)i(though,)g(ev)n(en)f(if)g(older)f(ev)n(en)n (ts)g(ha)n(v)n(e)f(not)i(b)r(een)739 3220 y(handled)28 b(y)n(et.)739 3456 y Fe(8.10.1)112 b(Collecting)38 b(external)g(ev)m (en)m(ts)g(in)f(external)h(co)s(de)739 3611 y Fr(External)h(co)r(de)h (has)g(to)g(b)r(e)g(able)g(to)g(collect)g(m)n(ultiple)h(ev)n(en)n(ts)f (that)g(ha)n(v)n(e)f(o)r(ccurred.)739 3710 y(Therefore,)30 b(external)h(co)r(de)f(has)h(to)f(create)g(the)i(needed)f(data)f (structures)g(to)h(store)f(the)739 3810 y(information)f(that)i(is)f (asso)r(ciated)f(with)i(the)f(o)r(ccurred)f(ev)n(en)n(t.)44 b(Usually)-7 b(,)31 b(external)e(co)r(de)739 3910 y(collects)e(the)i (ev)n(en)n(ts)e(in)h(a)g(thread.)37 b(An)29 b(separate)d(thread)i(do)r (es)g(not)g(ha)n(v)n(e)e(an)i(call)g(argu-)739 4009 y(men)n(t,)i (though,)g(so)f(it)h(cannot)f(create)f(Sc)n(heme)i(data)f(structures.) 41 b(It)30 b(m)n(ust)g(use)f(C)h(data)739 4109 y(structures)25 b(to)g(collect)g(the)h(ev)n(en)n(ts,)f(for)g(example)h(it)f(can)h (create)e(a)h(link)n(ed)h(list)f(of)h(ev)n(en)n(ts.)863 4209 y(Since)32 b(the)f(ev)n(en)n(ts)f(are)g(later)h(handled)g(on)f (the)i(Sc)n(heme)f(side,)g(the)h(information)e(as-)739 4309 y(so)r(ciated)d(with)h(the)g(ev)n(en)n(t)f(needs)h(to)f(b)r(e)h (visible)f(on)h(the)g(Sc)n(heme)f(side,)h(to)r(o.)36 b(Therefore,)739 4408 y(external)c(co)r(de)h(exp)r(orts)f(a)h(function) h(to)f(Sc)n(heme)g(that)g(returns)g(all)f(curren)n(t)h(ev)n(en)n(ts)f (as)739 4508 y(Sc)n(heme)e(ob)5 b(jects)30 b(\(the)h(function)g(that)f (returns)g(the)g(ev)n(en)n(ts)g(kno)n(ws)f(ab)r(out)h(the)h(curren)n(t) 739 4608 y(call)23 b(and)g(th)n(us)g(can)g(create)f(Sc)n(heme)h(ob)5 b(jects\).)35 b(Sc)n(heme)24 b(and)f(external)f(co)r(de)h(migh)n(t)g (need)739 4707 y(to)30 b(share)g(Sc)n(heme)g(record)g(t)n(yp)r(es)g (that)h(represen)n(t)f(the)h(ev)n(en)n(t)f(information.)45 b(T)n(ypically)-7 b(,)739 4807 y(the)37 b(function)f(that)h(returns)f (the)g(ev)n(en)n(ts)g(con)n(v)n(erts)e(the)j(C)f(ev)n(en)n(t)g(list)g (in)n(to)g(a)g(Sc)n(heme)739 4907 y(ev)n(en)n(t)f(list)h(b)n(y)g (preserving)e(the)i(original)e(order)h(in)h(whic)n(h)f(the)i(ev)n(en)n (ts)e(arriv)n(ed.)59 b(Note)739 5006 y(that)36 b(the)g(external)f(list) h(data)f(structure)g(that)h(holds)g(all)f(ev)n(en)n(ts)g(needs)g(to)h (b)r(e)g(m)n(utex)p Black 2109 5255 a(124)p Black eop end %%Page: 125 133 TeXDict begin 125 132 bop 0 TeXcolorgray Black Black Black 291 523 a Fr(lo)r(c)n(k)n(ed)32 b(on)i(eac)n(h)f(access)g(to)g (preserv)n(e)f(thread-safe)h(manipulation)g(of)h(the)g(data)g(struc-) 291 623 y(ture)k(\(the)h(Sc)n(heme)g(thread)f(that)h(pro)r(cesses)e(ev) n(en)n(ts)h(and)h(the)g(external)e(thread)i(that)291 722 y(collects)27 b(ev)n(en)n(ts)f(ma)n(y)h(access)g(the)h(data)f (structures)g(at)g(the)h(same)f(time\).)291 950 y Fe(8.10.2)112 b(Handling)39 b(external)f(ev)m(en)m(ts)f(in)h(Sc)m(heme)291 1103 y Fr(If)28 b(the)h(sole)f(o)r(ccurrence)f(of)h(an)g(ev)n(en)n(t)g (do)r(es)g(not)h(su\016ce)f(for)g(the)h(program,)d(the)j(Sc)n(heme)291 1203 y(side)35 b(has)g(to)g(pull)g(the)h(information)f(that)g(is)h (asso)r(ciated)e(with)h(an)g(ev)n(en)n(t)g(from)g(the)h(C)291 1302 y(side.)h(Then,)28 b(the)h(Sc)n(heme)e(side)h(can)g(handle)f(the)i (ev)n(en)n(t)e(data.)37 b(F)-7 b(or)27 b(example,)h(a)f(t)n(ypical)291 1402 y(ev)n(en)n(t)k(lo)r(op)h(on)g(the)h(Sc)n(heme)f(side)g(that)h(w)n (aits)e(on)h(external)g(ev)n(en)n(ts)f(of)h(an)g(p)r(ermanen)n(t)291 1501 y(ev)n(en)n(t)27 b(t)n(yp)r(e)g(that)h(an)g(long-running)e (external)h(thread)g(pro)r(duces)g(ma)n(y)g(lo)r(ok)f(lik)n(e)i(this:)p Black Black 291 1655 a Fo(\(define)40 b(*external-event-u)o(id)o(*)378 1755 y(\(new-external-ev)o(en)o(t-)o(uid)d(\(lookup-imported)o(-b)o (ind)o(in)o(g)g("my-event"\)\)\))291 1954 y(\(spawn-external)o(-th)o (re)o(ad)g(*external-event-)o(uid)o(*\))291 2154 y(\(let)42 b(loop)f(\(\))378 2253 y(\(let)h(\(\(condvar)e(\(make-condvar\)\))o(\)) 465 2353 y(\(register-condva)o(r-)o(for)o(-e)o(xte)o(rn)o(al-)o(ev)o (en)o(t!)d(*external-event-u)o(id)o(*)h(condvar\))465 2452 y(\(wait-for-extern)o(al)o(-ev)o(en)o(t)g(condvar\))465 2552 y(\(process-externa)o(l-)o(eve)o(nt)o(s!)f(\(get-external-eve)o (nt)o(s\))o(\))465 2652 y(\(loop\)\)\))291 2806 y Fr(In)27 b(the)g(ab)r(o)n(v)n(e)f(example,)h(the)g(v)-5 b(ariable)26 b Fo(*external-event-u)o(id)o(*)21 b Fr(is)27 b(de\014ned)g(as)g(a)f(p) r(er-)291 2905 y(manen)n(t)39 b(ev)n(en)n(t)g(iden)n(ti\014er.)73 b(On)39 b(ev)n(ery)g(pass)f(through)h(the)h(lo)r(op,)j(a)c(fresh)g (condition)291 3005 y(v)-5 b(ariable)23 b(is)h(registered)f(with)i(the) g(ev)n(en)n(t)f(iden)n(ti\014er,)h(then)g Fo(wait-for-external)o(-e)o (ven)o(t)291 3104 y Fr(blo)r(c)n(ks)i(on)h(the)h(condition)f(v)-5 b(ariable)27 b(un)n(til)i(external)f(co)r(de)g(signals)f(the)i(o)r (ccurrence)e(of)h(a)291 3204 y(matc)n(hing)17 b(ev)n(en)n(t.)34 b(Note)18 b(that)h Fo(process-external)o(-e)o(ven)o(ts)o(!)28 b Fr(and)18 b Fo(get-external-eve)o(nt)o(s)291 3304 y Fr(need)g(to)g(b)r(e)h(de\014ned)g(b)n(y)f(the)h(user.)33 b(The)18 b(user-written)g(function)h Fo(get-external-eve)o(nt)o(s)291 3403 y Fr(returns)32 b(all)i(the)g(ev)n(en)n(ts)f(that)g(the)h (external)f(co)r(de)g(has)h(collected)f(since)g(the)h(last)f(time)291 3503 y Fo(get-external-ev)o(ent)o(s)12 b Fr(w)n(as)18 b(called;)j(the)d(user-written)g(function)h Fo(process-external)o(-e)o (ven)o(ts)o(!)291 3603 y Fr(handles)27 b(the)h(ev)n(en)n(ts)f(on)g(the) h(Sc)n(heme)f(side.)415 3702 y(When)k(the)f(Sc)n(heme)g(side)h(only)e (w)n(aits)h(for)f(one)h(single)g(ev)n(en)n(t,)g(there)g(is)g(no)g(need) g(for)291 3802 y(an)g(ev)n(en)n(t)g(lo)r(op)g(and)g(an)g(p)r(ermanen)n (t)g(ev)n(en)n(t)g(iden)n(ti\014er.)45 b(Then,)31 b Fo (new-external-even)o(t)291 3901 y Fr(is)c(more)g(con)n(v)n(enien)n(t)f (to)i(use:)p Black Black 291 4055 a Fo(\(call-with-valu)o(es)378 4155 y(\(lambda)40 b(\(\))j(\(new-external-eve)o(nt)o(\)\))378 4255 y(\(lambda)d(\(uid)i(condvar\))465 4354 y(\(spawn-external-)o(th)o (rea)o(d)37 b(uid\))465 4454 y(\(wait-for-extern)o(al)o(-ev)o(en)o(t)h (condvar\))465 4553 y(\(unregister-exte)o(rn)o(al-)o(ev)o(ent)o(-u)o (id!)f(uid\))465 4653 y(...\)\))291 4807 y Fr(Here,)22 b Fo(new-external-eve)o(nt)15 b Fr(returns)21 b(a)g(fresh)g(ev)n(en)n (t)g(iden)n(ti\014er)g(and)g(a)g(fresh)g(condition)291 4907 y(v)-5 b(ariable.)66 b(The)38 b(ev)n(en)n(t)g(iden)n(ti\014er)g (is)f(passed)h(to)f Fo(spawn-external-th)o(rea)o(d)32 b Fr(and)38 b(the)291 5006 y(condition)27 b(v)-5 b(ariable)27 b(is)g(used)h(to)f(w)n(ait)g(for)g(the)h(o)r(ccurrence)f(of)g(the)h (external)f(ev)n(en)n(t.)p Black 1660 5255 a(125)p Black eop end %%Page: 126 134 TeXDict begin 126 133 bop 0 TeXcolorgray Black Black Black 863 523 a Fr(External)19 b(co)r(de)h(uses)g Fo(s48)p 1686 523 27 4 v 30 w(note)p 1892 523 V 30 w(external)p 2274 523 V 28 w(event)e Fr(to)i(push)h(the)f(fact)h(that)f(an)g(exter-) 739 623 y(nal)j(ev)n(en)n(t)f(o)r(ccurred)g(in)n(to)h(the)g(main)g(ev)n (en)n(t)g(lo)r(op,)g(then)h(the)f(Sc)n(heme)g(co)r(de)g(needs)g(to)g (pull)739 722 y(the)c(actual)e(ev)n(en)n(t)h(data)g(from)g(external)g (co)r(de)g(\(in)h(this)g(example)f(with)g Fo(get-external-even)o(ts)p Fr(\).)739 822 y(The)23 b(user-written)g(function)h Fo (spawn-external-t)o(hr)o(ead)17 b Fr(runs)22 b(the)i(external)f(co)r (de)g(that)739 922 y(informs)35 b(the)h(Sc)n(heme)g(side)f(ab)r(out)h (the)f(o)r(ccurrence)g(of)g(external)g(ev)n(en)n(ts.)60 b(The)36 b(ev)n(en)n(t)739 1021 y(iden)n(ti\014er)26 b(is)h(passed)f(as)g(an)g(argumen)n(t.)35 b(The)27 b(external-ev)n(en)n (t-related)d(parts)i(of)g(the)h(im-)739 1121 y(plemen)n(tation)g(of)34 b Fo(spawn-external-th)o(re)o(ad)21 b Fr(in)28 b(external)f(co)r(de)g (could)h(lo)r(ok)f(lik)n(e)g(this:)p Black Black 739 1294 a Fo(s48_ref_t)739 1393 y(spawn_external_t)o(hr)o(ead)o(\(s)o(48_) o(ca)o(ll)o(_t)37 b(call,)42 b(s48_ref_t)e(sch_event_uid\))d({)826 1493 y(...)826 1593 y(s48_note_externa)o(l_e)o(ve)o(nt\()o(s4)o(8_)o (ext)o(ra)o(ct_)o(lo)o(ng_)o(2\()o(ca)o(ll,)g(sch_event_uid\)\);)826 1692 y(...)739 1792 y(})739 1965 y Fr(The)g(ev)n(en)n(t)f(iden)n (ti\014er)g(is)g(extracted)g(from)g(its)h(Sc)n(heme)g(represen)n (tation)d(and)j(used)f(to)739 2065 y(inform)27 b(the)h(Sc)n(heme)g (side)f(ab)r(out)h(an)f(o)r(ccurrence)f(of)i(this)g(sp)r(eci\014c)g(ev) n(en)n(t)f(t)n(yp)r(e.)739 2338 y Fj(8.11)135 b(Unsafe)46 b(functions)f(and)g(macros)739 2519 y Fr(All)25 b(of)f(the)g(C)h(pro)r (cedures)e(and)h(macros)f(describ)r(ed)h(ab)r(o)n(v)n(e)e(c)n(hec)n(k)i (that)g(their)h(argumen)n(ts)739 2619 y(ha)n(v)n(e)g(the)i(appropriate) e(t)n(yp)r(es)i(and)f(that)h(indexes)f(are)g(in)h(range.)35 b(The)27 b(follo)n(wing)e(pro)r(ce-)739 2719 y(dures)c(and)g(macros)e (are)i(iden)n(tical)g(to)g(those)g(describ)r(ed)g(ab)r(o)n(v)n(e,)g (except)g(that)h(they)f(do)g(not)739 2818 y(p)r(erform)31 b(t)n(yp)r(e)h(and)f(range)g(c)n(hec)n(ks.)48 b(They)31 b(are)g(pro)n(vided)g(for)g(the)h(purp)r(ose)f(of)h(writing)739 2918 y(more)27 b(e\016cien)n(t)g(co)r(de;)h(their)f(general)g(use)g(is) h(not)f(recommended.)p Black 755 3060 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3060 V 30 w(unsafe)p 1693 3060 V 29 w(extract)p 2030 3060 V 28 w(char)p 2234 3060 V 30 w(2\(s48)p 2484 3060 V 29 w(call)p 2689 3060 V 30 w(t,)41 b(s48)p 2980 3060 V 30 w(ref)p 3142 3060 V 30 w(t\))p Black 755 3159 a Fn(\017)p Black 42 w Fo(s48)p 976 3159 V 30 w(ref)p 1138 3159 V 30 w(t)g(s48)p 1385 3159 V 30 w(unsafe)p 1679 3159 V 29 w(enter)p 1928 3159 V 29 w(char)p 2133 3159 V 30 w(2\(s48)p 2383 3159 V 29 w(call)p 2588 3159 V 30 w(t,)g(long\))p Black 755 3259 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3259 V 30 w(unsafe)p 1693 3259 V 29 w(extract)p 2030 3259 V 28 w(integer)p 2366 3259 V 29 w(2\(s48)p 2615 3259 V 29 w(call)p 2820 3259 V 30 w(t,)41 b(s48)p 3111 3259 V 30 w(ref)p 3273 3259 V 30 w(t\))p Black 755 3359 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3359 V 30 w(unsafe)p 1693 3359 V 29 w(extract)p 2030 3359 V 28 w(double)p 2322 3359 V 29 w(2\(s48)p 2571 3359 V 30 w(call)p 2777 3359 V 29 w(t,)41 b(s48)p 3067 3359 V 30 w(ref)p 3229 3359 V 30 w(t\))p Black 755 3500 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 3500 V 30 w(unsafe)p 1693 3500 V 29 w(extract)p 2030 3500 V 28 w(fixnum)p 2322 3500 V 29 w(2\(s48)p 2571 3500 V 30 w(call)p 2777 3500 V 29 w(t,)41 b(s48)p 3067 3500 V 30 w(ref)p 3229 3500 V 30 w(t\))p Black 755 3600 a Fn(\017)p Black 42 w Fo(s48)p 976 3600 V 30 w(ref)p 1138 3600 V 30 w(t)g(s48)p 1385 3600 V 30 w(unsafe)p 1679 3600 V 29 w(enter)p 1928 3600 V 29 w(fixnum)p 2221 3600 V 29 w(2\(s48)p 2470 3600 V 29 w(call)p 2675 3600 V 30 w(t,)g(long\))p Black 755 3742 a Fn(\017)p Black 42 w Fo(s48)p 976 3742 V 30 w(ref)p 1138 3742 V 30 w(t)g(s48)p 1385 3742 V 30 w(unsafe)p 1679 3742 V 29 w(car)p 1840 3742 V 30 w(2\(s48)p 2090 3742 V 29 w(call)p 2295 3742 V 30 w(t,)g(s48)p 2586 3742 V 30 w(ref)p 2748 3742 V 30 w(t\))p Black 755 3841 a Fn(\017)p Black 42 w Fo(s48)p 976 3841 V 30 w(ref)p 1138 3841 V 30 w(t)g(s48)p 1385 3841 V 30 w(unsafe)p 1679 3841 V 29 w(cdr)p 1840 3841 V 30 w(2\(s48)p 2090 3841 V 29 w(call)p 2295 3841 V 30 w(t,)g(s48)p 2586 3841 V 30 w(ref)p 2748 3841 V 30 w(t\))p Black 755 3941 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 3941 V 30 w(unsafe)p 1693 3941 V 29 w(set)p 1854 3941 V 30 w(car)p 2016 3941 V 30 w(2\(s48)p 2266 3941 V 30 w(call)p 2472 3941 V 29 w(t,)41 b(s48)p 2762 3941 V 30 w(ref)p 2924 3941 V 30 w(t,)g(s48)p 3215 3941 V 30 w(ref)p 3377 3941 V 30 w(t\))p Black 755 4041 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 4041 V 30 w(unsafe)p 1693 4041 V 29 w(set)p 1854 4041 V 30 w(cdr)p 2016 4041 V 30 w(2\(s48)p 2266 4041 V 30 w(call)p 2472 4041 V 29 w(t,)41 b(s48)p 2762 4041 V 30 w(ref)p 2924 4041 V 30 w(t,)g(s48)p 3215 4041 V 30 w(ref)p 3377 4041 V 30 w(t\))p Black 755 4182 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4182 V 30 w(unsafe)p 1693 4182 V 29 w(vector)p 1986 4182 V 29 w(length)p 2279 4182 V 29 w(2\(s48)p 2528 4182 V 29 w(call)p 2733 4182 V 30 w(t,)40 b(s48)p 3023 4182 V 31 w(ref)p 3186 4182 V 30 w(t\))p Black 755 4282 a Fn(\017)p Black 42 w Fo(s48)p 976 4282 V 30 w(ref)p 1138 4282 V 30 w(t)h(s48)p 1385 4282 V 30 w(unsafe)p 1679 4282 V 29 w(vector)p 1972 4282 V 29 w(ref)p 2133 4282 V 30 w(2\(s48)p 2383 4282 V 29 w(call)p 2588 4282 V 30 w(t,)g(s48)p 2879 4282 V 30 w(ref)p 3041 4282 V 30 w(t,)g(long\))p Black 755 4382 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 4382 V 30 w(unsafe)p 1693 4382 V 29 w(vector)p 1986 4382 V 29 w(set)p 2147 4382 V 30 w(2\(s48)p 2397 4382 V 29 w(call)p 2602 4382 V 30 w(t,)41 b(s48)p 2893 4382 V 30 w(ref)p 3055 4382 V 30 w(t,)g(long,)e(s48)p 3605 4382 V 30 w(ref)p 3767 4382 V 30 w(t\))p Black 755 4523 a Fn(\017)p Black 42 w Fo(long)247 b(s48)p 1399 4523 V 30 w(unsafe)p 1693 4523 V 29 w(string)p 1986 4523 V 29 w(length)p 2279 4523 V 29 w(2\(s48)p 2528 4523 V 29 w(call)p 2733 4523 V 30 w(t,)40 b(s48)p 3023 4523 V 31 w(ref)p 3186 4523 V 30 w(t\))p Black 755 4623 a Fn(\017)p Black 42 w Fo(char)247 b(s48)p 1399 4623 V 30 w(unsafe)p 1693 4623 V 29 w(string)p 1986 4623 V 29 w(ref)p 2147 4623 V 30 w(2\(s48)p 2397 4623 V 29 w(call)p 2602 4623 V 30 w(t,)41 b(s48)p 2893 4623 V 30 w(ref)p 3055 4623 V 30 w(t,)g(long\))p Black 755 4723 a Fn(\017)p Black 42 w Fo(void)247 b(s48)p 1399 4723 V 30 w(unsafe)p 1693 4723 V 29 w(string)p 1986 4723 V 29 w(set)p 2147 4723 V 30 w(2\(s48)p 2397 4723 V 29 w(call)p 2602 4723 V 30 w(t,)41 b(s48)p 2893 4723 V 30 w(ref)p 3055 4723 V 30 w(t,)g(long,)e(char\))p Black 755 4864 a Fn(\017)p Black 42 w Fo(s48)p 976 4864 V 30 w(ref)p 1138 4864 V 30 w(t)i(s48)p 1385 4864 V 30 w(unsafe)p 1679 4864 V 29 w(symbol)p 1972 4864 V 29 w(to)p 2089 4864 V 30 w(string)p 2383 4864 V 29 w(2\(s48)p 2632 4864 V 30 w(call)p 2838 4864 V 29 w(t,)g(s48)p 3128 4864 V 30 w(ref)p 3290 4864 V 30 w(t\))p Black 755 5006 a Fn(\017)p Black 42 w Fo(char)e(*)166 b(s48)p 1401 5006 V 30 w(unsafe)p 1695 5006 V 29 w(extract)p 2032 5006 V 29 w(byte)p 2237 5006 V 29 w(vector)p 2530 5006 V 29 w(2\(s48)p 2779 5006 V 29 w(call)p 2984 5006 V 30 w(t,)41 b(s48)p 3275 5006 V 30 w(ref)p 3437 5006 V 30 w(t\))p Black 2109 5255 a Fr(126)p Black eop end %%Page: 127 135 TeXDict begin 127 134 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(long)248 b(s48)p 951 523 27 4 v 30 w(unsafe)p 1245 523 V 29 w(byte)p 1450 523 V 29 w(vector)p 1743 523 V 29 w(length)p 2036 523 V 29 w(2\(s48)p 2285 523 V 29 w(call)p 2490 523 V 30 w(t,)41 b(s48)p 2781 523 V 30 w(ref)p 2943 523 V 30 w(t\))p Black 307 623 a Fn(\017)p Black 41 w Fo(char)248 b(s48)p 951 623 V 30 w(unsafe)p 1245 623 V 29 w(byte)p 1450 623 V 29 w(vector)p 1743 623 V 29 w(ref)p 1904 623 V 30 w(2\(s48)p 2154 623 V 30 w(call)p 2360 623 V 29 w(t,)41 b(s48)p 2650 623 V 30 w(ref)p 2812 623 V 30 w(t,)g(long\))p Black 307 722 a Fn(\017)p Black 41 w Fo(void)248 b(s48)p 951 722 V 30 w(unsafe)p 1245 722 V 29 w(byte)p 1450 722 V 29 w(vector)p 1743 722 V 29 w(set)p 1904 722 V 30 w(2\(s48)p 2154 722 V 30 w(call)p 2360 722 V 29 w(t,)41 b(s48)p 2650 722 V 30 w(ref)p 2812 722 V 30 w(t,)g(long,)f(int\))415 875 y Fr(Additionally)19 b(to)f(not)g(p)r(erforming)g(t)n(yp)r(e)g(c)n (hec)n(ks,)h(the)g(p)r(oin)n(ter)f(returned)g(b)n(y)h Fo(s48)p 2964 875 V 31 w(unsafe)p 3259 875 V 28 w(extract)p 3595 875 V 29 w(byte)p 3800 875 V 30 w(vector)p 4094 875 V 29 w(2)291 974 y Fr(will)26 b(lik)n(ely)g(b)r(ecome)g(in)n(v)-5 b(alid)26 b(when)h(a)f(garbage)e(collection)i(o)r(ccurs.)35 b(See)27 b(section)p 0 0 1 TeXcolorrgb(8.7.3)p Black 24 w(on)291 1074 y(ho)n(w)g(the)h(in)n(terface)e(deals)h(with)i(b)n (yte)e(v)n(ectors)f(in)i(a)f(prop)r(er)g(w)n(a)n(y)-7 b(.)p Black 307 1226 a Fn(\017)p Black 41 w Fo(s48)p 527 1226 V 30 w(ref)p 689 1226 V 30 w(t)42 b(s48)p 937 1226 V 30 w(unsafe)p 1231 1226 V 29 w(shared)p 1524 1226 V 29 w(binding)p 1861 1226 V 28 w(ref)p 2021 1226 V 30 w(2\(s48)p 2271 1226 V 29 w(call)p 2476 1226 V 30 w(t,)f(s48)p 2767 1226 V 30 w(ref)p 2929 1226 V 30 w(t)g(s)p 3088 1226 V 31 w(b\))p Black 307 1326 a Fn(\017)p Black 41 w Fo(int)290 b(s48)p 949 1326 V 30 w(unsafe)p 1243 1326 V 29 w(shared)p 1536 1326 V 28 w(binding)p 1872 1326 V 29 w(p)p 1945 1326 V 31 w(2\(s48)p 2196 1326 V 29 w(call)p 2401 1326 V 30 w(t,)41 b(x\))p Black 307 1425 a Fn(\017)p Black 41 w Fo(int)290 b(s48)p 949 1425 V 30 w(unsafe)p 1243 1425 V 29 w(shared)p 1536 1425 V 28 w(binding)p 1872 1425 V 29 w(is)p 1989 1425 V 31 w(import)p 2284 1425 V 28 w(p)p 2356 1425 V 31 w(2\(s48)p 2607 1425 V 30 w(call)p 2813 1425 V 29 w(t,)41 b(s48)p 3103 1425 V 30 w(ref)p 3265 1425 V 30 w(t)g(s)p 3424 1425 V 31 w(b\))p Black 307 1525 a Fn(\017)p Black 41 w Fo(s48)p 527 1525 V 30 w(ref)p 689 1525 V 30 w(t)h(s48)p 937 1525 V 30 w(unsafe)p 1231 1525 V 29 w(shared)p 1524 1525 V 29 w(binding)p 1861 1525 V 28 w(name)p 2065 1525 V 30 w(2\(s48)p 2315 1525 V 29 w(call)p 2520 1525 V 30 w(t,)e(s48)p 2810 1525 V 31 w(ref)p 2973 1525 V 30 w(t)h(s)p 3132 1525 V 31 w(b\))p Black 307 1625 a Fn(\017)p Black 41 w Fo(void)248 b(s48)p 951 1625 V 30 w(unsafe)p 1245 1625 V 29 w(shared)p 1538 1625 V 29 w(binding)p 1875 1625 V 28 w(set)p 2035 1625 V 30 w(2\(s48)p 2285 1625 V 29 w(call)p 2490 1625 V 30 w(t,)41 b(s48)p 2781 1625 V 30 w(ref)p 2943 1625 V 30 w(t)g(s)p 3102 1625 V 31 w(b,)g(s48)p 3394 1625 V 30 w(ref)p 3556 1625 V 30 w(t)g(value\))p Black 307 1776 a Fn(\017)p Black 41 w Fo(s48)p 527 1776 V 30 w(ref)p 689 1776 V 30 w(t)h(s48)p 937 1776 V 30 w(unsafe)p 1231 1776 V 29 w(record)p 1524 1776 V 29 w(type)p 1729 1776 V 29 w(2\(s48)p 1978 1776 V 30 w(call)p 2184 1776 V 29 w(t,)f(s48)p 2474 1776 V 30 w(ref)p 2636 1776 V 30 w(t\))p Black 307 1876 a Fn(\017)p Black 41 w Fo(s48)p 527 1876 V 30 w(ref)p 689 1876 V 30 w(t)h(s48)p 937 1876 V 30 w(unsafe)p 1231 1876 V 29 w(record)p 1524 1876 V 29 w(ref)p 1685 1876 V 30 w(2\(s48)p 1935 1876 V 29 w(call)p 2140 1876 V 30 w(t,)e(s48)p 2430 1876 V 31 w(ref)p 2593 1876 V 30 w(t,)g(long\))p Black 307 1975 a Fn(\017)p Black 41 w Fo(void)248 b(s48)p 951 1975 V 30 w(unsafe)p 1245 1975 V 29 w(record)p 1538 1975 V 29 w(set)p 1699 1975 V 30 w(2\(s48)p 1949 1975 V 29 w(call)p 2154 1975 V 30 w(t,)40 b(s48)p 2444 1975 V 31 w(ref)p 2607 1975 V 30 w(t,)g(long,)g(s48)p 3157 1975 V 30 w(ref)p 3319 1975 V 30 w(t\))p Black 307 2127 a Fn(\017)p Black 41 w Fo(type)248 b(s48)p 951 2127 V 30 w(unsafe)p 1245 2127 V 29 w(extract)p 1582 2127 V 28 w(value)p 1830 2127 V 29 w(2\(s48)p 2079 2127 V 30 w(call)p 2285 2127 V 29 w(t,)41 b(s48)p 2575 2127 V 30 w(ref)p 2737 2127 V 30 w(t,)g(type\))p Black 307 2226 a Fn(\017)p Black 41 w Fo(type)f(*)166 b(s48)p 953 2226 V 30 w(unsafe)p 1247 2226 V 29 w(extract)p 1584 2226 V 28 w(value)p 1832 2226 V 30 w(pointer)p 2170 2226 V 28 w(2\(s48)p 2418 2226 V 29 w(call)p 2623 2226 V 30 w(t,)41 b(s48)p 2914 2226 V 30 w(ref)p 3076 2226 V 30 w(t,)g(type\))p Black 307 2326 a Fn(\017)p Black 41 w Fo(void)248 b(s48)p 951 2326 V 30 w(unsafe)p 1245 2326 V 29 w(set)p 1406 2326 V 30 w(value)p 1656 2326 V 29 w(2\(s48)p 1905 2326 V 29 w(call)p 2110 2326 V 30 w(t,)41 b(s48)p 2401 2326 V 30 w(ref)p 2563 2326 V 30 w(t,)g(type,)e(value\))291 2606 y Fj(8.12)135 b(Con)l(v)l(erting)32 b(external)f(co)t(de)f(to)g(the)g(new)g(foreign-) 664 2755 y(function)45 b(in)l(terface)291 2939 y Fr(It)30 b(is)g(straigh)n(tforw)n(ard)c(to)k(con)n(v)n(ert)f(external)g(co)r(de) g(from)h(the)g(old)g(foreign-function)f(in-)291 3038 y(terface)e(to)g(the)h(new)g(foreign-function)f(in)n(terface:)p Black 415 3225 a Fn(\017)p Black 41 w Fr(Con)n(v)n(erting)f(functions:) p Black 592 3395 a Fm({)p Black 41 w Fr(Add)i Fo(s48)p 1000 3395 V 30 w(call)42 b(call)25 b Fr(as)i(a)g(\014rst)g(argumen)n(t) f(to)h(ev)n(ery)f(function)i(protot)n(yp)r(e)681 3494 y(that)g(returns)f(or)f(accepts)h(a)g Fo(s48)p 1746 3494 V 31 w(value)p Fr(.)p Black 592 3629 a Fm({)p Black 41 w Fr(Replace)19 b(ev)n(ery)g Fo(s48)p 1332 3629 V 30 w(value)e Fr(t)n(yp)r(e)j(in)f(the)h(function)g(protot)n(yp)r(e)e(and)h (the)h(b)r(o)r(dy)681 3729 y(with)28 b Fo(s48)p 1007 3729 V 30 w(ref)p 1169 3729 V 30 w(t)p Fr(.)p Black 592 3864 a Fm({)p Black 41 w Fr(Add)d Fo(call)e Fr(as)h(the)h(\014rst)f (argumen)n(t)f(to)i(ev)n(ery)e(function)i(call)f(that)h(returns)f(or) 681 3963 y(accepts)j(a)g(Sc)n(heme)h(ob)5 b(ject.)p Black 592 4098 a Fm({)p Black 41 w Fr(Remo)n(v)n(e)17 b(all)h(the)h Fo(GCPROTECT)p Fr(-related)14 b(co)r(de)k(\(i.e.)34 b Fo(GCPROTECT)15 b Fr(and)j Fo(UNPROTECT)p Fr(\).)p Black 415 4268 a Fn(\017)p Black 41 w Fr(Con)n(v)n(erting)26 b(global)g(\(static\))i(v)-5 b(ariables:)p Black 592 4438 a Fm({)p Black 41 w Fr(Replace)32 b Fo(s48)p 1133 4438 V 30 w(value)f Fr(t)n(yp)r(e)i(of)g(the)g(global)f(v)-5 b(ariable)31 b(with)j Fo(s48)p 2747 4438 V 30 w(ref)p 2909 4438 V 30 w(t)p Fr(,)g(ini-)681 4537 y(tialize)27 b(these)h(v)-5 b(ariables)26 b(with)i Fo(NULL)p Fr(.)p Black 592 4672 a Fm({)p Black 41 w Fr(Set)33 b(a)f(real)f(Sc)n(heme)i (ob)5 b(ject)32 b(in)h(the)g(initialization)f(function)h(of)g(y)n(our)e (co)r(de)681 4772 y(with)d(one)f(of)h(these)f(alternativ)n(es:)p Black 753 4907 a Fn(\003)p Black 41 w Fr(Use)38 b Fo(s48)p 1143 4907 V 30 w(make)p 1349 4907 V 30 w(global)p 1643 4907 V 29 w(ref)e Fr(to)i(con)n(v)n(ert)e(a)h Fo(s48)p 2466 4907 V 30 w(value)f Fr(to)i(a)f(global)836 5006 y(reference.)f(F)-7 b(or)27 b(details)g(and)h(an)f(example)g(see)g (section)p 0 0 1 TeXcolorrgb 28 w(8.7.1)p Black(.)p Black 1660 5255 a(127)p Black eop end %%Page: 128 136 TeXDict begin 128 135 bop 0 TeXcolorgray Black Black Black Black 1201 523 a Fn(\003)p Black 41 w Fr(Use)20 b Fo(s48)p 1573 523 27 4 v 30 w(local)p 1823 523 V 30 w(to)p 1941 523 V 30 w(global)p 2235 523 V 29 w(ref)f Fr(to)g(con)n(v)n(ert)g(a)g(lo)r(cal)h(reference)e(ob)5 b(ject)1284 623 y(to)28 b(a)f(global)f(one.)p Black 1201 739 a Fn(\003)p Black 41 w Fr(If)g(y)n(our)e(global)g(v)-5 b(ariable)24 b(is)h(supp)r(osed)g(to)g(hold)g(a)g(shared)f(binding)h (\(e.g.)1284 839 y(an)18 b(record)f(t)n(yp)r(e)i(binding\),)i(y)n(ou)c (can)h(use)g Fo(s48)p 2722 839 V 31 w(get)p 2885 839 V 30 w(imported)p 3267 839 V 28 w(binding)p 3603 839 V 28 w(2)1284 938 y Fr(that)28 b(returns)f(a)g(global)g(reference.)p Black 1040 1071 a Fm({)p Black 41 w Fr(Replace)k Fo(S48)p 1580 1071 V 30 w(GC)p 1698 1071 V 30 w(PROTECT)p 2036 1071 V 29 w(GLOBAL)d Fr(with)k Fo(s48)p 2682 1071 V 30 w(local)p 2932 1071 V 29 w(to)p 3049 1071 V 31 w(global)p 3344 1071 V 29 w(ref)d Fr(to)1129 1171 y(con)n(v)n(ert)d(a)h(lo)r(cal)g (reference)g(ob)5 b(ject)27 b(to)h(a)f(global)g(one.)p Black 1040 1303 a Fm({)p Black 41 w Fr(Use)j Fo(s48)p 1428 1303 V 30 w(free)p 1634 1303 V 29 w(global)p 1927 1303 V 29 w(ref)f Fr(to)g(clean)n(up)g(global)g(references)f(when)i (appro-)1129 1403 y(priate.)739 1586 y(If)23 b(y)n(ou)f(add)h Fo(#define)41 b(NO_OLD_FFI)e(1)23 b Fr(just)g(ab)r(o)n(v)n(e)f Fo(#include)40 b()18 b Fr(in)23 b(y)n(our)739 1685 y(source)k(co)r(de)h(\014le,)h(it)f(will)h(hide)f(all)g(the)h (macros)e(and)h(protot)n(yp)r(e)f(de\014nitions)i(of)f(the)g(old)739 1785 y(foreign-function)c(in)n(terface.)35 b(That)25 b(w)n(a)n(y)f(y)n(ou)g(can)h(mak)n(e)f(sure)h(that)g(y)n(ou)f(are)g (only)h(using)739 1885 y(the)j(new)g(in)n(terface)e(and)i(the)g(C)g (compiler)e(will)i(remind)g(y)n(ou)f(if)h(y)n(ou)f(don't.)p Black 2109 5255 a(128)p Black eop end %%Page: 129 137 TeXDict begin 129 136 bop 0 TeXcolorgray Black Black Black 291 1146 a Fl(Chapter)64 b(9)291 1561 y Fp(Access)77 b(to)h(POSIX)291 1993 y Fr(This)27 b(c)n(hapter)g(describ)r(es)g(Sc)n (heme)g(48's)g(in)n(terface)g(to)h(the)g(POSIX)f(C)g(calls)g([)p 0 0 1 TeXcolorrgb(1)p Black(].)37 b(Sc)n(heme)291 2093 y(v)n(ersions)20 b(of)j(most)g(of)f(the)h(functions)g(in)g(POSIX)g(are) e(pro)n(vided.)34 b(Both)23 b(the)g(in)n(terface)f(and)291 2192 y(implemen)n(tation)h(are)f(new)i(and)f(are)f(lik)n(ely)h(to)g(c)n (hange)g(in)g(future)h(releases.)34 b(Section)p 0 0 1 TeXcolorrgb 23 w(9.12)p Black 291 2292 a(lists)27 b(whic)n(h)h(Sc)n (heme)f(functions)h(call)f(whic)n(h)h(C)f(functions.)415 2392 y(Sc)n(heme)33 b(48's)g(POSIX)f(in)n(terface)h(will)h(lik)n(ely)f (c)n(hange)f(signi\014can)n(tly)g(in)i(the)f(future.)291 2492 y(The)27 b(implemen)n(tation)h(is)f(new)h(and)f(ma)n(y)g(ha)n(v)n (e)g(signi\014can)n(t)g(bugs.)415 2591 y(The)h(POSIX)f(bindings)g(are)g (a)n(v)-5 b(ailable)26 b(in)i(sev)n(eral)e(structures:)p Black Black 771 2770 a Fo(posix-processes)224 b Fr(fork,)27 b(exec,)h(and)f(friends)771 2869 y Fo(posix-process-dat)o(a)93 b Fr(information)27 b(ab)r(out)h(pro)r(cesses)771 2969 y Fo(posix-files)400 b Fr(\014les)28 b(and)f(directories)771 3069 y Fo(posix-i/o)488 b Fr(op)r(erations)27 b(on)g(p)r(orts)771 3168 y Fo(posix-time)444 b Fr(time)28 b(functions)771 3268 y Fo(posix-users)400 b Fr(users)27 b(and)h(groups)771 3368 y Fo(posix-regexps)312 b Fr(regular)26 b(expression)g(matc)n(hing) 771 3467 y Fo(posix-syslog)356 b Fr(POSIX)27 b(logging)f(facilit)n(y) 771 3567 y Fo(posix-errnos)356 b Fr(POSIX)27 b(error)f(co)r(des)771 3666 y Fo(posix)664 b Fr(all)28 b(of)f(the)h(ab)r(o)n(v)n(e)415 3851 y(Sc)n(heme)37 b(48's)f(POSIX)h(in)n(terface)g(di\013ers)g(from)g (Scsh's)g([)p 0 0 1 TeXcolorrgb(11)p Black -1 w(,)p 0 0 1 TeXcolorrgb 37 w(12)p Black -1 w(])g(in)h(sev)n(eral)d(w)n(a)n(ys.)291 3950 y(The)e(in)n(terface)g(here)g(lac)n(ks)g(Scsh's)g(high-lev)n(el)f (constructs)h(and)h(utilities,)h(suc)n(h)f(as)f(the)291 4050 y(pro)r(cess)27 b(notation,)h Fo(awk)f Fr(pro)r(cedure,)h(and)g (parsing)f(utilities.)40 b(Sc)n(heme)29 b(48)e(uses)h(distinct)291 4150 y(t)n(yp)r(es)34 b(for)g(some)g(v)-5 b(alues)34 b(that)h(Scsh)g(lea)n(v)n(es)e(as)g(sym)n(b)r(ols)h(or)g(un)n(b)r(o)n (xed)g(in)n(tegers;)j(these)291 4249 y(include)30 b(\014le)f(t)n(yp)r (es,)i(\014le)e(mo)r(des,)i(and)e(user)g(and)h(group)e(ids.)43 b(Man)n(y)29 b(of)h(the)g(names)f(and)291 4349 y(other)e(in)n(terface)g (details)g(are)f(di\013eren)n(t,)i(as)f(w)n(ell.)291 4625 y Fj(9.1)135 b(Pro)t(cess)45 b(primitiv)l(es)291 4807 y Fr(The)31 b(pro)r(cedures)g(describ)r(ed)g(in)h(this)g(section)f (con)n(trol)f(the)i(creation)e(of)i(pro)r(cesses)e(and)291 4907 y(the)40 b(execution)g(of)f(programs.)72 b(They)40 b(are)f(in)h(the)g(structures)f Fo(posix-process)c Fr(and)291 5006 y Fo(posix)p Fr(.)p Black 1660 5255 a(129)p Black eop end %%Page: 130 138 TeXDict begin 130 137 bop 0 TeXcolorgray Black Black Black 739 523 a Fe(9.1.1)112 b(Pro)s(cess)38 b(creation)f(and)i (termination)p Black 755 676 a Fn(\017)p Black 42 w Fo(\(fork\))g Fn(!)i Fq(pr)l(o)l(c)l(ess-id)i(or)f Fo(#f)p Black 755 776 a Fn(\017)p Black 42 w Fo(\(fork-and-forge)o(t)35 b Fq(thunk)9 b Fo(\))739 920 y(Fork)22 b Fr(creates)g(a)i(new)f(c)n (hild)h(pro)r(cess)e(and)i(returns)e(the)i(c)n(hild's)g(pro)r(cess-id)e (in)i(the)g(paren)n(t)739 1020 y(and)g Fo(#f)f Fr(in)i(the)f(c)n(hild.) 36 b Fo(Fork-and-forget)18 b Fr(calls)24 b Fq(thunk)32 b Fr(in)25 b(a)e(new)i(pro)r(cess;)f(no)g(pro)r(cess-)739 1120 y(id)f(is)g(returned.)35 b Fo(Fork-and-forget)17 b Fr(uses)23 b(an)g(in)n(termediate)g(pro)r(cess)f(to)h(a)n(v)n(oid)e (creating)739 1219 y(a)27 b(zom)n(bie)g(pro)r(cess.)p Black 755 1364 a Fn(\017)p Black 42 w Fo(\(process-id?)45 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 755 1463 a Fn(\017)p Black 42 w Fo(\(process-id=?)i Fq(pr)l(o)l(c)l (ess-id0)f(pr)l(o)l(c)l(ess-id1)11 b Fo(\))43 b Fn(!)e Fq(b)l(o)l(ole)l(an)p Black 755 1563 a Fn(\017)p Black 42 w Fo(\(process-id->in)o(te)o(ger)35 b Fq(pr)l(o)l(c)l(ess-id)9 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)p Black 755 1663 a Fn(\017)p Black 42 w Fo(\(integer->proce)o(ss)o(-id)35 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)g Fq(pr)l(o)l(c)l(ess-id)739 1807 y Fo(Process-id?)57 b Fr(is)36 b(a)g(predicate)f(for)g(pro)r (cess-ids,)i Fo(process-id=?)57 b Fr(compares)34 b(t)n(w)n(o)h(to)739 1907 y(see)42 b(if)h(they)f(are)g(the)g(same,)k(and)c Fo(process-id-uid)37 b Fr(returns)42 b(the)g(actual)g(Unix)h(id.)739 2006 y Fo(Process-id->inte)o(ge)o(r)28 b Fr(and)34 b Fo(integer->proces)o(s-i)o(d)28 b Fr(con)n(v)n(ert)k(pro)r(cess)h(ids)h (to)f(and)739 2106 y(from)27 b(in)n(tegers.)p Black 755 2250 a Fn(\017)p Black 42 w Fo(\(process-id-exi)o(t-)o(sta)o(tu)o(s)36 b Fq(pr)l(o)l(c)l(ess-id)9 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)f(or)h Fo(#f)p Black 755 2350 a Fn(\017)p Black 42 w Fo(\(process-id-ter)o(mi) o(nat)o(in)o(g-s)o(ig)o(nal)35 b Fq(pr)l(o)l(c)l(ess-id)9 b Fo(\))41 b Fn(!)h Fq(signal)g(or)g Fo(#f)p Black 755 2450 a Fn(\017)p Black 42 w Fo(\(wait-for-child)o(-p)o(roc)o(es)o(s)36 b Fq(pr)l(o)l(c)l(ess-id)9 b Fo(\))739 2594 y Fr(If)29 b(a)g(pro)r(cess)f(terminates)g(normally)h Fo(process-id-exit-s)o(ta)o (tus)22 b Fr(will)29 b(return)g(its)g(exit)739 2694 y(status.)86 b(If)45 b(the)g(pro)r(cess)e(is)h(still)g(running)g(or)f(w)n(as)h (terminated)g(b)n(y)g(a)f(signal)h(then)739 2793 y Fo(process-id-exit-) o(st)o(atu)o(s)38 b Fr(will)44 b(return)f Fo(#f)p Fr(.)85 b(Similarly)-7 b(,)48 b(if)c(a)g(c)n(hild)g(pro)r(cess)e(w)n(as)739 2893 y(terminated)29 b(b)n(y)g(a)f(signal)h Fo(process-id-term)o(ina)o (ti)o(ng-)o(si)o(gn)o(al)23 b Fr(will)29 b(return)g(that)g(sig-)739 2993 y(nal)36 b(and)g(will)g(return)g Fo(#f)g Fr(if)g(the)h(pro)r(cess) e(is)h(still)h(running)f(or)f(terminated)h(normally)-7 b(.)739 3092 y Fo(Wait-for-child-p)o(ro)o(ces)o(s)18 b Fr(blo)r(c)n(ks)23 b(un)n(til)h(the)g(c)n(hild)g(pro)r(cess)f (terminates.)35 b(Sc)n(heme)24 b(48)739 3192 y(ma)n(y)29 b(reap)f(c)n(hild)i(pro)r(cesses)e(b)r(efore)h(the)h(user)e(requests)h (their)g(exit)h(status,)g(but)g(it)g(do)r(es)739 3292 y(not)d(alw)n(a)n(ys)f(do)h(so.)p Black 755 3436 a Fn(\017)p Black 42 w Fo(\(exit)39 b Fq(status)7 b Fo(\))739 3581 y Fr(T)-7 b(erminates)27 b(the)h(curren)n(t)f(pro)r(cess)f(with)i(the)g (in)n(teger)f Fq(status)33 b Fr(as)27 b(its)h(exit)g(status.)739 3812 y Fe(9.1.2)112 b Fb(Exec)p Black 755 3965 a Fn(\017)p Black 42 w Fo(\(exec)39 b Fq(pr)l(o)l(gr)l(am-name)j(ar)l(g0)g(.)13 b(.)g(.)g Fo(\))p Black 755 4065 a Fn(\017)p Black 42 w Fo(\(exec-with-envi)o(ro)o(nme)o(nt)35 b Fq(pr)l(o)l(gr)l(am-name)42 b(env)g(ar)l(g0)g(.)13 b(.)g(.)g Fo(\))p Black 755 4164 a Fn(\017)p Black 42 w Fo(\(exec-file)37 b Fq(\014lename)42 b(ar)l(g0)g(.)13 b(.)g(.)g Fo(\))p Black 755 4264 a Fn(\017)p Black 42 w Fo(\(exec-file-with)o(-e)o(nvi)o(ro)o(nme)o(nt)35 b Fq(\014lename)42 b(env)f(ar)l(g0)i(.)13 b(.)g(.)g Fo(\))p Black 755 4364 a Fn(\017)p Black 42 w Fo(\(exec-with-alia)o(s)35 b Fq(name)42 b(lo)l(okup?)52 b(mayb)l(e-env)42 b(ar)l(guments)7 b Fo(\))739 4508 y Fr(All)34 b(of)f(these)g(replace)f(the)i(curren)n(t) e(program)g(with)h(a)g(new)g(one.)54 b(They)33 b(di\013er)g(in)h(ho)n (w)739 4608 y(the)39 b(new)g(program)e(is)i(found,)j(what)d(its)h(en)n (vironmen)n(t)e(is,)j(and)e(what)g(argumen)n(ts)f(it)739 4707 y(is)j(passed.)77 b Fo(Exec)39 b Fr(and)i Fo(exec-with-environ)o (men)o(t)35 b Fr(lo)r(ok)41 b(up)g(the)h(new)f(program)e(in)739 4807 y(the)31 b(searc)n(h)e(path,)j(while)f Fo(exec-file)c Fr(and)k Fo(exec-file-with-en)o(vi)o(ro)o(nme)o(nt)24 b Fr(execute)739 4907 y(a)39 b(particular)f(\014le.)72 b(The)39 b(en)n(vironmen)n(t)g(is)g(either)g(inherited)g(from)g(the)h (curren)n(t)e(pro-)739 5006 y(cess)25 b(\()p Fo(exec)f Fr(and)i Fo(exec-file)p Fr(\))c(or)j(giv)n(en)g(as)g(an)g(argumen)n(t)g (\()p Fo(...-with-environ)o(men)o(t)p Fr(\).)p Black 2109 5255 a(130)p Black eop end %%Page: 131 139 TeXDict begin 131 138 bop 0 TeXcolorgray Black Black Black 291 523 a Fq(Pr)l(o)l(gr)l(am-name)35 b Fr(and)28 b Fq(\014lename)35 b Fr(and)28 b(an)n(y)h Fq(ar)l(g)1785 535 y Fa(i)1841 523 y Fr(should)g(b)r(e)f Fq(os-string-thing)36 b Fr(argumen)n(ts)291 623 y(\(see)26 b(section)p 0 0 1 TeXcolorrgb 26 w(5.15)p Black(.)36 b Fq(Env)f Fr(should)27 b(b)r(e)g(a)f(list)h(of)f Fq(os-string-thing)34 b Fr(argumen)n(ts)26 b(of)g(the)h(form)291 722 y Fo(")p Fq(name)6 b Fo(=)p Fq(value)g Fo(")p Fr(.)64 b(The)36 b(\014rst)h(four)f(pro)r(cedures)f (add)i(their)f(\014rst)h(argumen)n(t,)g Fq(pr)l(o)l(gr)l(am-)291 822 y(name)d Fr(or)26 b Fq(\014lename)6 b Fr(,)29 b(b)r(efore)e(the)h Fq(ar)l(g0)i(.)13 b(.)g(.)51 b Fr(argumen)n(ts.)415 957 y Fo(Exec-with-alias)29 b Fr(is)34 b(an)g(omnibus)h(pro)r(cedure)e (that)i(subsumes)f(the)h(other)f(four.)291 1056 y Fq(Name)28 b Fr(is)22 b(lo)r(ok)n(ed)f(up)h(in)g(the)g(searc)n(h)f(path)h(if)29 b Fq(lo)l(okup?)46 b Fr(is)22 b(true)g(and)g(is)f(used)h(as)g(a)f (\014lename)291 1156 y(otherwise.)39 b Fq(Mayb)l(e-env)g Fr(is)29 b(either)g(a)f(list)i(of)e Fq(os-string-thing)8 b Fr(s)28 b(for)h(the)g(en)n(vironmen)n(t)f(of)291 1256 y(the)e(new)g(program)e(or)h Fo(#f)g Fr(in)h(whic)n(h)g(case)g(the)g (new)g(program)e(inherits)i(its)g(en)n(vironmen)n(t)291 1355 y(from)21 b(the)g(curren)n(t)g(one.)34 b Fq(A)n(r)l(guments)27 b Fr(should)21 b(b)r(e)h(a)f(list)g(of)h Fq(os-string-thing)7 b Fr(s;)23 b(unlik)n(e)e(with)291 1455 y(the)26 b(other)g(four)g(pro)r (cedures,)f Fq(name)33 b Fr(is)26 b(not)h(added)f(to)g(this)h(list)f (\(hence)h Fo(-with-alias)p Fr(\).)291 1916 y Fj(9.2)135 b(Signals)291 2164 y Fr(There)31 b(are)g(t)n(w)n(o)g(v)-5 b(arieties)31 b(of)h(signals)e(a)n(v)-5 b(ailable,)32 b Fq(name)l(d)g Fr(and)g Fq(anonymous)p Fr(.)50 b(A)32 b(named)291 2264 y(signal)24 b(is)h(one)f(for)h(whic)n(h)g(w)n(e)g(ha)n (v)n(e)f(a)g(sym)n(b)r(olic)h(name,)g(suc)n(h)g(as)f Fo(kill)g Fr(or)g Fo(pipe)p Fr(.)35 b(Anon)n(y-)291 2363 y(mous)40 b(signals,)k(for)c(whic)n(h)i(w)n(e)e(only)h(ha)n(v)n(e)f (the)i(curren)n(t)e(op)r(erating)g(system's)h(signal)291 2463 y(n)n(um)n(b)r(er,)30 b(ha)n(v)n(e)e(no)i(meaning)f(in)h(other)f (op)r(erating)g(systems.)42 b(Named)30 b(signals)f(preserv)n(e)291 2562 y(their)g(meaning)g(in)g(image)g(\014les.)41 b(Not)30 b(all)f(named)g(signals)f(are)g(a)n(v)-5 b(ailable)28 b(from)h(all)g(OS's)291 2662 y(and)e(there)g(ma)n(y)g(b)r(e)h(m)n (ultiple)g(names)g(for)f(a)g(single)g(OS)g(signal)g(n)n(um)n(b)r(er.)p Black 307 2917 a Fn(\017)p Black 41 w Fo(\(signal)39 b Fq(signal-name)6 b Fo(\))28 b Fn(!)g Fq(signal)1352 b Fr(syn)n(tax)p Black 307 3017 a Fn(\017)p Black 41 w Fo(\(name->signal)36 b Fq(symb)l(ol)9 b Fo(\))42 b Fn(!)f Fq(signal)i(or)f Fo(#f)p Black 307 3117 a Fn(\017)p Black 41 w Fo(\(integer->signal)35 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)h Fq(signal)p Black 307 3216 a Fn(\017)p Black 41 w Fo(\(signal?)47 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 307 3316 a Fn(\017)p Black 41 w Fo(\(signal-name)37 b Fq(signal)9 b Fo(\))41 b Fn(!)h Fq(symb)l(ol)g(or)g Fo(#f)p Black 307 3415 a Fn(\017)p Black 41 w Fo(\(signal-os-number)35 b Fq(signal)9 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)p Black 307 3515 a Fn(\017)p Black 41 w Fo(\(signal=?)k Fq(signal0)d(signal1)11 b Fo(\))43 b Fn(!)f Fq(b)l(o)l(ole)l(an)291 3770 y Fr(The)18 b(syn)n(tax)f Fo(signal)f Fr(returns)i(a)g(\(named\))h(signal)e(asso)r(ciated)g(with) i Fq(signal-name)6 b Fr(.)35 b Fo(Name->signal)291 3870 y Fr(returns)29 b(a)i(\(named\))g(signal)e(or)h Fo(#f)g Fr(if)h(the)g(the)g(signal)f Fq(name)37 b Fr(is)30 b(not)h(supp)r (orted)f(b)n(y)h(the)291 3969 y(op)r(erating)c(system.)41 b(The)29 b(signal)f(returned)g(b)n(y)i Fo(integer->signal)23 b Fr(is)29 b(a)f(named)h(signal)291 4069 y(if)36 b Fq(inte)l(ger)j Fr(corresp)r(onds)27 b(to)j(a)f(named)g(signal)g(in)h(the)g(curren)n(t) e(op)r(erating)h(system;)h(oth-)291 4169 y(erwise)25 b(it)i(returns)f(an)g(anon)n(ymous)f(signal.)36 b Fo(Signal-name)22 b Fr(returns)k(a)g(sym)n(b)r(ol)g(if)34 b Fq(signal)291 4268 y Fr(is)24 b(named)g(and)g Fo(#f)f Fr(if)i(it)g(is)f(anon)n (ymous.)34 b Fo(Signal=?)e Fr(returns)24 b Fo(#t)f Fr(if)32 b Fq(signal0)k Fr(and)24 b Fq(signal1)291 4368 y Fr(ha)n(v)n(e)i(the)i (same)f(op)r(erating)g(system)g(n)n(um)n(b)r(er)g(and)h Fo(#f)e Fr(if)j(they)e(do)h(not.)291 4787 y Fe(9.2.1)112 b(POSIX)37 b(signals)291 5006 y Fr(The)27 b(follo)n(wing)g(lists)g(the) h(names)f(of)h(the)g(POSIX)f(signals.)p Black 1660 5255 a(131)p Black eop end %%Page: 132 140 TeXDict begin 132 139 bop 0 TeXcolorgray Black Black Black Black Black 789 601 a Fo(abrt)98 b Fr(ab)r(ort)27 b(-)g(abnormal)f(termination)h(\(as)h(b)n(y)f(ab)r(ort\(\)\))789 701 y Fo(alrm)98 b Fr(alarm)26 b(-)h(timeout)i(signal)d(\(as)h(b)n(y)h (alarm\(\)\))789 800 y Fo(fpe)142 b Fr(\015oating)26 b(p)r(oin)n(t)i(exception)789 900 y Fo(hup)142 b Fr(hangup)27 b(-)g(hangup)g(on)h(con)n(trolling)e(terminal)h(or)g(death)g(of)h(con)n (trolling)e(pro)r(cess)789 1000 y Fo(ill)142 b Fr(illegal)27 b(instruction)789 1099 y Fo(int)142 b Fr(in)n(terrupt)27 b(-)g(in)n(teraction)g(atten)n(tion)789 1199 y Fo(kill)98 b Fr(kill)27 b(-)h(termination)f(signal,)g(cannot)g(b)r(e)h(caugh)n(t)f (or)f(ignored)789 1298 y Fo(pipe)98 b Fr(pip)r(e)28 b(-)f(write)h(on)f (a)g(pip)r(e)h(with)g(no)g(readers)789 1398 y Fo(quit)98 b Fr(quit)28 b(-)f(in)n(teraction)g(termination)789 1498 y Fo(segv)98 b Fr(segmen)n(tation)26 b(violation)h(-)g(in)n(v)-5 b(alid)28 b(memory)e(reference)789 1597 y Fo(term)98 b Fr(termination)27 b(-)g(termination)h(signal)789 1697 y Fo(usr1)98 b Fr(user1)26 b(-)i(for)f(use)g(b)n(y)g(applications)789 1797 y Fo(usr2)98 b Fr(user2)26 b(-)i(for)f(use)g(b)n(y)g(applications) 789 1896 y Fo(chld)98 b Fr(c)n(hild)27 b(-)h(c)n(hild)f(pro)r(cess)g (stopp)r(ed)h(or)e(terminated)789 1996 y Fo(cont)98 b Fr(con)n(tin)n(ue)27 b(-)g(con)n(tin)n(ue)g(if)h(stopp)r(ed)789 2095 y Fo(stop)98 b Fr(stop)27 b(-)g(cannot)g(b)r(e)i(caugh)n(t)d(or)h (ignored)789 2195 y Fo(tstp)98 b Fr(in)n(teractiv)n(e)26 b(stop)789 2295 y Fo(ttin)98 b Fr(read)26 b(from)i(con)n(trol)e (terminal)h(attempted)i(b)n(y)e(bac)n(kground)e(pro)r(cess)789 2394 y Fo(ttou)98 b Fr(write)27 b(to)h(con)n(trol)e(terminal)h (attempted)h(b)n(y)g(bac)n(kground)d(pro)r(cess)789 2494 y Fo(bus)142 b Fr(bus)27 b(error)f(-)h(access)g(to)g(unde\014ned)h(p)r (ortion)g(of)f(memory)739 2718 y Fe(9.2.2)112 b(Other)38 b(signals)739 2871 y Fr(The)j(follo)n(wing)g(lists)g(the)h(names)f(of)g (the)h(non-POSIX)e(signals)h(that)g(the)h(system)f(is)739 2970 y(curren)n(tly)27 b(a)n(w)n(are)e(of.)1312 3222 y Fo(trap)185 b Fr(trace)27 b(or)g(breakp)r(oin)n(t)f(trap)1312 3322 y Fo(iot)229 b Fr(IOT)27 b(trap)h(-)f(a)g(synon)n(ym)g(for)g(ABR) -7 b(T)1312 3422 y Fo(emt)1312 3521 y(sys)229 b Fr(bad)28 b(argumen)n(t)e(to)i(routine)f(\(SVID\))1312 3621 y Fo(stkflt)97 b Fr(stac)n(k)27 b(fault)h(on)f(copro)r(cessor)1312 3720 y Fo(urg)229 b Fr(urgen)n(t)27 b(condition)g(on)h(so)r(c)n(k)n(et)e (\(4.2)h(BSD\))1312 3820 y Fo(io)273 b Fr(I/O)27 b(no)n(w)g(p)r (ossible)g(\(4.2)g(BSD\))1312 3920 y Fo(poll)185 b Fr(A)28 b(synon)n(ym)f(for)g(SIGIO)g(\(System)h(V\))1312 4019 y Fo(cld)229 b Fr(A)28 b(synon)n(ym)f(for)g(SIGCHLD)1312 4119 y Fo(xcpu)185 b Fr(CPU)28 b(time)g(limit)g(exceeded)f(\(4.2)g (BSD\))1312 4219 y Fo(xfsz)185 b Fr(File)28 b(size)f(limit)i(exceeded)e (\(4.2)g(BSD\))1312 4318 y Fo(vtalrm)97 b Fr(Virtual)28 b(alarm)e(clo)r(c)n(k)h(\(4.2)g(BSD\))1312 4418 y Fo(prof)185 b Fr(Pro\014le)27 b(alarm)f(clo)r(c)n(k)1312 4517 y Fo(pwr)229 b Fr(P)n(o)n(w)n(er)25 b(failure)j(\(System)g(V\))1312 4617 y Fo(info)185 b Fr(A)28 b(synon)n(ym)f(for)g(SIGPWR)1312 4717 y Fo(lost)185 b Fr(File)28 b(lo)r(c)n(k)f(lost)1312 4816 y Fo(winch)141 b Fr(Windo)n(w)28 b(resize)e(signal)h(\(4.3)g(BSD,) h(Sun\))1312 4916 y Fo(unused)97 b Fr(Un)n(used)28 b(signal)p Black 2109 5255 a(132)p Black eop end %%Page: 133 141 TeXDict begin 133 140 bop 0 TeXcolorgray Black Black Black Black Black 291 771 a Fe(9.2.3)112 b(Sending)39 b(signals)p Black 307 926 a Fn(\017)p Black 41 w Fo(\(signal-process)d Fq(pr)l(o)l(c)l(ess-id)42 b(signal)9 b Fo(\))291 1084 y Fr(Send)28 b Fq(signal)37 b Fr(to)27 b(the)h(pro)r(cess)f(corresp)r (onding)e(to)j Fq(pr)l(o)l(c)l(ess-id)9 b Fr(.)291 1332 y Fe(9.2.4)112 b(Receiving)38 b(signals)291 1490 y Fr(Signals)25 b(receiv)n(ed)g(b)n(y)g(the)i(Sc)n(heme)e(pro)r(cess)g(can)h(b)r(e)g (obtained)g(via)f(one)h(or)f(more)g(signal-)291 1590 y(queues.)34 b(Eac)n(h)20 b(signal)g(queue)h(has)f(a)h(list)g(of)g (monitored)g(signals)f(and)g(a)h(queue)g(of)g(receiv)n(ed)291 1690 y(signals)d(that)h(ha)n(v)n(e)f(y)n(et)i(to)f(b)r(e)g(read)g(from) g(the)h(signal-queue.)32 b(When)20 b(the)g(Sc)n(heme)f(pro)r(cess)291 1789 y(receiv)n(es)25 b(a)i(signal)g(that)g(signal)g(is)g(added)g(to)g (the)h(receiv)n(ed-signal)d(queues)i(of)g(all)g(signal-)291 1889 y(queues)g(whic)n(h)g(are)g(curren)n(tly)g(monitoring)f(that)i (particular)e(signal.)p Black 307 2047 a Fn(\017)p Black 41 w Fo(\(make-signal-queu)o(e)35 b Fq(signals)7 b Fo(\))42 b Fn(!)g Fq(signal-queue)p Black 307 2146 a Fn(\017)p Black 41 w Fo(\(signal-queue?)i Fq(x)10 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 2246 a Fn(\017)p Black 41 w Fo(\(signal-queue-mon)o(it)o(ore)o(d-)o(si)o(gna)o(ls)35 b Fq(signal-queue)6 b Fo(\))42 b Fn(!)f Fq(list)h(of)g(signals)p Black 307 2346 a Fn(\017)p Black 41 w Fo(\(dequeue-signal!)i Fq(signal-queue)6 b Fo(\))41 b Fn(!)h Fq(signal)p Black 307 2445 a Fn(\017)p Black 41 w Fo(\(maybe-dequeue-si)o(gn)o(al!)h Fq(signal-queue)6 b Fo(\))42 b Fn(!)f Fq(signal)i(or)f Fo(#f)291 2603 y(Make-signal-que)o(ue)18 b Fr(returns)23 b(a)h(new)g(signal-queue)e(that)j(will)f(monitor)f(the)i(signals)e(in) 291 2703 y(the)18 b(list)h Fq(signals)7 b Fr(.)35 b Fo(Signal-queue?)28 b Fr(is)18 b(a)g(predicate)g(for)g(signal)f(queues.)34 b Fo(Signal-queue-mon)o(it)o(or)o(ed-)o(si)o(gna)o(ls)291 2803 y Fr(returns)17 b(a)h(list)h(of)f(the)h(signals)e(curren)n(tly)g (monitored)h(b)n(y)h Fq(signal-queue)6 b Fr(.)35 b Fo(Dequeue-signal!) 291 2902 y Fr(and)i Fo(maybe-dequeue-s)o(ign)o(al)31 b Fr(b)r(oth)37 b(return)g(the)h(next)f(receiv)n(ed-but-unread)f (signal)291 3002 y(from)21 b Fq(signal-queue)6 b Fr(.)35 b(If)28 b Fq(signal-queue)6 b Fr('s)22 b(queue)f(of)g(signals)f(is)i (empt)n(y)g Fo(dequeue-signal!)291 3101 y Fr(blo)r(c)n(ks)32 b(un)n(til)i(an)g(appropriate)d(signal)i(is)h(receiv)n(ed.)53 b Fo(Maybe-dequeue-sig)o(na)o(l!)48 b Fr(do)r(es)291 3201 y(not)27 b(blo)r(c)n(k;)g(it)h(returns)f Fo(#f)g Fr(instead.)415 3304 y(There)22 b(is)h(a)f(bug)h(in)g(the)g(curren)n(t) f(system)h(that)g(causes)f(an)g(erroneous)f(deadlo)r(c)n(k)h(error)291 3403 y(if)29 b(threads)g(are)f(blo)r(c)n(k)n(ed)h(w)n(aiting)f(for)h (signals)f(and)h(no)g(other)g(threads)g(are)f(a)n(v)-5 b(ailable)28 b(to)291 3503 y(run.)59 b(A)35 b(w)n(ork)f(around)g(is)h (to)g(create)f(a)g(thread)h(that)g(sleeps)g(for)f(a)h(long)f(time,)k (whic)n(h)291 3602 y(prev)n(en)n(ts)26 b(an)n(y)h(deadlo)r(c)n(k)f (errors)g(\(including)i(real)f(ones\):)p Black Black 291 3780 a Fo(>)43 b(,open)e(threads)291 3879 y(>)i(\(spawn)e(\(lambda) g(\(\))770 3979 y(;)i(Sleep)f(for)g(a)h(year)770 4079 y(\(sleep)e(\(*)i(1000)f(60)h(60)f(24)h(365\)\)\)\))p Black 307 4250 a Fn(\017)p Black 41 w Fo(\(add-signal-queue)o(-s)o(ign) o(al)o(!)35 b Fq(signal-queue)42 b(signal)9 b Fo(\))p Black 307 4350 a Fn(\017)p Black 41 w Fo(\(remove-signal-qu)o(eu)o(e-s) o(ig)o(na)o(l!)35 b Fq(signal-queue)42 b(signal)9 b Fo(\))291 4508 y Fr(These)40 b(t)n(w)n(o)h(pro)r(cedures)f(can)g(b)r(e)i(used)f (to)g(add)g(or)f(remo)n(v)n(e)g(signals)g(from)g(a)h(signal-)291 4608 y(queue's)f(list)g(of)h(monitored)e(signals.)74 b(When)41 b(a)f(signal)f(is)h(remo)n(v)n(ed)f(from)h(a)g(signal-)291 4707 y(queue's)26 b(list)h(of)f(monitored)g(signals)f(an)n(y)h(o)r (ccurances)f(of)h(the)h(signal)f(are)f(remo)n(v)n(ed)g(from)291 4807 y(that)38 b(signal-queue's)f(p)r(ending)i(signals.)68 b(In)38 b(other)g(w)n(ords,)i Fo(dequeue-signal!)63 b Fr(and)291 4907 y Fo(maybe-dequeue-s)o(ign)o(al)o(!)71 b Fr(will)41 b(only)f(return)g(signals)g(that)h(are)f(curren)n(tly)g (on)h(the)291 5006 y(signal-queue's)26 b(list)h(of)h(signals.)p Black 1660 5255 a(133)p Black eop end %%Page: 134 142 TeXDict begin 134 141 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(9.3)135 b(Pro)t(cess)45 b(en)l(vironmen)l(t)739 705 y Fr(These)27 b(are)g(in)h(structures)e Fo(posix-process-dat)o(a)c Fr(and)27 b Fo(posix)p Fr(.)739 935 y Fe(9.3.1)112 b(Pro)s(cess)38 b(iden)m(ti\014cation)p Black 755 1089 a Fn(\017)p Black 42 w Fo(\(get-process-id)o(\))d Fn(!)83 b Fq(pr)l(o)l(c)l(ess-id)p Black 755 1188 a Fn(\017)p Black 42 w Fo(\(get-parent-pro)o(ce)o(ss-)o (id)o(\))36 b Fn(!)83 b Fq(pr)l(o)l(c)l(ess-id)739 1329 y Fr(These)37 b(return)f(the)h(pro)r(cess)f(ids)h(of)g(the)g(curren)n (t)f(pro)r(cess)g(and)h(its)g(paren)n(t.)64 b(See)37 b(sec-)739 1429 y(tion)p 0 0 1 TeXcolorrgb 28 w(9.1.1)p Black 26 w(for)27 b(op)r(erations)f(on)i(pro)r(cess)e(ids.)p Black 755 1570 a Fn(\017)p Black 42 w Fo(\(get-user-id\))36 b Fn(!)83 b Fq(user-id)p Black 755 1670 a Fn(\017)p Black 42 w Fo(\(get-effective-)o(us)o(er-)o(id)o(\))36 b Fn(!)83 b Fq(user-id)p Black 755 1769 a Fn(\017)p Black 42 w Fo(\(set-user-id!)36 b Fq(user-id)9 b Fo(\))p Black 755 1869 a Fn(\017)p Black 42 w Fo(\(set-effective-)o(us)o(er-)o(id)o(!)36 b Fq(user-id)9 b Fo(\))p Black 755 2010 a Fn(\017)p Black 42 w Fo(\(get-group-id\))35 b Fn(!)83 b Fq(gr)l(oup-id)p Black 755 2109 a Fn(\017)p Black 42 w Fo(\(get-effective-)o(gr)o(oup)o (-i)o(d\))35 b Fn(!)83 b Fq(gr)l(oup-id)p Black 755 2209 a Fn(\017)p Black 42 w Fo(\(set-group-id!)35 b Fq(gr)l(oup-id)9 b Fo(\))p Black 755 2309 a Fn(\017)p Black 42 w Fo(\(set-effective-)o (gr)o(oup)o(-i)o(d!)35 b Fq(gr)l(oup-id)9 b Fo(\))739 2450 y Fr(Ev)n(ery)34 b(pro)r(cess)h(has)g(b)r(oth)i(the)f(original)e (and)i(e\013ectiv)n(e)g(user)f(id)h(and)g(group)f(id.)62 b(The)739 2549 y(e\013ectiv)n(e)28 b(v)-5 b(alues)28 b(ma)n(y)g(b)r(e)h(set,)g(but)g(the)g(original)d(ones)i(can)g(only)g(b) r(e)h(set)g(if)g(the)f(pro)r(cess)739 2649 y(has)f(appropriate)f(priv)n (elages.)p Black 755 2790 a Fn(\017)p Black 42 w Fo(\(get-groups\))36 b Fn(!)83 b Fq(gr)l(oup-ids)p Black 755 2890 a Fn(\017)p Black 42 w Fo(\(get-login-name)o(\))35 b Fn(!)83 b Fq(os-string)739 3031 y Fo(Get-groups)26 b Fr(returns)k(a)g(list)g(of)h(the)f(supplemen) n(tary)g(groups)f(of)h(the)h(curren)n(t)e(pro)r(cess.)739 3130 y Fo(Get-login-name)22 b Fr(returns)27 b(a)g(user)g(name)g(for)g (the)h(curren)n(t)f(pro)r(cess.)739 3361 y Fe(9.3.2)112 b(En)m(vironmen)m(t)38 b(v)-6 b(ariables)p Black 755 3514 a Fn(\017)p Black 42 w Fo(\(lookup-environ)o(me)o(nt-)o(va)o(ria)o (bl)o(e)35 b Fq(os-string-thing)7 b Fo(\))42 b Fn(!)f Fq(os-string)h(or)g Fo(#f)p Black 755 3614 a Fn(\017)p Black 42 w Fo(\(set-environmen)o(t-)o(var)o(ia)o(ble)o(!)35 b Fq(name)42 b(value)6 b Fo(\))p Black 755 3713 a Fn(\017)p Black 42 w Fo(\(environment-al)o(is)o(t\))35 b Fn(!)42 b Fq(alist)739 3854 y Fo(Lookup-environme)o(nt)o(-va)o(ri)o(abl)o(e)23 b Fr(lo)r(oks)28 b(up)h(its)g(argumen)n(t)f(in)i(the)f(en)n(vironmen)n (t)f(list)739 3954 y(and)18 b(returns)g(the)h(corresp)r(onding)d(v)-5 b(alue)18 b(or)g Fo(#f)f Fr(if)i(there)f(is)h(none.)33 b Fo(Set-environment-v)o(ar)o(ia)o(ble)o(!)739 4054 y Fr(sets)28 b(the)h(v)-5 b(alue)29 b(of)35 b Fo(name)27 b Fr(in)i(the)g(en)n(vironmen)n(t)f(list)g(to)h Fo(value)p Fr(.)38 b(If)d Fo(name)28 b Fr(is)g(not)h(already)739 4153 y(an)g(en)n(vironmen)n(t)f(v)-5 b(ariable,)29 b(it's)g(created.)41 b(If)30 b(it)g(already)d(exists,)j(its)f(v)-5 b(alue)29 b(is)h(o)n(v)n(erwrit-)739 4253 y(ten)23 b(with)f Fo(value)p Fr(.)33 b(Both)22 b(argumen)n(ts)f(m)n(ust)i(b)r(e)f(os-string-things.) 33 b Fo(Environment-alist)739 4352 y Fr(returns)23 b(the)i(en)n(tire)e (en)n(vironmen)n(t)g(as)h(a)f(list)h(of)31 b Fo(\()p Fq(name-os-string)50 b Fo(.)87 b Fq(value-os-string)7 b Fo(\))739 4452 y Fr(pairs.)739 4725 y Fj(9.4)135 b(Users)46 b(and)e(groups)739 4907 y Fq(User-id)9 b Fr(s)28 b(and)g Fq(gr)l(oup-id)9 b Fr(s)29 b(are)f(b)r(o)n(xed)g(in)n(tegers)f (represen)n(ting)g(Unix)i(users)e(and)i(groups.)739 5006 y(The)f(pro)r(cedures)e(in)i(this)g(section)f(are)f(in)i(structures)f Fo(posix-users)c Fr(and)28 b Fo(posix)p Fr(.)p Black 2109 5255 a(134)p Black eop end %%Page: 135 143 TeXDict begin 135 142 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(\(user-id?)46 b Fq(x)10 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 623 a Fn(\017)p Black 41 w Fo(\(user-id=?)k Fq(user-id0)c(user-id1) 11 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 722 a Fn(\017)p Black 41 w Fo(\(user-id->integer)35 b Fq(user-id)9 b Fo(\))41 b Fn(!)g Fq(inte)l(ger)p Black 307 822 a Fn(\017)p Black 41 w Fo(\(integer->user-id)35 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)g Fq(user-id)p Black 307 960 a Fn(\017)p Black 41 w Fo(\(group-id?)46 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 1060 a Fn(\017)p Black 41 w Fo(\(group-id=?)46 b Fq(gr)l(oup-id0)d(gr)l (oup-id1)11 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 1160 a Fn(\017)p Black 41 w Fo(\(group-id->intege)o(r)35 b Fq(gr)l(oup-id)9 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)p Black 307 1259 a Fn(\017)p Black 41 w Fo(\(integer->group-i)o(d)35 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)h Fq(gr)l(oup-id)291 1398 y Fr(User-ids)26 b(and)h(group-ids)f(ha)n(v)n(e)h(their)g(o)n(wn)g (o)n(wn)g(predicates)f(and)i(comparison,)e(b)r(o)n(xing,)291 1497 y(and)h(un)n(b)r(o)n(xing)g(functions.)p Black 307 1636 a Fn(\017)p Black 41 w Fo(\(user-id->user-in)o(fo)35 b Fq(user-id)9 b Fo(\))41 b Fn(!)g Fq(user-info)p Black 307 1735 a Fn(\017)p Black 41 w Fo(\(name->user-info)35 b Fq(os-string)7 b Fo(\))41 b Fn(!)h Fq(user-info)291 1874 y Fr(These)27 b(return)g(the)h(user)f(info)h(for)f(a)g(user)g (iden)n(ti\014ed)h(b)n(y)f(user-id)g(or)g(name.)p Black 307 2012 a Fn(\017)p Black 41 w Fo(\(user-info?)46 b Fq(x)10 b Fo(\))40 b Fn(!)83 b Fq(b)l(o)l(ole)l(an)p Black 307 2112 a Fn(\017)p Black 41 w Fo(\(user-info-name)36 b Fq(user-info)5 b Fo(\))41 b Fn(!)83 b Fq(os-string)p Black 307 2211 a Fn(\017)p Black 41 w Fo(\(user-info-id)36 b Fq(user-info)5 b Fo(\))42 b Fn(!)83 b Fq(user-id)p Black 307 2311 a Fn(\017)p Black 41 w Fo(\(user-info-group)35 b Fq(user-info)5 b Fo(\))42 b Fn(!)83 b Fq(gr)l(oup-id)p Black 307 2411 a Fn(\017)p Black 41 w Fo(\(user-info-home-d)o(ir)o(ect) o(or)o(y)35 b Fq(user-info)5 b Fo(\))42 b Fn(!)83 b Fq(os-string)p Black 307 2510 a Fn(\017)p Black 41 w Fo(\(user-info-shell)35 b Fq(user-info)5 b Fo(\))42 b Fn(!)83 b Fq(os-string)291 2649 y Fr(A)25 b Fo(user-info)c Fr(con)n(tains)i(information)h(ab)r (out)h(a)f(user.)35 b(Av)-5 b(ailable)25 b(are)e(the)i(user's)f(name,) 291 2748 y(id,)j(group,)g(home)g(directory)-7 b(,)27 b(and)g(shell.)p Black 307 2887 a Fn(\017)p Black 41 w Fo(\(group-id->group-)o(in)o(fo)35 b Fq(gr)l(oup-id)9 b Fo(\))42 b Fn(!)f Fq(gr)l(oup-info)p Black 307 2986 a Fn(\017)p Black 41 w Fo(\(name->group-info)35 b Fq(os-string)7 b Fo(\))41 b Fn(!)h Fq(gr)l(oup-info)291 3125 y Fr(These)27 b(return)g(the)h(group)e(info)i(for)f(a)g(group)g(iden)n(ti\014ed)h(b)n (y)f(group-id)g(or)f(name.)p Black 307 3263 a Fn(\017)p Black 41 w Fo(\(group-info?)45 b Fq(x)10 b Fo(\))41 b Fn(!)83 b Fq(b)l(o)l(ole)l(an)p Black 307 3363 a Fn(\017)p Black 41 w Fo(\(group-info-name)35 b Fq(gr)l(oup-info)5 b Fo(\))43 b Fn(!)83 b Fq(os-string)p Black 307 3462 a Fn(\017)p Black 41 w Fo(\(group-info-id)36 b Fq(gr)l(oup-info)5 b Fo(\))42 b Fn(!)83 b Fq(gr)l(oup-id)p Black 307 3562 a Fn(\017)p Black 41 w Fo(\(group-info-membe)o(rs)35 b Fq(gr)l(oup-info)5 b Fo(\))42 b Fn(!)83 b Fq(user-ids)291 3700 y Fr(A)32 b Fo(group-info)c Fr(con)n(tains)i(information)i(ab)r (out)f(a)h(group.)48 b(Av)-5 b(ailable)32 b(are)f(the)h(group's)291 3800 y(name,)27 b(id,)h(and)f(a)h(list)f(of)h(mem)n(b)r(ers.)291 4072 y Fj(9.5)135 b(OS)44 b(and)h(mac)l(hine)h(iden)l(ti\014cation)291 4254 y Fr(These)32 b(pro)r(cedures)g(return)h(strings)f(that)h(are)f (supp)r(osed)h(to)g(iden)n(tify)h(the)f(curren)n(t)f(OS)291 4354 y(and)25 b(mac)n(hine.)36 b(The)26 b(POSIX)f(standard)f(do)r(es)i (not)f(indicate)h(the)g(format)f(of)h(the)g(strings.)291 4453 y(The)h(pro)r(cedures)g(are)f(in)i(structures)f Fo(posix-platform-n)o(am)o(es)21 b Fr(and)28 b Fo(posix)p Fr(.)p Black 307 4592 a Fn(\017)p Black 41 w Fo(\(os-name\))38 b Fn(!)k Fq(string)p Black 307 4691 a Fn(\017)p Black 41 w Fo(\(os-node-name\))36 b Fn(!)41 b Fq(string)p Black 307 4791 a Fn(\017)p Black 41 w Fo(\(os-release-name\))35 b Fn(!)41 b Fq(string)p Black 307 4890 a Fn(\017)p Black 41 w Fo(\(os-version-name\))35 b Fn(!)41 b Fq(string)p Black 307 4990 a Fn(\017)p Black 41 w Fo(\(machine-name\))36 b Fn(!)41 b Fq(string)p Black 1660 5255 a Fr(135)p Black eop end %%Page: 136 144 TeXDict begin 136 143 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(9.6)135 b(Files)46 b(and)e(directories)739 705 y Fr(These)27 b(pro)r(cedures)g(are)f(in)i(structures)f Fo(posix-files)c Fr(and)k Fo(posix)p Fr(.)739 936 y Fe(9.6.1)112 b(Directory)37 b(streams)739 1089 y Fr(Directory)29 b(streams)g(are)f (lik)n(e)i(input)h(p)r(orts,)f(with)g(eac)n(h)f(read)g(op)r(eration)g (returning)g(the)739 1189 y(next)f(name)f(in)h(the)g(directory)-7 b(.)p Black 755 1333 a Fn(\017)p Black 42 w Fo(\(open-directory)o(-s)o (tre)o(am)35 b Fq(name)6 b Fo(\))41 b Fn(!)h Fq(dir)l(e)l(ctory)p Black 755 1433 a Fn(\017)p Black 42 w Fo(\(directory-stre)o(am)o(?)i Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 1533 a Fn(\017)p Black 42 w Fo(\(read-directory)o(-s)o(tre)o(am)35 b Fq(dir)l(e)l(ctory)7 b Fo(\))42 b Fn(!)g Fq(name)g(or)g Fo(#f)p Black 755 1632 a Fn(\017)p Black 42 w Fo(\(close-director)o(y-) o(str)o(ea)o(m)36 b Fq(dir)l(e)l(ctory)7 b Fo(\))739 1777 y(Open-directory-s)o(tr)o(eam)13 b Fr(op)r(ens)20 b(a)f(new)h(directory)f(stream.)33 b Fo(Directory-stream)o(?)28 b Fr(is)739 1876 y(a)22 b(predicate)g(that)h(recognizes)e(directory)h (streams.)34 b Fo(Read-directory-s)o(tr)o(eam)16 b Fr(returns)739 1976 y(the)j(next)f(name)g(in)h(the)g(directory)e(or)g Fo(#f)h Fr(if)h(all)f(names)g(ha)n(v)n(e)f(b)r(een)i(read.)33 b Fo(Close-directory-)o(st)o(re)o(am)739 2076 y Fr(closes)26 b(a)i(directory)e(stream.)p Black 755 2220 a Fn(\017)p Black 42 w Fo(\(list-directory)35 b Fq(name)6 b Fo(\))41 b Fn(!)h Fq(list)g(of)g(os-strings)739 2364 y Fr(This)27 b(is)h(the)g(ob)n(vious)e(utilit)n(y;)i(it)g(returns)f(a)g(list)h(of)g (the)g(names)f(in)h(directory)f Fq(name)6 b Fr(.)739 2596 y Fe(9.6.2)112 b(W)-9 b(orking)38 b(directory)p Black 755 2749 a Fn(\017)p Black 42 w Fo(\(working-direct)o(or)o(y\))d Fn(!)42 b Fq(os-string)p Black 755 2849 a Fn(\017)p Black 42 w Fo(\(set-working-di)o(re)o(cto)o(ry)o(!)36 b Fq(os-string-thing)7 b Fo(\))739 2993 y Fr(These)27 b(return)g(and)h(set)f(the)h(w)n(orking) e(directory)-7 b(.)739 3224 y Fe(9.6.3)112 b(File)39 b(creation)e(and)i(remo)m(v)-6 b(al)p Black 755 3378 a Fn(\017)p Black 42 w Fo(\(open-file)37 b Fq(p)l(ath)42 b(\014le-options)7 b Fo(\))42 b Fn(!)f Fq(p)l(ort)p Black 755 3477 a Fn(\017)p Black 42 w Fo(\(open-file)c Fq(p)l(ath)42 b(\014le-options)g(\014le-mo)l(de)6 b Fo(\))42 b Fn(!)g Fq(p)l(ort)739 3622 y Fo(Open-file)15 b Fr(op)r(ens)j(a)g(p)r(ort)g(to) g(the)h(\014le)f(named)h(b)n(y)g Fq(p)l(ath)6 b Fr(,)21 b(whic)n(h)e(m)n(ust)f(b)r(e)h(a)f Fq(os-string-thing)739 3721 y Fr(argumen)n(t.)34 b(The)21 b Fq(\014le-options)28 b Fr(argumen)n(t)21 b(determines)f(v)-5 b(arious)20 b(asp)r(ects)h(of)g (the)h(returned)739 3821 y(p)r(ort.)36 b(The)24 b(optional)h Fq(\014le-mo)l(de)31 b Fr(argumen)n(t)24 b(is)g(used)h(only)g(if)g(the) g(\014le)g(to)g(b)r(e)g(op)r(ened)g(do)r(es)739 3920 y(not)34 b(already)f(exist.)58 b(The)35 b(returned)f(p)r(ort)g(is)h(an) f(input)h(p)r(ort)f(if)42 b Fq(\014le-options)g Fr(includes)739 4020 y Fo(read-only)p Fr(;)28 b(otherwise)h(it)i(returns)e(an)h(output) h(p)r(ort.)44 b Fo(Dup-switching-mod)o(e)24 b Fr(can)30 b(b)r(e)739 4120 y(used)20 b(to)g(op)r(en)h(an)f(input)h(p)r(ort)f(for) g(output)h(p)r(orts)f(op)r(ened)h(with)f(the)h Fo(read/write)16 b Fr(option.)p Black 755 4264 a Fn(\017)p Black 42 w Fo(\(file-options)36 b Fq(\014le-option-name)48 b Fo(...\))26 b Fn(!)i Fq(\014le-options)574 b Fr(syn)n(tax)p Black 755 4364 a Fn(\017)p Black 42 w Fo(\(file-options-o)o(n?)43 b Fq(\014le-options)g(\014le-options)7 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 755 4463 a Fn(\017)p Black 42 w Fo(\(file-options-u)o(ni)o(on)35 b Fq(\014le-options)42 b(\014le-options)7 b Fo(\))42 b Fn(!)g Fq(\014le-options)739 4608 y Fr(The)30 b(syn)n(tax)e Fo(file-options)d Fr(returns)k(a)h (\014le-option)f(with)h(the)g(indicated)g(options)f(set.)739 4707 y Fo(File-options-on?)h Fr(returns)d(true)g(if)h(its)g(\014rst)f (argumen)n(t)f(includes)i(all)f(of)g(the)h(options)739 4807 y(listed)j(in)g(the)g(second)g(argumen)n(t.)45 b Fo(File-options-unio)o(n)25 b Fr(returns)30 b(a)g(\014le-options)g(ar-) 739 4907 y(gumen)n(t)38 b(con)n(taining)e(exactly)h(all)h(of)g(the)g (options)f(listed)h(in)g(either)g(argumen)n(t.)66 b(The)739 5006 y(follo)n(wing)26 b(\014le)i(options)f(ma)n(y)g(b)r(e)h(used)g (with)g Fo(open-file)p Fr(.)p Black 2109 5255 a(136)p Black eop end %%Page: 137 145 TeXDict begin 137 144 bop 0 TeXcolorgray Black Black Black Black Black 490 510 a Fo(create)621 b Fr(create)36 b(\014le)h(if)h(it)g(do)r(es)f(not)g(already)f(exist;)42 b(a)37 b(\014le-)1375 609 y(mo)r(de)27 b(argumen)n(t)g(is)g(required)g (with)h(this)g(option)490 709 y Fo(exclusive)489 b Fr(an)19 b(error)f(will)j(b)r(e)f(raised)f(if)h(this)h(option)e(and)h Fo(create)1375 809 y Fr(are)26 b(b)r(oth)i(set)g(and)f(the)h(\014le)g (already)e(exists)490 908 y Fo(no-controlling-tt)o(y)94 b Fr(if)38 b Fq(p)l(ath)g Fr(is)31 b(a)g(terminal)g(device)g(this)h (option)f(causes)1375 1008 y(the)24 b(terminal)f(to)h(not)f(b)r(ecome)h (the)g(con)n(trolling)e(ter-)1375 1108 y(minal)27 b(of)h(the)g(pro)r (cess)490 1207 y Fo(truncate)533 b Fr(\014le)27 b(is)h(truncated)490 1307 y Fo(append)621 b Fr(writes)27 b(are)f(app)r(ended)i(to)g (existing)f(con)n(ten)n(ts)490 1406 y Fo(nonblocking)401 b Fr(read)26 b(and)i(write)f(op)r(erations)f(do)i(not)f(blo)r(c)n(k)490 1506 y Fo(read-only)489 b Fr(p)r(ort)27 b(ma)n(y)g(not)h(b)r(e)g (written)490 1606 y Fo(read-write)445 b Fr(\014le)27 b(descriptor)g(ma)n(y)g(b)r(e)h(read)e(or)h(written)490 1705 y Fo(write-only)445 b Fr(p)r(ort)27 b(ma)n(y)g(not)h(b)r(e)g(read) 291 1886 y(Only)g(one)f(of)i(the)f(last)g(three)h(options)e(ma)n(y)h(b) r(e)h(used.)39 b(If)c Fo(read-write)24 b Fr(is)k(sp)r(eci\014ed,)h(an) 291 1986 y(output)f(p)r(ort)f(is)h(returned.)415 2086 y(F)-7 b(or)27 b(example)p Black Black 291 2254 a Fo(\(open-file)39 b("some-file.txt")770 2353 y(\(file-options)f(create)j(write-only\))770 2453 y(\(file-mode)e(read)j(owner-write\)\))291 2620 y Fr(returns)29 b(an)g(output)i(p)r(ort)f(that)g(writes)f(to)h(a)f (newly-created)g(\014le)h(that)g(can)g(b)r(e)g(read)f(b)n(y)291 2720 y(an)n(y)n(one)d(and)h(written)h(only)f(b)n(y)g(the)h(o)n(wner.)36 b(Once)27 b(the)h(\014le)g(exists,)p Black Black 291 2888 a Fo(\(open-file)39 b("some-file.txt")770 2988 y(\(file-options)f (append)j(write-only\)\))291 3155 y Fr(will)27 b(op)r(en)h(an)f(output) h(p)r(ort)g(that)g(app)r(ends)f(to)h(the)g(\014le.)415 3255 y(The)23 b Fo(append)e Fr(and)i Fo(nonblocking)18 b Fr(options)23 b(and)f(the)i(read/write)d(nature)i(of)g(the)g(p)r(ort) 291 3355 y(can)g(b)r(e)h(read)f(using)i Fo(i/o-flags)p Fr(.)32 b(The)24 b Fo(append)d Fr(and)j Fo(nonblocking)19 b Fr(options)k(can)h(b)r(e)g(set)291 3454 y(using)k Fo(set-i/o-flags!)p Fr(.)415 3555 y(T)-7 b(o)27 b(k)n(eep)f(p)r(ort)h(op)r(erations)e(from) i(blo)r(c)n(king)f(the)h(Sc)n(heme)g(48)f(pro)r(cess,)g(output)h(p)r (orts)291 3654 y(are)21 b(set)h(to)g(b)r(e)h(non)n(blo)r(c)n(king)e(at) h(the)h(time)g(of)f(creation)f(\(input)j(p)r(orts)e(are)f(managed)g (using)291 3754 y Fo(select\(\))p Fr(\).)54 b(Y)-7 b(ou)35 b(can)f(use)g Fo(set-i/o-flags!)52 b Fr(to)34 b(mak)n(e)g(an)g(output)h (p)r(ort)g(blo)r(c)n(king,)291 3853 y(for)e(example)g(just)i(b)r(efore) e(a)g(fork,)i(but)f(care)f(should)h(b)r(e)g(exercised.)54 b(The)34 b(Sc)n(heme)g(48)291 3953 y(run)n(time)27 b(co)r(de)h(ma)n(y)e (get)i(confused)f(if)h(an)g(I/O)e(op)r(eration)h(blo)r(c)n(ks.)p Black 307 4104 a Fn(\017)p Black 41 w Fo(\(set-file-creatio)o(n-)o(mas) o(k!)35 b Fq(\014le-mo)l(de)6 b Fo(\))291 4255 y Fr(Sets)29 b(the)h(\014le)f(creation)g(mask)f(to)i(b)r(e)f Fq(\014le-mo)l(de)6 b Fr(.)43 b(Bits)30 b(set)f(in)h Fq(\014le-mo)l(de)36 b Fr(are)28 b(cleared)h(in)291 4354 y(the)f(mo)r(des)f(of)h(an)n(y)e (\014les)i(or)f(directories)f(created)h(b)n(y)g(the)h(curren)n(t)f(pro) r(cess.)p Black 307 4505 a Fn(\017)p Black 41 w Fo(\(link)40 b Fq(existing)h(new)9 b Fo(\))291 4656 y Fr(Both)34 b Fq(existing)41 b Fr(and)34 b Fq(new)44 b Fr(m)n(ust)34 b(b)r(e)h Fq(os-string-thing)41 b Fr(argumen)n(ts.)56 b Fo(Link)33 b Fr(mak)n(es)g(path)291 4756 y Fq(new)k Fr(b)r(e)28 b(a)g(new)g(link)g(to)g(the)h(\014le)f(p)r(oin)n(ted)g(to)g (b)n(y)g(path)g Fq(existing)7 b Fr(.)39 b(The)28 b(t)n(w)n(o)g(paths)g (m)n(ust)291 4855 y(b)r(e)g(in)f(the)h(same)f(\014le)h(system.)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(make-directory)36 b Fq(p)l(ath)42 b(\014le-mo)l(de)6 b Fo(\))p Black 1660 5255 a Fr(137)p Black eop end %%Page: 138 146 TeXDict begin 138 145 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(make-fifo)37 b Fq(p)l(ath)42 b(\014le-mo)l(de)6 b Fo(\))739 690 y Fr(These)32 b(t)n(w)n(o)g(pro)r(cedures)f(mak)n(e)h(new)g(directories)f (and)i(\014fo)f(\014les.)52 b(In)33 b(b)r(oth)f(cases,)h Fq(p)l(ath)739 790 y Fr(m)n(ust)28 b(b)r(e)g(a)f Fq(os-string-thing)35 b Fr(argumen)n(t.)p Black 755 957 a Fn(\017)p Black 42 w Fo(\(unlink)j Fq(p)l(ath)6 b Fo(\))p Black 755 1056 a Fn(\017)p Black 42 w Fo(\(remove-directo)o(ry)35 b Fq(p)l(ath)6 b Fo(\))p Black 755 1156 a Fn(\017)p Black 42 w Fo(\(rename)38 b Fq(old-p)l(ath)43 b(new-p)l(ath)6 b Fo(\))739 1323 y Fq(Path)h Fr(,)40 b Fq(old-p)l(ath)46 b Fr(and)37 b Fq(new-p)l(ath)44 b Fr(m)n(ust)38 b(all)f(b)r(e)h Fq(os-string-thing)45 b Fr(argumen)n(ts.)66 b Fo(Unlink)739 1423 y Fr(remo)n(v)n(es)28 b(the)j(link)g(indicated)f(b)n(y)i Fq(p)l(ath)6 b Fr(.)46 b Fo(Remove-directory)24 b Fr(remo)n(v)n(es)k (the)j(indicated)739 1522 y(\(empt)n(y\))c(directory)-7 b(.)35 b Fo(Rename)24 b Fr(mo)n(v)n(es)g(the)j(\014le)f(p)r(oin)n(ted)g (to)g(b)n(y)h Fq(old-p)l(ath)34 b Fr(to)26 b(the)h(lo)r(cation)739 1622 y(p)r(oin)n(ted)j(to)h(b)n(y)g Fq(new-p)l(ath)37 b Fr(\(the)31 b(t)n(w)n(o)e(paths)i(m)n(ust)f(b)r(e)h(in)f(the)h(same)f (\014le)g(system\).)45 b(An)n(y)739 1722 y(other)27 b(links)g(to)h(the) g(\014le)g(remain)f(unc)n(hanged.)p Black 755 1889 a Fn(\017)p Black 42 w Fo(\(accessible?)45 b Fq(p)l(ath)d(ac)l(c)l (ess-mo)l(de)g(.)50 b(mor)l(e-mo)l(des)7 b Fo(\))42 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 1988 a Fn(\017)p Black 42 w Fo(\(access-mode)36 b Fq(mo)l(de-name)6 b Fo(\))28 b Fn(!)g Fq(ac)l(c)l(ess-mo)l(de)930 b Fr(syn)n(tax)739 2155 y Fo(Accessible?)39 b Fr(returns)29 b(true)h(if)36 b Fq(p)l(ath)h Fr(\(whic)n(h)30 b(m)n(ust)g(b)r(e)g(a)g Fq(os-string-thing)37 b Fr(argumen)n(t\))739 2255 y(is)g(a)f(\014le)i (that)f(can)g(b)r(e)g(accessed)f(in)h(the)h(listed)f(mo)r(de.)66 b(If)37 b(more)f(than)i(one)e(mo)r(de)h(is)739 2354 y(sp)r(eci\014ed)29 b Fo(accessible?)35 b Fr(returns)27 b(true)i(if)g(all)f(of)g(the)h(sp)r (eci\014ed)g(mo)r(des)f(are)f(p)r(ermitted.)739 2454 y(The)h Fq(mo)l(de-name)6 b Fr(s)28 b(are:)36 b Fo(read)p Fr(,)26 b Fo(write)p Fr(,)f Fo(execute)p Fr(,)g Fo(exists)p Fr(.)739 2718 y Fe(9.6.4)112 b(File)39 b(information)p Black 755 2876 a Fn(\017)p Black 42 w Fo(\(get-file-info)c Fq(p)l(ath)6 b Fo(\))42 b Fn(!)g Fq(\014le-info)p Black 755 2976 a Fn(\017)p Black 42 w Fo(\(get-file/link-)o(in)o(fo)35 b Fq(name)6 b Fo(\))42 b Fn(!)f Fq(\014le-info)p Black 755 3075 a Fn(\017)p Black 42 w Fo(\(get-port-info)35 b Fq(fd-p)l(ort)8 b Fo(\))42 b Fn(!)g Fq(\014le-info)739 3242 y Fo(Get-file-info)20 b Fr(and)26 b Fo(get-file/link-inf)o(o)20 b Fr(b)r(oth)26 b(return)f(a)h(\014le)g(info)g(record)e(for)i(the)739 3342 y(\014le)g(named)g(b)n(y)g Fq(p)l(ath)7 b Fr(,)26 b(whic)n(h)g(m)n(ust)h(b)r(e)f(a)g Fq(os-string-thing)33 b Fr(argumen)n(t.)j Fo(Get-file-info)739 3441 y Fr(follo)n(ws)g(sym)n (b)r(olic)h(links)g(while)h Fo(get-file/link-in)o(fo)31 b Fr(do)r(es)37 b(not.)67 b Fo(Get-port-info)739 3541 y Fr(returns)22 b(a)h(\014le)g(info)g(record)f(for)g(the)i(\014le)f (whic)n(h)g Fq(p)l(ort)31 b Fr(reads)22 b(from)h(or)f(writes)g(to.)36 b(An)23 b(error)739 3641 y(is)k(raised)g(if)34 b Fq(fd-p)l(ort)j Fr(do)r(es)27 b(not)h(read)e(from)i(or)e(write)i(to)f(a)g(\014le)h (descriptor.)p Black 755 3808 a Fn(\017)p Black 42 w Fo(\(file-info?)45 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 3907 a Fn(\017)p Black 42 w Fo(\(file-info-name)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)g Fq(os-string)739 4074 y Fo(File-info?)49 b Fr(is)33 b(a)g(predicate)f(for)h(\014le-info) g(records.)52 b Fo(File-info-name)27 b Fr(is)33 b(the)g(name)739 4174 y(whic)n(h)18 b(w)n(as)g(used)g(to)g(get)g Fo(file-info)p Fr(,)f(either)h(as)g(passed)f(to)i Fo(get-file-info)13 b Fr(or)k Fo(get-file/link-inf)o(o)p Fr(,)739 4274 y(or)27 b(used)g(to)h(op)r(en)f(the)h(p)r(ort)g(passed)e(to)i Fo(get-port-info)p Fr(.)p Black 755 4441 a Fn(\017)p Black 42 w Fo(\(file-info-type)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)g Fq(\014le-typ)l(e)p Black 755 4540 a Fn(\017)p Black 42 w Fo(\(file-type?)j Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 4640 a Fn(\017)p Black 42 w Fo(\(file-type-name)35 b Fq(\014le-typ)l(e)6 b Fo(\))41 b Fn(!)h Fq(symb)l(ol)p Black 755 4740 a Fn(\017)p Black 42 w Fo(\(file-type)37 b Fq(typ)l(e)6 b Fo(\))28 b Fn(!)f Fq(\014le-typ)l(e)1437 b Fr(syn)n(tax)739 4907 y Fo(File-info-type)17 b Fr(returns)22 b(the)h(t)n(yp)r(e)f(of)h(the)g (\014le,)h(as)e(a)g(\014le-t)n(yp)r(e)g(ob)5 b(ject)23 b(File)f(t)n(yp)r(es)h(ma)n(y)739 5006 y(b)r(e)28 b(compared)e(using)j Fo(eq?)p Fr(.)35 b(The)28 b(v)-5 b(alid)28 b(\014le)g(t)n(yp)r(es)f (are:)p Black 2109 5255 a(138)p Black eop end %%Page: 139 147 TeXDict begin 139 146 bop 0 TeXcolorgray Black Black Black Black Black 1374 510 a Fo(regular)1374 609 y(directory)1374 709 y(character-device)1374 809 y(block-device)1374 908 y(fifo)1374 1008 y(symbolic-link)1374 1108 y(socket)1374 1207 y(other)291 1395 y(Symbolic-link)22 b Fr(and)27 b Fo(socket)e Fr(are)i(not)h(required)e(b)n(y)i(POSIX.)p Black 307 1551 a Fn(\017)p Black 41 w Fo(\(file-info-device)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)p Black 307 1650 a Fn(\017)p Black 41 w Fo(\(file-info-inode)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)g Fq(inte)l(ger)291 1806 y Fr(The)27 b(device)h(and)f(ino)r(de)h(n)n(um)n(b)r(ers)f (uniquely)h(determine)f(a)g(\014le.)p Black 307 1962 a Fn(\017)p Black 41 w Fo(\(file-info-link-c)o(ou)o(nt)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)g Fq(inte)l(ger)p Black 307 2062 a Fn(\017)p Black 41 w Fo(\(file-info-size)36 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)291 2218 y Fr(These)27 b(return)g(the)i(n)n(um)n(b)r(er)e(of)h(links)f(to)h (a)f(\014le)h(and)g(the)g(\014le)g(size)g(in)g(b)n(ytes.)37 b(The)28 b(size)f(is)291 2318 y(only)g(meaningful)g(for)g(regular)f (\014les.)p Black 307 2474 a Fn(\017)p Black 41 w Fo(\(file-info-owner) 35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)g Fq(user-id)p Black 307 2573 a Fn(\017)p Black 41 w Fo(\(file-info-group)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)g Fq(gr)l(oup-id)p Black 307 2673 a Fn(\017)p Black 41 w Fo(\(file-info-mode)36 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)f Fq(\014le-mo)l(de)291 2829 y Fr(These)27 b(return)g(the)h(o)n(wner,)e(group,)h(and)g(access)g (mo)r(de)g(of)h(a)f(\014le.)p Black 307 2985 a Fn(\017)p Black 41 w Fo(\(file-info-last-a)o(cc)o(ess)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)f Fq(time)p Black 307 3084 a Fn(\017)p Black 41 w Fo(\(file-info-last-m)o(od)o(ifi)o(ca)o(ti)o(on)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)g Fq(time)p Black 307 3184 a Fn(\017)p Black 41 w Fo(\(file-info-last-s)o(ta)o(tus)o(-c)o (ha)o(nge)35 b Fq(\014le-info)5 b Fo(\))42 b Fn(!)f Fq(time)291 3340 y Fr(These)21 b(return)g(the)g(time)h(the)g(\014le)g(w)n(as)e (last)h(read,)h(mo)r(di\014ed,)h(or)d(had)i(its)f(status)g(mo)r (di\014ed.)291 3584 y Fe(9.6.5)112 b(File)38 b(mo)s(des)291 3741 y Fr(A)28 b(\014le)f(mo)r(de)h(is)f(a)h(b)r(o)n(xed)f(in)n(teger)f (represen)n(ting)h(a)g(\014le)g(protection)g(mask.)p Black 307 3897 a Fn(\017)p Black 41 w Fo(\(file-mode)38 b(permission-name)d(...\))26 b Fn(!)i Fq(\014le-mo)l(de)719 b Fr(syn)n(tax)p Black 307 3997 a Fn(\017)p Black 41 w Fo(\(file-mode?)46 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an) p Black 307 4097 a Fn(\017)p Black 41 w Fo(\(file-mode+)37 b Fq(\014le-mo)l(de)42 b(.)13 b(.)g(.)g Fo(\))51 b Fn(!)42 b Fq(\014le-mo)l(de)p Black 307 4196 a Fn(\017)p Black 41 w Fo(\(file-mode-)37 b Fq(\014le-mo)l(de0)43 b(\014le-mo)l(de1)11 b Fo(\))42 b Fn(!)f Fq(\014le-mo)l(de)291 4352 y Fo(File-mode)22 b Fr(is)27 b(syn)n(tax)e(for)h(creating)f(\014le)i(mo)r(des.)36 b(The)27 b(mo)r(de-names)e(are)h(listed)g(b)r(elo)n(w.)291 4452 y Fo(File-mode?)59 b Fr(is)36 b(a)h(predicate)f(for)f(\014le)i(mo) r(des.)64 b Fo(File-mode+)32 b Fr(returns)k(a)g(mo)r(de)h(that)291 4551 y(con)n(tains)29 b(all)i(of)f(p)r(ermissions)g(of)h(its)f(argumen) n(ts.)45 b Fo(File-mode-)27 b Fr(returns)j(a)g(mo)r(de)h(that)291 4651 y(has)c(all)g(of)g(the)h(p)r(ermissions)f(of)34 b Fq(\014le-mo)l(de0)40 b Fr(that)28 b(are)f(not)g(in)h Fq(\014le-mo)l(de1)11 b Fr(.)p Black 307 4807 a Fn(\017)p Black 41 w Fo(\(file-mode=?)45 b Fq(\014le-mo)l(de0)e(\014le-mo)l(de1) 11 b Fo(\))42 b Fn(!)f Fq(b)l(o)l(ole)l(an)p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(file-mode<=?)k Fq(\014le-mo)l(de0)d (\014le-mo)l(de1)11 b Fo(\))43 b Fn(!)e Fq(b)l(o)l(ole)l(an)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(file-mode>=?)k Fq(\014le-mo)l(de0)d(\014le-mo)l(de1)11 b Fo(\))43 b Fn(!)e Fq(b)l(o)l(ole)l(an)p Black 1660 5255 a Fr(139)p Black eop end %%Page: 140 148 TeXDict begin 140 147 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(File-mode=?)30 b Fr(returns)18 b(true)i(if)g(the)g (t)n(w)n(o)f(mo)r(des)g(are)g(exactly)g(the)g(same.)34 b Fo(File-mode<=?)739 623 y Fr(returns)18 b(true)g(if)25 b Fq(\014le-mo)l(de0)31 b Fr(has)18 b(a)g(subset)g(of)g(the)h(p)r (ermissions)f(of)24 b Fq(\014le-mo)l(de1)11 b Fr(.)35 b Fo(File-mode>=?)739 722 y Fr(is)27 b Fo(file-mode<=?)32 b Fr(with)c(the)g(argumen)n(ts)f(rev)n(ersed.)p Black 755 875 a Fn(\017)p Black 42 w Fo(\(file-mode->int)o(eg)o(er)35 b Fq(\014le-mo)l(de)6 b Fo(\))42 b Fn(!)g Fq(inte)l(ger)p Black 755 975 a Fn(\017)p Black 42 w Fo(\(integer->file-)o(mo)o(de)35 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)h Fq(\014le-mo)l(de)739 1128 y Fo(Integer->file-mo)o(de)36 b Fr(and)43 b Fo(file-mode->integ)o (er)36 b Fr(translate)42 b(\014le)h(mo)r(des)g(to)f(and)739 1227 y(from)e(the)h(classic)f(Unix)h(\014le)g(mo)r(de)g(masks.)75 b(These)41 b(ma)n(y)f(not)g(b)r(e)h(the)g(masks)f(used)739 1327 y(b)n(y)27 b(the)h(underlying)f(OS.)p Black Black 1074 1510 a(P)n(ermission)e(name)100 b(Bit)27 b(mask)1074 1610 y Fo(set-uid)405 b(#o4000)164 b Fr(set)28 b(user)f(id)h(when)g (executing)1074 1709 y Fo(set-gid)405 b(#o2000)164 b Fr(set)28 b(group)e(id)i(when)g(executing)1074 1809 y Fo(owner-read)273 b(#o0400)164 b Fr(read)27 b(b)n(y)g(o)n(wner)1074 1909 y Fo(owner-write)229 b(#o0200)164 b Fr(write)28 b(b)n(y)f(o)n(wner)1074 2008 y Fo(owner-exec)273 b(#o0100)164 b Fr(execute)28 b(\(or)f(searc)n(h\))f(b)n(y)h(o)n(wner)1074 2108 y Fo(group-read)273 b(#o0040)164 b Fr(read)27 b(b)n(y)g(group)1074 2208 y Fo(group-write)229 b(#o0020)164 b Fr(write)28 b(b)n(y)f(group)1074 2307 y Fo(group-exec)273 b(#o0010)164 b Fr(execute)28 b(\(or)f(searc)n(h\))f(b)n(y)h(group)1074 2407 y Fo(other-read)273 b(#o0004)164 b Fr(read)27 b(b)n(y)g(others) 1074 2506 y Fo(other-write)229 b(#o0002)164 b Fr(write)28 b(b)n(y)f(others)1074 2606 y Fo(other-exec)273 b(#o0001)164 b Fr(execute)28 b(\(or)f(searc)n(h\))f(b)n(y)h(others)p Black Black 1212 2802 a(Names)g(for)g(sets)h(of)f(p)r(ermissions)1212 2901 y Fo(owner)97 b(#o0700)h Fr(read,)26 b(write,)i(and)f(execute)h(b) n(y)f(o)n(wner)1212 3001 y Fo(group)97 b(#o0070)h Fr(read,)26 b(write,)i(and)f(execute)h(b)n(y)f(group)1212 3101 y Fo(other)97 b(#o0007)h Fr(read,)26 b(write,)i(and)f(execute)h(b)n(y)f (others)1212 3200 y Fo(read)141 b(#o0444)98 b Fr(read)26 b(b)n(y)i(an)n(y)n(one)1212 3300 y Fo(write)97 b(#o0222)h Fr(write)27 b(b)n(y)g(an)n(y)n(one)1212 3400 y Fo(exec)141 b(#o0111)98 b Fr(execute)27 b(b)n(y)g(an)n(y)n(one)1212 3499 y Fo(all)185 b(#o0777)98 b Fr(an)n(ything)27 b(b)n(y)g(an)n(y)n (one)739 3729 y Fe(9.6.6)112 b(Sym)m(b)s(olic)39 b(links)p Black 755 3883 a Fn(\017)p Black 42 w Fo(\(create-symboli)o(c-)o(lin)o (k)c Fq(p)l(ath1)43 b(p)l(ath2)11 b Fo(\))739 4036 y Fr(This)35 b(creates)e(a)i(sym)n(b)r(olic)f(link)h(at)g Fq(p)l(ath2)47 b Fr(that)35 b(con)n(tains)f Fq(p)l(ath1)12 b Fr(.)59 b Fq(Path1)47 b Fr(and)35 b Fq(p)l(ath2)739 4136 y Fr(m)n(ust)28 b(b)r(e)g Fq(os-string-thing)35 b Fr(argumen)n(ts.)p Black 755 4289 a Fn(\017)p Black 42 w Fo(\(read-symbolic-)o(li)o(nk)g Fq(p)l(ath)6 b Fo(\))42 b Fn(!)83 b Fq(os-string)739 4442 y Fr(This)18 b(returns)g(con)n(ten)n (ts)g(of)g(the)h(sym)n(b)r(olic)f(link)g(at)g Fq(p)l(ath)7 b Fr(.)34 b Fq(Path)26 b Fr(m)n(ust)18 b(b)r(e)h(an)f Fq(os-string-thing)739 4541 y Fr(argumen)n(t.)739 4822 y Fj(9.7)135 b(Time)45 b(and)g(Date)739 5006 y Fr(These)27 b(pro)r(cedures)g(are)f(in)i(structures)f Fo(posix-time)c Fr(and)28 b Fo(posix)p Fr(.)p Black 2109 5255 a(140)p Black eop end %%Page: 141 149 TeXDict begin 141 148 bop 0 TeXcolorgray Black Black Black 291 523 a Fe(9.7.1)112 b(Time)p Black 307 683 a Fn(\017)p Black 41 w Fo(\(make-time)38 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)g Fq(time)p Black 307 782 a Fn(\017)p Black 41 w Fo(\(current-time\))36 b Fn(!)41 b Fq(time)p Black 307 882 a Fn(\017)p Black 41 w Fo(\(time?)48 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 307 981 a Fn(\017)p Black 41 w Fo(\(time-seconds)36 b Fq(time)6 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)291 1153 y Fr(A)33 b Fo(time)e Fr(record)g(con)n(tains)h(an)g(in)n(teger)g(that) h(represen)n(ts)e(time)i(as)f(the)i(n)n(um)n(b)r(er)e(of)h(sec-)291 1252 y(ond)g(since)h(the)h(Unix)f(ep)r(o)r(c)n(h)g(\(00:00:00)e(GMT,)i (Jan)n(uary)e(1,)j(1970\).)55 b Fo(Make-time)30 b Fr(and)291 1352 y Fo(current-time)13 b Fr(return)18 b Fo(time)p Fr(s,)g(with)h Fo(make-time)p Fr('s)c(using)j(its)g(argumen)n(t)g (while)g Fo(current-time)p Fr('s)291 1452 y(has)f(the)i(curren)n(t)f (time.)34 b Fo(Time?)e Fr(is)18 b(a)g(predicate)g(that)g(recognizes)f Fo(time)p Fr(s)f(and)j Fo(time-seconds)291 1551 y Fr(returns)26 b(the)i(n)n(um)n(b)r(er)g(of)f(seconds)g Fq(time)34 b Fr(represen)n(ts.)p Black 307 1723 a Fn(\017)p Black 41 w Fo(\(time=?)47 b Fq(time)42 b(time)6 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 1822 a Fn(\017)p Black 41 w Fo(\(time?)47 b Fq(time)42 b(time)6 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 307 2121 a Fn(\017)p Black 41 w Fo(\(time>=?)47 b Fq(time)42 b(time)6 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)291 2293 y Fr(These)27 b(p)r(erform)g(v)-5 b(arious)26 b(comparison)g(op)r(erations)g(on)i(the)g Fo(time)p Fr(s.)p Black 307 2464 a Fn(\017)p Black 41 w Fo(\(time->string)36 b Fq(time)6 b Fo(\))42 b Fn(!)f Fq(string)291 2635 y Fo(Time->string)23 b Fr(returns)k(a)h(string)g (represen)n(tation)e(of)35 b Fq(time)g Fr(in)28 b(the)h(lo)r(cale's)e (v)n(ersion)g(of)291 2735 y(the)h(follo)n(wing)e(form.)p Black Black 291 2930 a Fo("Wed)42 b(Jun)g(30)h(21:49:08)d(1993)291 3030 y(")291 3301 y Fe(9.7.2)112 b(Date)291 3468 y Fr(A)22 b(date)f(is)h(a)f(time)h(sp)r(eci\014cation)f(relativ)n(e)g(to)g(a)g (sp)r(eci\014c)h(but)g(implicit)h(time)f(zone,)g(brok)n(en)291 3568 y(out)27 b(in)n(to)h(the)g(familar)e(y)n(ear-mon)n(th-da)n (y-hour-min)n(ute-second)d(format.)p Black 307 3739 a Fn(\017)p Black 41 w Fo(\(make-date)38 b Fq(se)l(c)l(ond)j(minute)g (hour)h(month-day)h(month)e(ye)l(ar)h(we)l(ek-day)h(ye)l(ar-day)g(dst)8 b Fo(\))41 b Fn(!)h Fq(date)p Black 307 3839 a Fn(\017)p Black 41 w Fo(\(date?)48 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 307 3938 a Fn(\017)p Black 41 w Fo(\(date-second)37 b Fq(date)6 b Fo(\))42 b Fn(!)f Fq(se)l(c)l(ond)p Black 307 4038 a Fn(\017)p Black 41 w Fo(\(date-minute)c Fq(date)6 b Fo(\))42 b Fn(!)f Fq(minute)p Black 307 4137 a Fn(\017)p Black 41 w Fo(\(date-hour)d Fq(date)6 b Fo(\))42 b Fn(!)f Fq(hour)p Black 307 4237 a Fn(\017)p Black 41 w Fo(\(date-month-day)36 b Fq(date)6 b Fo(\))41 b Fn(!)h Fq(month-day)p Black 307 4337 a Fn(\017)p Black 41 w Fo(\(date-month)37 b Fq(date)6 b Fo(\))42 b Fn(!)g Fq(month)p Black 307 4436 a Fn(\017)p Black 41 w Fo(\(date-year)c Fq(date)6 b Fo(\))42 b Fn(!)f Fq(ye)l(ar)p Black 307 4536 a Fn(\017)p Black 41 w Fo(\(date-week-day)36 b Fq(date)6 b Fo(\))42 b Fn(!)f Fq(we)l(ek-day)p Black 307 4636 a Fn(\017)p Black 41 w Fo(\(date-year-day)36 b Fq(date)6 b Fo(\))42 b Fn(!)f Fq(ye)l(ar-day)p Black 307 4735 a Fn(\017)p Black 41 w Fo(\(date-date-dst)36 b Fq(date)6 b Fo(\))42 b Fn(!)f Fq(dst)291 4907 y Fr(These)31 b(are)g(the)i(constructor,)f(predicate)f(and)h(corresp)r(onding)e (accessors)g(for)i(date)g(ob-)291 5006 y(jects.)37 b(The)27 b(meaning)g(of)h(the)g(v)-5 b(arious)26 b(\014eld)i(t)n(yp)r(es)g(are)e (as)h(follo)n(ws:)p Black 1660 5255 a(141)p Black eop end %%Page: 142 150 TeXDict begin 142 149 bop 0 TeXcolorgray Black Black Black Black Black 1066 510 a Fq(se)l(c)l(onds)222 b Fr(seconds)740 b(\(0{60\))1066 609 y Fq(minutes)204 b Fr(min)n(utes)730 b(\(0{59\))1066 709 y Fq(hour)325 b Fr(hours)814 b(\(0{23\))1066 809 y Fq(month-day)108 b Fr(da)n(y)26 b(of)i(mon)n(th)530 b(\(1{31\))1066 908 y Fq(mon)332 b Fr(mon)n(th)27 b(of)h(y)n(ear)505 b(\(0{11\))1066 1008 y Fq(ye)l(ar)338 b Fr(y)n(ear)860 b(since)27 b(1900)1066 1108 y Fq(we)l(ek-day)170 b Fr(da)n(y)26 b(of)i(w)n(eek)587 b(\(Sunda)n(y)27 b(=)g(0\))1066 1207 y Fq(ye)l(ar-day)184 b Fr(da)n(y)26 b(of)i(y)n(ear)609 b(\(0{365\))1066 1307 y Fq(dst)385 b Fr(is)27 b(summer)g(time)h(in)g (e\013ect?)101 b Fo(#t)p Fr(,)26 b Fo(#f)h Fr(or)g(unsp)r(eci\014c)p Black 755 1486 a Fn(\017)p Black 42 w Fo(\(date->string)36 b Fq(date)6 b Fo(\))42 b Fn(!)f Fq(string)739 1635 y Fr(returns)33 b(a)g(string)g(represen)n(tation)f(of)40 b Fq(date)h Fr(in)34 b(the)g(lo)r(cale's)f(v)n(ersion)f(of)h(the)h (follo)n(wing)739 1735 y(form:)p Black Black 739 1901 a Fo("Wed)42 b(Jun)g(30)h(21:49:08)d(1993)739 2000 y(")p Black 755 2166 a Fn(\017)p Black 42 w Fo(\(time->utc-date)35 b Fq(time)6 b Fo(\))41 b Fn(!)h Fq(date)p Black 755 2266 a Fn(\017)p Black 42 w Fo(\(time->local-da)o(te)35 b Fq(time)6 b Fo(\))41 b Fn(!)h Fq(date)739 2415 y Fr(These)24 b(con)n(v)n(ert)e(a)i(time)h(ob)5 b(ject)24 b(in)n(to)f(a)h(date)g(ob)5 b(ject;)25 b(the)g(\014rst)f(do)r(es)f(this)i(relativ)n(e)e(to)h(the) 739 2515 y(UTC)k(time)g(zone,)f(the)h(second)f(relativ)n(e)f(to)i(the)g (curren)n(t)f(timezone)g(setting.)p Black 755 2665 a Fn(\017)p Black 42 w Fo(\(date->time)36 b Fq(date)6 b Fo(\))42 b Fn(!)g Fq(time)739 2814 y Fr(This)29 b(con)n(v)n(erts)e(a)h (date)g(ob)5 b(ject)29 b(in)n(to)f(a)h(time)g(ob)5 b(ject)28 b(relativ)n(e)g(to)g(the)h(curren)n(t)f(timezone)739 2914 y(setting.)p Black 755 3063 a Fn(\017)p Black 42 w Fo(\(format-date)36 b Fq(string)41 b(date)6 b Fo(\))42 b Fn(!)g Fq(string)739 3212 y Fr(This)31 b(formats)g(a)f(date)h(in)n (to)g(a)g(string,)h(according)d(to)i(the)h(format)f(sp)r(eci\014cation) f(in)i(the)739 3312 y(\014rst)26 b(argumen)n(t.)36 b(The)27 b(format)f(sp)r(eci\014cation)g(is)g(according)f(to)i(the)g(sp)r (eci\014cation)f(of)h(the)739 3412 y(C)h Fo(strftime)c Fr(function:)789 3581 y Fo(\045a)99 b Fr(is)27 b(replaced)g(b)n(y)g (the)h(lo)r(cale's)f(abbreviated)f(w)n(eekda)n(y)g(name.)789 3681 y Fo(\045A)99 b Fr(is)27 b(replaced)g(b)n(y)g(the)h(lo)r(cale's)f (full)h(w)n(eekda)n(y)e(name.)789 3780 y Fo(\045b)99 b Fr(is)27 b(replaced)g(b)n(y)g(the)h(lo)r(cale's)f(abbreviated)f(mon)n (th)i(name.)789 3880 y Fo(\045B)99 b Fr(is)27 b(replaced)g(b)n(y)g(the) h(lo)r(cale's)f(full)h(mon)n(th)g(name.)789 3980 y Fo(\045c)99 b Fr(is)27 b(replaced)g(b)n(y)g(the)h(lo)r(cale's)f(appropriate)f(date) h(and)h(time)g(represen)n(tation.)789 4079 y Fo(\045C)99 b Fr(is)25 b(replaced)f(b)n(y)h(the)h(y)n(ear)e(divided)i(b)n(y)f(100)f (and)h(truncated)h(to)f(an)g(in)n(teger,)g(as)g(a)976 4179 y(decimal)i(n)n(um)n(b)r(er)g(\(00{99\).)789 4278 y Fo(\045d)99 b Fr(is)27 b(replaced)g(b)n(y)g(the)h(da)n(y)f(of)g(the)h (mon)n(th)g(as)f(a)g(decimal)g(n)n(um)n(b)r(er)h(\(01{31\).)789 4378 y Fo(\045D)99 b Fr(is)27 b(equiv)-5 b(alen)n(t)27 b(to)h(\\)p Fo(\045m/\045d/\045y)p Fr(".)789 4478 y Fo(\045e)99 b Fr(is)21 b(replaced)g(b)n(y)h(the)g(da)n(y)f(of)h(the)g(mon)n(th)g (as)f(a)h(decimal)f(n)n(um)n(b)r(er)h(\(1{31\);)g(a)g(single)976 4577 y(digit)27 b(is)h(preceded)f(b)n(y)g(a)g(space.)789 4677 y Fo(\045F)99 b Fr(is)27 b(equiv)-5 b(alen)n(t)27 b(to)h(\\)p Fo(\045Y-\045m-\045d)p Fr(")23 b(\(the)28 b(ISO)g(8601)e(date)h(format\).)789 4777 y Fo(\045g)99 b Fr(is)29 b(replaced)f(b)n(y)i(the)g(last)f(2)g(digits)g(of)g(the)h(w) n(eek-based)e(y)n(ear)g(\(see)i(b)r(elo)n(w\))f(as)g(a)976 4876 y(decimal)e(n)n(um)n(b)r(er)g(\(00{99\).)789 4976 y Fo(\045G)99 b Fr(is)37 b(replaced)g(b)n(y)g(the)h(w)n(eek-based)e(y)n (ear)g(\(see)i(b)r(elo)n(w\))f(as)g(a)g(decimal)h(n)n(um)n(b)r(er)976 5076 y(\(e.g.,)27 b(1997\).)p Black 2109 5255 a(142)p Black eop end %%Page: 143 151 TeXDict begin 143 150 bop 0 TeXcolorgray Black Black Black 340 523 a Fo(\045h)99 b Fr(is)28 b(equiv)-5 b(alen)n(t)27 b(to)h(\\)p Fo(\045b)p Fr(".)340 623 y Fo(\045H)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g(hour)f(\(24-hour)f(clo)r(c)n(k\))h (as)g(a)g(decimal)g(n)n(um)n(b)r(er)h(\(00{23\).)340 722 y Fo(\045I)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g(hour)f (\(12-hour)f(clo)r(c)n(k\))h(as)g(a)g(decimal)g(n)n(um)n(b)r(er)h (\(01{12\).)340 822 y Fo(\045j)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g (da)n(y)e(of)i(the)g(y)n(ear)e(as)h(a)g(decimal)h(n)n(um)n(b)r(er)f (\(001{366\).)340 922 y Fo(\045m)99 b Fr(is)28 b(replaced)e(b)n(y)i (the)g(mon)n(th)f(as)g(a)g(decimal)h(n)n(um)n(b)r(er)f(\(01{12\).)340 1021 y Fo(\045M)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g(min)n(ute)g (as)f(a)g(decimal)g(n)n(um)n(b)r(er)h(\(00{59\).)340 1121 y Fo(\045n)99 b Fr(is)28 b(replaced)e(b)n(y)i(a)f(new-line)g(c)n (haracter.)340 1220 y Fo(\045p)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g (lo)r(cale's)e(equiv)-5 b(alen)n(t)28 b(of)f(the)h(AM/PM)f (designations)g(asso-)527 1320 y(ciated)h(with)g(a)f(12-hour)f(clo)r(c) n(k.)340 1420 y Fo(\045r)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g(lo)r (cale's)e(12-hour)g(clo)r(c)n(k)h(time.)340 1519 y Fo(\045R)99 b Fr(is)28 b(equiv)-5 b(alen)n(t)27 b(to)h(\\)p Fo(\045H:\045M)p Fr(".)340 1619 y Fo(\045S)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g (second)f(as)g(a)g(decimal)g(n)n(um)n(b)r(er)h(\(00{60\).)340 1719 y Fo(\045t)99 b Fr(is)28 b(replaced)e(b)n(y)i(a)f(horizon)n (tal-tab)e(c)n(haracter.)340 1818 y Fo(\045T)99 b Fr(is)28 b(equiv)-5 b(alen)n(t)27 b(to)h(\\)p Fo(\045H:\045M:\045S)p Fr(")23 b(\(the)28 b(ISO)g(8601)d(time)j(format\).)340 1918 y Fo(\045u)99 b Fr(is)26 b(replaced)g(b)n(y)g(the)g(ISO)g(8601)f (w)n(eekda)n(y)f(as)i(a)g(decimal)g(n)n(um)n(b)r(er)g(\(1{7\),)g(where) 527 2017 y(Monda)n(y)h(is)g(1.)340 2117 y Fo(\045U)99 b Fr(is)24 b(replaced)g(b)n(y)g(the)h(w)n(eek)f(n)n(um)n(b)r(er)g(of)g (the)h(y)n(ear)e(\(the)i(\014rst)f(Sunda)n(y)g(as)g(the)g(\014rst)527 2217 y(da)n(y)j(of)h(w)n(eek)f(1\))g(as)g(a)g(decimal)h(n)n(um)n(b)r (er)f(\(00{53\).)340 2316 y Fo(\045V)99 b Fr(is)41 b(replaced)f(b)n(y)g (the)i(ISO)e(8601)f(w)n(eek)h(n)n(um)n(b)r(er)h(\(see)g(b)r(elo)n(w\))g (as)f(a)g(decimal)527 2416 y(n)n(um)n(b)r(er)28 b(\(01{53\).)340 2516 y Fo(\045w)99 b Fr(is)25 b(replaced)f(b)n(y)g(the)i(w)n(eekda)n(y) d(as)h(a)h(decimal)f(n)n(um)n(b)r(er)h(\(0{6\),)f(where)h(Sunda)n(y)f (is)527 2615 y(0.)340 2715 y Fo(\045W)99 b Fr(is)23 b(replaced)e(b)n(y) i(the)g(w)n(eek)e(n)n(um)n(b)r(er)i(of)f(the)h(y)n(ear)e(\(the)j (\014rst)e(Monda)n(y)f(as)h(the)h(\014rst)527 2814 y(da)n(y)k(of)h(w)n (eek)f(1\))g(as)g(a)g(decimal)h(n)n(um)n(b)r(er)f(\(00{53\).)340 2914 y Fo(\045x)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g(lo)r(cale's)e (appropriate)g(date)i(represen)n(tation.)340 3014 y Fo(\045X)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g(lo)r(cale's)e(appropriate)g(time) i(represen)n(tation.)340 3113 y Fo(\045y)99 b Fr(is)25 b(replaced)f(b)n(y)h(the)h(last)e(2)h(digits)g(of)g(the)g(y)n(ear)f(as) g(a)h(decimal)g(n)n(um)n(b)r(er)g(\(00{99\).)340 3213 y Fo(\045Y)99 b Fr(is)28 b(replaced)e(b)n(y)i(the)g(y)n(ear)e(as)h(a)g (decimal)g(n)n(um)n(b)r(er)h(\(e.g.,)f(1997\).)340 3313 y Fo(\045z)99 b Fr(is)37 b(replaced)f(b)n(y)g(the)h(o\013set)g(from)f (UTC)h(in)g(the)h(ISO)e(8601)f(format)h(\\)p Fo(-0430)p Fr(")527 3412 y(\(meaning)c(4)g(hours)g(30)g(min)n(utes)g(b)r(ehind)h (UTC,)g(w)n(est)f(of)h(Green)n(wic)n(h\),)g(or)e(b)n(y)527 3512 y(no)d(c)n(haracters)d(if)j(no)f(time)h(zone)f(is)h(determinable.) 340 3611 y Fo(\045Z)99 b Fr(is)37 b(replaced)e(b)n(y)h(the)h(lo)r (cale's)f(time)h(zone)f(name)g(or)f(abbreviation,)j(or)d(b)n(y)h(no)527 3711 y(c)n(haracters)25 b(if)k(no)e(time)h(zone)f(is)h(determinable.) 340 3811 y Fo(\045\045)99 b Fr(is)28 b(replaced)e(b)n(y)i Fo(\045)p Fr(.)291 4120 y Fj(9.8)135 b(I/O)291 4303 y Fr(These)27 b(pro)r(cedures)f(are)h(in)h(structures)e Fo(posix-i/o)e Fr(and)k Fo(posix)p Fr(.)p Black 307 4455 a Fn(\017)p Black 41 w Fo(\(open-pipe\))37 b Fn(!)42 b Fq(input-p)l(ort)f(+)g(output-p)l(ort)291 4607 y Fo(Open-pipe)27 b Fr(creates)j(a)h(new)h(pip)r(e)g(and)f(returns)f(the)i(t)n(w)n(o)f (ends)g(as)g(an)g(input)h(p)r(ort)f(and)291 4707 y(an)c(output)h(p)r (ort.)415 4807 y(A)22 b Fq(\014le)h(descriptor)g Fr(p)r(ort)e(\(or)g Fq(fd-p)l(ort)8 b Fr(\))22 b(is)f(a)g(p)r(ort)g(that)g(reads)f(to)h(or) g(writes)f(from)h(an)g(OS)291 4907 y(\014le)e(descriptor.)33 b(Fd-p)r(orts)19 b(are)f(returned)h(b)n(y)h Fo(open-input-file)p Fr(,)15 b Fo(open-output-file)p Fr(,)291 5006 y Fo(open-file)p Fr(,)24 b Fo(open-pipe)p Fr(,)g(and)j(other)g(pro)r(cedures.)p Black 1660 5255 a(143)p Black eop end %%Page: 144 152 TeXDict begin 144 151 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(fd-port?)46 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(port->fd)37 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)h Fq(inte)l(ger)g(or)g Fo(#f)739 747 y(Fd-port?)d Fr(returns)28 b(true)i(if)f(its)h(argumen)n (t)e(is)h(an)h(fd-p)r(ort.)42 b Fo(Port->fd)26 b Fr(returns)i(the)i (\014le)739 846 y(descriptor)c(asso)r(ciated)h(with)h(or)e Fo(#f)h Fr(if)35 b Fq(p)l(ort)h Fr(is)27 b(not)h(an)f(fd-p)r(ort.)p Black 755 970 a Fn(\017)p Black 42 w Fo(\(remap-file-des)o(cr)o(ipt)o (or)o(s)36 b Fq(fd-sp)l(e)l(c)42 b(.)13 b(.)g(.)g Fo(\))739 1094 y(Remap-file-descr)o(ip)o(tor)o(s)26 b Fr(reassigns)31 b(\014le)h(descriptors)f(to)i(p)r(orts.)51 b(The)32 b Fq(fd-sp)l(e)l(cs)40 b Fr(in-)739 1194 y(dicate)d(whic)n(h)h(p)r(ort)g (is)f(to)h(b)r(e)g(mapp)r(ed)g(to)g(eac)n(h)f(\014le)g(descriptor:)56 b(the)38 b(\014rst)g(gets)f(\014le)739 1293 y(descriptor)c Fo(0)p Fr(,)j(the)e(second)g(gets)g Fo(1)p Fr(,)h(and)g(so)e(forth.)57 b(A)35 b Fq(fd-sp)l(e)l(c)40 b Fr(is)34 b(either)g(a)g(p)r(ort)g(that) 739 1393 y(reads)26 b(from)h(or)f(writes)h(to)g(a)g(\014le)h (descriptor,)e(or)g Fo(#f)p Fr(,)h(with)h Fo(#f)e Fr(indicating)h(that) h(the)g(cor-)739 1493 y(resp)r(onding)34 b(\014le)g(descriptor)g(is)g (not)h(used.)57 b(An)n(y)35 b(op)r(en)f(p)r(orts)h(not)f(listed)h(are)e (mark)n(ed)739 1592 y(`close-on-exec'.)i(The)27 b(same)g(p)r(ort)h(ma)n (y)f(b)r(e)h(mo)n(v)n(ed)e(to)i(m)n(ultiple)g(new)f(\014le)h (descriptors.)863 1692 y(F)-7 b(or)27 b(example,)p Black Black 739 1833 a Fo(\(remap-file-desc)o(ri)o(pto)o(rs)37 b(\(current-output-)o(por)o(t\))1785 1932 y(#f)1785 2032 y(\(current-input-p)o(ort)o(\)\))739 2172 y Fr(mo)n(v)n(es)24 b(the)h(curren)n(t)f(output)i(p)r(ort)f(to)g(\014le)g(descriptor)f Fo(0)h Fr(and)g(the)g(curren)n(t)g(input)g(p)r(ort)g(to)739 2272 y(\014le)j(descriptor)e Fo(2)p Fr(.)p Black 755 2396 a Fn(\017)p Black 42 w Fo(\(dup)39 b Fq(fd-p)l(ort)8 b Fo(\))42 b Fn(!)g Fq(fd-p)l(ort)p Black 755 2496 a Fn(\017)p Black 42 w Fo(\(dup-switching-)o(mo)o(de)35 b Fq(fd-p)l(ort)8 b Fo(\))42 b Fn(!)f Fq(fd-p)l(ort)p Black 755 2595 a Fn(\017)p Black 42 w Fo(\(dup2)e Fq(fd-p)l(ort)j (\014le-descriptor)9 b Fo(\))43 b Fn(!)e Fq(fd-p)l(ort)739 2719 y Fr(These)32 b(c)n(hange)g Fq(fd-p)l(ort)8 b Fr('s)33 b(\014le)g(descriptor)f(and)g(return)g(a)h(new)f(p)r(ort)h(that)g(uses) f Fq(p)l(orts)7 b Fr('s)739 2819 y(old)26 b(\014le)h(descriptor.)35 b Fo(Dup)26 b Fr(uses)g(the)h(lo)n(w)n(est)f(un)n(used)g(\014le)h (descriptor)e(and)i Fo(dup2)e Fr(uses)h(the)739 2919 y(one)21 b(pro)n(vided.)34 b Fo(Dup-switching-mo)o(de)15 b Fr(is)22 b(the)g(same)f(as)g Fo(dup)f Fr(except)i(that)g(the)g (returned)739 3018 y(p)r(ort)j(is)h(an)g(input)g(p)r(ort)g(if)g(the)g (argumen)n(t)f(w)n(as)g(an)g(output)i(p)r(ort)e(and)h(vice)f(v)n(ersa.) 35 b(If)26 b(an)n(y)739 3118 y(existing)h(p)r(ort)g(uses)h(the)g (\014le)f(descriptor)g(passed)g(to)g Fo(dup2)p Fr(,)f(that)i(p)r(ort)f (is)h(closed.)p Black 755 3242 a Fn(\017)p Black 42 w Fo(\(close-all-but)35 b Fq(p)l(ort)42 b(.)13 b(.)g(.)g Fo(\))739 3366 y(Close-all-but)21 b Fr(closes)26 b(all)g(\014le)h (descriptors)e(whose)h(asso)r(ciated)f(p)r(orts)i(are)e(not)i(passed) 739 3465 y(to)g(it)h(as)f(argumen)n(ts.)p Black 755 3589 a Fn(\017)p Black 42 w Fo(\(close-on-exec?)43 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 755 3689 a Fn(\017)p Black 42 w Fo(\(set-close-on-e)o(xe)o(c?!)35 b Fq(p)l(ort)41 b(b)l(o)l(ole)l(an)6 b Fo(\))739 3813 y(Close-on-exec?)55 b Fr(returns)34 b(true)i(if)42 b Fo(port)34 b Fr(will)i(b)r(e)g(closed)f(when)g(a)g(new)h(program)d(is) 739 3913 y(exec'ed.)j Fo(Set-close-on-exec)o(?!)30 b Fr(sets)e Fo(port)p Fr('s)e(close-on-exec)f(\015ag.)p Black 755 4037 a Fn(\017)p Black 42 w Fo(\(i/o-flags)37 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)h Fq(\014le-options)p Black 755 4136 a Fn(\017)p Black 42 w Fo(\(set-i/o-flags!)35 b Fq(p)l(ort)42 b(\014le-options)7 b Fo(\))739 4260 y Fr(These)22 b(t)n(w)n(o)f(pro)r(cedures)g(read)h(and)g(write)g(v)-5 b(arious)21 b(options)h(for)f Fo(port)p Fr(.)34 b(The)22 b(options)g(that)739 4360 y(can)c(b)r(e)h(read)e(are)h Fo(append)p Fr(,)f Fo(nonblocking)p Fr(,)f Fo(read-only)p Fr(,)h Fo(write-only)p Fr(,)f(and)i Fo(read/write)p Fr(.)739 4459 y(Only)27 b(the)h Fo(append)d Fr(and)j Fo(nonblocking)23 b Fr(can)k(b)r(e)h(written.)p Black 755 4583 a Fn(\017)p Black 42 w Fo(\(port-is-a-term)o(in)o(al?)43 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)p Black 755 4683 a Fn(\017)p Black 42 w Fo(\(port-terminal-)o(na)o(me)35 b Fq(p)l(ort)8 b Fo(\))41 b Fn(!)h Fq(string)739 4807 y Fo(Port-is-a-termin)o(al)o(?)59 b Fr(returns)37 b(true)g(if)44 b Fq(p)l(ort)h Fr(has)37 b(an)g(underlying)f(\014le)h(descriptor)739 4907 y(that)23 b(is)h(asso)r(ciated)e(with)h(a)g(terminal.)36 b(F)-7 b(or)22 b(suc)n(h)h(p)r(orts)g Fo(port-terminal-na)o(me)17 b Fr(returns)739 5006 y(the)28 b(name)f(of)h(the)g(terminal,)f(for)g (all)h(others)e(it)i(returns)f Fo(#f)p Fr(.)p Black 2109 5255 a(144)p Black eop end %%Page: 145 153 TeXDict begin 145 152 bop 0 TeXcolorgray Black Black Black 291 523 a Fj(9.9)135 b(Regular)46 b(expressions)291 708 y Fr(The)d(pro)r(cedures)f(in)h(this)h(section)e(pro)n(vide)g (access)g(to)h(POSIX)g(regular)e(expression)291 808 y(matc)n(hing.)62 b(The)37 b(regular)d(expression)h(syn)n(tax)g(and)i(seman)n(tics)e(are) g(far)h(to)r(o)g(complex)291 908 y(to)26 b(b)r(e)h(describ)r(ed)g (here.)36 b(Due)27 b(to)f(limitations)h(in)g(the)g(underlying)f (facilit)n(y)-7 b(,)27 b(only)f(Latin-1)291 1007 y(strings)d(are)h (guaran)n(teed)f(to)i(w)n(ork)e(here|on)h(some)g(platforms,)h(only)f (ASCI)r(I)i(ma)n(y)e(func-)291 1107 y(tion)32 b(correctly)-7 b(.)51 b(Moreo)n(v)n(er,)31 b(b)r(ecause)i(the)g(C)g(in)n(terface)f (uses)g(zero)g(b)n(ytes)g(for)g(marking)291 1207 y(the)f(ends)f(of)h (strings,)g(patterns)f(and)h(strings)f(that)h(con)n(tain)f(zero)f(b)n (ytes)i(will)g(not)f(w)n(ork)291 1306 y(correctly)-7 b(.)415 1408 y(These)27 b(pro)r(cedures)g(are)f(in)i(structures)f Fo(posix-regexps)22 b Fr(and)28 b Fo(posix)p Fr(.)415 1509 y(An)k(abstract)d(data)i(t)n(yp)r(e)g(for)g(creating)e(POSIX)i (regular)e(expressions)g(is)i(describ)r(ed)291 1609 y(in)c(section)p 0 0 1 TeXcolorrgb 28 w(5.21)p Black(.)p Black 307 1764 a Fn(\017)p Black 41 w Fo(\(make-regexp)37 b Fq(string)k(.)51 b(r)l(e)l(gexp-options)7 b Fo(\))41 b Fn(!)h Fq(r)l(e)l(gexp)p Black 307 1863 a Fn(\017)p Black 41 w Fo(\(regexp-option)36 b Fq(option-name)6 b Fo(\))28 b Fn(!)g Fq(r)l(e)l(gexp-option)757 b Fr(syn)n(tax)291 2019 y Fo(Make-regexp)21 b Fr(mak)n(es)26 b(a)g(new)g(regular)e(expression,)i(using)h Fq(string)33 b Fr(as)26 b(the)h(pattern.)36 b(The)291 2118 y(p)r(ossible)27 b(option)g(names)g(are:)p Black Black 945 2305 a Fo(extended)227 b Fr(use)28 b(the)g(extended)f(patterns)945 2404 y Fo(ignore-case)95 b Fr(ignore)26 b(case)h(when)h(matc)n(hing)945 2504 y Fo(submatches)139 b Fr(rep)r(ort)27 b(submatc)n(hes)945 2604 y Fo(newline)271 b Fr(treat)27 b(newlines)h(sp)r(ecially)415 2790 y(The)g(regular)e(expression)g(is)i(not)g(compiled)g(un)n(til)g (it)g(matc)n(hed)g(against)f(a)g(string,)h(so)291 2890 y(an)n(y)e(errors)g(in)i(the)g(pattern)f(string)g(will)h(not)f(b)r(e)h (rep)r(orted)f(un)n(til)h(that)g(p)r(oin)n(t.)p Black 307 3045 a Fn(\017)p Black 41 w Fo(\(regexp?)47 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)291 3200 y Fr(This)27 b(is)h(a)f(predicate)g(for)g(regular)f(expressions.)p Black 307 3355 a Fn(\017)p Black 41 w Fo(\(regexp-match)36 b Fq(r)l(e)l(gexp)42 b(string)f(start)g(submatches?)51 b(starts-line?)f(ends-line?)10 b Fo(\))556 3455 y Fn(!)44 b Fq(b)l(o)l(ole)l(an)30 b(or)h(list)e(of)i(matches)p Black 307 3554 a Fn(\017)p Black 41 w Fo(\(match?)47 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 307 3654 a Fn(\017)p Black 41 w Fo(\(match-start)c Fq(match)6 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)p Black 307 3753 a Fn(\017)p Black 41 w Fo(\(match-end)d Fq(match)6 b Fo(\))42 b Fn(!)f Fq(inte)l(ger)291 3908 y Fo(Regexp-match)23 b Fr(matc)n(hes)28 b(the)h(regular)e(expression)g(against)h(the)g(c)n (haracters)f(in)i Fq(string)7 b Fr(,)291 4008 y(starting)29 b(at)h(p)r(osition)f Fq(start)8 b Fr(.)44 b(If)30 b(the)h(string)e(do)r (es)h(not)g(matc)n(h)g(the)g(regular)e(expression,)291 4108 y Fo(regexp-match)18 b Fr(returns)24 b Fo(#f)p Fr(.)34 b(If)25 b(the)f(string)f(do)r(es)g(matc)n(h,)i(then)f(a)f(list)h(of)g (matc)n(h)g(records)291 4207 y(is)32 b(returned)g(if)39 b Fq(submatches?)62 b Fr(is)33 b(true,)g(or)f Fo(#t)f Fr(is)i(returned)f(if)h(it)f(is)h(not.)51 b(Eac)n(h)31 b(matc)n(h)291 4307 y(record)g(con)n(tains)h(the)i(index)f(of)g(the)g (c)n(haracter)e(at)i(the)g(b)r(eginning)g(of)g(the)g(matc)n(h)g(and)291 4407 y(one)f(more)h(than)g(the)h(index)f(of)g(the)h(c)n(haracter)d(at)i (the)h(end.)54 b(The)33 b(\014rst)g(matc)n(h)g(record)291 4506 y(giv)n(es)23 b(the)i(lo)r(cation)f(of)g(the)h(substring)f(that)g (matc)n(hed)h Fq(r)l(e)l(gexp)5 b Fr(.)36 b(If)25 b(the)g(pattern)f(in) h Fq(r)l(e)l(gexp)291 4606 y Fr(con)n(tained)32 b(submatc)n(hes,)j (then)e(the)h(results)f(of)g(these)h(are)e(returned)h(in)h(order,)f (with)h(a)291 4705 y(matc)n(h)h(records)e(rep)r(orting)i(submatc)n(hes) f(that)i(succeeded)f(and)g Fo(#f)g Fr(in)g(place)g(of)g(those)291 4805 y(that)27 b(did)h(not.)415 4907 y Fq(Starts-line?)65 b Fr(should)33 b(b)r(e)h(true)f(if)41 b Fq(string)g Fr(starts)32 b(at)i(the)f(b)r(eginning)h(of)f(a)g(line)h(and)291 5006 y Fq(ends-line?)48 b Fr(should)27 b(b)r(e)h(true)f(if)i(it)f(ends)f (one.)p Black 1660 5255 a(145)p Black eop end %%Page: 146 154 TeXDict begin 146 153 bop 0 TeXcolorgray Black Black Black 739 523 a Fj(9.10)135 b(Syslog)46 b(facilit)l(y)739 705 y Fr(The)26 b(pro)r(cedures)f(in)h(this)g(section)g(pro)n(vide)e (access)h(to)h(the)g(POSIX)g(syslog)e(facilit)n(y)-7 b(.)36 b(The)739 805 y(functionalit)n(y)24 b(is)g(in)g(a)g(structure)g (called)g Fo(posix-syslog)p Fr(.)30 b(The)25 b(Sc)n(heme)f(48)f(in)n (terface)g(to)739 904 y(the)g(syslog)f(facilit)n(y)g(di\013ers)h (signi\014can)n(tly)f(from)h(that)g(of)g(the)g(Unix)h(library)d (functionalit)n(y)739 1004 y(in)28 b(order)e(to)h(supp)r(ort)h(m)n (ultiple)g(sim)n(ultaneous)f(connections)g(to)g(the)h(syslog)e(facilit) n(y)-7 b(.)863 1103 y(Log)31 b(messages)e(carry)h(a)h(v)-5 b(ariet)n(y)31 b(of)g(parameters)f(b)r(eside)h(the)h(text)g(of)f(the)h (message)739 1203 y(itself,)24 b(namely)e(a)g(set)g(of)h(options)f(con) n(trolling)f(the)h(output)h(format)f(and)h(destination,)g(the)739 1303 y(facilit)n(y)18 b(iden)n(tifying)h(the)g(class)e(of)i(programs)d (the)j(message)e(is)h(coming)g(from,)i(an)e(iden)n(ti\014er)739 1402 y(sp)r(ecifying)24 b(the)g(concrete)e(program,)h(and)g(the)h(lev)n (el)f(iden)n(tifying)h(the)g(imp)r(ortance)f(of)h(the)739 1502 y(message.)60 b(Moreo)n(v)n(er,)35 b(a)h(log)f(mask)g(can)h(prev)n (en)n(t)f(messages)f(at)i(certain)f(lev)n(els)g(to)h(b)r(e)739 1602 y(actually)27 b(sen)n(t)g(to)h(the)g(syslog)e(daemon.)739 1833 y Fe(Log)38 b(options)739 1986 y Fr(A)31 b(log)f(option)g(sp)r (eci\014es)h(details)f(of)h(the)g(I/O)f(b)r(eha)n(vior)f(of)i(the)g (syslog)e(facilit)n(y)-7 b(.)46 b(A)31 b(sys-)739 2086 y(log)g(option)h(is)f(an)h(elemen)n(t)g(of)g(a)g(\014nite)g(t)n(yp)r(e) g(\(see)g(Section)p 0 0 1 TeXcolorrgb 32 w(5.10)p Black(\))f (constructed)g(b)n(y)h(the)739 2186 y Fo(syslog-option)20 b Fr(macro.)35 b(The)26 b(syslog)e(facilit)n(y)h(w)n(orks)f(with)i (sets)f(of)h(options)f(whic)n(h)g(are)739 2285 y(represen)n(ted)h(as)h (en)n(um)h(sets)f(\(see)h(Section)p 0 0 1 TeXcolorrgb 27 w(5.11)p Black(\).)p Black 755 2430 a Fn(\017)p Black 42 w Fo(\(syslog-option)35 b Fq(option-name)6 b Fo(\))29 b Fn(!)e Fq(option)1009 b Fr(syn)n(tax)p Black 755 2530 a Fn(\017)p Black 42 w Fo(\(syslog-option?)43 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)p Black 755 2630 a Fn(\017)p Black 42 w Fo(\(make-syslog-op)o(ti)o(ons)35 b Fq(list)8 b Fo(\))41 b Fn(!)g Fq(options)p Black 755 2729 a Fn(\017)p Black 42 w Fo(\(syslog-options)35 b Fq(option-name)48 b Fo(...\))27 b Fn(!)g Fq(options)759 b Fr(syn)n(tax)p Black 755 2829 a Fn(\017)p Black 42 w Fo(\(syslog-options)o(?)44 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)739 2974 y Fo(Syslog-option)36 b Fr(constructs)k(a)g(log)h(option)f(from)h(the)g(name)g(of)g(an)g (option.)77 b(\(The)739 3074 y(p)r(ossible)20 b(names)g(are)f(listed)i (b)r(elo)n(w.\))34 b Fo(Syslog-option?)29 b Fr(is)20 b(a)g(predicate)g(for)g(log)g(options.)739 3174 y(Options)31 b(are)f(comparable)g(using)i Fo(eq?)p Fr(.)46 b Fo(Make-syslog-optio)o (ns)25 b Fr(constructs)30 b(a)h(set)g(of)739 3273 y(options)d(from)g(a) g(list)h(of)f(options.)39 b Fo(Syslog-options)23 b Fr(is)28 b(a)g(macro)f(whic)n(h)i(expands)e(in)n(to)739 3373 y(an)34 b(expression)f(returning)g(a)h(set)h(of)f(options)g(from)g(names.)56 b Fo(Syslog-options?)51 b Fr(is)35 b(a)739 3472 y(predicate)27 b(for)g(sets)g(of)h(options.)863 3572 y(Here)g(is)f(a)g(list)h(of)g(p)r (ossible)f(names)g(of)h(syslog)e(options:)p Black 739 3749 a Fo(console)p Black 39 w Fr(If)31 b(syslog)f(cannot)g(pass)g(the) i(message)d(to)i(syslogd)f(it)i(will)f(attempt)g(to)g(write)946 3849 y(the)d(message)f(to)g(the)h(console.)p Black 739 4013 a Fo(delay)p Black 39 w Fr(Dela)n(y)c(op)r(ening)f(the)h (connection)f(to)h(syslogd)e(immediately)i(un)n(til)g(the)g(\014rst)g (mes-)946 4113 y(sage)j(is)g(logged.)p Black 739 4277 a Fo(no-delay)p Black 38 w Fr(Op)r(en)k(the)h(connection)f(to)g (syslogd)e(immediately)-7 b(.)48 b(Normally)31 b(the)g(op)r(en)g(is)946 4376 y(dela)n(y)n(ed)h(un)n(til)h(the)g(\014rst)f(message)f(is)h (logged.)50 b(Useful)33 b(for)f(programs)e(that)j(need)946 4476 y(to)28 b(manage)e(the)i(order)f(in)g(whic)n(h)h(\014le)g (descriptors)e(are)g(allo)r(cated.)946 4608 y Fm(NOT)-8 b(A)33 b(BENE:)27 b Fr(The)i Fo(delay)d Fr(and)i Fo(no-delay)d Fr(options)j(are)f(included)i(for)f(com-)946 4707 y(pleteness,)c(but)g (do)e(not)h(ha)n(v)n(e)f(the)h(exp)r(ected)h(e\013ect)f(in)g(the)h (presen)n(t)e(Sc)n(heme)h(in)n(ter-)946 4807 y(face:)34 b(Because)21 b(the)g(Sc)n(heme)h(in)n(terface)f(has)g(to)g(m)n (ultiplex)h(m)n(ultiple)g(sim)n(ultaneous)946 4907 y(connections)28 b(to)f(the)i(syslog)d(facilit)n(y)i(o)n(v)n(er)e(a)i(single)f(one,)h (op)r(en)g(and)f(close)h(op)r(era-)946 5006 y(tions)g(on)f(that)h (facilit)n(y)f(happ)r(en)h(at)g(unpredictable)f(times.)p Black 2109 5255 a(146)p Black eop end %%Page: 147 155 TeXDict begin 147 154 bop 0 TeXcolorgray Black Black Black Black 291 523 a Fo(log-pid)p Black 38 w Fr(Log)28 b(the)i(pro)r(cess)e(id)i(with)f(eac)n(h)g(message:)38 b(useful)30 b(for)f(iden)n(tifying)g(instan)n(ti-)498 623 y(ations)e(of)h(daemons.)p Black 291 788 a Fo(no-wait)p Black 38 w Fr(Do)g(not)f(w)n(ait)h(for)f(c)n(hild)g(pro)r(cesses.)291 1019 y Fe(Log)37 b(facilities)291 1173 y Fr(A)30 b(log)f(facilit)n(y)h (iden)n(ti\014es)g(the)g(originator)d(of)j(a)g(log)f(message)f(from)i (a)f(\014nite)i(set)f(kno)n(wn)291 1272 y(to)d(the)h(system.)37 b(Eac)n(h)26 b(originator)f(is)j(iden)n(ti\014ed)g(b)n(y)f(a)g(name:)p Black 307 1420 a Fn(\017)p Black 41 w Fo(\(syslog-facility)35 b Fq(facility-name)6 b Fo(\))30 b Fn(!)d Fq(facility)885 b Fr(syn)n(tax)p Black 307 1519 a Fn(\017)p Black 41 w Fo(\(syslog-facility?)43 b Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)291 1666 y Fo(Syslog-facility)19 b Fr(is)26 b(macro)f(that)i(expands)e(in)n(to)h(an)g(expression)e (returning)h(a)h(facilit)n(y)291 1766 y(for)h(a)h(giv)n(en)f(name.)38 b Fo(Syslog-facility?)31 b Fr(is)d(a)g(predicate)f(for)h(facilities.)38 b(F)-7 b(acilities)28 b(are)291 1866 y(comparable)e(via)h Fo(eq?)p Fr(.)415 1965 y(Here)g(is)h(a)f(list)h(of)f(p)r(ossible)h (names)f(of)g(syslog)f(facilities:)p Black 291 2145 a Fo(authorization)p Black 36 w Fr(The)h(authorization)g(system:)36 b(login,)27 b(su,)h(gett)n(y)-7 b(,)27 b(etc.)p Black 291 2310 a Fo(cron)p Black 39 w Fr(The)h(cron)f(daemon.)p Black 291 2475 a Fo(daemon)p Black 39 w Fr(System)34 b(daemons,)g(suc)n(h)g(as)f(routed,)i(that)f(are)f(not)h(pro)n(vided)e (for)i(explicitly)498 2575 y(b)n(y)27 b(other)g(facilities.)p Black 291 2739 a Fo(kernel)p Black 39 w Fr(Messages)e(generated)i(b)n (y)g(the)h(k)n(ernel.)p Black 291 2904 a Fo(lpr)p Black 40 w Fr(The)g(line)f(prin)n(ter)g(sp)r(o)r(oling)g(system:)37 b(lpr,)27 b(lp)r(c,)h(lp)r(d,)h(etc.)p Black 291 3069 a Fo(mail)p Black 39 w Fr(The)f(mail)g(system.)p Black 291 3234 a Fo(news)p Black 39 w Fr(The)g(net)n(w)n(ork)e(news)i (system.)p Black 291 3399 a Fo(user)p Black 39 w Fr(Messages)e (generated)h(b)n(y)g(random)g(user)g(pro)r(cesses.)p Black 291 3564 a Fo(uucp)p Black 39 w Fr(The)h(uucp)g(system.)p Black 291 3729 a Fo(local0)h(local1)g(local2)h(local3)f(local4)g (local5)h(local6)f(local7)p Black 39 w Fr(Reserv)n(ed)17 b(for)h(lo-)498 3829 y(cal)27 b(use.)291 4060 y Fe(Log)37 b(lev)m(els)291 4214 y Fr(A)32 b(log)g(lev)n(el)g(iden)n(ti\014es)g (the)h(imp)r(ortance)e(of)i(a)f(message)e(from)i(a)g(\014xed)h(set)f (of)g(p)r(ossible)291 4313 y(lev)n(els.)p Black 307 4461 a Fn(\017)p Black 41 w Fo(\(syslog-level)k Fq(level-name)6 b Fo(\))29 b Fn(!)e Fq(level)1193 b Fr(syn)n(tax)p Black 307 4560 a Fn(\017)p Black 41 w Fo(\(syslog-level?)44 b Fq(x)10 b Fo(\))41 b Fn(!)h Fq(b)l(o)l(ole)l(an)291 4707 y Fo(Syslog-level)16 b Fr(is)k(macro)g(that)h(expands)f(in)n(to)h (an)f(expression)g(returning)g(a)g(facilit)n(y)h(for)f(a)291 4807 y(giv)n(en)25 b(name.)36 b Fo(Syslog-level?)31 b Fr(is)26 b(a)g(predicate)f(for)h(facilities.)36 b(Lev)n(els)25 b(are)g(comparable)291 4907 y(via)i Fo(eq?)p Fr(.)415 5006 y(Here)g(is)h(a)f(list)h(of)f(p)r(ossible)h(names)f(of)g(syslog)f (lev)n(els:)p Black 1660 5255 a(147)p Black eop end %%Page: 148 156 TeXDict begin 148 155 bop 0 TeXcolorgray Black Black Black Black 739 523 a Fo(emergency)p Black 38 w Fr(A)28 b(panic)f(condition.)37 b(This)27 b(is)h(normally)e(broadcast)g(to)i (all)f(users.)p Black 739 690 a Fo(alert)p Black 39 w Fr(A)32 b(condition)f(that)g(should)g(b)r(e)g(corrected)f(immediately) -7 b(,)32 b(suc)n(h)f(as)f(a)h(corrupted)946 789 y(system)d(database.)p Black 739 956 a Fo(critical)p Black 38 w Fr(Critical)f(conditions,)g (e.g.,)h(hard)f(device)g(errors.)p Black 739 1123 a Fo(error)p Black 39 w Fr(Errors.)p Black 739 1289 a Fo(warning)p Black 39 w Fr(W)-7 b(arning)26 b(messages.)p Black 739 1456 a Fo(notice)p Black 39 w Fr(Conditions)19 b(that)g(are)f(not)h (error)f(conditions,)i(but)g(should)f(p)r(ossibly)g(b)r(e)g(handled)946 1556 y(sp)r(ecially)-7 b(.)p Black 739 1722 a Fo(info)p Black 40 w Fr(Informational)26 b(messages.)p Black 739 1889 a Fo(debug)p Black 39 w Fr(Messages)d(that)h(con)n(tain)g (information)f(normally)g(of)h(use)g(only)g(when)g(debugging)946 1989 y(a)k(program.)739 2222 y Fe(Log)38 b(masks)739 2375 y Fr(A)d(log)f(masks)f(can)i(mask)f(out)g(log)g(messages)f(at)i(a) f(set)g(of)h(lev)n(els.)57 b(A)35 b(log)f(mask)g(is)h(an)739 2475 y(en)n(um)28 b(set)f(of)h(log)f(lev)n(els.)p Black 755 2625 a Fn(\017)p Black 42 w Fo(\(make-syslog-ma)o(sk)35 b Fq(list)8 b Fo(\))41 b Fn(!)h Fq(mask)p Black 755 2725 a Fn(\017)p Black 42 w Fo(\(syslog-mask)36 b Fq(level-name)49 b Fo(...\))26 b Fn(!)h Fq(mask)1038 b Fr(syn)n(tax)p Black 755 2824 a Fn(\017)p Black 42 w Fo(syslog-mask-all)1917 b Fr(mask)p Black 755 2924 a Fn(\017)p Black 42 w Fo(\(syslog-mask-up)o (to)35 b Fq(level)9 b Fo(\))42 b Fn(!)f Fq(mask)p Black 755 3024 a Fn(\017)p Black 42 w Fo(\(syslog-mask?)j Fq(x)10 b Fo(\))41 b Fn(!)g Fq(b)l(o)l(ole)l(an)739 3173 y Fo(Make-syslog-mask) 27 b Fr(constructs)32 b(a)h(mask)f(from)h(a)g(list)g(of)g(lev)n(els.)53 b Fo(Syslog-mask)29 b Fr(is)k(a)739 3273 y(macro)19 b(whic)n(h)h (constructs)g(a)g(mask)g(from)g(names)g(of)g(lev)n(els.)34 b Fo(Syslog-mask-all)15 b Fr(is)20 b(a)g(pre-)739 3373 y(de\014ned)29 b(log)e(mask)h(con)n(taining)f(all)h(lev)n(els.)38 b Fo(Syslog-mask-upto)22 b Fr(returns)27 b(a)h(mask)g(con-)739 3472 y(sisting)c(of)g(all)g(lev)n(els)g(up)g(to)h(and)f(including)g(a)g (certain)g(lev)n(el,)h(starting)e(with)i Fo(emergency)p Fr(.)739 3706 y Fe(Logging)739 3859 y Fr(Sc)n(heme)41 b(48)f(dynamically)h(main)n(tains)f(implicit)i(connections)f(to)g(the)h (syslog)d(facilit)n(y)739 3959 y(sp)r(ecifying)29 b(a)h(curren)n(t)e (iden)n(ti\014er,)i(curren)n(t)f(options,)g(a)h(curren)n(t)e(facilit)n (y)i(and)f(a)g(curren)n(t)739 4058 y(log)j(mask.)51 b(Ev)n(ery)31 b(thread)h(main)n(tains)g(it)h(o)n(wn)f(implicit)h(connection)f(to)h (syslog.)50 b(Note)739 4158 y(that)28 b(the)g(connection)f(is)g(not)h (implicitly)g(preserv)n(ed)e(across)g(a)h Fo(spawn)p Fr(.)p Black 755 4308 a Fn(\017)p Black 42 w Fo(\(with-syslog-de)o(st)o (ina)o(ti)o(on)35 b Fq(string)41 b(options)i(facility)h(mask)e(thunk)9 b Fo(\))40 b Fn(!)i Fq(value)739 4458 y Fo(With-syslog-dest)o(in)o(ati) o(on)24 b Fr(dynamically)30 b(binds)h(parameters)e(of)i(the)g(implicit) h(con-)739 4557 y(nection)e(to)g(the)h(syslog)d(facilit)n(y)i(and)g (runs)g Fq(thunk)39 b Fr(within)31 b(those)f(parameter)e(bindings,)739 4657 y(returning)d(what)g Fq(thunk)34 b Fr(returns.)h(Eac)n(h)24 b(of)i(the)f(parameters)f(ma)n(y)h(b)r(e)h Fo(#f)e Fr(in)i(whic)n(h)f (case)739 4757 y(the)j(previous)e(v)-5 b(alues)28 b(will)f(b)r(e)h (used.)p Black 755 4907 a Fn(\017)p Black 42 w Fo(\(syslog)38 b Fq(level)43 b(message)6 b Fo(\))p Black 755 5006 a Fn(\017)p Black 42 w Fo(\(syslog)38 b Fq(level)43 b(message)f(string)7 b Fo(\))p Black 2109 5255 a Fr(148)p Black eop end %%Page: 149 157 TeXDict begin 149 156 bop 0 TeXcolorgray Black Black Black Black 307 523 a Fn(\017)p Black 41 w Fo(\(syslog)39 b Fq(level)j(message)h(string)e(options)7 b Fo(\))p Black 307 623 a Fn(\017)p Black 41 w Fo(\(syslog)39 b Fq(level)j(message)h (string)e(options)h(syslo)l(g-facility)7 b Fo(\))p Black 307 722 a Fn(\017)p Black 41 w Fo(\(syslog)39 b Fq(level)j(message)h (channel)9 b Fo(\))291 877 y(Syslog)23 b Fr(actually)j(logs)f(a)h (message.)35 b(Eac)n(h)25 b(of)h(the)h(parameters)d(of)i(the)h (implicit)g(connec-)291 977 y(tion)f(\(except)h(for)g(the)g(log)f (mask\))g(can)h(b)r(e)g(explicitly)g(sp)r(eci\014ed)g(as)f(w)n(ell)g (for)h(the)g(curren)n(t)291 1076 y(call)22 b(to)g Fo(syslog)p Fr(,)g(o)n(v)n(erriding)e(the)j(parameters)e(of)i(the)g(c)n(hannel.)35 b(The)22 b(parameters)f(rev)n(ert)291 1176 y(to)27 b(their)h(original)e (v)-5 b(alues)27 b(after)g(the)h(call.)415 1277 y(The)g(\014nal)f(form) h(sp)r(eci\014es)f(the)h(destination)g(of)g(the)g(log)e(message)h(as)g (a)g(c)n(hannel;)g(see)291 1377 y(the)h(next)f(section.)291 1619 y Fe(Syslog)38 b(c)m(hannels)291 1776 y Fr(These)24 b(pro)r(cedures)g(allo)n(w)g(direct)g(manipulation)h(of)g(syslog)e(c)n (hannels,)i(the)g(ob)5 b(jects)25 b(that)291 1875 y(represen)n(t)36 b(connections)g(to)h(the)h(syslog)d(facilit)n(y)-7 b(.)66 b(Note)37 b(that)h(it)f(is)g(not)h(necessary)d(to)291 1975 y(explicitly)27 b(op)r(en)h(a)f(syslog)f(c)n(hannel)h(to)h(do)f (logging.)p Black 307 2130 a Fn(\017)p Black 41 w Fo (\(open-syslog-chan)o(ne)o(l)p Fq(st)o(ring)36 b(options)43 b(facility)g(mask)9 b Fo(\))42 b Fn(!)f Fq(channel)p Black 307 2229 a Fn(\017)p Black 41 w Fo(\(close-syslog-cha)o(nn)o(el) -6 b Fq(channel)9 b Fo(\))p Black 307 2329 a Fn(\017)p Black 41 w Fo(\(with-syslog-dest)o(in)o(ati)o(on)35 b Fq(channel)42 b(thunk)9 b Fo(\))41 b Fn(!)g Fq(value)291 2484 y Fo(Open-syslog-cha)o(nne)o(l)26 b Fr(and)31 b Fo(close-syslog-cha)o(nne)o(l)26 b Fr(create)k(and)i(destro)n(y)e(a)i (con-)291 2583 y(nection)27 b(to)g(the)g(syslog)f(facilit)n(y)-7 b(,)27 b(resp)r(ectiv)n(ely)-7 b(.)36 b(The)27 b(sp)r(eci\014ed)h(form) f(of)g(calling)g Fo(syslog)291 2683 y Fr(logs)f(to)i(the)g(sp)r (eci\014ed)f(c)n(hannel.)415 2784 y Fo(With-syslog-chan)o(nel)14 b Fr(dynamically)20 b(binds)h(parameters)e(of)i(the)g(implicit)h (connec-)291 2884 y(tion)32 b(to)f(the)i(syslog)d(facilit)n(y)i(to)f (those)h(sp)r(eci\014ed)g(in)g Fq(channel)42 b Fr(and)31 b(runs)h Fq(thunk)40 b Fr(within)291 2984 y(those)27 b(parameter)f(bindings,)i(returning)e(what)i Fq(thunk)36 b Fr(returns.)291 3268 y Fj(9.11)135 b(Error)45 b(co)t(des)291 3453 y Fr(POSIX)40 b(functions)g(rep)r(ort)g(the)h(nature)f(of)g(an)g (error)f(via)h Fq(system)h(err)l(or)h(numb)l(ers)7 b Fr(|)291 3553 y(OS-sp)r(eci\014c)31 b(in)n(tegers)g(that)i(enco)r(de)f (a)f(v)-5 b(ariet)n(y)32 b(of)g(di\013eren)n(t)g(error)e(situations.)50 b(A)n(t)33 b(the)291 3652 y(Sc)n(heme)g(lev)n(el,)i(error)d(n)n(um)n(b) r(ers)h(are)g(represen)n(ted)g(as)g Fq(errnos)p Fr(,)j(ob)5 b(jects)33 b(that)h(sp)r(ecify)g(a)291 3752 y(name)23 b(for)g(the)i(error)c(sitation.)36 b(Errnos)22 b(are)g(de\014n)n(ted)j (in)f(the)g(structures)f Fo(posix-errnos)291 3852 y Fr(and)k Fo(posix)p Fr(.)415 3953 y(Curren)n(tly)-7 b(,)21 b(the)f(system)f(rep) r(orts)g(suc)n(h)g(error)f(situations)h(b)n(y)h(raising)e(exceptions)h (with)291 4053 y(condition)24 b(t)n(yp)r(e)h Fo(&os-error)p Fr(.)32 b(The)24 b Fo(&os-error)d Fr(condition)j(t)n(yp)r(e)h(has)f(a)g (\014eld)h Fo(code)e Fr(that)291 4152 y(con)n(tains)j(the)i(system)g (error)d(n)n(um)n(b)r(er.)415 4254 y(There)d(are)g(t)n(w)n(o)g(v)-5 b(arieties)22 b(of)g(errnos)f(a)n(v)-5 b(ailable,)23 b Fq(name)l(d)g Fr(and)f Fq(anonymous)p Fr(.)36 b(A)23 b(named)291 4353 y(errno)f(is)h(one)g(for)f(whic)n(h)i(w)n(e)f(ha)n(v)n (e)f(a)h(sym)n(b)r(olic)f(name,)i(suc)n(h)f(as)g Fo(fault)e Fr(or)i Fo(intr)p Fr(.)34 b(Anon)n(y-)291 4453 y(mous)25 b(errnos,)f(for)h(whic)n(h)g(w)n(e)h(only)f(ha)n(v)n(e)f(the)i(curren)n (t)e(op)r(erating)h(system's)g(errno)f(n)n(um-)291 4553 y(b)r(er,)j(ha)n(v)n(e)g(no)h(meaning)f(in)h(other)f(op)r(erating)g (systems.)37 b(Named)28 b(errnos)e(preserv)n(e)g(their)291 4652 y(meaning)32 b(in)h(image)g(\014les.)52 b(Not)34 b(all)e(named)h(errnos)f(are)f(a)n(v)-5 b(ailable)32 b(from)h(all)g(OS's)f(and)291 4752 y(there)27 b(ma)n(y)g(b)r(e)h(m)n (ultiple)g(names)f(for)g(a)g(single)h(OS)f(errno)f(n)n(um)n(b)r(er.)p Black 307 4907 a Fn(\017)p Black 41 w Fo(\(errno)39 b Fq(errno-name)6 b Fo(\))28 b Fn(!)g Fq(errno)1416 b Fr(syn)n(tax)p Black 307 5006 a Fn(\017)p Black 41 w Fo(\(name->errno)37 b Fq(symb)l(ol)9 b Fo(\))41 b Fn(!)h Fq(errno)g(or)f Fo(#f)p Black 1660 5255 a Fr(149)p Black eop end %%Page: 150 158 TeXDict begin 150 157 bop 0 TeXcolorgray Black Black Black Black 755 523 a Fn(\017)p Black 42 w Fo(\(integer->errno)35 b Fq(inte)l(ger)9 b Fo(\))41 b Fn(!)g Fq(errno)p Black 755 623 a Fn(\017)p Black 42 w Fo(\(errno?)47 b Fq(x)10 b Fo(\))40 b Fn(!)i Fq(b)l(o)l(ole)l(an)p Black 755 722 a Fn(\017)p Black 42 w Fo(\(errno-name)36 b Fq(errno)5 b Fo(\))42 b Fn(!)g Fq(symb)l(ol)g(or)g Fo(#f)p Black 755 822 a Fn(\017)p Black 42 w Fo(\(errno-os-numbe)o(r)35 b Fq(errno)5 b Fo(\))42 b Fn(!)g Fq(inte)l(ger)p Black 755 922 a Fn(\017)p Black 42 w Fo(\(errno=?)k Fq(errno0)c(errno1)11 b Fo(\))43 b Fn(!)e Fq(b)l(o)l(ole)l(an)739 1071 y Fr(The)18 b(syn)n(tax)g Fo(errno)e Fr(returns)i(a)g(\(named\))h(errno)e(asso)r (ciated)g(with)i Fq(errno-name)6 b Fr(.)34 b Fo(Name->errno)739 1171 y Fr(returns)e(a)h(\(named\))g(errno)f(or)g Fo(#f)h Fr(if)g(the)h(the)f(errno)f Fq(name)39 b Fr(is)33 b(not)g(supp)r(orted) g(b)n(y)g(the)739 1270 y(op)r(erating)28 b(system.)41 b(The)29 b(errno)f(returned)h(b)n(y)h Fo(integer->errno)23 b Fr(is)29 b(a)g(named)g(errno)f(if)739 1370 y Fq(inte)l(ger)i Fr(corresp)r(onds)19 b(to)i(a)g(named)g(errno)f(in)h(the)h(curren)n(t)e (op)r(erating)g(system;)j(otherwise)739 1469 y(it)h(returns)f(an)g (anon)n(ymous)f(errno.)35 b Fo(Errno-name)19 b Fr(returns)k(a)h(sym)n (b)r(ol)f(if)30 b Fq(errno)g Fr(is)23 b(named)739 1569 y(and)29 b Fo(#f)f Fr(if)i(it)f(is)g(anon)n(ymous.)40 b Fo(Errno=?)f Fr(returns)28 b Fo(#t)h Fr(if)36 b Fq(errno0)41 b Fr(and)29 b Fq(errno1)41 b Fr(ha)n(v)n(e)28 b(the)739 1669 y(same)f(op)r(erating)f(system)i(n)n(um)n(b)r(er)f(and)h Fo(#f)e Fr(if)j(they)e(do)h(not.)739 1901 y Fe(9.11.1)112 b(POSIX)37 b(errnos)739 2054 y Fr(The)28 b(follo)n(wing)e(lists)i(the)g (names)f(of)g(the)h(POSIX)f(errnos.)932 2306 y Fo(toobig)446 b Fr(Argumen)n(t)27 b(list)h(to)r(o)f(long.)932 2406 y Fo(acces)490 b Fr(P)n(ermission)25 b(denied.)932 2506 y Fo(addrinuse)314 b Fr(Address)27 b(in)h(use.)932 2605 y Fo(addrnotavail)182 b Fr(Address)27 b(not)g(a)n(v)-5 b(ailable.)932 2705 y Fo(afnosupport)226 b Fr(Address)27 b(family)h(not)f(supp)r(orted.)932 2804 y Fo(again)490 b Fr(Resource)26 b(una)n(v)-5 b(ailable,)27 b(try)g(again.)932 2904 y Fo(already)402 b Fr(Connection)27 b(already)f(in)i(progress.)932 3004 y Fo(badf)534 b Fr(Bad)27 b(\014le)h(descriptor.)932 3103 y Fo(badmsg)446 b Fr(Bad)27 b(message.)932 3203 y Fo(busy)534 b Fr(Device)27 b(or)g(resource)f(busy)-7 b(.)932 3303 y Fo(canceled)358 b Fr(Op)r(eration)26 b(canceled.)932 3402 y Fo(child)490 b Fr(No)27 b(c)n(hild)h(pro)r(cesses.)932 3502 y Fo(connaborted)226 b Fr(Connection)27 b(ab)r(orted.)932 3601 y Fo(connrefused)226 b Fr(Connection)27 b(refused.)932 3701 y Fo(connreset)314 b Fr(Connection)27 b(reset.)932 3801 y Fo(deadlk)446 b Fr(Resource)26 b(deadlo)r(c)n(k)h(w)n(ould)g(o)r (ccur.)932 3900 y Fo(destaddrreq)226 b Fr(Destination)27 b(address)g(required.)932 4000 y Fo(dom)578 b Fr(Mathematics)33 b(argumen)n(t)g(out)g(of)h(domain)f(of)h(func-)1642 4100 y(tion.)932 4199 y Fo(dquot)490 b Fr(Reserv)n(ed.)932 4299 y Fo(exist)g Fr(File)28 b(exists.)932 4398 y Fo(fault)490 b Fr(Bad)27 b(address.)932 4498 y Fo(fbig)534 b Fr(File)28 b(to)r(o)f(large.)932 4598 y Fo(hostunreach)226 b Fr(Host)27 b(is)h(unreac)n(hable.)932 4697 y Fo(idrm)534 b Fr(Iden)n(ti\014er)27 b(remo)n(v)n(ed.)932 4797 y Fo(ilseq)490 b Fr(Illegal)27 b(b)n(yte)g(sequence.)932 4897 y Fo(inprogress)270 b Fr(Op)r(eration)26 b(in)i(progress.)932 4996 y Fo(intr)534 b Fr(In)n(terrupted)27 b(function.)p Black 2109 5255 a(150)p Black eop end %%Page: 151 159 TeXDict begin 151 158 bop 0 TeXcolorgray Black Black Black 484 523 a Fo(inval)489 b Fr(In)n(v)-5 b(alid)28 b(argumen)n(t.)484 623 y Fo(io)621 b Fr(I/O)27 b(error.)484 722 y Fo(isconn)445 b Fr(So)r(c)n(k)n(et)27 b(is)h(connected.)484 822 y Fo(isdir)489 b Fr(Is)28 b(a)f(directory)-7 b(.)484 922 y Fo(loop)533 b Fr(T)-7 b(o)r(o)27 b(man)n(y)g(lev)n(els)g(of)h (sym)n(b)r(olic)f(links.)484 1021 y Fo(mfile)489 b Fr(T)-7 b(o)r(o)27 b(man)n(y)g(op)r(en)h(\014les.)484 1121 y Fo(mlink)489 b Fr(T)-7 b(o)r(o)27 b(man)n(y)g(links.)484 1220 y Fo(msgsize)401 b Fr(Message)27 b(to)r(o)g(large.)484 1320 y Fo(multihop)357 b Fr(Reserv)n(ed.)484 1420 y Fo(nametoolong)225 b Fr(Filename)28 b(to)r(o)f(long.)484 1519 y Fo(netdown)401 b Fr(Net)n(w)n(ork)27 b(is)g(do)n(wn.)484 1619 y Fo(netreset)357 b Fr(Connection)28 b(ab)r(orted)f(b)n(y)g(net)n(w)n(ork.)484 1719 y Fo(netunreach)269 b Fr(Net)n(w)n(ork)27 b(unreac)n(hable.)484 1818 y Fo(nfile)489 b Fr(T)-7 b(o)r(o)27 b(man)n(y)g(\014les)h(op)r(en) g(in)f(system.)484 1918 y Fo(nobufs)445 b Fr(No)28 b(bu\013er)g(space)f (a)n(v)-5 b(ailable.)484 2017 y Fo(nodata)445 b Fr(No)31 b(message)f(is)h(a)n(v)-5 b(ailable)30 b(on)h(the)g(STREAM)g(head)1193 2117 y(read)c(queue.)484 2217 y Fo(nodev)489 b Fr(No)28 b(suc)n(h)f(device.)484 2316 y Fo(noent)489 b Fr(No)28 b(suc)n(h)f(\014le)h(or)f(directory)-7 b(.)484 2416 y Fo(noexec)445 b Fr(Executable)27 b(\014le)h(format)f(error.)484 2516 y Fo(nolck)489 b Fr(No)28 b(lo)r(c)n(ks)f(a)n(v)-5 b(ailable.)484 2615 y Fo(nolink)445 b Fr(Reserv)n(ed.)484 2715 y Fo(nomem)489 b Fr(Not)28 b(enough)f(space.)484 2814 y Fo(nomsg)489 b Fr(No)28 b(message)e(of)i(the)g(desired)f(t)n(yp) r(e.)484 2914 y Fo(noprotoopt)269 b Fr(Proto)r(col)26 b(not)i(a)n(v)-5 b(ailable.)484 3014 y Fo(nospc)489 b Fr(No)28 b(space)f(left)h(on)f(device.)484 3113 y Fo(nosr)533 b Fr(No)28 b(STREAM)g(resources.)484 3213 y Fo(nostr)489 b Fr(Not)28 b(a)f(STREAM.)484 3313 y Fo(nosys)489 b Fr(F)-7 b(unction)29 b(not)e(supp)r(orted.)484 3412 y Fo(notconn)401 b Fr(The)28 b(so)r(c)n(k)n(et)f(is)g(not)h(connected.)484 3512 y Fo(notdir)445 b Fr(Not)28 b(a)f(directory)-7 b(.)484 3611 y Fo(notempty)357 b Fr(Directory)27 b(not)h(empt)n(y)-7 b(.)484 3711 y Fo(notsock)401 b Fr(Not)28 b(a)f(so)r(c)n(k)n(et.)484 3811 y Fo(notsup)445 b Fr(Not)28 b(supp)r(orted.)484 3910 y Fo(notty)489 b Fr(Inappropriate)26 b(I/O)h(con)n(trol)f(op)r (eration.)484 4010 y Fo(nxio)533 b Fr(No)28 b(suc)n(h)f(device)h(or)e (address.)484 4110 y Fo(opnotsupp)313 b Fr(Op)r(eration)27 b(not)h(supp)r(orted)f(on)g(so)r(c)n(k)n(et.)484 4209 y Fo(overflow)357 b Fr(V)-7 b(alue)28 b(to)r(o)f(large)g(to)g(b)r(e)h (stored)f(in)h(data)f(t)n(yp)r(e.)484 4309 y Fo(perm)533 b Fr(Op)r(eration)27 b(not)h(p)r(ermitted.)484 4408 y Fo(pipe)533 b Fr(Brok)n(en)26 b(pip)r(e.)484 4508 y Fo(proto)489 b Fr(Proto)r(col)26 b(error.)484 4608 y Fo(protonosupport)93 b Fr(Proto)r(col)26 b(not)i(supp)r(orted.)484 4707 y Fo(prototype)313 b Fr(Proto)r(col)26 b(wrong)h(t)n(yp)r(e)g(for)g(so)r (c)n(k)n(et.)484 4807 y Fo(range)489 b Fr(Result)28 b(to)r(o)g(large.) 484 4907 y Fo(rofs)533 b Fr(Read-only)27 b(\014le)h(system.)484 5006 y Fo(spipe)489 b Fr(In)n(v)-5 b(alid)28 b(seek.)p Black 1660 5255 a(151)p Black eop end %%Page: 152 160 TeXDict begin 152 159 bop 0 TeXcolorgray Black Black Black 932 523 a Fo(srch)534 b Fr(No)27 b(suc)n(h)g(pro)r(cess.)932 623 y Fo(stale)490 b Fr(Reserv)n(ed.)932 722 y Fo(time)534 b Fr(Stream)27 b(io)r(ctl\(\))h(timeout.)932 822 y Fo(timedout)358 b Fr(Connection)27 b(timed)h(out.)932 922 y Fo(txtbsy)446 b Fr(T)-7 b(ext)27 b(\014le)h(busy)-7 b(.)932 1021 y Fo(wouldblock)270 b Fr(Op)r(eration)26 b(w)n(ould)h(blo)r(c)n(k.)932 1121 y Fo(xdev)534 b Fr(Cross-device)25 b(link.)p Black Black 739 1608 a Fj(9.12)135 b(C)45 b(to)h(Sc)l(heme)f(corresp)t (ondence)739 1790 y Fr(The)32 b(follo)n(wing)f(table)h(lists)g(the)h (Sc)n(heme)f(pro)r(cedures)f(that)h(corresp)r(ond)f(to)h(particular)739 1890 y(C)f(pro)r(cedures.)47 b(Not)32 b(all)f(of)g(the)h(Sc)n(heme)f (pro)r(cedures)f(listed)i(are)e(part)h(of)g(the)h(POSIX)739 1989 y(in)n(terface.)906 2159 y(C)27 b(pro)r(cedure)341 b(Sc)n(heme)27 b(pro)r(cedure\(s\))906 2258 y Fo(access)523 b(accessible?)906 2358 y(asctime)479 b(date->string)906 2458 y(chdir)567 b(set-working-dire)o(ct)o(ory)o(!)906 2557 y(close)g(close-input-port)o(,)37 b(close-output-port)o(,)1780 2657 y(close-channel,)h(close-socket)906 2757 y(closedir)435 b(close-directory-)o(st)o(rea)o(m)906 2856 y(creat)567 b(open-file)906 2956 y(ctime)g(time->string)906 3055 y(dup)655 b(dup,)42 b(dup-switching-mo)o(de)906 3155 y(dup2)611 b(dup2)906 3255 y(exec[l|v][e|p|)p Fc(\017)p Fo(])93 b(exec,)41 b(exec-with-environ)o(men)o(t,)1780 3354 y(exec-file,)e(exec-file-with-en)o(vir)o(on)o(men)o(t,)1780 3454 y(exec-with-alias)p 911 3554 27 4 v 937 3554 a(exit)580 b(exit)906 3653 y(fcntl)567 b(io-flags,)40 b(set-io-flags!,)1780 3753 y(close-on-exec,)e(set-close-on-exe)o(c!)906 3852 y(fork)611 b(fork,)41 b(fork-and-forget)906 3952 y(fstat)567 b(get-port-info)906 4052 y(getcwd)523 b(working-director)o(y)906 4151 y(getegid)479 b(get-effective-gr)o(ou)o(p-i)o(d)906 4251 y(getenv)523 b(lookup-environme)o(nt)o(-va)o(ri)o(abl)o(e,)1780 4351 y(environment-alis)o(t)906 4450 y(geteuid)479 b(get-effective-us)o (er)o(-id)906 4550 y(getgid)523 b(get-group-id)906 4649 y(getgroups)391 b(get-groups)906 4749 y(getlogin)435 b(get-login-name)906 4849 y(getpid)523 b(get-process-id)906 4948 y(getppid)479 b(get-parent-proce)o(ss)o(-id)p Black 2109 5255 a Fr(152)p Black eop end %%Page: 153 161 TeXDict begin 153 160 bop 0 TeXcolorgray Black Black Black 457 523 a Fr(C)28 b(pro)r(cedure)341 b(Sc)n(heme)27 b(pro)r(cedure\(s\))457 623 y Fo(getuid)524 b(get-user-id)457 722 y(gmtime)g(time->local-dat)o(e)457 822 y(isatty)g(port-is-a-termi)o (nal)o(?)457 922 y(link)612 b(link)457 1021 y(localtime)392 b(time->utc-date)457 1121 y(lstat)568 b(get-file/link-i)o(nfo)457 1220 y(mkdir)g(make-directory)457 1320 y(mkfifo)524 b(make-fifo)457 1420 y(mktime)g(date->time)457 1519 y(open)612 b(open-file)457 1619 y(opendir)480 b(open-directory-)o(str)o(ea)o(m)457 1719 y(pipe)612 b(open-pipe)457 1818 y(read)g(read-char,)39 b(read-block)457 1918 y(readdir)480 b(read-directory-)o(str)o(ea)o(m) 457 2017 y(readlink)436 b(read-symbolic-l)o(ink)457 2117 y(rename)524 b(rename)457 2217 y(rmdir)568 b(remove-director)o(y)457 2316 y(setgid)524 b(set-group-id!)457 2416 y(setegid)480 b(set-effective-g)o(rou)o(p-)o(id)o(!)457 2516 y(setuid)524 b(set-user-id!)457 2615 y(seteuid)480 b(set-effective-u)o(ser)o(-i)o (d!)457 2715 y(stat)612 b(get-file-info)457 2814 y(strftime)436 b(format-date)457 2914 y(symlink)480 b(create-symbolic)o(-li)o(nk)457 3014 y(syslog)524 b(syslog)457 3113 y(time)612 b(current-time)457 3213 y(ttyname)480 b(port-terminal-n)o(ame)457 3313 y(umask)568 b(set-file-creati)o(on-)o(ma)o(sk)o(!)457 3412 y(uname)g(os-name,)40 b(os-node-name,)1332 3512 y(os-release-name,)d(os-version-name)o(,)1332 3611 y(machine-name)457 3711 y(unlink)524 b(unlink)457 3811 y(waitpid)480 b(wait-for-child-)o(pro)o(ce)o(ss)457 3910 y(write)568 b(write-char,)39 b(write-block)p Black 1660 5255 a Fr(153)p Black eop end %%Page: 154 162 TeXDict begin 154 161 bop 0 TeXcolorgray Black Black Black 739 1190 a Fp(Bibliograph)-6 b(y)p Black 780 1636 a Fr([1])p Black 42 w(Information)32 b(tec)n(hnology)h({)g(P)n(ortable) f(Op)r(erating)g(System)i(In)n(terface)f(\(POSIX\).)910 1735 y(ISO/IEC)26 b(9945-1)f(ANSI/IEEE)h(Std)i(1003.1.)35 b(2nd)27 b(Ed.,)h(1996.)p Black 780 1913 a([2])p Black 42 w(William)41 b(Clinger)e(and)i(Jonathan)e(Rees.)76 b(Macros)39 b(that)i(w)n(ork.)74 b Fq(Principles)43 b(of)910 2013 y(Pr)l(o)l(gr)l(amming)30 b(L)l(anguages)p Fr(,)e(Jan)n(uary)e (1991.)p Black 780 2190 a([3])p Black 42 w(William)31 b(Clinger)g(and)h(Jonathan)e(Rees)h(\(editors\).)49 b(Revised)2921 2160 y Fk(4)2989 2190 y Fr(rep)r(ort)31 b(on)g(the)h(al-)910 2290 y(gorithmic)37 b(language)g(Sc)n(heme.)70 b Fq(LISP)40 b(Pointers)f Fr(IV\(3\):1{55,)h(July-Septem)n(b)r(er)910 2390 y(1991.)p Black 780 2567 a([4])p Black 42 w(P)n(a)n(v)n(el)25 b(Curtis)i(and)g(James)f(Rauen.)37 b(A)27 b(mo)r(dule)h(system)f(for)g (Sc)n(heme.)36 b Fq(A)n(CM)30 b(Con-)910 2667 y(fer)l(enc)l(e)g(on)f (Lisp)i(and)f(F)-6 b(unctional)30 b(Pr)l(o)l(gr)l(amming,)f Fr(pages)d(13{19,)g(1990.)p Black 780 2845 a([5])p Black 42 w(Ric)n(hard)h(Kelsey)g(and)h(Jonathan)g(Rees.)38 b(A)29 b(T)-7 b(ractable)27 b(Sc)n(heme)h(Implemen)n(tation.)910 2944 y Fq(Lisp)i(and)g(Symb)l(olic)h(Computation)e Fr(7:315{335)24 b(1994.)p Black 780 3122 a([6])p Black 42 w(Ric)n(hard)e(Kelsey)-7 b(,)23 b(Will)h(Clinger,)f(Jonathan)f(Rees)h(\(editors\).)29 b(Revised)3179 3092 y Fk(5)3240 3122 y Fr(Rep)r(ort)23 b(on)910 3221 y(the)29 b(Algorithmic)g(Language)e(Sc)n(heme.)41 b Fq(Higher-Or)l(der)32 b(and)g(Symb)l(olic)g(Computa-)910 3321 y(tion,)g Fr(V)-7 b(ol.)30 b(11,)h(No.)f(1,)h(Septem)n(b)r(er,)g (1998.)44 b(and)30 b Fq(A)n(CM)j(SIGPLAN)f(Notic)l(es)p Fr(,)g(V)-7 b(ol.)910 3421 y(33,)26 b(No.)i(9,)f(Octob)r(er,)g(1998.)p Black 780 3598 a([7])p Black 42 w(Da)n(vid)33 b(MacQueen.)52 b(Mo)r(dules)34 b(for)e(Standard)h(ML.)54 b Fq(A)n(CM)35 b(Confer)l(enc)l(e)h(on)f(Lisp)910 3698 y(and)30 b(F)-6 b(unctional)30 b(Pr)l(o)l(gr)l(amming,)e Fr(1984.)p Black 780 3876 a([8])p Black 42 w(Jonathan)f(Rees)h(and)g(Bruce)f(Donald.)39 b(Program)25 b(mobile)j(rob)r(ots)g(in)g(Sc)n(heme.)39 b Fq(In-)910 3975 y(ternational)30 b(Confer)l(enc)l(e)h(on)e(R)l(ob)l (otics)h(and)h(A)n(utomation,)c Fr(IEEE,)g(1992.)p Black 780 4153 a([9])p Black 42 w(John)k(H.)i(Repp)n(y)-7 b(.)50 b(Concurren)n(t)31 b(Programming)e(in)j(ML.)50 b(Cam)n(bridge)31 b(Univ)n(ersit)n(y)910 4252 y(Press,)26 b(1999.)p Black 739 4430 a([10])p Black 41 w(Mark)k(A.)i(Sheldon)f(and)h(Da)n(vid)f(K.) g(Gi\013ord.)48 b(Static)31 b(dep)r(enden)n(t)i(t)n(yp)r(es)e(for)g (\014rst-)910 4530 y(class)37 b(mo)r(dules.)69 b Fq(A)n(CM)41 b(Confer)l(enc)l(e)f(on)g(Lisp)h(and)f(F)-6 b(unctional)40 b(Pr)l(o)l(gr)l(amming,)910 4629 y Fr(pages)26 b(20{29,)f(1990.)p Black 739 4807 a([11])p Black 41 w(Olin)47 b(Shiv)n(ers,)52 b(Brian)47 b(D.)i(Carlstrom,)i(Martin)d(Gasbic)n(hler)e(and)i(Mik)n(e)g (Sp)r(er-)910 4907 y(b)r(er.)106 b(Scsh)51 b(Reference)g(Man)n(ual,)56 b(scsh)51 b(release)f(0.6.6.)105 b(Av)-5 b(ailable)51 b(at)g(URL)910 5006 y Fo(http://www.scsh)o(.ne)o(t/)o Fr(.)p Black 2109 5255 a(154)p Black eop end %%Page: 155 163 TeXDict begin 155 162 bop 0 TeXcolorgray Black Black Black Black 291 523 a Fr([12])p Black 40 w(Olin)33 b(Shiv)n(ers.)53 b(A)34 b(univ)n(ersal)e(scripting)h(framew)n(ork,)g(or)f(Lam)n(b)r(da:) 48 b(the)33 b(ultimate)461 623 y(\\little)i(language".)55 b Fq(Concurr)l(ency)37 b(and)f(Par)l(al)t(lelism,)41 b(Pr)l(o)l(gr)l(amming,)e(Network-)461 722 y(ing,)31 b(and)f(Se)l(curity,)e Fr(pages)e(254{265,)e(Springer)j(1996.)35 b(Jo)n(xan)26 b(Ja\013ar)g(and)h(Roland)461 822 y(H.)h(C.)g(Y)-7 b(ap,)28 b(editors.)p Black 1660 5255 a(155)p Black eop end %%Page: 156 164 TeXDict begin 156 163 bop 0 TeXcolorgray Black Black Black Black 739 999 a Fp(Index)p Black 739 1414 a Fo(accessible?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(138)p Black 739 1514 a Fo(add-signal-queue)o(-s)o(ign)o(al)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(133)p Black 739 1614 a Fo(after-time-rv)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(102)p Black 739 1714 a Fo(always-rv)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(99)p Black 739 1815 a Fo(any)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(39)p Black 739 1915 a Fo(any-match?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(79)p Black 739 2015 a Fo(any?)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(38)p Black 739 2115 a Fo(arithmetic-shift)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(40)p Black 739 2215 a Fo(array)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(43)p Black 739 2316 a Fo(array->vector)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(43)p Black 739 2416 a Fo(array-ref)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(43)p Black 739 2516 a Fo(array-set!)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(43)p Black 739 2616 a Fo(array-shape)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(43)p Black 739 2716 a Fo(array?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(43)p Black 739 2817 a Fo(ascii-range)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(77)p Black 739 2917 a Fo(ascii-ranges)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(77)p Black 739 3017 a Fo(at-real-time-rv) p Fr(,)p 0 0 1 TeXcolorrgb 21 w(102)p Black 739 3117 a Fo(atom?)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(38)p Black 739 3217 a Fo(atomically!)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(95)p Black 739 3410 a Fo(bit-count)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(40)p Black 739 3511 a Fo(bitwise-and)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(40)p Black 739 3611 a Fo(bitwise-ior)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(40)p Black 739 3711 a Fo(bitwise-not)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(40)p Black 739 3811 a Fo(bitwise-xor)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(40)p Black 739 3911 a Fo(byte-vector)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(40)p Black 739 4012 a Fo (byte-vector->os-)o(st)o(rin)o(g)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(53)p Black 739 4112 a Fo(byte-vector-leng)o(th)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(40)p Black 739 4212 a Fo(byte-vector-ref) p Fr(,)p 0 0 1 TeXcolorrgb 21 w(40)p Black 739 4312 a Fo(byte-vector-set!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(40)p Black 739 4412 a Fo(byte-vector=?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(40)p Black 739 4513 a Fo(byte-vector?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(40)p Black 739 4706 a Fo(call-atomically)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(95)p Black 739 4806 a Fo (call-atomically!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(95)p Black 739 4906 a Fo(call-ensuring-at)o(om)o(ici)o(ty)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(93)p Black 739 5006 a Fo (call-ensuring-at)o(om)o(ici)o(ty)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(93)p Black Black Black 2213 1414 a Fo(call-imported-b) o(ind)o(in)o(g-)o(2)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 2213 1514 a Fo(call-with-os-st)o(rin)o(g-)o(te)o(xt-)o(co)o(dec)o Fr(,)p 0 0 1 TeXcolorrgb 14 w(54)p Black 2213 1614 a Fo(cell-ref)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(41)p Black 2213 1714 a Fo(cell-set!)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(41)p Black 2213 1814 a Fo(cell?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(41)p Black 2213 1914 a Fo(channel?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(100)p Black 2213 2014 a Fo(char->scalar-va)o(lue)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(83)p Black 2213 2114 a Fo(char-foldcase)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(86)p Black 2213 2214 a Fo(char-general-ca)o(teg)o(or)o(y)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(85)p Black 2213 2314 a Fo(char-titlecase)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(86)p Black 2213 2414 a Fo(char-titlecase?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(86)p Black 2213 2514 a Fo(choose)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(99)p Black 2213 2614 a Fo(close-all-but)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(144)p Black 2213 2715 a Fo(close-directory)o(-st)o(re)o(am)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(136)p Black 2213 2815 a Fo(close-on-exec?)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(144)p Black 2213 2915 a Fo(close-socket)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(55)p Black 2213 3015 a Fo(close-syslog-ch)o(ann)o(el)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(149)p Black 2213 3115 a Fo(compound-interf)o(ace)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(29)p Black 2213 3215 a Fo(concatenate-sym)o(bol)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(39)p Black 2213 3315 a Fo(condvar-has-val)o(ue?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black 2213 3415 a Fo(condvar-value)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black 2213 3515 a Fo(condvar?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(96)p Black 2213 3615 a Fo(copy-array)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(43)p Black 2213 3715 a Fo(create-symbolic)o(-li)o(nk)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(140)p Black 2213 3815 a Fo(current-column)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(51)p Black 2213 3915 a Fo(current-os-stri)o(ng-)o(te)o(xt)o(-co)o(de)o(c)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(54)p Black 2213 4015 a Fo(current-proposa)o(l)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black 2213 4115 a Fo(current-row)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(51)p Black 2213 4215 a Fo(current-thread)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(91)p Black 2213 4316 a Fo(current-time)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(141)p Black 2213 4506 a Fo(date->string)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(142)p Black 2213 4606 a Fo(date->time)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(142)p Black 2213 4706 a Fo(date-date-dst)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(141)p Black 2213 4806 a Fo(date-hour)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(141)p Black 2213 4906 a Fo(date-minute)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(141)p Black 2213 5006 a Fo(date-month)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(141)p Black Black 2109 5255 a(156)p Black eop end %%Page: 157 165 TeXDict begin 157 164 bop 0 TeXcolorgray Black Black Black 291 523 a Fo(date-month-day)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(141)p Black 291 623 a Fo(date-second)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(141)p Black 291 723 a Fo(date-week-day)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(141)p Black 291 823 a Fo(date-year)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(141)p Black 291 923 a Fo(date-year-day)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(141)p Black 291 1023 a Fo(date?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(141)p Black 291 1122 a Fo(debug-message)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(92)p Black 291 1222 a Fo(default-hash-fu)o(nct)o(io)o(n)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(50)p Black 291 1322 a Fo(define-exported) o(-bi)o(nd)o(in)o(g)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(107)p Black 291 1422 a Fo(define-imported)o(-bi)o(nd)o(in)o(g)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 291 1522 a Fo(define-interfac)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(28)p Black 291 1622 a Fo(define-record-d)o(isc)o(lo)o(se)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(44)p Black(,)p 0 0 1 TeXcolorrgb 27 w(46)p Black 291 1722 a Fo(define-record-r)o(esu)o(me)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black(,)p 0 0 1 TeXcolorrgb 26 w(121)p Black 291 1822 a Fo(define-structur)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(26)p Black 291 1922 a Fo(define-text-cod) o(ec)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(88)p Black 291 2022 a Fo(delete)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(39)p Black 291 2121 a Fo(delete-from-que)o(ue!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(42)p Black 291 2221 a Fo(delq)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(39)p Black 291 2321 a Fo(delq!)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(39)p Black 291 2421 a Fo(dequeue!)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(42)p Black 291 2521 a Fo(dequeue-or-thun)o(k!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(42)p Black 291 2621 a Fo(dequeue-or-valu) o(e!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(41)p Black 291 2721 a Fo(dequeue-signal!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(133)p Black 291 2821 a Fo(directory-strea)o(m?)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(136)p Black 291 2921 a Fo(dup)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(144)p Black 291 3021 a Fo(dup-switching-m)o(ode) o Fr(,)p 0 0 1 TeXcolorrgb 22 w(144)p Black 291 3120 a Fo(dup2)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(144)p Black 291 3308 a Fo(empty-queue!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(42)p Black 291 3408 a Fo(enqueue!)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(41)p Black 291 3508 a Fo(enqueue-many!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(41)p Black 291 3608 a Fo(ensure-atomicit) o(y!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(93)p Black 291 3708 a Fo(enum-set->list)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(49)p Black 291 3807 a Fo(enum-set-differ)o(enc)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(49)p Black 291 3907 a Fo(enum-set-inters)o(ect)o (io)o(n)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(49)p Black 291 4007 a Fo(enum-set-member)o(?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(49)p Black 291 4107 a Fo(enum-set-negati)o(on)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(49)p Black 291 4207 a Fo(enum-set-subset) o(?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(49)p Black 291 4307 a Fo(enum-set-union)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(49)p Black 291 4407 a Fo(enum-set=?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(49)p Black 291 4507 a Fo(environment-ali)o(st)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(134)p Black 291 4607 a Fo(errno-name)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(150)p Black 291 4707 a Fo(errno-os-number)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(150)p Black 291 4806 a Fo(errno=?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(150)p Black 291 4906 a Fo(errno?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(150)p Black 291 5006 a Fo(every?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(38)p Black Black Black 1764 523 a Fo(exact-match?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(79)p Black 1764 624 a Fo(exec)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(130)p Black 1764 726 a Fo(exec-file)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(130)p Black 1764 827 a Fo(exec-file-with-en)o(vi)o (ron)o(me)o(nt)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(130)p Black 1764 929 a Fo(exec-with-alias)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(130)p Black 1764 1030 a Fo(exec-with-environ)o(me)o(nt)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(130)p Black 1764 1131 a Fo(exit)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(130)p Black 1764 1345 a Fo(fd-port?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(144)p Black 1764 1447 a Fo(file-info-device)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(139)p Black 1764 1548 a Fo(file-info-group)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(139)p Black 1764 1649 a Fo(file-info-inode)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(139)p Black 1764 1751 a Fo(file-info-last-ac)o(ce)o(ss)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(139)p Black 1764 1852 a Fo(file-info-last-mo)o (di)o(fic)o(at)o(io)o(n)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(139)p Black 1764 1954 a Fo(file-info-last-st)o(at)o(us-)o(ch)o(an)o (ge)p Fr(,)p 0 0 1 TeXcolorrgb 16 w(139)p Black 1764 2055 a Fo(file-info-link-co)o(un)o(t)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(139)p Black 1764 2156 a Fo(file-info-mode)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(139)p Black 1764 2258 a Fo(file-info-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(138)p Black 1764 2359 a Fo(file-info-owner)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(139)p Black 1764 2460 a Fo(file-info-size)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(139)p Black 1764 2562 a Fo(file-info-type)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(138)p Black 1764 2663 a Fo(file-info?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(138)p Black 1764 2765 a Fo(file-mode+)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(139)p Black 1764 2866 a Fo(file-mode-)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(139)p Black 1764 2967 a Fo(file-mode->intege)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(140)p Black 1764 3069 a Fo(file-mode<=?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(139)p Black 1764 3170 a Fo(file-mode=?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(139)p Black 1764 3272 a Fo(file-mode>=?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(139)p Black 1764 3373 a Fo(file-mode?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(139)p Black 1764 3474 a Fo(file-options-on?)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(136)p Black 1764 3576 a Fo(file-options-unio)o(n)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(136)p Black 1764 3677 a Fo(file-type-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(138)p Black 1764 3779 a Fo(file-type?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(138)p Black 1764 3880 a Fo(filter)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(39)p Black 1764 3981 a Fo(filter!)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(39)p Black 1764 4083 a Fo(filter-map)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(39)p Black 1764 4184 a Fo(find-text-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 1764 4285 a Fo(first)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(39)p Black 1764 4387 a Fo(fluid)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(52)p Black 1764 4488 a Fo(fork)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(130)p Black 1764 4590 a Fo(fork-and-forget)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(130)p Black 1764 4691 a Fo(format-date)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(142)p Black 1764 4792 a Fo(fresh-line)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(51)p Black 1764 5006 a Fo(general-category-)o(id)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(85)p Black Black 1660 5255 a(157)p Black eop end %%Page: 158 166 TeXDict begin 158 165 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(general-category)o(-p)o(rim)o(ar)o(y-c)o(at)o(eg)o (ory)o Fr(,)p 0 0 1 TeXcolorrgb 1071 623 a(85)p Black 739 723 a Fo(general-category)o(?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(85)p Black 739 823 a Fo(get-effective-gr)o(ou)o(p-i)o(d)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 739 923 a Fo (get-effective-us)o(er)o(-id)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 739 1023 a Fo(get-file-info)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(138)p Black 739 1124 a Fo(get-file/link-in)o(fo) o Fr(,)p 0 0 1 TeXcolorrgb 22 w(138)p Black 739 1224 a Fo(get-group-id)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(134)p Black 739 1324 a Fo(get-groups)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(134)p Black 739 1424 a Fo(get-host-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(55)p Black 739 1524 a Fo(get-login-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 739 1624 a Fo(get-parent-proce)o(ss)o(-id)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 739 1725 a Fo(get-port-info)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(138)p Black 739 1825 a Fo(get-process-id)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 739 1925 a Fo(get-user-id)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(134)p Black 739 2025 a Fo(group-id->group-)o(in)o(fo)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(135)p Black 739 2125 a Fo(group-id->intege)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 739 2226 a Fo(group-id=?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(135)p Black 739 2326 a Fo(group-id?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(135)p Black 739 2426 a Fo(group-info-id)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 739 2526 a Fo(group-info-membe)o(rs)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 739 2626 a Fo(group-info-name)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(135)p Black 739 2726 a Fo(group-info?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(135)p Black 739 2827 a Fo(guard)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(99)p Black 739 2927 a Fo(guess-port-text-)o(co)o(dec)o(-a)o(cco)o (rd)o(in)o(g-t)o(o-)o(bom)o Fr(,)p 0 0 1 TeXcolorrgb 1071 3026 a(87)p Black 739 3219 a Fo(have-system?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(54)p Black 739 3411 a Fo(i/o-flags)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(144)p Black 739 3511 a Fo(identity)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(38)p Black 739 3612 a Fo(ignore-case)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(78)p Black 739 3712 a Fo(import-definitio)o(n)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 739 3812 a Fo(import-dynamic-e)o(xt)o(ern)o(al)o(s)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(110)p Black 739 3912 a Fo(import-lambda-de)o(fi)o(nit) o(io)o(n-2)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(109)p Black 739 4012 a Fo(integer->errno)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(150)p Black 739 4113 a Fo(integer->file-mo)o(de)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(140)p Black 739 4213 a Fo(integer->group-i)o(d)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 739 4313 a Fo(integer->process)o(-i)o(d)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(130)p Black 739 4413 a Fo(integer->signal)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(131)p Black 739 4513 a Fo(integer->user-id)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 739 4613 a Fo(intersection)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(77)p Black 739 4714 a Fo(invalidate-curre)o(nt)o (-pr)o(op)o(osa)o(l!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(95)p Black 739 4906 a Fo(jar-put!)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(101)p Black 739 5006 a Fo(jar-take)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(102)p Black Black Black 2213 523 a Fo(jar-take-rv)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(102)p Black 2213 623 a Fo(jar?)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(101)p Black 2213 815 a Fo(kill-thread!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(92)p Black 2213 1008 a Fo(latin-1-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 2213 1108 a Fo(let-fluid)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(52)p Black 2213 1208 a Fo(let-fluids)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(52)p Black 2213 1308 a Fo(limit-output)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(51)p Black 2213 1408 a Fo(link)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(137)p Black 2213 1508 a Fo(list->queue)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(41)p Black 2213 1609 a Fo(list-delete-nei)o(ghb) o(or)o(-d)o(ups)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(69)p Black(,)p 0 0 1 TeXcolorrgb 27 w(73)p Black 2213 1709 a Fo(list-delete-nei)o(ghb)o(or)o(-d)o(ups)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(73)p Black 2213 1809 a Fo(list-directory)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(136)p Black 2213 1909 a Fo(list-merge)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(68)p Black(,)p 0 0 1 TeXcolorrgb 27 w(71)p Black 2213 2009 a Fo(list-merge!)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(68)p Black(,)p 0 0 1 TeXcolorrgb 26 w(71)p Black 2213 2109 a Fo(list-merge-sort)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(71)p Black 2213 2210 a Fo(list-merge-sort)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(71)p Black 2213 2310 a Fo(list-sort)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(68)p Black 2213 2410 a Fo(list-sort!)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(68)p Black 2213 2510 a Fo(list-sorted?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(68)p Black(,)p 0 0 1 TeXcolorrgb 27 w(71)p Black 2213 2610 a Fo(list-stable-sor)o(t)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(68)p Black 2213 2710 a Fo(list-stable-sor)o(t!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(68)p Black 2213 2811 a Fo(load-dynamic-ex)o(ter)o(na)o(ls)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(110)p Black 2213 2911 a Fo(lock?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(97)p Black 2213 3011 a Fo(lookup-environm)o(ent)o(-v)o(ar)o(iab)o(le)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 2213 3111 a Fo(lookup-exported)o(-bi)o(nd)o(in)o(g)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 2213 3211 a Fo(lookup-imported)o(-bi)o(nd) o(in)o(g)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(107)p Black 2213 3404 a Fo(machine-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 2213 3504 a Fo(make-array)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(43)p Black 2213 3604 a Fo(make-byte-vecto)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(40)p Black 2213 3704 a Fo(make-cell)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(41)p Black 2213 3804 a Fo(make-channel)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(100)p Black 2213 3904 a Fo(make-condvar)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black 2213 4005 a Fo(make-date)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(141)p Black 2213 4105 a Fo(make-directory)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(137)p Black 2213 4205 a Fo(make-empty-prof)o(ile)o(-d)o(at)o(a)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 2213 4305 a Fo(make-fifo)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(138)p Black 2213 4405 a Fo(make-fluid)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(52)p Black 2213 4505 a Fo(make-integer-ta)o(ble)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(50)p Black 2213 4606 a Fo(make-jar)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(101)p Black 2213 4706 a Fo(make-lock)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(97)p Black 2213 4806 a Fo(make-os-string)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(53)p Black 2213 4906 a Fo(make-placeholde)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(98)p Black(,)p 0 0 1 TeXcolorrgb 26 w(101)p Black 2213 5006 a Fo(make-proposal)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black Black 2109 5255 a(158)p Black eop end %%Page: 159 167 TeXDict begin 159 166 bop 0 TeXcolorgray Black Black Black 291 523 a Fo(make-queue)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(41)p Black 291 623 a Fo(make-record)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(45)p Black 291 723 a Fo(make-record-typ)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 291 823 a Fo(make-regexp)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(145)p Black 291 923 a Fo(make-shared-arr) o(ay)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(43)p Black 291 1023 a Fo(make-signal-que)o(ue)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(133)p Black 291 1122 a Fo(make-sparse-vec)o(tor)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(41)p Black 291 1222 a Fo(make-string-inp) o(ut-)o(po)o(rt)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(51)p Black 291 1322 a Fo(make-string-out)o(put)o(-p)o(or)o(t)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(51)p Black 291 1422 a Fo(make-string-tab) o(le)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(50)p Black 291 1522 a Fo(make-symbol-tab)o(le)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(50)p Black 291 1622 a Fo(make-syslog-mas)o(k)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(148)p Black 291 1722 a Fo(make-syslog-opt)o(ion) o(s)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(146)p Black 291 1822 a Fo(make-table)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(50)p Black 291 1922 a Fo(make-table-immu)o(tab)o(le)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(50)p Black 291 2022 a Fo(make-table-make) o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(50)p Black 291 2122 a Fo(make-text-codec)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(88)p Black 291 2221 a Fo(make-time)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(141)p Black 291 2321 a Fo(make-tracking-i)o(npu)o(t-)o(po)o(rt)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(51)p Black 291 2421 a Fo(make-tracking-o) o(utp)o(ut)o(-p)o(ort)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(51)p Black 291 2521 a Fo(match)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(79)p Black 291 2621 a Fo(match-end)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(79)p Black(,)p 0 0 1 TeXcolorrgb 26 w(145)p Black 291 2721 a Fo(match-start)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(79)p Black(,)p 0 0 1 TeXcolorrgb 27 w(145)p Black 291 2821 a Fo(match-submatche)o(s)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(79)p Black 291 2921 a Fo(match?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(145)p Black 291 3021 a Fo(maybe-commit)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(95)p Black 291 3121 a Fo(maybe-commit-an)o(d-b)o(lo)o(ck)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(98)p Black 291 3220 a Fo(maybe-commit-an) o(d-b)o(lo)o(ck)o(-on)o(-q)o(ueu)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 14 w(98)p Black 291 3320 a Fo(maybe-commit-an)o(d-m)o(ak)o(e-)o(rea)o (dy)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(98)p Black 291 3420 a Fo(maybe-commit-an)o(d-s)o(et)o(-c)o(ond)o(va)o(r!)p Fr(,)p 0 0 1 TeXcolorrgb 14 w(96)p Black 291 3520 a Fo(maybe-commit-an) o(d-w)o(ai)o(t-)o(for)o(-c)o(ond)o(va)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 623 3620 a(96)p Black 291 3720 a Fo(maybe-dequeue!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(42)p Black 291 3820 a Fo(maybe-dequeue-s) o(ign)o(al)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(133)p Black 291 3920 a Fo(maybe-dequeue-t)o(hre)o(ad)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(98)p Black 291 4019 a Fo(maybe-obtain-lo) o(ck)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(97)p Black 291 4119 a Fo(maybe-queue-hea)o(d)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(41)p Black 291 4219 a Fo(memq?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(38)p Black 291 4319 a Fo(modify)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(27)p Black 291 4507 a Fo(n=)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(38)p Black 291 4607 a Fo(name->errno)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(149)p Black 291 4707 a Fo(name->group-inf)o(o)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 291 4806 a Fo(name->signal)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(131)p Black 291 4906 a Fo(name->user-info)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 291 5006 a Fo(negate)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(77)p Black Black Black 1764 523 a Fo(neq?)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(38)p Black 1764 623 a Fo(never-rv)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(99)p Black 1764 723 a Fo (new-external-even)o(t)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(123)p Black 1764 823 a Fo(new-external-even)o(t-)o(uid)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(123)p Black 1764 923 a Fo(no-op)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(38)p Black 1764 1023 a Fo(no-submatches)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(79)p Black 1764 1123 a Fo(null-list?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(38)p Black 1764 1223 a Fo(null-text-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 1764 1414 a Fo(obtain-lock)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(97)p Black 1764 1514 a Fo(on-queue?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(42)p Black 1764 1614 a Fo(one-of)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(78)p Black 1764 1714 a Fo(open-directory-st)o(re)o(am)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(136)p Black 1764 1814 a Fo(open-file)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(136)p Black 1764 1914 a Fo(open-pipe)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(143)p Black 1764 2014 a Fo(open-socket)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(55)p Black 1764 2114 a Fo(open-syslog-chann)o(el)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(149)p Black 1764 2214 a(OS)28 b(string,)p 0 0 1 TeXcolorrgb 27 w(53)p Black 1764 2314 a Fo(os-name)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(135)p Black 1764 2414 a Fo(os-node-name)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(135)p Black 1764 2514 a Fo(os-release-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 1764 2615 a Fo(os-string->byte-v)o (ec)o(tor)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(54)p Black 1764 2715 a Fo(os-string->string)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(54)p Black 1764 2815 a Fo(os-string-text-co)o(de)o(c)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(54)p Black 1764 2915 a Fq(os-string-thing)8 b Fr(,)p 0 0 1 TeXcolorrgb 27 w(53)p Black 1764 3015 a Fo(os-string=?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(54)p Black 1764 3115 a Fo(os-string?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(53)p Black 1764 3215 a Fo(os-version-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 1764 3405 a Fo(p)p Fr(,)p 0 0 1 TeXcolorrgb 28 w(40)p Black 1764 3505 a Fo(partition-list)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(39)p Black 1764 3605 a Fo(partition-list!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(39)p Black 1764 3705 a Fo(placeholder-set!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(98)p Black(,)p 0 0 1 TeXcolorrgb 27 w(101)p Black 1764 3805 a Fo(placeholder-value)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(98)p Black(,)p 0 0 1 TeXcolorrgb 27 w(101)p Black 1764 3906 a Fo(placeholder-value)o(-r)o(v)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(101)p Black 1764 4006 a Fo(placeholder?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(98)p Black(,)p 0 0 1 TeXcolorrgb 27 w(101)p Black 1764 4106 a Fo(port->fd)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(144)p Black 1764 4206 a Fo(port-is-a-termina)o(l?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(144)p Black 1764 4306 a Fo(port-terminal-nam)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(144)p Black 1764 4406 a Fo(port-text-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 1764 4506 a Fo(prefix)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(27)p Black 1764 4606 a Fo(pretty-print)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(40)p Black 1764 4706 a Fo(primary-category?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(85)p Black 1764 4806 a Fo(process-id->integ)o(er)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(130)p Black 1764 4906 a Fo(process-id-exit-s)o(ta)o(tus)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(130)p Black 1764 5006 a Fo(process-id-termin)o(at)o(ing)o(-s)o(ig)o(nal)o Fr(,)p 0 0 1 TeXcolorrgb 15 w(130)p Black Black 1660 5255 a(159)p Black eop end %%Page: 160 168 TeXDict begin 160 167 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(process-id=?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(130)p Black 739 625 a Fo(process-id?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(130)p Black 739 726 a Fo(profile-data-end)o(ti)o(me)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(56)p Black 739 828 a Fo(profile-data-gcr) o(un)o(s)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 929 a Fo(profile-data-int)o(er)o(rup)o(tt)o(ime)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 1031 a Fo(profile-data-mem)o(or)o (yus)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 1133 a Fo(profile-data-run)o(ti)o(me)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(56)p Black 739 1234 a Fo(profile-data-sam)o(pl)o(es)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(56)p Black 739 1336 a Fo (profile-data-sta)o(rt)o(tim)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 1438 a Fo(profile-display)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(56)p Black 739 1539 a Fo(profile-display-)o(fl)o (at)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(56)p Black 739 1641 a Fo(profile-display-)o(ov)o(erv)o(ie)o(w)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 1742 a Fo(profile-display-)o(tr)o(ee)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(56)p Black 739 1844 a Fo (profile-function)o(-c)o(all)o(s)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 1946 a Fo(profile-function)o(-h)o(ist)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(57)p Black 739 2047 a Fo (profile-function)o(-m)o(emo)o(ry)o(use)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(57)p Black 739 2149 a Fo(profile-function)o(-n)o(onr)o (ec)o(cal)o(ls)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 2250 a Fo(profile-function)o(-o)o(ccu)o(rs)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 2352 a Fo(profile-function)o(-r)o (ecc)o(al)o(ls)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(56)p Black 739 2454 a Fo(profile-function)o(-t)o(ime)o(-c)o(umu)o(la)o(ti)o(ve)p Fr(,)p 0 0 1 TeXcolorrgb 1071 2553 a(57)p Black 739 2655 a Fo(profile-function)o(-t)o(ime)o(-s)o(elf)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(57)p Black 739 2756 a Fo(profile-function)o(-t)o (ime)o(sh)o(are)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(57)p Black 739 2858 a Fo(profile-thunk)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(56)p Black 739 2960 a Fo(proposal-active?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(95)p Black 739 3061 a Fo(provisional-byte)o(-v)o (ect)o(or)o(-re)o(f)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(94)p Black 739 3163 a Fo(provisional-byte)o(-v)o(ect)o(or)o(-se)o(t!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(94)p Black 739 3264 a Fo(provisional-car) p Fr(,)p 0 0 1 TeXcolorrgb 21 w(93)p Black 739 3366 a Fo(provisional-cdr)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(93)p Black 739 3468 a Fo(provisional-cell)o(-r)o(ef)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(93)p Black 739 3569 a Fo(provisional-cell)o(-s)o (et!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(94)p Black 739 3671 a Fo(provisional-set-)o(ca)o(r!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(93)p Black 739 3773 a Fo(provisional-set-)o(cd)o(r!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(93)p Black 739 3874 a Fo (provisional-stri)o(ng)o(-re)o(f)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(94)p Black 739 3976 a Fo(provisional-stri)o(ng)o(-se)o(t!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(94)p Black 739 4077 a Fo (provisional-vect)o(or)o(-re)o(f)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(94)p Black 739 4179 a Fo(provisional-vect)o(or)o(-se)o(t!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(94)p Black 739 4397 a Fo(queue->list)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(42)p Black 739 4498 a Fo(queue-empty?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(41)p Black 739 4600 a Fo(queue-head)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(41)p Black 739 4701 a Fo (queue-head-or-th)o(un)o(k)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(41)p Black 739 4803 a Fo(queue-head-or-va)o(lu)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(41)p Black 739 4905 a Fo(queue-length)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(42)p Black 739 5006 a Fo(queue?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(41)p Black Black Black 2213 523 a Fo(range)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(77)p Black 2213 623 a Fo(ranges)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(77)p Black 2213 723 a Fo(read-directory-)o(str)o(ea)o(m)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(136)p Black 2213 823 a Fo(read-symbolic-l)o(ink)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(140)p Black 2213 923 a Fo(receive)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(100)p Black 2213 1023 a Fo(receive-rv)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(100)p Black 2213 1122 a Fo(record)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(45)p Black 2213 1222 a Fo(record-accessor)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 2213 1322 a Fo(record-construc)o(tor)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 2213 1422 a Fo(record-length)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(45)p Black 2213 1522 a Fo(record-modifier)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 2213 1622 a Fo(record-predicat)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 2213 1722 a Fo(record-ref)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(45)p Black 2213 1822 a Fo(record-set!)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(45)p Black 2213 1922 a Fo(record-type)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(45)p Black 2213 2022 a Fo(record-type-fie)o(ld-)o(na)o(me)o(s)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 2213 2121 a Fo(record-type-nam)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 2213 2221 a Fo(record-type?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(46)p Black 2213 2321 a Fo(record?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(45)p Black 2213 2421 a Fo(regexp-match)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(145)p Black 2213 2521 a Fo(regexp?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(76)p Black(,)p 0 0 1 TeXcolorrgb 27 w(145)p Black 2213 2621 a Fo(release-lock)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(97)p Black 2213 2721 a Fo(relinquish-time)o(sli)o(ce)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(91)p Black 2213 2821 a Fo(reload-dynamic-)o(ext)o(er)o(na)o(ls)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(110)p Black 2213 2921 a Fo(remap-file-desc)o(rip)o(to) o(rs)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(144)p Black 2213 3021 a Fo(remove-current-)o(pro)o(po)o(sa)o(l!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(95)p Black 2213 3120 a Fo(remove-director)o(y)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(138)p Black 2213 3220 a Fo(remove-duplicat)o(es)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(39)p Black 2213 3320 a Fo(remove-signal-q)o(ueu)o(e-)o(si)o(gna)o(l!) o Fr(,)p 0 0 1 TeXcolorrgb 22 w(133)p Black 2213 3420 a Fo(rename)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(138)p Black 2213 3520 a Fo(repeat)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(78)p Black 2213 3620 a Fo(reverse!)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(39)p Black 2213 3807 a Fo(scalar-value->c)o(har)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(83)p Black 2213 3907 a Fo(scalar-value?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(83)p Black 2213 4007 a Fo(select)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(100)p Black 2213 4107 a Fo(send)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(100)p Black 2213 4207 a Fo(send-rv)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(100)p Black 2213 4307 a Fo(sequence)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(78)p Black 2213 4407 a Fo(set)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(77)p Black 2213 4507 a Fo(set-close-on-ex)o(ec?)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(144)p Black 2213 4607 a Fo(set-condvar-has)o(-va)o(lu)o(e?)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black 2213 4707 a Fo(set-condvar-val)o(ue!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black 2213 4806 a Fo(set-current-pro)o(pos)o(al)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(96)p Black 2213 4906 a Fo(set-effective-g)o(rou)o(p-)o(id)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 2213 5006 a Fo(set-effective-u)o(ser)o(-i) o(d!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black Black 2109 5255 a(160)p Black eop end %%Page: 161 169 TeXDict begin 161 168 bop 0 TeXcolorgray Black Black Black 291 523 a Fo(set-environment)o(-va)o(ri)o(ab)o(le!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 291 623 a Fo(set-file-creati) o(on-)o(ma)o(sk)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(137)p Black 291 722 a Fo(set-group-id!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 291 822 a Fo(set-i/o-flags!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(144)p Black 291 922 a Fo(set-port-text-c)o(ode)o (c!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 291 1021 a Fo(set-port-text-c)o(ode)o(c-)o(ac)o(cor)o(di)o(ng-)o(to)o(-bo)o(m!)o Fr(,)p 0 0 1 TeXcolorrgb 623 1121 a(87)p Black 291 1220 a Fo(set-user-id!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(134)p Black 291 1320 a Fo(set-working-dir)o(ect)o(or)o(y!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(136)p Black 291 1420 a Fo(shared-binding-)o(is-)o(im)o(po)o(rt?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 291 1519 a Fo(shared-binding-)o(nam)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(108)p Black 291 1619 a Fo(shared-binding-)o(ref)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(107)p Black 291 1719 a Fo(shared-binding-)o(set)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(108)p Black 291 1818 a Fo(shared-binding?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 291 1918 a Fo(signal-name)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(131)p Black 291 2017 a Fo(signal-os-numbe)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(131)p Black 291 2117 a Fo(signal-process)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(133)p Black 291 2217 a Fo(signal-queue-mo)o(nit)o(or)o(ed)o(-si)o(gn)o(als)o Fr(,)p 0 0 1 TeXcolorrgb 15 w(133)p Black 291 2316 a Fo(signal-queue?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(133)p Black 291 2416 a Fo(signal=?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(131)p Black 291 2516 a Fo(signal?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(131)p Black 291 2615 a Fo(sleep)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(91)p Black 291 2715 a Fo(socket-accept)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(55)p Black 291 2814 a Fo(socket-client)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(55)p Black 291 2914 a Fo(socket-port-num) o(ber)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(55)p Black 291 3014 a Fo(sparse-vector->)o(lis)o(t)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(41)p Black 291 3113 a Fo(sparse-vector-r)o(ef)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(41)p Black 291 3213 a Fo(sparse-vector-s) o(et!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(41)p Black 291 3313 a Fo(spawn)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(91)p Black 291 3412 a Fo(string->os-byte)o(-ve)o(ct)o(or)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(54)p Black 291 3512 a Fo(string->os-stri) o(ng)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(53)p Black 291 3611 a Fo(string-downcase)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(86)p Black 291 3711 a Fo(string-end)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(77)p Black 291 3811 a Fo(string-foldcase)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(86)p Black 291 3910 a Fo(string-hash)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(50)p Black 291 4010 a Fo(string-output-p) o(ort)o(-o)o(ut)o(put)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(51)p Black 291 4110 a Fo(string-start)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(77)p Black 291 4209 a Fo(string-titlecas)o(e)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(86)p Black 291 4309 a Fo(string-upcase)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(86)p Black 291 4408 a Fo(submatch)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(79)p Black 291 4508 a Fo(subset)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(27)p Black 291 4608 a Fo(subtract)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(77)p Black 291 4707 a Fo(symbol-hash)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(50)p Black 291 4807 a Fo(sync)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(100)p Black 291 4907 a Fo(syslog)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(148)p Black(,)p 0 0 1 TeXcolorrgb 26 w(149)p Black 291 5006 a Fo(syslog-facility)o(?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(147)p Black Black Black 1764 523 a Fo(syslog-level?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(147)p Black 1764 623 a Fo(syslog-mask-all)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(148)p Black 1764 723 a Fo(syslog-mask-upto)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(148)p Black 1764 823 a Fo(syslog-mask?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(148)p Black 1764 923 a Fo(syslog-option?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(146)p Black 1764 1023 a Fo(syslog-options?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(146)p Black 1764 1123 a Fo(system)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(54)p Black 1764 1314 a Fo(table->entry-list)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(50)p Black 1764 1414 a Fo(table-ref)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(50)p Black 1764 1514 a Fo(table-set!)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(50)p Black 1764 1614 a Fo(table-walk)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(50)p Black 1764 1714 a Fo(table?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(50)p Black 1764 1814 a Fo(terminate-current)o(-t)o(hre)o(ad)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(91)p Black 1764 1914 a Fo(terminate-thread!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(92)p Black 1764 2014 a Fo(text)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(78)p Black 1764 2114 a(text)28 b(co)r(dec,)p 0 0 1 TeXcolorrgb 28 w(87)p Black 1764 2214 a Fo(text-codec-decode)o(-c)o(har)o(-p)o(ro)o(c)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(88)p Black 1764 2314 a Fo(text-codec-encode)o(-c)o(har)o(-p)o(ro)o(c)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(88)p Black 1764 2414 a Fo(text-codec-names)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(88)p Black 1764 2514 a Fo(text-codec?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(87)p Black 1764 2615 a Fo(thread-name)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(92)p Black 1764 2715 a Fo(thread-queue-empt)o(y?)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(98)p Black 1764 2815 a Fo(thread-uid)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(92)p Black 1764 2915 a Fo(thread?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(91)p Black 1764 3015 a Fo(time->local-date)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(142)p Black 1764 3115 a Fo(time->string)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(141)p Black 1764 3215 a Fo(time->utc-date)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(142)p Black 1764 3315 a Fo(time-seconds)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(141)p Black 1764 3415 a Fo(time<=?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(141)p Black 1764 3515 a Fo(time=?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(141)p Black 1764 3815 a Fo(time>?)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(141)p Black 1764 3915 a Fo(time?)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(141)p Black 1764 4106 a Fo(undefine-exported)o(-b)o (ind)o(in)o(g)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 1764 4206 a Fo(undefine-imported)o(-b)o(ind)o(in)o(g)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(108)p Black 1764 4306 a Fo(union)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(77)p Black 1764 4406 a Fo(unlink)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(138)p Black 1764 4506 a Fo(unload-dynamic-ex)o(te)o(rna)o(ls)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(110)p Black 1764 4606 a Fo(us-ascii-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 1764 4706 a Fo(use-case)p Fr(,)p 0 0 1 TeXcolorrgb 25 w(78)p Black 1764 4806 a Fo(user-id->integer)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(135)p Black 1764 4906 a Fo(user-id->user-inf)o (o)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 1764 5006 a Fo(user-id=?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(135)p Black Black 1660 5255 a(161)p Black eop end %%Page: 162 170 TeXDict begin 162 169 bop 0 TeXcolorgray Black Black Black 739 523 a Fo(user-id?)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(135)p Black 739 623 a Fo(user-info-group)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(135)p Black 739 722 a Fo(user-info-home-d)o(ir)o (ect)o(or)o(y)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 739 822 a Fo(user-info-id)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(135)p Black 739 922 a Fo(user-info-name)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(135)p Black 739 1021 a Fo(user-info-shell)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(135)p Black 739 1121 a Fo(user-info?)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(135)p Black 739 1220 a Fo(utf-16be-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 739 1320 a Fo(utf-16le-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 739 1420 a Fo(utf-32be-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 739 1519 a Fo(utf-32le-codec)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(87)p Black 739 1619 a Fo(utf-8-codec)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(87)p Black 739 1802 a Fo (vector-binary-se)o(ar)o(ch)p Fr(,)p 0 0 1 TeXcolorrgb 21 w(74)p Black 739 1901 a Fo(vector-binary-se)o(ar)o(ch3)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(74)p Black 739 2001 a Fo (vector-delete-ne)o(ig)o(hbo)o(r-)o(dup)o(s)p Fr(,)p 0 0 1 TeXcolorrgb 14 w(69)p Black(,)p 0 0 1 TeXcolorrgb 19 w(73)p Black 739 2100 a Fo(vector-heap-sort)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(72)p Black 739 2200 a Fo(vector-heap-sort)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(72)p Black 739 2300 a Fo (vector-insert-so)o(rt)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(73)p Black 739 2399 a Fo(vector-insert-so)o(rt)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(73)p Black 739 2499 a Fo(vector-merge)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(69)p Black(,)p 0 0 1 TeXcolorrgb 26 w(71)p Black 739 2599 a Fo(vector-merge!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(69)p Black(,)p 0 0 1 TeXcolorrgb 27 w(72)p Black 739 2698 a Fo(vector-merge-sor)o(t)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(71)p Black 739 2798 a Fo (vector-merge-sor)o(t!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(71)p Black 739 2897 a Fo(vector-quick-sor)o(t)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(72)p Black 739 2997 a Fo(vector-quick-sor)o(t!)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(72)p Black 739 3097 a Fo (vector-quick-sor)o(t3)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(73)p Black 739 3196 a Fo(vector-quick-sor)o(t3)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(73)p Black 739 3296 a Fo(vector-sort)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(69)p Black 739 3396 a Fo(vector-sort!)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(69)p Black 739 3495 a Fo(vector-sorted?)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(69)p Black(,)p 0 0 1 TeXcolorrgb 27 w(71)p Black 739 3595 a Fo(vector-stable-so)o(rt)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(69)p Black 739 3694 a Fo (vector-stable-so)o(rt)o(!)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(69)p Black 739 3877 a Fo(wait-for-child-p)o(ro)o(ces)o(s)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(130)p Black 739 3977 a Fo(wait-for-externa)o(l-)o(eve)o(nt)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(123)p Black 739 4076 a Fo(with-nack)p Fr(,)p 0 0 1 TeXcolorrgb 24 w(99)p Black 739 4176 a Fo(with-syslog-dest)o(in)o(ati)o (on)o Fr(,)p 0 0 1 TeXcolorrgb 22 w(148)p Black(,)p 0 0 1 TeXcolorrgb 26 w(149)p Black 739 4276 a Fo(working-director)o(y)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(136)p Black 739 4375 a Fo(wrap)p Fr(,)p 0 0 1 TeXcolorrgb 26 w(99)p Black 739 4558 a Fo(x->os-byte-vecto)o(r)p Fr(,)p 0 0 1 TeXcolorrgb 22 w(54)p Black 739 4658 a Fo(x->os-string)p Fr(,)p 0 0 1 TeXcolorrgb 23 w(53)p Black Black Black Black 2109 5255 a(162)p Black eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF scheme48-1.9/doc/manual.pdf000644 004306 005702 00002270140 12074535532 016551 0ustar00sperberPUStaff000000 000000 %PDF-1.5 %ĞÔÅØ 2 0 obj << /Type /ObjStm /N 100 /First 800 /Length 1104 /Filter /FlateDecode >> stream xÚ•UMoÜF ½ï¯à­IÛšÍh€ @´IHëä–‹¬•k5Û‘dcÿ}WÒÚIêñ°,®D>’o(Aå¤Ò’YI"£Â’P$nÁ20 ü9’‚¤+)Ij˜9I«H’nh@ÌH±©HAJ“²é¬ U —&„êܬVdÏI;Ü å7G¹.(GqÀÌ`æš jÉ-Ô’d ƒdE±2’¬Â¯œ¬Á CuGjµhHó{ô…5¹L“µä»‘Ó– AκU ~å Õ^d(P"c— wçnP‰#Âp(îøá@¶È eW@òEH¦GdÀ”q)/À·Pè[0å  &]gv€‚#¯sC€.ôJ€|¡¹Ğ/rş‡& ğ0 FÅe¸ŒAt‹<0,?²åZ0 aù1Æ!¬1+¡yÜó´ü ~G`,¢000Ád îÍ Á™ap;pFq 0À3$3¡VC=€Ç˜dÆe`P2cz «Š›Ã°ä\ üğƒÁO,ËŸlp-,Ä\¬P& ÃEY:Ée’TL?ëU1‡˜T† kî#“š“b€R:²¶\ë:s«7oèâš.>„Ï.ŞÓ«ê¶Ü >şz._ÓÛ·«WïB7ønè_?çy.&Ç?»!†õX MèwQ¿ô>şÒS=6kÿ£sï(çrÁ~¶Û²[SÛtÊXÛÿ/é1P~¸‹¡ò}b*FM1¿¯›¡éê”§mÕ=ºëfAv›¦cy˜J[võÒRÁê˜ [¦¬Rëc#eCÒqıǦ¾õñ,Ä5¸=´Ÿ 3G™ì&ÙÏÛø.¹(õ£v¡.œåÂæ;*¶ãP¾ÄcñÌæ¢~ÜíBR±G?Mº+«»´fõQæXÛXz}ò«–?]ÁM 7_4ôÁw>b·^ˆ‘ËÖÁØŸíbÓ¥¿Pù¢ËfxhzOğ5Fv~¢ ™nVÓågèOCLºÏİ_ïÊØŸ°¨É·mÒÏ.‡Ùi~füc¹O:ºeU~zgÃy™ÕUx8;|·¨¬Xy4Š'BȧiØï^PǬº?š7X<5L?8c÷˜ôf˜#ÿ³®sk endstream endobj 203 0 obj << /Type /ObjStm /N 100 /First 856 /Length 1226 /Filter /FlateDecode >> stream xÚ•VMoÜ6½ï¯˜crh,~“@ ˆ›Ö@ƒ^=kµô®P­¤R’÷×÷VÚ4‰#9[\jŞã̼GR2“”‘Ì,)…‡#íHŠŒ<&… àñĞ$”ÀÓĞüÛ“ğü;𤔸s)A ù·%éÏ‘ôøS) :p(…X¥IYƒ§!ø·'­ø} ­ñÔIøÔŠ4ãµ%#Ì ŞI“‘áôŒ ›a=£Éó†¬AÆ“ ÈÏrx+ɳ‘V‘s˜·ÕgyÎÇ¡ZüI¼óë8Mkq†‚xz´<õf/1Ğ`ô ËeZ"3c½BpCB†+2Âñ ÚÈ•}ä&H4WÈñ˜9PA ¡dب Ì )#”÷€YÈ ¡%À¬À¬-bF…‚ÃÌF Àl,˜‘“0Áo*Ó ÂÀ¡“°(ZAá«f§±:²Z*h%<8”bñ ƒÙ[ Ğzáƒİ(è%WLVŠÁ! „d"  š‰Ñ(dÆ¢H™µ2Ï3­‡óé‚rRğZN²ç7]BDÅÂIn+Ë*T"¹Ê±ÇØ|XX2™‚‚pÊ‚°úìÙ³\”ÿ+m2¤Øb𣽄¤›İ°PP²õoËBAÉÍÔPPZï7¯_ÓÕ–®~i¦],ú²©_™WB¾¤7o6/~Í»#õù®ŠİË¥puÿ½I=ÅO}¬;¼X†è3ä}5”{Ú•õ¾¬ËsF|ÜR×§Õh{ŞcUQÑœNy½_F¸ ÑÅ~9ÔOõ¦æ¾¬Êbp8È‹Ôttß$ú'•=PT5MûÔBÃîÿğWâLpÓÇ”÷q=~ï6î‡âá“xÛø÷ë"RÿØÆgd5 ¸}¬‹cjêf訛(ÄüùS~j«ç&=¯ã}YsïºL×Í ¶0BÜÃû¸$›Ìf;¤³Ve×w,= ¦IkKÊlÖí:v塦4¬× ¼X«€~)Rׯ¢¼/‹œcÖñ“šo«C—OeAmjÚˆ*–7±³mC•'ìã6Åî{ù‹UÅ\ê»cò>…<ı3`S±oa¡&=½¾BLå½kNmÓ•}ü±4'ϾË;ô•O©¾|(ûÇuàd×í°;å}qŒg'Œã•í/§··ïoȰ8æ-ú5Ûûº\6¦ı¦ÕçTúc,Óhên ,¿Ö‰±çãç¦Zn#(¾ûÙȹ?¸à$úÍ>Ö=¶Â\s÷xÚ5ÕÍ…C}rQå0ͼ­Fº‚]qÊÛvùn±—“Šâ[f)r²Í­½İ.…Mâß\}\iÅEı;ܲ£ÚE· ‘Ÿ!?zÜZß9¾ÄÎ}K1OÁ~qİ Ğ]ë|¨ğIPòtWgÿOˆ»#VZº§İÅ}sJ£tMݧ¦ªÆ×)æcgÿãÙO:‚jù6wsC®ãn8x¹ ,Ï`ÂQ{HùiqõÉ>Û¾<áRÁô‹!%´éq hæ³K£kòT®|œ¹Ù\†~È+—E5tk7‰ûì´ßğ9Ô­Ï·V•ñØTû˜sšÔşsú*†®oNØÏçO‰òßiSîp2å#lÿ²ıÁk endstream endobj 404 0 obj << /Type /ObjStm /N 100 /First 862 /Length 1321 /Filter /FlateDecode >> stream xÚ•VMoÛF½ëWÌ1>Ôá~qw @êiĞ âèuE­,W )Åî¯ï~Ȳ ‹®&¹Ë÷fæ½Ù¡t¦(#YRG¹ -y‡‹$!=®†Dãš“püìIJ<ËŒ¤X*’Î.´Ô$'A¦ ®ã” åùŠô¼g®X³¼îÉ<댌â«"c³…ÖšŒçgK¹Bì, ›1‡$+ùÙͱor²üÆ“Cl5‡{+r>_è\“çrK÷:wä9_+HdÀ¢àLó *Î\Ö§'ğ‡ŞÂªÍ)Üx”í4d+7ÄÎáÿ4² 2ifÅ[ÌÊ¡h"z5<˜µqd20k `‰0Ò.LfÃjÀao9G,ƒœDBÃ&åHܰK6c)Ál¡…OÂB@ƒ „µ„3ÙÂÀ*áoÙj ˜ğPÒÀ-ᑼT2ËÀ¿dÆfÀ0™q†pL¢B2°L"â,%` ƒ÷¤ì·,w‰À#©Ğ/¾IʼnÁ8©,OjUÉ}cà—d£ $–¬{‘«²WşI‹ ”ÆáÊ\B!s…èØ–9¿e ”–ƒÒjEıÒ:µ0pP:¨nà t(× ~é òR:ÏfE ”«€ƒhw¨,Ur8¨2è—ƒKe¹Z¼{Gooèí§ô#ÑÛô¦EW¦úÒ^º zÿ~ñæ*ÕžibİÑõ ˶kBÿJ{ñ¼_à/ÅÀğ{hË‚À°ŠÿÒ¾¥"m—eºÔÌsÈãæ¾.6Mª{ø&Ôu¬æ±ê9öš2,«8ÖøG¹ißÍ¿oF¹ R—è¦ØÄmD¥P®İ%”^ñ9JÙu±™´¾.ïÊúv£+C½¢«‹M:JüáÊŠë¢u(ʪìÊ™ œ°c4øº/º}ó àèÉÕaËù©> ?f{‚±£'ŸB³ ·,PU »}­M\dž¥¢´üëí¹Ú§ÖØ„&®µB2sÈ©ì?îv©éNä>„j[6ïj–C>å¸:|³j:_Û];ğ¨*k4ÜŒç$˜8BU Y¬÷õp8iݤíË©Æ6ÿxÏ^T¥ÀÑÏ!ÆFÿP±mOô[…. Qçô3“˜-mê®È#àŽg“B\Û “ÖSÆ»&qõBË9òÇØ'BŸ=¤v`øÌòì˯²ÛP·‰İ&†İL-vRí{¼-[P1Ïm•–¡z87í,ɨä—T·Ü¯œM“t‹°®‰¡Ûò'aZŞ£{x;½‚iì·ë¸MÍ=%¸‚ÒW³°±éşŠq74zßm3 ÇåË9‹!´Šıøa•[ ¦³1N럧İßDÌúUŸÇ@xÀF†²§ˆwEÜ4S¼ƒ»5tãÙ4‡F@ä9<;„³‡ó7Lß>‡G\Ç\O8ÇÆúBV/0Î#1fö³nÃúô”±=ÛP4é¬3âùœxTgn“:şâÖåmıÛãÜÄ¾Óştö1Ù·¯7Ÿÿ~9#?)ıG »¦Üâë|˜9¨şáósÓw¹lùgyߪXœKtúšB’PÍewüŠöõSûJĞã+,h^ šfO¾‹¯…éiX±<œQê±ä±>”øİȃn&œzêV¹âDë²xGêèÑCÀ³¿TH=M" ñ¾1n›´ß…Œ“ôëÍt¤6eŸåû‰ÖG= endstream endobj 682 0 obj << /Length 324 /Filter /FlateDecode >> stream xÚu’½NÃ0…÷>…G{ˆñœEYÒlˆÁMoIDšTv:ğö8q@ª*¦+ùÜsÎgË }"†¶öÏ|¬7/Ü Îi¡µ@õ i©6R9£…T¨>¢w\·@2) ~šñ|éaòQï¢W#SÁµš½™aT*2ó¸MŞ}C¢±…óÁV6ÍŠp 'ğ04«Rºa^½º~ ¿3šr«o³O£O\zpaÌq\˜PÆ™¤F(”)I­ÔÉSu(Ç­óÇä}ƒ>À7É„4ïÆÁMmY¤ ,‚Äe÷E„ÅkÅşs ş°ÎTh©å±VÒB­„¥óÍ5¤´'arC-Bæ¸ÍS ­ÜÆóŸºˆGğ‘w±—£÷]XŠTN#Ó}ôiµ&–ã«ï†9¤àl§n½ÔÖ…Ãú}¿ûÏõæ¶å3 endstream endobj 690 0 obj << /Length 287 /Filter /FlateDecode >> stream xÚuQ±NÄ0 İï+²áH4×&M›qHÌ]b4×V\S‰¤ƒ¢ &¿è=ç=Û%XÉîvå?õºÛí†Ä¡‘ ëN¬2Zè¶fn…Tšu={„+^ÈFÃyò.¡fËe ïôˆö•KDk :.ë[¸DÜ&>1rÔŞ/X‘Î}~ɺàÜLÈfÓev>ùF^ÁE–GôÆôäOİ=UT•8è¯äç3/”R€i¨!Ä)¾$ı8ù8ë{«Ïl #zdA £ $x¦¨ƒñş;ƒH!şl·ÚЦ”¬˜­2”íÎÆzöG©œá÷\WĞÛ9M­´Ü­ÛXm¯XÔJÔh§¥%‚ÏO¦iÓqÛí>§ä‚÷ endstream endobj 696 0 obj << /Length 1270 /Filter /FlateDecode >> stream xÚÍWÁr£8½ÏWp\° ¶wO+±fğ‚H&µ³UC@±©±! 8©ùûmP ‡™ãh¡néõ{O²Ñ•­¢+·t|.؇ë›ÑTM´élj(ìY1tK›YsÅœN5sn!¶tµà/õK5/ª§£,i~‚h¦ò¨ˆ²˜ku5lÃĞæ¦Õ…=Õh_æu4i¨ß,¹X!/¢xÃ3H¬¢B ğuğRäH|M“4Ûâ";.æëU¸Í?ǼŠê¾@­Jò R]Ğ<¼ÆTàuò—ïEºİUM3æD³¦Š®Åd,T2&gõÑ6¶,eØ&}Ñ Säuö1L͘a»&ɘϬáH×ÁĞ™ªŸÆ»¨HÄà¾/ùw7d×Á§<‹*àó9/İCkªMæÓ.é?hB7~© ™ö‹ÌÇ?o¤'zÚŞïEf¶Ä˜ƒw_yÒÚi4yDÏ“´¬Šô騸¶Kx^)Δù±ˆùEÖSšE² î:Ô¶®ã·´Ú‰¨¶œ|“««ø!OÒç4n\†õQ;½ğâVÇıÀ¸`Z9 +q b¿ÏßW×Ã8Ï’´^·ìÛ¸İåÀ«ßúΛ¡I‡œ3…ÔæÏóD.y,+)AI[œÑSşÚÖœû a@œY^¥1—ÜV»ìS¹‡ÄrÖoW¨}Åû(=ğÕ·ÿèg4ÈÖ.­ğ/9J¦şÇLtûªó{¼“äñ~oÄİØnq-íC†‡¨âE ×uŸ…O¥ÅuÎqŸ(èÍ1ŠÂd]x—ƒÇG8|E)ñ J@&JÇÛ3/IÊÅ“g ÔñîQ†yÅÛˆ*~r{%K ùW¹î3”^jWæÏÕ[{å=!¦^x\_ r«´½MŠúRÈÎ|O×Ù]ÇV4ÙwÃlŸˆ‘|»ñ½{º$K1Z<"·+L³C¶ò|ÌıúÕdõǘà.e€µäóÆ'&z~Ÿ‡èİfMå€É·]FI€î¦®³—Ô½Åñ"d"p= Öô2Yϼ« Ğ?X¾‰w#²îˆï¬ Í^Ğ5e½İPæ¶-İ@Ob´}FpmãëMèo¼@ò'ù^ÒÀYÛô,{ÿàPW¶ˆ$Ş› Vözı3YD²b/Ö䤔eI}â°–b9ìSÇuÀÀųƒ qh;"Ÿ ğkûW­ÄÍÓñÜ€üB!äâö}KæİÔû¤íAğBƒgĞ'w-ERÅ \Œ²! ·· º(âßS‡¿ã^ëT\# H/+K›Ùp†\J¾]„=¹…ºŒø~¸aÔsüƒ³ò@aIœ {./,ç¹'ızĞ€<ÿ±‹¼Ö¿q/Â|XHó%V%æÛ­æS‡õ׈˜ç÷ªÔíKn×ô–¸é.áÕ@h@NØ> Ú:ê^¸õÁ–Í…·g ”g fú>Ş]|W§£…»â’öò¶ ¼Ûs@ϯ…“ۜչϻ İÏ0ş¸Ná# šši!Æ4M;5„}øo|¡h endstream endobj 735 0 obj << /Length 1042 /Filter /FlateDecode >> stream xÚíšÁrÛ6†ï~ ÎäPê X€pMš¦î$3iªœ’h ¦9¥D$ÉÛwA@´-R¶èzbIÓeY^Bÿş»4 ò€ïΈ¿¾^œıü+ˆx$¤ Áâ2  ‰’D±(|k| ßTë£a£İ¥ıµøƒ€ÆF²/>½³±T "•@bC‘`@1¿\¸ âV|™ƒ"B…ÅÍà6@ĉGgsqxj6Çë²Íšï³:!2Æ¿Ø/2¸ÈŸkm~ª1¬daŞK=Œ HvÂwXP)΃9E <ñ÷‰ğ;P€hV«t½Ä{1–ÅZÛW,LMŞ®È\‚‹0šÍcBæÂ•ÂËÖ:i,yi“~c[Ğ¡40†æÚn3ˆ0Ó5n +3 ¢øSÖüBÄÆP±É¨˜GõvY4Å:ߪ4„ggÈÀ{†íaÓæ²2˜uÙàÈ3x†rØôxÈ'Ó‹=½_Š:­k½šá½(õàt*š¦fıXn½ş'Û+k«Wé•¿ş^7ˆq ùñÿùf¹ Ïí}qaRó}f±)*õo•µÜ߯æÊÂkOx§\߬ÖWæïBNàpù°&½q@Ÿø§nlg<œ¡œ¤C|(×Ädá’âùº¾îd^»![—c+¯üzØë‰“éR:pÓMí˜aå&] sQÀ‘:9µ(Á€Hèu[”Ë^ğ‹Ušk«øHì¡ç‘ ±‹uä>éºjMæû¡Zí°»„³åÓõU¦*9‡âzt`:ptWF§c.”ßÈé?Bd“å‹2ñ¶h|~UuÖšÖs%NdÄü$tû W¸®|Ø<§ê%¹kÒœ"RˆŸ> stream xÚå›MW£H†÷ş –dRŸPKÛní™ÓsÆVw=³@R& d ĞößOU`"œI*Æ1¤WQƒy|ï½ï½· œ™8—'A÷8ÀêõÅõåɧۓӋÈa>£:·÷€Àr( }ˆˆs;u~¸Ø'º_ÓÙœ ¯S.&BØ]†î´Îx9ùûö÷îfÎ1èúÁN˜±·üøÖ¯~kDØEÁÚå>9ùèà3ÆZFÔ0:/Ë4Kó™„Ü8ŸjRòÒƒºúêvôú”{‡„¶„[@¡tÃq>‘[¥I©Ù÷VRäÏjWi‘ë‹‹‰X]é+¯~(€ïüñ×T¸»T: Ñ‹L6–B‡QÂ˲0‘UÖËes±U/²"p(!5ˆX!a’¿ş2NÔßÿaB¨ÏúI¡`œñ#1a+L o&1}Nˤ.ËhÀ8‹ı„Ùïô²•Êæ)4Œª¬m ÊºÆ q¿¥w"i_\0DLŞ*2×û·X«æ«eøÀˆû’ç\Ä™íº’bdäòi·/jˆ>ö; >²<ñ¡Aw%xU©‚ñì-Eš«tP)zıb":våZXqC†Û§´¡ö”–Jd\çÓT—^>Ó¹…ª2‘ËuÒíI‘bøqÖÌV`– p ê¹â:0T…èÇ$ Ç’\÷¦´¶/¸YÆ¢Ü!„ãKdÛ‹Xö ä¥gàYÖ£EŠÚ‰±í/¾×¼*åÑ‘hï1¶ Ê™qStûÂÔîd\ÛOz„V(ÛÆæš'…˜ö8†Œİ™[kqcË¡Ï@ÏE³ÆGŒİo…òO^Æu¡É̘%Q½³®@U¡¯‰aìŒâC¡AìäÔ8bA JY:ùéô'ÕîØ¹¾Îy³·”×é¦ÃÕöËi¶şNL# ÜdKv„#I]¡•ÖĞğnxÕÎè's¦sPÚ´8Ú&>´º jĞ®yPü—s(¾’Ó(:şa ¬­1@šß•’•6 ùÏŠçåPŸJÆÏq(l‰]C°ÉyYšüv—æÓ4Ÿ•ı·ø‡LÄΣ¢‰ıycÆî•г¥0Œè/ct ²ƒHMµ˜ËFÖ¬rƒÒì8z±ğÍ-ÁöY.4àŠ¦n&*Ù=45¶Ø£ë´6;‡ "S4D¡ÌI6°oÅ;’^{]R;ˆLCü#NDaÌß}a<ß“H«n·iÕË~5Öµe\˜¢­{ÓV~3]9½€«« ü(òçš—ıV©á:_{÷õÕ>D°}ıÒßşÙz!’Mê%HÕôn|ͧuòkóeÛó]¯4ÙcÙåıSó<Ùª“£Ö%ji¦™Ú5|óæÂ\yQOÔÆV›EÃm`Y„¥v ‚¶ ˆñåg¼Xt±a€FVûD5 Ï\OEt‰|QÈ6³&ʃl(´÷µL­c´b–²àæ Sb òaG»_¡h‡á$ Zã/VüTZ¶Ó6s4 ı×:•’ñzŠíM Ôô_GWs”A5è3õ…9#&†NŸ"ÛíÊÁê Ûš Ôš@Ѻ¦«”öH˜Ú^ê3…°øÜŒÆZ¼í™N릾[Ä•,^®ı/ r»g†ÁbŒÂëñ„y ”ÉRÅü(Š4…ǵ×~¹=ù‚'w¶ endstream endobj 605 0 obj << /Type /ObjStm /N 100 /First 854 /Length 2143 /Filter /FlateDecode >> stream xÚµZMo9½÷¯Ğqfj}¢LâõN€]LØŒœvÓ»Ë(wñ¿ßÇjÚù°İåÍtª*I¯HŠ"Y]¹àJ¨.'4Íqq%&×2šìbÔ¶¸ÈÅEA›‚KAĞF—2£%—$-Jb—ZĽ‚U´ÍeÂ=³à>g—Æçâ(a~G| *p1–*9N´(Ä3æS+§ìš+¬Lñœñ,á§”Çæ ¹R‚åW¢p,…œp[”ÂNÆşêêØß\—"ÉU<+’]­Àv-‚§ˆ¼À½¼Sškº~p!€ ÇĞÀ¨’J ¯ªx_©ÍŤ"…@bÖÕÖŠ Æ`ˆ RÂ{äÉJ°¡‹u5 8\ËB2.ô}dÁ²K, K S%@Ü”õIqI£‹Nz'Pgª­@¡©¯Äà2˜-$F((9gШ8C޸ —G¡añY@J ùÜ bê)ˆÎªĞ]ĞYÍQ&¼ Ö@TëBEMj’’#QªPUÅ:ÅA7GÈY°$èV$1Ğ2W킚U {®,FtÜ Qm©œG£ÄЬ $ ˜h©ÈÆ ¹ª@"R„¼HÅ ¶;v\¡›²v‹E»ğS¡ l ÀÑ_SZ$®F¥²5±ÎRûQZØ•ÁV8Â’JY¼xá–'nùş]ï–Gî§›nµ]÷ß|ùÙıòËâ§ãõewãÎ6çî|= ³ÖİÍÏç}úğÕTw“lÊ­»ÙİÙÕôÄ´›øï~øs½¹¸çíäÄü…®[á]Ú1Òº«ş¿g—“ôÀzóG?\“óø«yWıù3„c’=¹½úĞ_®Wîr½ùó±Y÷Sd7áİúª—tt¶í&Ş"w*ĞI“cMêOàŞ¬»a¯—¿ïÕv£ŞvŸ.Ï×}¾º›ôí]c wR¹¹ì/Üg«õåz{»wŠ-ñïÃĞnõ ÙÇx'–7¿Ÿ¼şë†aÓï§e¢yå¶½;Y}ì ‚U?`E×ıæ¼Û¬ØêãÙõ¶şæ³­éåúÃ庿ή?Ş~økğøü`Ü©:ÿàŞºåñzûÛ{ùâÅbùîöºsË7gİbùªßl»Íöî'éĞÅòmwÓVİÍx>ŒşÕ¯Ï^öŸİ©Âé+-½_bÀ\Œ“qœÁÿ^õı>”÷Oö—Kmõ~À189]Ê1æşK›#ao¦\}Ö@RªD{iRB¾ÀЈ±‡è!Võê8©°¯M¥qw¾¥ƒÊã%_5¨â²âì Ç "sH$ÃX½Fù°UO&ˆäˆ¤àiQ $<¥šH€Jà®lEsŠÅ·)Íğáy Uóm‚jğ¸L)¦ÌÀ£F¯ù(ò_p–æ±Ç)ÅÈá}Òm‘õ'ø©Z…>ļׇÌ`¨™ª¯Œ6V ˜Ì‚SöÊ#ÏáCrFš¤µÈ¡ r{bϱM™Á‡dœm¤e£¦g‹"ğÉDæPM„³Ö-“%DY9E¨hJ53øÔàCX¤Æˆ aº&+Sª™Á‰¤Ê^ëY©à öœÓ‘CzH‚rÁ¼g2Λ•yzœÈ—t4ß×I+–G½¤LˆÎ´Î}KuB,28“F4ÀɇCaZ›ÒOˆ:“ITfPAmÄ<Ú <4¢ ‚¯ [qøµ©cu‘Ã/IÈyrl>ˆVi³<¥™8‡±†ˆ •FYd1)ÄSº‰38úˆh±iÓšv«ˆ§vṀø<ÊFsrQà&˜÷†3¸ùÈ„PVŠ6-쉰_ 4‡?‹“ĞÊ?bdw †ü¦Ä "sXˆ¦úqiXÜ7‹4Ad†P BZÖO TáHbl_™ ò¹Sır³¯ômÿ3+@I?lÈşrĞV€êà Pıá P¶ K¶ÊI¶Ê Y儬C6¬CV‰!«ÄUbÈ*1dxdxlxlxlxlxlxlxlxlxlxlxÅğŠáÃ+†W ¯^1¼bxÅğŠá‰á‰á‰á‰á‰á‰á‰á‰á‰á‰áYqWêa+OI} Î(ki[¯±~ E ʆÈĞó¥-uè÷Ü> stream xÚİšKs£8ÇïùñÁ$!$3GekR³{k³{±³‹ÁÅc*™O¿ l#< l2Á9!? èıøw Ǻ³ëó…Ó YIñ¡XÜ|¾x¿¼x÷‰[b&<ìYË[ 1:ó²<Êf˜Pk¹¶¾Ùt†ñdJ1¶7Ÿ®ÒÉßËßšsZߦŒ:ö ~wFwp…x¶“µŒFwmî}mò}÷ ‹ºSä΄ëZSŒg%]o2˜ÚDO¦ÛkÕ¾f ›“ê{ó*G°ºÂ3G ê34[†'8ßÈDú™JR¸qm­‹±³ ½,îs¸Ô´¹¯À¾÷s!<8¶øà6Ÿ4K‚èN¯Ã~—¡A‡0<2×ï„ã>¼S j*}ܶÍè×Á#Í §<‡<é9¥ï\œ†B‘wF™p˜ÿt "¢«µŠ&˜ÙYğ¤’* ‘ƒ0{ØN õ¬Ê‡?7—ñW&úŒiw4‘î|ã‡2MK6¾Ì‚8jáñeªô·r·g3˜`J_Èk†™oø‚[^H m r á|Ô™ã†Z'I¯7IZ‘¼ñnís ŒÏ—à¯éU ¯Ş}5ÃÉ{uå9ŠºÈ†‰¯ Ë œFİg-‰é›’¾Odı=±Ñ5®é”&—gÔÃÀÔæ.g$"†°©EÄá*#_­Öë ğ)q´3ËΧÜ›i¢z•ßİ5ş°-(ˆò@3ª‰í’ø.‘[s*áy# Ñênáë. ¶Aš~Õ'Å‘Ÿ' ¤¸óRGÚw|J¬ 首ÿó8Zû^QRÈUØ¡Æwg"R;yy½yÕ*ÿ:ÏrYM ™FöıÙ~±sX¥Å*€m]ÙCèM‰z1HÔ³QÿE+.¿(ZÿšŠ9o¤yêtAÖßyÿ{(}µ‰Ãu13Îîxg.Æg3ív­ZÈşY´?I5EÏÏÓ,ŞêäŸ>D¥Çm’8 ~ÎÉViVLÓà ƒªèê±£¼·;ğ}×ŬÔ~ÚÆë/›D> stream xÚİšIs›HÇïş:¢ƒ½Bg'“Yʩȩ™ªdµä®°¨9ñ·O/ĞH€#!oÈ'!A!Ş÷şoéö&«‰7yæÙOo&¹ú¢>½?ûıêìÍ»`Â\F!\-'cׇş„ß…ˆL®“/NàLg@tγ´(Ãt }§,¦ÿ_ıiï>ù2#òw:#÷Ę±Ç¾gÛ”;€Ÿ»üä§Äâ2ÆR°!¥(İNaàğ¼éj:CÉqÂxÃ;ø€Økƒ0¨£8àL!¤G2ÙÒœ™GêÔ O¸ù}gÓ™ü%â‹MŞÅæôÖã}ÖÏ tÀÛ ¨$àA蜇qlıAYëoY»Ü¤QÙ@YæYb°œ·„2ğ<áv$¡A.áW8>¤ê}—<£:L°ó]”7†@yÃûIİğpİ~Dñ³DÄá²—I×O|+·Ÿ¤©ÀY‰)p u$!‰T~© ­âì:Œ œ/yÎÓ¨OW$ä—v :XJ}+¥WñoLÅÎõæ«Ôö_(x¹ˆxNş°²ª:_kF<5¥2—¢ı',nb¬Ò”,7×* îJ^g&}ƒ2ë‚eèYcf(\Aø‡'™2XY~g(dʨ*×HÁXt,cøD¼C ‚!˜¿¸v„µäböܼõEX†æ¨(óMTê«/J3\€@·zG¨İ­+"#‹êÃt±õ°Æ®$\uU?Š#<,Õô2GTA•Z?öu·«ªœGY¾h½êÊ'†­'‚#ˆ–>لÊQVáùŠÿñuOå…ä™wÓZW5¿Nà/¦ ÀS•Õİ^óH—hªXk|j‡¯e«»gı[yúØÃ°×v<ĞsTY¦LşCJk,öYT–6³%Dí\Lñ³ˆ9BQe»«#æsZ„Kn,ZnÔ«6o]eÖJ:p“t’0ʳn5E‚1× óhÈ臮µüÇ®g´Òs™UÅj]c¤ü»-R¹X¥³º¶NdzÅeõÛãëû Ë7ï Û‡Ív–~UØWËäÁ q~‹d«¥ŞwPY!ÿàãåüç‚„Rù߬:ÑıÏİ œùÇš/Ó½ JVí¤(êÁˆHD) ñ®—a0é=8ô¾56´…–Ğl İÆ&Å5çaíQ[¢tªD¤æLû1ºî C4´VVë2@zñ¶K!àWë«.~È<µ}ã]ÿƒÄõ©/³«XUتR¯=Ïï#×zÕ&‹Ed°Å"ıÖ%À©®“aïˆZ°Şæu%ŞÊÛoÃ’wÇôÔfÇ¡ë!g³¸f×.ï<úºæŒ½Ø†ÍÍš=c}®…ƒÓí1ÎxÀ~‘5«÷Œ|xsÙiá =õeÿÇa;lg·™ğÕ&óz¡|m7æf÷sg`‚_ ®a^½)e~WÄY5¯\JT¡dŠX-±—zÇbwïÖ«öºvE[¸Ï2xƒÀ`¼bçê‹«³ŸUV#æ endstream endobj 787 0 obj << /Type /ObjStm /N 100 /First 919 /Length 2651 /Filter /FlateDecode >> stream xÚµ›]‹7†ïϯĞåîM•êC˜@>ğfaL’;“ ÇvÍ‚'ØÈşû}_µÆ±Ãzº GG§çtW?*•JU*ê%åT]“h µTjEëɤ£äÎ뚢;Ú–š*Úz•T#'‘ŒC’«—’n ˆô‚{Ã’DğfOR;o$İ >ÔTò¸¹¥RJÇŠRrÍ©¸>H*á\ ØøxÕTº‚ªZÒÜ€_=iá»j$Uˆ¯è„zæã-ioîIkÇÍx@;;Ñ$Y®q©-’ÁÛ›âƒgô±$SåÍøÀkkÉ:UÒzò =Q–KÇWøçZğŠ^’zP»&‘K햜ʭP·Æ¯"E. ìP©¿j) şÇ¾…Şs Ç›[–µ>”-ø•b º_û&Ê{ ¾‚—¶ ¡†«–9`Ư¨ĞʯÈ-‘šd¢T|ş£)¸¯(E·«\”Şœü5ĞÓñ$Á›àÉ®|ª¥NÍ7h¤ŞXrêê&©úİJI=`Tc©íÒĞ“ŞÇͰ„œÉMHô¼A’ÕÀ;l•ßv|ŠA#Êu ğµÓø©Uš¡J\z"bÃL!Yœ’a*"•’.Ò*¿…ä’) ôTF.ì'”kfG V\œ=5”ZÊ¥ŞQ̺Ş¡£Ô`aOà°ÊÃ;Ğ!ü Ü¢°*–T>& ØÚ˜|æİ l1̧˳g—ëÿıå.]¿|ûöşárış×ŸÆõ?޼ıÏåúÕı»Ÿï޽̘»ùÇë·×¿_¿~)ãârıîîõCz‰Şm/‹Ø¨î–·«¾Inû2={–®ß§ëßî¸O×oÒ_ŞãÁ7÷o7ßú_Ó_\ğß 8L·Š137r”n›aJ[èç9~ıé#”MÀXŞ0Zp5¶Ñ¿™ hÊšrCšÇ!* 4ğ¼h FhÚ?OóEò‰Dc ¥3¬gHdI¦Ùb²ô€½À÷ŠŸ!Y0:Úm)'©eݲ’è’–÷ÑÉ VL2Z­‘Ø’ Å«€«>Ö3:ñ$Ş0:ˆ `¹~E£ÑI, ±$RëÆ¥IİÏÔ$ZöÑi´X}­‘´$…ˆäÊfˆ Uå É‚åGëÚ"˜Í Ri[D{|Y²!ŞÛq0•;ÂO…»;‹Sà4ÛÇ ×(­tÇ|¶S8º§–S©fâÑ€ı-À Z1Rˆ÷F,9ã p¬í8M°HãÚûiœX€£±ã˜mÄêiš¾¯ÛiÑ!#Bjœ8ğ8%/ЋЈ‘×jÆ5ó[ı<ÉÇŠAOVxœœwœÚ`Ä4f9³ÀãHk«&÷ z?³ ´’s°dsd€HϘ͂q’‘¯qí)ŠŒ„­PŒ¬0qZqçî Vpîäèiœf3´h…{‚i=Ná,X¨ddnÀ1ß¼2¡g|N; *épzÙ 7.hÄíÍ'ëÔ7éem†W|—®Ïß<|›jF<-ÏïŸß¿}Ÿ·½ÌKOÌJæEÃCy\à¡ë‹w÷¯¿¿jº¾øæyºşp÷ÛCúñÓŞ¿xõ¯»ËõkȾ{ûğ~ì3âqöñıı¯ï^ß½{?ãOÿ¼ûùÍ«¯îKC+!…{oèç‹WïğlŠV÷û†Bßã­Ü/" ·ñö¶ïmϳ•ÙÎûºÎÖfë³ÙÖÙNy}—×fŸ¹s··e¶:[›­Ï6f[gÛf;åÉ”'SLy2åÉ”'SLy2åÉ”'S^™òÊ”W¦¼2å•)¯LyeÊ+S^™òÊ.ïÇpµ-Ğ…p8?¥·AÖÄØö#7|KGƒ`*G†Ú–1èE‚B))–óÿw4¯ÿıê—‡»w7 ®·›a3ˆ†7îi‚‰.ş¤Bâ¦ëÀ#H®È%‘¨0ŠáÎuÛ`+·—^‘™ôähi´  ¸$NUõÈÇå¦Zy¤AbBQ:c¼´eå Í İ /©p4Š|¥!¦räÿîr†Foo1Ιw¥ ‹FÌkFq`1+8 I¡·‘ °PäcǨ€Ø¥Éî) T–Š>J}ñ p*µÑ·!ˆ"x¦r,0W+!Ì4|ÇÊ=Í5–LåŒH²ÓÓB^A—áyı Í‚©lÈ?r°ª‰¨Şp¿w±34 ¦¡íu”†7k€ƒİ=°˜zûE™5¤Q3ΤE¤¨íÉE¹.P‡ÑÛ÷¤&[ bõ)õ“ú¨+eB› Œ GÖã¤,AxÂ:š²ÈWFÙȲp¬0ÔlXc¸ŠiƒPU£’íd¯gÑH±øqc5‹Œ¢Q9˜2u…¯W8×R¸¥Š‘é³f¤åd·W,ÿ¬¸2ÂGR1*Fv›Ô5ÎU£Ì<ƒŒn6bë~fÁäQÛm„6^Æ$jކh_SU¼¸nM aB´¶`t°èñŒ†l á,r¨õxtÚSA¢Áí[eJ: GŞâ Í‚¸€…fRxXçtFúcg,·İÔİ>Ò`úX×Q¯«‡;J×34¶€éq2³Í{\©rŠÆo«¤0dŒPÙxˆE$‰şd¬Òn?§Ë8KRyrálÅ£\ŸÔKæQÅfn ®6º^¤c½Îj°,¡Aî‘9Š'YœAJt†fŬÎyã©<ƒ¯ Ùk3-Ÿ¢YD±4ÃE±,˜§ŞzߪØÉ,P ‹2ãŒ'Â|-dQ&Š«eÉ^ÔÃå葦úæZÎЬĞ,eœ ê<@*;§Úš½–e@“&Eu”eÔ,fOĞ1ØF§*·rIµáÿc!fDTµ?]‰ùòÇ O!ÿùÌŸ-»ì•’OÊ.-Ÿ*»´½fôQÙ…sG¹@g9Ag9a2ò@îŞÎò„Íûm–'l–'l–'l–'lʳ)Ϧ<›òlÊó)ϧ<Ÿò|Êó)ϧ<Ÿò|Êó)ϧ¼˜òbÊ‹)/¦¼˜òbÊ‹)/¦¼˜òbÊ«S^òê”W§¼:åÕ)¯NyuÊ«í¦e˜YGü½ 3>]†ùعøŠt Q†.½)ÕşÌ¨’Wõ¢|/¬ùØü•‘ÂɉüÊèw“íoJıy<§o endstream endobj 893 0 obj << /Length 328 /Filter /FlateDecode >> stream xÚÕ”MO1†ïû+æØ=´v¦_Û+^4²âA— ›(KŠ1úï-.!,ƒH<µÉ¼ÓyfZ 0Îä~•€·‡íæ~œ ÊìjT€Ş’…òĞaÁ'H(ç0c^ æÜ±aŒM̹RŠU9GÖ䜛‡MşXŞìóÀŒ;*˜H1R^fÑŞŸ7ÃQ}¦Ğ µï˜ûxHx4À…74Eâiµfw·ÓÉÖ§f!ÆUÓ㨔½Hyçƒdä)HüJÔÎÜuËç½içnZåi¶–á-´öª‰1lÖ?ƒØ¬æaU…ã{£ÿŠN€º‘?xªµğZ'| -¶AıüZ7‹ø´^æŠØW…UdR.½sôš!»z(e#Oëêâoº®Õ¤N}öD¼OMDc;£Ê!®]!Hîä>êºî Ëì°| endstream endobj 898 0 obj << /Length 1351 /Filter /FlateDecode >> stream xÚuVİo¤6Ï_î%^)øÀ`>Ô—^«ötUOªÒUûpwÒ±àZ°·’ìßÉî&›°çÓ3ó›±£  ¢àãMäÿ?moŞÿ*ò@D<Ë„ ¶û 2^de ÁeœÛ&øÂ~îªÃ¬¦M˜ä’Å›oÛßH-åy‘ǨaZò"NIᓪ$1›'*1k–zî&½"(y™‰Ìkɘ‘$­?ë(X§FjeÁÒÿ9ë-í+í÷ãa!ÒsåL;¾Ùî¼—Ó&f¦ªqÆlì5l[b •n—ªUd¡òâ©ñ qÌKéóaë©ßmB°­Ì"Ökú“kXÜ«‡Ş×Åœ/ó¤À˜ËœÃ"áÙš\ù:/ÀUx&t¯Ο™f²o^:ü0´fêçnìk"ü~Šv©€ıô @ˆ!¶ Ñ€‹û7à+ó,¾ñM(…dŸ¼o¨&%Œ#ÉÓ$ó¹ñEÜU–’’ú3&¬¢_I7㡇¬ 7“çë†EåS“+”!Øoo¦3k){è§y©¢at9ëV% 2acEQ÷Za‰<¥żÀì¼Æ>yê¢ Œ!Œ“œù’Óf_A²÷Ëp)Bå›õÓŒGeâ ßD@΋D®5‡sğŒˆ;¢ İ€ğĞ7½n‰¤ÒeÎ6šÉëjÈ%UP&¼„Æ¿ˆ|PeéP-  \TDèç“ÔÅ¢e$S+BEŒ^Ûò& ûÉhÛõ–4zoW›Ù6D°*i3w•gÓ‰c«o=±ÂR?ldƪ~¨v€¤+ÕsışÍ~zíö’²J‘Œ¯ğàùÈáônÚAÑx™¦—.Î "J馺)HÉİP~$« ‘ïV åP€yØÇÃEæûcPĞI$5w?v`hi->J˜²ÄV5Ôf8úch_âó£ûiBõÌSö×ç;\\3‘¯ ëJ»fèQÕ hö,1 Ó"ÜÁ±~´iÁÍÔb$"…Ë –Æ{ô®FqOÖ_ / èr±ŒøõEÁ2JÁøñˆ+˜“‰F]‹wo f¨Íè)®1erÙ>@ww ĞÑÜ;"µ“R3µìFèš2!8ñˆFÌ2];1DñæçÕ‚ ä88İ$#.ÂÿıZƒPÀŞ^øŸ»U:œÿ£j¯ŒÑb‚*çsUğdÁ«ÎÉ6¦~?›Æğùi~=ƒ3Ô…\e¿Fq:¨Õ6N(4KÄGµ'×ÛÀ)ᥰàå4LÂ|ñbš(¼Eéò Êô„?ÜĞœ¤~»¸ç°å&õߢì¼vIÒiP×.Ğ@Rz!å;Ö'LN–nI‹üĞÌ=8®N ˆ$İñğÇêEpj˜ÉÔB@Ã"ÑŠ.oÓÚ,º~~½¹zÆfª^¬C(I£=¦¦BEjª›Êz=€ç…RW£'Ú[3{ë¦OЬF¿úîßj%¤Å-- ¶£‚+¨š±ÄHÁÎE¹ Ğ=ä‚EŞ#<¾f¥i3¯~àIÖöÚM{ؽœyáµ3®Şã´Ç[1T}Û¹ûƒÃåï7MHû°ĞSÆ,¬Ÿ7(‘­¨¤tÁ"Ÿ»;ÒŠË"ã—¯½8+y’Á‹@Ä‚‹È¿çã ¡_¶7ÿ…À.õ endstream endobj 905 0 obj << /Length 1680 /Filter /FlateDecode >> stream xÚ•XKÛ6¾ï¯ğ­2°fEŠ¥ ĞM‚^ 4ÛS’ƒÖ¦-¡’eègûë;/É–W›E}!9g†ß<äpuX…«÷w¡Œ¿=ÜıøÎ¸• U’˜xõ°_éçn§F™ H»Õ§àm‘Ÿzß®7‘‹³şòğ³Ê¥Nã±pµ‰CFràïη?tÌÊç3é*SYb’ñ„Q!ˆ¡E‰üYlׯÓ…@Øù>/+ÙıÛiPøz½ÑgšMİ¡ãCYP‘dìó­ÿi½‰ ʾãÍmS×ùq·©Ê£ˆÈÛÃP{>Óİ£¶¨ Ö*‹Å$9ìQœÚf½ޭﺦ½G¢=‡ÃÁó2 &æ®áqß´}¡&ïi«"›ñEd•Ö)_e”ë´‰ƒ·Ó¥àHÑf£¶‘m]kàõ¢ˆÅı*×û3ë9³D„¢¾£ \@~"’n¯ß±˜GtÖïO¯âyϦ"@•=Ó»>oGáÃiôŵîà•ÌZp=8Á%l@·EÉ ó™¥6V:±`0ñ}Zg”4 æøúÆPlF–²Î h5‰2a:2}a –îKU'Ó}Å«÷~ë ?uå¿ ×F±JÓè_›¿t­Yò¯¥ǧ‰Ó@äâè2<Ó%v”&]€aJ$7ÚlŒÕ*ɆihæÎìü¹MúÌ÷Wro¼aÜäîDôÛòs¨­GT@…ÏO4ºòAÌÛSŠÕ˜&ªJ¦”ˆ6´­ô4h8’"¦WÛ(£éåÇ'zªáŠ™-í™Ò {ÿ³f¨âªZ?S[Ê÷]6 ‰`•ÜcfèõBb–º¬*0“i[²N¢… _‹4Sì Å!Ä y¬ÑÀºĞ@ğÚ4¾*Ó”«’~ ¥/VNOìøœùV‚( !ÇÜdül{BÛ8¶ögª¸ª›–Â:ŪpdZ5¬2YBnER¾İ67bLççÆ–c§^é Tv[ºò×JvuÙÔÕYS;ç\ ¾SÏœV©±×)ŞRò¦ÌÁO²*yÛó.=½´!ÈU_P2thíBŸà ­ÍM£ğ¼íÕ*º´È }~¨Œ%,OĞHÏßbúãPË[‰ˆSÎ/ã&/«²“PÇÄñÏÌĞõ˜«;&"’¨¡Ğöa”‘Å­áJ¯Zô-Nşz·úDŒğÏÏ9DKH7³ĞN¥ñƒfÎïnj¼ØlÈ—Õ*àsÏ')Lí«w†S¯'½5Ç6x·N£€Û³(ğßòúTÁ‡õµ]/öaaDŸj7ş§ğ†sî}s‚‰Ó¦ÛŒŞ^0Zøñ ˆé«u\ïyúš: Q“™XP[Ò–ıÕÁ3Éìêͯ%NRÃçşŒ_Ğ/±„òÎÒbğs= ÊPpëû¡³sËcï1ɽ¢Ú@á3ø,ÿ,˜øıáî?rXƒ: endstream endobj 912 0 obj << /Length 2208 /Filter /FlateDecode >> stream xÚ•XYã6~Ÿ_áõb12¶M‹¤ÎÈC3Á,° Óƒl0ٶ͉Ñáèèãßo‹’%Yø…d±Td]_íoóÓß?޾9|É&ei$¢Ííı†KÎâ8ÚDaÌ„ 7·ùæ‹÷ÃnŠĞ»¹ëM‘ÓüŞ uÍL©z÷¿ÛÈ=ç, Ÿé'Ó­íÿƒöÛì¤K$%­÷f)›ÈŠÆ²/ï GÛͶëDcèÛßÚ±¿û¡¿%)Û—Äl÷§aæ$má3¾®G‹nö"`©Ãè3‘:ıGd:|ÁÔÔÓûÄá ¢ÄSÍ.L½c_êª =¶Ûó8¦!‚azàáÃÌ}~ÈRpÛ µE%„§ÿèÍÃ.Œ<°!÷Š÷4NªH¼Xºš®8‹†8dVÜŸpæ‡cT sw²~j® àã[ò‚%i2·N¦º•+‚f©ã§nÌÑTª`/Ed$XŒ¡m“Ûıë¡YéÇ¥Â=§bè²SY;øüçÓ«F^3;%ŠY.0æö„øÑÑ·=ú§¹õHe á;SWD¬ïit±·,€_ò‚ àéëóáXŸË‹©×ÄH&ü‹çßkQAÄx4ê좙î‡à…£Ê:P¨xÆ•Ä< Æ Ìæ ‹">7y›5挹… ¨²3øªSM×µ? Í` Ÿ2Ì8¼(­áº–áÁ4µ(KE\¦r\.—O­˜AD|*ş*‚¢×ŠÇ‚…#µgB›lOvJw*çv0÷Ï!!‚ ?Îsı`¡®¨Ï±;caìi[@纚o8ä /ÈSë,Ü]U® kT¾~Uù‡rX‰P2àå• À ©ˆ¾ÍÑÒ¡ó6ÔÀWü°Ä&îabà–ã ÏïçN‡ ‡¡ãWóMŠc¤WZç:_‡û¢:p)•Û«Ar:İT6•z{_,)¸´É Lm]: ù³iA–öl¢ÃÖ¶ïaš¦^«w«3«8U Ã7 – œü]Ì+ aÁ¼¹ùb¿¯[ÖÍjù2°”Ö²¬PŠ#@ÉTzÓ胆ϙ¸Ô‰c}í~€W°m*’Ø ¢1‡ã!‡amsF*VÅàl ´PO3Ë0i0Gİ<;æ–FåZA*­ƒ~RåÙº@ÉF¢ROBTuU­ •\ï"b«M W›¥`RH/˜€†C©x7`¢ŒCïÜ@@3”é¶pwYá9K Z)¿4ªË}ïïU÷°ğS4XÉL=v<ÀDf†\ß«¾èˆêf6ñopXå€4"6~fo‡IE·³ #äÂ¼é« Î†¾­… È‹P@+¡È%¡u³–¸¨óª‹-™¨Vù²ÒøÜ˜¡ãÅM‡õ4·Ì6ùpS?8“éfvW‡)šÚ颇²Ø’4_yCE&I¸79å¢ È·7C°åDFìX‘÷½n@ihâÁqš6r}׺ØW¡%W¢ØƒÀBaCÍ.ßÔzI.A£ü$YŸKŠ àË5Å;åÜ$MÈrâh\ÌımI"]’¼Ïµğ« ±K$ê öÇãİC̉ÔÀÅè‘X¦p‚k„dê«íÓŸşó™öŞC•h‰fñHÿĞúÖI}©ñZ8.+û—»¦È‡®)¾êšt!geïüÕ†çQ£Ÿ‡ÔBPЯĞXèCû#ín ®8æ¦ísף߶ke>„2=F+M«äèºtѧõ”¹iLÙ Òˆ® SeEåÓ­h$¯ŞŠ'¡‘-¯o%±ÛëÉ™ ıW d<)¼;ÕİEÑ@Ğ5‚ 1Äq\÷1ÄbÄ"?zÁÕ+oZ` ÆnŞMA ßà;އ'3TxÍ`$è–¦ğ·cïÖÆ9À¹y¸÷L¶K€ñç­Š³O'34î,çº)._غè.7ÃÅwÿşÌ(ÃkÚŠ‹ÒOÎJ8íf!¡v Ğw41½…ãÉ[Ø86ªÜWªşß àúß§è"Hõ]£{À‚í/ñ´ì”ş¢yÙNĞe»V6¶¿ô‰Sn„N7‘ WŸH¾Ãµ²Ùª n¸ø Æ[¡Q䤺K°Á“©ïİ÷ÕØ¨.,› –ò17æZ/²™×Ñ¿5˜"ÔÁ)ˆATWaÑ·:w 5QlC$EôVe¨Ô1)ó—[ŒMç畘Å>ÿ†WsÈ‚‹B6"ú‹*ÂwÆ#N"ﮇè—k}øŞ­MÈá;ö}ÀøÂ?Ş®—gşe¯ÜÆ5"Ka)¼ó&Éã7øŸ¤{>@ó5:ZØ‹1¶<"dØ„>ğ„@àæ«mQå¼ç}4¶ .U´5ÍğEF»£üøÉ¤¼ €Õ„ZÊTc¿1G“p"¾ÛËØõ Ş ­Çv¨Ñğ\±÷³Ğ…0Öşüé ü¡›ögÕæµáQÊÀûx2K’„œwsïoßü^Z)Z endstream endobj 918 0 obj << /Length 1966 /Filter /FlateDecode >> stream xÚ•XKoÜ6¾çW,’Cµ¨EK¤(P E› Š­’h‰»f£W)Ɇÿ}g8¤V»«ÄéÁ9$‡óøæÁvÇ]´{ÿ*úÌ÷‡»W·ïx±+Y™ñlwwØÅYIJ,ßeiθHwwõîCğ1J£QMÿîÔ§AÓË:äô°ÿûî—]±$‹wa³2]í—àºúò„~ƒë¯ñ4\®/JVˆD³lÆêAµ*LаÖfŸÆÂÕÔ›gwx-y‘³¸ŒıÙ[ÕÊj| 7ÅşÎ¬„<ÊYR”8`q^ĞÑwûB³™”Ù‡Iu¿yTs«º= &9é¾Ã5FºÁ½İ£hrèç} ú8Ón p¤ÁÇ(N5n(ÁãÆ‹V‰ÛªÉIÁTs­Fl1š„[¯ù†‚çà× ?9ö}«»i“s^°$ÍÇ)„q‘¥Á_ (®Cp»ó'MQÖ‹$%û•×Í$/Ì¢lC Ö_0$¸™O4“UÕ›ÚFÔ‘(6kà×zÚ2\´w:ˆz{ÂÁ¨GİÏcó¼%*Ô A7 A ‰Ôe(¶Ò9'çé)º îœ}ã(NQL¨+JåA£ˆ‘Mš¸­ëݹüŠÌ`ÕÕ ó–ØÒÇ ] QÒ©'¢¬m̶~:?¿òò”>× /‹À"¢,1cÚ*dúÆÚiKÀØáú*Ú Û‹äë£m%Èø¤'‚×–š¢di±”²À$…•€óòÿU؉8ûrš…T,òE´›¹Ã m×ùóZÁ’/)dšK€Ø cûî"uöà_±İÅeÁ²8½lŠR×ı¨G9¡7ºo”y±+ºÛt”‹Lèu­õV©LOø©œ¶í*õCPاÑé3OXÆd‰¢b¾DqÁÇ÷¤ÂgÕÉmõƧWÏóàŒF»X>ËmÖ|WÏ’Ëæ5IXu»t9k~O^µZÛ‘o®S‹£o½T":‹=$İ©¯ú†(Ü¿.ÙñÕ‰~øÜ.qÚÕÊO*áѢ갿ÿGUÑ µ¹â’—ìÄÅ(Dä²1ÜRæûm­6¶6‹Ü5£|C„•7‹“7±G¹4äW7ÊzMc,Xø<_zÙlÆeÆòüâiwûØŞÂÓC™áVšêU»˜"byZ!aZfÁ[ŸEr–Šì¢îõ­zzÓë°?„µôP­*£zíA Z´Ͳó w¯:œÀ«ÎÇU6~pøÅ>Å xqğÇûW Ezm ü}İ2‰rí­&Ò—''QëÂ6}(½l¾Ãiè‘!ÛÍÃĞhåhw¬VluÜa,ßH–KW` pyWF=øG°l0Mš„g$ J7ŸBşO—öùÍ›­Ìk¡¼êzÉPaš²(ç×Í¥­®”B1Õø¼dheñlƼtæEİ-MDïº~`âsº;ë«(m¥k”Ù’?¡¹@Õø™àŒx^2W~EÑàÚ¹A±òÔwË/W‹Úk°gò"åůE-Ob> stream xÚÅXIÜD¾çW4'ÜRºâr-¶sA‘(H Fâ8xÜ+n»±İ“äßó–ªòÒD$Nµ×Û¾·TÅ»û]¼{ó,ví÷7Ï^¼Îv¹Èmbw7w;[‘Ù|gM*ev7Çİ»èTì“,ú´?¨4n÷T<¨Ûa,Z\ëb¬<[ ®İÿyóӋ׉™JÄ©êtõyodT”ï‹ûŠ7Ï™Q°5ÏüÖçpiGê >8<­–ÛŠ¸y¬û®=qô¬r»:_v$ϑʢrxğ²;Hm…L%t¤ÈSÆ$Ô÷ÆFEsAáÅş`uıÜ #¯Üİ{]šjàÉ¢‡³:£¦úÒI}°£k›O¾W:BEë‡Û²Éã~â¥àæÒÖ]H™ ¸çç‚¿7&}#»2‰^mÉ(‘gÒ+~ûK9^z4Õ†•t"T JöÈ7q4\n‡jä©îÛñ¡âÅÛº=‚Ydt?ğÙȆ†N‘aVÑ/x‚5Wxdf™u{ÏæË­P±^ê nËærDMk“=l n¼ Ëb¹ÌìŞ»‡NÅÑõ롾mªåõHÜsw²‰4 Ü@® ğğjËf3–’Ì€ÕîŒxËÔNÇç¢p‘$׬`\('?§sãö\V*„EÅ”À…:ØëXİÕmu˜âöUÉ Â’6@µãÛ˾Àq¿`½¬,¡}à„¥útpöM”HcµJôMåkŸ÷õ$GY5›¦Sç¢îÙùFY2xêõpŘ;äŒÎÑ"ì¯x;XúÒŒ>-¯Å”àTJ‰àZÅÆ›ä^cÌÿ•Z¨ÕL2ç„jg`¸wøÄú(>nÜo¥Pfbï&Lœ6†–"›Œ)ëÊáèQ£95¬ˆÀÉØf3"òZ‹TF @õ­¥2íÂĞæ©²k=`k‰…±¨[§úuîÓB½EÇùBåEYI’L\RU&IÓ×B'¹È²°µ;Wí†á´Hs„nŠ ¥(èšz]9¹HPYT–ÍTæK èø\Ä•¼Š…JÓ¥j¾ÖA2­Í’É8vÂÛmu_oÉ– ==v‚l@ŒF†ó ë\¥¦W‰Xä‰)_,xñR!Á¸«ºÀÄWÑŠ(ã#vg`§ñ©x_pc¦MAm«®úên+8ÓDüo<¾aÙX‘¯®@ª¢9”¯Â‰U€À½¬İÀ0K5'¦iêc¸J§ôÖ¼¢ Êwò»:6ã;Únğ='TÁ£c%Ä碜ªñ§¿ñlG‡ƒJÀÊùÒÊ?¸h!h.Í‘»ECïDè…w"i™òå·–§0;pYùßeÊ]u8%fŞI ÓWe×»uˆCuSᦵCÙ×®¨:ú§ôuöõ¾7TåXw­Cz¼“»a_ß<Û½#¿4"_¸M+—x°ÃbbéV7E(B mìñ%>KËKN1ͬò8Kz?72y®…Ôvñø¢«&6©µÿ£«ÚÿìªÜ¿ÖĞğ9øoúğB¿A`î½ ²=åÆ+¿„¢½zŠÜöİSñ…Nnºô\I_ğN³rÎß!Ãş4>¦ù@iÈ-À¤ÔmM §Uv,èL¥íœG°JØ™]0€”rä^í–»‰Öì:<í‰ákg¬ÿğ“dªµd~©[¤=ïƒá¾ØjÄäBO‰N–IÔ=¾±øVi¶UÕgXN ²|zœûj$õdùô[Õ|ÀUşçts?°ªŞ¿‘°ìğ%ƒÿ¤ÊèÑ^——¦ègŸVó_¶'µş!P4ô•/(W_›Ô}_X¢Ãó¿HW/-ÜÖò¶ù&L»ïCº±â–óÇ‚"6løw“#ã꬀‚U. ` ¨Ã–'aUE¿1¹Ó´•ó+lâş|dÀ¡M–õ,1”m2ƒ²õÿh¸>ı$ĞOXğé¦ÇÍÂLÉT˜€¨çÛ:¸]Ëࢮ’ØäÜı9KEJè뜾L܃“Û$äe¡œ£ò9cîÌbÏ7ÏşÁ$ß endstream endobj 931 0 obj << /Length 1465 /Filter /FlateDecode >> stream xÚ•WKÜ6 ¾ï¯0r©˜QdY~å š E›Í=$=hÇšYamyêÇ>úëKв=G7½Œ(™¤(>>rx°xğé†ûõÇÛ›·ó `E*ÒàvDYÂÒ( Ò$c"N‚Û2ø~nz½ÚĹû{Õ”éˆ2ÖôFU´9¨íJäáÃ*ICµ÷Re³ÚÀ¡ö¶éGÉm5”“jOlûGr?´ª7¥ÃJÙUîĞÉVİşl"É )aX‘xC£‹Ê¡B]R‚.:ğ[«uÙÙ7´ŞCúïúq•$¡ªÕë’Œõü÷“ÊSódLÏΦg¯ñ4 Ÿî󯽗Tv¾ÜáŞÁ—/(‹÷Ä10¢‡ÎØ=‘hȽı(Ös–§”9%kâ8fH šãçñ¤pÛÔµ²å;”™òb\O®Ùä)ã:΄7ùıj“ˆ$\ƒÚÙÓæOx©wÆêM׷öZM_¶ºª:"cÀ]rè³9h{,wÌš.XñÆZ=è 2Ò‘¼¦ıdùØ+ìïOßä-úï‹¿CJlZ½óú®IHğ,€œe*0À ¨ïÁ²š_Í]«Ú—ó ±\D$ñ ‹‡t¨ñ×§eKš­C§wCåéŞTPìTȨ;7,–,ã|M€²¦+ »|tEL€.B× 3³ çu{f×Ô‚Tş e#Ò”² J2y<À¾‰«Ë2‘b¿iµ*ıWÊö5v¥•ØYݹû¢> stream xÚÅWKÛ6¾ï¯p³‡Õ5+¾$ª´A¤Çv{J ”kѶY2$j“üûÌp(Yò*ɱ'‘Ãá¼ç*İ6éæÍM¿¿=Üüô»È7"eY&ôæa¿áiÆLVl´Lsµy(7ï’WG{ö®»ßÊ\'òşŸ‡?èšb¹É9^K7[U0Ãu¼ĞN¶)é¹kaÁ“ëû¶£ÛfS°"Y¼«93©¡»Ǫ~•&»{‘'Ç{ŒÚOJçmUG†¿€Ã$Gwr´Wæ®'¶İdƒÀHüˆD‘|£ğv é;0 ]³Sf$_FÀ£‰Ÿ)lÁÒ"qÔÑÚÒg‘&ØïÛîD«÷©Nݧs‰Á°UmCô6 (ÇоO¹‚uSyà[|ÉAÖ‘y,½"¤/OÜ¡jšª9¬åğ#˜‹ngA†ÑT9æ,åÉÛ†ª¦>î<ÙŒ'*ªÒÑ] N¸Hè#3(…†K7|Óa×áâÏ77›wA²d&2PG‚EÑ;€™ \”h_h ÛB‰"W»’~) SfÊïÏÏó¿Y(Y,iŒœĞrJôHTIÓÒ·R  GGüsñ¦LcU R¼s%±à– X"…°ÿ‚W°σ¿™%0ĞBʾÒĞúµóZ´#jT‡ÊÓ²Šaû~8¹’6h3~'›ÇJl€Ÿm”Z¾±|!ÓP4*Ë©hPÑUѬXÕ%¸¡dä ¬}JˆÊdòƒáܹ§­GÊÚb4ğ¶cøp,PHô¹EÆ„Q£Åà¶^«Ü$OÁãg>(ÃôΡÌâ$Eq Ñ% GLW€éz™åĞÙÖ5¶§Q”s0SÛŞÓj& ·óC׌@]Òµ©ÃÁ)Æ»DÉÛ=Q-ñLAFIìéä ¹öÕ¹vkE9YÓ/š( õ‚m3ăe¡êg=“&uÕûy¿ÌD]tà`àŠŠcMÉ,6s„ExÒBïrÍ™ 5‹2üì0¢}‰ nñ :õظ)Á/ÀΡêîD–ü;4ê<9Àî*œ°»;:Ÿ¼ÀdÁ[éõ'{‚ğ÷ “cǶÑdêÑ´~n/ õø’ Í@àxÑ|¥8zĞÅE鉦H 7‡~rx¿ö2^§zl‰Şù· <| 1µM> stream xÚµÉã¸õŞ_aä(³ER$¥9Ìa–&‡ r˜ƒÊ¦ËBÛ’¡¥«+_Ÿ÷øHj±ªºÉªÄõñí›ÓÍÓ&İüã]ê¿?íß½ÿ ̆gLfZlö§ ×)ÓÚl´2LHµÙ7¿'’‰ís¡’Ÿ›ëµ¬Û4*¹Ø/[É{é¶ìÿùşC¾)X¡…F8éf'$B%¿àŠ’IYã7KlÛ6íóäóVä‰}yÜîàÛ”í‘V5®÷^NÚ-ü ·Şİ(’¦¥#M¶~øØÚòó@ø›ôRk&9Ì€`:ù§ €C$ˆ) ¢,M Ğâhx¸ İùRQ0mD8th®;<³ÙI!`£ØãX¡<'‰y™IÕáW&Cg€M–)‡…Û;.ãß8ʶëe\&"¿à¿†8è–£µ‡¡í*8`’ö†_è\sòˆô½œ< ·Öúéïζ_ªú ¸¥³gÀÈÒøøR—×ê@“®/{·nt:ënmóÔ–WZ}>Ûš–ı~> ĞLt ¦µG¶İ©Ì${’×Ë‘æÜÑœf36 ²¯š7er€7{Ç·”øjûìUAM„Ì•bRF!oˆä: ,Á^îUCgL<ÜÜ5(äŞI_o®¨Š , =!æÑ©i¯¤K‚ƒ’ î©õ6Uéògš>W )kAù‘uS–Ƈh¿ìúææ­“=b8wÔL/ÒëÍß­êcu fP+rH WüOæîÌפ^] ¦¹‘Û#­\‘ ÒÑıÒàæ3%üasA08ŒÚş°fàܰԨ  ï%˜³‚G‚éİÃà‚)…#?܃à)“&NÎåL‘},;;!Õx± òù^w"¤…cï1ÓLjı&mY¦ïhSsÚÒ¢G^{C½A<¨mªç´£‹º ‰`7Á‹©ò£o†P>¢µkHV¹X 5SåQfèf<±[È Á»© Àrm» u´·şÌĞ#òàjtï¸VLär.çV‚¡„³YÔ‘Îöş©ü§ímõèüSù<¿×íİ:ÌÜ„MZÅàAË}ãáU]ùxñÛD4ì–Cß\Áñhb@qŠ›âÌQJç aM¤ÃÜ-È wI0cü¥=½VLœLÀILb×ß;ZpJƒ Ş»“èÇ0P*)Ÿ< N qû—Áp¨N÷§ÆïŒ¸Nú„×É+H9a§œ°“4/æ®áûşÏ&¦²ç°Šñ£±’³I–›h(r'f€@³3#~µC /ü qйœ4¸œe8Â…H Lf(Mâ:Hn¸ºx*(êÚ{¨ ìiÌ€é‘|FÍV(ZhÑŸ`Kö[ ÓRϼ¯É]âİ… äüBˇ†¸Ò6—İŠ“59Scôøe5:1¸,€¢í“ü»®¾ÒX…Ó,XtèÛs®XŒj?¯¿ËÇŒÿMXô„gß ":±S(ˆ ©ÕBÕ~½–‡ní9ÎL6V#ס;œíÕfùJvš²\E2/Õc[¶/[p;¯Ú"bæ#„«óDš… jŒû†ÃgP´ïÊ«w e·¢pP‡jíğ/³å|L¿ü°|I{Û,z6éËï+©‹L¦ûõ¶–“¦Œ«¨ôŒ±v*¦G•ùƒ´DçL,yü1Æ^ d/O=&\nˆ‘ÀèXg·X`ÓVã„*]qNîÈ)'^ % kûÕßëVXıÚJ ~ ËÎB½øª­¥'´öÕ°VcÀïhD<Ï 3H³¥šòv—å)] üø¹cfÆA‚Q&ßgëF.™„ÒŒş6c¥9gJ.Lu "÷ :ê ø‹“ âƒ!ì´¶ÚÚú­‘lÍ]ğj¬0>®™ È˜V£¯Œ¥ÅÂL͘YGu¾gxÇÑäÎe¬°-á>z.dG¾`Ù»ÈÒÄ~J¹´‡f^5ݰ¦ïB5qéqÀ,B_w]¢…,–Z%~—ê`éZNxÊWY1ñı뿑Ļ AòÍå,şz]øˆÕBç; ô!<ô´€»ïJ¸j ïPÍÚà^4şØ×ĞÅjK"% öWşåğ…Bö4øªÓZÄXoÑrÍŒŒ"zµşe[0±şïÕÑÀ—àXá”*kaHÀïÌ rI,ά±İöÙ&56NC joáb(è ¢²”‹WʺÔ"ª‰³îPEò>|c÷'T¼•í_ÏY >æcBY×Gl~Úv=ÕM…šå% w©° Et½ÙŠA11 ™ã½p9=NŸ|’àw'•Nkp0ú_¼ÛŸ±2˜g+t .™Î£*ıkAèŒNÃøø³ÀÑÊáÒwsŒÿkÛæa­q$TÊLÁç¢÷BXS\3&'#]¨dh2›—ËóvË-zçD¥…«´Qil¿V¡ó%å]Ÿg—AŞ õ¼ şÏÙÖş\Kú}%7õlÆrøà,>ò€sˆÇµq/4ĞZ:[㥲^‹P˜±‰ù…ğ1c“³¹C4õUÛš° )•üNa+&‹Ù;ø#Åø4öJı/(qÿ3ÁxkıO÷^3ìĞ0˜Ü%˜sm¡íP‡_DHMB—‘»ïòüµ_Ï  ‰6B¿í«z%‹Ò ÂiÔòO\f.Yû[€îÒæúsGóØ­ŸHmñLCßÅÏ<ŸfYş¾ `#ÖPÉeŒËõpn—M(LH:ÌæâPá:á q–CÆë€ä³3¿îßıƒ¢„ endstream endobj 947 0 obj << /Length 2163 /Filter /FlateDecode >> stream xÚÅXK㸾ϯ0ö²20fDJÔ9%Hïfƒ]ÈvN³{ eÚ&Z–QêîYäǧ”lÙê™Î"@.â»XU¬úªJñê°ŠW߈CûçÇøNå+™Š$ÍÔêq¿’q&Ь\e:*Ñ«ÇİêS”ˆd½‘RéèÇöà|ï*S¯7I®£ª=L³óë_ÿ6‘[ ]¬JQf*CÒ©( µÚ() %™ğǺ5;< [õÕÖDŠöƼë—X¦µmÌÉÂ¥ºˆ0£“KCç¯o^EªsjK„ø®òëR*ê–;Hs‡İ$ú¹Z«":ÚSXòíĞU¡Ï üëHj —§q=ïl¨¶¡]«<ú|†AY&Ş×22MôšU¥‘ååET“N6´ıÍ’j2‘É%ÕÜÓ†­e1ç±ÍWÛr>¶ã9ğØÅ\†ÈTÃ)¤¦wô¢@ƒÃ© #v:–¢7š°q;¥4tjh9FO³,ò¶¢;Pã•\uˆ¦ØùÇ÷VŸ`“RQÌ΃îŠTσ”Ğ:q³Í3†›mçì»;P>9.ªáÌÂá™6¬_éуù¦eÙÊPㆉ`.PÀ×óª`ıcK¦0b’®Üš|äMiÑŞ•Èn¤%A¯5guâ¿(3 şäº ñ§=Ûæ«eÆ(ôZ“¾~¥ñ“áìÕ‘ÅÁv ³uÍ¥d-…å ’¹(½ÌÛII)ü¸™ ?»Ïâ€nÓå…™jèÆ|›'nŞ¡*—G|Áã:Ü rB](Aß3ÌàÆx\Ëd€ÉßæÙ[r+èçÉï–¯@–Ñæ(Iƒ›.Î «˜̸ıÈŠ g„»0Õ ÍöÜ7õ& V–Í…ï¬ÙaiPê(` 9†ö2ÅJÉò"¦™¯¥(1%›Ò6ãŸ6[ Èc7È+†À;¹Ë\ÄÅEnÛ÷\\À5Ixó$5ΆRdÌù1DgOPéR@Æ0ôí P±âĞ4rEk"ØŞšÀ”©|5cGÅÌF¶j›½;¼2¦ €‹•Th ş êM•P¿:³¦JÍ¥ ÌÏú¥Ë“ëâîòÙİPqL/ëğ.[€ÑÅ‚ü÷Ÿ‰XNYÜÒx_Ux›kªzØYÏ`OŠÓ×Ñsòì,¹±à³ĞÃĞQ޺6Ía`ˆHS}·.R.ÔÁ8ì«9kªô8t¿Ç8ıÈõÒë¿õ‹RHu)n˾Ùó†­³;(CÑlÌœ½`J!½«—Ó›¬ƒrP*0[Eyθˆ~ØórÓ.0¯ÀØ‹¢|Ÿ iQÄÙ<M£ƒã¿ÍÇ ®ßÛÔFeZd¥¾{Ôeã‚\5NŞ0®õu<†Lk öSqJ¥ÑHs>…³ >8¦mïƒ ŠŒâÏ5\€uï­/ß_¬3uı¹F9€Ä9¿<¿w'W›'ÉØ°]†(ŞÒ‰½_pı+)Ğ÷’,ú¡gʧ6”9§W—¶ xŒK j4c¸ úg¾ùOÎÄ*ˆ™ÄBêX`}«²¼fœÄP7ûeó_·2䨙J·7©¼msu©Ì iX BZe;™å¼ªGND ’-Ğ÷¦ëıuAıÚJ‡Úê/v; ÿƒßàPù=;û²P‹ÁñJšŸÁùğçª&>ÿ^cÅOªøgG=õ€J¡,œ x;„ƒÛñ5ØDøÍ ³Ï¡Ì«¹×[wı†—ÿÀ0ğ6ƒÒÁ‡ƒGÓÌ3y™¦#ƒË*½‚…(g{?üİÑ6Z endstream endobj 953 0 obj << /Length 2143 /Filter /FlateDecode >> stream xÚ¥YK㸾ϯğme Í)R\Ù ’CÈ6°‡İQÛl[;²dHòôÌ¿O½(ɲº§±s±Èb‘,Öã«"o›xó±|ÿöøáÇù¦PEjÒÍãóFçN¹ÌnR—)“¸Íãaó[ôukò¨½nw‰qѹ:°?p·jø{ğO×­G¿İé¨ë‘j£ç¶ãá¾={nµÃÉ ±.›#N*8Ç÷j»³VG'aí‡r[}âîĞÊVU©Kø*2ôÛÿ>ş ´ÓZN¤¦©§¶÷(ab£eJ©®[{éÿ‚óFe€tÃ"…ŠåE´ºeùmçâ8úç3,UdÑ@’Bcí:ØGÔ„gÕ ½ç~û´İ¹4úÃï…¡¢4*e–gƒ:aÚµª¶aÒ p”aËΗ‡Ğ”NpáNå@JĞFe‰("EÌÖΧµA%´v’È¢?ˆ‚Xí©º•çj‡QX¨f¶v*N ŞÚ¬ªïgt—ª÷xŒØF©3ꌗêB{>—Í;µÿŒC¾æî JCÆ…NÕTCUYó"­#ç¾¼ö²t+{•wÚ·yU|ºĞ¼¶eĞ–=•΄Æ‘¡¹DĞ=°{5ØÍƒ•``8·Ëì¹–aÕr,¡µ&ÈÜÍźKód®ï2Oòó”¿C¡óœ7ƒoÓòw¡Ğ„|¡@`Ûaƒ?gß÷åq±è¥“cúøÜ+F-Á±ıï±N ªè$›&bX˜nÄöuÅ--ÑË–Ul‰‹µWq<0˜áù 'î½R8³aÉ— áòÂ4ª4ì¢#ø¸†aÏ]{–m/³¤c °k·ÃĞo­¾?~4sdG• ’Õª”Z‰~›ª8/nµôËPvCPÂáşwÖDû²®{¡·LbGŠp`è•k&¸R¾)°ñX.cT(¦Eôk5œdY·ì¨ Ü­ñ,Eÿ€Û¤ó$Ò™  ®±±¥gâ¬(©¿òRó¥11Z%œ¥ä$Y–‹§ª9V°Ó®áÇ"·OZ„¥ÎÌ $M€9ì q¨ñs…ªD2›Éâ‰ïV·a‘r`6:PªA7µè{µ–I\¡à´Aد(xµGªy€3£t¼H1?`Æ· y2|ÚŒj+ØnîOFü\9Ğ(xФ•~6/Æêá+LA&]Ø †FÛUǪ)kZp¤…5×[µµNTbïCñMKÛ<Ê$„[T}#W*ìHa%¬Œr@&•Á¾b×E—²g„í¹_Ö-º%rÒñ°1šuJ­l–L9€…U0ùC¨L¤ğÃjå$Ğ8ÓcèÌ2ßt׿5¨³™Š¡lü~¨ƒäïÜé¨sÅ è\>z Ò[ùÒù¡€Îå÷n Ãtğ] @‹W Ãedİ÷İ› —Ò1™ ;RS‘¹£Òk½ÚVP4ªUQàŸã•ÂE+kF³¾µ&Ú--–Õ @u¾€~¤°Û›"š$ú¬’©¾ßwÕ©1L¤¸È2U‹¸ğ]G°›ºˆ¿i®8]w½ <$`Kƒãí•<Óo1FÆÓàèxû¤Ddøı„¹fʹÃ$y‘7:`Wæ–PĞâ5Ln­Ø¾‘ ó‡ìϲÁ®ˆ3ÉŠV®y¸Áª„j­ËàF¦‚1Cı¬`Í×f/vI¡@¢ˆ°©¼Á IJL”}h;Ø>·yôq›ó3rø/åŠkˆ ×Z|uÀJ\F%-ÙËâåaíöÍñ'P=„b“ï„T΋2; ›|1xçÕHøfpïìÚÁm!MßåíN%S=?½qñ[ïûį÷û@­™c¨< &Ñáï6±Vå鸉\ÏQ|UØE18·Fxdòkà/s¡º¦:ƒ0h®¤?:ò€÷ğÔ^›Ã_ׯ£¹MŞNÀÓ{ÂìhŸ¿nØP`äQÁÂà`^Éû±U©3ïÈüzùmÂËûu²#y(#&9Í­øŒÃœó[´LúßšËeV™b*ØÚ!9QZÛ[ï'İ®ó|ğÃûŒ‡7Š,[®ĞeØá ã=·İyU ;=&ür’€Ø9]Dçr^ˆMÚ£'dq:Åfè¹ıÆ~Zݼ]8€`4nR6ì/€F2ˆ‡ø7JÀ7”³/é\Z¹|á}$¹ÄHµöxc²SŞ{]T7ò¼Ï@9Ü]²Èé/äŠßºhB©íÀ!ñg? ø·ÎDkQ§av½u şsp–w*1Ÿù‹Ån-¸êJH­|·¿«Âó¹—¼")Æwï11VEæFgoèíµÛ2ÈûÆòEJi›$xÓQyШo˜~züğHІ endstream endobj 960 0 obj << /Length 1206 /Filter /FlateDecode >> stream xÚÕVKÛ6¾ï¯ĞQFWŒø’ä-IÑ Ô@M´D¯ÕĞ’¡Ç¾3ʶloj¹ô`p<œ÷|3T=EiôÓCΫ‡wŸDqŤÊD´ÚD<ÍX‘-£LçLH­ªèX²l‘p.tük×~N¹ruó´Hd®ã²İíLSõ‹?W¿¼ûTDK¶ÌD†–Ò(œ‚“÷›Áv #eìZS‘©âakIWœ+çK!Š”t÷]»©MŞvVä,M³I¾º±ÆÎ’¿çÚ Æ1íé¼ğ™ğL³4×H°B ²õˆÑ&{S~1O`OCş=œ4Ødã·r!Šxkw`@äΖ:`à礡_¦ªê¡nÿ¡¥ÓÛ Ş†Ö,DõÎ'Ú퉭5{¢vv×v¢ÇŞWÉ:hØÔÍ`ƒUØ/X9ë[$ŠóøÃáVĞ,Mñ”<#±FÍÀıóe«¿İƒ£úo@é5¹Lü]R7ˆµmã‹r….–,ãbRÄzÍ‚©,Ö¾©'í[Š¥œ'Ònʆ†æÀϯKgÆŞŞƒy2•ñ9Z?§:j1üUº ɯSNfFÃÕ©BâHœ§ .êÀãGäŠø¬C(ôR;GõècPÈó8!Y¤›}ğކ\LœlûŒ_Q§$A< YqZ)o¸ÇÛ¶P¹ Z[ÛkÓ‡û5=Ô"(û1|…M‰Ôà |@zVˆøwH¬‡[pŸ‡â[„…äE(;8:e‹ÿiÊ߷κñ`ûø*çY½ÙíÃÒ®qdƒÙζ Æ·¦'~Û¸›óèTÔ!kY)!7‰¹)¥â÷~]èŞ>/t7Òh²MC—k_Ş€ÿcRÁrèı´nµióËö%¼<Ò?]X^ƒ€«¾¿g\[R‚×)ÏÃû†#, }. R.§Ñ/šÇôbܘ‘3®Šyµ> pÓ¼`:+î2¯2–_Ó±©°ûJ˰†´œ¿2 À¶‡štuØŞ~…Ş?Şt¶İ@tˆ JŠ%“ú"§ùrl@h¼Ah씳Å5Ôû ãe`^—€KÁ¤Ìï«fzyüD8£±/ä`Óú,Ç>8ˆiÿeË´=‡ÍœÍûï÷ƒÄ×wö0–@ç´®Å4v@ÌÆşû±Ãñİ;S7¸h£¹ĞÃş ›—F7µ-§p6!hÀ¬Ró&ô¶é­³}È´¤Ì+{× ¤óü±M•İ@ôVàÿ’È×é}8=3gA `½9)ı”èHº"eKÁçK9½µ\ĞÈw¤Í¯bA2™yàèáòG5“œIœs!Ù’¿æúŞ4NZø;ÜÔİ¥û‘ÈÃ=¥óÛ§ºùªõPµÃÑÔZ›;d®ûq®5¯ú­XÒk1ŸGJ†æ|¥;æÕıMºsŞãÿÔõ7íÎÛÍÙü ¼¯?obèõÒıÙÊš}äêŒ);¾Å‹¢ Ë|®ñqõğLıÏü endstream endobj 885 0 obj << /Type /ObjStm /N 100 /First 873 /Length 2088 /Filter /FlateDecode >> stream xÚÅZßoã6~÷_ÁÇë¥9Ã!9S, ´]ìõpW`‘ìÛb¶©p î../Ğş÷ıFr·v[Š#¡€J&E~šùæ)-%¤ ¥FÛ7E«AÈĞZ(•‚ÖZÊhq--SŒ¯9±àBq­+­3õC1eÌ][ Ú.4ú¬Õ™OÕR`òÁ³OÜ8pV n9pa n01fn%°&€k5°ÌŒIsêkÈì04‡œN5áÂğqÈ‚9´Y@&Ôr:œْ­Tñ¶IüÃkcµ$3–À"Šáıj-H¼ÔJ àjxJS èĞ |VqÑhe Dd‰CIiU˜ B+GA«„J& æ=‚• oZŠøÃ®¼Æ(•DXT )¿ï;R(ŞkÔBMè6ÌT]¡†ğÒŞe¡ +Ô‹êÌ„ וU-Ğ·AáC¤nÌ¡:0c¼dÂʆ¥[‚D-ƒÔ|°†Æ¨eMğD6´EVÆ~Ñ÷”ĞJõ <]AË-4%H(4*~ù[–Ğ‘94g'aµSå•a~É{ ‹œ€³¨½ Ôİ¿ $ ²Aæ=³ PçˆWræ#Ñ¡‰á}A•´2ÁcÉÅ^\°.İ‚q™|Lq`è‡ö-;~Ã"¶âËc5óU¡Ñàô¶ 1ùûB®«W¯Vëw¿ıÒ…õ7ww›íj}ıéÇmÿïÛ»ÿ®Ößnîêîß'Xcú°ş~ıÏõwï©¿Y­¯º›mxO’cƒÚ@ëÈXLca0q¬U0î›ğêUX_‡õ?6ï6aı:üíáÓxøvs-Rä/Â×_¯ğ› §¨JÖ¸ÔjìµN‘j~Ìg$sâøC*U.BR+r³Ó8ö…‘Sê&—˜ármSÑ,!‘h$Rv“/SÑäĞdĞŠ †–ñ?M¡/GY€¾ ‘—Ükªz¬ÈSãïb¡4inOB6M,y 3|Ë€¦DD_„Ù6Í>†Õ Œ¨{ˆş§Ñ|†²[¸¹ëEBÒZ„ VçnRRy’¡/Ä%n4H]€(ân€àS„=g3ØÏ¢ÔEh›ëMšİãµÓb9D³€ßeÆ´®ÕØ<ÃÍNÛ:͆I4ĞXBŠÌœ§¢‘Ğ$аDE¾ÆDSÑ”ùÑ:‹µOš×BfSÑÔù›š²! …i;æ3”¶€Xª~7!6™+0î biK7ªÉç½b¨jŠf˜D{± Oœ<÷t†iDIºvî¼ Å‚ZÇ¡Şb ¡:Iğí¨^‰¶:„Ò>’×ὪOÖon·ß£Êå ã]ÿ›ÍݶŸìO׆^a¢”Üİ M©¿ÁCë·÷››ë0Ãúíë7aı®ûu>¾ùÛÿéVëï0ww·}@!˜ıq¿‡Í§û›î¡/ÿû¿~è~ºıøíæ×ĞK¤"QkÆxÅ·ïñ,ŠIÆõÂ|Àª¾ïàX|ÛahÛ®Õ]»ë·󇙔‚L¥zñHÈ(•Y@>,…Ê>ÒX@sZ¯µèû8Åò8än ÊûZ`½:¥j¥YÉrÉH³=ßGü›|‡n©§™ÃşÇš9 ¨Z}êöÔ…xÚ!šâ^ßÒ‹ìˈIébEØ7ØgT¨oÏJÓ ˆ¸¾S,É"'ØY…_MçCŒÎYjyBhÉ7ÜjïG9kôÓ”,(õ¬c?¬?DçiuĞ/àn-tz€ïºUá§hµÏ=Â<âØ>­ö˜x1­ô˜V—ºm?{éiE3»oë.î/Ü}Ãm#qa$tÖθïuÿ{è~ûòªë¾º¾ù¹û'3V!^·—ÔŸùõÇLÎX_¡4:K29"Y!Ù~?jß <=@)İ#çv0€±{2|…d;`áˉÇlj§&ãö˜x<˜˜×ÍYI ô'® aùQ®gc9d¸µ,<Ÿf,3=/e?nöÍßâ¸×<©ÊÌÇTcyvv¸O0½%š/AÉtÌ»˜:k‚B-6ä {óô\P1ùª ²çYxNç-ü ¿ÀÅÕ2ª—[}¹Iæz¤Š,—ª"çYS NÑOËQ«Ôô9ÃÇ Ji11=ÒEÑEÉø90K»8Sô3ş¬#¶v©N娼òóÌkïµe„ÃıÔ>§ƒÏ’hG’r)»eæß[Ìp22ÿ© ÓaDã œ¯‡dÖıU£Ø¬+åXSë·5Å?í!ä÷åü ô¬¨#¬©#Öv0@ÜÚ˜Op¡I£1ŞMIt.¥Z9ÚEõÏd.¥Ú€Ø¿Ê™Ó¡6ş¡dõ˜7ÿˆäYõ¥½Å$ş­ÙĞf¸xÿFmlˆ=&[áód;è¯~’áŸ<œ@¨\™N(PYÒ³õŸ\»”_5óK§ñ«òc§^lDbvÂ<B8Ğ endstream endobj 966 0 obj << /Length 868 /Filter /FlateDecode >> stream xÚµWKOã0¾ó+"$¤6®_qÄrØÕ‚v»½‡PR¨Hš*Iüûµãq§n¶ô;öÌ7óÍ#Sì=zØ»>Âğü1:^Å^‚A…7šx$ ‘ Äa„( ½Ñƒwã²AÀóçUy‹ ϳJí¹Úù‹qVëW¹;)ó¼ĞØ™ÎõY¹¿™/šóÁİèÏÒó^Ñ®)á(áÜ (C Ñ–\‚†ş7 <™æ™Şİâét¦w”È=QRiWöôT_ø—ó<«Ï§û¯´¤s©øéå ôÏ•»jÁqQw•‚’PØÚÏš¬ªóFo›i‘ë¥4²¶$C[òo–æzU-f–4‘¦ù”³wŒÊÆh(²¢¬Ş”hIJèó6¹ëŸKØ%+x Wy ŞUY½È›ÊŞZoM84cmÀ="sK*Ó:A©Ç‹bË:Ë'`¼tÅœ§y^ú¨‡j »Y*•(¹E\Øn ‚„8›„'±µ¤Dz+ùÑïXt&Ã0!Idpm_Q=.[¼P‰FC„O:!/aEğ3 r&L‚Àıf¤`Š0Ę‹Q¾Å)`… nÆrˆû^Q!…0hW0Œ(Ná¬i#µ¬L§[®œX&t•e;%š·S°R§šº«ÓK­ÆOÓüÁXª2­½ÙÍ´enõªÇø'ï·Üh"Ö£¡¸’Ògм*hf7ø®Õ/"”$¡¤§Os=4lo¦X XĞ·¾ïúә ¢Ô¶™s2lÓ­µí~‹aã·±iâØ°ÁÀؘ!÷²p•ÙqB–ü›ïÂ~”ù™ ïÕU/²º3l‚ncÑo+«ÍşRm‰ËÉš.hã+¥CÁáx›£\«w±)ûϰíAûÊʯË*ËØ]Y\ª©+Ş«†­W½x³wZö»´¹âİ"¹ãMÂÄÛ*ÌÃPxxïŞù6õÒÀ¥’}¶c“w?aV3q…ôãkçx¸`÷‹Ç¹¹k9ô¦év¾ƒrÆMåü¨`FìB!0+n­’Ä_¢„Ñõ)—î1/¸@°«YnFÖ rGf˜¶Â¢)LrÍ—§2Ï.?_Qğ!&ûåFçߨõ¿'ˆq5§&(c¨%ñktô-˜T endstream endobj 971 0 obj << /Length 1952 /Filter /FlateDecode >> stream xÚµXKÛ8¾÷¯ú$ccšO=‚™fI€=,°³=§$µM»…È’W’§Óÿ~«X%ÙR»½½ÓÈÅ.‘E²ê«')£]$£O7’ÿ»»Y}ÔY”‹<ÑIt·Tb…•&J\*´qÑİ&ú'2[,•KSÒÉXÉo‹¥Q@Y“,–:Ñ.¾_,ü•5ıß~İzK?­ŸÖ•'ZşBÿŸÍ×Å×»DJ ›¨h©”ÈŸ)yOÉ'k8N+)c“®LÊ“ë+~¶aóÕÇsõ–Îéà(ãDŠCxÔİÈeŒ‰·M»/ú¾¬wømãfKãıÀĞûñ'ºìˆé¾èü†§ë ¿ğ›}úç4¹;´0"‚9d¤¢m‚ÄïŸÀ*i”ˆ<5J­s6·‘‰bx/$;N• ¦ á‰Y”—FJ¡ 8kaUFs˶ëß‘h;_û¶¨H¼²&8ÊA«Ì«3Ôi† èñE*[1n'hº‡f+ë÷3i•=WF`Xaaa«tÆ>ñP¤ Læ®Ø*ß=7´I@}=°½_,á+³*kì¸Ç_RË·4f²*‰Aãî {¤;šïá»ø¶Ğiìk)ê - €„œşsv-v<Ø—{¦øÀ>`¸`+²IMÀŞybkÕ“Î/Aº$×4Íş®eİû¶=zŠ¥ û3ŒS#´vg;­„¦õ}¹~”j N}܇p;t¹L³ñQá!Äu„Š%!DzLRÈÿ…RşPj=*‰µÇúRI*rˆßRVæ¤:¤±Á-‘ û„±Rèad`÷.\Õ1Ä&à¨Ó4îJt bØû¢;¶~ï yˆE˜´m›ı,c!øàÚ»²®Ç4Ø7³€÷õæ…‰²¹Q¶ꢌ‚¾÷û¦}º»ir»KËš'Ã&‡€İ7G+|½€…7cGJó0zœ<Ê»¥!14»¶Øc²x‡‘®ãßz†ŸD™À_rbıVV íÙÿ`‡ıô÷Ñ]_•3ÍÔtşBÆ„‰1á]¶crX´+Ú{Ê€ğ±nªÊ¯û†×=b4¼$"‡ 3eå/dDÆí<`Ià;!3’±¬D®èÉc‡ZÅS»’Ò4¬P®†Ä]UÄÓõpN™¶¨@pöb¬ãÎ!vÖ~Á7ÔĞç¥]ä‡ÕÃËéGK‘kunØ\Ç6âšÓ™Éqt0R‚Goæ ²ªKYÕlTÇ‚%@çÜøñzGî˜ğŒ† K81óe,颧İMºt¾Ú¾ ïèÈ·p¦ºVĞ fIò†¸Z÷ÇWÀn­³xÇš¢éX‘Óq¾=~î>àql #üÂ誶Rd™}Cæ½úm¹À_WÇRyŸ«C]e\èFeÿ06£‰eµi}ı¿íıV .<@9‘äsŠ* ú^B/=\ƺô± ‘w±œÎº¦“†Ó}‹C»Pt"”;/ ©b;y©(¤’’24õ²õëcÛ.ÓtXàÀî‡Æ=§J‹Å2s&ş}²å ’l’3†}¡Æ!3é$ޔݡ*¨fãê Ïo{ª`@ÖÄÙ°k-xüÀIú¾ğâۿݤ‡¼+ÑvÉEPPb9ËoàÃÑÒ3[%‰Ğ';¬Ÿ*ΩSÿÎ%ê{A}áü6:\æN£F\u±ÌB“¼%lºèG*±(÷!fĞ+;”ÜÄ ÷) 'σ¯pB †$Áã…!C ¶¬@­±Y˳p‘LŒÖôüòílæÛ!­“”køjY– •䯨"§bvİDJåBº·¤¶ºxU’ûpik&ãÔįjÀh¦?kÒìà¨åä‰ÅijµßŒ]¿gŒi|ÚôY µ©ÖwǪGÚŒ¹ Ÿ:™<^ ûäİ6ş@—¢z32 sıp=x $p¬ 1t,vÖúŠJ¨üØJ”€fölšÄ¿"ÖP<ÛáÍ( Q4ã5Ú&Ü“ÃYOj/£O†k™,ù€¢f÷tça©2aOqéëşÒ-KkáÌÈ4¼5Yù\ëÔi¶eè·µ¦D箟ĞBDƒeöf{!†”5"/y??—Ï }j]W«â'˜`_î€[>ñ¬`ğÁä¥@¬Ã«ššg0Ç”õ†wğÊ'lwˆÅtö˜C×Eyº-„6osDûóÔØçMq’su4Yş¼gÊ©šzf¼$Àç/Ã"àÙû‚Ûª\ò]—N¸X¥”õÕfŒÄ±"vçoöÈáİæ‰Ùγ‚=@ÏLün||Ô¬ééÃİÍn?*™@ÃGJg"ˆ×û›Ï_e´I_˜<‹ë>R&6Cﬢßü‹^¼UN‘§)ùJÁU`Sğc™$gÏ«À˜F0™JE…/ÇZdÊœ¢dvܹ¹AC è•×¹ø·².‚cÁà}Y•=x?&ĞTƒûá]¹?¼_­Å®^EÓîV]³íñëY LV÷%ÍÂİjÍåG`U$åÍ!Kr%Pfêгÿ< endstream endobj 978 0 obj << /Length 1725 /Filter /FlateDecode >> stream xÚåÉÛ6ô¯0јCR\ƒ¢@$Ez* ß’4²<bË$73ß÷HJ²lÙV2˜4A/&Íåí+E'w:ùã=3ş>v󆛉%Vq5™/'LIb¬™(© åd¾˜¼‹òéŒ3J£:ßdÓ™ä2ª²õr:cTÒ(]åëE˜o²M8š&ëu«R˨HàÚ‡ùŸ€)c1™1F¬ °c.ÂcYÃèǰÆn„àÓYÌx’û;öÁÁ› ì€PB ÎbqGjâü’>¤ëÀ*ı5 åÎ2á€:P4b œßÄ:l¦’pnŞ ~&41œMf<&4¶îë¦ÜDYù0 C£]¹¨&J³Å¾ÌüÚ*©ü$ñþÈ?íÃ^^,²{?-Ğ~ƒ¿·FVzzÚçT-$ØFĞû ™ „ÊâæÀ{ã*kHyÏbÁÃ{Œ2İ&U¶ğ{ÛÂõÊ›°Éˆ¦¬/Ç#m[åuî.0äÁx&ÌYÖì®Lv«)‹Èt¦´ŠŞÖápåÇ}‡Y´W·~ü´ÏSÀÇõƒõ2QLÃ9Ö =mË2«1Å"/îüzæ¤Xƒ:L ¨‘Úg` ÀØåí6D“‡Ÿ~ étcäXß0:“›¡ğQ:8¿-Ïš³—ºB%€l„`Ñ%²r×$øhR8ğŞv9Ä…' F+<Çÿ"ªö 2uï7'0f÷»5¸¦ãÎ »:ÊÖÛ) Ÿ½”˜ VÄ€„CPQÉ+ĞcV­!Ú¤4D›Æà\ 81JN‰×錒½ÄCm˜»yÃÄ¡«iëMîi¥š[L]ꑳÖî]ø»BÆK¿1Ó ¯Q¸3"Ï÷"/³´F{t-øgTÁZŸLNñ"e‹öó*+<4t”N)€óaº2„3u,޳’ã A "ƒ ¡âkDçÓÅ©ìa’‘ìò†O44„Z6œo—Crd†0«¾9Bô£`Ö_/GLµ§ÑYe-pãbáf[+ÛWÉ]vAPœÕè§”“-'f4Ô>ÆŞ\!2ÂŞbHHõgüÁHLUÅuÖÊ*œØòw@¦n N!°Ø£¤D(qQÎ\ÛfYn7C;†C×ÂcLl§ÏbÑU'ë#6{ÉÊó’5'Ìğƒ,Ql‹D¯}Yå¾Lñªoø‹äÛJ«Ká «3sÓÏ•ù&iLx éÆc»8LLdIHF㓆<$“4\4™4‚n€ÁøÊ4ľCßõBnÁ…;AŒ¾–6ZpVŸTg¹ÇªÈU S 3öçü’<Ú‰¤I ñÕ”*ΤTQ¨ïz¸´„Zó­RŞX6}ö‘+ûFd?kåH–5¤JöM’Ó¿pé4G‰3ìP¬ õHvb¨ ûID*ŠgÛ±f]7 O¬މñ@/–ê(€hb©•grˆUDq12Æa³¸ÿ>ŠÙ¼Å}IÙ4hà$”ª~Ì_äû>¹ãõî“eí8Í%î°‡ …&KTÜÚâÏרvä ÍqRxÕ–—[E„é”ùØL  s…ø‡lÒ§,{“ÿIïğ_ ñ‡iÒ§l’ï¤kPì¨kL•ÓU8;Xi 滼"1.éìaÙ6 dKâë]ƒ8<” 1½ÁäÚ[>Úìa‚!Û1üÑÎıÓÜ+u™%õ¦‚Jÿp[E–¹ç8œ/·¥Ÿ86÷õ>YSWı#t&Y©£·…ß­ÃËγûYÈeøvô„œlvëìÅ÷Ğz®.êŠ Ùm_áœhݺ½ >Tk±l$ˆqtŒ¨W˜æ+÷Òh™q´¼ °`pyg(‘¢ó÷–êË èåG¸Ş._Å f¤| د©Ğb ¥aÜCùrÜ›@0Ø£çŞSB„‚f¿UÁâJKwVñx‡Ü„H=D—ïãW´Úâ| ÅuÓç¬Jï#ş‰¶ú‚¡Üqn†°zmªCĞQ,exa.õ 8ÇVÑ*ÁLßù­rßK`¨Ş]‚4$µÛÓıîŒûAõ3ë XÜuß"Ğ~TluDº-ª¼ª5.ÚSİ} Šiû@®İg ß}!ĞácNœ P æ`q×>•hÖ<•À²ë5ºË¬»¬m·ˆåA¿MÑt@!Ş¥oáškŠ`?ífv CѾqôCh—šÚ>TÁ\ô+õ Sʽz̸%ƘğEPô½?û·‚ endstream endobj 983 0 obj << /Length 1698 /Filter /FlateDecode >> stream xÚÍXYoÜ6~÷¯Ø—ZÔ’IêŠM-P (öÍ̓¢åz…èXÚ&ş÷áºö°ã @_,.9ÎñÍÇ¡ÙêqÅVnØ…ï»ÍÍݽÈVy'"Ymv+äA†«$NÆ«Ívõàå¡Xû.¼@tÆÜã,g•j=;`<ˆÒ!öCÌÍ yÀÂ#íÖª¶D?ÚjØVÀe˜$b~;Ÿu`Z…ÖäÏçÉ¿"à_¡Ö/ÑûŸ/ÈøK_¼öŞ5¨+ “ÎP<¬N.\äoGJú½pqÍ]ló üºuu_ÊC·/OÏ|R/¸Šç1bÿ-œ#–‘G"™`85yIM^DBF œBÔâÔ°Ù”ğrã’ÕQp§º†F_«~P2úœá@æ`-ç¸y?£Ğ%E<×ràÇ8L†(F(†—ÃË[@.x&Éö€ËG,âÜ«#ñ—Á"h ‹fÍÊ`lJNH'¼=×ëMà›zŠÿğ\§H LuÇÉ@b0Dã4LLng˜>€ÖeOÓ„^³ßí£» ÄÍ ¶³HÂĶdôŒl™´Ïpèµ]ëCuTº¢vŞ^¥#/—¦ “¼R-©ùwdw{!ùa–{p¤ûX©šC-×ôöUת"šÌÁÊn"Âaİ5v„ïÓè£©Õ \X­”[;×ÑŒ‚µœ'‹yäQ4G¨®¶pğÕM×Sš;˜·•»âX÷4 š°œÊYn¬,Ì+ ³^›¦^“4¹ÊŠ/kêëŒJIoúX}›ª®+-ጭν±?. KÔ+Çn'>›Ç‚_š~ ç¡é·ÕlMSóûNõ¦Œ9AÑN˦†‹Xır3QHÕ¹e¯ê…µ¦7‰ù˜Šè# `ùÂŪ-Ê£‰JÌL§èÛöу?Ú®•¥¤Œã±¥Qa—ÁgDĸÚÑ ¸duì‹ñn=¯U¶çü¨Zİ«£C¬ÜRj$‰€Å!In¨ª³ f ê1–)ÅrèIÄ6ı0*1ú8|ÃZZAʯÙr¡ÉË És¼ñİUµT~ÕÚìù矨¾añhîkÙ5éç%¯u§ˆÀ¬®šÛñN´ÌV|¥›qğׇ›Õƒƒ9oÃæÿ±w¿Î"Ïi•ß d…Û™ì®góÚ­ şÛç’ëfQ0vƒÅÃ4éEo:&’âAØUCw¨‡pQ2ÓüH®`F£/è,‹£–æßYÖ,5㔦¯ŞŠn0îaÖxäğ2UĞï•,¶vÇ“îeƒùãÙà9«CÑá²å”7-Vì[Uí:˜)±¦Ô&‚wÔ³æf‚@V>ÙbÊ_:xT†ÄOYâıZëî–şÏäVHnÔ´•ò0‡tA–âû-‡÷»…gBï77ÿ±d€Z endstream endobj 987 0 obj << /Length 2589 /Filter /FlateDecode >> stream xÚµYK㸾ϯ0æ$Z=¨×Şf€MrM{ÈäÀ¶h[Û²dˆòöt~}êEZ²åM°ÀDWÉâÇz±o›xóˇX¾_Ÿ?|şVmê¨.Òbó¼ß$EE¹)ò2J³|óÜlşŒfwm;ôÛ0«âà{œÇ£±—njû“Zauz<î@<­Ù¦epÑÌ·05¶îİàbeÊt”Áy¾Ç‰êÌ(Œ¿^RóǶ‡pûïçÀYÂ$‰ê\î[œ[  ›©à¼ A3î )4iR4Ë‚aÏ_Ş$§aÒÓÆK/Ìöd"Ú*QQ­Ôr¿¯ïÛP%YИ½XଳÓ]Çtœmq¨=¦Œ¶—Ñ4L~AMeR‰VŸÎaŒdP;cm´ ‹*~=Âaˆ¹c^cHÇpMÉ£nP¦†½ œŠ?ÛŞNãåd,Ó€öi]‰öiU9íQ±"ÒqÀ«@ÒU­c™ÿÖòdެ “¯gF–ù¡wS÷¾­² Z»E>]Z¤ÁЃŒ’;e™== Ùãpé„%‡ur½m3ºymÏqÚè2/é¬@f2³Ê§…º«Ëry»œNºoøÇüÖ†‘iÖLä:°ÈçoéÂı²<*SKÓ’0yßÂ~¡öCOğÔåÌ,JóÊÍ$÷½®øóÆ<‡ºß²°[:ᥙˆwòĞ;Èê4°jM£v’¨…ªÄÎJꙕàxÏ_Ϝ뉿OZ\›Ö<|ŞÜ=ùI7NĦ…À‹²âì¶Ú‘bpᘌÛ5£é?FrÕå†Hñ"a¹´Œ -—EE9IÒ<øÛ°ÍT1+ü0XÀ¿ßPh_í½‘ ªU”Õ¼ô3E³X-VPq´–é/ÚR„!fdMú•Ã^,AЈ,¢_‘ ‰i4.Ì“ø¤éô¯Ë ólTş^WÅ¥°|nøeT$™÷®-øæøt!nùzCÃ2½úJ˜W ¢1šı0ª{'şÚšÅnŸŠ$A¾†}ô†~’L CN`f/g™¯é[Q^„Ÿ£9\pïáÄßæjM>ù=¯òåÑ홃ÅÒ'] üô©)­gàÌOZª(Nê» Õö¢cˆd%˜¤*ʋƒêÂ&nz6qs ›€d ¿¾šP¼¹®î⪊¬ry£Áˆcûn'sâ1HÚ…hI˜ WàØ—#ŞãL-ß#Óu)²úºåÂkd±Ê_İŠõ‘Î|ìÊ”[1[ Ü—.şˆÙìˆPuì¯`î`.ã®ëdât vjµŒÊJ%7$¯1òQx´ÂÙéóÄá±OƒÌÒ§•”’åÒy™³Ò%!pÆ‚¨ 9ÊW£AÈ‘£ÄÈ2 OíeêÀÔÕ%J¯rèRDôŞWÒ2|RŞ8K8/ıJ øıe¶xâ÷vl9ˆÀî5§Tô`³Ò5f0:oÿ*ô¿¾F@™3Š»Ôë̤~æ˜ê–^½ä¼µÓñºåZÚàj%Ì }ã oVÀ‘0?=‰Q·VŒr¨rÃ1=8аËG}¤û5äÓ"Š=ğ´M?ï÷¨çPå\‹0HÂÃØX)vÒ¢ˆÊüÖZ»ºa”A‘e>Ysªøt¿#¼ºTæëª– *$Ïš‹Uøµ‡¸¦¦Éğ"ù{æ_‘V­0©`C_,~ê´ë–FeáÑx’šOÅ÷Qí¬pI˜]©PÎÏş†Ú‘\~p[Œò4×?zPbO0‡R…xİfjíÔî, ôt¤â~Åòèݵ´"…«¯”ÁU¦²pĞ~?Üã¢ò()XIUEJËpô :ƒ$e£½³búwx…÷À*]îö/ã•[ «Õÿe`˜î³Ù%’«[óû–\¼°¥8'd…—¶k§–r#¨`~´vZjÀçà=Üd²ùQá§nø`—»06Q„á»ó9kÅ÷bˆ›qúg,ü'ğ’ÏßµÈyåi '-£:•«…hYŞÌš¯#_;’‰J“äŞr⋳@õøü„¹nÌ¡XÉ`Ì=ñóIĞôÏߴܽ™×>’öæm¶ T¸+ş?çnµÊı¡Åì ñÛÊÅ ˆ]o-X¹ªÒé(İ)ÈÕ„ªîÔÜÈjWèÁœJK>-¤SL~«™ëš„Z~y)lõTşJ€ˆ¤Eňà &H‡¢hpô•¤Wi¨ğvùEJ`!õn¿ F„¢”fÉ|7ŸtWğš™aøøÓE¤ÌîÃz\ß3‡ïR ò9?åüEˆ„¥ñç:G BIğğé*êଜĹğ&X´æ)=î§Z\}B³ æˆğ–4Y;ÃÙ´Tª®YUÇdlµ¾`«…õê‹A£©Syü8Xгº$•;?–¥#¶cı ĞÿÂükÂi¾ÂLnÃ!c C0¬tÄ4·1)¤¨$÷ QĞkÏ_iu®Wä,2@„€wëof71ᨥ•ÊÔ¹5v\ªÿ¹î Š€ËaÔ§Ğ ›|œ—ÆÃ…mÆŸ˜È}sûöš­T‘ò»Ù%Øæş‰e\M —¸\¦”/xȲ—%µİz —9ßl)o ¸¡wÉ'ìM$3ˆìƒiòB¢]F!IYЉ -ê;:˜¢fjR§ëÖ \z!6%$Æ/B@Yİ PP–³ 9#Õu ó²ä’›Ø¤ºÆs¾o+E¥Må»'åMߪ’Ñ2 »ñôĞ(œâI•GÁJŞ“‘”«ÿèÕâb0~a5Å€ÄoçSW^ÜΚ¦E=a5θğªğ_wnÚS£F5ꄟóMPA?/°ŸbzYÆY’¹’åñttÂØ[”¥8îîÌGêØf¸¶U彜Ü)’©”!æÈ¦üŒA ?¥gœ¹}g*ãşÙl¥YJÀP…,ÊÒØ)ÆÆ‘*êà+÷‘ÇOvZß®f}”ËÄ&GêûÎhQ°í±ü§RQÜöA²¢”»¡;äÖXÙ‡%‚½Ûíì. ùü7(LNh|òÅÓ¹jÏ…/ß*¾şÏ…ÑÊ>îıüÊï·‚2c{ÀŒJWXäKŸC±İ.°ÃȉܹÓ{îføûhô™EOæ4iõb \$K¶Y58׉ÃËù^ŠP¢åÑkš‹ÂÔaôEÎ]Œ´ºÊàóG Lë«È"Ğ @í=á—Ú3˜Yçuß&)Ѝ*á iU•tã“b!ôóó‡ÿÅ¥Üë endstream endobj 991 0 obj << /Length 2150 /Filter /FlateDecode >> stream xÚ­XK“ã¶¾ï¯PùDU°Äƒ \v9›JªR9D7¯’XæC!©LâŸn4À‡Dg“\D¨ÑúùuñwúûïÇ?e»œåZèİñ´ã±f™Îw:I™ÉîXî~Š®}·?ˆ,*lyëí°?ÈDEŸc®Új¸Øò yôr©Š½H£ ÍÓ¢t¹(‰Loi¶µ/40mIZÑòän9Ñ S×Ö³»ÿùøĞâÀ9Ë/*í›ë{™Ùş ¥Š—j ùª=u}cƪk=ÁM¤ÑmpGeìè[VÃØWÏ·Ñí'ÀÒö¶-lØ•X.Ö\·ÄklÓõ¯À#dΖ†ÏNT;¢ş/hCk[š¡³`pí«®§!™l9YÜzWDLs­-(­*=íÑ¡×jÛ `‚Güˆüñ“XĦ‡a4ãm ö%w*˜H4,òqS5ÕX}AÁà$Ÿ*ƒŞ‚Mí—ª=ãÿ42¨ö—}¢#SÕæ¹öüÎn4\Ma=/iÎ8pºßüõ¶ìù^ •İ C(Φ&$'ÄV1:Ã\kšø'ñ†]8O˜ÌEPõ\ŠîÖ&Qœejâƒİ8¸%áiôã:zàP=p¤A Lñãߘ™IiÍ]ö*¯¶¦£)&œ³%E;$ÄÛ%M<ã^¯49îyD±£ÀquݹsœËÜÛîùш ºœUµÿ뜊 ¸9üô쨠â¤w29ynlºb98÷×A,•Ä  ×ªÒ¹gCnã›X!‹»¦³{yÃl°Ìç|Š&•¾èJÍbÎi'ÉRXÂEıİcèGÖé;ÌÉBe9R3!•ğ·YĞgëâ&èÁw‡¸#f£kÔàëî £û;/å[ œñ[y ¦[àbω¯èš†°T¹«Şfâvºş[`2jºO‡¼w› 4D!İx¸vPZuµ5-y=GC¼KaZZäE%*(KÔÛ@èï뉅Ρkxú„ ¼ ‹³dÂܶÜBôœ >5HOp…ÛÚ LB^†¬7°Uá]TìÕµ‚噀°PLˆì^êU“'4ãÉT¬½ÿ7D—Ši1•”ŸëˆÊ_éÓN«ÿuèè:Å™öİϪªZF¹Ö4¼pÇüu#Æ8¤e}³Dwqdz(áñftŞĞ“Csš&ɦ¢+7æpkôDЃ¨ø´Ç¥§# }æ°K)ì&‘qã'xÈ?µ›‹u5ıùÖÌO$J‘KV—bjj6<“QUòo÷Lg3Çf¯"ÅÓ»ºóq—„é|Š—¡iTyñ@Ñ–F¥óÄ ‘ãV;÷ ø‚§,K“7™Ò|á ¸ó7¼-½TƒÃkn¢p2=Î`hP+ (Õ]-Œªåâê ЯZ„ĞÅÍÓ˜^.^¯ÖÂWb0Ä~%Ïô~äwÙ„X|N"ôçq¼ÁÖ•ƒoó¥—aÀT ¿ÿæõİ£år–äzİ‚óda!÷·;m$J¢˜zGHŒºÉ5.aaGúºWhç©å@Û”D&ô>z¼ mÓméQûÇn€x³:¬¬5J|mzˆ±€1ƒú°®—Çp[XôDÒ÷ê^zwÄŞÒ==¦ÑËİC#–Æ¢î†~ã»ç¡??ü)„i endstream endobj 997 0 obj << /Length 1737 /Filter /FlateDecode >> stream xÚ­Xİœ6Ï_±oá¤ƒÅÆ|µRªDJªTQ_zR’Hõ‚w—ğC/Û¿¾3ÃÁ.—æÚ¾,ã{<Ìç 7‡M¸ùùYøÈóÕݳímò Ox²¹ÛoX‰È7Iœ<Š7wåæƒ·“}q¼ùt÷ËöÍ|/Ï‘rPd7} ãpwãóÌÓô[+Ù“áÁŸ±H7>cA;µo[ؘFŞï¨ÿ†§Ş‘Ö )(ÕsZË…gZ¨®Ó’£gäU ϼ$é'Q”= İ(CÌáD¬ûª®‰SÈÁ(bşV ’£j‰Dfí—&÷`Z%úZõDUM£ÊJöª>ã¾êHÅ$F«[ÿ/Õ]4½ìÜø"æŞËÚè[â÷GE˜ŞÈ¶¤Å©ÓşšE…2E‘W’ã”iŸÛ;œªn˜gı×ÓĞÓœz{­Ş«Ï£pò<-+CZôÇEÄÚ¡—Îî:µ—CİhÖUj]ä•Ï€æñÆç,à± Ûkõ§ªÍubE"HÃh=±RL¬ŸaV0ï!¿œI³¥o^·rW+ûÜ›œT™×9›{rèu#ûªpn@»Á{@TíØzïvÓ£U÷ÄŸ…Šãk¡—TM²û£j×"/à Æ(£!ö" —©ìxh8îÓ`«#w’_NäwÄí±¼¢:Œp’¦Ş{¼î±Ş(qZ§ÚwGI©VSËF=Œ†0¾v+z1OÁ[3(O¬c€AâÁ1 ´IÁ1N! l𙘷•ˆ‚‹1ü+' ²4å br­„xJ¡êZGd@ÌRÌ(E&Ë¥šJ´Yfe «i™Ûc]¬‹¹$»$Qê½µŠÄÀ—póI òKKş§]Òš~î4 A.RÜ~ª?P;aDU5¦S=yÓ*ìGˆanWáŸå—Éσ$¾#ùg¨¦©Ç©ëI ¨åÖ#Ú²x¶Œåò}x+MÈæeíÚî½—] ï¼bdÎö'߉éSnkïs9ƒlCg‘Ãl”`1JÌ¥ù)ë 2•4--ˆ% :ªDØÌRï3µ è¡| ²ô[]™ª>_‡+I‚0‹ŸV8" X²4ˆ¾îxÆ©rxî'rÆÊáÙô—pOİAQ`%ò§c­lìåÆéİÓsYCxÔZW i&œ€Ûş‹LP¹êE*9 óe©Vó?æAOîy÷Wş¯™Ï²pø"¬W‰çÇSºuµ?M³éÑœ§i]âî«Ë:ˆŸ^æù¾L·­u!ëm]í¶¦À?¾D¶İU‡-í LÑ|úçX†‚ ؘàCd™k,[œx}÷ìo±KW endstream endobj 1006 0 obj << /Length 1929 /Filter /FlateDecode >> stream xÚÍXK“Û6 ¾ï¯ğ­òÌŠ%J¢Ú[gšLzl<ÓCÒ×¢m¥z¸zìfÿ}’-[Éîvv’^$A‚ VûU°zw|åÿëææÍÛP¯2‘%a²ÚìVRJ¡c¹JâT„Q¼Úä«^Q—Emı{S¶[ÿµùıÍÛó9©‘ŒA cşÄÁİÚµ×À7ůôʵô,6L -`‘(fåÇ05[ù°hób›CÑÁÄ0ò¶M½1}Û”Ly8Øş`[ê4ü¯›04N¬E9òâLY6(ï?6ç9 ı»á®ë‹~èYÄı:=Óæ®´İONÙ`®'p$YÄcX¦öÑJbí+™zlM–š™7“BÆz4ÕSv Dd#sÕ8£æ¨`Ò®`Ù¦¾…F¢½®©,‘>lq‡[1ë±¥©[›--[I¤H’t¾§‡¢,×~¤B´Ô9'G´×_°— *5Ó{š€Êá¿ùÈèÛ1ÀT³8\Í”†Ş»í‹ÆY œ2XÉU‹‰?Şİ¬>:şP(f ¯eòÁt´jÕ´v ¡¢Ş5mep10ş/Àñ%´Ãxå‡`„…tGP²iıÊÖl»‚M^A%ƒ¦¦ç1p¤芾¸_³-#4ói {ÛBAkáb,€¡.b(vfש ® Ö±''¾bNŠ hä{Ew, ña#¬lëÀp2šİÅd49Zƒ—µN«aÉú£Æ&âÖ•gz2AÕt=⯔3Ôkiüig€É‘ĞÎà‰Ñˆ/8½ø¡¬ê½ŸÛcXÀ8ŒD"õ31N½~Ìy3˜eR²h g%“ œ‘âÀFe¾•3wEÒ“˜üÇŠÅ×>Pwš{ Ò-û"/tJhb†grÚ/C=*õ= *m½_ÆJ ­²ÄãŞAÕÎN'hPB-aeê«(ã‡fX!%®†h–öÔåÉÑX8xö¿Vü¿ ¬“¸îˆ«d†UĵD:aXa:ša¦à¸rL ıÏâŠ¥ÑŞX–i9…A·–Õ´¹xEãı8O¡õ&Oÿ/æC­^Á|Pñì°ô‹º·m;{¿/*û ¾gŸ›ÌŸHN׺sU²íQ<•¦®šB©ZmÆ$€•r•-JëLu„:lO£#¾n¿¼n¨`qUQúK‰½,:‹ˆt·´Ón<»çÇÉeŞ@û¼v•5Ô«>ûv½H‰ Í–oğ-­©ÏÀ’ Šï wuº¯Â  qgp€›=Q ş¶Æ›@&R1 w çQRçTğCç¤x¤ƒ±¾:ªıMEñ‚A^DÕ94X°9/•^‡jöìCå²»nNSÈn<½ï÷õD.ıûÖlíÓ øE¥ÿU ùFÙŸd—e?\󨇡YâE˜xWC´³»¸#—/çØÎS^îHdÛºk{Y° ¾Ö¦+ˆ'¸ş…Î~¡Y·É(–´ ,)`_aì½wM4áèGiì.´@ÊÒ2øW(…NôhÛºB–Ü]ÉÀ3ÔÍMoˆp]á‚Ö¸uºÉ¨?†0Ü,€=úò$‹„TÓ[.<¯U±È¢hä3u¾ \Jª“¬ÜŞ ûkIQ,T:IÚ6\ér.îü0óÆ—NÂpu1K(m9@ \é¶CiZŒs¤ İ %{GÑ–€Ç“ Ô§K',ƒ»Ic¸W7µ…ã͗ï NGh·Ÿéùóa0®™’ƒAŠs¨!¯©©1¥$ìôæotVËcÍĞscGÒNyåH)˜= Ç*Z(·Ô1L:H[`ay `i¡À©›®ÁóG–‹°Rw"§Ô¹‡ÿİ\W$NÏjkM—€Ç㘠éÀ H¼d„ ^©ÜÉô)Ò±mi3ÏLÂhbAeéÆe˜P/éI8®`ؽ{³¬¥X´äÛç†DŸß:Cr(Ø/¦¢,.9‰ı<¯êd’b©–Aìr… ³Óo››Ùm» endstream endobj 1010 0 obj << /Length 1293 /Filter /FlateDecode >> stream xÚµXKoã6¾çWøˆñ¡×X -šzªE‘æ KôF]YRôh’ß%K¶ìİÍ"'‘CrŞóq(oõyå­~¿òÎ|Ù\İŞ‰h³8Áj³[ñÀcA®?dBú«M¶ºw>®]_øÎM^¶µN;š]ÿãù^Bcni˜Â˜Ó03ÇÍ ËåœÅ¾å÷}'…d1§ƒ÷ŞmH–ØŞó‡3L§›»YØÍÙ«´vVû%îKzn/ê™.)ö‰·w³ (+<ˆ‰ñéQ—kWD!ø>Sêgšï*ü:ißÒ¼Be}ç_9$äv¡ÕĞtFç»GMäºÑÿåÕxºÔÓSS÷í#ÁÅ5Hꪙ"°;]’âÒfLt ¦†ş½¤SõkWúÂI“Ò©òUMd£’Ûá Î#tÄ©nº¼üL[PÙ™ƒ!8›¸ÁòxλÇÃãõY-ˆØc\ £o˜ˆ…`•]O«ı>)³²XÄ‹¢yà«ÄIéô-j(Õ¹*`~8ŠEË¿œŠ1S¡8’Mì#€û¾B‘Ÿ¬¼ŠvgÃW'M‘ë†'²Q 8ãFM0ÏIÒ¯$©-Ùõ6‰Ô|ü¶N`™W–¸§ôÌ´IôŠn︚˜çÙlCÍñğhûÌe8’åû|XÇîkBÔh’rÒæI`Ë cê]Ò×å ‚S‚3Ş õş´ŞWèİäTC¸mMØ%¡iQ™Aßks _KPSÆØ€s›¤ÇühØ E ®NŠ>éôLå]Õì‡TÍh…ĞŠˆnû¢»h…9Jş€O_‰ÇSŸwïëÇNïë=s¢ˆòY†#B ‰|ã?ø¤EÕö&`b`‰®)kÀçP“×-­²Ì #¸YG qƒ;´b6B€®»ÀÓ¤Ì é fº<…ºŠCÄ&[a%¥_×Ò¦)~ë!6ê tnş^Œü&qƒ‘‰ƒ]Õc:à°%Ïô”Q`E#{¸\¼á—œÑÂÅ 0!Qˆ’œ6…p™!¢!ÁÜ-8xê+ssÚ]`/íl‰4rèªÚ-ì]U I8”óMl ĞqAµFïtÓè#4ß"W¢Ñ¸Ó.ú6/´-‘ÔBëšSàÆ<›£”ooOÑl©HxM¡ 3×ĞsIÀ÷âáb MÓB@°¨ B©_:MÚ@Ñfdöà)r½Í…)|a&¾­mé>¢Ir,Á¥Œ&fÍ É}w@/Ü^B1¡Æ»~ûÒ¶;#@îÙëÍânè=ìv9kï=ã R=Şuş °›×´MF¢éö ãŒ`V:v¸ƒ´Ğãp‚‹Â W¶R‡å›!4IüBúFë‘«"aËÒŸ:uÌËL¿è–Ô,'¶ØpuL\©û5škÆd°°—‡u.çyÓB{ZXy©©³ÛáIcõsø ”påeÒ€œW"Š3CP!˜ä‚ ‘© 26mRNÚ0\Û0Fpéü•ïKS¼bWîĞ ?kß-J-6wé¤;T¶©7xåM¨é-´ £rʪûÖuV¾s‡WTeÛWı’ÀEuÔU©9o^¢ÏÆ"o‡÷m2yç>Q¯Ï¾nàa<<´_¬×ŸµG 9y{¾åe:òÃØü¿AÀ¢Ñ"†gOD„7;ñÛæêNÅ— endstream endobj 1015 0 obj << /Length 1987 /Filter /FlateDecode >> stream xÚµXIs㶾ϯPåªÊ‚‰KrÊ6©÷ήz‡I´ˬ!E…‹5ş÷éFIQ¶çğNÄÒzï¯o›xóç§Ø}}øtÿ9Ûä,OD²yxÚpÁYÆå&Ñ)RoÊÍ—è?OÛÌóhx64Ø]g[‘Eƒ[h›¦8–4©Í n™š¦gœ=Mªc5TÅ`éãv'ÒÈ싱wG·î®Ât¦øzª,j«é0ofyúûá¿›W,W ¾œåÚ1~4ß<Õ3`Z¶8;ï`ši<䈧ÜSeäKxв‡İ•æq<Ù”JjÆyê©ÎUíî víµíW{9­“-AO’™ıĞv´Ö¢X©ºí[’OK£±*OR Np)Y*å\òğÿ•îÒ„t<åÄt]Û±íN§H(ÙŞÓœ¼´âî°HBEuì_VI{S ±W¸t[tîOÈëN«0Ì5ÀÄ8,s¡/ Ö²J[sÌ};\Ø÷m÷cïC£i@m`vˆ«Ô½S<~ñÎ\úƒN º…Äî(ô„BOöŸÚ­Æˆ¿Ò×,QÚ“U=]ë,‰ÃG‘´SœNµ N‘ûàŒ£i¶¹‹Ğx’±Ò”ñX/2V霭ú+æ bèZÅ™L²÷¥@]a±®Š,ÔÕ¥?¥,ËÒwü ÊQ®oú“=ÜÚÒ«0Àû±ŠÇú•VNE®CYIÂÀÍ¢;Œ“¿GûÛ8 ¨ÆÌïx A 8B¹À¹³Rì4DŞ—%Ê0@ĞÎŞêğ–[)ÁD¢íïkÕì4Ö¸…gÿáí°è†ÓÛ Ì¹hŞ"$ÌTë–ÌXšñw3ƒPâ†%1Ö”Š>o3is:^e¾Í©6w4CL÷!³H˜ä ğôÄ¥Yîê¶(W4“–&긪͊ĊŞéìtB%ddO‡‘ t-M2Ÿ \Ü÷€4rmÑ1’Ûy.˜æêcæK˜º$kL'xÛ¡zÁêo«*•Ü0'8V–ê·Í¹9†ï)^'|¬y µ¯‚”©¡ÌQz# ë«¿?y‡x‡Ñ×Ç‹ÚlVC¾ä<İÿùg¬:[9àÇi´;flR=MÊ4RA pW½ç£® é÷?Í\ñş3ØdVK"d2¸Rº Ÿµ–ó+·swöÏíX;Î]{C“~èÀ…ú·øğJfoŸïa¦+9Í”ƒÏ°¶¬cÌ Ïjo0şÚà_ämıq Ô÷K`¾NôıŞVçnJûdiÒ_dÊV*ë^Ğ6¢›_‡b&D}Aª•¶QÅL©w¦,Ôï»9†¦zSC:JmEåÄqĞ`¦|\Ó¤®úÁIb;ÂÌ·0Ñš‹HRbºQ'ï`¨IâÛÙ½Kâc–mt«MgÌRŠcÌJu­ Ø:tgˆµB /‹ó› ]·5‚…I:F,VcÂå4uFæjMި!©^•­2!Ç1õ»Ncâ‡È‡O«˜*‚pÑıÓǪ®/AVÕÜY'e×›×İSUÖïßwB%ͯzÂôŒqárΓƒ~@[®ÛsÆšœÖªóµ·Rã"DT¿6¹iîñúİKã™_\Å…-…SÌĽa`Ğ·c·wãJ¾Ô¼ÒtÑÁJáşF#ïükƒb±óx9Õ®ÎÙ°³z Mrû÷=šÅõ¦3ÑL¥é²éä±ë:«º$çç©jyÿ?SebŞŠŞ•csZƒÒ€d3q ¯-‘4—ôË;ÉëÕ4ÕôF¶‚‘R&2ı<çĞ A“0HÿÃøíªÁX@–’oà`ö ªàólŠmµãàˆ[úDAB#’>ÏXs«=†ø³;=Èİq¤?BÍÃI7ºı±wh4 mââ-è¥ê†_š¤–QS¸[à¾#"wkQ°{4g(²:­y l—ûz, ]qD H0ø¿/O¿@J]:B¤=½*Æ AòÚƒÔo§Áµ&\Bƾ<*޶òÔ† giøÅ—>¥ãKéÃIA‚d4ÆLu3VóáGe;>Ú†®ıô0¶Öì»ÿÙz³$I—¯°¾lø›0Úİñf{$İ ó´0x<|èŒBe`×;¨}ºÖÑ"N8Òí§y ¹E†¢ŒŒ|FôÇç endstream endobj 1021 0 obj << /Length 2311 /Filter /FlateDecode >> stream xÚ¥XK“ã¶¾ï¯Ğ-TÕˆ&@‚S‰]NÅå*{*9¬}ÀˆÄ,E*|ììüû|İ R¢†³ãl.$Ğxõóë¢Íqm~ø½ñÿËã‡ï¾×ù¦‹T§›ÇÃF¥&L“b“š,Ô±Ù<–›ÁÃÓXÕåö÷Ç¿c¶¹™§aª4¶âiîËe»3yü©¤v=;¿æö„T‡:ϧ5Wv58yo/CÕ6Û]lò Ü¯¿×{'IhŒ™Öş.3n'ì”ÎÃ,Å_……ñâı£ú´Õy°Æ¬Ö¡‰Ô´áC9/¯7Õi¨ÌuÒv—Ä ÊØ»Ë€¶RÁp²sËQCÕÙĞD[ÒŞCV°2تée¢_¡‚Ï[“¶ıíaEsü¹¹5È+nUÚÜqû|ªötğ‰æov:OC“꥚úS; v:Ƀ'ü2hŒ;V~—®eêö \9nUĞù`Vş ²ÀvÇމ"/ØĞi@êÁÙr¹ˆ5@‹ö--8ŸmS Aѽëû¶c‡€\ ¦ÿurÍš¢ xùì¸÷şºp©(Ì£lšYÁ*q¡!XşKÒ^”yû}Öä'á‰ö\Õµ´˜[O®XòÏôiáĞf)ìî…·<5şùÓŸúßÜeQ˜ TòîìªÅá“¢zQ{⼸1ÿ.Î`Pf=ƒ‚mß3[Dì…f¥[Wı -² üü«ôû¡«š£Ÿı[d¢Ş9?âöÍàmÔ¦#¢Æ/?|Ø|äI&„ã(ã' Nm±îÎË"2§"Ñ#;H¡nüA´¯¡¼Ùk rÇaìiÛFÆÅ ƒ;º”E·Ê ‰drÍ&çÅ*`·õ;­ÿŸüq`áØÙóš+z/QéÕô›>Óc@L®2˜<Ê£PR8ÿ™½ŸŸKçÚ, kV©ÈÑò˜õA×uœrH&©b?vœòÙKÜݬ88½Ğ©c)˜^¤s 4t<È£urõx1Eü¦Éu…É5¯6§BS†–ŞÙÊ÷Ïö²†­Q˜ÅŪ{ÄZ±“Khkö/‡Ós/½QŠ­|r›j.­¯™m†MÉ÷Óœ’0eğN"Ì,EdBÄ–0%1@?9ï×BHXq¨ÔòbvjœEæ8‘´=;ãt9ʨø‹õ\0j”ş¨ew”7t!œòàºşÅMš3ügtİ‹4¥¬@ƒ(9w×Ö ¶¦ÿıu —ØV«0×ʨæ[áâ&©BøéW/.¤àÄdKEÿäl/•6´á¾¸ıèï‹P ş>wªà;ıUîó°oa·ı°ROO³oøøñU5/wVq(4¶{—BG¶¦§ÜÁך Š#?wğ^Û1|‘Lm8aéi®$O±ãĞ’Õ÷ğ³—-¢’"—©7PB8Êbª(}5‰ÎàêšKö¥±eèÌÅÒõ~ß%†/˜få®'Tæ0£b‹5œ²•ö©v²³¿5ú@Á’Ó–¾-Ùˆ™¹²XïÖd¨%xşã~rîò®­Ë?t„_¶<â&µ}åÑd:ãŞ×1)¿óuÜzJQ1W²ˆL|åSNË9§a€sşÓ ? e™»@¢™ ‘7òå$Ÿv^5Ã¥ª}•İİ|{‚»ÜÌ%T¶< ˆì­\ÿ¥ƒj‰hª•ßÁVŒZÎ…-½(LéšÈRXávs±{®húİuUk€áÕä•¿@ğKÇ×’ç€ØmIÁÏıÏ ÷øî{•,ŒˆÌ ³¥[ ‘gw‹¾D­ùõk=ûÆõõñbç±5ó¹êÚf*Üäœ)h+nQ5^û‚€«QH)K]åc5–Û× ÓMÕô|öCÛqEş5ùc0® u”|ƒü>½.“0‹â; ÌÉ‹ozÌf9ÛÌ p{ÌøH`ÇHŠU¤™²ê/µ/}¦›yLĞ勈ÿ] I‚"2õZˆ¿A lŠ7@3Ko•'¯@¨J“õ­^ÚŞ/âÛà vÛºs¶ä²8EáTõW¨*x¤¢úÉÎUÊM5Êã ‚€`‚`ùä^䵿ÌÑÕû¥ëåkJAÖ+y*ÛS®(nêó7ŸªäËì&ş )İÁµG» ÆùA ƒR·#åËsP]OÀƯԾ\dÉ|d÷ËÚe4Hsøjæy.Œèå#Åß?üÄ{Ê endstream endobj 1025 0 obj << /Length 2255 /Filter /FlateDecode >> stream xÚÉ®ã6òŞ_aÌedàI©Ê-KwĞsÌ`C’mÑ~DË’¡%~=ÈÇO-¤[¯{’“¨b±ªX{1Şwñî§wñßïŸß}óAª]•¹Ìwϧ"R™ØåYÉ$Û=W»_‚§S=ö/ûßÿñ͇2,e¶ áL™9Ü糓2 ~E†§èçØ^.º©ğ' nvpà¦å¯îÎãÅ4{©‚!•©Í`z>è"0¼®ô ºwLÚ“#¤/ŒL ®·Ë6v°º)‚k|×ÑTcgúh¦©~lmsæK>¨¤(  øEe$i”©Ìcˆ9µazƒrRD¥J&‡ÑÖÕ×·İ–ˆ2ŠU>ªÆËõ‘,£$›èÜlí´qÙ‡ Ş'T¾“u¢C™ÇQRˆµ*Acc= ®BYƽè³áeoÏ»§GͶ¬?»‹®kÓ=០ãÀ`–Wà`”‹í%”€©7 Â‹lÛl™õØ2£ÙwçI\XŠÏ 5]ºã Ó÷ 4UYìD%i.QM¡L£2.v€%qÊ|’HHP“8xgtÕ?êD“ ZZğ‘÷úˆÜÑÓU¼%‚ÚüNÚ®yïE÷¼°ƒ[´{Y·†z38艿Kn ~GÑ0oğî´GûA´¸‚^‹À4•©¶z{1ÈV–à° 8hÌÿkƒÇgÁd{ÆqÚ7©ÜYº)ì ¯\<ÔÑNœyä.JÎÄLf€§ÏÚ:q\@M¿%øDò8vİìKšçIğƒYY~­ Yìı-øë=Çß¾Mëñͤ^Š#¾« Ʀ'sç_¯µ=ZŒ† Á »¦qŒ=)#s†w±®Š(+§0~‚°9³‘6Ò,R3ó?PAgÁdž9課ZÄzhù;… á| wú«Æ­[ãœ'$ié.”ûÔç‚.—Î*9(¨§ğOrPÇ€±´8ür,ä‚Ü8+åÂ[  İØôw æ('ø"8’IúÌHxS>”6l±t•LHr•,w1eÄ„²eö®Â¹8Y> kòøNFöä /Ö €¶1ŒZYã(xêvÛ÷Mw±(w?ƒxl`lÒd¾TP¶ÖzÆ‚"ê0ÚÆ8¬ëÍ‘€S-YŸNvkB¨• \ÈÀŸº-Dø’²ùÉßE<@éqñ°Qòb¥*â™a£xŠ(QrÂâü«kÇ“2jὨ‹ Š»ß%¿+Äú¶ â4‹X“æĞPy¾¾³KŒÉcMŠ ix‰«ÏĞÚØcx³ÍFŒç9Ôı)ÆIªO Çߘ´M”‰>õ\YTØ€ğ‰XHUFP¯Bìd²hà²D‚õkop¸®—ÂÄ”ÁyçJ=ãY\@ŒŸÆšQØö­Ìa<Ÿ-Ÿ•%Q&èXÕhfC(…NoP~Ót­¶s§/ı·¸ÿĞÂŞiƒ¹CCÁV³k@>P½qÏ–gŠ(.¦6¬/‡}&ĞÃ7Œ“€¢&§ûíÑ"!tL¢kñÿ…wn¯Ô B,/ê~ Š.ø=[v®†—á¿®{.\Iu´À’®x"Jípg/F¨çöâWD¹ ,÷¨Œ» ıç6î-ƒÚÖ–ùªÎ¼Hg~V3¯v1üŠ É[^¯TTÎæƒe+ÉB8ÉüKî® ’¯€Ÿ÷ 5³)L#×6[ó/yi*)]t š5 ?/Ú™±À<‹p¬¦òÇ0VŞÙ?pwñ‰7(Ö·İR~ÿb(fD ãjSáàì¯æ8ÖçzñŒ,E.0²]»«£ÿ‡[sqdRÅpêj…óf/Ò]¡×Z $¶4¾âòşucÔ =ÒİmÛÌP¢jßg˜1F¸B…,î`׋_ëšú3^·ë7ÚïùËVÀUg†±£æàí´Ï jÆ`Ç £á`ö1·ÿ©A,qƒØ¿G;PíÍ‚öĞCeşLXLjOçvCÏT¥ñ±R3 ”ùıû7SnVÈÜÖ¹Åc|e8·ÏèÆ[_õ0›’CA>£Íu`)|Ó¬|«\.mo¹#VîÕä±ÎEóô8âï>쩃綡;Š 0‘ŸB}lñ+¨!•w%ß=A·oÊÚ ¡ê¢|Û¦Äzº^wå4%+oؾMÚ;%)m$‹‡n_ÒÄn꿚y^Œñ øönpeœŸ~ø»©° •Ɉ¤ùsÖİ^Sˆô_pe6‘ÄGâZÜ|àÂéÖÖøœå’Xëà›†ö¯˜Û™mû¦Tc h"øxb¢Úw2²] ^“½¾Ì„ø™òAï§=¶=1p=aœFù4gº7mbÁ¥|:CŸ6¡tNíF®QcF|TUc÷œuO6E- ƒ9víV .¢€Iğ4œı5?ö` „áÅ…8 9Ü"Œ}XÒfÔİ<Ë®òl–Â,ûè\[çÅú w!óã@ÓÍ™*1òEY[^sÊã•Ã÷Oãr…¢¯¿k³¿ ] -¼X•6 µ3ÓãW I1 ÕMİÄ**Ôtç­P+£8Y$¨4Mƒ÷Ñyvq„Á(ËH)7Êd…ñşùİÿi¸q endstream endobj 1030 0 obj << /Length 582 /Filter /FlateDecode >> stream xÚ…TMs›0½ûW09ÁLµúB\;w¦gnM2Ȇ– àdÚ_ß!§½XËú±ûö½484øº£Ÿœ_²İşÀt’T1d§´$2’ a\Y|ÇŞ´CmFÅ’Épúıùg¾_ÿ\ÜÓìÛş°®Fƒ˜q’‚+óVÕus*ÂÜ\ëà7İ… Z¾6㟩¤ug ×åáÚõÔudÈ›ü¶=s’hዌkYšˆéğuú±.3–K0˜fxhŸ)ğ(†Ğæ£Ë˜áMA(è ODâÀ)#Jò  ©\|ğı›{*åë’ °ñì—x&“˜dޱSß5ñ©ª½Êrõ Z+¹xg¢¶í¬¢4ªÅÅMQ¼UT3«OGµÓ²·S‚{70B7’Ù Œİ-™XtMcÚñÒ£z8pn‡¡ë½0øÉPp«Ì¬2çaaGÛ7U;ãşîaşÅÌÂıФ ÍyIV­;¬É,+çŸÈ % wí¿ºªµ¬XÎôÌÂñ8´p°¯3¥ú‚«QÜŞÄ Æ ñLpÍA¸²LÜ ²İ_ğcZê endstream endobj 1036 0 obj << /Length 1868 /Filter /FlateDecode >> stream xÚËnÜ6ğ¯Ø[´@V•Dêulƒ$h£@ã’d‰¶YkE•”lïßw†3”µ^¥è‰ÃyPÃySÉîn—ì>½IxıåúÍO³r—%qQdùîúv—&E\õ.¯Ò¸®ªİu·û½¿oÆIÙıA”y$÷߯#1—U™¢X²;äI,$ñ_`M£nîɸ“›Ô‘«]×EV±,BÜõ½vûƒ¬«¨İgU¾ŠˆN¹Öê›ı!+#ÅL_ˆKíeõ–)GPH¤€¬KV ŞjQÁgÔŠ­\ت §‡AĞULÁyA*΃şgî,Ë"=Ğ:İ{„ˆÔó¤Ôib‚¡õé^“ªÄ¦™ìæqôz»O£É•îh&fvS3´èõğ ‡;Ú4CG€mFÍà4Û¡±fÒZ÷œtïfë¥óLF£5w¶9â&ã>¢zª7ã‘/¦J“”mE«¡U‘oöpÁ_&г±L¹ú¼¥×Ê[î+2@€¦Àd1JøãÓ`+™D± ˆïà¨`nP­Â|&U/çªgÜâi»5–€% àò$œE)kûüšÉ ÍÀ|ešF¿NtÈ=ËëÚ;<Û…}8û¯ [–q^w4­(ªåŠû°C`Pªsš[Zש{Y½ÃL,סˆxÍräİğŒ[\í<„Ïú0XÊ0ÚDZ£‡-õ'mü€ä$!$ɪ›ãîD8wlúؾ%yáÀÒÓ}Ãb)‘¯È“¾”(à50&›´ë¯5ĞÖô½².öz¦2®¥e³XV\|><·jÄÌÌXIYEà`&Õñ²¢0Màp{šî) ~V˜0 sq쥑%qhiä×DZW!ËH@P%uí6B·¡¾‡Eá•u©ä ”e[íè°t‰$QiO._;2ZV´iÕ ßè¬åΑf{İ.Ï£æY)aÑu(Î+8"B^£È‹k(î{iR®î«`Á„MÙ€᪪é¸Á4Ãuh*0Z;ã­ãŞa–×Aÿç,7au~9m«œ¨gcO÷­.#d‘qOy\JkC~¤)ê_‡=4e¸7çÖ»p«'gY\%KOF¥«×=µZ5K„©•Aß²ØÇ5A¸|k¶èÜwúQ;=¸óׯʨ¡mkì8»5鬘mÅÜNH§¦„i+ê3 ´ñ…¬NğpD:5àË$¬ëÎ%»HËèC³ÔÇsBøJGêÉñYø¡§±Î@YóµH>< šÕ»-ÅŸ´ïñpw´Çîõ2p¨"®7zè(.pç´¤jr¹cÆ•ğ™Úˆ T¹ #æÉê §¿Ñ¼6´8n:­nz±ü ‘îx²›WΪ*®² ®îÕı-Û¸˜»¼˜(ã´Ì/Wp!“Ëş÷ì&óşZúf•é]sPÏ£…nH5èm3¼L‹TWq°¼°bÏmo  ­+“0Ó+ƒ\ “. š†WÀ´NQòSJJè=zÀC‘Á½{†Ïµ¥ˆIy$Iko1 sÁmã:‡jn(ˆ~Ò=3tê ›úºvf .»"©_G P¶ôÆ™2O÷´mˆ³İÆ)_QñÒ¢Œ>î!¨p°D®ÁP…ò›“Ÿšfò¾9Àp¿¥8*š'¾†árÑ=ÍÑê°ŸÎøC*Aµ€lzËŒ\<zµ5Ãqñ©? 4+ÜpÃCğU‹âºj?0ËWªQ–£Ïá=ä‹+`^ªŸßñÃá‘ÆòGİQ êQ«'ωåÈßÀB x)ÛŸ oÌYD¡Hm[_æ¥-Àñ -øA„2 ZÀ´0Àúä™.ëH `*ChŒXLÔe‘i,A fÆüuÔƒéÍ݉>qkÍ‘ —wî®>ã\Óæ÷A°¶7_>‘¾ºéRje°26¨Nb]<â¢H6Œo¨2Gg{Á0ĞÖ?ôa¥ ()^QÔÍ7ªş•¤˜âç€àF¹ÊÃV‚ßúgC±D¦$ØØ2ˆ oê¹o,íi.9@p˜#øtoœZÕB<‚¦ VKïœ"BЬ»5µs¼ua"ëXÄ®×8ş¶i'Ğnò\fá2‹‘_¤Ì_Í̈€¢±J;ÄœİhÁ#Ğÿ“9?(È…ĞXiϹÑK ËbÉ㛩0)·îVˆ¥íš­ãR¶Z®ß´‡³Çøùq‡´q^W0âÖq~oeù™È‡ë7ÿş[ endstream endobj 1043 0 obj << /Length 2551 /Filter /FlateDecode >> stream xÚYKã6¾Ï¯ğmä͈E‘”ö–2AX`‘4°‡djYm ‘%¯$OOÿû­beÊROÏÌÅâ›Åz~UNvÇ]²ûå]Âß<¼ûñcªw…(LjvO;iaŒİmEªôîá°û#ªöZFõ86İqÿ߇şø1v(%¬Já8·tìÏõ>V6‰Æ},£iØËèZ¹&¶†zÄYèʉ֕ox¼6íD³}GCıtªj^ÊjŸæÑ_{­£òXbkhşçTw´§äk§áZMWh3"Å»˜©Œ¥…ægõ—} GÖ]}ø«•ŠÊ¶¥Fÿ„ß,j¦‘êÏ´¸¦ú@CMwğzlùÔŒÍc[ÓhÓÑŞA³UÛÁpĞDwÏZ™‰"Ë€ØdQ±÷95xjÊó¥­ÿ«gaú/H4”OìOKSaóŒNû3ÑÉ¡~jº:¦S=õ=5p ¼Lı’>ún„’èMDfä’¹¸½¿ ppùXês=oHÖkëcÓİn&â7Ëy»2ÂHµ>#ÜäΤæg·qıaqª›üa÷‡2^–‡şmuky[ğâïXÜgV$£D!å[‚y,‡mÁ¾Y³¤¿S ®OÍç/ñ6`×ó= üÕKgû'€²&^õN`ÅqfÔº?™¯C95è$pğPãXWóš íéyŸÚ¨§™ãºpa²‡WHï¿PıWT¥‰H­öKÊî°q¬1j^ƒÂZ#ux“Ø"&˜è×ÓâSÒçSS?SË3§$UKm.´¾S;ß®Eä±àû|jÜ쉺èÀÖôJäÉL +×:BdB›[„ğâx?ÒÑ…êLÓUíõ0G›%‹”†«åwn‹Lâfyü°>DüŸ&=G ÑÓSLÃU™Y2•İÿdMı±¦–)=7Ó [yğfì=õÃyÚiç'l“7“¿¥ÛV¨|>àñÍůh·¶ÈıÒê£^Qm%ÕU{iï™9 …Ëzx*«š‡Æ Œ:7¸î¢ÙA¡CåK‘m„´;e¢xsc”*, øæAøRˆ‡Ê°«4 8“Ê=˜€Æµ;ÔCû‚ îúw†øaÓ½‘İÔ~›…Ğ7…é»ö…°ËèiíGVâÔ¤o L§¡,›,~oÎM[¹{؈J"M²6 däÊ~ÙdzuÆ7££­(ˆŸEÁü,fÿ0Ïn]©Cõ<¬/KOnÌú3VÒgí ç™AàJ’;• ¼c–°­ã X÷š8­ ¢©7}¤[MºŸèWŒQ%"Oõ·šx Ú!Vf—µmµ_|ÿ]tÕ¦Ôt!²" •`#ÚvÕEíÌr’‹Äğäy…ĞYĞ!şşÄæ@N„é‚"ïç70têxş_‡è?Ác£sï´ápm)ÄÁĞ#mw¿oHÊj¦ V\JôTÊàqÛö__ €¯œ•`ÚšqE™‚[ø:½§~>á“Á‰S×0ùõ§½†=í5f“H¬ÈÀÓ,L¢tlënÃoÉßfìÛÛl[nª²¥ÎXù$ŒúU×O5º.7q¼¬«1?âÙãV0qбE#6dÄ8ÈØ°A´ø~+j$K%rHyK í ¼ &r}Uùò†™k!o¯jËëH©l^D¿º0‘:Uhª+ø\i¼ò ÙÄ–#õ)ô¤°ÆxÍøBñ²¬à^Æ,м 4b[ V¶ç* Y½%%°YˆDUD]zœË †Ñk×"?\»™è[¹RŒx˜Z\C€3zç,<9ô^IHc3)‹qK9s“‹”=ÉıĞÚF·3c¾Şfz oédp²İû‰Ú7@gæ]ÿB-2ËڱƽLêLí.ú8貃 ´`\öô6á6 nâë eGî°şßµaÛªÙJ Ir«±øøbÑynNî™DX›‚O7Âjp¤d"…S%`²§úV¯3?lËîxE[_=-qYµÔ>d¦Ï§áóA0>=â˜sF£S‰[ğ„¨- yïâ‹ ÇöÃÙ«—ãfÂ!w§Ø…Ü§İ ¨‹n!Ëtô«/AÍ–ı™kS<~lȃ³Ì ‚›Ì±šËDÉNî¬aã·_Şíşpû3!u$à1Îú·‰ìƒŒô+ü Ù<€ÃÙ#ıëÏ­ ¹•‚ÿ*i~FØA©s]‰.[S¿˜˜é@n‚è~b³¶Û{Pš._Çߌ ‹Ğ¥Ü[Nkp¢£şÎÃø*á¢0Ÿ¯†šB#BÔèƺĞŧàöN÷ÚÂÑ9e!øİödaSU|ƒˆ¬È¥ E„É@n£ŸËöÊ,dvO%ƒŒÁ/JÔ©›£¯œ¼gK ”¥Ø[p¸w‘Aë0r<=…ğÈóMçÃ`MËC~'¡<¬ºz Á`åä™+Fóş¬ºæáOM¹ƒñ¹R9mbI_ûõEìuµwü–ì6+B«9⾂U İÈò%€÷èlƒ¹©V¡^ºEs±ŒúÏ –ÄqáãŒÓ`ØftşZx½ĞçÿÜ€§ ¿zà6c§ "é] Ú9kKV²B;V옣¬hërtM4ÍšÆaXEg\~yÃMÀ¸rÉ–’ïNÁÕ¼®áÍÄ‘Õ1sú1M¼¥'.ò§YAJ'ÑóĞLÿUvœl/BY¶ä¸Îø )|éP#¤Ù‚/s©`ošÊùS@ M i;ü¿Z¶>ıñ¶¬Ù–9 B/?U9õ´AÙ'ËùÿY,7œ1xq~ã8!–xX#r@¸1U@%ù©Y,úùáİÿ˜Ñ | endstream endobj 1048 0 obj << /Length 2057 /Filter /FlateDecode >> stream xÚÕZK“£F¾Ï¯ĞVajêıØ£#<»ë£·#|ğø@KH-ĞÎÌşúͤT’R·íƒ(JYY_fe~•­gtöÏtpışùÃÇOLÎqšëÙójÆ'Vš™V–XîfÏËÙ/ó×§_ŸüøÉvú bõûE}¦L®÷E\¥yæ{÷Ä*C¨Ğ‡şéS$„˜¦”>1­çóÏ¡a(‘’ş·Lp˜,=3ˆ¤Ä){Ä÷3Mœö¨µ šiß TIƒ95p£ˆ2ì" êõÌy êğtJ´³ÿL]&«4K¢²*ö‹j_$aœ$L¶P_3]oCB¸ \vuU\…d·8ãÚ~Ù·ó*)Vñ"$U»UêbïË ’šPí&Ú»´$à7Q¯Ÿb!¿àB@W~ÁÀ˜Êwş- ‘Ib¸¸dºÒO_á/0£Xaş¦ 8oW·]û€‹ÚÁ¼Œ°v½ŞDÃC!˜p16jTq$ïFŸøÖ$‡0ªÔ©»7-VÊ'ÕÎ nÙÿ·ê{|­öXC¿“m˜—£2œ²Ó8Y‰ç"-ü‘ı¾‘v›/ÓÕ·»ÓÛMxŒZ™Û¼6ü2Ej›!¹ &cƹ1 «Û0— @—û—2©ŞèSµÄlõş±øÁüñ¬u¤#F™)Öù’V¯Ñ®HViVØÈ¨?n-Üó„bwÄêÛjA·¯Î)g Ƚƒ”zÍğ?·—Ş[éÑ€×t™L-ıùh@dÑvda¬‡C‘Ô“hÏSB¾!Úˆ·ÀÄœ@1"ôBº¸ºZÛéôHW5'ÚU‡í#MW›kg5Êš`£Õ¿7i\^6÷›…‚Ëø†ÍmF{Ryv’±µimöXss¢Ä$sŸÍÀogåë†öŠşˆ‘Áƒ<€„ƺÁøSºÆÄ_';IØ?")Õüùµi~>Q7nâl½× é v¸Â8”,@°·h2%…xÃ)úÈìíÙœñ]@Œ"µféòÖKb"®Å<Ζy€»=Ò§®…+Zğñ, >Ø ‹÷lì‰oÉ’/şæ¿iò¥é…hâ5ùš–Uš­ıSÍÅ"¿Ib?1é»eså…¿BnÛ€šÀŞUÉÒ7¡×•$4 ~ôÎÿœCT;o¹a‘€nY£[ÜŒ€óÆ›ÅÄ:08;ØÿU¯q*:İèjQWËÖÙæ›W¡kâÍ`Ùàëz&¾yUä[ߘV¡c f!¶ ñ°ºaÜëJÒÄòŸ¸Xï·‰¯é…@—VM;îÏC~ß[ÉÜjÂÌ€´àN ğânó€GŞb —Ë L ¤£+ó )ƉP$ä’hu%ãÚuYå^­$^ R¯ş)_ùkc|q4¸:66VÆá/ÁSy±ÜŞVɼy/Û•d;Æ”¾3Ô1÷Ó“mV®ÀÕow›ä;pÓ•¿Æï‡R÷ö¸§;UÀ¥Ú`Û[bÁ­¢m扯 GÑ~÷åTFwãŞÌ¬•³Ê@6¨nˆ6X¡Ä¯+ØIÙ¢f`"÷÷á]YÔ ‘*€L­T|YÇFæFŒ®NLkB‘· çÕİğw'·ûxû¬î¶wHã`ÎÖÜ»!XeüN¯¹]“€¦`£ÓJ!M¾e6ôMVÒÜ¿û>¯^C)R’ãj>K9$d9yu¾JµËàË¥°¯Y÷KÕ¸¦mŠÏËC޳ù6^yéÛ}ŒÇV0>^·6§J¹³/“¦7„ØSå"¦€[éA…j,Q‹¤S˜ˆ€lÂP] ”kdIoüÑ·àr(ˆ†ÖÜ¿3߇ 3¶şøoTİ"X'¢Üö|½.-ÚƒgÈÂçCÚÌ"à/«Ñ§×ùvÛú@³À =‚§×²ŒÑÆşx³ÛmÒšÓÁCmX¼¾6o›L‰·C M)Í-ûìfl@†›zËaÚ6;[nz½~xşğ©Å endstream endobj 1053 0 obj << /Length 3110 /Filter /FlateDecode >> stream xÚÍZK㸾ϯpö26°æˆ/=°§ I&@€ Û— “ƒ,ÓmeeÉ+ÉÓíŸ*VéÙlôl²y ‘ÅYEÖã+ÊÑæqm~ÿ.âçoŞ}ø$Í&Y¬âÍÃi#ãHÄq²‰m"”¶›‡ãæoÛóîïüğ)ñi‘&æğãu~qIJ˜Ki¡L<0•ÄS‹,Ñé0‰Ùì¥0™!¦èåJȾ™±|-»òP¹İ^Y¹Í»ÀºF ½"¼ù5„· áePø8›KïW#Ñë#5ꦧÆÛšÉH kõªıoÎå{;N¶Oç²âEÕB0°+5J–Wå àœI¥"¶j`ºä?íTºuq³×2Qš\Rd–MÓåòœCj*!uòß7ƒÀ^%ÂÊ  ëÈâIÃ3Ş`“mÓ‡t‰­;úTIşİcGUº ,5Q¦ş/|гôA0ÏD€o +ı¹u§ò9 3L¥FïËÇ.,t¤ÔÂEWŞ'Çñ¾!KêÏnr•,I—®‚öŞôXÖuY?Â:İ6'|&äF Hë©îùJ¶ØöîH$”SìöƦۇ³#Ú¥ñ3Ë/‘4®íˆš·<œ_¯U9¼j› µÚÜ–g\®'Š„¨Ü©÷gz-$8£ßün¹kx®^Ç× ¼õKd£Ks,O÷İŞ*»íгÃŒm»ÒQûş©i>MN£­£x=ô‹¼¥ÎáÖ!çü÷òŒP)’ØÂÙJjM3º.ób6ô(9ÚUS}İYe•S,Ñz̋ɭ2£jy¸‚¯E,G릃ØK°ÄTbT€Ì§Ãyøåâí•Ìæ§·ù£{ß™,­ãN´²£CîÈ´\AVs$êÕ¹d— |<ú­762a'ï…€ô¡iC)œjšëyª{e®qŠ*¿u® E )Õß"™I˜h¯U:J¶ùø-ñ” åÌf€f…! õ!°ÏŞp}Ëç!Ş@¶¾,:ÈÔZ*ğòÂ]ûáµ¼'îSpëd’ #“·µU“¢ôî™—ñF”Ç’d®©{,[WôÕLNÁΦÆ,C@‰¬©äIÓhmz4zthTuÙ—MZfŠñˆ}E5@ºrŠê¯ïûÌAY 9¨òxÕ€ÒõMë­ÛÍÅ=]Ë̤C4…i™¢°½Ğ5@‰UÛîŞõîq7yR×î…´¢©»²ë;êaX7Âu$Œä’¯m󨿨!“*>{ä+;&ñ{CÃùùÛ·jhØpã2h=?Üeëjˆ›YÚa¶®›| €'ç(ê8ŠoÕ-§4$¿…ğlÚ£k1µıÌ´k›`Ş^ÅÛ'4)¯p¼·Ü;ü:` +]^·“Œ&ã…Ò¸­î‡]>:z¥@C Éé GŠ…ÄÈL?¦‰=~ÓM2†E÷Lö’^ò²®î$%z…'RÖÃêJ°á;ëtk*‡AØ “@0È8'd4ıGHŒQäq¦l—~•`’e}ôà;:N;[äUÅc %EŒ¶-GŒ>ø³k3£Úİ9?6On%Õ1€ ­PÑ´cÚ òBf6lÚ¨‰ pùÁlݺq½(6/^‚ ¿P«»qñBìA`ùרÑ€VjÌİÑ”ÂqNr·Ë‰öݽîóÒ?ff…´‰|\a3Œ|&‡+«ŠZEëÀe©Ó£¼ş ûv2z³?7·:œÓÆAÊ[wêàVjÈÔkjzÒ1¬g%—X{4…î$Û6 Dj[€p¥RrÊ(ß[ØŸv)†bsÏùåZù(“E(‚W Gм¦Æ1äø*ŠE:¡„“|šQĞò= Ô¯÷0¢”åTà ûF§aŠZ•Ç9ï~ÍêƒÛ[…T*f£¨U~¡P0%“ `ÿpu‘œúÖ[“Š$mœ!z¨úJ&,5–ÅÓbUÒŠ4µ«Ğ™æ±¾8@³Ôï?ùêKyÒvpÇõ¿ ÄVp…É-©jÀi}"Ë’uìC%Aà¹Õ†‘¯ŞäÚq<‹GUŒùÛ!O©ö$7ÉW‘©jP¹'F‚ë¼õ&€®0?B¡œIÍ`f0b’ì µ­SœÉ‡Ù®ûÊQ|®ˆ4×1…aÛ±ÕÉ!1z‰i€ñBU_O=@8şürökPÎ8Ó+ƒ(i0NŞŒ `8Çh-£·F´qõE:âVgvûq(y=gCOö´zTÓLA_ˆ¡´ŸYß+΀^hµr÷®ooEk}tJ10zX ‘±u0VˆÉÀõ Íåš÷|ű˜F8RÆğîÏ7@ès‚a3†à‹„¿¸¯eç[ udd¨ä$ jC1Û|Ø&Ä7G®—Z7ŞLÇKÃ)iæïŸñ>5Õ^E…h¶¦>€ âH:Q¬rt›†¨–"ŒİURxß1y7%dwú†è#¨jûWDOÅZXûhÛò&Hëe™“aE°Aî *üĞãøÎ&Iäö³ğÀ@ İ2‰¦÷Š[;.î %¦¹áĞs²œöØPâìx•¦åY>8.ÒÀƒ5˪4›%¶jŞüÔ? J)¢èEb{Ê銟k@o°†àû•šW#GScäÑÓ!…/µæ« ³­0Ó…öUYÛ1úe4Xõ¼{%IˆÏ̘"š« AtãM~qÛàË‹À ffQF¨ŒËOEŒ `σ”ó4맪;àv@‰J¯pû'*!Àâ¦wÔ¤2K£iœ‰D~C¹¬MºÔ‹¦$Y©jŞ}°ç,Pù+ :04uîyÌ2ĞÄ,ş§¼Êußy׺WCq ÎE«4ùEjƒzú)¾Ã´Å5 »è ™¥F€]v¼9]qy |‡…t4óXö{ñu©»CüLoÛğÌ»îvqGìÇÕΜ 3gů¾ØõXƒ”@ùdu³à± DìA(l‡ÄCõãÛ«i (b°ç)nW°M-‘~H$‡Š¼ãår^+¿^Ûæ ¹³çÓğú˜uÎM ,CèmsKi9İ“)ñ(‘63õ|.Ğœ  ¿œeOì!Ô¸!²§[ЉøÚ,êĞ|>ΣüZ7Í©sLÈvÚzHÎÍV@8C×EñpGÚ»»ø†ïǰ&‡|ZÆÑ¼&7ç5Ép˜Úi Bk¹d^´èTXÀb€ÃÈ~xqqY9iï/u»U5ÁZ/C’t‚Ö {—µ"Væ_)'P­7ª“À>›ñ<¼³¸ÿşŒáug…IÖuö<ó,EIc!'i xâäŞƒĞ_°Sö«Nôe¸9 F£F<‰­œ†i³ùk,HXÓè`yş‹³wz.&bÑöÅek ŸI‘ªo¸=§Ïz|{ge W4Ö')üöãÚkë(¿±uxâx“mùJŸg~o:O÷6ä§s9~»²ƒÑY3¹´!œqñd¤X)‹›IøBªWNÔ*a²øi"’éö„k ˜}áÆ¶Ä µÜŸ¹{°®ĞEb³¸Uz™ g“~O"c…TäÃ%߀¡°1š%× 1³Y ŠpѨÀß1VµŠLÆC¿õRy&ßæ±ÖÀ?a¥p™HSv@•.¸~÷ğîŸÓo¾É endstream endobj 1059 0 obj << /Length 2309 /Filter /FlateDecode >> stream xÚ•Ùã¸ñ}¾Âo#m®$ê ²‚,I&@ Óo³ûÀ–h›é6O‹¤%YÎô>âQ,Ö}Ğáî´ wıÚï/Ï~ú$v+²8Û=wQ˜1‘»,ÍYÌÓİsµû<ŸÕşÀã8÷±®—ı>vé×0JT]ÑDôí.£îZY?á4 Ô[©.£Eq–v¤ŞQ×ÊodÙwGƒwMƒæÁ €æîNİVº”şÔ«Ïûßÿ¢ˆ©%{I-üô)óÇ,‰28e ÿ0\ÛQ¾ÜŒg,‹¸cæ¦C’°P¤Ëû>·xá¨ú£,rÁàÈA“0Q@µêi,ÛΜ½6İ4 Ğ8¤Å [úF °¡Şds©Õ|—»]³€Dôa»šJÔÄ%¬H’%Ñ]ï\ïH&¹“®arÒß÷È€½³• ±‰`7.冨£DÌe]©£nÕA·VX÷B9 CìúÆŠåØY™91ÀQoÎı–Ì’8ÎãaNH ÓğC§pG·^B`0X°UšKú”öÓµ@DøÛ²ÄÙUÃØƒN¦şvÕÃ;cáR8á’°;°«"¸ôº-5ÈD¡3oÓ*@U»‚#*7 Ôw„C[D¯q*®ØşÄYğùHàÒ^·@OKgYÑ`ì6Í̧¶œ ©¿géğ–<0”Aw¤=I/ËíOƒ=ŒÎƒßWÃY]ÏV…¹ÙÌßu—-®Ja¬k59, Ø›]ÓMñèË-ä¬ÙÓz’ä‡1,7ã0EÓh­=„2ŞnNW&ţ5ŠìtEKgZÓí‰æš¯½í% †»i´KxèU—êi‹~k#özøFˆ’•FK<¦áLB™E(¾¶ãËŞ D-œ%šèÉX+`’¿±ªêZ°âÈFå­øöeÔuıäÏõöFÙ[jw·¬i§Wrw¶':ú¢amDµŒ³0ı=Q³ ²†Ë8‹ØQ*)XŠ¥sGl õõ†ağ%‘%”pñ»eV°nè‡ï`äxIÉ^åg©ÕH–Üi–æÆN+Ǿk,Rwî"ª¾íÓ,'òx mÄ,ç+ë'„@tÂÓàõŒ¡GV18”n@ù¿µÉu¸Réa„7ÒÌ;ÿàpH»s¾ù‚òøí!t¯-·¼·Éÿ:›‘Öê´ËÌ 2í)3[˜‰EH¤eqîŞøòo´Àà@šô¼RñÁI®`äLC`üĞ ’ê.üBÂJk’u}µ+µ’­êŸ0„cè®h¹;Fö0Ó>N5MrÅAeâwPN1œc´™z3”<=R9Z ^=¨‹5=C|¢"h\•R›nàl½Vj4ÀÒİ ;˜Dz2ÉÑl{°l4Oœ˜€mwZY¨>»åfcÈ 9ECFÄïĞ ßÔÉ?'”¡ˆ|}«z Ô‘ѸÈ¡FacF :dø4õÎ~–ûä0p‚¬,&ÊYİbv‹?[*™û¶¹'¶†!8…ˆ•Wãº?ûîwDA-/­zZ$Zb ¤ÕÏPɤ¹õ?X«;LFU£PŒéŒ–ğ• Ï\w Xlbıßlˆş7õàQ'5ú ³,ŠM~—µMçİyè¨e‹| Ü|±Úè$BV@yiãzÙ5—nj«ÿ— Šœ‘;Ğ9C‘£©nóÜT¼È`.L½…ßuŒÊ… N¸9¸E¦–"7¬YÁ"ÎYgMÕ/V ½‘Ë•È9{«\…t—È“¤ÓàÓ^8¾FzO‘îŠÚìGÕù‹ì—’…¦•%YtïÖŠxo}ßLÍK­\M¿]†ü½3º­£@T¼7¾y­ßñ±ÄGŒG¾Vp…ÈËãn6GÏoS÷~ä·¢Î{Lkåê’,ƒ6N¸s$¤9ayè;fYUØC²‹4d± c b–‚à–@Xˆ@ ÿ ç€­ş'˜ˆ#:ğ·ëI«VC/Æ l_KŒ*p“^XP#]@ù †²×V€›H߯ÖBQ9=š'ş…1=ˆWA>xzk®ákøßÆŸb‘—L{•Áèˬ!>ĞÕ®4Qo‡­àèC#Õğô|ò3NàºéM×ZöWÚsÍ:uË'zHñ¶M [À†íí"Û L‰ô&§ ]M¥V5ïQèøV»|ğ²”;rVöœç,ͽ %´CÛö\ğÄCͺÎ{ŒPÃgi~k jy½Gà ¡aiÎ)Œí.ŠT´ìŸW`‹ä“¢ø©‘3±=Æw»h%~zßûH¸õ0â Ó‡a˜œ·{ z¡nÇÎ(eÙ-ş‘€şY¨a¡÷HÖy7‰ù (lä7u¸@«¢‡Yd¯eóRÉÛ|†nÎ\ÄC–§ÅïåΗ‹«ôóÈKî Ø ¡?Áúª×Ò‡ĞÅ5iÊDx‹´s¶înÊRhC=IhCxÁ̆pŠ~‰ßmGÈ+Šü‡ık¾é5¤ZÕ×Wóà€sWV¬Æœ¥|e£Pa¢‡BíúbÚû<´µL´Yp•tN5 Ã’2 şL0æÅaLøÈ±å`ñc·I´pKKÛ¹óe’{/°;²—Ñ"K¨‡*Ğ5cÆE±ùÌ-V×÷ªi²ìºã"³µÛš›0tÉßiPtdÉíùúà8ø¢]KĞLä$LF΄ğÇK¹uèUäbΓ9ª&>»TRì¤VR™zPN·ùÆ*!Îne64-÷´`)îuø´ÅÜëÔ¾ÿé’ø†HʨGBÚ†ÎÒØ¢4Ó}Ú˜!¬ù7ñÔ=1¥÷-Lêú†jEi­ø¡#Bı&Ö¾LĞR4eêŞJº¢¥¤½Ùq‘Ï*˜½j|/5ëşñ&Gl±'#˜©Û?0Óè|"ss 0βêöÕ b–ĞD¾nG >‹÷A QÖzQ:ÜÚwÓ±®ÚòŠVQë€î-l‘  ¿<øàöo endstream endobj 1069 0 obj << /Length 2707 /Filter /FlateDecode >> stream xÚ½YÉ’ä¶½ÏW”OÊpq€kødÉ3–ğA}³|`“¨*º¹”¹Lw;ôñÎ \zØÓ£É—"™‰\PÁár}È÷»»w>éä Bß„±>Ü*ü8Nq”øÚD‡»òğO/ô£ãI)y?T—«íO]_Úşx2Iä5|•WNµÿºûÛ‡Oé!ó³XÇÈ.8œ´òS­˜Ñ,¶0?½4]¯ç‡±d,£é¥=W­=5rÿ’y¢ü84nrŞ–; UæÇY¶eø%'ùÁÌèÜõÍÀBB“¥ı9Pa[µî£Ö:­‰2^óqÑ ‰WµGåp·ÃI%ÚÁ®`F?‹Ä®£mK[Âä4ğÆ¿÷ÄØr§j‡1o@«|ä©Êk0Õcu«eŞX5vğ§(¼ï¦QˆW;È8‹[oÇñ¨ï™ûõT^¬t~á*2[aíSŞÀ†„I¡öŠ®¹U5I*è±9p—ÄÚ÷# WØ»d²¨6¢øøcm˳@TY) ' /·óFhT];ğÔ_xâ€#·™S»ÃíwT(íPôÕbáÍ6Üz&.#X14±÷ãyEí&î°á‡‘{mÇš€$h¥şi3of·ꤲ˜ÄÚÚ[ø-¾—¼Ğt£sCñ¢—jlÅ S? 0íF>pü}½ë5óoŠ#*Zsı{¯p…~²8âM{æ‚ ş&>ûÿ_kço _£Õ·zÒ+-¼òEtû’!Tà‡ ¨XPÔ÷T<9á„BäB = õ-õS™*—ÅR–yaÊßk>`#ź‰}¨¥cUpyS…ëy ã¹õÌv˜‚L^° ÕĞêZÙëjó·ª&¿¸g˜BÅ ;65XòU£b)Æ7Lİ á!%ŞØÍ…°&,n\º‹ Ó!/ æËš¼}§:ï…Dš%^ALÊ ¹ÊUûÊâÓp`Q†é§bä ¥ Ú€¼@ èpm‡Q2ĞûÁ­şÓ;ÎäÕË2Œ(ËЧ–i4©“€Ά8#6â1ë½VÇ»#ÿØçt¶ˆ–J+VìÙÏL¬mµ2%—ï¥úL<[‡ß ó¼—«"È Ñœaº›m¿ôa á$o¢u_óœ„޹THñ MŠ:Ÿ§ÜØ9%¡6˜.™|µ Ã5Ñ8¶ÖA,Ë–¸"ÖéÎüe›P<It°Ì0è³0Üò“[NÀş¶İÈbê{9åú™I 𥃽ÏÕ@‚ ‰.!Øì-ïá œ(‰ä(🀒‰3àP×:ŞU{›F¹ìHŠæÒ™è¨³pÉ@Üd #]€>tS_XnÏÀŸ"Xy?t¨rö]6P†‘ËcU×¼–m9zp¼DO„ğÆ\ Öªe“´Â;Hc9"öòËÚH  ù`x‹­PPsªA aRh+9iØ¡ƒá:Xî†÷ä:î=ÈD^‘Ó›Ä.Î^ ¥$ó·.÷é:Ş\§–×T:+‚£À\Cüb‡wê«,Y–=Øäÿ¦v^Nᣂt}+¬( †¬WÎÅà†"–á,£²ÈøJ%Ûû̇¬åõ›`¿µ¶Ø%GñÇåy‰ŸgµYøÂ¤ê[Ë©Ê.ç«èDùÑßh–ÈÏÒyn5°Ğ'Ôµ=gB ØÈoõ™Rµ;¥ø´mŞr8Ÿh„/#áö9ú·œ<üRÜ…Şx£Œšlßhu™ã|ϦŸ[)ÉFE~¾Àİt˜Æl#¶to/ïÔ9Fû&IÜm:‘ÛôO¶ àëÀiŠø]+O².Ïã?G£½IjÓ[Wí¿L=+d袌WRoëîÖ,g•ûüíÎ#] h xœ«{*|Á•’3 Ç¹&oén½FFOf£{ù„ ¨ ¶0‡ËİÃvËOÕéãäv›ø2OkGş.Q­ÿ—€Nk±g µ°Ãöß´CøQ ¸€R gAÌL°™óñîİÿÛìf endstream endobj 1073 0 obj << /Length 2688 /Filter /FlateDecode >> stream xÚYK“㸠¾Ï¯ğmÕI[+R/jsËÖN²©Tå0]•C6¶LÛÊèáè1İıdIV{{r°E‚/`°;í‚İ_>òıóÓ§?›]æg‰NvOÇÒÊ7*Ü%qêë0Ş=vÿòÎîa¯uæ}É´ñή’zdğk¼ƒûö Sϕͥr5öé¹W¾mS/ºárRê5mß1©µ—âÀÅ~hkÛ6Ãòj!5«¾°âşáßOÛíUägQ_åg±°;”¶}؇Zy—¶9µ¶â 1iVLbÃ3–߸l˲Á­¼õ‰)¶½í‹¦î˜Ô7Òy±ÊÒš7õoŠNCKc`Äk°äÒâÎÂ0ôNÅ7^,Ô4#òÒѠعÊ2³EŞ1‰–‡ÎİÀÇÁÔŸşÃ>Š">8ll‡RJEǃû³í™òí!N<Ûöyìó\Ô"ßÏÀ' T@Ç2ŒÕv¨kÚÒ&©c‹mô,_C‹Ò}ë˜Öº®)YuÒ+Ï›öÀSÁhÜ*’ó¡m§3Æ®o‡ÔĽ/Ú(E.qˆk6wL½á6¡+Ot¢æÆ—3—`ÌÎ †(8€å@®±äm}’V+tËÃacCÙ3©9ò׊^zÁ¶æl'Ìv?ÖJƒè0cïóƒ‰àº`—Ès¯¶º”îqĞ'*#óDޱ!m6¤Í?á’ÓÅ¿?~ÖóëéÀW©a~ âààEíöE=‰1Ö1LݬIØÙ½^àBsİò'ºÂßÖI͸è¸ÀÖJ8‡ ü(Q·5<=Óåh£nM®}Ÿİ©¨¯|3 ¾¯<‡‰Ÿ(ıã×I¹øJ'ê³¾~L×á9ß–“şáfU{íğ6®±Xk¥~†•ÿ3 ­c=L3~ô¦sü?„ê\|Ù”íL ³vK Ko··€J¯&o‡6RgæjȰr¶BµüyNx1á¾=‰­ĞY¶4¦´Şâ~©$õ“ ĞRÏ·,ÅàvÇf¼İìé\Œ†¹;¶Î ¥æ/]|,Úº ÿC0BÜD±fÓr‡qƒr } uèGq¶<ÿ}SšŒÖ+d†oO´Ÿê«$@İnVW±ŸdjìBşf»€´mNã+ ûäàâ4ò¾0¦€Í’Í.ÈÉmìPƒV÷NÁø™™f¿%«w³E²JÃMÏhWàÊp·¶û θåÔO‰YÁ´€¿#<’ üõ€®Æ¨§Piª¢çµ¡rl›jKضë)ÜØÚåâ©òS“]Å&° ¦¯Š®·_É•âa˜ÔûUX*„›ºBír×u¶•‘â ÷*‹|àf)‚Öíá’qĞÆ¢Ä²ø¾™¹¢‘5fP…LÑö툔«™d>¤Ÿ0s×°åyó²Ô"m„¹àKğ¢¢(Š€2*±÷´~8Gíè qâº|ãÒ }lh“ÒÚ´^ÚØß?Ze&!1€ÒóM[q™aÅû@@â:8Ò:É@@4•t{Gôu4àCöZèµ|8&ì¼şV0Á!€æ (Élnï˜ğKeó‹yS~&ŸõˆÈ1£½m\„4òCçqã “¥Ãʦ"ÅXÙèµÉÀÊN²)ÊRf&½=›¡>p‘P*IEÇÆO•X®7æ øøöÎèTݱúƯš_HÔ‘Ch侨şÌ7AÕü@ XüRTD^¥°*á^’±ÏJ0è¹ÄŒJßu…ØØ7ümİ¥$T‰ı,Ó&tò'ôgÁòfaT2šä,³5ågX† ˈ1™ËœcÁцcè'±fŞÔÉ•è$øµKîMÚœŒœ @&ã;våBí^ärÔğ}à}9ÛÃ"ö Xö•vÍ`¼:#ñ2ú àwŠ:[Ii ÀäjѺéè6Sq›¡X'cI禌ëKF\pŒ.˜•H©™é8ñšÜÅÏ .u¢'ËÌ[qeà ²ğâøn'à)ôÔpœ™ŸÆf\‹/ ÌÜOwL±ü©Ql·Kf¨>ϯÛiî #ì¶ÍÑ©¯Âô»Mà= ıFÓËIŠ’›çޘpğšTÌlÔ;Pp¯­ÑÜë–­Š&DˆH#Òš 1¨)ğ5Ê’ ¬øØ¥kP ‘&wVMĞüãøÔ9…M?‰u\i#qéËn)#˜²0\YaÍñ?ù³h¼¿È:J]8U,q⇡Y)â6èÜœÍüÁ‡v§ÆûõÈв!hޯ¹dKğì[øÈ?Ræ¾Á‘Æ“ç#óFs“€RÑ òeûdÀŒ`Zdk±ÈOŒşnHo–ѶG—dw®™Ëô¥èÏ"ñW°nœ­ö2J SÍH¾œ¨IAYÉׂUEŞzåc;µ¥wÊ~İ7‚q¸2L8[ë®uu¾u9ÀÊYz_a¼ÔeœÓ}SÁ@_ş&Š›Äà—îİØVìJı;1 ‡•œÉGu½³’ÿ$¡ÏÓV”3SXïÄ-1Fh澪e°1½,¯ó6zFQg$;€.…kık8bâp‰p83€¡œdeÓ1+ ¤ª8GÿU+™¹³(±uÿŠVv˜rÆš9$jµ`=šœë¬• bÙË0Ú{j¨ßO‚ FÇ0KgÉ*É‹”I¿~B‹–H’:F.Ÿ`RŒ-'ô1ŒâYp7®“¡¹•<°Îâ1‘¬±Âİ–)!„Ä…9aªq{# Љ¿˜R³„2 %C‹š<߉{ÂÒEËÅExAiXBŞ-HJ)I)I)Iéq+qÅAm¬½ÿ ”¬|ñ° J¨C¥/*Š‹ƒÀû«˜Pܘ,N©èDôz¯ã+V„X6½õ¢‚£†ì.Íâ>Îi%h1é9Ÿxj’AYNW–B¯’0Ÿ©·o“ÀÅm×ûrƒÓhjäãTsúüq× v§tìıÌ!ªx̆6TşSè4F½@Dœqsí1… » 3÷Ÿç‚5>à`ÄH0õu’ñ{vº‘p–Ââé êôô•áCÚS.—¤‚_ùTy¢#_”`K ¶"èÍ7"r½IÊq„2G2&@¨ÌÓ")oäÔè¦Ì0:´Ñ™AoÚ XÅóNŸ˜­»G66³,$v\>àmğ.Ïy¡Š¦ç¼Zê$,\ßçÔ<©AÏW¡‘ç«k¿Šò*ĞuºÓ6'O ]D«Õø@¯ƒÛ|ÄÚØ¹N¢w*ôÀúéÌ+ª/ҨƿÆïùCŒ¹7Va…ÀÄ›l”“pÌcpeã©@çCØ¢YáwÒôœKÁJÉ5ÖiˆülÉÄ¿ä"´}ö°wbö—¶˜¤‚S2 ô¥4¾l‘›%JÏ›çîÒ #‹[˜]’&ºzøLÆ6¥Ü<»Áö.‡WCšN¾^Ã|ÃåBåz»/GUgÚèTøi­“!ó§Ô€3¨ğu¯€Yøi6˜^±<ß > stream xÚ¥YK“ã6¾Ï¯ğ­åª¶"J$%]¶*»•IU*{Ùé[’ƒ,Ó63²äˆÒôt~ı©·§§v/->`>ÙÑv?ˆÜ÷Ÿ/~ø˜íò0—±Ü½œwLF¡”éNŠ4Œ±{9í~ ZõW¯Lgö‡„‰àÜ´ØA×¥¢±¦ïî}÷Œ<(Z7z-êS¥NÔ9îã,xÛÿñòËc1İ2ca”Ç İ¬Ü 4·üÖ<“øTAÁB!˜~½ê×½ÒngTê«.‹ªz£ñ“6®¸Úî'q(y²;0æÂñÒks%UóàÜ67hÅQğ‰VW7åfšöfÂıó(x¹jãÜõ„ê}œ úÉãşK4mÛàR¯øcÁ|/huW·É§·®ƒ?Lƒ¦Ò¥±ŠGsÕæK‹àßi©kEæÍtêވs°I}¢QT¿­ºéZ›µÍP[lÎô­›ú0®|RÇşrQ­=2ÿËù…fÑÚŠ(+‚Jw]¥¨­ £UKí®q_‹»QàÄ: µ¦vǾµ;5DT»5î ⪌¸€c²À¸Ù7œizꜚú©£æµÀ‰/䉠†IæªÏlÇ×yû&nÅ´ôíN^j»‚ÈeI`Áƒ[ñY×e¨â~Dh,İb 1á¡hÌ•°×V’¶¦oJk?\TğàŞ6—¶¸™'š¨‹›2wˆVCÓh¶§æÊªï:ÕZìÃÔ«î®4¡ëâ~o÷Œ÷V¢Ñ£®Op&@Ćå~ú«×_öBEåbÍÁ­9Rî.aOÂvd`TG£6bà[à/i]ÇJ‘ÜUi©İ·R«.E IÆš@ãø+™FPaø%ê¼¥òID豌ğ ßã€Lè|ÑF[E°£½äÕ ”}ÛÑ„Îü52Ï\¢à.'à¼2U¢«5¨W`£‚¦,»‰EÁ]ƒ')›úÏ`¥›]®Œá"×êÔWn`H‰HgÙæ £'ÕµÚâÚ°õlÛTnÖïg¤!î)ÓÓÜyKÕ9ˆsÎç/Vãd °Ï3üò „`ìmÏ7" `zçX°!12ÌÍÍøŒI“Îl Ñ¡íªÇLY‚­Vã™3 ˜Ó8`•º¨hÆ)éT°4øˆ©Âê Òå[QÒ‡rf‹/âצèƒ/ú²ë}׆6úO&”·ìm…P&s%R¦Ak«i*J„'El[1úœ”Ñ—‚ßMƒó¿ômápBwª?Ÿ­™.nyw˜ÖngJ{p úÄlöÛÊÁÖU‘œÇŒ»I· '†"gUh2PÑ&_¡ˆämZ…æE“jêÚäßAh¸¹ZŠ@;l© èà—˜G“\‡%PqLÓéT{o"ÇfõoÔ׉ÛoáV,ÚN—}U¸Õ¦öÚPpá+N–GHRôš²ø€&%•S`¦ƒ_¡uk&eÔÿš£ÍR¹Î4õɵ)‘ÚÌi' pKÔ le˜#_Ṥñ<õw¾<õ%Â'G%iúØ£Ğ,2Ç_g”9ËBüu‹³•(+ ÿÄY÷P¾¦Å/UØr˜Áœ‚ß H^èxl”…inåMÉ)ÈÆ2Ënx2ÃèíŞM‚jlY"ÆTT'õóÉt Së8‹‹•Îaé²>7U5!È'ò´÷G’$>_Zé¨=WĉGn‰á¦À…7û?¶İ2õеëp5òßŲ\7Íñú…I–8§7wğân“0 áS7ŞpI³d'Ãp+Ͼ}¸í¥a–-.¶tC¡2 Ïâ¨gȪ|P ì;.a2æêôìÒ-Jlô½¸‰0a…I*¦P<w¡3ıÑ^„½ë5ãÄëvÅߣ6{®î—ëW8”Miö) ±W2›a&Y› ÉGs£«-Y."fw9èËüıŞ2“nîf­‘ómlÉeCø¢õŞÙÅ9ÿûÒ]œC'“6İ æ’Í3ğÀ³¾ln”Çb]’62Sòl0ñÃ!Xr¬s|µâõ³ù‚‡"./¥Ø„[±¡t$AK(İóËËp1”¾R#3İ¥\Se”º#-CˆÿŒs°$O"#pœĞ2øaÑùıìÒ.e¯†zÜ3}ô"3c˜T[}ør¢Ê0¾¦ø0Xõ¥wÖIˆ>ÓÏ릣ÁùEû§²ï*©5±x³dËY˜M 1>n¥D°Ë–x´&‘U[ŒèŒl§ƒ4‡t¼‹Uï˜ù «¸®úªÊ¾S†v+ÀhWûS39KîG=mD¡ñ"§Ïj«Å½õ€kê¶¶íÃ¥@¬ñÀ_“Õ×âv¯Ôóÿ’Ã!l~~®,“.‡¦¼=NÓ[°D4ò|}08Aχ»:2$÷§ĞÀ_W› '‰!–ãIÜV’#(“®ëƒíı;r ¬"^”Û‡~AF—Òoºçÿ –,ø:h³7yn+䌤,“_Ç "^°ïÉã N6RŸGŠÌŠ« ³(]…I ùkxn0Ô/ècYg¼õü€ƒşváh˜ q§ù›4=K0÷P cÿ‚ÈÆ;†dÂ??Kö~øGa<ÙÉ's÷kØørSõşé„¹ç±å?D€ŠFL|—§ê6Hg$„¢Ëù"ı¹Ô3y†uÏ®¦H>Âni¸Ï°ÑºŞ¤I,Ş%Fr¤,®%1ğOyr’Ÿ”»xû|E¯6ÑíZŒlüçç»ß¬ óY\Ùaÿ_,|u®1¡~!0°y.âÚÂáEKŸ½ =*™‹—–E)Ü1¨9pLpöŒvIâ™ĞO/ş Â÷7Ú endstream endobj 963 0 obj << /Type /ObjStm /N 100 /First 932 /Length 1776 /Filter /FlateDecode >> stream xÚÍYM7 ½ûWèØ"‹EIÁ"@>¦@¤»¹-rØn&Á¢Áºğzôß÷Q›M<ñØÇÓ$fDQäõHÉ5\ÕäjÄ#;*OqÌøœƒã’ñ^œÆ;»ÑŸÅ¥lêӀq9»eVsu…+ŞÕ%W Æ$Á38 ®EqÀd…ЈP]ÔQ$kGBì2zDlPB#çY­ ¦©ìHsq=™0©hˆõ@KQÌV¡¥&¨«iıÓq›¼šWÃju5ÏĞÀ|Mb–'ôjn½PRš: N«Å\ÀølËŠ¢0DóÚs@ÔàEÄ5%ˆu’ЈÅØ ˆ‹mÈGìbH œ³åÊÒPUû”- 0§†%ŒÉ ó‚„é%•ÙÉÉlş|q½r''nşš Ü)^à€ºkcÕ`ÿı \Ŷ—GfóWËÅåY·rçnşêÙs7İ}\¹73t™ò×ÿşÓ¡ãâ}7›?ÅDİõê›[møl~Úİ,n——İMã…öée÷öêâÉâ£;·ùÔvmå7˜æb‰±k6İ«æÎ`î »Z½€™Éı<ıß¶¸3Ö@¹áA=ȃùãëëT74[¾š²õÏæg·­ÚûW×ÏæO˷ݲ©oæ/æ¿ÏŸS{1c.á…zE|hÀ^8ú€-ªT¼šùã†È™›ÿ¶x½pÀğ—ï‹fë<ıj¬¡›Ãvt7ú‰‹G¨ Àß‹ õµŸ~şBË6à =–>¿`LNÇ-_ÙX¾¬c›òp+Û¼ë[‰¾š%Lš 4/F°%øb•€’·V aáyƒW‹k}ş:4 O…ûh¨ó&ÔilݽÓzıÈ:ä¢ûŠİû»ëx$ê&–oäÃ;3Ö=­{8§×ıé $¶ó J$ÙMÀFò 5†Ep¼£øÜHÜ­\=Ä¡5r©md+šíÙjæO ºoğ}#NID±FoG ˉ‚ÒVr#ğU®KÚÉDìe‰dDUü‘@„vt(ä †ŠÚWI{±Lg•ì…b53Ø“¬'ïoŞJî{C¤(Š˜ïg³ø„3[Äú0Qà옋'݈NgHŒì9Û‰0x”"xßX%²}N‡Ø i'Ö]Ôú•«ø¬rËlË2£)‡Â唑ÚÔ?šD)mzDq´G${–´'Pzáh»C‚ƒøR–Ê‚Ó\udÎi·w…ò}cÚãWa_‘­+QS ìífD)ûRâΛ<¥ ©IÎîŒÄSi9ÔnQÔ¶›:Šç ¹vp»DòÅ.¤™A0$³ìá0¢ ã°'â{ÂJâ¾]ދۭŒ6I@ìş¶ıÁ¼A¼z©²§,;$ÕG¨u ÖŸ°8¸Øq9`Ь é(‡¹´ÎjñÕâ‘urp´^‰øhw¼Øªbw©‰|Ôê$Ù~ø2éòjÕù——Şvİõ׋··º›cؤoRTc³/&EÍ>›ì3ééíruuóàôâvجq_}ÔPÌMµìˆ¨¥”¡ğÚzÙ:AxIÜ /¡ñá%“^Eœ² 2‘ iBQ‹b»ØñG>õ ìíÅñwI°´@“¿šûÿWÖ6uJŸrFÒ)s'l0Ë^TÛ!2ÚŸàç\wğó‡«ë÷İòÁi×ݪì 0_CĞşzNÿ×MQˆ±|?æ5Zü+2¦ endstream endobj 1084 0 obj << /Length 1854 /Filter /FlateDecode >> stream xÚXKã6 ¾ï¯Èm`¬Zo»‡-°[´×έíÁ“(‰±=°Îî¿/)Êog'Ø“eš¢D‰ßGÒÉî¼Kv¿Hî<{şğÓg‘î2–avϧ眥šïŒ¶LH½{>jÿïóŸ ª'ª"a™à`Çë´]s;tq•_éN­Æ š™] Æ3Œ>_‚â|ıŒ.z£ÃÂ3•”qez•C}½æÕq e¢k½6úo/Òȵ$ê`عâkSà ®më&hÖ¤˜Ókûê5Ü¡ø'áÊ…‰äæ­q[ÜÙ.––YÎ]»UGהߊ꼥”Ñk~À-}ÙkågÇö±R*ú¼Oe„‹£Šûš__K÷3]]Ó⌒],à–TVk]óË>ÖBGO‡º:g¿³d¾'úôşItrt§¢rñà}9Õõ¨â¾¾ÖMGï9¸7¬“‰œ[GíúÕU¤Û.îêpÂ0)Í2{»¶°áˆW»[£—Ãjw§æ[Ÿ¹\ÙâŒÿ€½I›A4-Â…õâ0‚ _–A†²¶Ë›.˜(‚Ñ<¨Ï£$ÌËbo ‘iÆù ‚µsˆ>…ˆå†%ÒÎÏàåÖá^É•õjR1­FXa6_OfLeb M°‹ĞLš–  ¢", çŸ<üÂüAäoMŞuEBHÉà!=4K£·KáÏîBZªy¬]r¿*ïí‹h¤ª™«†jtᣜÉtp ›Úf4aX–W¨[™N SiÖëŸêæJû~)ªcëıÑÀÇÓ‰FNâ±{áÒ!泌‰lî;å“ãFë ª†x¶WÁ–VS¼ëhÂ<øÚ]òF@;75"e#E ;XÍ×ËjH]|r9Ú&Ñg83š¾!í‚ß25=nõª«%n¬šf¤)K-òÄ Ùù ¡Ùdó¨%ʧÅa0’†T4ìH ‚ê‹ØY¤ÏÒ‘şş¥hf²áx>†İlæ¬h,ÄWL)ÌäšiXÙ›øfdf9ÃÎlôâİ!&<~#Õ¢­>vôÙ}u‡[‡é?ø¬óŸgÀò–ƒØSºÿt£C(JšG§×/;£M¿ÀVÁ’fLëZe½×G‡ãymúyôC×4?À;–E{ñîäµ¾‘Ö6Ñr™05^àSYçÇ\ü‚®­¶hÌ|Y ±GjˆX@z3¾&ËOøz±I’è€ç7ÅÏû•Ÿ?¡, 솣úDÏíS±xD~¿*„ÂѬ«B´B,¬™Ó£E$@ Õ³¸BG¦“|rÎúÔúz0¦HÈ,K€§g ¥"rʘ¦Ïç:z+ºK} Dˆ0gÕšÈΪŒ F°PÕ„:W•æF¹óéÇKÍı®·ëKéÆr ²Mª0zˆU-f¾câ©kòƒ›ëjg>R3Ìù|áã'ş½ºÒLÛ‰U¤Î|U‚ ; ïßXÖ)·‚YÑSDmq-ʼ!¡¯jŒ¸×Ù ¿ß+«„xëNJ!şí{“Lì"­/^xôGG&«vîC|ğäqÀeš/€#¢ÄÇ*áQ(ôQ¸:aCo+G!Ʊ«EvõfÚ…(©ò[Ù‘tÓÊÛÅMÖŞ€Ä_DßîꈛUºÊÌrCP¤rcı1ÖíCxFºÂ=ÇÇ›™+…ÀãChŞé± (eôØÀçvÒco.?«H-Н©U[8û¶8W9‘«ö½³º«Ü½:q´NÓ <ùs„  M‰…í/ Ğ1mÊ{ı ¦=si#¡C5jåeË4aÒ—ÅÓ{[çæÙ¥Y ¨UıÑ ûğåeF>^¤ë{ƒŞÇU--½„ô‘Lá`ıóÃK'??¼à†5uŸ³fÑàOJÊû"àêÜäWÒñmÚX6:WÑ+úéà²b¨ë N!ƒà.†|î]øNe…õ<ÂÇZ²kâ-&h ¢>h 2tPŞ|£“‚Ö;t‘ëò³¥Ï¸.~Í«ºøR‡C­üÏ$Ôj‚Ö9…¤“_LmøÚlr42J&¤\/ıï¯7ï’.O:×Ç1åeÿJ4î}S<ôÅ(_x„×D–|O6Ôñ(Ë÷u¸,×.¨•[:qt8¡*°Áÿ¸Õìiw;dÈwŞJlØâü˜AÓ8蜊ҵï1V§íƒ¼® EótA{‡"RÉLª£hïív!mÔÜğÒ¸xRòš¾®4j`,jÔALÄÖY_ ´_ìZ·İÖeën%%ZDâi–¨!77 XÕ ÉüÔÔWÊÕ¡rÀ°(Cú®›© ÿ( IûÿHøı­(ËPYP<!1‘àNŞßuߦÕpÑ·q§Î…tEí[çÿGõ]|èÊ O9XÔ·æ:{Úñ<„v\ÁLŠ?[Xš†Zʙҧçÿ^ ÷ endstream endobj 1088 0 obj << /Length 2256 /Filter /FlateDecode >> stream xÚ­YKo举ϯhÌeÕÀH+ФDM€I ’CrXÁbwr7ÛF†¤¶gş}>²¨7=öÌæâ¦ø(Y_U}ELJ‡C|øÇ»ø…߿޽ûñ§Dò(O“ôpw9°TF©È©Ì¢„ËÃİùğkğ¡j‹óñ÷»a²\Læ,â*$;ë·˜‰J÷×£d6NnÉR>—‘âé¸$Š"š³œ lóCÈX”K§Âİ£öHKâÈ´âš«I9&±qÒ©­ë¢9C.T ?ëÓmĞ=}]Ú®¶Í<¸tmM6¶ ,L°äTšƒj'Mí¶[ö9¡e3Ëj‡PÆQ"²õéN·®ÓÍâlÂãàZœÌ×§£LƒâAG³g"JĞÿ?L´²P)ܾ[Qö¤P_ÖeUà€I’CëÑG2Xv±“Œ­J¡LdğާY¥Œx`îXKŞc¶×Ÿ%Q»IúóI_İ¥Å@6H²8âq²6‚µ4€4Eí›H¢|Vø¬q\B6Îi´>7? $õ?Y çæf€˜ä‰E‰éw:$D`dF„4ˆ Y0„üÙ=êZÿĞûÜ(`üÕ!(‹”Úøİµk­ª'}¾u„Ã]Ùì2´aêŞsOøVØi†â3!âW"Ò,Ês19ªAsV¯1’l‚Âïãä0±Û(bñœrÂuš,pN{è¼Á&‡+±9ØœÚæR>xü'‡_NøókÏT”¦L>Àú{+ Tm¢VC‘°àŸ)\·ÆîOæî×ghİ™¦gÏpÇrÄ}êT„LÏÑ|<š_‹G;z Yp;²€`™XšşM üĞ͂ߛ!š1z™Fo~!„Ÿ?¼7˃çÇ’ ìÔèg5Œşñœ;ŸH¹R*—¢Ì'yåí}3¶¼pܸàü.{“¨HªÉ"£ÍÖv£À&õ¥lôˆü=ä3ì)'ÛÀ¦q<î¾~"’i¾î ~ğàtR±èÜ‘õ“µAu+}~›'Ğ,Ëòµ7ú9IJwı’gøŸÔİí4„/„TŒLå 6àsd“ǘõ6> |`©ïNnš"&&{ZÀì:]+ÀGA?E ºlk;i\:ydŒˆA±m’*ä>©Ö'rΗ©EÌí{ë.è3nm~Ë!@¡ñßrx¤®Æ İív9£ÿ1´MõÅ °ŒF?`£¢s{ılóx4YY{ıì¾lÎeó`Γå+®âà©ìËûÊ}XƒQ:-:èÂг¹0è/şƒ‰İsÙkhÊs6¯#Ä ÙôîûJ‰óúT›ÉX–…Õ0]Ót.¯…ºŒgNã ÎŞÔö~¦T¤ä”>û“I´À/¨ ğq ë¨NMúµJ6úìøxC®6€°7Êùˆ1BpǾ?+OJzü¾)çp8‡¦²tw)NÄÔöîÊ3´·zk6Ó¹­2«8ªAz(<uÖîıÑU µ:±!±|Õ­Tºsi Ôù·®ÊÖîò]Òº«@ ¾Î±Ä÷4™¯ ›‡ğsǶF~¶~mÆK¬½lŸ˜U=Uÿª]C4aø¾è­Ó`{(lì`Æ×Ôs‚[¶+F² Xiâà…zD_œ#Z ÚFD9É)ş¶»ÇLZÁœA0x ÷{­áí ꊌÄÚck*W[Qdh{{“å=nr,ÅL¸´E›vKnWú­Í¹nÕP^Ç©{ µ¥5–w)eqlÇ‘× HÙIğÆ('–{H¼5À ú¿_Úª²éäÁ×af WN.#–ĞÀÅ N¾‹©ÂÊ6kÖô­ u{¾U†·ôƒ®=¹Ó0õÙsM’®—JA<é\m7øj’übfS#Oz9 eJ®–´ÚîB´N&ŸPßdp®¶õpŠL²Œ¾†lܰÍWiì›}+«!,›pÁ3vúåy„„½ĞO˜È¼¬MÄß躩‘&c&ÚgÛ²À4¬ÔtQ¾ç]ôFKJl8A9”@'òxQõÓ·P&JåAYËÍJ-íëİpÙœªÛÙKp2Ô¬Ù«üæUË+˜dÊGÃ#Xô¹ÿ ®å÷•ÏF[uPä/”ÛO©rï:}‚{¿ªà×á(–2ùıp¬ÛNŠë Ñ3¡hx{(Eâ ˜9(Jlz>(†Ù6-¦kÉ«Í"‚¥iYXÚÕ.&9•• nÿÕÍ–õ‹„Ó;Aâr–iœ5½FTíµH„ §²k›qI5æÿb&$ôÂĞÖ×j¬EMUÙ61§Âí81*óq±/i¾òÀÌæ®útq”n2ÚÆŸÚ†ÆZ_Õ­àB¼`®p$]wA-Ås’´1`©‰¶åz°írDoÊ>'`\<_sKò×]¡ÛGı©~-¢EªB\®F<ÁÁ÷ßí G"R ÄDJÇÏí”ËÌgÓ ã .(<”ß]F኶7³³$<˜ÆXĞáŸÀÏù‚˜è<ò<îxõŞÛÔL’êâ“c_’ˆûnuÎË–|mÏS¥QşFâ•ÅQ/Ya%uş•N‹j—ãÍÊygâeAÏû ´ùşPfo‹ 8Û¤9ûŸƒ+"u‚«g8ù2oI2-u3›Šª'Œ-­¥mÿ“EX7Š/”ôÇ·ÙNÚ"ü™ÊÆ÷bû±|œ(¯¹´í<'áƗ¾CšDY*÷”°½Âñì¢zŠ®ß)EĘɋpME’¸X-øûİ»ÿëÈ( endstream endobj 1093 0 obj << /Length 2000 /Filter /FlateDecode >> stream xÚ­XKä¶¾ï¯høb5°Í)êbÄ$0rñäçÀ–ØİÄêÑ%ÏŒ}ªX%u«Gã œfD‹¬b=?v¼;ïâİ_>ÄüışéçϪؕ¢ÌT¶{:íT,E,Ó]–æB%éı3:N®®;øq˜ªq¬ßÿëéopÄAJQ¦ÌÖöƒ½cù9N%şÖC©…ÔÙzÃ÷‡T¥ÑG×ÑàÔ÷[ç™9Ḹ¶'×İÉ¡•—ƒ}¹öÃHsCŸã¢G’‰L&ëóqSµ¬„¯.¶µË†Y—ìÆ{r €Ä®/¹uzĞV?}¾·³Ô¢ÔzwP±ˆUNœÿèN øÔ™Ñ6¯ûBG÷U–Ñx±8ˆ#s„oõ{ø÷ şcº}1íµáIİ&Ô§]?Òày¯ò¨ö2ú"öÄÑ+£+‡şØØ–X'úxÃûW²Ôá•®;_âşº`FÔÎ }×Ò÷gE„NÆïóÅÁ©js!»¬°L…Î30{8í³ß²ÈD’Ê™?hB&okåQ‹‚&èQÿ‘ˆ¦ñ=1^Ìʘ@1ÄÌ_‰0òj°à 6@!Eî[‡“L´¥«›jtÕş(ûU8 è¿Ahı Ó¨³ÏÄõÎÆ‚ô±‘ğšøì¿'7àUqö|±¯%ª¡Ï"áÎA‡Í,^¼–h–_ºuMS$àEÓ·W×€]w¦å¯8ğı4T<®(,kb4à ïÕT(öË>…¬=3Ñøà§<ªÚ„Õ´íÙAlËV–ÒeÁ¼Kà ¹ÁyO$Nm…é·ö¬E$ÇKV¸ßŒD©Âí-ït-ØBrΚ4ƒ˜›Ìˆ6Ú°9ZR!½¯¹i1‡vkªaŸ‚¹hVUøo#%2)n ÑáúRğçïCÒòB(ÊQ&o¥nο×n4/*Â> —`aÁûgqüeW² ¸e±è{«¥2KE–doKucÇY¡¥æãß–z‰Pêÿ®^*„˜u}š€šwƒüW¿n/K¡³üñök”Ì„.Òu·0V¸"BŠÆÜxÁ8WeôבÖB=„5CS,M«rò -S_±•'ÎñbøˆL })£Š¼X^‡©ã™Ü³~K…É3»‘›m#IBõƒoÍpàN[]m~Ÿ)äÙj+;2KL¸ÑÛæD'W}‡V목cº dÀEÙ¾8 àA)…Æş9–ú< PQCȱ dØ0˜ãœqŠJ" ÍÀ†¶ƒ(Â4´¡ßnxFÅ…È“L0$ç`{=Œı³`°ÅFÖñîUœR øHãmá›b"`ÀÚád*KKœ?°RƒÖ ÚÅË[ ”úÑß²¤UO ğMÎğ asÓ›ßi/ >LT†ó¶Ê ´Èßi*©K‘•K • EİÚZ±®I‘ÌÌÛ¥©HoØZm‹GsÒH‘éä5׊şˆ9L)Ë)ü˜°ò`&¬u2CU <‘lø W7j—øoº.xI)(FÅú52NîÌ“‡gÎøøÌÙvÑ›×Kú¾ˆ÷ßTø{·œ)‘gú·ŞQm_O B?Ú–Ş^¯\¶¥æÿşŞ|Hå¼*VdîTÓîï-T Kuç'~0^k™¬ ú‚Ì[MG‹<ıİ)Sˆ,[² fhœPͧÔò Ëâ¤|7ØScAŞ/ö+SH˜L~GY¤S8òK.Û&Œû™¼ix8]¯ôèa$ {ÿÈhî5Ô~î°íçè7¢ÅÃ+WğUs|':SœI"¤âŞ¡…ŒÁ3âêÏÎW“÷˜}o.‰/²BÏM4è-„J¨Á‘Dà° ãÅø‰”ô^Fjm½;wáf@6|õB 0d:˜`X¡ú+¶«oÔşDÄŸ‚=.(’Z(ĞZ~m>¦ZIÖÔ‡pÄHÔEgœô]óJ£¹u5*¬‰ø½ØæŠ£ïΦs¿²˜p1,šò“ইØznı½Ze‹"éı¯š;A¬„Ù8uÄ Lá)Û»š{˜Ù|ÈS5Æ_f3Á1•u{ X µƒ¢@n¼<ñy A}d{Ó»ˆÎ‹åK‘ˆ˜¶õ}S™’s`W€À8 ß—®†zÕ´41ËÈ £;_ØwÌpİÒ6D™†èŞúƒiÈZ­İ¦±v!vÀÑ‚N:„K+ âp"Ïã­HçĞO›ÂŞÉOóa¦í·QÇñşº ìÜCãô¼ĞÑ×Ô­ âÚüŒ)1”îlOÏ ré:p$`“.édùğzøeÃSË[ªş@‰«TØEÌOdS¢¶áŞÍèI!€`³Éx»ëªfª@P½æpNËNûà !|ú,õW~#ä{VÍFK;ùÑu_ÈšXt C¡#¡gšXª sU7ôk^+xı áíª5ÅÀjğ^Ü e–K’®˜~xúğá‡Ûö endstream endobj 1099 0 obj << /Length 2781 /Filter /FlateDecode >> stream xÚÉ®ä¶ñ>_ñnÖ^÷h_r418@yl‰İMŒDuDiŞ´‘OmÔÒOã9‘U\T¬½JáÓå)|úéCø0şøúáã§(}ªUçO¯ç§¨Èy=åYqŒ“ìéµyú-øWÏ¿¿şm>÷ñS¹:ƒ³ğ´÷õªŸqVşú—@QĞö·ç(èpª-bGŞÃÀW3ô¶[ò¾˜…ußİL«‡@)Üwš.—T¶á;`[7·¡‡IÔÚb êEÇ*“—¸~€«£çCæA­,O†I&ÚŒW=ğÜnÄáÄ©Nfªi휠oªöx÷pȹ ªcàD”ic/ {µ»”Çh;<,É¢ Gª²˜©X1ØM¢‡™y´6“;ˆ¼ãó!­*– îÀíÅ#ßé¨møØäˆ€òoØ¡±Sxô„Vi ¯± \æ=Ɇ؂$ È•Ä@8O€<"àÏÀĞ»Gҥȟ"Ѓ‰£ˆsw7êÎı&º½*,NşùÓ ¸Ü¨1 ~?>(öƬڇ8>–qúCRäÈêqR-ªñ!Wce•±È¼Š0ÖM7Ö~I Ô!f8Îge…ƒı™q#®¿!{{^0dth}­^Ûp­·nWñğª$ ̈”¤pŠήÏñ†VÙˤ.ú…Á€ÎÕøå+l&®ßÒcÄ¿°ªVıú'‘( ß…"ÎLè†3ß v…A1à6‡ ï9‘‘Ão, Z-1 ø±çñóì©f°ëäCÆWZÃq‚Ö(2ÀH•Øïã fá®?¾C»ÜŠÇÒ0Îv‡O@ΔR‘Ïåe18ŠõÙ‡0ŠĞË5  Âõ%QY_3^­GÜ´áôn°d¾%^_HG<1ƒ A0kE)8¶µcùs×–†”']ÍÉpøE„á´¹¬Ò8Ä¡˜q„нΠµØBäéqIÓÉfœ–¯¨ï»2°Q°äÖPj1ã6šÎüáÀ¼]µÌQ!-Gq+r“r›S§V2D¤ô mñQ2«ÇÕÍu»®Ll—ŠƒÌˉ˺rìÀ¹ğÒ oéÎ2q?‚½?—I€êˆZœßg)<ß°•1¸viQÊ€eH) 1OïŞ÷Ñ!-€£ö?—Ó ¡'êmKIÍÇOñ:7ğ.Ÿ›6úŒ (íZoJ¢cRÆó.qJ˜‰ÌÙ>‹gd¦Îߊ} [â$¯YU °H~Fğ:w¯hÉ1†ÏoÜ9ñ {Ñgrß•ş…W@ú0€”TSl%5¤xÉD6$î*„â;C’Œ/X9wÆÙ¡ÛñF#HÔ•OõûNüBÇÙ>°@McßaWm{gµa¹â¢ëÉ%n)ŒM¸Ì•B.) ¸Šwä•$4ÇQºX›ÁmÛ]¶2>vdä ¤ëÿ‘pU•¯”`%¤'¤$­¬CNÛO ç¹`,}Z=¤¸xÉ*œ!Lì­°Ô·ÀêqUVÁTAß÷QÎÀûOV1ÉnŞ@€}1ƒJ•TÁºV““5RJ$½ ˆÊ9uÆ g­$@¨éyä ¶^´İ-ñ¡ve ˆHŒ’#4İp éq$ÀmP´ç’“2Ş~ş«i°t¡ÂóıÑbÒHN%«ÀMöëoì½a.H“œt·'-àíÚó„|<Œ’ĞC©:Ó5È>”ÍXV0™ÉË£»ïd•Àr”Pƒ ú‹ı¨x¸ ZÉ—Å&¼ºßW|©aSŒºìmÛ=»0g{Ã]Ş©¼‚µı¹L$ ª³ŸÏ¼MñpÖo|ŞQÍH ûs^…{) À¦NŒAn{[l;íRo!–e¦Æ !æÜŞ·|Ñ +7EÚş…ö…3¢D’>\'MÇ äV;Q£HL%"œM˹ĞCØq5o2şËƒ>c㦖° >P$Ç<-ıÑ“¾ûşş8?FÙ–0*É+ؽãå’«$azŒã‡2÷[#È“U“q°«‡Ø¶Wì9ò9Óëy›bägîèH‹…—–¾I±¨RÏÎ>!OñİÔ’ì%®Bߢ|›1â9×¹/«.m'ÇD~,ô:\8-e÷\NVRźv°ä0_¢Êˆ¿ëäkqjıèÆA!ÓpÓ‹|áF4'q%&qqq$‚'¨FQw3;6ÑÂR˜/…ñ 7¨ù‚ ´½5`$nœúIŠ¢Åߥ²TjPn”8ÑSUÊmÓ|f# }qjÎ[šSZ#Á›Òl\xi§+OMA%&Ï ¼W¹½âûsamTí—CRí•a%@‡xÍ^¾ZP ì¤0¡Ä•–ûôa2íÈøÉq‚ X>„õ($3Vr9Çö†w¿ßÒH’…ê59İß§=…ô.1_äŸF øï¿ğø¯@^¸µÀ5'l™l»9ºVU„ÕÅÿo7¶ì¬cä›q«EŸŠ bÕÜ&A"Rœ2£DOZ>d¥ªEáÿ䑨Eò"ÒY5Epc]byÍgÁ ¿*ä7 |ZÙìîb¦5Y¢&‹åïÖ6i¸¡S3f‘0¶{×´á*k?ΛÌèÎ8ndKЧîoü,=äD`ß,âJú²÷C‰BvXÎÍ‘µè#şfòé\LØ€†HÃ…[3eà÷.YXmTe/…àÿ ÓS®è)Ö„ˆº"Y]_¼kz ê µKéŞùPXË¿Îğˆ›Òèjÿ#‡ ûÔöÉ&Yİc¼7[xæîаšù¥Ä•;œ(ó +®øY4·®ÊZİ:Ƽk€•Ò¯»•ònйm(SPÎä‰a²µdD,Jğr°™0ƒÆ‹+ÅÿoL$¹Ğ’şEMëø¯ô™MÕw| É9–öc”çÇ²È ¸ËRʼ$ßlúëë‡ÿÁXm endstream endobj 1105 0 obj << /Length 230 /Filter /FlateDecode >> stream xÚUPËnƒ0¼ó{´¥ÚÁ|­ÔTíµ*U= ¼ –G6Qúùµ©ÔÓ>fvfwK8C ¯E¹Çç®8[0ÜèJCwQjŞjZ5¼’ : _Äâ…²ª%¸X\‡‘²Z ‚}t¶|õ9Vd ı€œ²6ÑßÖ ë§èÙäiBnqcŸü>>ºóˆù`‚³¿[Úë„ñ)µŒ$·Ñ yz¤ßİ{ZŸ ÁÚwüØ œ‘2)kò‰ánõ“KI¿D—Äã†^7ç›âÃÚ/™¸ò,û÷:}¢©)¥¸»lş±^ºâäİW endstream endobj 1111 0 obj << /Length 1216 /Filter /FlateDecode >> stream xÚÍXIÛ6¾Ï¯Po20b¸/‡ @‹f€¢è!pOI›ãQ¡Å‘ä¤óïû(Ò²lÓöL<ÈôbQô{ä[¾· '«'w78<™ß¼û@UB1’’ŠdşéÖ*š"®L2_&ŸÒ_óuoÛYÆ”HÅìïùï#¥ql8ɸAZxú?Šû6o ÛyRd$•P¤9õ”uNå4ím8wJÍ$âÚÓ@|Û¬m}|$5HHº%Z4U•×Kêg,pg³Œ¤}Ñ ¼ íÙøİÂ'< B€ÏŒh„·8ıŒ‰:`Ú“Ç­Æ{œãó¾©~‚‹)¢bšl)¿æå&¦¥H39x¢=A F”Œ¸ÿ)rxÎp>ši&HÚ ?XxäuäêÌ€„†õÙe¸çpÉ¿‘#Ò”+3%ÑHˆñŒ¢Û1O»¼Ú¢¤‹œ/ rj-\7ı,€K÷²Î‹6&¸TÈñ"Áãƒ#¸é΃‹bp-{ºêMYfeÑõQ½l$wTÕC†=`ä¦÷Ë#¡Ø>À>ZˆËzğ;N!L­_= i×m=†[­{—Ÿü«ÓîÖ-Iú—İ![îÊ—ØëŠU ®§·í–µ+ÛoEw>Y@6ô0V^êLû%š)("â Sdã“IC`„ÙÛä B ¢æ(gÖM"I&9#“\€K#0•H©Ë©ƒ\“:ÔÉÌ^(ˆ/ş=¿Fú0+y-âŞGÔrM }RoªÁ÷®ës ›¼G¬K¡ßzT!Å#õê”’f—Òÿ·À{ªÎ²·Q Iï¬ZÅÒÖ}Ñ?ÅbŠBKË_¯-zAÕ/;ÓBfU ÷˃®É IæB¶£|ÕJ´‘ÔAY ­:5z”+şõŸ t°Ri;Tq¿ P´~;oW› &(Û=ŠVQj4ÁŸ;CŒy„Èi¼¹k`ŞrCä©·n–qWÑ4ˆÑø0ÜøM˜×E ´Ã8åZ2,̾{‹ú«ÚŞÆ†R†(³İ>¨†ÑÖU>¶-> stream xÚÍZËn#·İÏW(ÙDÒœæ›\\\Ü`2² ï’»hKôX€¬Vº[øïSE²lSÒx4¼7Å7‹U§N§\|Z”‹_Ş•ñûÓÍ»÷Í«˜ZÜÜ-h©ˆQv¡¤&ŒËÅÍfñÇòw×›}»*8çË®9:,‰åönõÿ›_ßdr22¤”&÷#ÍJÒ¥Ã?›í?Uç¨骂ÊY?hûl¥»º UîqÅÌÒ5Oñ窠ËİŠ†ÂƒÛckÚêÜî(+‰¶º_i·m»ç»¡œXfû>; {ÿ‘ŠIׂÁÖ-U‹‚ZÂ4Cş,©bÓ|©ŸÿÏR–Õş)³Y&‰-ùyQ²,'ÇH–‘ŠX-&ëĞĞ)9- £Ã}}—“™ V ÓÊ5í—EÇnêU`ƒ[¶vÙİÇ=@¹­bÉı½v‡®ïQù’YncÍx¾Ù…V°ë‡ ’+…ŠpP8w…´DK–ıj°=u¤ÃmªÊ_aÖ»Î59å¢DZñÆÀ®_ë4ÖqN˜ÚµX‡BÉmGh@şÆĞ.(ESg:U‘:(¹¬ğ#Âx_±®ƒæWÛıvÿ)vÚíB¡¾ ݃İ@ÅÄTÚ¡KÆm–†c.ŸT<…?˜ğ,ü µy9³B&ÆË ƶHcÄè™·¼ñGFÓl\8jßÖ‹Cq@MoˇƵ®yÄ&·É¡!Õ‚”zDÉúͰ»nı¡BÁ<…Í4îØºÙ~Ú®nªOnØmF@ÓÊzN³/şeä‹spbúÛ@RñPrt–Iezé5şYׄZ¶¼`ˆÀÓüK†( ÑJ¤œÔ«” eô]XªÚüFíÄ0&pxJI„ØCïqÒ®_'ø>· ¿‚Ícibóí³!íq×ÅZÔw¿ËÃa÷„èñ‚¶ÁlÎ º£ç:>œöÔ¹ öÌ4ó;ÀoŠ;±åùn`3\˜—*÷Lü€×–¾D;õ„ ƒñPÆà‘L?W¿i`í¬ô?SÔÄšî¾nccP™ıZ ;—¼U>P"œú,!‚@B¾<ä<Éûh©$…è6-ô,ÂiÈÑÙD?¢‰˜èG°Ğ¸‡Q2Cñp*0ê¦ï vóp?&%XX³ß‹«L÷ı[Nµ§ı ÀÑ ½˜j ­¹Œ—&Ô~3ÊÅ#%½’qÁıԮػíÔ$§´ËxSv:S÷Ú¬ â_eN…7–BÔï à!›OÇiPÏ–Ÿ·İ}è‹”$>ô˜7Ф„©ëBÚT­PÔÆğºL2 ¸ËŠ.[‚y“ X³ÆB0ª™VöŠãª5jò}VÄDªxU˜^éOi ¬útlÜî¯\úæiŞíäc£è+iÈi‡|»+"Š ·ˆz¸ao^`œRÑëeà:÷Zù¢+3á’Òó,0`˜ßhœ Eóø*×ú*Ùs‚\0 ‘Ëŧ .z`L…pRÆRêä°Ñ9ÁœîjÂFélÕ¤ÏTè1£=1).‡€=¾ğ“& “¡6‰j& =÷×3"€âØ¥«³¢$r|³š$ó“》¶öBìfôT&ßeSÌ\ÓLŠ™éyh:[ Æî@rœÀÿã6Û»§ÙÈÀFıȉ"ù· J OÅıabnɶĞ6uö.™UÁ¹a¦™¾ÈÅæÀ*íùW k‰K,?Ç+'‘°çi6< øT[!ÀıTw÷9$0ÄŒC7y]æÄèëâ¥dŒÂ’²œÎ“•¤OøñyÒâã‹O?á9Ó7æ8 Gߟ¶Æ+”=qüªn±í3®ZïˆŞ«•jå]÷ê~¾q®i][%'åÑg( ¥´ÿÆKhÃÓlÀ×Bø²î¶ÁvÃÆ—ê6Ïn áR|»gh̬²k¡Q!İÿ¢}z¸­wÙÇE€i2쬌B0ç?" €ÖæbÄ1^¹|W¸QŸğÛ½…T§8»îC*(À> stream xÚíYKÛ6¾çW8§È@Åğ)R‡¢@ЦhMĞ.zi T«¥m!¶dHònòï3CR²dË^o×i/¹¬É9œùf8.-gtöó ~ßܼxı–ë“DÈ„Ïn3–P’$z–(M¸P³›»Ù_‘"|3ÆUô¾¶m;,úoë¢ÄQ[”Ëùß7¿¾~kf)I :‹9#†3Ïáfe;…Q¬¢zÎ"7—pqôve=>ä£%á ¸9.ÛíñALmX·¢ië]ŞîjKpe¯èë·LöÄ&!T˜YÌ4¡Æïü@™>Ø3G¢;æU4ÈÒ „QDJŞ­ºÏÖ»)8'&5^쬰ÒAËHªÔW–6V”FÕ®İîÚx;W,ªêvÊ, \\¬£Œhn«:Ÿw¼vBÍIªÕê8¢Ÿ5E[Tå„‚ îDj’C Ǿ³&, |İßnº;£)qá‚NøÊÈU á½§À%Ù%ò]]ÛÀ Çî*é§ÛyÌuP–'ï{( ÿ[Vş7˜Ã 4j<İæØJÚ;2¡Ş%¦Ò±i߀*$ÁX¯5$Séî> DÔ`ph3„EWÜ× Nm§gTÂñ¿?çZG'LîŞÅzí™ß:¬¬Ÿl'LgQ¤;/^[ä•Q],WÁø½ZàÁèŠh©Æ ´+TC]^­w›²Sg!n N4N|ä!ò¾)\Ü}(\Õ ã¦à ŞÒÖPµ€bë ¡o.É4ZìÊÜo‚©sOwzºÁ@z@M«WMœW›íÚnzÄ=!¢£óÁÄ:C†NpPUûAîÒí©J2ÕáÈÂi€BADåFFëb€¸aHNX8Ö» Ь[ã…æq n‹¶ñ#L>ø›•ı<ˆU£D0‰>‡5µoêô^‹øäÓLA!Dì£>ˆàLySº…#µ³òn*H¥Dh¶g¹Œ›|v9æª8äÙ­<Ÿ“”$FŒcÚ“cuĞ/Ş >¼µ‰v×£‹%\2ˆÆÎ“16ÀL‰ıÏ1†uœTDÅ>ø¼œ 'õ¥œìlzƒÑà™é­ƒ¬¨êo= ²Oß {*deÕ> ²©ˆFä¾€9%œ± Æa½% ! 9M!ñT‡:ÆÖf6r?W "wQíOXWË"ÏÖ~RuBÊôD ï©悃/™Ÿ”ñ­¯n]2BZÖ.™Ašÿg 4Í”ê‹îş®›q]¤=f¯|I!$u8¬ßE™¯wMq?÷¥ ’ŞıÚ-À®Ïš’&e„ö²|ºD\ãYÚOݱf,y¤P>³õ{¶«m‹y÷Ñt¹ëvåd#OÌêÛáZùµC°ij1ô~éJ¬Ú½¬\(ÃtRä µãñÌ™ŒVEóNi´qõSÓvœã`^˜då ¶ëæ+=`²pÙÚzûô…\âUó• ÄÙĞ{`ÃĞ;’{?÷~ ƒAÉÓOi—Ù˜EUZ¼ŠŠJ$JæÄÂSk4¼ì¥pGO‰áı5Y‹6Ų<ëí°6åÏsuç¨'=è ¡ú¼v°æW Ö\BË%Gúÿ8°ª”&4R0èkvÓ9\í?`Í.¥5;R ô¬ÃñSÏd\½kc¢_çdhïånãlßõ/ȤÜÇnä¶LÙï, íÄÂßŞİø8Î)À)FùÉŞyZPH¶ë#íÖÎöˆ¢ëe×#~nCsx½¢ÍÛª¾¸”Êø«jS-mi]ÚD‚Ä3Bêí¢´ï}6™k§ÕaÒD z1p6.ğ%µwI.Ã*6t8¨¸öÏ0ÅQó˜‰9Ƀ+…îb´w(şÊ÷®¨Ö›¸2}ÒåšaôAe‰ıqæÚßthuë¿9Û»5vã×8t‘”•”![·¢êVVŞ›ÒÕ€6À«ŠD††Ô±éøù'Ô´{B=ŠSİ£èD\Ü=Ìu-$8P|Êotº ›HFQÏ }{a~˜zî]åEo­×.Ro]åàş¬]ÌÊó`Àu¥pÀ(>MöÑÆP­z>úZßîàv‚˜ë)€Ñirm€¼”M'éip%¦G=ßYmknÛ=9ÙîqÜEíùJØpLñâzØÄk[.ÛÕ‰‡T¡ô)#`šò¯["Ÿé…˜D_˜Ú.&¤3†$Ir çF'°ÊL¨äÆ&¯ \/ 6'°ñİÖDIirù0‹äzZ}?™SR¹<«Òã#M‰Ü·ÌW*µO9æà†©â®Nd4ü/AÒÑŸn^|'Tš endstream endobj 1123 0 obj << /Length 1831 /Filter /FlateDecode >> stream xÚÍYKoã6¾ï¯ğ¢X1|Šd[ ES´@ ›[·Ù¦mae)+ÉÉæßwø,)²ãÀnÓKLFÙÃá7 mfxöË;~¼{wsKåŒpÄxBgwëÁ R‰%B"ÊÄìn5û+HÌcB¨ˆ>ݧUmæ1“"z˜3™eSVõüï»ßnnÕL#ĞÄÚÁ³˜¤˜7p·5ö+Îe”Vağ0§ªı*j¶s¥»©Ê9•Ñcø¨ö¿yZmÌPÔlÍ“Ƭ‚¬DóX*ó¶ö²ú dÒÓ_¦…,æ±uÅaı&i"ÏŠ•ùæÌb z f?ÆàgµÈš*­2ğ9²Ö;P-Ê¢0›´É|”^˜6¤ÆlLUƒƒ ·¶ïv÷¹Ù™Âª7ğ]Y„yò¼´²Çzà^âİ[—¨Ñ;Îzğ†›ô¾ö£…ÿ©ı¢J‹MVlüc³ ÚÁ…*3á£ÌzBi”ÅÊ‹.VÖùΘé+{spÖMµ_6ûÊø„¡ıŒáIªá ¯é-~8–_’!JE«¬B—Ö7·„÷TÁi®ü'Ÿ1‘£¯î¸Qkÿ3x—~1ñÀ-ïÙ`>‚5ª‹ä}ˆUôU88±΅ÅжCkütDŒ#®ÅÜWG4&®ÌzÂS­+'=$ğ—‰%M”pÕ›r.D =­‡4ß›“èPŒ‘Ò|¸U.D§6ͤkJ§8÷Óy?!® :¢DR&WM€yV7“1òùh¶fƒ+~Îâ“ó¿ç¢âÁ„Óf°Å¶cŸ×Íáî¦â@`|²,¶L__)¤IÏbL9Òb5ašÂ¢'jÚö!áî*ğ¦+{®ìR[›‹4]Á¬–fj˜å¦ÜC9ÃÙ8U{ÁÚùì*İ1À`Yã§UÔ)¤Eì- %ÄQ¤488²9ĞØ?gÔ|[šû&à8?ÈŠå <ª««lé΄E÷i #8$WşyLIyMÂÀÖ¬ îHü%‰|M¦LÑ!±=×[®ãRK f‘µ@öJØëƒÒÙ –$XœE·sÅ#[àì  J(–oÛ–&‚ÜxMí%ÛÔ>=X2tвñƒàè»G­5îÓ oi(Œ[†å ÑTBIÈKBüvpW(KQOX¶Çğaß|·ZX2à)ãÚE($LذñOÇ óx…évZfÑåI´†õtkã•Yì7–ä}o\E¿6^ŞFÂa 27‰”k/qûà –eQ›å¾c³.U”Z çÉÛáb6&>Šnå¬èĞøçuUî¼öØ^î1SÈœlDãzsµjixµMÃì6Ÿ¤Ï'ûù„¦xôecCe,Ø`Œ‡èA€Ñc–çşeš×¥—eÅ2߯‚jÚ¾üw´ÔDÁV×'ÓÅc]ºŒ¶Øu„ßû¦Ü~“À˾z›iƒæ.&Z"& 3Š´dmw—„îî'“ç'z92hæÔÕm™¯ü(õ?5äZî^2X^Éeé×(V^îN-+Ù×f½Ïıøqëö|ß’íˆüØ–– ÅuEÖ„ËuxQ™¯{x³BS͆ë­eQıT7fgÇnÎÚK›ueÜı†ph»øÔ‘¸ ÂWno€Bn¾eË4ï+UYºÈÖ]æ. m£÷ZÍq)éáܘ,ê £)9¯ëa ˆˆ¸´ëYBJü0AË$’¢Ï8ùøØ‚ ¥õ•9àÂ’ÎÒıÉ…³íZ ¦Õ…İ€ãDŒ ÷ìU‰o‚ÅÒÆorKc¢ü…&`ÀäÂÁ"p¤S6‡…8êØ¸­VòÊh¼Ü:V$ô5P8Ò“aÃÉ[Ú8Ñ,K8xΤ—pJøŸ{ckÕ™5œ“öBeµÊŠ´²W:$± ğªn⬰gLu‚rßxı¯n*{‘¥y¸Èé}Uº·4«}åxsÇÀú©‹ Qÿz$"Fúèt-„ö9VkK¡¾¤8o¤k„è@¹_NWgëté¢(ôÂluÓLÕpȸ„\±†Ó¯† Õ×@"6»ûæi ÉÖÏWgŒ‡@D“7>Óì ×f†e¶ñÇ~ âh:?x4‡D˜“+çÇË[ƒÀÖøÒ+PS¸™Ş¿xy‡Np{AÉÙWxÄVuv)/ Ä»´xšŠBÚ £d"Š#7iœ! ØçUXPr•}¹5é*†v·ïó{HõÚ¡ÿùı³í²0UW¥Ùî‹/¯¥ÿÅ{g¡Ş ü†_ ”©‚E‘ âMê÷ñÛs”² ãߥO‹@B¡ œ×òÿŠd½¸j¯ŒG -Óÿ™Áı›ı«V‹ !şç‚"‰¹£¨J….‹îÏwïşHMÆ# endstream endobj 1128 0 obj << /Length 2558 /Filter /FlateDecode >> stream xÚÍYKoä6¾Ï¯p‹ L3|“ÚdÉ‹}`°¾íîAn©ÇBº%[R{Òûë·Š¤MµÛñö`‹MñQ,~õÕCôæË ½ùó;ºx~¼{÷ïLޤ$Õ\ßÜín˜æDë­ áBİÜå7ÿJşM™¹ıÏİ_†i?üÊíd¶¼ƒÍ‹§cq,6u³éÕoßál˜¤¦QJ˜Tı47áv£(MÜ”0cº’DBǸóƒæòSÂïE7–$•²ñœíaßùáf n˜M‰N94IÕUH B Ÿ+âüô\–²kNϾéé™ Â²7şî‹ÍX¸[%ÿ_u %1p ·é 8*Óùm¸mÛ÷·n$!ч \ͼqw‘Vk@ˆéÇvÅ~sMA N}ô?ÊÂ)¸J{ soÂğQ‰V$$¦=ĞÑúײí6?®\šÆ;x¢)ºcSµ½N5‚*BµÏUƒòd[{ufeÔ¹¡"‚š™e´ç‚p0‚J×ï°-šg\×íÕ=eƒM–ÔM^4ÑÓƒ¼<Pñ©šZÇ =€±tÀ}–ç­ß¤® ¿Åó­R‰3d¿yí»Aˆ¸}-uD3"r J”Ì£ğbmYuŠÈ†K•XÈÆ¹C<öp¥ØI½ó= «N¼j]¿–;ù†Û.ª/ɉ]Åg'ÖC‘åèi›‹—¦D3^ÖùªüfØè©ô‹O|òÙâúÒ↘9¸5#”Äzr*™¦+–Ì-‘ƒÂ½k¹´²µDp3·X^k¯ql™Ëæ–%p#š£ 3 cînJAU#`D1w¾0!9z2G$¸\­Vuèxä›&xÈ6ùdòŒ{¢Ì­ Q†_Î41ʈ6vTæ&0+X˜—ç§sı€êÌû.ô@ >&½š*ğ*°¢ì©æ î7Û ©=r‡)a®WÖƒsĞ)bã2ò«À8ÑjV¶”uîKÑ4uó> ÓBˆÃÈŒ› K åò¶¢‰VéÒÇD|ğ(ğ÷»˜¶‰Ôƒ²I”¨¶úeL$¾‹ÚqÊôe}ÛaÇ•äu 5Rˆ¡ß<ù)FìÌ3Âü5SDÙ‹­/l M÷r¨Ñ´Ÿñ˜½)º|ôÈ,¼Ø5õÁ·[`#°6‘I„°Ş“º¶_Ïm€«„0ü0—lî(²û}ñÁƒ´ÜÍ<™h úÊà_¦% ÏE¹Ç5`¤³ĞyÚ™QC*3FÏo`NÅ+`Œ nr–]¤DݸÇæã¶¥/¢6%|ÌUzö‘B8ö‘Bö쳑‘bpNáh4½Î@`Zª+ht¤¯Uš¹Ä2qşt–ŒÍ"m3Í3'Öf’™hf¿÷!ò /œ¹ÅÊp[нLÓ»èi˜åDZ»ÌE='Ğ ìI“'H¥¸òh3æyTi‰ï¿7ÔCİ+†yLoË‹õ&UùK™Üûì¾ù è –şt,Ÿ{æĞCf1wYûaIÔ\Wÿi–P¯$Ö•àŠ”Û²;¹=ÁLŹš¢PØå€®÷iH©9€†/Êc8 `êÿ"”³¹S‡uÅ ·ÊÇb›ÛXÖ/ÀQ¥êª@B5–¿V<Dú V€M…œ±Ş+É¿o‹Ç®¬1Å>T«ôÌÂH†#ǹשׂ“:˜;’ÊûËIåAÈ¡òí°ü¹q¥ Å1j91ãZºø9ê£Ó!¸¬z ;÷¢bûkÙ=x2ßñØÔX_Hê6C ìƒwß7p§ğcÛ•ƒS†ßÇj_´mÔ•˜Š%¤ëE d¥án²@8=‹hÉô2^u”>1cÌÎŒ¶èC™´Ù¡ğ]áüϸo<. ÷Ê¥+²ÌNu碸]½ß;&ıê«Ğ‹º5·EÜúNîÏ5}n†·¾ /÷¢ë׺ç~(n”$­×ÚÎöà DÆÙŰS$N§¢FB|.šSÄ„FpKJkà àİhh¸˜óxÀÿÁû7şhñ9-Ğâïh•…“†¿5 ÕéÑ^Z÷ìlœP¦#Iø"Æ!¼^f˜îÀV÷) øP$kâG‚2ñ‰%t¬g­ß"óü½€Ñ`× …û à›ı»¯¥wÛ‹¡ÓœÊs1FŞfy^äÑä(…,‹ü¿¬ğ…]Ä2]«®¸Ğƒ ÕW[ÏÊÅîeYµ]VmÈzƒ &Ö¾T€ÀËÀá+é$çDEİİ*ø0ô­ÛñËÏò“‡pX<=ÿ y8„‹‹OoîkJ²­]ğõŠÉš²… 'Zõ›Vǯ¼iÔU%ɼßwÑXWZ9­¹£ÔXsTÆo¸´€¨‡1_u/b17¤¾ŒHºPÒJì­ÌLƽ8ğÌ}\ìª ğ"á˜2F¨ücÎû3g“/&UÈG†YÑáä“AC¹u‰ó ׄբ2Ò…ŒO‚[5O‚™~òàߦ¾p î<%Ö¼w4ı@0Ÿ:Á" ì?Ğ;éÓ£(@ õµcys5)ã3dˆTÈÈÊ÷M aĞ¿ ©yÏ‚K9ÂøE\ˆ1à埛&»,9EŠ_׉ålHÜ\-G—§¡q”yèøû&/Á0ôÏö[tòߢ©7÷Yë’4 Á ·Âü¦õs|Ú…&ФKã #0«™$#1ŠJ!-. W®GŒÚ ‰i´x÷RÛAĞ aoåE³Ë¶a„WºLÀ……Œ7Ÿ”ûÜ«ºêkîı ~`X,÷oî‡}DòóŞq ô~tÛÍ‹Euˆ BÌŒ€×áä–|6èÓİ»ÿ Ap; endstream endobj 1132 0 obj << /Length 1915 /Filter /FlateDecode >> stream xÚİYͳÛ4¿÷¯H‡C“¬Zßò¦@Ë C/Ì»7ñK\òœ4q^ûş{v%Ù–l¹ ¯}r¤•´»ÚßnóÅv‘/~|’Æïn<EÅ¢ …bjqs» ¹!F±…’š0.7›Å¯ËßrªW¿ßüÔï{şŠ™`“ı‚O,ó»ò*+O§ò·µ ¨#’Êü¾Ü_ªU&ó|¹©ïªæ\·I/)47¸GS"8[d0ÂmÌGDHºˆÈ*£’»AÀà¶„¼SN´0óÔÅZ¡„Ó¢#zš¸™ RÑQ€è+I—Nü@kÑ¡-8ášÂ%…|¬®çÔÌáªç¨×íÙéºÚW0ÑN5mѹş¿iÚ0àT~¦¦×‡ãÕV±5:— õ)=ä„QúH=Œ.Ì(\)š†«İ†×# 7HIëeg^1³¬Àr8˾lª÷îÏÀõ·ü¾nwn¡İUîc[߯˜^Vû9˜â×n¢*׸î·nİø~W¯ñÜ;÷¿/gk±‹ÌsèŞS9>߬2dşª¹Ä¡94YSmËYèë´Õ¶:½ –/_vËtyZQ”…)êÄÒúç­ËışÁı&λÇÄ/û˜H±­U5n*Œ-H[6·ĞéO/Û3Ii†SBsޱûÃpÎÔ$áF÷&Ùƒ½oxx”ÀÍíëÎT˜‘àû±Øhc¬Ë£İy8×}Àt`ÖFs¶¼Ùù5»t¹C¡ğ^òäÜ™24š³[9ï—ıÆ}¼Â¶;´zw)÷~î0Z;vÏæ²våSYwÁs q áx·¶·Ï°çØo<·‡Sµq“µwV¸Hßgw W©–o'不 :O>gÂ(²[mxd’Éå³ÒÌ |6& ¢r=EK}› ±¹5õÈW¢§ MrİÛâ6G† .ñ´ ãìDÁß‘‘„ÏŞøqíÇ+?ŞÎÈŒÅïŸW€æ„Ù°<è÷£¬8J$’õ©îäÃQÆ·i„‰%äÔ.y0ëCÓ(¡!iås™u’XåBÁø©7şÑMÜFrœ­7Şê5z N¡" :T"í2]×°ú¤=ŞysññˆcŒV:vâóñÊ»dshİÇıu)rÒrëºK¶ Ğ´äc n+x5¿M(E0¢(Kd86Ÿâ>|ØõÀç ªÿ`ÿ@tçh¦O‘Ñ8´şƒâÓIzqÊ5øyÿt_µÓÌšÍú6 ‘‹!XÍe}ÕŸÒäÆ#­>¨g.ä8msûç¾nvªR²`5h>hk‰ºÙT¦•Àxÿ¿RIô/4_E(M¤Ô_¢^Ë2>ı U„ÕsP*ϨBeá5.?®ñE@s¥Â';¯(È ²Ô—PÔ7÷ÕB^*/Ârõ¯U\÷6Út¼Íëb ¥Eœ¹k4»ò˜ÊI`—Z\¯ ù…Cp‡µ§e§3`QTz™,€ÃS° ¸Ãøq>:̽®A…Áªˆ¥ı”8ÁmA’0j““|ˆ¾c¿ŒXƒœÏåÀÚq_®«€7WhPÍH[}TBöõq"À‚S¹ñúñSè;3 ´j¦|5+BAüaMløù¥ñl÷Ïê ¬K¨IÓ+ÁЇCÖj씿ù(DUSĞÏÃ|¶A¡îŸílH>ƒIöuãP÷)»+QLµò±©½ ¥ĞGÀ”¿µÃ<®ÌBŠëŠ×i¥FœµaĞa†Y¿ƒÁ6åìo›Ş¬¥N¸+[·`ïğ›Î«X Ãçr Ë%á⪊ÚYô5ŒO£XÂj¢Fğîr®Î©» " W¬ešg!pÓŞÑm!.a ˹ˆz»Ù­Š(ÚdÁ®àÁ{~ş µI£Ñzíz]ÛĞ_0×8èá°Ä2{…ÊÓöÄœÙİ8º˜™Ót[)Ò¡›öıÇY($W½ğşÖ®‡Û¸»m¿çiñ— mÄM¹ìçÙr|€©Pƒ²nÜ{wo8ôV» X¶£Näı ¢v¹¯7CscxúşŒC2©pbÌcºE×€)n®`jÒ‘5İö¡ö°ŠÒ's(¹%µëßzú·SúQãßpÚõªwx ÌìhʽBÑÏ-Ç}'_ !‘Ÿ™!QSF‘])b°Á†oŒqW íxyóäO4¼vf endstream endobj 1136 0 obj << /Length 1831 /Filter /FlateDecode >> stream xÚµXKÛ6¾çW¸Èae bÄ7ÕC¶iŠöPÅŞÒ´½jK†$g³ÿ¾C%ëeï¢h»’Æœ'g¾2Ùc1»Bw´Üá‡{y@r ÖUÛ5ç¼³έ‡°ÌCÊëÚÉß±BãÆ›wÏ'»43ÕD%Ç1Ë›•íšú,^Õ3­å³ÚYª\ MQ©î•¢“çÆ¹Íyt¿÷/"z´•mÂ<µ}®\àºì+şX¶¯Â­¸×u¾&Áñ‰ğ)ø*'§ÄğÁà.{\ >'F©~ÍçU1ÁƒÈI#WÙq5¾JWÃÖ,*sE²„–D{ɹ“ÛçNİ ‚X% pSaàíºŒÎY/†2ª 95M©f¦ïûW”ކ¬»ê]²„’—Ü+ Ï+ñÿlÛö®ø•¢é çÓEC Ôè‚×wU¨b$|íw{„¼†ª§¡™„r–.%|rìøÅ÷û²Åœ÷ã€F”€Ïn*d6J¸r(¬3·*İ,1«Œ9Œ‚İlªXõŒe÷ÆoäíØ#N¡ŞÔì Úİ2+æ}Љyº/-3×,»‘D·Kà}È®b(/9><Ö*^ÍÍHÿjߢ„ÓaÑwk¸€ãÙµ_ ™ƒ{×ê¾iÈn”µÜ—ìp^+”¥Ó—bSÊ¥2_̓ß?ÿïàM‚Æy3B\ø4ŸÍÿ¡uòÁy ä)4„™×D‰½>JÖ\‹ä0÷êo›9k@º_lײˆŠ„PµŒÏ¬Á™Œ 9ÃÑ­ÖÑm°’”` Òve³*ÂÙ { ÓQø¹ìZ{ؽì q–ãr4ËÁÏçÖö‚j¤´AV^îƒ\pjJuz´İ¾ö¢ l0ÁèÅXĞZĞ%Œé‡ábFV‚ Œ^`éç9(.beŒ–j+§+ÃG~aGB·Ïº°"Ïí© Ë¿l%ø [¾w—õ¶?ª*¢ä² 8pvÇbM£§=‚5s“X fM ]â깊5ß=,$ƒ3¾0¹ŒÃ ]>šq¼vÔ}‚sf™3R1î­±0ßVí*ˆq¾íVÆe8x¨¡¸wáÜÉA‰63ô· gŸ>Î4©ñ@ªp™à^&-Ù“\ò®ÍMšP3@øÛݪiä±i^ıâ¯1šçn—`‡=´z© ÆOøkÓ1€S·QuaÁtkQ?„»)º÷pÈ/f gÎ;Â8-9ô|3÷ìóÎÕ¸4¡Æ%ˆ¦(b¤zq¼nş]ĞÆİ)|&…ǵDÖp惼~²+T|’³^ B¼•>äq›†ÑRP‚Ms¬„ZϪ¯xÅ ° „6›'›[‡QìZ%Lšµ©9lB»‘|´ùN¬G§(8$ï`Ğè*ûë4¼A¾Á®:@Q ':»q8f]î|ÚÃZÃİí(·Ôi‡4îJ/È4ly<êÑq<•]àí³ ªB¦2úm·ÒU-OÓS?QFL¶¤Wu‡/ް(¾[Ë%FXª^9æ ‡]=Ò I{<˜D¬o}Ü'Í‘_8PCş_ç’éѾ(Ûü£Ym ‘I:wg’9ã¤n8åÈù\âwK”Âİχ[öLOà‚¨Ë¶³ÍX]·„¬…96ñ ?špñXƒ¸8n-æDA´^ú»„ 6ºªğåÄ#@è¨[o«1Kaûøl6ùpİ_!‰¸4˜v_Ÿ*æC?h¹SƒPn K$tC@Ùס[Ò]nÎöc÷p÷e‡-íåôÀäŞ}Ä@Îu[¬õ 1™Áè«‚¦‡œ=uHZ $6î´Ÿc .b²ê—û7ÿÃç[ endstream endobj 1141 0 obj << /Length 2384 /Filter /FlateDecode >> stream xÚ­]oã6ò}…‹{¨ ¬XñC”´}(®¸nÃáP,òÖpŠÄÄêÊ’O’“Í¿¿)K6d·y°E‘Ãáp¾g”lî7Éæ×w‰{ş|óî‡ù¦`…zss·á‰f¹.6:Í˜éæ¦Şü f:ݸU¢£iÔ6ãD»~44Y•Í5#M”ô:>í·"n·1ü÷-ÛÆZóèfghy0U?Ô´ã±i[šEè,r ‡¡éÅdjG†;aòH¶)̶G³ıÏÍ?ár1ç¬HW7À½RJÀ ˜î‡"]Ü>ULÁ¥ÚT7cÕÂİ‚\²Iq¦ á›iG˜«ãĞ>áPE·Ã–GeµydFZ=‚¦'SÖÙßѤ½ ÁË–Öˆd0ˆ…î¿3c32{Ç8çŒçr}ÓÛ\Fı@ˆÌ—rh-Gf‘û'\}y£˜+V(ÏŒÉ$#d$iR›»¦31É(@L*Òè`ÉÂÑ;DŠx”æk‚Ççµa¿Ğã fyHPˆê§Ğ¢q›?£–á`4S /ß]C†{Üz@(¹–f<Ó½¸{mşH¸ê@v¤'Ë R°Lj/~{» ¤B1¡s3õ(íLÀÊÙZÎU°ÕÔï‡åÓ‰š+êÈ –Èù¬²«hFÙŒ¦¾†&{d«Ğ•Ç~CÔf ËÕL­—PÀ‚4“J_;˪·œ‰l-Rt(\DûŞ:‡ºA`[¬$¿rñL°D̶:+ØšhÁWWÇcN.^ìÑ<‘©›ªœÜìÚÎ;Ê:óHƒÉ:™Ãº}Ş4ş4Õ„®0+œ+\íšÙÀ°LY¬ùĞL£ißhFò]¹7!hÍD:3`¶Ö3uÕŒŸ€XˆŒ³oü-Œt^ÍHçöJ"o*ï/İ órŞ»7İı™/´ü´^òÄ4ïÿx’³¼8ÓŸŸP °ß»òØN¨Z»0¡'X?áCFš)¡×2dı\çŒCŒt×üpµ $<ıú]H4—¼\á +÷@÷$ü$±8ÓÒ)ÒåEö6„@˜âQo•«&vTeG+Ëà ÄlzšNØ»dsµ—%Š,¨sy>{¤u y&®r¸´(æ}^¹rPÍ\;÷­¯…®Ó±¯ŒZm¹¿­K‚Æ÷ƒöõ¿ö}€ïmóaiG õraù{e(¢œÈæåq4Μ¼… f=§qR6¦²Ù¹­²#T„ÉIS¦…Z{i¹Ô-¤$h$ b‰Ö/ÙÉHøÊHVPBZ–+ùz“¹<3@¸Hϼí?VŠ„ ßµ—K–p¾dôîªé;§ÇɆoTb|úõİæ÷Xò"ÊYÆôJÕi7ÜTòœláæp„/΋º Ì@a¥2ô-Mìz|$("~tSdövëØ:8!1.9%-£)ÎiïË{3zæeB!b)” îÀ9ˆë_ı"ôcÜš$1Ã|s Û{ÀsAéš¿˜ŞåLæ¡ÿäàb™ G< Ìx÷‹ŒÙŞÈUÙ!(𾙚‡­KlR“5…šä¹šl6軲íïû£[³¤Â0€@0ss1)YûÌ_舱ˆb.tp¼Ã FÂjy¹¶Îì*Ó㮩peGSGĞõà †%§<Ô¹ ‹ˆ«k7|ÛS¥dôï~ –NÓ®`¡Òº‘RÁ‚XŒÊÈ*SÁ>Şã >îUS¶íS0–‚Š$³oric e„’4•³3²G$Pf™òó8ÓCÏK$¶¼…京bÙ ÏÑêÌÙ[ µº]›± ]ˆ+]ÙŠœ'yÿ8;ãÓNŸ„•õCAv´u_MJ1—V‹3oˆwäN)²:Ş9<޽:¯"¬àJ[p䳇3ÆBPÌŠ5c6%|÷-íÊ»BZ Yù]ÌS&aÉy9íZbGK—¸/?{W(ÁììTÀİÓ$‰|]^‡I¦ò¥¿å Uœnø]àL'Ϫm ¢Ã¿ ÿ ¿C¯Ÿe —Xͤç)ÄW2æ*O ¬¥ÅL1ÃòL—§’*Ï”cùK â Íü/1ˆGuü`Qè Ÿç¸p )ŞÊO~#¯~ 1+[æ×4G¨ò7Öœ[Ëû×Zş”İó¬HR–ŸçßÈ ¬İ=ä÷—4f9‰~^x!¡­«7æPÓMöì{ó‚’€Ş&:ÎØÕKæºÕ3_øëù2«éuleoÑÁÜ…"XÊÓÅú&ä‹ËN ÿéË+ø"“ÅÙĞ)ïøzMqŒy6^iδ Ä«³F,øcye}º%’·rï¦l* 3´ㄽ0l[J±¤˜sƒ›ÀÆj ‹ñÙ•^¦)p¢ùR™Ãä ÃLÑÑñDs½k€ åäÛY¹‰µÀ0‹ÅœúcJ*53púa I]ÙÂ…vF/ú¸¾jè¯nš& •gÙåÒSµ.‹S÷¿éªöXã=ñ„É“‚3‘`{)mm‹ |·Íß@ø ]9:ş{×›0•ôıÁPè֘ܨ¯ògÅ©A÷%€¢xAûr–¦ü¼gşwlœÌ©ğ—XÈ.À‹d_ãt2ı,ÕÀÂäDS¦ÛµMÎ*ûUq BŠYš­QÕ©F®FıäK0,F±JEñHûıæZ-º*EA–⬅‹ê# †¬nØ1¨Ò~4-U†#íñé¹°å•° g|Êajªc‹í¥ ü4…\& …íXàaU`K‰œÖ îÉJ+>ëÚ‡ E[9(½şpCE’k Ô÷}ôfšK"lZg™Õ>×ûş;ÁÎqßúŠ8e›Y4•p‚ÅEÍ÷£ë¾Ï_ÿÆ€5á®á +õ’8òí÷yé”p_½KŞ“SÃ:] ÷áSj’Î8‡,ìQ# ›É l³´­G¤«ióa˜[± ‡ê¾' ºïÆò »–ÔºĞÂ#¶í·wÍ×ËÏNʯ¬³îYYó]ÜǰúÛ\Àã‘x8Ñ„ğôû²kğ‹$(#µêuö4²5+…5«òMœ ï[Ç`¥¤İê^À쬻Páruƒ_J ëC·Íg ¢ÒÌ/7ïşèk¬L endstream endobj 1146 0 obj << /Length 1813 /Filter /FlateDecode >> stream xÚİXKsÛ6¾ûW(½„š©øÈ%3i2í1ã[ÒMBÇ©’Tlıûî EP"ÇvÒƒ-òdrG!lØÃ’n³µjU޴Ū?ì^†;rz'$I—êl«–+I)òª*V¸ÒÙ{S^qB•fÌrA g|8ôÆÃ ’ 1œh—’ ÿåø¯9´èfÃ}»ÃjÅiLg‹c$•?ŠØ¬qã¤é(î·¬Ú+6œ¦é5ذ뱹ӈ蕆(«/âÁBN({E<´)|ׂ®PጧˆI(^ÙºÃÖàU]Æ(H(£WÄh]ÎÆ2¤DÒôV °Z² _®Xp€Á„ZwÙÕ‡IAxÄ_[ŞÔ]ßîóï ĞPüÄú TWE/Fáñkã·kGÍGA‹=ÈÖ^¿%±|Sܵª(ó¬ÿYÜÕH±¿µWõà,ÏU×yí0I _Ú‰ zpL!]…ÿjñ¾c}œ’” 8F/ÃqÛ%Âÿ1ï>&.z)D†UQbˆÜnTO€= ×À rD éÅ1ğá4 úÍR?ÇûnŸUæÔiV—»}•õe}ï¥I<Ğ„<%(Õ¾êó™€ë>.Œ>.ŒxP«G30ğûÀMSÈ}ñ ÛYàO O–dÊ SH`ãe½j Ã sØ®¶¦äD[‹ˆ”ÂÕÔãFÕ?âkøÓ€ ¬¸zZ›­~ ¦tØi‹òe Æ‘Yò¬´1}½¤„Šñ:jB³]g•ö6 Öö±ì”l r†µ­]Œ$áó¬`Õ?¯R"ãcEæ ` @0®A1Rœú8.Z¨UkÕª:WfªÀA§ŒËØãvû¾ü† Q–¶5t«w¨]$Ä]çq% Cûä ­\\4daí@Ê][Ã%xÌÁ:¹”!€WÊm€K0=j]ÖcCZ”]^57M\W(Ÿ”}s’æÒi„Åù„öÒÂÂ}1˜Å~ë/GÿHŸ•Í¡)Åy¸‰ç¯ÅÒ=Õ…¯“©>˜îÔä#Hɘ> stream xÚ­ËÛ6ğ¯pN‘€ŠEê•KM-z0ri T‘èXXY2$9»û÷áŒdI¦“-‹9‡óâ<î¾ìÂİo¯B^Ù¿zû!Êv¹È“(Ùí;&"Kò]§"Rñn_íşö>…qX™Cİ?ˆ£Ø~f Šş5azZZó{Òÿgÿ;p:‘»@J‘Ç FåÑ”¦ zSv}Ÿ5wç¢ç{äŠëÌ9¸Çz+ãCÅ<{{vÆoDèÍáÑêâpD¡£”®|˨Ş~XÚ3O@ÄNÚE[ÉÚæ˜\O4ïö¹a+C%pÏÄå²Èk:?ʼG?^И¯øaÚ:÷^iªKoBÇb$›F2:ÎÖF-‘ÈãG©÷à*RpÂ0€{ÏgËÓ¢´×64¤Á¨»¥*ÊÒ !»p'”-õªúğLˆz$‚ËP·_˜í ¢ñåtçÇ?h·n‡±¿”Á䨥cݵ‚ Ÿî¤J'šè”mŠt±!˜N‚ã?Ôm=âi|ÕàÑWÒj ñÆ1"Rd™&{k‰4ò¬p#ŞáÿD‰<&_ìÍÁø|vñOıd¢=±ÉíğÓâT”}Ç›kåTz•ùJİ’Eaã_úÍÚ¿*­İ;~x ^š‚$™uPË\R"0sx͉pp • àÇcm숟!O¿eWĞ‚â>fÛ"ÛË ?oæg£aDm‰WJï'?ĞaìMC›İÁ($J†¢è0§ûµ ½²7ň[ìH«r†âÄtc}b:fE4YÄ"Q]k‘Ôã“õ8˜æ ü ÛïgÎÏV˱x¢oô¤Cì•_>5\µgØF¦'éqoûlUïë\¦u¦œı ñnn`Úé¶âñ2_E±ˆÇíX€¤‰Ôûqä™ ERŒÉ.I×{?Æ'?¸¸ízhc¯–°»>èÇe0Üá(F|PX*&ÜÆ®ÛÊ<9)oíµ-PËÄPf'³,%İ&‹L¨xNBˆe…ZçŠ Ó"Ôéºhíµ ÍpŠß-Pl ¸l¸|J2åG×]Ú‰¦sù=ËD”§³ßÑİkå–kğ¼‹%ßóXG–%=6®ŸéëúÌ©AB‡ô¾¶½=©¢)· Xô®8…®G…éwü±ÉİÛÓ7ƒpZ*=ÇşG?M½è¦àCÕJ29KÆ ­œ€ v¬.Ê£ïaãÄ`”mçTvœdjÊ ZKN[:@¦¶Dô1â[ø,fÚµÜ&DËœ(=fÊ 9ô¦m‹áÊìÖ†Q&…º628«\‡½½’±­À¸²i´*’Œø‰…ØùU*r5æ¯o–•µIÓP$¡Z:ߊB˹7À Y@ê¸P#clZµ˜åq‰Ù¤7úó^yÚø=i®oÇU¨‡"•‹`º_ÎVœSˆšl5pè$çf¾ë1’ŒG<¥„dv3’Ú’dt%XkWÈ2†V/®ë·ãëÏçbB v;¶=„æhÑ^ÑÓìû·ú^ƒğ•A‰0˾Û&Ù ³ìšnš; ¾7<ÛİŸ]/Ãî wwîöI´Kîp´D(úç¦(H> stream xÚ­XKÛ6¾çW¸§Ê@ňIIé¡@¦@¯õ-ÍAkÑk!²dHò&ûï;Š–lyS ¹X|Ì ¿ypfèdó¼I6¾Kü÷÷İ»÷•Ù¢°Ênv‡Ì¤*ßX“ •šÍ®Ú|ŠÎıÖÈÈáOUïñS.nË“Û~Şı’b)Ea<õ îÇ®»C\·ÃX¶Ä䆇<¸—DåI‡®_#¬ÛÊ}[¥Eò™"7|ÿ$&ñTsu ( ¤Dj×TñX>oc+u„§¨Ù)ıÍQ2ÉE&å$çÓƒsÁ©cKÒ¥Z%Š"Ÿx>ƒ’ Ë\ ™yõ,o !Ö¬…Z?Ğ\&BÛiî%Û$ &y)›Ëªæ2y¤ŠL• ™È% O1Q½ÿ8—K#lJŠ|Òlw,i^DeUÕcݵeÃsmğ»½'ÎÛXå‘Û³y+^ußÊıؼ¤H¢Òó|­ÇãŠR €¢r‡ºuqïö]Áñzv÷È -¤¶Á >Š“%R°’Í‹[×|@b  ¾œ\»à#‚36;ŞIXØwà£ş‚÷jbr3§ß)¦Ht1ÿ ‚­EÁƒUy”m7²®*¯Ku{i÷Í¥m½BÄp˜áRÙV< ÛÍ»“{Á˜¹N8 pıĞõ'&v-:GäHÚõ Òídû”q…Q¥tqu N^¶hQıç4=èø{3tüæ×ı]úêCTÑÒF»m,£ãêš r+‚ÇóDÂ*øKRÏÍkİBŞRf:xõ/-š¢¢G‹‹8"ò.° ñj’2™&`Ã&!m v î°;qtBœ—a\3ö›¢nJî&)» W9âa¥w§ Z¸~=šçpLFÇğ¬÷xî‘y¿´¢ÈÕZÆ¿ ır¶ ¤‹­ÛŒ3kş<ø+`d{½Ô{~Ã3Õtk)i‡j<}ï+™2B¦öšÓ}N: Ÿç¤Ø(hô*?ğùTWz ,¤}î@£áØ7äğß‘Äßî wî˾ïò­P¾¤4™Wòpõ’ÏTazZx‹5†`ä9Ş2ÁTPŸšrÿBYB‘L<¾ğ Ì\õ#ó×#xÍ©Œa´óÁ[§Ÿ/ı¹ñî–6ñbRå™uòó©ì»Î›GfÖ3ëÜ ;çYÇš ùŠ"”æ iæW’Ö¦0û,+½ÔóÆÊĬ ı´Ö[@Ì¡ ³ÁQ‘ÃÍ4÷Ú­azqÔˆöî0 ŠÁ[àGd§®´·}‘[±ûöG¢RÿÉd!Üàápù‘x0è˜&ÛH-R ÌÔùMS+¦DŒP² ™0ÑßÚ"¸\İ6•P à‡ÚœÌPoéBálܦР.|ÜpŸÕŠäD³îR+h)‰_úÕN$¡wíåèN¸‘ ‘Øg¢ì?Pá=•¿‡Êßñõ8¨k¥NS‰€ÒFmC¹á†˜Î¦¶HîGµ%‹F_ƒ$:mnÚ°î€Y g˳¦•¢a"È¢¯X´ºş “·%X©l°—Æ)·^$çè¾/%zu9êìÔ×)ß}ÌÍêŞŠl&ÒÄ„Â=9ö°U‡] şjìë°ÏÂö®4knÊàm† †:#Ú8ºö¡¾©§µá•‹yùçv+ú—xg.%xT =†KhY !(ñ“.[F^ª‡ÿ¯Q˜bvö|Y>á–&6„x ú[Tnñ8 áê_¼E³YsIj…H³l©6‡ëƒ É|V›°ö†|ìGaŞÄvÀå,pò?Ì~X{Öåp%t~íı8£ÍŒ¹|‹bÿg¡‹S…È󜙠RÎYşØ½ûÔ²o endstream endobj 1159 0 obj << /Length 1813 /Filter /FlateDecode >> stream xÚÕYKoÛF¾çW¨È…Ê ÷Ée€$@ 'mϾ5=ĞÖJ&"Q.Iå"ÿ½3³$Å¥Vm8H{±–ûüæ›Çά³Åf‘-Ş=Ëúß_.Ÿ½xk+Œ0‹Ëõ‚g†YS,ŒÎ™zq¹Zü™\ŞTí2U¹NVî}ÆUíÚå_—¼x+ôd©¶LX ÛÒšjå§›KVp>Ìèö~Ï«e*lâüGû¥^ÂWW~ößë}ƒ “\ïë¶k×]U/y²ñ­ëÚŸ#P¸á,“v<éËíRóÄ¥u¹s§°TÁr+ï„UúŸK íí6YÀ¸dÏ)ç¬Ğ=Y»m\ë¼U½ÁmxÒİ8ldI‡ı€‡6a/rÆõHãmCÈñϪºÆŸ²‹‰À™ÉôT§^=ëSálƔԘÆu‡¦æ í¢/ë^dÁ™2&9”ɧª»A÷ÁhÒE}ÆB,9šöı4dÅx¿UC¦=^Å/Şr5—\Z¸–ĞspQ9xÏg«·£ÖÄ}2t¹KúCcL Ş=Lx´Êà^’S×ô“Ôà™‚~:‰û¨ó,@V‘g6tçdz°s»+×¼‰]»€‹›Re‰[6FÛ΄íi©¹¢•şl?ûN¦„Ehİ&êUŒ"#™–ê{j:ÌP­¯¯ ¾ñ•|W>•ÛûîÒwÒöÔA)!N£õĞ1IÿZAαÂc<¹ˆæa™kÀ{Å,†v®ÅuÖ—µ: lçöuEÓŞT·Qø có9‚W‘³ ‡„qÔÇäLª:>៽?+}NUa?‰Á÷÷ÚaÑPªøÑ;Më .n,3ùÌù+¿zie–©-ñïpŠ‚.¢_Yq,&©Òí»œŸTï;ß³ïWQ–ÊlŠ–SSJ„ĞL)>·Ñ3ìñbtЦ¬Z×úóàÖ¤Ó PŠ',‰UèÒ×îı’İ)ô¹œÙc%sM$‚ ™<–K¤L¨¯´µĞ_GµZzó-¯O{Ôçi©†[Uı4¢øº×xgé dãó‚‰\MPi!;…¡§1øñ‚ø!ÒôyA\v{Èœ©s_»¨Cv©òS‚&ID,ãù16ìn©«È‡SMâ—úC×½æğ¡Lé™wîÁÍÀ#7Gøx„æ7mCä4æ$Œ\ûá*ˆ¦yD$:“ô>¾ûÄÎOÑèš½½]Ã`Ù.ø)(.ú'LhTŞa' 08Sq ‰7?¹•f÷X`ù`uraxØA©ä¬Àéá Åzÿ^¸» «zß&Ï„€l0ú.ø› «¶_Õ¿¸Ï%n M)¼«üeÔ“ˆá¡«Ç6µ™—ÁÅ&Hd‚3‘åÇDàÌSZª…É· ùÒ·IÆŒ)3‹Ï4JQ?iÏŒOèñQÿüFè Òà®ğZ›Æ¹#æ1jA“Aü 9 ?4=p>ü[bÔn¯8¯vÙ õâM”x2àí}:R?¤Bã›f„­!òÏÉÚ•\î’r|×ÌòÈ6o&ív ô2p|BîîmdÊôk¿AäiìŸI(xªÕ˜5<ÿç×#zXùÕ·‚nÜçë¹Mîï4Ú<ú½á“?è@ŞÏlæıx~>¯LÂ2Ë-½€ ÓúªV\\>ûM5" endstream endobj 1163 0 obj << /Length 2535 /Filter /FlateDecode >> stream xÚÅZK“㸠¾Ï¯p*¹jÌ_z&[›Çd“ªT¥jû¶›ƒÚ¦Ûª¶%$wOÿûêA‰ö̤;ÙK›dƒ$‚ÀPñêa¯şş.v¿¾{÷á“HW\1©±ºÛ¯x³$IW‰N™zu·[ıiÆÅzùĞÑOE{Xodª£®¸?švıŸ»~ø”­r–'"ÁâÕF&Ò„æŞLkÖ¡TT4¶!£S™¦ÜÒèÁ®ˆÃ´â{è$"*ªºY**+Gvpm×\¶İşo™S.„,3àÆrqYÉ™ÌDOÅÖÅUôsÌuÇ·Ë~³Èeõ€+€|‰b"_FX®€+˜ ³^óÈPûT7}«8·ØÊ€²¨h ¸Ò#PğåV1Èí¨ÌÓZ¤‘i^Ü$€fz’‚úOkDÅñâş½‡%ë†Ú¸HÖ/’G(IÕm‹–@‡k¢D±/Ë£…“¤Š~u¼· JÔ}ѹÒ¼8İĞP½§–W˜ÆQŸ ÁG"¸¿tDQPÿט«ªìÜô W¼œPì{˨iˆšÖÅÍëÖÑ‚ÌÚÊÜR¿ä’©DõÇûÇıÒx |4 ®Ç‡O\MH7R€¤]epGœ}ƒ él–Ƕd¿>êòT<šÍ "âÈÛ'IYªt?åN.=eZ±\)϶o2 –háÎøU|·/§ûúx“}ƒ7Ñé·ók®5­[÷¦(\ä ®Ÿo¯ÿ¥,pÍ«‡7–e²æÿK²ễi¾"HÎt–}» ¸(ʰğmi¤b*×o!İlƒÍ&Àd.Y–ç±µfs:ãx]øk6gøQ0:m€±Ã¼^z KƳ)7a-2ÁÅ·+ÑÛ¹CÖvâô¦B1|ñ<;…–§ÓŶ‚\‹˜Å*[8”yLY–ˆ¥2Ï´*íœd:€ Úzü¦í°“Dûú1¨qKµíʺj‰ğX¶ÙQÄXS”AB wMY_ZxÄHVí\ƒN¢ˆÏBb¤šÉAŒ :Z £ğÄ=ac6ı%œMœÌ¢ÿ¥AÎ¥¢Ø¦Ô°•g·`ÔEVGz*0ؽPç~¥:^NHIcõÁT)B èÛëîF¶8p(šbÛ™¦'sÓÜdSTı?lGæÁ¸oNg ë@8舊µXÃ6—Ö¦:ÂsØµÈ ‹c[ÓÅfØğ4€´F¡¡3 K‹'-3pn ,JæÃå/ÚÀ‘ –<\óåܘ¶E³êñˆÌ¢[ãRˆ‹pé=<—İ!´¹` íí½c–‹K Ê…жàŸÀZÛ1ŸØ… àêÊPëÒk¤‡òNp—¥úüôÕİ=(«bºx¸‰Ï†×T[Œµ5àŒãÉ€àîğƒŠ¤ğU43Î÷Á(ô½wÑ;N,Ö8BâDDm<Ñ“kg>dåš%ùDÓËEg¹•?RœeJL Á$0° H±§üp/ù@r¶dHÅèÔ!?š{ŸiÈ›ÎÊ&åè™É´˜#%„ÁŸ×î®ÃÀâTq°°¿p›‡ËÉTxûº~È&YĞhŒó`v? HÈbyİ ³ Ìcv™_æ˜È,o⌥ùoşá6lŠ>V{' 9búöP_;Úxp&ØA!PR—T´¡CC"óùRËŞçófçü~ cÏôàN§b.‡·é²êôc½…í{Bàˆ¯o#wk[àSĞjRk5Ê6¥6ɳcdò«M 81ÍüTa0ÛÙøSÕÕ¦2EW>¹ØŒ£şm‡Jî±5ë„uô}èêç b 1‪ñ¦}ÌDôe½I ¿¶åT Oj„etÍżwÁ$ËğEQ É$K= öØúš¼~\YÂY‘ƒˆË}Š©4ód»µïU¯ìóŞG¦zºOX€3>èÚ‘‹ƒ” C(™: S “ê4ú´Î¤08n¾§óÑ„&t!mİbZåØ[¶°‘cXàœv2¢…`ncÂ{qß^Q-²ÛQ%W,û G•9î÷a…‚TÙJ}(ïËΕTö[Z³íy˜]‰¢ƒ,-ŒÀh^“†YS÷ľ’§j’WVS¬l?ŒYA˜sµ'[ º,ÏŞ8í»î €o똪ۚˆc–ˆ×&{tŞÙ‡<&¨:›ŒlnühB÷YB3ÍßX+tv׺ l PL”ju×U–‚ Ͳ7QYkº÷€34×Wtf׌*I@}é\}7Š'9ƒüÊòÉò\¿*K ,Á£åâ¶k¥»Véâï.cZ½ÍAıÉT]ó²ÁÒ@¨4”3>†éï­a¼Ê´-GdÙ{ú%.y_ûØgœa€//‡¯}¤ûÚçßk‰“tôÅùÒ™Ê>¦|ëW?(_*ÿîIßõ¸„«Ÿóp’ï:ÀÉÎì6g`.À d‡B¨ğW« ,™rDœ,ƒ’„=¢¿İ½û öC)Ä endstream endobj 1167 0 obj << /Length 1793 /Filter /FlateDecode >> stream xÚİÉãDô>_zãH¸º——#ŒÒ}Äé6íØ‘íĞš¿ç½zeÇeWÒ+pH\ëÛëm|u»â«ßñÙ÷û›wןD´ÊXËxu³[ ²4–«X'L*½ºÙ®~ ~ç"Yÿqóóxïú“L'—Ì6ìaÍ÷ù}v}[Ö·aY}xhÚAÀM=E'5Pö*ݰǦàT£ A‡f¤3)F2¾ña‹X`,ak-KÜ„?r(Ò˜ .a X¦ßB*ͱÄrLGOgg€ø$~bÎâ(~%?KVìØK+gY"\M‡šgH“„é${cÍŸµ³PjÍâX€`&àk¾`ÍÓÛ.E±°´Elënʈy_AFGKø¤†m3íïòÎ # ò­°YË$¸ËÛ|Ó­]ÛµÍÉ@=jRhLôwÅ:Œ’$è‡CU[œÅ\퉹eë0Mtğ]M'‹z6»L!ªìåæË:Ô:ø³Øô´Pvô%ş*¬îúˆôØípĞpÃCŞÁŒÛ3·”VH š}ÇRóh-KW£ùìeuIÅR¡êBd¨.CÙ³OôE„sâ&”R°T+—©._Ã…¿ğ¯@™lÍ9q„ƒ îLTŠkmÙ÷EPRC‹ejÊ"Üܽœ·Å®¦ÑI!æ@G@ršZ›7ã/ˆø«G’3­<òÀa*Î=>Tæ8’3%.…œƒN-H•úR41ûWx §ñt¸ Îø D#g^ü„f"ßñ‡9 R¹‚Ö‚eâDzUô'Êñwğ32 SªÑŸEÆ M3ŞGã(Ü’(3<Œ0øÜ¹{HëNÓóª>Á=OãɶìUşÕjgsõºÊ΢y!AgÔÍ_¤é¥E±´ÍÕ€÷lœUhp®}?3ÌVå¾¼Y 5>—˜÷nıá5«ø·Á¿b­e°=¶4ö‡G,IãeğuğCr”±D$nÌüu‰K.9àš¢Š ×=8%t°É« ½›š¾¹ıÆ£c/©4øe²7úSœ ?5_`«417‡rÀ —KŒX <ï §*‹PNÉ¡“CrÎtª/¨|¢™_/ åH(ŠÖ47‚›ékd˜WZ7WAktÜCvbÙä‘U®,Vúr_XÍ·ÅmŞn«¢³‡Mê‡ïäà÷yMYƒÙ²QL65=u2½”L/dl^!°fÇ.yN`,S®GyY¹Õƒøï/CZkYÎP=‰§”$â)F%ŞÔÉ<=x•t‰ò¥âíñª-Ê ¬Š7®ÚSàJê+¼®¾İÛ¶¨û°m<ÄÅ ˜ÌÉ#†H™PoŞ»èϻŠc{ÓúÔB1;B}¿{¤'±XÇo$³MS÷µ‡T±H%ÿ#±¥š©¹3~¶ØvmÑİ…UY>K“L‹øµ¯(„´#·*'åòY/éÖËhñ#Ù9Tê^­ÉxŒ‘8·€ÄãsOéæ+tÖMWüÖ‰m`6£”k¸@­ ¥$ú³b«rVÿ&ï˦F½QÏæ+]p(t!Qh9ó½ïwÁÚ¡åΛ¦2uJvϳ+%‹£ñÜÄP"­ÈP"M^Îz›ğ÷t½Y AÇX/Œ.ùÓÌó9SÌÒSdäܺܒY< 7Ñ`ZKÓ”îÏ.üpóîo³ttj endstream endobj 1171 0 obj << /Length 1584 /Filter /FlateDecode >> stream xÚµÉnã6ô¯ğ ‡ÈňÃ"ĞK L Ó[zj{e%F–Yvš¿ïã"‰’)g2MOÜß¾¯Wxõë öã/÷7Ÿîh¶ÒHK*W÷+"1’R­¤Pˆ2±ºß®şLşÂ?´åq—ÖUS®SAEò›dı÷ıo(%i\®«cç®™UqjÛ²éÒöğ¾½8/õißWzŸîh¤iJ§X?¸{S^"š}öÆ­Aå±â2U+Âã’š')“ˆ#E!î%€ákÀïêSµ]§L‰dS5Ûªy<:0!^%(£şùı®<‚ИÄÉS{X§4KŠr{yºÍjÿT—û²YÃAç¶¶/M¾¯ ·ğˆÜ"o¶~Òz˜HŒ 4’tíš$§¢èP-QÊõy0ÌDèg±Œö·O~öğDp¤”!ʳ¹a¤t—2Ä…ìáV†}¬“Ü EY×nö¼;XyÁô¼2Éë“_yã&+E»›ùÅád%‡^xy]¿¬3fèçL&ŸóÂxçîô4ÚÅ.?:H”îğ”ÖåyMURÖÖÄSOú„Ï€8 ¦ÑíòÎ̸åÌìœåÖÍw ^{Öíüõ‚É k!Cö´é1”nÃ9Œ·s2Ø‹95'*9Wí¡é­ .¯Ÿ¹°¤7)Äğ¨B5{21$3ËøÕ>ÿZ¦Ö"f")àSşúÙŠ,bœàq: €Æ\Ÿ`DÉ`š"ÈÀ™5ç#˜Á—ØO ÄÁè…¿MKÌC@aáÍÀ7¦ìcÄ”~göY/2¯!PIòy¯ËnQù&dúHÆ:;ív§ækD*J">¬÷”Š¡ûØ\¶ ™¡L½—x¯:ÇÄ> #­Xf9Ğ£4‚¸ötà4 aЬ‚K·…àÀÙL–{+´·GŞ•¼o‚¡æޯ–L‹eH ö¿›Ö kJ…F$#Óxûû,|†/„@ î{m ¹½1ùŠ»Ô CS>»É˜Õ`ñ\u»½X‡&PÀ$AÔRƒßå_Õõ“¦êª¼v‹iº´[CjD±² €c:õ.ÎvÊ@@Bè©ïõìGÔ)6Q¦ˆğŞ/<#C2U&™š«ÄgI> ú2 |µ™À:¤3SĨ†ºBÊ\`ªËt„ˆI²%õBİŠÃ,ºTŠAM«« #î-ö0bÙ¬Z°…8øreMWÕ1 p¤8yE šMg>ş %zòÇÑÇÜ(Í ÅÁã³Ã)ï*ذ'ÀŒ¦’‚BÎİöáÔùÉC^zP¹©JıÓˆ7gP´¨>}ÊëZ¿µXäPÆò°Ê{] ‰A͆-F æ¼vu1Ì;·×Ÿ9ß…É¡­«Æ:/¥£±4k•jU—şe/$×|ÀÎÆÔĞ*ùê!6n\d%ÍÔ>â[»Š4S!KT(kšÊpdm9)a'j©Š!M^ p¦ÚÔcs©[ÈF£]^qt®‘d—ñÙRg v0HY$ÓÔà2·m—·6F¸/±˜Í}ÍIÀ§1æ×X‚Ø ­3Ÿ¹ğ—Yy2K>`Ó–%ÕÖÌ ºÍÂX›5'8‰z‰„=©¯ÄL Ák¨…ÊŠò©ópmsÅ04C~ÇtÅ×ÂØnª®ÍÛ·´$öcGU¶®™#Ú์ë3Æzû<º•õÆ}Š…A“ÇiOµP º¯Vƒ?¶u—Ae÷nóğÄ4’ĞËÿ–3A¯&#ÿ4çàfÔ‹{ë Ø8ÄîKàò£'ßo¶ù„‡ '.gq‰º •)'—ʱ´Òë<|¾¼ò+ÕË«çÿL¯|7áïúiòBÙ¸!¿è4úÑT„HB!3”ï¶“u=åP4¸½¶®™Gáîşğ0“oøÿ&¯œo·}-™ŠTHkq‰ıXvügà@¶¥ê`âë’)Œ/ææ52=©`ü#Ğ{õWóš‡L ş›=$"s¨8RSÜ¥ã·h¥Œ/c®ùÖU±àQ{]8âO‘ÿÖ@\‘ËäͲ­ãş) JÍc¯û^§n%hK‹Hw?íC aš¨Ì²,ó½tòâóıÍ¿ëkª† endstream endobj 1176 0 obj << /Length 2572 /Filter /FlateDecode >> stream xÚÅYKä¶¾ï¯hǨ‘V¤¨W1œ ëŒádì,|°sĞ´ØÓ‚ÕR[TÏìşñ©—^İšÙë ‡‘Å"Y¬ÇWEv¸yØ„›ïŞ„òıóİ›·ït¶Éƒ<ÑÉæn¿Q& R¥7Iœ:Š7wåæ'ïç0;ûh;g·~¬cïTô ªùßö_wß¿}§Ìl1?RA”é¯TDzØW̸Ü5THÄñܯàîùsÑ›öÓ)ˆD&Ñ´¡ƒ$6°± ”‘ aíx "ÀÄ÷¶~”Æë»ªyp¼Ä\–Ğ6Ч¾o€_ko×­´ÛÓÖ×™g»¢‡5˜æ]oN:çİÜ+„ú±©> ¥)¹ñcÕ”-²>¹¤ïqÃ麪=ˬSÑGÛƒæQVo®Ê¾®8ácÁÌı¹ÙõUÛuÕãºÏ¿Íd>’ø~•©-ÓXŸ¶O”wv¶»¦âáAf¿®™St[å=œĞU^ƒô«òÙ~üVœDa®Å,Ed¼Ş~ê™R5ü=¶N(»–—H÷g+:ËÎuı,£tŞ^Fœıõl›uÜúƤlG £n’&¢ÉÎL³ù:ĞÖ᪱ ÁÑש'#•HÛ:0VÉD:gš çÄÖ¡kÏhŒ4õ\{”ÙuK ÚµõK4ö4]®*´Ù1o ®ÀÙ"MgÓyréM¡™9"Ï\‰ú¤Fl°«œªkI…ƒ8 §J=:M‰£r×$l÷°·Ê¼wï|•`;÷HæÔ+-wÏMÕ;>÷nf¿§Sµı»;ÜKyì‚|¬íyÀ>n)öy©™{«…ípl²ŒÈ@.¸Ï°ªã_ÏÄ!œ· %1;‘1âDĞLi1 Ì6†Şlcè-LÆ$™5F!´1޸uv#߈0¾âN»ïAœywECê1¬FËÒ;£VÃÚ8ˆöÉÀ©Rt0s…G…iNEÕñt=ÚÔÈu]ûPôë^ !yEy¬œ«îéœóéÑR+á‘#4š–¹ëÖ¹Ú:ÇÔ/ŒWüö Å*ƒ‘}Û óÁe«O•CC1!UäÒƒÒ‚¼D²¾Ûf‘GÓT¼t|`’…§%â=€ˆ¿lYßHœì†]íO±Ga0foW4L)îaÅ‚°›äôGA†®k†H{ñ,ié-ö2vÀ^­ÅÏïöE\Àv1,áœÀq5ÉA®·{C€í01j*”œµÜqv4(\áFm:¬º°ñÏïŞl~"¦$H%,\“q½…Q£=¯V9şKĞâ쯇\ùˆ>k;agû`«m„òmÈD‰¶Xsࢣy)À§î0M“CP·róh‹†­ „cØÚĞEk/l ´™qÌ¥±G®ßÒJÍĞ”"ïªd £p å˜d€ M–ÁL“ïoŒlä ¢*q¹¡"b1IÖc8‘%^ÉflLw@*†u¨¤¸˜ë+p2Şp­ğmãÈF…¬?€äo?üå–ö»e:9ÖAÈA~ #—œ[m½GOÂ!ƒHBXûÙÇp%whÏuÉCSàÔjş`Iwû¦´Š8ãÓ,ÃA=W5Õ±¨¹ãlÏ *à{"ìn»^\ÚÌ ShS 0ˆàñÉ÷pàGP(g*ØÏñ†ì.m'[ÂD„•8ñ.qNÃ:î™İì`ûjǤ‹Ä$A`j“Û=æChÑáRĉ‡Ÿ*¬eFFnR Ë èĞ/P&ÔÔÖã°1Ïs&Œ†:¨aŞŠò•-UÉÄ1[ûXŸ6TãAÂC—€E!k çQ)Œ$isëp¸è'ş•s,’ær¹†ËÛ2Ëëït0°Ñ©¶å¹#á€XìvöÔK#é Í'¹yjDğ‰ûŠ%ãH@ƒLXD $§À³B²p7+©X¢öéP¥õÿšM¢M±ô–¿ }wFØÔ HÅ`—ÅCw‡rà¶–ãBÛ[”\»Cä’arjŒ¢ü‹%ºIBïóؼĞ5:G>¿È"OÑáo¸íI&íΰ¸µê$̃p*OZçKõ°Íø²¨ï.êu ò«Ç"(_L|eÚ•¢3ƒDÊä@s‹ÒçòùH'ø•™³ QjxŒRéŬ…PÔ6ÂÄ1ŠõÍŠZÁÛâh”뱨ÏkÕ:Èò|¶èÚk— ­F]µ²™@‰pÜocUüŸ¢yUJ« ¿p€ÿZÇâëY‘1‹ÀËÒÑ¡>ñw£ %É ‡¡xÌÛ{ÀOÿ Ml¾I&S¿³ú.‘-ÇÄA2,çnÕ‡u¤©ºZô›Nƒ$ÌN¨¥Ë P%‰ ¸wnÖp$Íà\ì¯ûëuáXa:«Úó‚‚l”èEĞÊã/݃B8Bøf5PU “ƒ¿ŞN (úåšÁğò}¤{ªœ ^Ìà/ªy ÿ5'\¨, ¢04=p|ÚÊå.J·èõDÒ|‡ë'¶å„\L+B˜//o´Œ¤Ç…ôÅ“0ƒ§ŠAƒæ¹®'·§>£Q¤q&@jiı[“…!yK{|ïä—gz·{¦š KgÀå+Yá3òݬUUÏè^²&¬_äåXô½•òË(’9†ú—W<¤ñ#ŒÁ…^x%¾İ%ÿıé5LËó@él–|&¶…ÆAÆÿK˜zÛcè|)¶ £¹_ׇ‚“êtÌg#‚«—ܤAšëÿ‹ft˜¶d_¨šO¯+êÈSi¤:½Êg~A¯k\$2Fr›S…@dN mÈ”!rħO¼äó«’hññ‚4=ªñ *ùéĞÕø²†|nõåF®ªgä†u†ˆˆ®dò!êö†Ûò³Y&eÒ¥.şn™ıç· (Œ§WĞ9¬Òv9$ôñBÕWrunÎ$Eı„àÊ? 9–ß×9‡dXğ^äş•‰Šm¹ÆL¾ÿà*_ş4-“ô§ÆÈ ºªùi uµ„Û‚cfÕ}ÿ-˜şz÷æß…àĘ endstream endobj 1181 0 obj << /Length 1819 /Filter /FlateDecode >> stream xÚÅYKsÛ6¾çW(É¡ÒLˆ H€í4™i¦n§—ìLm´YœJ¤KRvüﻋ_$?›^ ÏÅ·»ßîÊáìjÎ~yîµ?]¼zÆå,ei"’ÙÅjÆÁ’d–ÄŠ‰(]ä³?æ†\-şºø­ßöşLèÑìE0áÇaÕM[åUğáò®5ÁY¶UGÀÎx|›ˆ™Pi··ßç–/‰4“ Ğp §ESéC&8ï½öİ(Y*e·ÂI·ˆù¼“pôÈÉÑO5Ó‘€giüĞL:–1MêeAe|›  $KT„P°X§´úbm³"™Ì¯ëj=_š|W›†ï ³É©Û®İÂeU.`]k QóÖ­¬VÔf%µŸÏ©%yØ":šŸ-´œƒ¦F+ÕŞJwGm²Öäø xØDi«ºÚÂ"!ç5´ï`ô%T1UŞDá‚qÙkä¶ØlèŠÚ´»ºôÜJıÛ¢]S@Âélëz.EpjÍöQ%Ó\í½ ±‘*²Ø`‹ØH%úÛp¬ÃÆ~v 5—x 8}İà—õ_>"D ”€¼ƒ©Áï-LöM‘Ğ`¬ÑôM=v‰²ØA3Ȉ_ƒŒôíĞL:“ƒ!‡&ôzã[|îãŠe<2.X×o­ çÆ–YcšwĞWñ<ÏZ'̦j']ã³·Ü´¦Ş%"EÀØïÔ ƒ­ùÚRoI^”›%-)¿¶ÃpWq¹1ìWÁİ©˜ºé3ˆ % –Êã¡F¨ÿ7²"áÀ+ü“—ûÈ+ Y”È}òêÁp‘İ5V”%0\Ñ-µ¼mÇ`ßJe?~ôà–h¦†õƒ¢‚8 OêM‡,U/¬¶Ë^cÕÆª èÊ£30-ı:o#©Ag0Öéìğ<”LÊ>9xÛzhI2°çnE±¢#  €L²új·íH˜ærSV pM²GSùggÊ¥ñ)ܤ½w¼]yàSb€é„[,9İÍO_ƒ`%§ó¹#™KĞ®ı¦•D,‘/mZÊéÓ:yfN×…¼{áÙKwz,Sá7ÈuÜM³0•ŞüNDİj×q!”ÂnY MÓÄ^ø=Ø}šà4 Èʺié½Û–f!cÀ\m¯­OWMÑp]R­| !/ÉŞØÈ<æ®İꉦ³2÷¤ ÉRš˜…I!IRÚ!\Lò0èåÔ·@ë&1¢<F½Ïç ²ÒS[ºƒ°ãä$)‹&ì´ëEèX9cÓOt½å®®MÙ¾lå˜ßp:å/‘b.•ê)Ô\¶Ù˜ËMÆü+îÜüv½+ÿöh^ñqbştê®èì&ÛìŒeÊáÀCïÜPH¾@ÉBÑ xJÿ!ìáÒ;ÎÛŸÛø }:Ô†y7I)ŸÖÓ”fvMêafEU2g‘L§Lc+.ª¿@¥¹¥-ÎâĞy/–!*UÄ—8]”ÀÙ†>r³Êv›ÖÍ4İàPZàwWZ`j >w'UT<˜š¤ğ)Í]Óš-VÙ<±Ö÷ÙGêù—²øŠlf«)ËX0صÄ\²ƒ‡Æá÷XDüîD´»h»†ŠâF†•¡»ş÷¢Ì+ÜrÛ¼óÉídš¤Vο\œšYK d¨Ø¦–¼qµ©%A¦õÛ÷«'¿+³mß‘aƒØr*ş%<¯™” ÒÚ©®+Pï«<ÚÊçƒPp©X=¶R)Õï‚÷Ğc‹…ÌŞê(`áÂ>`MÄ !®F=Áh/õ ‡Ô‡¹sRr$Ay0WöW™ Š™VȘñƒk~¾6ög(Ò! n3Døà"0#! ºp‘ç¼­wË•wh*î_ä*ÁjW.í›}?‰©q`¶TäÆÕ’ÙrišNëÕ¸Ÿ¼µ‹†'}°· “úùT"}üêä<$’ëg ëìÆ8|>  r =»T<{¡ÎÏı™–à‘Mr§Ñ#+şÂ©|Q¶‰+S{® ¸à,{yü¯#ÍZ $¡Ğ‘Qhà–zg¨‡±Y»ò@nêÍåúä–n¯7¦«•3àø:s§fÔ8ÿ$‚tBL’¦Y›¦ª™Ï;5Kõ¸X ÏO(OËèÉå×Ôb†×YÓ˜Æs_²8îû]]€–Äm"è´Ÿ$¦êt æİÓ–½Æ(xMm¦şæ½d»ßÁF<õ¤#SR9â^ȵø¯=èèÒ\ÖÑøåAŞ{`¡¿1ËuEİUå:¨iMÓ«bcŞtoßO¦™tQ^ïhƒ;z8€ QËñ¨#®xÄ}ícl à'¾C±§ü3]ÌY¢9VhLwµP,';~¾xõ/l&„ endstream endobj 1185 0 obj << /Length 1510 /Filter /FlateDecode >> stream xÚ½XKsÛ6¾çW¨½Tš–0H^›6™ôÒÌXšh ¶8¦HIÙI}vˆ"(R’Ç,â±ßî~»0]<,èâã;꾿®ßİ|àÑ‚…D„Š/Ö÷ F‰U²P2"\ÈÅz³øg) ‹Vc\.o«U Ø2[ÁÏ#şè®]ı»şãæC¼HH¢¸Â]è"àŒÄœÙõ·]³Ïº}£­$І!a‚à #ÙVÙãä"!‘`±º©V<^>åİ¢>b™f™nM;\v•[¿ÿ|óé³m·0Æ#Ğ~q-bfî«Æ6òÇ;İàî4;ÂîåÆ6JݨÜ"ˆà$€ I¤Ãé7¨šGá2«v;Ø—y–vyU\Ùƒó…ƒ Â6 n§H$•İî Øı%t¦u€ä •´ªuX¡Ë,ŠŞ)'I¤k~pöC=B’„áÑ+ Ö† Ïé$‰cîÀxí'ôR‰Â^óÕªš.(÷»;lëf·¤ QΘ‚„QÂsH˜TD‰ØwcbáêÃUûkzúQˆ_O+8:ƒVêDØõˆäe§ñÈ«İ<$JA¬ËWB’U«çıÄ÷ğ—c1¯=MˆLŞÈ HWõ¤ú1áT½­)ùKLYïÁİ\t­Ié²ÚwŞàY€§“8|%H€Ğ¶jÁåÓ¹ğo(¢„m×äåÃŒ *%B(ǽ‘ÿsLFÃ%ŠÕÇGÖè´Ã4Òd™ÚO©!]B:0ÖeÌ.õU "¾ütïÄ«)õ¹„”^d<ğ€‡e¯Yî”j÷u]äzc{İV»áom§w6›ñr|2 Í:·:ã6R-+¼6ÒÎ~H‹ÕL`ʨ LöÖ¹a1Ï b¢â~E£¡\(İÁ©ıL¤ğŸœDmfŒÇb×$òıïÌŒn¦´ 8…"%yëû~ñLNõTk¸tàœ£–œO¿ÀHBÑ¢ŸpTÛ:½Ñ.4ıo¶s¿oÀ@ídUYê K‡vJÎ) j„òZüÛÆtİÖJc™“Dxü´ Z¡±­*Ø9øN¸ª€ä¬äkÍ’BQe½bK‰QÄfèÈ*R› 2&¶›¡¨r,e½™•B.ızd¸<”}ĞÈ0TıRͨSÏy·Å””[POÛv±dMH ¥ c/«±€Ç8ÄqS¦y7ÍC<‚xg‘_ Ÿ±¦÷¬yW ¹Æ¯x)ëo…íš0ÆFZ[HtÚLºÔû„C‰ëú8$åS…"FØQ¸_<È06 zFUe2âvV³û‘ü.uÅ6C¶çÊ¿¬¹ä6/õÕuuôº¤mìz9iA2éóºRS‹®ÿ7Ÿğ"2æ±ÿ¹=adÿøÈ‹–5 ­Pûï±+4Zİ<jll?•1A¼4ÿ)™–XΜ»K{Ÿ±h¥ÍÄÙÀׂûwÆû!} ÚÃ>M‘ɯôZ,ë…OƒZÔ5ĞRaŸ›ö–0å¡ GЇI'ˆ¸£1‰G|²Fi®$°eQ˜'÷³M[*„,±« 7­¿¦ÇN»µ’­•Kİè@+ìÇyÇ–²%ö 1 7ïf›´ÀÛş‡t­İÚ¿>ıæ”·nï>˜g#v˜ yŠÌäô}oüDriúù&ÀusˆMŒÆêÀQ­+i¡»ã²#ÇFïôÃßÙM7y[é7»É»4bzèçø­mŒã|¿½°ÓÌ#ÓÌùÎmWêç€:Q€UUûĞ”úkä;HO‘8=/K‹"ÀÌ<¥Å^·çM‘îî6©wäy˜ı´;Cpíy¹3 îôÑjÆ..ÃÕ°/bÇõ½äåå5‡\Ğ/ºp’o¿Ÿ'TeC‡ÿYì$7\pA6oø<ì Ľí'~zÓ7t–Y_q,~QÑ‘÷¼Ây® œr؆êfèWñÍ%§0i÷³ı endstream endobj 1081 0 obj << /Type /ObjStm /N 100 /First 962 /Length 1585 /Filter /FlateDecode >> stream xÚÍYMo7½ëWğØÂ%g†20$1œh ÎÍÈÁ±•Ôh*¶´ÿ¾oh'ÑZ+¯¼ÒÁ°%Ïr‡œ™7Ÿ»A³ .†‚/VŠ/m+ì(‹Éq&#ÈqMF¨mDuI;«Ë!ÛBvYÂ,†JN³SÅ•T\v¥F[ˆ®’m®X Ü–ÀS5 ‡pÀ°&·'@#©lkPòf À—5Ú›¾¸Tj{±£@PÅQ ã‹ä(&¬‰‚€â1EGDíÜ *©q‰#Î&!fG’ÛN!µIÀi©€`bJë¦>iLìÚ„GH*d¶„Wi”8\fĞ„Y€ÇLwlú“-).œfTuÌpVT±”A‰9‰­1ÃY¢0€(skd¬¦¬y˜ ñáMIsª±A? ©­'¦ÖÈ GPær(÷ 2Õ‰´3$9IdúBÉb¨‰ÅHikâ¤ÄvvÔæ]`Ÿ‚9ñ”›æ8< ¦˜Ä%˜ Ğ&‘EdE qla ļW'iš#LR’v®‚*&›²‚8)Ğ$DI*@š B*là`8Ô„fˆªjŠä‚`6¡1'—[XYFd²P3·dh7ˆ~@m7±AšïqfÎ!AN‚tÈ mZ¹DÛŠË\[ˆ* `¸ÒÌh£¡ù­ˆSCTvJÅâKL4;:šuşûg‹År5ëN¿}Zµë߯ͺWËëËùõY@–‡İÛî·îõYl³îıübå΄‚oKê+’R8ùd^âê#1ø^º£#׺îÍòÃÒuÇî—ì¼Z.¼øú«{ñb†_SäØ!ù ﺓ«Õ[3Ňüñ;ÃÉr±j‡3üå #Áï. 6…» ärãö Gtï®—§s(íºwÇ'®û0ÿwå~œ~‹Ã»ó/óY÷’æ‹Õ%±ıfîÍòÛõÅüæ¶–µµ?æ—W篖ÿº†P†SµL~w~İ`Ì·›× ,¼‹=;zş4}ºIeÀ¤¼‡Iºİ¤M‰ä5ƉFëVô‘+wlHä÷İ-±4Øœ[™}pjÜœš6Àù¡÷6pz $Å£Á³=şG€CÇmq¹àÖ­MŸÖ¬¸'÷2„²·^†*ù‚*Œ:ëRjõÈÜLŪÓ`º¸ZÍıûùüæÙñrqşõò9ğùr}ş÷zIÚS) €hõVŠ¥'û£^jÙ®ÔéŸó¯—Ëų7WŸ?CÈóÓÕùêêb£TÖJåZÜ‹›Ÿ55:lò¸6SMM›ÑUı'+ã€âurXÛĞØÂÚfƽºß]1ÍzÁ¤&ªC±·IGJE¥{+{Ù'ï5yŸÙ­M<ËNjÏ÷ãÖf¢+bŸ!gõѲe+‡¤è•d¨f®WÃ-±/CÖªéôàÈŠ¸GVDÙk&êÛw€¬uÀ>İþ2e4 Ö9Ÿƒ<ÀAJ>„tğéO'“¦ÍÄëv8Ò&À42ƒôîq¡¡¥ğpê³ä§“’TÍ{ ªcˆ®3à©Ğ‹Æ±î¼Ûü»†àd8˜6áà0E¶«® ºÓmͶʶ¦×÷¬eª=?\¯·ÿz¾"d`òáú88Ö'>èÀC™ JµH®*c‚F‡gâ–IãÛ§ïÃfıqCÆÆƒDõ¤åX­<êô·[Ü;İ£.2İ£ÂañfïÿĞ´ÇÖ1(±z™èÒtÀrs€“€ÊH´Qb¤…ì:CÂtNTõÎ`KU9È;{­½Gâép$£Ç@L¾êàãÀÖœì½_:t~¦q9épòéܦէۗǦÕ<:­ö8¶“úT†Ñ¬€¥=ËO«êÀˆ‘ëtût¬ƒ÷2:8>cåpû”µ5s~¦Ó¡èÕºk¯Ö²Ñ«õ ½:õöÏ+›¾Oùª·Ùü•u´YgüÄf­córÁŞØJ–ƒ{o²ÇÊ@0k}œÇÖ­-cÁÜc ŠŞÎùé<9–Ş^x8Æz{a½Øÿ$›Î endstream endobj 1191 0 obj << /Length 1910 /Filter /FlateDecode >> stream xÚíYI¯Û6¾çW¸èE"–«D(Š]€^Zï–ä Èô‹-%½Ôÿ¾3$-K~ôK›8A[ô`x¸Ï|œ#º¹ßĞÍÏÏhøÿşîÙW?q½)H‘ñls·ßpʉb›Lå„ µ¹Ûm^$/©¢UÓ&í§ñ0é¡·ã6U\%Ğ£lûêîØ0eŒ*¬ªw8²üá,8.ß0I„Ì8—JF´›TpR°Ü/U„é-lüfû—”ɦîîıò%³p"‡åœùewoÌ6,Ka‘±¾]•yòz›ò<1¾1 f7Ï¿·eÛ–c]•Msô½{Û·zWoêÎÓã骇Ít² ͲÛùmë-KÆÁÓÖ S<'!OÚñ$dr€ÅÖo\™Á3İ»cW¶7-â6 )×»:gÉ0Ú öªÆdDÊšÿÀ,#…È€5·`Ø×Ú# eN(, ó\aìàOz]u…$MvåXzjpçZ8wªÆ `ğsH8¾Ÿºj¬ûn 0‘Ò,ù®iœP)ãšT¯Åš§Ãj¡“Î 0H•¡4%-.„JoË4aœŸæZSõö´³½ŸZÓmá&Fß3¾)•{Tñş°1ßΩ¬)Çs¨6şR&5É[‹Ø–oMjÚÃxLŸf™qJx1_†Ó…Ù ¿ú‰ÉÕQLA9É‹âdÏ,¿Xµb)qÚÿ og›^Ê„ñæ ø"@ –S¼êÎW´U, &;K}]¦ .Xfkøş¶L'AÆ7S÷6Âb® §Ù,¦ŠÒįv䋺µÓaLǺ5¡u íú.­;0Éo_½Š(ç¡_p…•Áşªe3Ål %*kˆÀ±\”£Î姭ͦšF4j.Àüè:øV6§n‡î×Oœı2˜½dÔ»+ñˆ"U‡]½éÑ…$wa¸;ïùT+Âå…eÅÕk-Ÿ‚èCóK? $MepÃ@—Cø_ø”$“ɯôO!xH  %}cßÛ‹áE¨rî/0²¤ş$¯\ ¾Ò>zpUœ½öxEu¼“Úºiê„êvj—C¿èÃ\kÀG‡¹[Á UÇ õû˜ÂBÜò2n<¡;*›ıUí£!h!Äv¾¼¦(á8 ÕùæŠ)gJsPÑÙˆ®ğÂ3 ½™}'à “ï¸-‡P¾/!\?‡VV$`´ÀAŠºW#噚Z§‘áVv~ñ"@ßÕ Lm|cqIü|ã»Ó ŒCğ£€PD&’¡l.‚–Dµ­S‚1G9Yp.ªÂœ3­pbŠ’œÏ—wá 0+š|ãÓ»/÷‘øÃ‘j^ßwM8Òm0ÛˆçD♄l‘²GñS «ñ‰Î9AÃdhFêzÂóİ~tYìrX¤Š®Mı¹ß*–m9-³µy@~O™–‹ÙnĞÃľoš}Û;§÷~bY!ê½¾~:X=+|­şÈX…¥ÃXÚÑE˜HààÿòâéÀzqš,ˆzoì÷ÏØ_=İԾƣ½W» §…KúoÉ:¦Û]ÃXÔLløÍ±aEf–¯íæã°±S÷_Äæ&zÓš¶·GxşoUtî+Ğ!Æ œ¥´ş·@à I8Ïn Êføß¨"ØÌ/¢knGf„ÿÃğY';)‡À­µ^?–î@œ!¤á‚trŒeºòï^üğ4”÷!µğ+dÈáEEb¥"Ÿ§ç>qIŸOFî±—/“)œtpõ£<ÙMUXæ³j˜ ºº|!Ï÷–ÃyZ$×—œ0©N`=©I¢Ô¬íUß¶Xíñ¹>e±»¢ƒ~¤ɵqbu£¶±¨sHüşó³Í 7Ql¥A ûÕÚ½h~Ã3J$ÆòíÖg|RsW´ÁŞ><×"ÊÁ©"IÏjé´Ò‘·¤v|~3^¼ ‘›ü{ŸˆïZäÒKT˜È»œsHş3~Q&œ¬5ݸª¼>â,WäÙ_«9Z~dAh¶òz84å1‚¢Ö$ËŞ[>yqB7VÉ5¡ú‘±_÷_yFrÆn忼diÿ`ìCmŞÅ¼ÈºÎõ9dä\\Ë˸oÊñƒâ×í壜èLÜX¾ÑóYåş5æ`<^c[YÍeå:[(T(ü æ<¸qa`Bç†]³Gz¿šÆ/ªm4OîĞÉz÷ãöéaªUÀŸhÍUĞœ„X ,‘…¸Z·Çpjø4w{a;^¼¶­ş+¶‹O#%~trÛìWk¤ƒ?5Œ‹:ˆÄPÁ BÜlğ˜fç>Ö„`Ìøé VXòGzÓ7Ã%¾¨'@cYO5Kì5…åÖ¡¦ CÇ.WPHƒúD$xo­æüFıtq)~s>èM䌧+Û97¾(ÖÑsîı~„âÅ­üÂ,œ5ÕUù$%ç‚÷§?~ŞÌ­Ïâu}÷”„*oÃ>—ˆ‚\İZľ‚)*~ä §ŸOÅ­•ïS9¤·} {+øoØë<õÇ»g eìF endstream endobj 1195 0 obj << /Length 1709 /Filter /FlateDecode >> stream xÚİXÉnãF½ÏWÎ!`ö°’Í r g¹Æ9%9ĞRÓ"†‹ÀÅŠş>U]M‘”)Ù°gæ‹ÔkuÕ«Áêq¬~ùœıÿtÿáãW«„%‘ˆV÷ÙŠšéH¬¢0fB†«ûíê/ïï€Çëî?İûx'ôä’Á†;û¦ÎòÂøY_mº¼®ü]ŞvH.†Ó×DÀ• W÷Í:ä^ Ï)¸¼M»tí‡AàUiiZw}ú®,§ó3.g¢ù‚ÃùH®|ÎY~1ÙJSÖͱoÍ’€*b"àï¿^@©™€¥/,`—w»´ù_ èoú²/Ò.Z3Y¨å·3JX˜D_EÌÖÙ·ÒãÇ;=K„LXÿÓà‡tôW³hVB²PèM^”œáÈÊÛµ/¥ğºÁô Œ9v©ÎèŸèØÍv¿ö…öÌ&Ïyõ8»*¼²[:\ïq’Åš{GZ:äİÎæİ÷–·•Œs>×ZYÛw¶}aØÚWRywk ¸HÏü›–ûÂÜ.@šHJÌ!ğCz?Òªøf{„|ãòj{sK7v²¬<ÊS¼=¬µº/¶ÄÌZA@sö©™’ÂIê49eåùÃQÄq’fÀá±—Û ¯¾†ÆÜ8àXkrRıò“[q²¡[D_{yFôó޶¤--¶Æ8–;ğ‚Y7+ FIìı–‘¾y¢4g ï  *AªV$j é[·‘v›µˆ½Z›’Î aŸm¬ ä® ÑËİ5H8[4©H#Cv©ªç8úkŸ{ö ííL;y¥æìOy3oL×7Õ‚bÉ”Šp¿£³(¾~Š—ÙÅ}2ˆ?«vv—o–( Æ8}|®é)æ”#\üL4­ß#¬B/mû p,Õ$‘`Zé—BOÀBq:´I+GºhÑn…ôà/ö MRÚİiî¶]öªJYóÃÅ| hQN }›·@ò8ø òI/dÂ"y–(ñŞË1N”5º×…H‘$LÆñª¯ã0DëSq.ÑF‘G\ šGÚJi#ÓÆ‡;ΧÀİÑ˸çˆv»áøÎ|Â2Sßñ3O‰\ªI ¸!›5šMCãÔÚ±²jt±¼¡{/v_à`EÊ!–Ä›Á[¥I+P˜£FùD©…1ÅÖm“³3·RäV }EÓ´1sv3Ø«‹¢Æ°ph?]+À±ˆåë«9ÚmQ,·ˆËêO ‘x]İ¥fH£¨–¾D朙»lfqD×Ñ^³é›6Z“GàrZm-0Ûq´m­‘’OMGÄ`ÌÊWk' Ìó@IÂ7€Ü\ÀEqˆ rŠ 8ï€ Ù€‹¶¸ho°ÂÁ^€4Z{ÚmZå0:ÁओŞÓ™ ]•>¡´z»ô Ë@OJõæÚşrbG1Sà³o»Ş S‹%¦ÔâLâ Y¿&¦m˜.ÉAåãPvà*;,Ú.µéú³;MÕ'ÕÈUDÀV¥Ü@½‘±c¿\S}u<š¾ª\u>AA½HÓZ«wØÅYo?‹1 âóhğ€P»¡Ë 2Ä;Öm´úà’&áBµ¯ş¯òtx^¾ÇÓϺú«¢…äl§Ú+ÒGd7rÙş‘ Bàl|³’Fj”4, RS €YŞÙÎÔ1i,' aâ¬Kª §³ª ˜Gşb»M°¼ÉgŸfÅ2´KÀİŸé¦sgøå‹î;w‚EQŸ"G ‘ãšÄâú½"Ÿ^ô‹÷›Â˜²Eqœ‡kSG€ªeR·éÈ˨ŠÒØ">ÒR»seMÓÓjÓÑĞõä4±Æ ÿİ@±oÉğO{ñè»z쭵™œœÅ4Yº¡6ŒuRiİóa7~™\ ıÔ°—éĞ#ÌÎ(&Æ/y;«=ÕšärˆÔó¬b¶óZó‚)ø¡´Ÿ{βKlM–cŸŠíÅY·ÛeúÙø¦ÜwGÿÔÃÀtĞÁIm=+YÂùó~§ÛõÕç‹Ä‹´|ØNæTHO£µáLˆá½é›ó/m õV®SúÃZDûÉM_}qÖ­·~K„΄x‰™Ê Õ™×`4ô„õ“irsXxéÒ+ÏÚJì&/¡ åRcªÎ¯ûnßwş¼ç%)Îéw1WسÒí†cyå8ª«ÂA> stream xÚ½XKÛ6¾çW¹T."V|Kí©Ú"zÛ[ÚƒbѱPYr%9»ûï;á^¶»Aу-’Í ‡ß¼˜l>m’ͯo’ğüééÍw¿ˆt“±Ì³yÚo¸I˜1vc´eBêÍS±ùı‘èäÔ6û²rqQv§*÷çz×—Mï«¼ßÆZèIâ"ïsš~ƒŸ½Í߃ãoûçÓo 5’eœÿ0|XÖGSW¯4Ğ øĞ  ¨LxõºİñíÀs–éÿDñûÕ]ÜÜF^Uk^,÷Ôıo{™iÿıO®İ¹ºÏ?…š==ûòè.Nâ9ÛhÏu]ÖŸn)”%Z\øv7‚rºCŞºÇ åWy’ÌOm7\1©Œ@HƒJR±T RI3mAIøğ÷|×6° iá š–ÏmÙãnü¤jàÉ£æÔÎs_A[ ¦ÒŒ¿ï]›÷çt*a ’Y^+¼xÆÒL 4­+λNR3!ÔÈ ­$S¹—ŞÕáJ¦th¸^çGWÄkÒ’Œ‘ Œ*×_Ë´” ™xzólyä-s´H½…¼ìş€Hô”[XÏ«¿<.ÀRŠYàGğ0ĵhæÜ@*°rí ¥ç±iÃJçş>»LÃø®É¨;ïğëQ ñÙÂ'®rGW#E^y³ )=ª²ë—ò>o…Ü®oÚ bdF’ò6^y¾ƒ“G‡“Ë %Ѿm4ÊéÕ‰ ÕöÀ\%ФÂz^2°ìáèúrGëkK×±ml¸~,Š$¯†—d¾İ}ôBÜšš…û#áªÆX$¥J |ű û„Å3e+€É&>€á&Ò% 'ÌÜDº´÷‘hIäé FLT¸ëÛó®?·nE€MX–ª»8“騛‡·˜`IÃŒÕ0ȘÍÔ?X4 gôʲTÜ7Rèbà“蔨Ÿ†è^kDaŸ¿Ğ@{½E£ 쌒ÊÇ£ì¾G’1ùÏ ŞqùAƒ£ °S_ˆzà,Kì("‚ÆcøY›—)+|9N3n³sÈ×Ã.î_O~’$Áßûø3øQş± «‹|ä“ɵR"Ñ kD clL™`¨‰àø¡kAaYò¯İVF½Ğº¬ÁÙó V«óš 9סÑâ“"-Ñr©ÊLÕ MbÅYª.È?úãÿâ5v/§Ö¹Ãürÿ4?¬HAëLªB‚İåk,3rLšN[´)©Œ;…q7 )®'S;LS"¥4±dθ´ù¢®Ø[ÎFÈÆ¡ğyÊ[(]…3âÚæ YóÓa˜;"ã8$‘‰èùP’ 0«1P˜¥}]’޵ò`ÌØ°ºRİp&Ò‘ú{õÓA±,Ú5më:ÌYsê» ‘™eVXAí\¢Ö,QÙ¢ ˜IL=4ZLÉ(‚/ÿñ]H%X¼¸]å£M>o}惺MEP»–†Ÿ·ÚD¨QGóî|:m1ûûD !®ø)ä¡FG½ëğ•S„†$®ŞïIb^¹×ÊYiƒ¯üAàrëkpÚ¤*¤¿¾ ØÈR(àÄ2$Uå±óA#£*9î¦X ï×ÊBÎ,¬ÜË+à&B'‰¦fğ¼Ëdü èQ5e´…­±Ü´ö‘0q;J`a•٨ܓ‘¤L·Ù+¨k( ½ËQ&R=QE»3@ŸHèÍBH€V¾XÙŠ6P,=ìˆ:]„¨ Të ºñµ $ïÔÑ•:W}yª‚®£m;6$+¨œFd„M¿÷Ç.£º¡ç„9œyÌá u3¼áâÍ<´Ş­mÖ¤0–_å#=³lV(7l œÑ^àµ> ÊàŞ´_è®ĞûİAèíÖB¤`F©PY Íä Ï 0‹j÷Œ NrY²¡GJná"±ĞQ™¯ÇÖ÷Ô¥fAp‡FjfÍÌ8Ò2%/À0ªåI‡‰• ÀÉV9‚I®§²tÅŒ „}ı¸²ó –æV}“©*ÿ—&"ÆS×±PÙB(Ğf*ÄéßĞY]äxá^ Ä[+‰ Zhh.“7u/òv_®$ø®şr[®¡'¥ÔĞ=¨ÛœAkͽ†?áb%ª?Ò4p0°U+]Šò·4U3@d¼ıñ¼(é^lv<Ó=ϼä5ô²pmŠ×+Ê‹Ş  ›atœWy¤0E¼ÙñgÌøªÇ{ ¼×[+US …ÍCİX:yÍ xs®ıx(Ü`‘<ƒîğpmÚ^¨›ğÌÿ ¾ƒ³ïìñŸSM:ÕF¸XR/ìZ¼÷XiÚÀòjº–(ܾ¬ï¶ú>â-;aªµ…¡N?MCO®ÓÕÏOoş-ú… endstream endobj 1203 0 obj << /Length 2418 /Filter /FlateDecode >> stream xÚµYIsãÆ¾Ï¯à‘L Û½œâ*O*9¦”“íDBCÔ€€Zş}ŞÒX H²\9Hhô‚~ë÷ÊÍ÷Üüã‹\yş|÷å§o:ݼö›»‡R‰0fã]"´q›»ãæ×íoÒÉ¢Íë¬Íw{§İö\Uû2»ä»ßïşµ±‰‰Ùì•ÁÀŸ¢ rqM6-|pÿ”ÕEv_.Ê¢-²3̯9}€¦…ı×öÆ ¯ôí7ÏyË»ûËéí¾:¾N¾Ò}é§ocÆ÷N„$İìµ.µüÕ»SεíÔJH LÑ–&ß9µıï5/8È÷íë# nop©pV÷w{ä6«s“†íNáÔ^m_wjû¼Óɶª /"Gí)ɸ¿½Âì|«—ìPWñëÕCÜȯY݇ë9«Y’Á ´±$=ÓõPÕ—¿¡¼ô¶yZ¶EÃÏy¬‰Ñ¦İ/0 v ± Û°@!Ãè: Ö9ğª+~ä©ç¨«#/î*ãZ ¯Ê¸‚œãóR±óŸ&<%Sıöàrò- 5™j²=åGP´3$c¼§«ÌW[1+²tÜWøïø:‘Ƨb„’@P½(ÉM£öœ²jyp\^ÒC&ô‡Ïtõ(¤Îğ!>í}g…ŸDØÄÍã%,#gr|Oç6•ډÆ$òÔ¶ï´ ûXq-%¥°f{Ó ¿$­r“ ™Ä€ƒ§¢)(WÀÔN¹p£OE:ÀîGPÖ‹t†&÷×v€“Û›ŒV›UØx ƒ·c.)êY åèó.°fêò+I‰^'ïôç‰i/ñŒ°Ø¦kƒŒ´ÿ£²_QCÊÄ|ÂE¯ÊŠós…ª¡4‚矋öÔï9-¥,€â,æu¹ê ”9öúB³…,ç?å¹è’/ôğ¸_¸,Ñ" ÚÆlóæå„jŒ”²‹ÙÁP¸×9eˆTOa=\H! ï*«rO©óõnbXá-'´ B傯QÆ‘ÜàJ‡Z¤ÆNÓ½eÈÑ æÑûu¢¶×²‰İ¡@Õ#Îã\3t¼›ü ¦ÊE‘ *c?i B˵ İÄ}*C¤M„ n*Ô:o¯uI¥D-®Ø°sfÛUİtÃÓëôZ>¥ÀL!wÿC¹¢gQğå)i¨/?½õ1 òaH¸Dbª• !ØÏû)X"öÁÎâíİ áÚ,)È‘áÏáØ…oi‰ê¼ïÕ%V!í¨şÊoÖò¸ÚíŠÆKy Y;ãc¬¦¦K]Á5’YægŒë>İiVÆ8s,º¹²é::WÁ`çCï=°5ëeÅk‘œâª$ÒŸ,…í 3Ÿ–¶„(ߟ¾Ä¤%¦Y˜´û%_‰ÙD/qÌõIQ¤®;c€vÛZyó5§ø‚½‚‡®W0tŒÆeDñ½„0|d}(mqVIĞ‚ç$³Ygo…MÕGĞY2ǿ▛¾óã^àü³ˆ?ê§/üzÒğn Œ¿^¸%ÙC 6é 8¢)şáˆ22•.w¬±¿ãoÒ°'ş 릪 !L;YŠü‚¯?×ÙããbaáÔ¬Öz]ÒKíşT«Y7tn©ª‚‹±Fl޺Ê`;pòf§ûgI dŒé$-}?ó™›H|óğ{¿ı~ ¢ıÿã´]ˆÓ#Ö'œCÆ I?upÒ46[\˜œøåîËÿNfïµ endstream endobj 1208 0 obj << /Length 2440 /Filter /FlateDecode >> stream xÚÅYK㸾ϯ0ÃÊI‹KR|H2A‚ —ôm3µ¬v++Ë$÷Îì¯OIK”L÷c‹>tK¢¨"«XõÕWeºÙoèæoŸh¸şåşÓ÷Ÿ¹ÙXbW›ûÇ gœXÍ6Jj ¹¹ßm~È!ÿ¡’m¿Üÿc“KßäŒ+ÃkxGñ߃8‰c”K¹yÃXuş\öMùĞÖÛ\Qš5]36e £í¹âı0&‰é´TØãŒP¹ÚÉb£‚#[­Ê¶ÍjÆ'¿è°Í%—îM[våü|‘u¥” Šê¥ä‡­dÙÿí¾åõ×S·õ04Ç.¡–Ò¤0ìZ+­aÏ–è"HºÂïŠ";õõ®v›¯w8"²a– ïÇ-7N.\ğ q¬ìë?â ““ÿ™‰øôˆµàœjÕd½úda¼‹]¶Í0ş>aôB‘bY·#z;:ºÉÚfË 6p抯}ai ÎŒ ËK$}ëPó±üú’¦`í‚0i×!ğ ”͇SÓÕ)•Ác´¿ÊÌh"ı`•óê[ÕÖùP>&µW'\ÛÕÏ¥•Ù± ’Ƨs÷cè1”½lÅÌû“<×ÕxìS6°q.’&x®·’gøa k(`zÅ ¬$’ŒÆÃØ7İşãGpìİ>¡°´®ú5…à üU ÿRT«ç. kI¥-nè[öcZW3í5‰ìv á¹Ño•1Œõ)WÑf!_¾Ü0»äĞćøÙC3ïL&M S¸ñfk5?'é–"²‰ü¿8 ¹ÓÈ1VÓÎïõQ÷M~B(:ö= Âå.÷¤È‘·jß{ü"i%¨D_Ë_`KFÙGAW]Ş ]'§oÊ xŸKàq¶¾+Ç2enˆd¯!‡ä/ox€R‘\ÇíóÖpvÀó,ËZÀ×ÈËÆá‡löŒ"\‚‘•€(n¶Cqøb?øç¹%ŞÔm}@!µ_ß>o¥Ê¦Gšğ݃#™€AîxÄ+å çªrò€[ûı„BE+Äò@qí°îàyíñ10Ú õE ^õ~dVòÎøbş¦ÂOe_VcİÁ üR°OkÄmnÚ'J›¥­ÇkˆVÓÁ]ÑÂQÑbrI·¶àõF&›ã Ø\Î6Ç´¹à…³¹6Çg´9¾ò góÈŞnìT6=/ÿÔt¡l’DÈUaåÅP(*P ¼•îp(¼“Å9o# ›@ºVÊ\ıç ¼q‰ Ö9wøÌé‹ûÀep=ç˜ :z‰w¨Ï]0Éyôs±ŠnŒ«o‚ä‰v^‚K-W•kÄH(o +&f‹õ2,ÌdÖıµì÷çȉİ;(¸™g{;ÂMõ&æØ¸/Î刨{ãLOm>ÖNşñPVıeÍñ²×'ìq¡Î¹BAX5X:úÊœ§9„hSv+•xì܉cÓ„OşïBàjºjeˆB4¸¯Ü@&˜}5Àµ˜éX<«€3¤ËØÂe/˜¢³ñ‚1–9,%rŒeÎ4ÇFˆ+|*>EX3âq^ŠòSlÛ\q­p˜n˜ºAIæÈ)±sçâîVS‰E]¥´0ı<ëoóşx÷†×íİğy7®ÇÄSÒ$Qö½›rÒ!wi©¿bÚ±¸œY¨µÅ¥+©éªöa+³è Z) 6 ,ô—dR*À„“ʲ¯[äpÓ/H­iÒkjIŒyY) _Î…ls ´àş)h²Û2¿ü#‚ì¹S­ È4Q_¬j#—@ÒÙr9³ˆ°²4ÀÂä·vǹ¥À,†±‚h®ûCÓ•cíÇ›ÇËû”ó€/òWR]îÅíÑæÉ{tÔbZMcØ÷— ~è²Æ±‰MÎğ/Ğ^ğìÏ »Dèi£Ô‹†t›xòOãS™:YB˜w¨ø§„€0‰KBpËwœ±b·°TK˜Ò‘0¯:Œb2&ë‰ø†\¤ÅjÿKÂÏæ ¹—ê,¶[±šñ·µ£‘ğúÑ)Ü\ 02tpUFŸ(6N©¿–‡S[ß%á ‚óDßÀPã/48:æ?½â9»Õú r® ¦pè¾CŒY‚Ñ!‰ÕU zû M˜Şì}b†Ƹçpş[Ìb×ÇDZô/»d'¦&Óû‹¿\¸uÊdJ.få¯0 ÙâF5ğ+ø ³aRÌ6åşÉlÈ ÂÄáÇætÉö†„û™¤ÌÁÙkÁ¨æŞd±@82a!ßÁ¤š_Ô9Yçڙʹ‚ĞâB‹˜ÛàÀºşÀQp]ğ$xv< ®¥—ıƒ!Áµ¯O}=„\” ~ºOd›À_©ÕïRëBܵËmwƒI¦B¨@¬ñüÚ‚И*p]dıñ€"uÖÖ%Jw-\G?¢³¡ÙwCW¥W‡`B³¿§öÁ°µõë§ÓÊXŒ[¸^d®°½&¬p¥‚gâà*JZÈõÏn¹·X!¤;¡²“/‡f IÍ¿P«FÛx\ïkWK ºî•÷²ôXñi3ø7“ŸÎìüs•yK‘«™>Gºòˆ´ı°?7Q’üÁÅ®pe.nğÀˆÉCÒ”è7œ‘³˜×¼÷ĞŒc½K¥I 5¯Å$€»š½@ )ˆŸúãyY¸ÂĞt{oßÂɺ vôç3  Ò2u³±â3ÙêЬ˜ÒeÜ\piÑe̘]üĞhC{ÆN•“ÿ±Ó ©¦/@Û¹vş]ª”¤˜ ì3ÂşVüÔŞH*Ú’‚Ï+<&H=À6Y“Ì«…ÿi¢dßĞ 3ÆÆ]Ù‘qiàC+´ŞbeQ{ÏÇñ~š;b>øì )q¬<Ú¦š°ÖÏNäw rn/ZÀ¡?õÔBK›İèoÙEÂ5âB 7Θdê°jöÃ5sêkb†MoˆâK àá³£â¤àÁßıôTwÉ_,Egš•îƒóTøºÉ§îF><û.,>7h4k̆=æÇG—ÛÚÀJX¨ÿ­+ße›: €xÊ‘aìõz”Š.&ıõşÓÿûÕ”­ endstream endobj 1212 0 obj << /Length 1868 /Filter /FlateDecode >> stream xÚÅËnÜ6ğ¯X (ª ,FI=zhqĞz‰Òè×+X+môpâ¿ï ‡ÔJ»ò#.Plq‡œá¼g8Ñêf­>¾‰Ü÷÷«7ï/³UÎò$NVWÛ9˸X%*e±P««bõ9¸\g"hÚu§y á“EA×·Fï/àG΃~gÖ_®ş|« ­4R)Üc‰ÚµâAƒÿ6øÏà¿bh8ì)#R°4¹×·ë8 LG—ã}v±ÚÖԸՠнcğn­’@Wƒ;©ª®íͰGÔÔ¢"¤.UÈ…b*–°à,WN­é‡¶""–€7~à à2e/ë. ˆCÜ©Í÷şä ıl¶øÇ“ù:˜zã~!7´ğt¾Ñ‚$tIB¶¥äÁ[ÇYt7“€(á)”3ÛTóJ0{ſݛ†ƒi2>šfZ´tI {hÍ]Ù Meö£pÛ*Nw'H•îz55I$gé|×ûCe.¡Ñı÷D†P%LñUG,$1úO¤¢ªìúwëP…LÕÓb"¶ù¹¬!˜LˆRyÊ{§÷†@º{{¢3ö(¨NDîÂ_iï¥,Û™Ö,;ÎXÖİtF8IX”)¶|–¤a&™‰*&–ĞûëB“8Ş2^Q?S÷ÅCåöˆPUõÛQA#.\”Ç79âŞÙğ$„ŸË›ºiMA¿ŞnGäèüÎ)şŞèöäÖãVq²5ısÊOWtAlµ#!ÛJÔNÆb•Ñ¥ ÂÉ50”>İ×›µàÁ®mjЍT™¢;· ë;ZSpFq0te}CKrÛHL3‚1,ï˜&m¢EXaºM[^¬ ˜¦Ÿ ¿Ãüi0çE™ÍT°_5´pdM»/kİIèXÒ6)ÜÓf;3€3\Ù#–LUPHğuXcá€U½Æ2 ã€ËnÜÙÕÔ¦“, ®Ö™´[â¹ê@û…éͦ'èõpã°ÊŞ}¹¡3Û¡"XßĞw§Qü;[™<›N£ Ît¦_…Lã=…±ÌÛÏ­Ûlh«3†èşvÕŸÔ ›"á»§¦UguãİÄ‚Œ­(xºö—w¥/¼¬¥û²©Qc"Å,‘ú’8»Ò–Ô<8 -IÕt† ½Í6véufÓ qÌ™€XiÓ;¢Å>QÂ6ºªĞíiŒ ~Œ‰)‰-1{n"*ÈĞ­[”…«J%'Õ¸ò¢l)êh…!m#IÌ#€¬¯°BmÌ¡w¤È²Dì`=Œ\Ô¥m­ñğ\³Ä¹‹=ç^·œ"¬oné«ÉEmà¥xΓÇtX×>꘤Ñl’e¦¾L'k‡Ş5{ë[ô«AS/Eî9I1kq°) ZÔ«ü­mÈ¢0Æòo"ͼİcõ•S÷µeD²\b³(v…ğÓ$(Rï iGùøóéNl­}Òc"+-°SÖ´Ñ´…i1B³²mQ=­Ì¶§sÖ«àÛ–7;ëpölìTŠ„¶„¢]ÿéÙ¸Á4©¢V|2µ-(`´-¶"ª›:\0†81FİĞñíĞZ“Zà1)¥Ám )×–jÉ„¶W;Óõ1êÜU³ˆ:'şà¨1~™5ï/¹œu61h„ÛÇeìk4OOfˆ]ù¦Åw?-Ñt¬5‘p>åÌ™8ˆÌY–¹‰T2Çøpõæ_µ- endstream endobj 1216 0 obj << /Length 1232 /Filter /FlateDecode >> stream xÚ­WK“ã4¾ï¯pÕÆ¬•ä÷R°Ë.U RÅá ±•‰XG¶¼Cøõ¨Õ²cgœ†â’ÜR?Ôıõ'…÷ ¾AıøíöÅ«÷¼JRf< ¶»€3NÊœYš§Á¶~ oiJá·W¦ßD)OÃ/bãoóûö‡ Љ DŒ‘2)«ªÁüØÉZUÂHÉÆLúœ’’³ÇêU«½_…2iÑ¥Âb-ºf²“e×Ë¥¹QíÕûyJ&v¤%šø±İD¼ÛJßo¢8Ã]ÛáÄì%L’PézÃBûÁ¿p©İá(4²q«©7Ö˜¹Ø„VÕAMEÇ‹ÊQ K’ó!q¸«Å9õ‡SæP0ÕaJ£$É|ª²YñŒì¦r5m{t›“œĞ<~œXç×:ùl*/N¼ïÉYjáµZêAº¾Øt‰±+ŠnCIJ‚ÒğKTÔ-½ğ ÉØÿ Pµá,oªy‹\AWÂH‘Ĉ®ÂÃëg)ê Y­–#´|f¬åNiy>dg=DÍ$:¶Yâ`%ÅÏ‚ÒÇa¬fuö„3Bµİ¢¾tİì{‚{şEiÁÊWoñ¼¼eq¢åäâI"G_÷¦sÅ9çrÆ%.ĞÕ]@cÕDoÕŠ§¹l~B=4Í› +Ÿ<’lwQ{÷‡¬Ìµ\t“Ï~_Ki¹ÎMZËN5òZ=Ÿ›Åg4–E¥ú&*FV.]õ(SGÃ-eIc,JÒ2üuSġąJèƒÚƒeô8[b ‹¶cEL(·'v1x&{oœŒÌá­]ê¼1DÊ뵈Ew?œ_ó Í\š†{…€ÃOgáQô½—`AØÉ~hì£?Ê2<è ’('|‚‰Có#(ñÄNÇ-³D ¿{izt§}ˆ¢®$Y4 –¢Œ’Øş´¥"EQ ½Œ/6½Û¾øØ¦ü endstream endobj 1220 0 obj << /Length 1104 /Filter /FlateDecode >> stream xÚ­VK¤6¾Ï¯@ŠF¡£Å 6ÏS¤H»QrMß²90{‰‚éÙ™üúT¹ ˜GwÏ&{@.õvù+ûγã;¿>øfıeÿğñsêd,‹yììNàÇ,3'ÆEäì çO7ï/gYïxêöŠí¼„ w’»¿ö¿üÌmõ$fQ”i­§ú¼—ŞKŞ)µ%# “Aò,ûS³óÀA±óB»¥¢µÍ•’†—ÓR•ª'ª9ÒZçgiä¿ÊÆy2Û²ªˆzÒÖuÌÁ S –E&K’h.5º‰Û7f…L51–xjS&u•üû"ëƒÄ*E±®’øâaW´±²ıœX¸Ç¦#ıÑ™êek~–º|PªY¸Ce÷I ª RXdCme'¨µ[d ⿼Şî/°ê“&òeyç]™?Uše#òßjt¶‹¢ìËÆìÀz'‰ÄÃ×´ØlCëp¨ÖƤg ™ô|·–¯=Q²’C?ƒªeÉçøa+’bpIGùF<ùÚvR)ÊK„î ˆ§‹ô¨X‘NƒGŒû\­ ’œ[1 ‚D/»sYç}Y?_³IEB–…!Ιï'ø~-¤nÈ¡ü`*°yÓd¼Îxì?­o2ÏX˜ğAˆšu˜a]†¨ƳÈñ¸ÏAª_üÈ/䱬¥§Şê>İy&·N,ŒƒùY I{İ¥ÂVGÃ=ĞÎÂ!³—-H7âG®Ig´†?¨•pwn:‰¶F{àæÚÚ¤ğÃñŠ¢·­¹Œc‘‹Î´Ï»ŞC!mì{Di{Fo£sËÑäìf.ñ\d{?‹!„Ñx°4äóè_òê"§@«¦i½§ï$n¡§òʃ;5(b|]‚òhÕïRU?OM8 ú6ã‹¶İl†NE.Ê»Y‡1ËåèVL¤aÏÏIÛ)®Ø™j0ËÁÓX9[ÜV›_~˜­ >šò“”LüWgp×Ôå?4½Åˆ¨zPsÀsI|šxÀQ0©pâ… ßA¶ığ&Aàö$ oDÕr0®ç0pÚ®AÏ/ea¬çfà`he:"©†À¡Uµ˜Ì‰˜[ó˜·@}=ÉšTsÆÈ$íœa$¢V5@îì™C.)©nΙ9´ßWÿ½¨úø¿Pµhjùn}üŞ(Úÿ7}œbÿ6ä¹Ù6T¼‡òô—£ÁÆØ—3 ]ê­o-O²Àõ½å1 €„¶b (bAÆèçì|zmáQ¢7‰Üƒ~KÁ³aس) ÓpñÄh@-Ş÷Zwh£Eÿv²¸äz2™ôMKÿˆls|œ±==<®4HgÙY£å5è=4µšÅÑİ€K ¹Üàeö-O¦+¥Y=„¬ÎÏOE>í»y‹ë¤q¿kÚܯùµ)x»Ì[ƒu–(N¨u+Lwo`·q&V‰g#p ½/Ú45Ã,3Oû‡3;è= endstream endobj 1224 0 obj << /Length 1398 /Filter /FlateDecode >> stream xÚÅWKã6 ¾Ï¯öäc%ùÙK¢¢½èè¡Óƒb+‰°~dmy²óïKŠŠí$3E‹Ån3¦$’"?’"­ö«hõó]ä¿?lîE¾*X‘ŠtµÙ­x!X”¬Ò$cB&«Mµú3x’ÈìÖa"G·c]OËÚ ¶øú¯Í¯+±BğUÈ9+’…ìδª&ş~bnùjmçKğïó¼,Uyã¤Hr&sñ†6`\ÈWoÈO:Â÷L¿1©ìZkÚQÏ»µj¶•š×³‹EÌxœz¥éBi×gcÀÜÚ•K–æé­]·fÀÎ@«Ïïh¼Öşğ¸ |˜äLäà,K8]µ9À ’ÇA×Ö¯D™V?G<-náoÀÍ6éĞÌ@TÙ­C‘•—W½>shºû2ëòÄùѵ”07&ŠÂYè™T[½¥©`|æ™`ºÑǬÈÄ™ïØ“¹¥®Æ^÷>) €Q*/Ñß:ÆÎÀŸ, º~óàt0å´,»±®ˆ$Mìø¬±£ÕşÔ´a 2ˆ¬o U¢I(¢?ÁUİß(®:úzH¯+jºÊt™»®±,bYö/K/’3ßé Ò n_sô=¸é²¾mG7ƒµ)¥İ#0N€; `óe¤&Fmk}O[Êk1Ş~—].2œ'`Xrép©’”ÁvtWÅ`€¥Ò!ƒ½nu¯jæÈVÑΊà´Bà<õÆZ2`oºÁºr†ƒ-&í+íÿV;”`÷é`^ğ@“;ש…‰äĞ$Ãç ƒ¯vuWpüôûã/DIÁ¦G /b¬*Á’4^>4À8Ò¤déë"€O%ú5%]ãåâüÌVÖcåòwêr<¾ Çâƒ×,»b_)yN{ÃL6švн½´\ºùìó{¦„¤ÓC&Å—ÛsĞ기æİó(ø4˜´$0B0NŸK\õz?ÖÊË”]s„®sá†+§˜ó`hteTv»PÒÆ‘2³³‰é»ë‘áP«ßúF÷{ıÿeÂqìıíô&aMkd°ıXZ_ÑÄDƒRÍôvï}-©ùé·.¡K_0&`'f›ÏXE43”º®U«»ÑMU©C%ìu­\ëÆëjhønæ¢¸È ”sæ/g½Ô™z=ŸàÖÕ[Ï챇ä/áB|Òôƒ¥n‘fÁ›F«úWZZõ4„¼ÃïliêmAªÒ0âês@aêâAxîB.3Ìş€Z°¹À´ãëá[õç¡`_360jKÁÏ›À>߆ªŞwĞæ <eÀá ×à{1ÚkUãZ ÔÖfİ^ËÔûaá‡ÎëHùˆÎC…;sCE( İEŒœqÍ£ã~¸øQfßÒѵö„(.{L¶‰$ÿÇA¹øAµØa ÍûĞ­¥€¦3}d“Ñ4éB£EÏ  ˆ(‹>¹W•N*‘ÀØb-ZÚ„ ÿ­îwªtÙ. ¿ú r!{‰ŒWœ$àçRç$‘ÆL?mîşÉvb endstream endobj 1229 0 obj << /Length 2281 /Filter /FlateDecode >> stream xÚµXK㸾ϯ0ú$#­H‘zl’l&H ‡4C&¶D·™•%¯$owûãSR–lMÏæC·Éb‰¬ÇÇz0İ=ïÒİŸ>¤7¿¿üğİgYíª¤Êe¾{<ìDš'e^ír]$2Ó»Çf÷Ïè;×Úfÿ¯Ç¿Ìß~÷¹\|§Š$•胷½,£ş²³4Æó>†©­İá)ÓÑâ@D¦.¦e¢iŸûÁMÇO¿¤:ıéâjÜéÇH+¢£5g?tİh‡‰&yt²Ã³…D²U¦¢Ü—TdvˆQà],e"D¹‹…H*íU²n<ñfóÑ#ïw4¸øó^‘eJãw\}vz¯Ú09;¢0BDODê§#3ödø#Ğ…OëŞô<˜ç“:})£±'yÓµ¤`¬¥È²È¾òyı0¡¤ ©ö‚d„qgk;fxÛ—Y”Ì[å‰ÔŠ·ú3 ®DäFşå/ö±à}\‹şQÒûj3úÑt4SyÒÕ¯`Uƒ"}ç7î3/o ÑXÀ^Dµm.ƒ™x2?¢iì–Şãd&{òG~GÆ÷2ñܾÚú‚çòô‹ÈÔA»’V“ƒYÃ1yØÇÜó­Óá{s:·íŸÍ€<ö­5nœ\WÇ›¡se‘y—Û E}!…¬_ÁA3ÏFp8˜!~åøe ¤¡1ñ÷åȬl‹E–E¸ºÆ6A˜¿ñx:‚·—Òç,}ëÀÊ/1Aë¨ï¬øwe\ êØP©—¤@Ip%ìĞõ ÿ ;–ğ`²·)îœlÙõïîäZd¬!•ş2Ô6¾ Âqv±t²‡"P5~´„ ² @n²àâgrÓó16Ë€Í[R¬é\÷ €â|”Ì3oL«AO"±İ,Sû]w¾øOоH2Ó›ĞLİlàeŠñõš¼·$£•Ë ÿ{ .È‘àë€1$s²#™ş&øÇR%UZÀo°BÛÿÙ®ÆèPAÌ©‡£FVi¶\&½åx}tÏ™è’ÓË4!…L´!O ñZåײ]ÙQÜD]°Ó7¸[i.’¼˜5Ÿ+h¿%5U¶iXhn²ªü†]ßÛİG5^Î|Ø£q^@Ş¿Ë:%cdk1Ó®½õƒRë(&-Şiq4—9ª6Sç|ù¹(fL˜£1bóÄW:>ŠÓœË`4Úécø¸yOü˜…‰ešhıÄ÷"A h=35`=–#ÃÙBGÊò,ÚÕ#úØÈP{ £ñ?N|«†í5¼%ÏN<ÀøêiAiDV„Ï8íÖS?P`$š·²G ™!½­¿‡ûØl„¶*)‹¾ı°µ›HÊJ,Xp'K?_Û5ÓI¦çè嬇óú@áLqÁ8êKÒù! {äkÀ›æßğ¹ÁGÄì=¶ØƒX;œ.¾|Ü)ÜÖ"È¥ˆÈ şÉÃìõ7ü‹õHvËs§ªÒĞÇϪ—Ğ RQxÜc³»!ˆRIª‹ë³Lœ q l% DŠ9-zì‰ 4Üjï(Ò?%\cº¨hàZr…¸†¨óˆ†˜Fm8¢¼CÕe‹+㯫‚~Ææ×bıSÁ¸ºGØÑ5\ v>^acÕŒáÙóµÉ\ÊŞå⥠&Ôcf¢ØÀWõœ&•˜yîšØ™º >-<Àpõs~è¡Kè¶@V–I©Õ{Ùæq¨Ÿ³şşZTIvÓI…È"µẫgë\^k Ë‚#§Éadúl_œ,ÔÂÂôš_cx9¼ÆÈ‚ ïë6™A¡™eËò/æ¨ÿÛ{ıó<©dùwÆYš&E.ֵ‹ƒ ÄÓÑ`¡Oìx|0-Wc9$ÍÊáälÆÑ/OLÙ¬THY}3—e¾Y }+:ŠÊ#8Ûx¦9=â$ÉX•pn2ı"N^¯k†Eä;û?Õâ°å‡9Xãw„9ñ/¯Øï@Ê\ò+¥»$„º —ğá)Ôñ"S’ÎP<‡Ğs1Örì-ml_ééÙo€Úò"½–Á¯Wƒ¸å,n<Ë»|wºœıóêH̱×$h¦!8y/1°¼„fÆ^Eª‘釓,.‘|Zl½ÚŒ¼2¿ŞÁØûôÔt'Üà7~ûö2m>BŠ$´šM—ØÄGåË8ûøë­+*Ø`†~U[šŞ–L:mÍé©å5Ô×8åáWúé:}xòºf™éôiø{§"ƒü ¥¡Pr”¾kËõê‹?>~ø/ϯr_ endstream endobj 1237 0 obj << /Length 2175 /Filter /FlateDecode >> stream xÚ­YKã6¾Ï¯0æ²60bć();Á" ’ l`ú¶³Ùf·µc[%w·ùñ[Å"õ2Ûİ r±È"Y$ëñU.éâ§w©ÿ~w÷î«‹EÉJ-ôâî~ÁuÊ´Î:Ë™Ùân»ø÷òçûU"¥\>­D¾4ÔnÛQ«ÂZîëÖº]å[›æ¸Ų«êcK³Ö«M·£ Ò³8n©‘ȯWÿ¹ûçW?r>>”,˜Vù"á9S\Ñ¡¾^%\çôÑK¿lrÉD¡àšnºŒğU¬,x˜ğ÷¿¡—Ã-V£ÅB0.˰úsš¦×GÈY®Ê['Ğp/&¼z£„—’)X0D·3ÇUdÔ~Ú®Zïo;5)Å—uë'…Éû‡ÆÖİî@]R¶êıZÇUyFNùÕ‰˜ÁDnìÖXß¼œLëG;Ôşş4x¸hÂ9+3oWfo†,¤ı@ö1ØNM$I{áXul/Üfıá\ÙŠØã ©kÆ_°Î† ï ‘÷õÇ)fl*gY*ÿŒ±É׌M ÆvmPŠ)Q¼nOÅ_iO…bY¡§w=‚ÊcbÑŒóÒ+Pߨar)K!ó۷–ü~zÅ`"¹¿D,+n2À@ZôıÎP[bGÄ{ê°ÅLjp¦Òş ÷ Ú0œ‚Œαi§ÊÖ- ¦8YÚpc¶gëçŠv¦ÚÒp·ˆ¸ó’¥ä-Ô GéçTŸS.ͦk‰-ÜÓù¬ë ’ÔûÚ¹ñ…HàtèɉPÓåÔŸ7tä­Ù2ğ¡–?Õ.dÀD®ôˆà~ûßjƒ÷§‘ MUÛ(ö Vd½vŸ=L_"×ʘìèMãpb ²ÉÒ± ñ^½tàÖ™æËç7¡õˆ9l™õà`* ƒxßÏ\ªÈŞR±¢èY>_ó+ÀÒû+¶»æ¼ßCŠ«†:§ÃG‡p~¼ö*¸·>${-J ¼ùT½eñ©ÑhÁo ÅÖGÛ÷¿Cˆ7ö©n ¢¸.–{S ‡Bğ¥–ÚUhæâ)Ö€e`#Ÿ¢œïÑ`4 K––Å«¶/UÌk'ãË'8·™î2– ¦Ho9:Ä—ÌÚ)¯vêã—Dq …qğ§ÄMGQLQ(&ËË&—@ã½]ÕÇGc»ë“ˆ’eƒ<¦¾\È%#à’3pÊ© ÜíÂáBİÍ,²†°¼5€ êXwµÃ.j|¾h~;Wã}@¨ƒğå1ä×’Óç‚>ü~!²™'½ÄàâùqğH Ifğ€2hÆëa.vÕÛÈ`r¤míàİú4ËgYA3éO"IÁù«Ş”æVş·×äK±$ºîÌŸA|=y©,õe&'Ui'láN,†0J@BØÃÜ·+$Ç_™;q¬ ‡"‘9$#'ì! ‹»ÆÚር–V¸³ä˜ñ8;…Ö¦Ôkǧ²¢U®kh‰/d®Í®,X6d|ȤJY Ø>‘ÎÚšê …ê‘Ú´Ôòñr(PLG0ê-R¶j?6Q*‘Ş•ÂC"4Ğ3­+‡KpAÌmˆŸD~¿Ëkì\éB-…ç±Àß²J3B^š5Û !ı8CğÖ@¡¾ØSdàêZœŸ@%ÁĞzyÖ? `»²¾¾âdq è¸CKÍÆsqÇ;^8Ú0ëK ‡ØYã„‹ßlİ6ûsçw|\e*Ú³ñÇ ‚Lb—õ1^×»5J¡ñΆIøRÁò¡†Ã{$´>w‹ÔÕV#tA€­ëQn_ÖÛjèOĞn=F®Û¾Eè—ylYh8½‰âo¸&¥‰ ¯¢Oá©<vpÓß‘~‚ŸŸßÚB2İ‹Â#ı•2…rgAKm²Kh(üäcúàĞñşæ3//pîøËEßû"¸ÃØõ ò77P$"©E5мeT×bíò‰@îã_èàBıSOú2c¼Oˆ!áìQ\Âå..mì:ñõ0 ?›n+ÆÒ”ñ¡È¬½ŒÇ‰,ö "˜~-íHÙğ@!Ò+ğB|Íó‰`dÓM7šdò9ëÀë™|6Ns|¡‚ju„óXoLB7´m…Z‹@©·¥Ÿız¨âlÈËjŸ8_\mxEï¨|-‘C-! à –‘’ ¬,Şb//"úç5Ÿòwv”ó_Ãa.ø¸œœÁ½ L fäˆÉóÓ®ë4w>DıÄœ™@BÁ¤Ôs_äùlÕ‹/R¡ìLK÷Ôr‡ ’wqFĞÙúiÎàÛÇÁ‰Ò½²b‹œ C]„=oÁ~i—¹ü±d¡±£Èöá¦hJoİdúêEÁˆ%ã"Ãlÿq­.3^öÖw¨Â#&g{²+z“æáa_––Šùrªµ_šÎLÿbP#1¡§TŞEÚ e<;ÓÖÿ3/טøÏ‚H³7ט±2şŞ6‡—먜„ûö2*¶ÅØÍkÚœe*–t¼)Á˜Öªßü¡b5ŒMxÑğéİËæ¯ÖlêÖİ»œÔ¸-‘FN½vWÙ6ñ¥ëÁø9ôDA_´½û+A¥Ëõ¹£ AMÒIWÖ³£Ì¸—Ç·'¥¹«ÿeªäF6Ùk©Ãôô B€‡¦ÍÙ§ìÍqcØû‰\kV`õ+JVñÒz2釻wÿö3 endstream endobj 1241 0 obj << /Length 2237 /Filter /FlateDecode >> stream xÚ½YK“¤¸¾÷¯(ïe©ˆAƒ¼ìÓ:³a‡cÃötìef4¨«ˆ¡ ¨î©ï|HTÓîGØ>!RR*•Ï/!Úì6Ñæç›È=ÿ|{óñ“Ê7¹È•lnï72JD–ä›$N…Òñæ¶Ú| ~jšm¨Rø÷uióH˜‹^¡9á˜ÌÑQHğІWıËş~ª{*¢à^X MFŠí+=`r³C]Ù®,58Ó°–Š ×ª‹ıÿ^c8tıø‡§²Æ.Pøë\]à–.¹Å]cŸcª¬•ÇNÕ‰‡„€¾á$4]… O Ù ¦cgXדN ,Bê‰qÍ„MMT4‘:‡3?òtéğ[%±iÜÙğäØŸÊq-99(Ht^3‚dª@CÜâÌ~+9AÂrÿDæ°ÌÉÃûkJA*öÜAÂÍÃı!q3RH¢%_H”´”¹Èµë;ğùÉi¥¾ƒ+ËëÇ}½¬Ö”Ğ`âsÓÆœËYOÜ-q4¹:ǧ•†zç¨rcW¸DÂpu©`·«‡‚S&“O¢! ’Ïh±Ô»ıÔİêtVœSêPÚ„0>¬¡Aˆ‰dÁû`û]a7¾\i=|=ĉ~ÊîùèÁЦ®*Ú•!”Æ®ÅgÄŞ€ƒF=÷ [†›aï$$ÈKİ¥.¦dbÑìº\óà¹-8´çQ n«ƒwl¿›º W±áØœ]Ğu‡CMQNÁË ƒÓàä°°â*¿ñ\;íâ8O!CO Ÿc‹zukk·¶ë+ÛÏC= v'&W¡í3áNü!¾MûÌ„I?2>²|‹8Ö>²0N¬Ø ‡†›ºõ‰£ÀâhD¨sÀ‘åMËVsŠğ¤tÃâ)t Vk.2 ËCj6òÀ?ĞA´t‚‰2&3S§Íf&æÈwjÜıóÊ«…‰RŒFÅ®>}öÑÊò¶ë¶aJ?m¡NÚ’»Z°2øÕ™ùËíÍï7˜¢xœ ğ—†j¯€{y¸ùò[´©`ŒwÊ6´ô°Ñ5ZÍæóÍ?İ×…EHI-TšÀJ€ø:!ïH“ŠÜLQú³mAÏ _Äo"[İwÎôŞ™Ğè!aò×JnèY¶ÆÀİV/Jô™—9Ÿ²Ôz³;ıdºJ@/ ‡õ¥M®Ç›v¾âD×½áÌ_cû>â=''‹“÷¶8¾ï`Üyq”·ŞàKùí}ãV4î·÷ëûrºş¯OºÀH‡„ß w"Aš‡¯l½Qغ ‰¾OW¼·¦ñVK­€†Æ…ßëc%y‚¹óóü½eZruà+d¾«Û¢?‡ƒ-úrÿ A¯õÅû² špÏLr×±D/é’ÿ/]BJßûÑÈöHPmÇϯR›†•ƒ³d£i~àá±pÇA±£oT2&³gœëNür Å¥câ×pû@'RïYpv+Y¬Ôx'›¹äÃ^ƒX>Õü•ŠPĞSÙ¾÷õ{ê°¢—¾zúúpt}/IE?oâLeæÖü哉ÏϣǺib»dVul²{ûHÌÖ¾ÄÎÒËçQ;†eÕ¯`L#Ef&L:LŸêZöÕ»ïEzşB¨é‡Ä2°>)°îVÚÜLŠTÉyŸË(EM(%6 € äv 2ŒïN±Iƒû9¬€Mçµ/Ù‰—Fà§æĞ¡r €ú(aRÆ•H ĉƒ'sºp,—•¼ìk÷¡´â¾ëÉ'•¸&¶1¾ÕûÄ0ïİ@$’»vW1¦K$èUıGì2£ZMœu` zP©Uà½S£ºêıOÛAyÁ£«v•ğ;PîÑaø§Ì/>°´İऊÈuà®Ç¾st¹b4ö;Éwğ§:‡'şuXí$0?ºúà H›©U7íÄÔnd’@ü­#²,cIºXàôß"9ó’ endstream endobj 1248 0 obj << /Length 2330 /Filter /FlateDecode >> stream xÚÍ]ã¶ñ}…Ò—ÊÀš?D‰H‹¢Òâ‚´Hs ô!—­Íõ ±%Ÿ>vÏ@|g8¤,ÉÚ=çº ú°+r8ÎçƒN¢]”D¿I^øşõîæË#ÃŒ:º{ˆx&X*ÒH§9Ë…‰î¶Ññwö“=ØÕš‹$‰ÿa‹ª¬v«Ÿî¾½ùæîæã JIÄ#®5KU[S–(m7?ş”D[Xü6J˜4yôìP‘”œ™7î£÷7ÿ"6Ä"J3•i⣭›ϲ¬à8%„s÷ŒJ“ÅǦ^­Eoì¶o< ´4,iÇeuì;‚m‹®ğˆÖƒîW@âD˜m JpÇs>:_pÉŒà?^rÈ9Ë’ÃM}8MÙÖbFk!R¦E­9*%%¤)÷ŒhN4´örÓ6¯¡ƒmvö* !ããŠÇ3-!Øiq,ân%²ø•P n¶¶±[Â$…!Ö¬¬»«i–Ácö| €Â'S©ÛöûîóÒzô¶+î÷Wˆ[¢©¥Œ÷Ş¥TÀæ¶ÜõKİcÑ…‘ÇpŞæ@aáèXª+{5»OvÓÕÍu ¤/;:mç*î”#4}Bí»ƒÚ«Û—m÷+³…G\ÏĞWŸãæû x¤âÁ†0²Õ–eµp$O$˲<ĞZ8̰<Ö '%+öûµë®ƒİŞ"œ"œ…á¡+›Æ~ìËÑÜ-ç%´]W¼%¨¿Æö­÷:p¿²ñnç# [°g± (~צ®Ú®é7gÇ¥ x‚› |pÏk4oÆšO5ˆ)!AüI…7óJŠø¶ƒ‹™‰ëúBÔ*@DÛ8xN’ãBc»¾©hü´Òpş¾‡Í—qĞĞAû·(A7N¨™k˜rP Dj½‹mÊ W.ô€Ş.NÕCnƒ0­Æâò\±L7qùÉñIJٮ©#-¿Yò%ÎÏ^‰ı†ñlX·JB¸LëQş´LbğüÁ˜“4…&øô¹Lz°´ÙØc‡)ÛM;ïÂFt·Şìúƒ¥¨í©uÅÏÎo*š>4õ¼XAV6fzY».Mt/~ïÃOµ¸Ëv’4iá¿õqÖ])ÀrP÷èÙ„Av'Âõ*’¯_5=™Ñ>ÙğâE˿ʪ˜$,‡\_ZÎ4gpf(šçM)“RøQFÅöS±é@C©L㪮֕İ]IñP}êµ»a3…DÜݺ˄Ê|BÛ[²'TY:›ß÷òt”Ihî2¦õ‹DnËÎ4*üJ߯*œaìpP¬­m½C”-¶ó³Øj­MÿûÑVKÂÜÇn‡Øw¢Ñ¥ëÛ7ACíÃi–Ù»¸¯¿´d‰—pŠÉè”Ä—yc'ÊX¦#}H„òÆN'™…¥|¸ªíÙk&”dc~©Áo&„¸ÿ“ „ò áU£:d½·Õ®{\8:Ë™J‡(ıdW)Ï•ËÔ»53ÀÒ™8¿toÈ/ÀÔ¿??B¸p¸€¾#1/>¹} r`³lgF¾ğ3\û™»9Ôîé4%|8°›[$°)M1¥2‚1 +nfÎ/>— ZB{´xYp8¹ÚnÉİNmkúVµ {&±p\,?ù+Ñ‹UW¸¹mš -WÌ€”„ñ$ŞÁ• Vø\$€9Š Üá¢ÜÄU ‰??p©úêâ~şV9Š@TtEå ú‚ € ÷#ÅxdÅ¡ŞòµÓˆï :’¹ñLᨸ§Šk&œ?;ê8¢#7Ò‰<÷2´HôxΈjŸBœPp¶?à_{4´àФ|T éà8–*ß¹õŞ÷¤~"3á Ÿ Ì©¾9œ™ÃY¨4iæl“ ¥M°T„ Ügy‚¹¬N«¨éÉæMáÂû ÿˆ*b,Š/d«¢óõÇ"Ç}Ue1YÆúT•4"´àüìF³SªƒÎÖãw-”¹-Çı‰( EâG/ÆŒp1£¿dŒı³ñ°u¥´‹nnÉû-ŒExÈó‘Æar„âØÉ©–è¡4İÔ‡•8nB6¡Üİ»¼¾¨°2Û¡ãR2l'Ì-KA9׸ @ƒöÓâR‹ àGI‹Æ'ïÜ'}CIܸúâÔ¡¬@ÒúCİhy8a1%¤Ìˆ¡ä½·»Ğ„Í‚·Cê:sèò0šAZ˜ˆõϺCéµúלÜ ?Ğ Yù(“9l(è5 ×rO ]è*rÿé‡÷·áçq½Ú¬rã¼ÚóµÕtmçâÚjï…:x!…·°ãü$‚ƒ9¿&ñ5p(gM² &dà,ù1}t‚¨pğ)ãìͰBÁ £`ãËy˜>•Û¡a ©7è)˜qŞéC¹Ì3 XæÉèIÏ¿&ÎÚS©[<ä?;[ÙQærØHYś֟]ã¹ôúµö¤ =Èñ«Py¼/¡`mN4‰ç—ï‹¶ÜĞp8'ÔıŸËèC_9û²óÊt;ûÒ?9$Œ18B-DT`dÕÜ@ ¹âô£´^(8th`µ‚cKÃğx‰cÿ:€¨­…ğƒa¹CÁà NWZ̅ʘ¸d–İ.˜çñcÙÉ7tşQ"> stream xÚåYKÛ6¾ï¯Ğö$Cñ%ªhQ´@Ò"(ĞÙ[²­Íµ…È’£Çòã;CR¶d˻ޓ¦íŦGCÎë›e,üzA÷¾¹ºxş2AJRÅTpuÄT­X dB—ÁÕ"x¾¥q2»¾zµİ÷ü%ÓƒMv<³¤E޴Ѧ5Qiòåꦪ£E·iğ”ç/‡{cAIšÄıî“CFŞ3àÑgt ')K:ÄiÏ8Ââ­¢—S¢I…Ø—5°{t^Ä(¨&tÅ1IåS½ugæ-ø§©êÖ,~òzǃZ§û-?<䢻Y$) ß4mV·~mÊÅõõ„ß'4IÎì·›™ŒÃÊ~¿²ò^7Æ©$üL^\›zi&|˜0€™z„-C(غÁsA¤æ $©pLñÄ))„*LGNb£“Ø)'ù€¤ƒŠmM+•ª­iˆ…‰<Ô„óGr’.ìºLpÓ[†ëëIhCI`'!;>ÙwδûëB’’$gDôå¤5a4ylY˜À#Ø å)O¶<%Iä)Ğ–#8 ëÖ*dLè9ÿO˜Oâ\Îä>Ğb“S ~Ï׳&©h‹êßÓ°NLë2N%½ëÔç»îòês}wÜ\©!ŒòLHi³›ÂLLáRÿçÃbI˜-ˆçuáå¤S(¾é7èä&:>aö‰÷h‚Ÿ|øV´óã(!Z0\ÍwÄŸu5‹˜çfÑÕfÎÖT†¯»åÒ4p“˜Eœ‹0+–U·³8\­­¤Wï/°©ĞZ°HOu ¹´·°ùúâÍ5 ğğU@í£–u0ň’èÀ"x}ñ—»;‘ä„Cé’,!‚òİjõãÆÆĞt°Å†Üi¾2ÙWä®5ƬSL„°DO݂ϪÚÓÑïÈiŞwYy ”KOôÁH,Ú{n ÜŞ˜yU.qğthn¤Q‚ö“BÁ&ò–@GÂvxwZFvsÒƒ>gÕ¡ÏcçHĞÚ4]ÑúÔѱ?1Èœ«•¯‘›Ñ<ÕÜ7áRœqIÚObmm·Ş¾¦<:C»=VŒxª”¾êŸ$$~²”q;ü¢vˆÌÚPPGAZ`t• ˪ÅE£1ÔTGó]—ØUÚÆ­±¹¹f©ÛSTXR>غ²pDœ®+·ì›—İä¾îfR¾Îô¢²Ö­šU†0sç:¤ıº²/Ë-ÄyÚfyá`ú!oW~¶w„İ0—ÕË®/ÚñşÒq à¿(Ş·Ë—Åû½ÓÑ$*ld¹ˆÃ·1ôõ ‹˜ açZæ"kÍw2h¢Uİ|Ì|t[ıÔ£#éÑ£ƒ`áM×:>‹<ä«¡Èçõ–¡­ü9¸Äò5‚¹mŞ»¹í Øu‹ÆO+·Ã)dŒÀ¨ßge b¿èæfo__3›ãú!Îı,€‹ Vµ[®fø‡ÚÆ$rÀO35"RJ(c‡Uq"r0«İëÖ=ØZ¡ëìõ¹×¦,>ºæ‡TƒNZ¯RŞÚ9ÈÏüL•(¢,6F½áµ¹íİI “XƒnLth‹€ësµ£äÖÃÀ4LB÷mÃPÃtÕ¡&Ş`à M·&6¦æ‹zÂî»÷^¤ *ªAİ:+—^]×ôTQøá—AÿUbï¯ ;ÚiáG;X §9 à¬mí©öø EEiG@İ£ÆñÊ[G´©PÕ￲ [4®7E67’K§*üÍ”s döïB7T#—ƒ¼]SI‘m|bö“’n p…İz可ã;[4áÉ*ÛÅÒQª:_æ`‚رßv ÿ¨ìåA×  >䮫¯ ÖcaXÊàš¨ˆÆ¿ˆXJ´ÖΕ˜^\]ü ”ŠĞÎ endstream endobj 1258 0 obj << /Length 2298 /Filter /FlateDecode >> stream xÚÍ]ã¸í}E¶/õ k­eË–İüp[\q@»Á½ÜöAI”Ä­c§ş˜Ù)úãKŠ’cÇJvf÷ºè‹%S”(R$ERÑj¿ŠVyÙöû‡7ï?ä«‚Yœ­v+E,Ëä*K%‹“tõ°]ı4»»0ÉyĞÊze¯[Õ—wqèPUû¦-ûÑ7ÍñXöG]ãho'؉}ƒm¨ªjîb<ÑoĞ4~j›}«GİNñy°¾ ‘awC«ïşşğW`!䜩İgP@Nğ8(wï “ÄÁ®i ¢?©ã©ÒïpŞûñ”çB°(-`1³HUv}ô÷ú-áNQ3Á>¢"S¸¶êş‰¼è-ıâ±5‹Xñ ,ر^×ᱬª²©C]éQXÈUÈÓœ%2Ÿ3‡ûꀫ¸"qA§9‘\ğ0šš`O°,õà €å^;xh†~Ü<ϱ¬÷욣ÅÕŸú6U=ÓïÇ(hFÓuåÀ>é#OF–ø<;.a ‹%ÁVëöDĞêÍĞv0ÈÌz\°BZ´´èqšfáMç‰ÿ (fC½mèpQ«ßàbrh°Ï8‚#¦?F\^`ϵz‰;áGC1ìš¶¿E!¤I†LÁ¿‚N¯Ö•şfä¶µ#¬u¹?¬ñ8uKc8—H΄¸E³”2¨›:ªêÉÊ •³l ZÖ§”6σµÑ=@0¶oÎNİÄéÔìà$Ô%×bχ\§?ÜqtàS,A˜4T½¥b| UºŞ*Y{:׆©ÖêzKH3 󜥱“ÖÇ(Š< ™Ã“£3›ËDV$Ü!‘š‡‰`"+ş_õüí7Vô·/Ó8cà:#§_‚ó` ª zE?e*µÑì.Ìdj|Ö÷ƒzªİlÕ{îs&å«vÉ£ŒñH¸9GeüQ™«¸9õ8—,—âÂgê£õ«­jŸéÄ; ­öš\ä 8l‡ƒN^U„fnFÀèætå¿í$cˆâ†ŒR—Gì€ÇùşJb {lyf,ÊSÇ~«û¡­;"¢h30íK8Û40<&qq°À$d´RˆLX!“Üà¤,–l™‰B÷ØrƲªØĘÚh ¶ƒ>î‚¡C±±MIáGC%ôˆ>æ,‚HËÙır )ËÒq6üÂ`œô¾¬k;¡rÄ·ú“OäW¯º-,±m§LòÄ:+@ WnPqÁÁ®:Ó3^®ölB&àO“…¦Íü@Qî}2‹Xʳϱ3Ø‘Cı牼ªÿ1hšø=L=e/T¿‹¥{ÕŸ˜5•]a[B²·Õ­ŞŞ,I!:ô ½A jÍ(n§Öª%`_õ¸›aƒßwÊD¯½+i8l ßlOû®«³£ñ¾ú›'r†\3›ÜE‘gH;äx_ÕKkOÁµRÆÓϘz8A²÷l}¯kİâÑãÏh. ˆôBC'…Ğ0É™`Óvôg*?Ê 5ÔÒI‚ު®Lù€ª¶Zy"ÖC½A½;€ ıÀTÔFŠW7­ívà­;ƒšâÙ*^Ôå‹ÁY»Ëú¿üüáGêq3Áà;‚=›òğ@?¦V¬œ!u¤¡®õLÔ?»œx ™BÈå`OQS)›Î_²a͇ 2.æN(áùy8ºA%ÅÕf°G–ËRÅ¡†ÚuK9"‘kÀ.dvÇ"G°JKò\ï3Ôp„óİgã!Ì« ½õïË"Ú;‚îœW°åоéÇâJy<¯¶´Lœk_aâÂşækdãpՀ̸¸¶ÄR$7Ö2¶< M'Wr “³TÌsò©y†o({¬C©¼#B./$J¨÷ÔœÀQûo²ñ,Æ™rrׇ°4LŠ üì`'Ğp½õÕ¦î9M/…=ç?>Ç÷÷> B*Çé\©q<û eãY6 óÔr–¦#µ'Ğe¯ÏYM(.VLü\ü€sжºfßÂ@}}˦Å4 yönî\ü)ëY©Œº!«U¥«mܾWÙÍr1Oàj€Kîåâ Æ?ásÜË* 11–ä·¤¡äš ›y‘{ª@˜©"! Ä:>X ä÷; …ÅTUwô¶e§º¬ÂCKy¦ˆİÁD‹’.¾Ã]«Ï C›½¸D}Íãx· ŸLEde*ø(S€‘İCLáğì‰Ó‚Ş‚©U&ã%)ZZó {ZIŸ——w­»ºÃøx2 ÷\üĞTÛ ‘Ó£‘sî½a¢¥?Ѓ1d SÁ^pdæòx⃪«Šk\Ë=5DTN}ÛÄÔH_QÆ®u¾Ü÷<±Ÿ óŞ[3ò|éÎæ>/e¼H¦×™w¯ÑtWú87TX/A†Üˆ›Ue4›ñÃÛÿ­&_ endstream endobj 1262 0 obj << /Length 2006 /Filter /FlateDecode >> stream xÚÕZKsä6¾Ï¯è$‡¨«Vñ¥G²©T¶j“ªœ¶v}óø «éneÕRGO\5?>A©¥nÚÓ3Ó5“lR$‚|„­¶«hõ˫ȵÿºyõúg‘®2–Å"^İ<¬x³4ÎV±Ò &n6«ÛàM¤£GSôMnLezÖ¦Üîîñ{8tëP ü@Í·ß 5§×j_Qб…åÖw7¿¾şy)S1_…œ³Lkí"ãjF³(Máx£ìÕò˜šñLDs™…_¼‘Ï*”œ%J¬B!YÆ¿‚¨/áꊯ®®ç+³ÙÊ£ºbKZÿSµmÚ²ßíÃî°¥LQ¾‰¸*à#UA×´}YoñC‡¼XÅÿ×± ò­éÎÏÁS«„˜ßìLgÖ¡pkE kuŒk×!:œÁ¡mpæ±Ü8Ò}ÓºŠSG‘~ )†ºè˦Ϋ²G.OküÌe2è×<Øå=–õğ”AÑìCëQÑÒ¥÷e¿7526R« o°Åã€ÅPå-ç¨FØ5Ù9R»7ïòµH‚GdcüËm¾İç0DÓESwæ÷ÁÔ)ùT,´y7X…î`…J‚¼£vo@{O؃ª±'-Nu#uôOûCßĞ@ÛuMv&}¹7äÙ8uOúzBM½q$;S¶4ß¡-Í>'5 İ*¯VQhğf°Ç×t2+ÊGA×ç÷•¡ÙåÌŞ´Ûñ öí †¢2pı( şÓ6Û6ßMGkG#è 6fãlE`ƒ¥tî^ #%ÙŠŸ tYÓø€~¦64Õ<Ğ@O>]ëóÉäóóÜæhqñ¨ æùÕ…›+S1^úwnek6e‘÷ä*S:9‰,àûÀ!ƒ6bRM±’''‹ÂÙŞ,EUÙõ!mş£ _|FŸ@ÎÔ¸àŸîz¼K$)/Â8ıY\Bªà“p_ùöR,S“4÷kÍƒÆşÇ‚Lù’¾¸Ô,IÄéÅû@…¹Lô¼ÊRÅpŸÊF‚G+:òôè )ãêKëMg°Aò×Õ _ZŸëA$IôW!.ÒÚ®©7]&‚EYüyt¹„!!Ï8S*]F»ÿš~hk R1LAé›~ƒˆIUˆ$&‘£}kÓTƒ†lŠÀvó[^ÌÀC ù l=và€^#=)ê;ȧqBM<~ıñ=µÚE$ÎhΆƒ:FⲤu²Ö‡Á ec°í5-M>bÒ2cŒApͼBŞxDBʲçSœ¥jòD%\Ÿ…"Ë,“'@BWQ‚·€<{@˜+¯<>K–Ê鸳˽à±ì˜{^{Ø€§“ìäÔ GH™æSjjózkHy»F¨Ø‘È­éú¶,¼^vIœ¯ÖùU]ø³H¹½K X,Jˆƒ HYØĞx7Ü[œeq'nğ~üaó;",c…ñ‘$wÎ{µãªã£áÅ—Äğ×À"§².§ç -®fŸHq ÑS]Í*×2оÄ(I/´ÊG\•S¤S –RjLïjêa Æ– Ìf€¬u:íûØİä}N½¡£" tİåì¹\0rÁÊK’owå`¦÷±O}Ì÷FÑö( §jĞšÀZuaÀòı¡2cÆÍ-8 q,ô «|³)©4T•;Ldo¸Tu€0¯¾ÆÊZ E¬³àÆĞ˜«bT¶Bõ–V> NÂNï—”éJLm_¢2m™`ªX˜(Õ±²À¦r¦³iÈ8«£µ<ñ6ƒ·©<ñå…Rbš÷˜‹µ 6S†¢/ (¼ƒc=Ñ̰殺ã!æL¤GÌeú°Ø´Q–(°#Öˆ]PŠÖä툢px·Æİl¿0UÕ9ª&â“‘U©âş¨Èú_Gc%¹EC‚ÏMC3M»1-º èŸÜÚÚb…IYtõDÄ›†ꦧğ¬±ÄÖ»¨ æ˜?ú6§q¬èùœÅÒ©ÜÖ›Z‡åĞ?KWl:TğøÚ:ğR*$=ë.¡’éx•Ì{æ$°5×n ¨¥±sv?¤§[øú¿¶O4ÇF̓' ğÆ(Ë.ÏZjç¾’ŒW3š·eUÑÖE³wç¹?çÏÒºqz ‚·hÍÒø˜ß‡¼ É!o©Ğ ÊÏ—Ø ”µ7üKHnÔ",Ä,ÉæÇ- Á?#ó2?gŒ‹ô£‹·³*Å-¾è¨×›ıáîîÎÖxÌ´¾6”]–í¯ÑÂ;VK}ÂÏ˸ŸGŠÁ£ÿ3+ö¬ô¼*”d§`ü$MøÊÕpg“ø£k¯óë/ äà_ÖÎÑæ‚ßÙà½<¹S¾ÈóvVÿXğ“,:áw‘Œ·S%dğR&åÇp»\:qUé„·às‚Çïq^ÉDråÀ³1áÂk&1™‰Œ¥©û'€dywş}óêO»è{ endstream endobj 1271 0 obj << /Length 2263 /Filter /FlateDecode >> stream xÚíZIsã6¾÷¯PçDÕXhb!¦g.S5IÍTå4®¾tç@KÍjJTHÊNOåÇç=\Z’ãtú0¾Äúğ–ï-p¼¸_Ä‹ßÄ“ß޾y÷‹”¤’ÉÅívA%#R.d¢ãÉâv³ø}Š©Zş|ûŸnÙ»˜¬Á‡?9‰ͺ)«ÕÎT÷æ-®„Cè`҄Ų]ñw7ƒ%C2Qİ–f™Ğ·\®’8~Û•j!Iª¸Æ…‰ò“ÅŠ‘ ·œöO‰Hƒ9ÏmÉ¢mÉf¶¤Ã=?ÖMV5dß>%—’XŠ«Éıhö›Óͨ&œÓ‹6 zzqNbA_pñK© í&ˆép·ŸñÏOÔ#M%Vöjçï:œ³âRFùbÅbsåæŞ>˜åJ0Õ%Ê[‡ª\®àwm6ÇÊÔÓáæÁä•kn²&s­cïï±™FKø6NCqÈj~¿É 4==äkœøàFòö˜&»+ Aêá6+JIšÈޘ,µ\¨¨2[S™ıÚæ»Cavf;6Y“—{ß_Ãq<‰£l³É±;+Š/KÍ£¶ÛMûD¹Øgͱʊï\RJ€$Dÿ5ş;àŠŠLQ.áçÉõm‘t´z”h,œ#/–™¦jrä%v–[ü0+÷=Yq_Vyó°#­ìTT·mʆÂJÓ¨<¸Ët0+a¬U…6u4 åݤwAÕK5m't:<Úƒ¦:àʪûc+€Ú‰zŸùÆS½µ* ä®Ó¼ËÖwïªloPd‰Ù¸CL™$cmؘmv,Ǿ¦t =7a¥ëwbQaö÷ÍÃû¼—Ѻ¬¬šÓè`%\î7–8{DY[e&³Rù |Õ݉ÉõŠI92ì®Ì/ÇÜ…_–œJYÚ“×^u±Éì¶‚Éf穬²ê‹ëCµ­×UÖ¬‘ʇ%¾skŸ–vâgÏ¿Í-û†”qæôÒs`û­!1G Îë†[ ´Òª1Œ¶ÄX³ÆYşämÓ°ÎüwÎ0ÜÇ!«k³qÛäİÿÒ0´u‘{¥Cyé(³ÕÒ h)À˜cIß«°eñ©šÃ”ކjş! ò­;².oÜ‘İÙõñpú6n|Ärİ--nzÂ=¸x¢Û-óÿ2 ã°ˆ˜0ÉÆ¬ø3Š(IRñ¬%£÷ˆ;ïM…7"°Ë§¼(°¥£}Ù¸F/9øÈŠ xã>ÊcS[{ÇÇØÂÚµësşõè@¤ ’<ş½ĞrîÆi0SD§é Ä:Ï„V^ÁéùŞt˜Zx?–5~j¹7-ò‚NTË]m '™:`á|€»õ¾ ›®[+©]gVùQçǾG_ö½w¦÷Q~m@`ŒÆ„¦:ğ]?0O¨aá% ¬Ë'Ø‹pÀwÑ÷‰&ÚÆ*æeÅ V²ªÃÊöz*ò°œïƒÑ,‡I¼ğz,t=5Š‘,z Á·ó½’I?±0ÁàlÆ (Õ/ˆı? â~몒j’¨…ɬ¿tÚèhϯÍı%D˜¯š‚˜Ø[GˆîQïcH‰’:BŒCt!ÂûpøÊôÈãá9±0I‰¢‰ aUòb H…Aº§Ú•¸pßbŠÀÊû‡!^ôÒéx1N7AhÚ3#ƒ Æà2ÏEwdÎqTBbóZ=¥E‚ SvÊÌXZfÆã ¿-3á·‹Ù ±­ Ê‚Ÿ°u”j%6Lµ ’Œ0rÄI(ÌLšå¿ *ÀÿÑ‘0]ÔcëPã!ò_Q©¢¿á½4ⱸöÎìëß™]vççõ“Sh;ı”P?¬á²Kc ³ØK¥Ç^ªzìÅNç¿Ë›b’èôzư‘ÅmxŸï÷Î¥ÂÉYwêÆü>’öyÿEpàOkW0/fÉØ¿ÃyùÚæ)Š!Ö¶….5 ¹`aŸú¤×ÁÀ?Bj Ü£òÜU€FÖ±í$gí„É.61 r?͘‰&JÈ+ÌD< ãºÇ¸ì™;+Xï½4›¹´üó.ı6ˆ!6¬.şFU„ıïMãS ¡"ÃPqëã]CõÆ7Q "RŒ+±İ70©ó“œúà*)·`¾ï€îÜï²6†˜ÅåV¬ô ªŠìàFMárÕ&TÇjİ&W?Õ,?ABB‚ÀÓÙ°^`#u˜c»z±Å„sbr—´—AÊ9UĞĉ÷ÁÌGt`8£ê„ů˜kpé¥ÂÂRQŠPØ¥ {F*ߊñ€Tš…vˆ­“Î"lò`²Ã ïg6ÀRN¤îŒû·Ç%g]`¬y„K±%¢vılÔÉ LÛJÿÙ+ ¼\M(ñPG÷¥Š«¯F¯B ºàÛ†„syú¶1ÎbÂh‡­oC„¸ºNĞæ³#” ¦ÓBÛË;F†Ó"9õ×pr¬¼±&`e¤;à€kãLN^‡¸HÛ û×!lº×!ö¯CØé•Zş1ˆ'Ü?)[5†é¶œ 3œËjŸiÚ¢Z¿7 Ô„ûÇ”ĞKY ¼÷!¨è#Î%$=Éac¶:?ÿh¿mñ±g Àeª3Iu$€œÀå [$ѽö}ë«VbÀ¶qÚP·…¿Õ¡ÈÖæ¦}}q…­®Rè«ZãÒ\¸ZÈÆç=ØõQšúje-yRÖ:ñ ˜y!È´±ÇŠ_ùúó¬ŸĞpÓy?k±²½ÆîÏ®ë¼Ãæ±ÉÓğKÆ”öSœûf<{}Á)á”MŸ®ÿ('C.ƒÆpÏD >ƒrÂUzòŸÖgpğ<îŞmhç3 é} ·>:‘  Ÿİgë8 9t°Æámsù½:ÇáWO‡¼Öq°PN~$Z yÙ_ä:äWsrâ:NWOkÎJÿßw\ã;:èX¬ ŒB·‘­}€¦ØhÒ¿nßü]<”† endstream endobj 1277 0 obj << /Length 2241 /Filter /FlateDecode >> stream xÚíYKÛ8¾çW8s’ˆ©Ùé9ìb³˜¹,°Û˜K’ƒÚfÛÚØVG’»Ó@~üV±(Y´éîÒ`{±h>‹ëñ™ÍV³löW™ÿşõòÕÛwÂÌJV¢˜]^ÏxV0S”³"×LÈ|v¹œ½Oní¢oÚôó¾^|J»¦íåüãåï0²œŒ,㪀iݯ·s)7nJ#“Ïó”'0V¢*œ‰Jwu¿Æ’Jdz‡=*ü¹§ÆE³½©Úºkv.; ÿöW“õÓR0ËYÊ53ÂKş!ãúhP°]WdşåÙÙ­æHŠÉÜ ãóœ' ä<ͳ À¿´qüÿ¾ë+ܧ+ÛİòãG?c;çL‹©$œz[ä|ìô:&™b¥RC‰('rÎxi9ÎÊüù‹ ˜•,7å€Î{”’‰¢µãrm; J&yrÓ6óT˜da—ûÖvX™ ÍıÚÖ-—U_Qó¾«w+ªÄ]Ïaø'ú‹ßPñnM-kú[wôİ5~f?ìôjc£qfØìŠN¥ ‰«ÍªiÁX¶,†~pŒœÑçà( &GÃmm¿oÁÒR!Ğ İçv.ô`Ëø¿¹¦ïÆîV`¸±S6Ì”£ÀÑÅ´–ÍòùeYd&Í´µ…ÔáD~‘±Rò¡S ğibÜáç5T-XÆeˆ&Lê]z³©Ö±*<â[¯ĞŞwÔª´ßôàR²`evÆb¶ =ùØó}d2Át¡#`q~­¿D¦QL‰Ó³3ÇGWLMΡ`•Òµ¨ fV3ƒÊz{³±[»C {ªB«(rP¼ü6—z;…º~]õ4´¯>9­í‚ ûuk-„hqGvïÅXÎ!ìÀĞ\‰¶,™:èóßNQÏ#呚3hV>0„“ÏéÄsÛ˵ÛÊX9/%|íÙ¡+¨+Œ–Nµ¾ÿ—jÑ{P@ár¡,€æ²+Û’†ß­ò¡ÏëÕnPõe½¨zë­`ôİT} ¡|]ßüìÖáB00€î0QÊC@‰$™ÑêQªEòå>‚”C(#Á”>¡PcÔø%2IÆr>êxs`A°=³ 쪣V|Ò–sŸˆè©V¬Ğ£F¾ nñ úÄ6&Ieâ7v²°aêÀ.b3ÇÀoR(óÂh<¢¿şXÕøõ¼jpç"uh)—s Èà™T¦“µİÜP©µ[äÛğ Özåü,61}¦ˆ5Ô\@îñGZpÓAÆÛ8V¡‡Á °•‡p‡íÎÏP{ŞËB`$ÍJ TèK2I ÊLy·«C·@ Gj„>åG'69öª ‘‰‹ÖYÚ Õ]18tÑ’eª|ª“ÿåTeè|)Nå> şUh çù3û:ÅV.:dŠÎ¸Š±‰‚yº{ 2˜2 ³TªìT1Î`†f?3ó(fÅ3;ŞÌ\Ğ‹VdÅŸnô!`1n q²QÁ1cjğ’>«wm{"Hßœ²×hn‚Ú‘ !er^|_*y"üQô’ğ_b䱌Pë§'—ÖˆjÊHË!5ÈAŸ%-Ÿ`ù: &¦åƒÉ_Í0ñ^ğ3‰ºŒ%ꊲç{ÏB}Ò.´S%Kç¿*ú3æíHTêíDz‡e aßxÇ$’ÏÕh`Nú$!Gın]pö– ÕíÃoÀda³gòr_IñH^nÀ±•äåÁ¦—ŸWvÍ™Ïb4×ų û:æ´!€Òíÿçóñ«ŸÏG‰›+| ñüø’ímº³õj}ø/÷7Ÿû.sVrد›ºCŸa8±ÅÜdÉ4aÍOmnl¢ ¿Ô%KÜ’©ç˜~…àÖlç¬Y³²üŞ›cÜKA£‹À„G¥F8[Sä¾O,Ÿ98 k·ÔL8~õ}aé,Z1£UzJ‚.‹ôÀ%õ¹iµ!ÅwF3ÔİÀ" çvp#Ç1ã%3ÆØZ}ş~ùê¿¥ùX endstream endobj 1284 0 obj << /Length 1911 /Filter /FlateDecode >> stream xÚÕYÍoÛ6¿÷¯pÑÃl bù!RÒÒnÀ€vذÓì’õ Ø´-Ô¶\Iv`üùHI”å,I³»˜ùÄÇ÷ãû6¬&tòó+zfüéêÕÛ©ÛX’÷¸ÎX/N²$ów³Hr9½GÂS”ò„Àr‹XFbÁ'çDÉIo׺Ò#œyJRÚã|²[F(“~}^nu=‹„Ó›YÄÓ©^–£ÛÊŒÚ~vºmJ¤~½ØáÍZ›‡øìf°{“»b·ÂÅMQ7øTVHu44zŞ”1 Ú»‚³ÄT•@(‰“ÔcÇ’ÁW<”;ëøğz£ít±Zß”U´8ìëSÁ˜DÅܹ(§Ú ÙtW‚ <£Ó|Óè 犦Æ9€M÷Gaä½Aiì(€4ßÕ·3Lı§ÛÜ@`á1çˆ1’I§õ:¯4ÂVPùÊ!|[4ëtì-o³jx?Œ)ÂcUŠ?Ñ?ì½=Ó$ş#˜ÆÔa³S˜CÄÌ e–;u¹€ ™Mop…N«@¨Š¢¨c¾Ù ÏyŞxȪe—2€:>à)×åf1€¼Òõaó/#}Vw_M‰ˆ[WUQîïj[4^\˜I‰è™U‹¿` ¤ùr(ª–ÀÊ ë[ƒÇ¡ä<ÂÈ$ĞS{a'ZĞÖÚÆ¯y°ĞpÁcÔMu˜{J¿]g1ßLŸÇp–Œ$4õWúP[µRÌÜ<8 ”ÕܤÕ(x·BÃè4ÊÌX‚‡|9”‹ĞÜZİ4 25İçsóş}lêaK=l©u4vıq‰oÈÍN/ô>Vùnåf¯]à’ı8CÉh¹ê&¯š±pDIÖ…ÊË‘bó8½[¸MÄöODŠè¨‰±c'÷HLæ$Éä$ê™hj‘ıh0ISùܬ̋¯M@*Àh^âÍ0µèÖ*o t28«ïr«÷Lù{Ò+{q°VéæPíôßòÚ‘Ù{†‰ãLJğn`gMfQ,²é/MÿËzì.“˜d—ø $ÜAîÎehñà™Éx’Ğ{·Åq<½òIÃĞïZïó蟌/0ñA;\šºX¸O;‡ì´XœÑbê'§ÅüŸ´8y4€ê1Z¬:-&;XN„Ë{\ÿp—o÷]¸¶3.Ú$2Y—İnΦB6i}Ãw†”á³8ÉØ@qˆ¸ãÙ-YÔ xø”:,Œ¦éi¢fÓ’°LôˆèèYiÿTŞLIbR-.HWß~| ­ ğyó?èͳúFá³p„ß®§©Ğå%Òın>oôÒ=™ôÇŒÇkq‘™¬ #íŞ©vŸ˜ {÷zt.²w¬pXº! Ê ^Q[ÁÇ7ç2Üğ”gò©¾¢8ÉD»?à*ÒAtëÉ’¤$–m®ó×q&x]!É»)Lbn6Áw»“¡Y?˜g' nÿ¥8ïƒê”#a¬«Âb’²öÎŞÄaȶ’ö¾ô¦‰Æ¶‰ ¥-Ñ#»$`É-›Ï[îz&ÙÔY¼_cŞ€Ïü?}S%¼PûŸ*\€'g-6¯Ç$4¹ZÜuZ{›şe5Â;N¡ jó»7ËoTH  ú®TŒ^%´{n„)·{3ä•ùÕÑF>--æ_s1X|`ÌßöikÈ¡íœ7…0ÈŠv² ­B¶ÜY~På€å'-÷x'û JXĞÄã´M¡áq,…é2ß—.­Ò^ Ós(£m·ëåÇ©…^æ&ŞbÖ Õ ¶ÑLå Ô Êã¾ÛÂÁ> stream xÚíYKÜD¾çWŒÄ7î§mD"…w8+.„ƒw¦gl­ÇlO6#ñã©êj¿fœİ$ @ˆÃn¿ÊÕ]Õõøª'ZíWÑê›'‘o?¿yòÉ×É*e©fu³[qÁYÂåÊè˜ ©W7ÛÕ/Á‹jŠÔ¶´[­Etë_o¾ûäk¡'ŸjÁd[÷%Š)8í×ëİ ±4=Ék»Ö<ØtusÍK¤,1¼§,Z:`FÍ!ë6xÊœ†»Ál/#@Àá8wö|½ Y"‡ã;bWtûí*[tùšƒ¬!œÓAiÛ~µn¨³olÖY?èò¬ÂV!O Ó\A‡³T{Uw90“Rwköü)Ò×Õ· ÊôœÑ*šÅŠX¼Št”UÛu¨…vƒªîÆIÉùôâb¦¥êÅüÌëjnp/ƒ®F6óû}·_váÂN\±(ˆ/0‰AŒÙ¥„†Ëޘfg‰•2“3ñeƒR£™ —<N±$QSF=3¸!—wô.:•œA\êT¿U§ËGã\ÿÛõ>ı»v"ĞaR°Qúî%8“Tí½±ÔE'ƶ=õ΋#ğ×NbÏSœQŞU`éØÔà[I°±ÛSϬ±İ©©<Ç|´ëûÕÖ¾é»Ã¨óÙ[phïÖ[\]Kè(°o²M‡]üğxvo¶”Hä¥tD-MU5Gi7/et4QTOo³†¾°[Zj²joA'ÂÄ#ÙL'.D¡$‘—Á_¨$8»¬l-û°póÚ)-¼-ª¬9‡îˆ9¹ÇgÔl²†:Šš?ÂÏğÓ£¦®¬³¢Áµäl¹Ëkïä±`&â×ΩfíêS3g*ôœë½­ºs¸+^ÛÇLyiÇgŞáÔ4¹°(IbÓ,îhÆÓÁ)™¤_‘ ¯H–‚ €†ãÿ5¼¬áv¤bäLæÑèçíÊ<1;Öz:$¡ ÑCiŠÌ#$7 éŞ÷N­Ó;U‡÷Hœ¡ÇŸizSÀ¥­èrÑ-ì“QÌLšÎuãƒŞuD‡ Ú ”ÎØ€¥À][¯µ€å+aȱŜ‘ÈA_¼sæ WÕΉŒê‘Z¾ò˜ƒÈ•]Y ¤†°_Ó*Em茑Æw.ŠŸ×‰ zÅ™ˆ%)¿ à[ŒòÑ4UpŸn†°S“°N÷yİZ"k‹}ÕSm‹ À¼–H˜ol™uE]µyq¤%'¬ø´M˜iΉ8îVF1) DpÉtj„’%±zÌŞïoi†@ofHõolìQ];á{À!d|„.PvÌŒ-øºÏ¿ì]¡ÇÆ<Š¢Eä%%“f0¾Ö Ùäáb!a)b”EWğ_¡tõ™o—4¨ S©xO ^ßl­‡«|¶jgwùPícöüüo¶ççhÏa:V œ#´PÆ?ˆ<ä˜éËìp»ÍÆ1T s(ݣ̈ԬäâPóˆ4™›Ã_fğvÿV,#5K“ôݰLòşh(âñt‡ABHı©òûÁmF ÔØE/Ê}İ]~(6zb೸NÓ¶½“QÊ(ß·/‹Wà«PÌôGr´uãzÚçT˜:Øfoı\¿gKKy†ŸR©E3[ÈòÄ×½£Lx÷DZw@¬«d|‘SuCy˜ŸKınáRuG J‡0™”j|(²¾:ã,€–+k·íüt^”BS¹ÆW2_@& @Akn y;-ÍYMJ¦’Áİê²Û‹:<ÔíÉ !Ê3 ÚSáˆ|õæ¶„N{ÈÊ’(Ær¶ı}1À6b°®ïğ]l®æïÓˆ\A Æ€±]D_–Ìp=3Üé6Š)N2!B`©=”Q (É…€ ä²ö;™Kê.€3 êøßwn¶NÉèû‘ ^:dеrë—¥c;1ê&ÛÛE}ËÔ…ƒ¿^ásfX.ë=x”z+n ˆ—ğr—wñĞó;Y#ˆœg^·ÙÖ¯*âí"•»L° 7º«ŠxpK.íCA 6*¾E òÜŞ;¸û¿¥¯öP7gê—¸CÕ[/ğ3çn‡bO‰Ğ*ãT•áê¥g‘ÜfŠldŒ!ȼ ÙMiıMÓøX¸aİ…G088Ì]Qíi©k `îhˆ{ì¶pUŒë'ÃDå·ÌÇÒ¶”‚p"·å±]Šh£ÉÕÅ–<şR×.z\éú)û°"¡Îêòlê—’fğë–¨6î¬Xº¢ôË· }`vO§ãþŠ2ŠvÕ^åzi’0=B'ç¥ÂD£—*ßœ²Æá.£¸‡2 B¯]vÌÈ=ÄÿyÇÔÿ c.¿~C¡ÙŞ£a,ü’bÏ :k{5ş¸~@+Œ!K]<„–ş¡‘<1 Îd#.0‚u”!)§®ˆ[(íjXh|bkú_TJ|·íSÜ`Üw9|ñP ˆNdĞȬ–r'‹õŒè«›'h¯• endstream endobj 1293 0 obj << /Length 2485 /Filter /FlateDecode >> stream xÚíYYܸ~Ÿ_Ñ»û5à¦EŠÔñ´p;Ø Øİ¬9°ŞÄ¬–Æ:<™À?>U¬ÒÕ#YÀvøa¦)²T,ÖñU±înwáîWáÅïo¯¯¾PÙ.Y¬âİõq'ãPÄq²‹M"Tdv×Åîçà/û,\Ş7íş¥:8»öÖá0 º¦í÷¿\ÿqbùôEº`—¡3 ÏËŞŞTNì:Lƒï›~PÊe}¸«lîÍP¶®£i‹?:èİùFiĞ´¶} ¥›áU(#×ÒSs$JxÛV(ËzwRd†Ñ•ÿô[ë(x±Ém׿Cê§/¤\Hl¤&%ş(–GJDšÄãú«Ğ„L" 1#M½Å#ÖãrÕÜîR¿•ŒE¢£ğ2"KâHü{gëì…ÁÉv4¸mH‹ğ? xñ F”Á¹A½âsµ—‘å¶*û= xåèM$–L÷{àä½¢¤ö,*Q v2+éúäpK”ç»Ê]oõ¶/q¯—"² ¼ÅÙÏğ™ı I¼ŸùÉ»¶A²·eá š¹aA‘®?ß²£‡yËÔoÙxõ²VQvOà@™lQ”Hd«ê=dœFO—Á+éÚöCk«¯qFy™˜æìl]Ö·4ߟlO£’İ?ì»ñ©ìú‰ºi ğä-¹jÔ3É+\ÃÄݧëé©°½}B³Jë†)#¤4Á©õ¯pD’íÆû“ëzzÌÑãlçÄh¬@è ãD$=)–<Ïß“vÈûòí>%U¥ç Öú÷AIFÀ5TkTBUê,8ZÏO'…'|¢'TN)œ@zà+cÄôˆ\HR7üëî).¤ÔÂdfm޼©ÑMS䮪:Ô°BO!êk"Aÿê¶,+•PòöS£ñ~ïA¾ë9ø¨We†Œ ÀÎİpÓõ–"¹ôê_bïê{!€-"]DÒ 2F 0vp¤=TàŒ­Zg‹z87]_=„'ÄœÊvà̲1ˆ²â­évÄNܬAÈ»¯™®¡ßª¬my®<óˈ³P`9x´ŞU®˜ã‹ãFKGEö†_KÓ#ªÁ‰Ø`ã‡üq”eè·}˜eÎ¥ş´Ì‹ĞÑ|é æESºwD”ã$'~+ 8ÉÓ`ÎnÜ£m†ÛÑœÏUÍ:TÁı©Ì‘ùiKi¹åôÂNB–~ª¦sœeÆ,t¦@½–¤Kñ»-Oô¤ªTfş¹:·LhÑx(®_h»Ü’È#Oğğ¥ğ1 g)Í¢¤—Îï ¼œôV›³'›˜s?úÇiòaΆ޽gxöô¡í6áúä}Iš<û¿IjÆl,h’}Tš ³a’àv9g8éãêz‡Ã–¹q[o ìähĞܵc?Ô˜tów§Lž‰^WĞDÔP 3^j‰^*T"&¼í€UÑ~õæ´©2LçÑ,d4ƒ}ú–eèşµ¯½õÄ”Ö"N.@¬jÈĞV­1 Å®Ùàèk4 3 -—¶;Œ@pr5WX’MîÄe'Öîà [i‘…É:_ÿH»¥“¿êæ C#Ò8Z'iº9x5ê’õV Ÿ$B†Ÿ#+ʘ“ìq^ÄÓŞ{ô\äE­’Qlv]y!ıxçƒ C!“µ+}¦«Ó‘®.ÊÑ…–{«ÄİÌdcŠ¢ìò;¾jocÇ`vSæztİ…ŠH‰J©JHÒgÕmÓ–ıé | h”<í[0'¨.ø+ÂjŸ3°Eˆ—:΂g´[Ë@­Ç5|ë»±dD)__½¹BO wr'ÓDy %aE»ü|õó/ᮀE@4ï=éy§RPm„ ¯v/¯şL—õUˆÀ}ËÆBÅÓ]ïê˜ïkHt ½Œbüİ/n’‘ˆLô î½É.çÒÉC"KVm §åî " {e@’~‚ ÿ8C˜Ây¡pÇDD¡xi®7CékŒ×`1÷}óÅXÿ=÷ I}mS%¡.[M—F=9 x'“~n{~Võlğ¼ õÿ½Ùãm³s±ã3Ây¿ÿ£ŸÂö=áş§©R–Øúbñÿi‹?‡’šJp×IvP®E:VTR(© üf"JSzÛ…oJe‚ŸÜíPùÖNb°óÛ:_®v·Ñ¡ ]ާ±EЈ”c[®Ğy[Şø¾ıØq°DwêœÖÜb›'Gß®ô$ÔvÀ‹¾ †²¢'¦nÖ-޽À8½ØsxOƒâlû±;‚5½L±ˆ?ÓÈŞZ(;ıÕ= :Ü£Çİ€²ó‹¾ àêÙ÷ƒ×¬jR£¢©†n¹QıøÃËïşFs-ë|£/0ˆ›åÔy½71JŸ„–F‹.tà/ít?Y]X–÷ênA‹(œ dÆnÅPMÍş–¢à¢A°¬ÎòŒšÔí$¬N×çƒEêhf#ö4–¦¸éÖÚœÚ=0Õ9ÿ Ã,{iş•ɾùQWäa‹U·ZdZ?ş„¡UFêÒPÓvÚD¾†3–(°µÉWÙû‹8·<’æ ÷JúÖ‚4ŞAü€ù›–gº›[³5Å–ƒ<£Nã¬Ôt½µoWZpÒ죂&fÇÇú™Z£¾ù ¿…µ}_Ñ“ y»ÑÃE˜ÃíhË ¼Œ¯ÔüyOCÇ.ïÓ¾mŞâ·6ˆ=šZ í[€p¢‡18Ú¾ÌçHxŸM©—ˆ+² ûV‰Q6âªL.{G«OÄ0Š–9âä[(³¼n$Ë®Ú[[ ›a§Dš­š)œV‚†ØSûæ«ÍØŸ™âfoğÛ(ş«şØtr!Hè¿[4½ù“xÑ%h×Á¹…ôMÿ˜! jÎvåqCLÌAÙ†JV1—'½ù,“JŸDR5û=Î-ıóÖÙŞg…EÆ`zC‚U JåE òÀg@vkä9êÀ5^¶pôÇŠ“*óçÌo›ŠKÒéÄ "á}É_)Ÿ{a(ŸKà,«©D$r‘ĞŘÒ·MHê€bÛÙ\¦ŞÁâ)zF’Sƒ)NLß'®p0ºFãëW,ıP_ ×°Ë‹3+0f?Gİdf‡l`akkßÎÂÏ"ş°’¦:;ÒïzÇ'ôœ^˜?ÇãK _€_@¥A“  fÇÁÖró÷󛬾’_î¸%9êw MPşÅ¾FÆB- µ$^=¿¾úãÁÔƒ endstream endobj 1297 0 obj << /Length 1770 /Filter /FlateDecode >> stream xÚÕXíŸÔ4şÎ_±€/]¥¡Iš¦E<|aUP{İÜne¯»¦]|ûÛ4é{{{xçù°Û6™Ly23™Ä›,&Şäî¯ó¼9»põö'‰€“Ùá{! 2 G„²Él>yâ<õ0Ÿ>›İ«Æ]½CÂÆ â :¬0ó2™kyc 1Âğh)/#5e؉â\*w­Ü,WIº˜ºÌó4u1£õÃ( [@=D<ܘ©¶9Q,J¡‹ °„ï7A¹}ÃÚ–NQ"à#Áş-G*Jr  *@«õ±[0UвLKóÙ'$¤ ¾‹ “óæƒù(àçÂG6€ÈLj‰„ôÜÆu›0ÂmÂ󦉇@=#MQ'‰;æ<GÜŞ*ç äøüXr!NàÁ[ãB ]`y~¨] JÍ€G¥l ›@”WÌ(™oUšM]'‚÷=Eñ/£Ü4ÅëtJB'’R6_JÛ¥;Y‘¤M…Åö$°c–3¤s#b†CKkxf:“TÃ[ ÔÖºG…¾W ˆ¹Sî0©ÑÎ6´(B L*ÃÖáÑ"0¥ç÷Ùј9»öB! ú,aĞÔ ÌtE«•íil %!ò@ËÒƒ© ’ şõŸ”éĞf`RF×q{–A¤aåmz!üM Æ«ïdƒ2× ^˘€e‹WÛ,yQ`Z†¬µY_7§÷D Ö"ó0|ËåŞZZpJ”'Ah9 ¬ÙÅ*ø¬µ ÚKµÇêIüÀ)V DŒ‹ÂËš”š~“Bà A°ÛŘ ı…è©_S0NTX;ô6“Ük5—6> ³æ[02ÖÖʹåˆ2ò®Ûñ5€ÉjÕfî$ÍåB8ì2¢Ş‘‡ÈÇU{İ-«¥ Ü&ØMçcı\ßÒ¹޸_f4ßÙ{tk¿ˆ½}ó]òˆJÒB¨í:Áº~è¡“dú©ù–J­•y=,_¢ÈâuŞ9)ò`/¬Áçk£Òæ ó±’™EñaqÆé—’±œk¯Ê O“Kb¤ÊIc‚!Hs†¢ÍF­7*‰tÀQJÛ´mş @Ğö®öÚ;*zÒ]eã Û+„‰ïÓ7RûÀ¾Â³Õ>:LU&ãl‰Ò¼Ã™Ä(æ6=•Ò‘šÌ6¦æ åoĞLQPâm­Æli1®W«µ}lvf£,ì)ÓÛtngTi€’s ë§r~m¨ÄEC® @)ÅU—Ê#­‘æU—/.#̹Äsy¸X&¿>_¥ëÍo*Ë·/_¾úıR¹^@|Ë”ífs’ƽ›·>»}çîçû÷¾øò«¯ï?øæá£Ù·ß}ÿø‡û«ªl³ŒdÄ &: Môw` c G¥ÕÑäÛ=L : x(FM,U:0ñzšõ·S¸Ù¦q¾-< ôñ¦‹O1õ/]~çİ÷Ş×ZÍ^qÑÕk×?úøÆ'Ÿ>Ñıú÷ì§ŸùãÏ¿ş…¾PÑfÙ²¼‹º²K·4€­ìÙinµOD5ëuYãÍ6Q\¬Ò^(Üsµ^5ğÚíÚÀ³s>XEés¨>B>:yÌT…7ìAEX§H‡*½>%_7á'l¢°a™GƒGq3´…óx™äÒÂòğˆëâ7E²Áo˜DğR¾œ'‹$o,ßP,˜D`‚·r®Şmp'áLL\¨¨1äİ:Ó1 Φ‹RîÉΠt»o²™È£çå¹J·ªõ‘íXZQ@mW¹i…´©r­lo’šÃï?ÚŒÌç¬İJÒY5¦¿dŞèbõü‚Aù]m„ڒ튃HUgsƒ­ÿ‡ƒÊ;Z¤îëP½MW×:úP`ÿ´*Ry L`g•¤pô@´ª‚‡,dP U‡­B“Kw¥±şæƒº½ u'6„Ê¿®É_H¥S¬fpeæ¤ÀP’ÓR`·ÿ€áxÀ9k^r„|äâÄ¥#ÏïÜQà Î<:b) 5eÄ)n4¥ ÊÒ=2ó‰ÑHŠi¬ „2‚(”OˆLõI9{i<¥ØY®•=áí:W DËJáõ ÆâöÍÍòHå#Åñøé‹;U­Ç•/7'W½Ä>ëe¹5B¦óÚ÷åg5!l» :va»ËäÉÛàoÏ.ü¦XÔq endstream endobj 1187 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1455 /Filter /FlateDecode >> stream xÚ­XKo#7 ¾ûWèØ^4)R,°l·@ ,vs r؇Qâ"ÉÛßrĞÌØã{ì‹ÁÑ|ÃÇGR¢ca\Œ?A!”âˆÄVȱŠãj ¥ºDÕŞ$'Ü ê”Ùvªöu-.K]E Áɘ\nbu•’!²«Rd“I¶n¦RóDl)âÇŒQÈ.2·5<&æ%à“™#óX`*RÄJM‚C9"Š+Y¢#¥\ÌR D³¡±9D^‚uQ"p>&HŬÇê(ªIE¤ÀªE³µ #lñ1ÌÅ& ÁBd$ğ”(Éf“`@#Á€™ÓdA]2'#t:*ÉL1>/…L®F‹f¨ŠY%øP[4à”chrÔ%0Åø Éœl ?œŒ[J )›ŸğŒÜRÆKIæüaÉæW¤Şè¦”ç­¬•¦^pÉ ğ›«%ˆ\©M‹°K¡™q ™0‰P9ÍQ”D‚&¡šµ· Iì­F—¤}«Ğ¢9ÂxL¹}«Ğ—ÙˆDîSÎæ’ŠU¥%mıËj{‹ÄØÖØI ¦9£x#·/*¤`#+ ºÑ‡¯ŸÜë>¾{ïºëõÏ'w»Â+³tıï?k¼øò×zÕ½…ÕõıÓ£µnS¶ê>­7?¾­·»F[ûsııîË›ÍOwcæÑ.Wº…¡/ø@0Ò€¯ïï7Ğv³İ‹ÌŸ³ °ê>ÿøúÔÿ¸»ÿ{Õ½Ù<|_?4åá¶ûĞı޽½‰íÁüù†HĞó¾ t ŸÑ¬è8/pÍìU p¯{Ÿ]÷Ûæzãºwî—G|y·¹÷ìõWãåÙ‘wî¦m™[êî>€HñAoUMëD/YıœÌÜå“%ûÉÚê<>YƒhÓa:^‚†1ˆü%¦~äËã«#ñå3â+séî°Ÿ Ød‘¸úÊâ‚ÀîS¹\® (ğaâq„áàÜ%ÌΣI†£›õƒÍ¬_1zÜ,§£ŒĞ¡gĞ‘çèèDÕK¤Ùê8HÁÁ½Ãœå€rôæJà@Ö—Çœöc&Z3ñLÌ€„â9– E¯2¥#f *Kke÷€¯uw&£u„Ñ#Ïqâ´Ïh™ct÷͈¾*• kôÌ£'ı ?SszoÇŞÙµ.±7qŞ'˜e9Á¬Ç ‚ƒóiàQ#ââhS‰¶.6Í܆ÕêqMš@HPIqK¡—Dˆ¨Ùã¾¼àÜ5öJñf³’‘¹1kÎ>r@²gM§œ#;$õ)?ÌlvõYÁb*eäìZN¥ğy7ºƒ³Ö KD>RDrFI>u ;²^b½Ğ ®#ƒ¸;ˆëŞ-׺‚›nŸ@ ù\Ò"ÌeJ+y©u³ø$õ”‘äĞ2y˜^ óÈé¢uy:òÜé20³y€ ÙÇD'uñQ„í4Ãƾ<2•d9ƒIcRçÎé"1áz1¥ƒ‰š…ÿDÀÊ  endstream endobj 1304 0 obj << /Length 2018 /Filter /FlateDecode >> stream xÚÅYK“Û6¾ûWh½jË„ñ&X9Å©8U©ÚK2U{HràH «$R!)Ïxı6ĞHJĞH±Ç›Ë/6º¿îÆĞÅfA?½¡á÷Ãİ›÷¹Y”¤Ô\/îLS¢u±Ğª \¨Åİzñ[öëĞÕÍ&–Üıüşãô­‰2 äùµ]Ó/saDVáOg7‡mÕaÇ>ï;Û÷uÛ`x¬líªaµä&{´şs SK–Ylß/s^dvS7 è‚´GÖ©µÈƒ*9c¤TAùŞ+ …ğBLfcw,`Ç5T›ªnúá;ìá§¹mü¬ gzì·Å…á Nâ2gtX÷Ça©u œŒ5A(y±@u¹“.à˜¤( *¯gDÀ'Œ«ì‡v·!,kûzpâ 5A³wââ;ÿÈäôZIY ÀÅaJı;eÅÉ'3Kp-q¼Õß©¢½ıó`›• j«ÉZÅ U2šÀR¹kƒ?€İ3¨¬(ÍB‰ñ…L7”†”ÂLvd¸h~€ƒ•ÇEÿHèÂ$)åE]^À(gl™`>ú a£ÈÁ0Ï“Œ¨R¼Hå- ™¯édÛœqC ¿‘<°ÂÌfJJR@+HŸ¹5/)ú7e¶j›U5ئ<¸9çÒnªzlTİæ°³s¦¡—P•Nùg ÿt™„kuQ§ªqİϸ§ókÏ'¼àDP>'Ï:àÉ^EGQE*’[ÜĞȾоû<$nT0ÂD\Hï-®HAå5û¡àüUí.©”åüèwñ$3 á:µ> '\*N¸Ôc8qcÓpâúHÅ®¨xrÏ~Úbé¹êªÕ`»0Y7‰£r ·²ä)dÏ€öõjázÁm·¶İ‹–‘ J -¾Ò6:»·Õğ—¹çü¾%æ:½™\æbZ¥æ÷­àX9•ÚC3 _GG•„Kşw¢#À"ÿ?ğìœ;`vÕó­ŠÈ‘m_Bˆ½n˜R’0mænôËäœ3#ׄ—çL#KŸ¸ÊRLãÆ¦LãúÈ4nÙ,š¸©ÿڮũ6|¼k;‹­Öç «Õ¡ë\ôì1Ò]Îdh¼¤‰á/Bsşÿ†åÓˆɆ†ú?5dÛ°Ïš·]KøØõÌéÂa;àÚ§z»ÅшvcìÜßw8òvF ]ÎO?Ô;¬”7ÖtÈ£@™7Cà8-.ÿ—3J8»*M8»Û©Âb£ŠßZšÀ€5IG{ñ… Ï«€q3±ÆHŞ!úqâÁ,\1Pš92ÉÓAj¯XôYû qm ğ MÕ ´âEÇzÊešaNã–:Ğ*PnÜù“ ‹lª-vVU†Ã5Ñwºv—:l!H1^ÀîmgQ²]rhSœÀ‰9ÁqÒ™€Ms=€íĞö†Ú¥›K‚;rÑ«í¡¯?9d,IíG9a#²ÿNmÈ%‘b’ğm ŸŠ±Ñ&䟉œDLr T?=ÖÑá ‹÷âZ`¡]hÖܽ·Ø´ê]°o_¬D—r^ò¤İUJ$$9-›ûb¥SŒäÿƒ¬çŞÈˆ‘Õ Jì„ÅÀù¯ÚKiâ’ş±=lרk°oìxwpøP{·MŞØ Ôx縢F·H¿K¨’3]ÃNl*i}j†ñ=䨓¯ıkw7X4Dı|Ñ„NOlÎÔ ÅTM€ø’Hò!ú‰¢¼İ´’O9W !ˆ¿HÈã‹’A¡²Ş6=øÕ§zX ¶¶!¿>üŸ„„˜=b„ŠÊQèvÕÖôœç}|Aé]6…&btµör•\I$ŒYÆTo@!›{_;· 0Iõ-’lö­ÒH`dʾ2<ôyù]èïCä$\0 JÆ!Buz Ÿ– ƒí!t'qz÷Îğ>§%(ä4ó±ìûıu•æ÷BÀO4á†&ôŸ2}­áéş4o˜|YïÖŞ²+=ßnjÚ~WÔ¡?Ñáe=äùrâr¡ãüеÜt¹æ á· ¹İBÒ\ÁÕ4m¼`"37r® Ó‚0­n¼µø¿¨É=¶Miá";/‹Ó g’´¤ŒvpÙòQôDáW0‹z)ÆæW.õÕÉÈ Œì&ˆ¸ã?ş:¸ÂªBã(ƒ*ÂÌıx÷æ*· endstream endobj 1308 0 obj << /Length 2473 /Filter /FlateDecode >> stream xÚÍÛnãÆõ}¿B;PÀr–3ù°/…d ·HS` $@Òš¢dbeÊ%©¬ı÷=gÎğ2%{cí 9÷9÷Û$«İ*Yıí]âÿ½y÷ñ“0+ÎY¦”XİlW<ÑÌêl¥•aBªÕÍfõk¤˜àL­cÎ…Š>oïó®XKİ•í:–FEy½¡͈讪wëßüıã'»ÊX¦…ÆÃ“UÌ-“6£c¯Ö±P6j·Ğ0QùøĞ”m[jÿZup ¶M”ÓĞ>oveCíp¹‰ŠÜïÃÓ`šFïóæË»šÌ[ÿ§éÖ#×ß±uœò,úù®¬t­# A‹Ç§B÷b¿jé?œ³æx964ïrÀ‚G-u~Œ~m×>@'UQwWúÑcQÀÔ94ôßæÕşØø‡­%÷7ú}·ñà˜ÅeBg#Yµ…;óFjB±ÂMùàÈyhºró›‚hs_ñòr¿§f„6ö·³È;ªu€OÖ8ŞÀõ pd”iäå„:y‡•”=ÑÄíöÔŞÓ¢¿ù w ²ÿñO'¢ ×f®7,±şúßnf[ÄTš] &üb•øËîHğ…š¬U‚%À¿øKù´U’DÍZ¡°ÀgüÆé%iƬ˜ŞÂiQ| ÊûEZ¸Ÿ§,KÓ~ŵçès©4i(RßLšú÷Ô.Âg,‰¾ßì™0+íKÈ"^E–Ùµ1O5ã@Cû>|¸§Y29¿ìMí[ à0¶;‚U£±Ğ´¯¸lT¿½êúsšİñ,Lv~¤ŞĞ¦"?¶DíUì! ¸H'ÕD{Üwd†œm±áFTN7BWÂ’Ù•0Õè?((:1´ó÷<ù=pû)……6,MdO²3tö«lø‡Æ[šr&’-ğ9™9•â€-“£Â9ã.m„D¤!Ta¤ª7˜¶’zDJ˜nÈ9ÔÑœ£¨[C§™è!oºªğ|—6°Rıéıò&ØÎ÷U;é¸ê ¬¦wÛã׆&ĞIŒ‘$JiÏ•Sfp<Ç *1P ¼¨î^Õ=«á‚ß×JøÇ’º÷ùdnğÖ)XñÌ©ó&µ‚iXÓ @³­MG tY¦‰Óş@&şyj¨¦› ‚œ*´ÊÅøŸ*1ö«WôJ‚ÔÅMuıމF}À!Œ†Šò¡£i²n!x[ÇyHûœÓèï­_ÑSz‚—µw£{póbßhş Èë§ØQõ/ Õ’)yÖ ;O9F ³›4x‚L½±ƒ¼ÅÛî³wäõe'©2¦RıJ'Y>æEwJFÔ+¨”¾±¿üf*™„%‰y%•Î…X§Hıÿ$D¨»¢ø…ĞN±Ôdıê÷Ûghg˜uÇ«i·øŸ%54 L÷‚µŸyh–YûÆ´oZ>^&€€HXñ7!@ ÒBŒÎΪ·C_¼)úæÇï}ªÃ3ËÄiqóyPß”í«@y|º<>¾1e&bfùœI4¸Xµ–v˜,ØñÃÍ»ÿÎ endstream endobj 1312 0 obj << /Length 1184 /Filter /FlateDecode >> stream xÚ½XMsÛ6½ûW°ÎÁT§„‰~åÒ‰“ºM§‡6Ö­éL( ”9#‘. :òôÏw)RblÇ–}Ğ vvß.hûÎÊñ_O|;^ÌOÎ/Yì$$ YèÌs‡†> ÃÈ E@àÅ|éüí~ö_nÓLy›Te×?ϼ€îMª”¬K\œ¦‹ìptöÏü÷óK*†&cNüCc턌½„&¼C¼Qâx4‰ ˜P’Àød¶Ç#“?“Ìv ±Ù¾ !ÆIBé¡òâ9š0Šá´ä&Iâ0 éãÀ'lŠˆøQïu5aÔƒ @&æ8¼¢<¾Éâèº8fFÁó2b”¹ ÅZ*4«ú·İ-¾õ²‘ÿ¶²Ìä[Õ篚CyGHãŞ´‹Í³¼ª&meKc«·ç[KáÎÒ-ó1îó±wȬNíRæ6»ã-'ŒMe]4ÖÍ~X¼î,²±€}«{)òÇÖÖv5¥ê>I@‡äI·Œ²!9ıëSHpxó íï!à=‰°6:ä;H7óÉA-$ÖˆÃ} Ào‡ŞcÉê_öårz î®*¥Wåã«{•ô–%±à–á"­'Í]¼UÊ^‰‰»x?®Ü½œy<$!hè … =ÏÑšÀ!<®Ö9T.àÚĞ! ,!QIáœú™ŞW4wJÁÿÕ§Ë îŒÇ݃1âó7|Ѱ³™Ç)u•–ËçyUãäËU6c±{-7|ÒúÔÍL/.g1w;èÇÍÍ`¥Æ«TUyyÕvvS5¡%_ùBôjºVêæíùySçi2º!U½:Ôȇ`Ên$X¬<‰P¨Øv»‘:¸pE¬G}ºlİ.õ•fV½2"« ûÂdF îÏ!ÂÕz]iä×¢\ák,\“"S桉Ï[Í­ÿ‹çğ¦dpÙD¢+'íÁ‡§Ö³¾6­À EbÿáêsãlQ§õİ}ş=4©IpøŠy Ö‘˜èŒÄIĞm¥yğ%öã½´ íÆAŒ¼EKŒbó[µ©V²”Uk³kò µS>¸Õb‘™26.SPƒ~vwc´zöŠ“ÖJ¥¬8°@¤UG×_>úÁc£¯¿«)!şî{çk¡®ÑjS¬ÊTµuwhlFğ¢–ÆÒzÕv µ¹÷¬ÜĞÑ22z‘6]êUÛr.&«ªàt´øG#RÖÕªN7¸ÈªR7†U[c'}>ñcõPËL·òuŠ1Eéƒ4 ³o¡@¥2W"@F%§¯³WÊ#÷Ò«;û©°Åu޵ [O}£QíZp‰ àv„nºnå˜8|Á=ê`&$í?¸búe~ò?åןi endstream endobj 1316 0 obj << /Length 892 /Filter /FlateDecode >> stream xÚÅWÁr›0½ç+è poqj'é¤m&¸½4=( cMy$‘ÚéÏWB@,7“iÆõ$YZä§İ·oW¾UZ¾uq⌳åÉéDÖÔ›ÆAl-W€—‚ĞŠ'‰„kYXßí;$ÎåÇñ»ÓEº÷œ…b½³ÍnW†¡ B9Föoõ3ã7¥š_ã{ éîàL ˆ«Nu ˜…#Òpœ¯!…9GÔÍ×átfwşÄg©†ğ~vï¸Aj£Š8bø%Œ€!ô±îÅ]#p¸U¿W„ªı %abç¨h)bj‘¬”Õƒ3™Ø:ÀÆğ¾BjRÌåYÿ†à¨{$Ú=.Pƒ(¬ğ#*äY§‹`ÿ à^ pô§0Äß½€ÀIò&şj8—¸î ğr¨¶–×6ŠLí¦P“›.é#$  ômÛ4c®e¹„»Fuö,§xÃ{ؤQã×o AÕUaN©bphS¤\J(Á×H Oìµ`.l0«P5˜h?µÇn!ˆĞ0LX©å3J¡JŸÎø†âsüà(R˜ñ¥® Ÿ ‡!•!ÎëÉšc™r½wf V¨a„öŒø…ùš´½0·”™ëè‘‘–æC~)%‹ì[‘h¤Vk3Ì™B¤°d8WÓ…“ l´†|¿È 4Xgj`{±™P?'² òâÉx.©Öi6SÏÁ`²zJÕ¼¥L’=±{yD¢ÆÄ6¬ZEÁÕ: ½X@y èµ}¾ÍÑæ).YªQKÆ„] Ò›áN¨“Ò’¹+Rï7ŠD«·„4Ú´Blº:¯V6cQaLÜ»"ÿ9vi­ÒĞ^Ö£WøóH\z­›Ãõ¬<'õ†¢µ’i3ÑôjöMÊÊù'•É>7ÒËÖAAÒS`¾blÌ+Qà`¬L®áã®}UÑ+®ME8Ö™w¥2•}IÃ^_„ô¬ÔÖ„öÎ*U;«–s24ƒy[†Œ01ÖÓ"sQâA sRw¢’ØÆœ¦'Ç%©‰ôiõ9²/eÿ¡ïİ•)¬z+õE<ùaN›‘”X/RÔ Eÿñq‘D»Æ=+ É.T ™ØŒUaVõ/QɵŸ¦@ê-Ú5.ת~Ê×zצŒ+GŒ6¶ˆ€8]>#§^š¦ê?Rı¡?_üm€: endstream endobj 1320 0 obj << /Length 1338 /Filter /FlateDecode >> stream xÚ•WM“£6½ï¯àˆ«-’@‚¦*©dR›ãŒo»{`@¶©µÁA8ù÷éV l ó±[RKju¿~İq° âàïO±oÿXúrŸ9Ë•PÁzp3¥t RÍ„Lƒu| ÿlW‘ÈÂòt0Í :}Ñ×m³Š¤”!µIØïŒ5$* ?÷ä¶Z°Yñ°=5Š–À6êœWB‡æ‰¶î½Ø¨C<ÏT$*Hm‹–ü‡†­~¬ÿ xÂò$ "ÎYzËî¿Âj‡ 6<´G²©¬¿Ç<1–&Ñ`œ5ϽéšbOÒÎ;pŠ ğ.£|ÓvÔÙµ‡vkÓ,íwèJ]]’€ì+û¶³ÎÆhÉÈ~‡h$R…µõmS¶‡#ù´7(Ñá¹îw4÷€Š¾ÜCˆX®eæ‚&@k*É÷:SZuÚ„%*¢«EŒt®w†:%:»3?N2jÉÎ: Ğvã78€İRj*âŠñ4mï9K„˜znOGŠGÛ|@ °w‰òå‹~ï]Ë'ÔûS墭=ç°sì<±Muê !&&Ù 3&©âGwå®è"kú9ºiÊb!‡•ç04ïüùşdDÃu jl_4UÑU4z¤-¾ƒLÄpzœ{çi®+™¨³ğ{œÆ5ÒSë%‚(ÉR)?Ô[üĞD5Ѓz¼ JÍş…Dù÷Tw¦¢Ñ²Mà\××Í–Ö8/ œ §ÙˆğÜ,Íò<æk» ˆ¥ø‡5ôÖì¼Ç*üÚ\\%ì³”¥#ö±.r¤Äì@ªN²'0;p‚˜ˆ=d"ΜWCE”á®ğ%L’Î4ÅPû(ÀŒgd¢£¿Åb\@qiıü¦6 ÔyMII ”\J;™äáSİTxK#ºP<^0(ÊÒXXE·"‰† wh)¬|¡~ëKv㸄º4PÉRøØÕEï¶ïNeï“y¹Úbª£!“õ7 )δ·İ¦öÜéu`ãée30c*O‡ù²õ¬n,YàP›«…Œ•C­bR©a™LêÜÕí ö÷xó¥â;Nó8e™V¯õüt)™æ£yŞê‚gèÉÓ›ü9Y aš‰vszj“‘ºŸ÷`uD&DèmWæ¦p¨’-=Sozıñô»~ş*3ÏÅá¸Gƒ77ü&c— Ü1*ËSE=³åBş&)8Ÿ,È$Kĵ`:×ÓœÁ?† ©”me.£ÊlêÆŸ©á1ÖÑá7·4¦Éå©:å2~áëG:’Œ0Öµû½ûŠ9Ûß~¥0øóïÈjªߟW]ª¶ÛsİÉ›šâf0N—ޱQÇ÷NşxëL³QßÂ:”ß è/Ìóøõ]×Pİ~½B èo gqî­ÍÄdË_ëOÿ¥¦Ğ endstream endobj 1324 0 obj << /Length 1580 /Filter /FlateDecode >> stream xÚ­XßoÛ6~ï_¡a/21â/‘ê€XW-° hܧ´ªÍØÉä¦öÇïNG)¢­´.¶—˜:Ş‘Çï>Ş“FÛ(şx‘úßßV/®—ÂD"eY&t´º‹xš1›å‘¶)ÓÒD«Mt¿Ş‡Î5‹Dg‹O«wd¦˜±†£Y%š3“ 2øP•ëÔy¼q¤n£œå™Èe ¦š”oÖ aã»w‹DÉ4V–~ïûı# E·ÇÃa‘€Vİt-;½ù›æÀc•‘ìcªS¿5èn|ó—‹$“ælú,šb óK6îиÖU8Õ¡Ûè)ç,×:8V¿6˜(·ëb_44ş²Ğ:.öG×^Àˆ¸¨64lV]SV[ÜUEã¥EÓ¨÷ØÒw}çµ Ã}2Ú‡-cLügݸ9wËê®nî‹®¬+ˆ…”1ı*8Ç‚ÇÓ£ p]x­Ï½ØÑÇ]}ÄSà°è|ä§±äÆ2 Ô¶ÜuİáåõõÃÃ;"XÇêf{}Μ¹ìØH*®˜T™@Dä–Y!#ˆ¨H5cáB#-Çø!3{¼qĞí\éÙ:Ò°å¡ĞL§òœ‡BȇB€±'„kª¢'$ʪ´¤J)Ô+üoÈ” ÌAË ¢*5ñ C¾ƒ ¹È%ĘÛróùñ’A1 pï¸îH:É-àCg(Ê Qäy|hĞQ¯İ´¼ˆèÁ?®é€Æ$÷¤éPş°sç*oq Ê(R0h×xRB¿=I@çÌÔµ/Q>¦¯ë%WSJ±<—}HmÆÉäcÊ͉Ie?€Äì±G“W›ä †Ä@O7J£Úvh3& xª&ksÒ ]†KÀG~šÛK±\Ë”UçšÇ[×| ‰„ëœi~ùc CòjrÌo€qâá)uS¦L~ (ürPÇG#ƒ­B6ı'4~qÊäL€àrìÿLϸ_İÿÙ÷{CB?ß:á *@$crÌ:ƒRùìùöI¦°šõq&YB½X!+ÌT+˜°#i#epFU)SyÈÿ“Ô…©)1Má Ûâ1PVw”{!554»Á‚Ù¸>[uåq†–Q6粄º¥G ß\àrnà¡lË-›–ö.¼‡®ijïNyG¿‡¢m]œYfL¤:dùPÓ‡†^oûN„İJ:M·ÔàêÆM !EÑÒşĞı.Y.møWݹpuEô@QXÃÕåSÿDŸMQm}kRöÅ;2Š¥©ÏğÆõ6õ7‡O¯"3j$Ì/ç`+¦ÄØzü<³€e6ò _gnfY>Fëw³\o"2@g¼/Ÿf.8ÀgG’ܯ€$Ê휟êÔ\ìç›4CKH&­ú\ö{p‰‹İàér9˜4ĞIÊ0Œ5–uımßZ ³Àû¸>‰®ğJ¤@¶Ì0ë¾®÷Ç u0™'!ˆÛ#Ü£mÑõm:Z<ìJÊF4ÿaµ„ŠAFÇÖùźš$n¸÷}* Ni3¬Ldi]…Lè& nƒâ÷´éEŪì¼fßkDç'ú'hÒAšô—×­»’’=ví’‹1œ¼÷SŠ+Š©ïF9¥Aø…à€ÙÑõ~÷eåh!|˜,w}6…áÔ³Şì8ö{×§çhç¼.†—–O˜ğ&®ïÑg2(´ëşiÜûáÍæóõ{ºd&‚Td¤¥÷š`²dT³7>ƒê9Qzså_¾T´®wëѾ–ÂÜÍûå[’M¥nTq™‡ÅbE±×s ÃR)§~êËü¤écÇWÌy‘γrÚC&¯°i¶©®Á†Œ©ø¹>…é\Lû?Xê¹r²`ãqh+jRïı5ÁXÎ4qȨ°Á¹¤‰3™ùÎIr&ø‘†+WŒ?Õ:Ï€˜\D+©eûnx݃5Ôxî3k-­ae ôfõâ_Gc³ endstream endobj 1329 0 obj << /Length 1161 /Filter /FlateDecode >> stream xÚÍ—Ks£8ÇïùTíapÕXA˜ÛîÔfkö˜xN›=( ÇÔbğv’o¿İøc›!S®=IèÑúw«‘~ ¼g/ğş¸ Úò·ÙÍí“„‹ˆy³¹G£€D‘ô¢PÆCo–zùa“)¥,ô¿.t¥“ÆT“)—¡¯‹ÔUê¦ÊŠgWÏ3è×y=ù{öçíòbG,Bã7e”(FÙÙÂL¦!g~ıVL˜òıÚ~¯&S&}è¥~’=TL¨ûJqõ¦j§fu[®'ÏŠ¶ç%k®Ö¸uÀÖºª ,%ıÆ5|/²¤„µ”Ÿ¶³VUé/k»¦yY¡+¨R‡mPî*K®Ğ?I8'ÚÀÇ@ÅŞtoĞıÃg\Ä}]»²6«ÀÊèVÑ?,îï¾¹š qš |óš˜Õn†«$º6ÓÚuÖd›¬Áğ¾M÷ úÄıÇ l]˜¥qS„j—ª÷LXÏÑoğCÿ³¢3f “Ô¹‹e²nÓ%‘q´Í%Bû³élâPEx¼—7LEàm‰‘—¸£/6ÿ˜ }çÖÖ2,ôÒÔ®WWídÃ6“š²\?å.Űcm‡¦)¸W®µ)]ëËB7®¥'˜DB¤ö¶7ìÍù.œmÈ>ôe“˜Ô&|ı§oÿØÛ;*ö Ada ò‰ÆDÄÒYƒF¾›Åö—LJ;ø—GÊE±ÎU20)·ã0c~}øúÍş-˜‚EA·ç'õq°Á#+OR:VÎuµ<Æc~V ¼(PÄDÅø¤“ê•ṈH8Oü2gDª‹"%Ø ê£"ı4f“ã+mò¦WwÿÓ}”^ŞdwZ'¸ÒÏf”@öcGG°2ͺ*z›ĞHœ•È/J Áì”hêdL2y¥$¬ÖOåºÂN _¼Ó4$QL»a‹4%Jnõ÷Y U7 ë±w¸ˆ‡[è—°=Ch$]a!C,òŠL3`šU%Y“¿Á· |‹5PfËÃöÔäÙ°!mç½X2<ÖÆ¢øÿq6>iÇc@DêÈŠ²AÈÁd´Ä ,ê× Ş®Ñ±rκí-çÃ9¢“Ü¡SÌM™ q [¤“;¤ëCÈsjè„°@‡4§ZšàÂö9€ xW»yHlXvÏ—#D5¢*¨i¬ óµë¶ˆsŞs 94¹ƒ@üìy 8$Äö !‡àj‰0> stream xÚİZİoÜ6Ï_±÷&+R¤HõÚ¸àôà‚؇>´÷ ke[W­´vëÈ3JZj¹şˆ \q/ERÃá|üæc¬nVÉêı«dñüÛå«ïŞq¹ÊY‰luy½â‚3ÃÓU¦4©Z]®W¿F¿%\ŸıûòÓwß½æà#¥°@›y*qó‚°rã–[Z?$‘2£Õ¸ŞVwMİV*©`™šöÕBši™OÚ3a¢]_Xrqš¦Ñİm½«†mQ†È›ŒéDL_?Àæ÷@1×QÕÔëj}‹4I©¤hš½h® ÇP·7M'vb×Ãw›Û-ºŠ¹LXb2p–+§ˆ¡Û÷¥»à<¾ĞŒw¡˜T‹„eÆ|£6?$Å&3ş€Bå¸ş9lÊß½&>ߨŒÎ;7ó¡¥[úP¹™®ÇA3:¼“{ù8.,ÇÊt$|1Î^lÆÁïî„‹qO×ÓómgnÅ%Ë¥D¹3.m~èúÊ*÷üSõÆ8ªU¸€•DW…5߇¦niªØn­$«}÷ZÃÀz 'Âú•İÕ5–tÕ;ZµkûÁ½ »¢ß'ñĞ)Ó:ÿ Dê‰(½'Š• ÷m²?rêAk0èxµóJ‹ˆ5Â(æC£ŠºgUC¦d=A«lÛ)LR,¶löÖ™4!ƒ]¼­f0>0G0ô]å9’3Fpâ™lA¦¼°:\©wCÕ\ÓriÙ…I¢ïr¡Áİ»¤›­Å!$\)¤ôÍJ½ YdŒ+1kmŠ\’¥2£È%à D,8®dÆÈ5Æ­·¾üJ¸Ò`9б êE±²œ7àg†C—WÖNz—6È  \sÙÌ.u_àÊrŠ\ê r‰e؆©4ÚN ¼®aT:8¾†Ä J³˜K Ï©÷OÇœàÁ¨9<“/KR`ÓİU}Œr{!‚ûíö9c™€«ÃÏ/-åv¿©úº Í4Ëó²dº`HT .á¢ÙŞWÕ.HÙgø+Ät"¾ë+r:鼿®÷ãê"^ÂL_´7U¨ÁÀóÌ/oI’ÖœxR9€é„•ákBr&2åİsİݵa‚:-βŞ;„½ ¯„oA üØ?¥¬ ˆQj–èôi†TÖ?¼¥S ²ãä^RqšÁ ³1–õ›ãîÍ·qç‘¢Jø„ø–]òé´~8Eëøzó’|…. ~¤3ù€:¦Õ2u8ü1 -<Ÿr£Éÿ÷ƒsìÉû!k×EïâæPo¶ÍØe (€ ½Šëv¨ÚòJOÁ…‹c*]³)ñw¬x±8?¥şŒ‰en¦Š1Q~Á˶`ç¶§”rœfğrlQ·z”ɹ_W±5f»›Cy6·@àûr·ïİñטpã`Óõ®Ä™´õœïvŠ«"ğʨ(Ëjhl“ªÌÕË8ªI ÷++ º”QdI(£€ıwõîvA4á :ÛrÂ)X*mÊj ׿8dŦ(ûnøş¾^ĞÈ©Õ$ó'´š¦ {g®4‹§ªŒ4¨¿›O€o?8ƒò?²O2<ìÇ<ŠÛb2ƒ\CvÂNæ¡n SjÚó—+~Çè^VÍ âÖܾPf^|¾·›—‰\å¾Â-äŸBWKë‹~Õ³€7#!Tg‚‹{eH¾ïv\¡À:û§±Â£vèIpˆâÉ2áz¶@âzIΔɯn±ÈSR“½°¸\ ù> ®X‚~ù, Y||„srğşÄOûCy,nzaQ<Íûb®|°²ÅTšğ…3.­CYåÃÏ‘HŒÿ“B6mï+í@Ç`Á›$Ë s –úS°ÔAÙ«TôŸªÜ9"Ãà`<æ©3 4¯áûµKŠ1.ËQæÌpùt@=§PóËD[ù¨**ßÕ7{ ‘`tÉŠ¯z´<|zÿjõ«e*nÏ*İ´+õ]c³Áø‘jqn¦Èş> r)š¾Ä°( ¶R%\»¯Ö5R¢Šú°çHıvÖ*)³J‚ı\Bfx’Ó }üÛ‹Y~dH#§”zä™í xY–o_¶´Ÿ¹…·z=IVQ½N¿NÁ˜~Õ:zkêÁ™TJí?˜û6íZßIHHPL6¡åÛÓèãëÓ}æésö¹9ã•>f3ÖÉǰ‡êZM…[F`GEhı?I—¢ıó'G +™²Dç¤Ù ›g:cs#ÁqªÇ~šF|ÁB­¦Ø9-š±Ï;¡ ~ÑѳŞ9V†p1ªÓIÁ .s×”µìÒûHı+6N5Ø­¨p´_ ‹Ûø|·ñónC€ÏÑ/ƒ%6„$–ˆìȲïÁm÷…ßÚ˜-ûªÇé&ønE-q|€]ö2%œÀLÉ–Õ¶„F‘ô+åšÈœÈ °lîÏ‹±ø§İŞMÂ)“«~_ğwâóÁþg|XKg¨—!o;'1Ôœq¿ËwÈ’¸@:Ó~Ÿæ„ p¦fxL—xO¤ìÚN¶ú‘IäìYòE¯×ÈäQŸÃ~çHà~î'h¸ÅREسŠİÏ.£TYH(×`5$6éç‹ÎÈŠƒàÏ’13şãQަ¿_¾ú/„Òf endstream endobj 1341 0 obj << /Length 1386 /Filter /FlateDecode >> stream xÚÍWKë4ŞÏ¯¬RéÆ×ŸaƒÄˆA°`1SV\iâN#Ò¤rÒ; âÇsühš´iU wS»Î±ÏçóøÎ1^#ığ€OÆï–Ÿ‹2”‰TDËuDDŠ„ˆ—(¥Ú¢2$?ì±òAh|nŠf£s‰—™âÅ(%ä ôÕŒ*ÂPƆcV NâÖıÔÚysrµÉñ a )FaBPÆïc9{PĨ¸—=ÒÛíqPuÙT!ñ{`İÖå…ûK…R,ş‡x¸  ®Íå"JRğ øß ?Îŵšº1;º±×]ß-*²¸ZÛQŹÿ[,RÃayÑk$:/Q5şÿ ÍÀ#œ )7?΄×X\ ¤2y6ºß›¦³bQB ä;>qo¿Ñ‹„ qaÿʸh÷E w¹éıb»ö²¹àjr¸Ú,v%‘ t‚}è ş´r]€¶9€ ğD@"‰»Z* 8›^mbù`jÂâ ‘гx›ï¬«Ş¯ô­÷»İ"­Úx}v ²€™®§ fº§n­²7k¿ ´@–ÇËM8®cedüV5¯~ÉŠ%?À…Ğv^ŠÒxgZ‡¦ĞåŞèÎ/¶V=eq× ‹¹Ñabõ|^ppTUç«Zs-íAq–Nƒÿç¼Ç‘ìw7å¼—Ëz$æwNû£¶+Ä—!œfÿ‘ø‚Êö­¹Dı î=ÍŞ× ,CìNV¸V3:æ¨//8C@¸w1Õ:øeÔ‚[m˜:¡ 1ǃÀBÕvWë­ö¥Á.IÏÎö[ç>úÅÀœ°Ȭó륶LÚèÒ\ÙsŞı¼ß,H6ıÒT…§½2ØõySæ¦ükB˜Á;MÛƒX*-˜¼?ÌÜ’ˆkݼÂÙnÑ–ÑGXØ÷»}ØŒâ6m‡¾û?+_¼TYÁ ¨6ƒ ìâÚ´ÛS'º”{«j†ï½âC•ÖW”‰Ô:$›ˆ^R ¶€­)_Ÿ~ËHvîGØ–2„ñÑPRvÙìr£ÕO„²Çc‹Âìñºï¾vÁæ¤&nÏûÊÖ·F{ǹĞMgCXvf]%shFŠªQlî h[ä*t/)°Mü¾Ş×õ»¯yãˆIŠğV¹‡{›]y°ë³x~¹É³=+QaºdoQ•3½€¬VsW¦˜Æú߀´Æõ”˜…Ãsİ,úè;È͵a q"ÇôdÑ-Ä2áƒTbà15{]­Ln‚ám˜Û‘£Œø¦¤4ùºŸ~|öGËH L‚e)DxD¡A ÇŠ™È@L@A w܉>Ϭº¡íıOmt^¾ûÏ®ÉvfMCÂòÈ‹ÅÂü…Š€Ó3wMûª ¥Ü‘kŸU©§“qÎ'Mk¶y]ı©“f]ÎQÛŒÜï· —Éfz`1wàùCö²D2<’feÆUğîcëxA`ÜV]¸Ó j®¼œl x ©k9N2$2qsÓ™ üåb´kıÌg» Ùî¾Í)Æ–şäø-›¼êF›¼ã÷úµ…„<ƒ”†¨ğNÙ#¼ 1FR¯ͯ\9W-¶‚ÚY¨Òç3Ğ„³Á1R"Ì*ü ó•ß endstream endobj 1345 0 obj << /Length 1841 /Filter /FlateDecode >> stream xÚÍY_Û6 ï§H»8ë,É’å½ íĞn(ÚMŸÖ=øåḇ3Ûéõ¾ıHQvâĹ^ÿ »—X¢$Ф¨)&šİ΢ÙoÏ"ÿ}µxvy%’™Œµ˜-V3ift:ÓJ³XšÙb9û3ĞLÏCÎ… ®/ßÍÿZü~yef)KµĞ¸&š…B0®šıÇ\˜ nºvÆ© 6Øİµõl•×ó(KK„¬Âñ{êtö³Ÿ—Ñg;çASß6Ù†úwMÑYϸ«î[ïºí®ë×…"A!¦ÒçÆmÙYT¥çœ¥J‘ô­ıgBÚ‹y¨¸æKX“¨ ¯AĞ$ø„KmÓÚEN4èq¨æ®×³k©{·¶µ2b»´Zc³¥Ÿè,q(&ñVM“µ&µuÕvV꨷u²€âlšX‹µmìªnœ>QØ,GùÖÄc˜MİuÖygmKÊåEÖÙ%½Pg/’„  D$?@ù\ñ Æ0 üæ§~Xʇ¥ëŒ4¥P,õø\–¶Í›âÆIƒÖ”Rëu¹ÃN<ö,uG‡Ñ!¥dn/ğü4a'ğߘÓNok<<™D$’o9kã–mVYŞÏªGs"oœíöMPê¯vUŞu••Eçİ-}íg:ÛKe% ¡2Î8ƒÄ¶ñNyO†(‹¿]¿¼÷ÚÖôÍÑ×Yu뭪и“®œíËüA2¸]DË 3I2`ãóìOJ+§´¨t;‰ܰDzw÷ô{N‹“´wŒâ²>åÃSqÑOi»f—£äıŒx\‘›Ä½‚2XÕeI.ST·D‚ûGn—°¼ıwğñòŠÇ{‚v,N Øä3Şö°Sr´h¤‹kõr~ŒT´…뢋„yqz§ŒaÀÔ¯Ùº‹ÔtvKrɘsš4’šGLğaÒó‰ı¼K\ápòöµ \–r5vʯ6Lk»ğÈ8“Ò‚¸†§'æqğv^ø£İuÌ”§¦3#½RÎDšø—mÜ9€4ÁB(È›’Ş›ˆØØ®),İQ¢PPá ¢Cç9­-Q<€©Ç,¸“0†Z¸ Çìˆw8¡ÀÛ»ö;}À÷‹©Pz¼PúÔc†‘ÄbÇK¼"Ñ>DI‘yVÕ‰ v8Ö£lN#õŠè™ç³6ê× €cÀwAM´X`¸ÄÙÅŠ¨…_µe³vJ«¬Ä0걯ÇSˆ€ëÃæ0ê1ÊÃàyÄãk│#f”úáÀE À–àôÔŞdySĞÒ˜ £$Ç©øÆ{»W÷—‰ëªíõ.Ÿ'Œ§˜1ñx»  .€eD°(eI$¿Áª]YÀúÈGŒf©8‚ÙıyH:‘BRnôwH·kì͋âI Wf]Q…üi®[…æÉJÆuiÿsáô7 wcŸ¬å¤(Ÿ²pOÔr÷«¢Z~Mş !ƒÖDĞT¹êÿ™Ğ%‡u3•rŦ_şÓŠ^Y°'SZ"ãâ8Ğø(¦’Ai|ÑÅÊGğXá;¿Ïã0¡+rle®H³ ;ñÓ)ûƒÖşH[6•ù+ÈL³¼ıRì1‚¥† ·…gfÖ„^ã"`bÆÎQ¸*¤‚KiJƒÀs̹©íè MR¨–úô„ÆVåSà†º÷…-—ÔÄ †ŸD™14Ú;Ìş²>íñ£ı.Tê45Iâ>%;Îs&¥ûTUéCó¡ØlK»ÁS±½¢n…ËÀ ñá}øòı¯×nÕõÑŞPÜÂÁ‡ªû8W¡q£GÃ))‹GR¹%\S/[Yt•­–EVá¹À 6;¿ò¦¸=^Y&Å”dç¶ÇäsÌÇQˆË> stream xÚÕZKsܸ¾ûWÌf/£Z&7'oÊÚrª69¬öäÍâ`$–G¤ŠäØV~}ºÑàS˜‘-;•ÊajÀthô L7·›tóë«4üÿrıêõ•İä,7Âl®÷nRfL¶1:cBêÍõnó~{}ç:w‘k¶mƒmévÇÖuD<­ù@EOÿı]xéæz{—4íεÉ}Ñú‘ÙöÏT§Å¡khXYn·z÷O.Õ/ÿüí/—ÿºşûë+1gV¦–)­AÏæ?]½½º¢q‹aœI+†Q°&Ç1›DÊœY™mÎY®ƒ¬y-šó(›»­êºªo©³ÙS_A$~Ûj½#úíÑuİjºâ |h«¢w¡Ç}ï• ß"ÙvçJv‘(nûª£îO~‘aƦ>"rÊ”xTA'åJ³Fœóæ!²ãÈÁDXQ9“g62ÂWœ¼é‚Ši¡–ğ}ªú»˜*(–fß_tjÂÉW™¹Êx8äHôû‰¤Q=.‡İÌ ¹bÿÎÁ h‘d@wsØq 5¡`Y¶¡ògÌSn9Íg˜a¦àBoÿüõŞÊLê -TOÉQ==°cñúŠ«¹ô,Ï‘[Ë4Á'ólõÊulÉ™Oï‹n†y@Ï^±â˜Q÷º¾†;:ƒS^hô´™MÚñ©¤;w¦îô ˆJˆDÌ“c-yÊıá\T®Ô0‚œ±1. ÛDÁ„ZÅ4_ ïL›ëâŞuNsÉl=Ïéj)…¦Ô| NüËq:T]O;‡şû}*A\˜ñïèü'å]Ñ‚¾41­äš3%_†Zöí¨ASŒáò¹cpVÅ L³Ö,}ÿ·à¿ÿ'܆åb؉¯Âî¥:·sûª~Æşå9ã³PüºIÁÚÃi†Æú¼ÔÙKŒ ÂtÌ>…{>Hkf&´»Ç³š¾ø|6 9×ùÿ¶˜˜ÀË\Ê42†ìyâA„°Ô0Æ&ÀSAúÊ¥ü’S ûfΪç‰}K5ã*;¿op„²ñ}[ÍÛjA>>ìÖo1=ËJ&&ÏP65Øğc‰Á±²Tü£`[C,<ª%’Çxizƒ|¶Ğ7à¿÷hsñœ’[?º¦÷Çì8¡à*pµ°ucN¯„98­èãŸå€eÍ‚Ok­×›ß]j ‡AıD´&pt7…Ï8¸®#O£ & ?ÑDÈŒŒ^gFϹår<Ï({Ñ:ª†PAë#¥ÏÓ!hÚHc &Ôv„˜¥nX×I±®ã¢9•aYÎ'WµXKSğ_b%¢¯AN]Ğ_wéÂUrà‘øƒÆMU﨨5½=@† 6¤ítÎ+0¶Ê…·P g/!¡µRŠí»>ğ¯·]?.æï&†"ê:Í×Q²â“2h)ª~Q"S»É€.^R/徘ùÀşúš ´÷”ò¨Yɨ#Â0-ÿˆòº¶8P—WpŸ 1gÂã&¤EoǃGù Å4lL‡mì{R=õB]`µK¢şõnàö€æ Û~ê~>Æ ¢X‘2 ì½Ì5>ãÁu:x€(ò¾9ÂâÒµC^´!4§uU{ÌÖ¾wút3rÙ¼SD#¬Ü7ܸdÁÔiˆ!*Hù·f Ï`ü\X郲—¡ A§ÉõwF—@ä[²Q.–· l¾4AQ%Mò¦­c`û…iÊ*ºTLOƽäñŞŸ32WøW⋲wm,´,Õ£{ñ²=YFH–Oo*išÁ £e¹Äâ½ %5ŞdxÿAOñÉ•}[ƒŠ©|Ráa¿Ÿ²€wvÆB¸ÒPÌ®ı]ëJW‘]¶8*%ét7€‰BmJ‘ôkpŸ£Zş7"x¯ƒOÙÓLMNº"/Ò¬–¤W޽İá^ÉïØz·«şí¢Lå^Şa×Në¡PL;U 6•‚Ê­Jhï0¸âÜ;)Åá´Bé­Ã[*$y‰ø:şÂ/"çãÕW暀à<")t=õ½ˆ+d>ÏYg{ÄÙ0J£ş™H1%ìr_rı‰ªÿgpÔ˜(ñ¹MŸo2ƒõİPUE«Ã#Ei¥Ô\ó ØFÿˆT5ü/JÀXóß[zP¢İ#jGæÃU‰£¥[ ¯WÃé±£P¤J «CˆG÷è× !{KMZ,:SË|a¦2·ÛÚ¹ó÷"yè"z¸ÿ°ËS‰¨ÊœªæóAK3æ'+‹3_G÷s£-rô0³Ma颧‰Šƒ™“˜‘(l ¹Ìä r|: 9O3Òœ­Ì+6ƒ<2MÎ2c­ïÏËûFdÙp; · Ö²pùÿteÕuÕÍ!Œ¾9ö«÷»‡¢tã{t…§2pjv ˜¿ÉÀ»ëí›)«D_b°«§«í5°H›€Å§ÓÀf–qk¹Ë”©]貿œ÷ëMïƒ|«·9TêlR¾m©ÓßtÏ®ğÃĞa '—õôãØŠ«™z­>Q¿‰Y÷”‘Eımeªˤˆ<óšg£xôtŞC§Š¥S4uÆCkfs³ÈSɻ⧼«2LrùœslĹâÄ„7ÏfΕ,hŒÉWš:Şíáşå‡ğã€×Xpğ/ğ·üf޵âÜUH˜W®Õ§Î ı/J‹Ä;DUC(LU„„3ÛÒâûhQ×0“ı—](B‰ßj|± %×™A|)ìÒ‹ 9Si¸&ÇF@& æ Iަfå?…òW¨Ø1s•éh^¢ÓZòHY¹$ùà$ÕÓ[Á&12~:#ƒAÁÒSh,uî28'ŸDχVjîz§  Éá˜ïĞBfò.Œ:±lxhÓÇD˜>‚‘©*Ğòv.Ãz(èï¡uXøøFîgŒ äÍÅ+óH]‡â`»³~¢• š7Øä‚SqÚSHt°ö¹¯^ Æ:ï‚ñ«HÑ—¨|‘'Nåxå?~’p‡v?aÏP¨¾¨0éÆOü»í1¼> stream xÚUKÛ6¾ûWğH+®ø¥c›v‹ môä •¸^åJò:ûï3CÒe/Š¢ËœÎóã7Ù‘ŒüµÊâ÷÷Íêş¡ %+s‘“Í3áYΊ¼$¹6LHM6 ùJç—jNR© ÚW.} §§Dú6ÛéÎZÀ™Óƒ·,á F­‡$…KMë@¿ êıˆBCkÛF;aßî^Ğ} 6Ím×Å¿íÎUñ?¤à¿­«‡~ßÙÙ&ß7¡œ”sV꘳u¿Âî0?)i]&8…CHP*:½M³í£p²y|»H:<ÍUëÂÿ~-Ø÷®˜T¹ÀæA R°Rå!…œ™ršşaŸ«C‡e3“Üg6?—#/‚³Bğàeƒy ! ‘Ñ åÑó0âI±Íp‡ÓcPì}§‡q‚¾‚|»yH –¤*3ô!) È1(æë¡ÖË$EÎY–¬O²>Œ£usÚºıaN÷ë¶®R1­‰7îŞq ÒLpµœäÉ÷p˜ÿÅyɤ1¿œ{> stream xÚ­šKs›H€ïúÔœì³Ã¼ö¸®ÍV¥l—¶ì½$•,SA ÚTşı6’˜%Ö0ÚôÅØFækİL7m"ıµb?lÿx^ıö«(£™æ:z~‰­©–*R™ ‰H£ç2úx³©Úª¿UÉMŞÄÅa;VÓfÓõßã6ßV·Ÿß¯ş|^}]%p\%‘`‚ “DÊdT©¨Ø®>~bQ ûŞGŒŠÌDߟÜNŸNhŸi¢§Õßo„$XF…ÊÎCÚõõ6z`82ÑTqù?Ã1N4’sª?柶.ºÛ˜››²º…7Ä4Åsü©.)ÑŒjB*ñÅ$”¢,ğ½ëȼ•6ÃhjÄ1ªınWõE>TqS#dğr–Ò”&YzušÌ[irC¸¶ù@ÛŒ¸`r¿'6Š9È3*âÓaqußBÕhE¹LpÔhC ì Sƒ¶j\0¹o|jÆzlª05JPn4¥©IC«lÕ¸`r?úÔl»²~©«rÙŒL¨HE#%Í’Ğ¢A[3.˜Üoß4£»»ñµê—µpXÇó¦¡ì´>ı.P ØjqÁä¾ûIËtyÜİvm<ìò¢n71´«/5ÉÔN*BH缵b°VŒ‹%­ïL*ºí纴êa MR¤¥†Išj¤kõ¸XòPøôTmÑtòià]L_Ø %3N ª ì¬å Kª7O§“–²*`êkâ²ŞÔcÜî·Ÿ}«LáDEª™Â>'ïØêA[=.˜<–Ş¡æ° .{Ñ eg©‘ZR=goÑ ØzqÁäÑ;ћӢhwišâœKŠS­BËlµ¸`òØùΦnWVàݾ-Æ}>Ö]ë±]Ï`ĞTιóÒ­"ºUäÒÉzğ¶©Ó*¦ˆ3j4ÒzÃ%•sÃ!Ğ­"—NÖ•Otñ±†5ù뾫@QÌÀ`‰TK §2»ª–èV”K'ëÚ7"¿ÔíušD¦¢‰1ª$¿Bİjrédıâ«§2^ıêN c¨2é5~賟3:Y—şÉ¹m«bìú@I© Lâ‘€YD‹«Šn%¹t².–;~˜ éúŸáŒĞbJÒ«ªn¹t²ööşbß÷p‘ñ=¾o?wG '«~¤¡rÎà%°5ƒ¶f\0yò–Î6‡Ú/u«õ¢i.É– i.™Ó·hlí¸`ò´ ¸Ö/›q$ Ç Œ#Š‡Ö ØšqÁäéËò’³¨…Á9š!­60|(Z0`«Å“'ïB3İŞ©â¡Úå}Më²qš œ…†Ãì"lÁ\fÏr0سœ36ùོ˜Ûôùî5HĞáñ#©°•àç×ÑV‹&vŞûuV:Ğø”À¹­ÌS˜è“+Jmݸlò¡ñ6ğ®û®‰‹Wˆ°ğŞuç opš‡y%™Ó·­‡¢jš¼­ºıàQ„À·Š\>¹óvò—®‡>>N×ï!–$£šã4,³ Ÿj o-¹|rç½Ş`ì6ÓôËj¸ÁÇ Ì-\]Y?¿·b\<¹ó/Î}ı/h‰÷CT?‡§Hõ3Œ`WÖßjrùä®óiÚ·ù0Ô›¶*=n>pÔ0C…¼²€~o͸xrw|Æe_§9S$æ\Q½!æ •úôHğ]½Ù÷§—D`-ûı6–RÙHÒÓ $òøÎMŞœ½MRWÃqgޖǧ×`~ú”ÕÛ(Œrg)Uó»Œıˆü•Ã4Ñ endstream endobj 1362 0 obj << /Length 1505 /Filter /FlateDecode >> stream xÚµɲœ6ğœÂT-lö!UqÙ©Ê1~·8=Fó†˜e"_¿>İjÁÀì½§yäá}0¶Æö£ÛRô¨«º0Ê¢(¢co N†wéH´í»ú#8¤ïÑñ]Fî¤í$ÅÇ´¦íí…A¹«[¯t™GmïBÔ-ù¹·ƒ‚<]çíRå³İ§C„O§›LW’©\#Ùˆ6I)g¨ÛÚ u…ß*ªú¥ºì ±¹¸¸bRa¡´è.``yHÆœA>q.Òèä«Ó‡¸x/y4ؾifì𙺂AñOuiHİûº;·#e¯5™G˜x†)Œ”•2@ÎT!DSYÁéYÛ!¸àH( /Y»ÔDÈ”¥rvÜ'5–J9‘¹ÁÕ0Zã87¸ço¸Zğ€ŞÁ“Ğñd‚ù.áù ×J#M‚°²İY?vI"3h™ ÍÇîı–)Kµ¸ÑJS0Ág¡?lƒü(ÕÒM˜‹Ğ?çƒ2cªÈÖùü]]§IuºİŠv*YqøŞÎ¸‘s‘1hë”!çß^MZåY¸œ5¬°Ø°Q)°IÓ«3ĞerZŒâ9ä»sápÒÃ’$œöÖ°˜t°j¸şŞÌ86Ñ8(¶ŠcİQ! \¨Qº€ÕE×ÓçцC!%/7ry•Ê%éL„€¤¢µ¡µlçЧîær_ *a‡ÙtÅ5KVb ¦ÄL£í “ÙM R“S`@Û\;Å]Z$¦U¢ohKàƒ…ZSP%Àšp7L¾]ÔÁpÑ4\ˆ§8AŞÙHCV¿Ä2ªÂÖáú3ô(˜0şŒ†s?><`—ŞÀFäÓgÛ0•rÔ_]Ø ]İı=Öîà2,7SY~º¥ø[¾±£4Æœ¿ÜQ@§¸îⶆµ Ê»©/óÊOân+QEβkŠ}ÑSöÛÍ=¶­;H«˜ªzˆ)-&ñóõ«Qôû†÷ŸÖOrV~­»¹è¥S _ô°-/÷"*OÕÓÛ¯£H­»8'ìÔɤÀ9÷Œ{¿Ğy‚"«5y²€–l* f“ü§ß–øUÿ# õ! 3A•ùä‚·×ä¹éOERLD‡şú3±ët Zpï]h( “ܴYZLUqÛW…¢¾êQ£ ¼_U~åZÙIš ˆ¤íõ@Ѱ¬>- •¡Rş••±JZ˜ ÉœµÀÂ*q:¦rm3ŞWù{`ÉĞ hkèÀ7¶ó¶Âº~ÉóŠÿ§`·ıi#<+˜Pó÷©ªÙ¨ˆ­RÙÆ)l%}Qn„ 7Ğ)y4LËëœhÓ.;x'ü§¾Öhü§Ì®C`ìëø¶~]ˆª È{üº¬ŸòöàÄ4ş‚}gd*hïFÔ±ŸşÒ¼KñèúÃw€윕]˜¹øs ööóî÷ؽ¢_üÛ‘ò_[áv¼T,Ëòï²ğr.YšËomè^ûŸ7SĞ)| sü¶c – ñ?oº÷¾¸ı£!Wt7F­–mØÊ‹ƒEA7”ëaøúîÙ?A¥Ñ endstream endobj 1367 0 obj << /Length 2019 /Filter /FlateDecode >> stream xÚÅXYä4~ß_шº%âØIbÅ-à F¼™ÄÓH'MÏW>rtggwY!^:»\®û«J¸;îÂİ·Ï‹ç7ÏÃã]Æ2%ÔîænÇ•`Jí”L˜ˆäî¦Üıºÿ-äÉá÷›ï§cÏ¿éâ ­"üáˆe8Üw:/ƒ&?i:r¹ W KbééA{|¯é'/ù’»HX”.¸sK³–:d‚ OôÁÆ¥ SédÅï®YpÉB9İÓB¾î¡êõ–O`C¼„õàæ"½—'¤b©TWiËÄ;æ"3áõ0|“'ÏX8{ÛøÍ±s ‡¼•Â/volª¿ÇÕó _ÀIƒ¦„7H¶êØWáí–<ú¸’’ª$H·òqEûş±ôÉ[-¡ÁÍ$p¸ ¢”IÔ-s ‚ğàˆÍÏË—DBŞtu”,2ëû¼)k—Çk „¦%©ğĞV†»¶®[Rí™­Ûª)ñÒÛ·¼s”ç¼hûÑÎì•­UÆÄ¢8C¸> zÙ5y}-Xj+¥Ù¡ x\ò$Èø\ğÈÕ×ôß‚ŒîNUƒšãJòVÙGô¢˜¿ÖğK°y,‹ş`ùWU×O¨–%ò=U ‹8_cÚͶ WâJ&ÂIŞÑà‚­¤øÊ”C€lÇØ¼B2"0H¶Ì U/ROé÷Ún€Ró ıÌ5¹ÉôG‡iÄÏÖp6¢i“%[€˜0NP>0ª" •·zX‡OÂçwƒo(V2#sÕƒd±ù‹šƒX™ ¨ õpŸ~Eæ$÷AI¡bÇÛü÷p_ÄãŞ“êå·Ö]àËC]TpëõMÒ‹drøWÁ™®;ÚXNÁVäc¯).b×­Ø…‹ ¬¯ã›¯‹‹8céÓİòÊkhÒ9Ñ[w¹o‹+ST§zĞP3Eu‘jGW,瀟 l5¸ÚZ´U*C3æCÕ6o‘ƒƒ¯ôíxØiŠç˜â95é,£9š¢™=Ö¸*{ßce‚-¨N•óTR#ÌšÁÒ%;§ €Z¡ ¨Ï0^XÚp«w1µuAÄ<2²x¿9B¡ÄéøÇŠ%SÕ,ªÅZ›•?CÜ?©îl• jùÂÂj¹ú«µôdž€YBV˜ÛÅɹQÌ9@~‚àÎápÕ…n›ÂëÜ>ı€.ó ºéÒÛmS»¶€£-LÃËÖŞ0rÍå0Æd¸ ÷/˜Ôózôû&§¯µ¼(‘m&̆}áÙ±–ö¥Làf¤EmW¶“Ç_ı)÷{‹±¦·;¦4„¾²˜têm aÕF«Å¹º¬rM dãTí âGcpšjÕ`g(4Y¤4yhk|[ûm÷îvuŞø?0ÓĞ„»éÓyğ^Ã~]õù xøË!¼é/²?03ªã²v)®5šFüö¶Ó/}«A%¹_MMˆ¤~=¨L “r–¢L‚3)Æójëkf™lNz²?clşNµš¦íªµõ¿Ú73ÿğ¸KW+€xã ×ĞâN{·Õ0bJæs·Ë«VŒbÌŠsòoL¹fH™Úué?!mWş÷’j¿ I„!…=İÕf=<õg›ŸQK¢äI­\$/ğnî"(¶û7ê÷âÅ‹-Ö˜@àv>Muö«\¸?%»î-Œb™ßš/VÔânh,åÛW°Å¤d¿ †¾ßÁªrO[¢Ïèşµ£YµaxÓÜ?ß=ÿÑIiç-²®‰Äë¿Ãø¯&TCb9ñrÛZpv%#ï\¶ìûÓØ4™Øµß[éDÓÚg©ëÜ(àΙO›Ø7måEÏiV±Óz 2S@Œ°Ùº£ıúæÙ?××53 endstream endobj 1371 0 obj << /Length 2731 /Filter /FlateDecode >> stream xÚíZIo举÷¯¨A.20ÅÅERæ” ºƒ äâ[&YEÛB«J¨j·üø¼…Z‹vÛ휂\,î|ë÷Şc9İİíÒİ_>¤áûçë?gùNj¡´Ív×·;™ZQØrgM.2evׇİ?’\諽”™Işş04ÇÆM}µW¹IêîTŸûŞê§«^ÿõãçbWŠÒfÏJwûLŠ"“|Êß:?\í³,Kº[ş÷*¹iN‡æt%“;Ïçë¾¹N‘¸¯†aWã¹å]=4]®úpØCÕGî!ê²%y™1ÂHdy}÷Ğùªõ—ŒèRdE>.ôC®‡sïş+w{•jQ¤Ù$$JDF¬©B&mw<<î[÷0 c8•®‘e\¸eǪ¿Ói|FÿÄ=w ëÑÕºI2tJFY2Û —’I×¼´İãşéäR(i/¤#X:Æ •o„ó§p§Yœ"Sa3=+ãÊ•ô®½¼U•Bëi=Z‘TøÉ“ŞÕ]à!b¾=‰¾:€•y^uÛwǰ C¡a“Ǿ\8tèxT¹Ïò¤¦s†êNá(´M\ztÇ´S¨$°oHå†ıOUj¼GUç ‚ŞUnßÙ•çvu _ï;2Šº©0Œˆè”©)FY C¢ÜÜ •-ÍB˜Ù3ÂÌ•˜ø{jÒÇûfIâ±ÂÎw‚…FÌÆZ!ÕxÌn/¯k+Iqµ×Y™\Of¸äK¥¢ÌÊq9H¸¸»¹<øÔBæÅZĞÀ2ÑÚWè (W ÎğE¢3â%Oúh<òüh;ØÀÄw¾^“€ôdrv÷ÍÁd×óÚÍàNò‡Q’ÿr_,®Ä0€‚ŒRa£Ò› af¥‚_V«ŸIÌEJÏK×ACÍà]{ËíŞ+&F'ç;}uºs‹NZ”¨WJùµ;'£PYY>3Òœ_ñgcc8R¢ˆt‡Œ±â¾S]ØAà +ĞbÈ)3¶dŞåÂ-èI¡^å)Àç® %nqÉGXhÜ@_µŠ€O™"@ Œø øtôãê‘^X8%!&Y2£Ë›âah‰ˆ’\gÃQ„ªBöÓ„l&z3ß"½YÊé¨af -βòyª&‡ÓèÖçhá Ä—gøj<~v½ ’U°A$¸ÔLg9z6˜Î28ß<¥!p7$¿ÒŒ²€¦A§n`é—:T8v`'q¡ ‹¹qt˜ºñÚ‘’S#|öœª²×‘[“ÑÈ2ñÍñ¡}âD.œ7kÀ®0 º'®6¸Ãê4óâQ!-§6ç ^ù™*9ôHDÎ,m}RIàÉsƒ$¡("W=CÉQØJ†ğZÜpàϪ£z‡;ş²Uqû¶jZO —!ß<¿”(ŞëyşX¢¦CÉI±Å.c:sì±³[âà )Ê`ir Gõ”wæù ÁªÏ7Şıë<ç06z:Ş5Òj‰çâ1áı@Í`¬ºcSW- ôcùD€m6Ô!^°XÁ €ÿ>BBà˜„§îø0xNRcØ~/¶¥°jJ9{Ì¡/‹:# S^”’ b]raBÌhynwîë0ÓœbY®´®Î‡Õ÷îè>Ş4wéváëc¬BѦù²D Wx¾¶âîpYrÈ^K%¤Ü¡;ßİ£ğõÅ”M™MxÎpß*ğl·~©¨øsd ;`jïçÀúoá¤ÂÚ…”h+Zzxõ@ÛÇ ÈW·Á‚ÎÊ 2‚åÛ©}~Û Úééèãg`y!7Q– î° å|”Ì7[Vú¡Ö²èD›İ»“?÷@Ò͸¢/Dà©îϧ/Ñ÷‘¦f¥JZ´&<™œúéùü%¬øÊØ`Ò²—FñG¿,½,SÌ&gøoI(J5¸R®LDÏs™OŞñ>.ˆ÷¢‚Á¥ŠròB÷í!æßĞœ=UñŒ†¡Ø…JûE +‘[ cδÔpp€ \@„,æ’Ø?…TæÛ‹bTp¡˜[EÑw‹1ÆYY ™¯£Êqµ¬ĞBZgy2ÀS ğôÛüş:ÂSxxmkÆÅ3ïC[Õ.úz¡–ï/¢Æz_ 1‰ÃqäğBdVçìŸ"ïO°K¤Û7Œ)wë9V_Âû/ö*ş !ñm÷½¨õ 'up àÖĞÅ .-æ‡é…—?ïäX¤Š3:3V‡xÕª–4겺Pá…ãB ºxñİO‰2·3™î) ø¦U®¡†¨…RzÎÑ&TàØ_™ $Ⱥ€,÷ä. ŠGIr‰åRȲx“ĉ”¿áœ¬"]>ÄÓPÇß1SÒáİ+,gneiE–ªµ‰¬8İä:ƒ в NÆ8Õt>Œô•2òHV‰œ)²*É0‰ë2—Ã!¬ºpÃ7h|p¦$ŸÓ#"yfChÚhÎÌhÅœZLjëÚ…ô†Øåˆ—k+„Í'ƒıõõ¾ 4?!y&âj¢ğÓJϤL)¼çşT·ªPzòÜû\a’Nó/ Ç¡­ıİb#üë‹Á‡n`EÀ…&†‚•³¨&°è+‘©¦c_)L:z<¬1åÀ‡Æ×UğãïVDóMâ:¿?@F8¿%c>¸|ÿ¦ºPœcy1ª:P ߃Rc6°*‚ÓŠæË]…å[°û5²É–&7¯æ º&·ËÔXÌùPÅq¢±êL¤?‘è—ô,·x–9óöÀ$ËÌœü1ö³°úÍ $Ú¾œX@\æû‰Ä€r™¢ÿ~Ê…ºÈÙà1¥ÈåE*ú|±7?ê´ÕñæPÍı™ªu¤(@âeö,>æ¥ü(,ı)“¶á¤à±ñáÇkü©âò2šKÙW˜6ÉÇØ×™VI¿Ğ¾×´¾SéŒÒõ÷•ˆËŸªÉ"j­Ù9!§ß«¦;Tšª×T‡Ù[«Ã—å E^ï,¡Vr8ü_(ï´‰(q@]!Ë iP?Ѻ¹LãùúÚØF~Ä|?C‡ÿ!†j×¶óOË/1TÓÿ/´øFÒÆŒÖ,ÿ!ç}F«^2Ú¦¦BA ÜCV€åÒR­6|ºşğ İ–e endstream endobj 1376 0 obj << /Length 1552 /Filter /FlateDecode >> stream xÚÍXÉrã6½û+”Ê…ª„€¸TnSO’ãÄ·I0Y,sQ‘<úût£A‰¤èe*Îr°I4½÷kP|õ°â«O7|öüxwóáVÈUÎò$JVwÛ•H"–$«D¥,ŠÕên³úüÁEºşóî·ó±·Q6:ƒo1lxfÅ÷]{,û²mt¦ªÂŞØïPTceg\fÃÑb­D`ªuüÏypÔÕÁø“c•2b"ÎF:ÅÌÀ‰S¡H_æğ"X®ŞÃ­£)lÛ…Ù.ú¥X”æÃÙ£AÇŸœ*Š%ËòxîĞ<9œE"˜#*Y.åYñ½ç“ƒ¥¹xÿÀ<—ñ˜3Å_ˆÌ‹YOKÕÛ³ñŠø}ëmW6ÿó¤;İıË9÷qù[9ÌéUËߪæyÎâ4ò%ïàÙıÉšWz] &cñŸ§ıñåVˆÀJù½0Ìs‰W ÌñJâ—à]2%Ôu„²‰O"†!€uœ1õìxïv¦7ë0U ;÷’ºªˆRµP¨´8®£,0ºÓ_»¥»3eG¯¿ȵ3µ—Y¬C´‡©Öt{İÙ­C©xğÙèM?ÑŒìQ §G§oƒ€c“D<íL³£D j|‰‚âĞu†ÔĞÄ~oYĞöº"RÙ{޶®KkA¶#ëÆ¿¨ÓdÖâ*4pÅ<¾6ù[z6Çg‘f¬éÄ‘)Ë¢)à|4…ÆÒ\¸Äf,$÷x)!SéYÊÒ ?‡vwÉS×< óDë,á^ÛàäÆÍrKèÄ'Gê½€–Öæk8 ‘€{ä¬&ÊŞ:”Qr¥ H"p«Ò…ù‘®vÓ±‡»è¨»5¬İ%IÈh=íÚ‹¹§®%–Út8V½Ä«ÖË#Dèj(²VÒkBˆÌ’àv8t´w¼+ Ù¸ yv÷@Ò|@Hx~‘q½××оîîKÛéî´d ;qp‘ò>£M€Ú«á9‚è(8UğIv*‰3ÌxRYp0ã8JÏÿ„ÇÛîÑ/ İàZ•Û‰056cË}ÏŸG‘FÃ"gCÃåÒë®^™Ôÿ´t[åî{ã¯Ş[³Pµ‡n@ N½Zğåş~Ïœ?èÈÛCµ!õz³!ã,G›ĞzwŞR–I0ü„‚ß~)ÈıøEc&Çfş–2oÙàÀµÑ¢ãMS)T)Sàç«—Áy‘Î| =uqd%oï1†àã"„+Ñîrd.b>Y—†ÁŒï2–ÔŸÃù(àä…²Ê ı1g©ğŸ%¹œøùîæ/µÂš< endstream endobj 1380 0 obj << /Length 2622 /Filter /FlateDecode >> stream xÚÅËã¸ñ>_áÅ^d`ÄI‘’²‡`d‚  Èa2¶Ew kK†$OOçë·ŠE=MÛ=; riQ%²^¬·;Ù.Í T®ù&œ¥©¤İÏU·¥.¢áÙ?[\äQçÌA¦ 0•ç,Ÿ.Ğ{Ç…CÌOËy1œ°_wöÔ{‡-¼â‰ÖšÒ3eê’/mÕÛØÚA šeÉÊHÍÓ“u§DTÕôô²‰hwn[[oEõ8µÍiÃ{Ó™ÛÆJòè—ı┌šS_mÑÅ̇ªóç¿w&€@ï<İ@Æv º€»vB¬Œ´©¯°CJØÑtH_¦ò>¼TNk°zÎóÈÒ ÉÍéæ>|„p2³R0' ôÀµ•->[Yܶ[Mî¡’ÜYlúæXáê5`è` Zgcô{>׿ÌH(–$³˜1Xî’ᄉɫ~‡"M‡_Ìál‘Ën@xM1OÁcóbéCß«‡…dùäÄ7Õ‘®Õq{^¨/RÅ7ró!ø(®&¯=…Â,“,@VüŠ”‰TܼGÉD~ã—…ç°=C äæ-8Bo¾ŞTš"\ÿ5¥…äĞËRı­é Ö&ÁS© ¹.$læJ,ûÏ!_]Äò\uT#Û·9zä"l𠜨ñ&1VÇB@$,-ñ® å<Å4× r¶îÎmU?yºU$J0Q¬<",‘H˜Tü‰€d\ pe±Nd©ÄpnÜŠc`%˜9¼ Àÿ¼v« JsI·‚Õö…Ş!Å>±)´o¹ N'í1OáöÂEÿ,²ûUŒ”dH\$`´Ğе©0ÓÊ„·OœyÔÀ'Î9CUGÏΉüÿ`"FËã¸pyÏ­ #B±jK/1ÇTÎW×·ïmº@¨ 5¿#\š­íÏmݱPEÊ¡ ±İ÷y#»í3ha¹x»Ïêş¥Ï¤REçÎîÏN¹iTíCn/àfu¾*’¯]pÁÒljNÀ$©ÊØ5ΠJ_tIceQù£nzÿ© Ի戡,iÛKÕ?Ó7ãhù¦hi‡¯½Ú-óUS³`kW.V¡ûç·¤ ÜÎïE¶‚%r 57/Hs–«ÅıHh¯f×¢ÒŠ­äh;à¿#Hº°¢t¯FÀÖ°b¿-D,¡SÓz©™7Di v3Êş‡b,Ú¿¥XÈtz;íSğ) ]O{š‰ldO ·«¢S,çÑdCiCàÄÅBüE'ЪêËÆğ`%d%”{Ÿx[6q]å[ä\§÷«²ÎbîO¾¯~uÆôRu޵ ćDÎX!Ä[ÍwVÅ\õ™ñoÈó b¤_ zÍe¾L\.‰ˆ\‡CƒWø‚iÊNÎòhgËs‹ ]¶ÀÅà`s…D®#ìĨ“²uiËMu4m…½jiqîôÅĞã@GŸg®…O ñ•)‰Ğ,ŸFAÍÍpÃNœä°ğøûİUıç•f#üƒ„˜Ú±¹,ß“aø‹²êv¦-=Ø'Åõl?YÍö £80o[6pÑZ¥(h$' µØó—‡w¿ˆz endstream endobj 1385 0 obj << /Length 2352 /Filter /FlateDecode >> stream xÚÅYKã6¾Ï¯ğ"‡•G|K;‡d³@rIç´ÙƒZ¦mmË’!ÉİéE~üV‘Ôƒj¹§'=I.6Eɪb=>“Ía“lşù&ñÿßݼy÷1İd$SLmnöª¢”Ş(© ãrs³Ûü;*òz3Æ¢[øK#ã>.Ùa‹G}ãzŠÊ ”—s0cß´~V›—]YÜÇ@mÚ¶iÉö?7ÿz÷‘ÍÙaIB$ÕÀ«eäS}ŸWå.ïM\\ÚÖÔ}|n›sÓåÕßÜìùäx˜SJ2é…1uwiM·¹J¢ş˜÷Ğ’²Âtôè?úޜν§iÜÑœN¥§îÆwZ6¶ £§F~¬ÌÈ”#~(«Ê îó²zM :;–¶ÚÅÑA» 0ítÍ•{ü—Vuøíw3mŞ—ÍĞçÿsGÚ[“ïâ.ß× Ì] X Qßnit)úKkÜ„éMÑwÄ«º­ğĞsÌıPgL=l±Ê¶ßˆó¨ëÛqRÔ®;÷ÿe]4uWvı¤K êz8ik*H&„[=Kİê7ö2훪jpރµ,ì‚c°z)ÌΟ6tÊû­³_üʋ øµçŒÿò~͸2nZ5.œ0tLǼ.»“c8s<è8~ô‚šØ™_*j{¼Vîß+tá4‘D(5¸CÕ<Œöß=µM §r OÀò7F€w©˜û Õ‚è4Eç!‰dn.°¨³¾°Å‡~IdrÊïÌÈtPÇ]°Uʉà£,Ş™œ‹ëTè)ÎíVR´wüEÕ?+F’.x¨ş/cd®H’e„2ıGIÂIø`HêwJÒ™şZÈ Åcésœ.¶âаŒÍö¢Şş%' ÈR&Üğs»X±Ø„°$Ö* lõè»6U¸TS›÷í½P[èÄyEVı…¿ŒÒ|X(à)©$i62×»µESÂÔäV+Š]KE·’á)bêùjŸLaA×cãM«ócóí#¶ ^ùZï\ÿL'¨X$iôɯVv‹”‹³qȼa?çOг’’Ó”dIúœü«¹ØO Ò'‡eDµñ/÷IÀ¦IŒ˜f±Çy˜˜‡s×èd\(†ÛAâœ@ê·Ûh"AZÊdô¡©w¥O”ZF÷[iËü¶2İŠ7À2 ØõÖ3›«TtÎ ¬(%z ¼è~ó(/<û‚]‰ò  ×ä‚w°×Ê6B&ŸÆwë‚v›|H‹Ãn¨ÁÎ °ÙÉ9,K(atqBÅ$´àYÔ=Ö.ÓµM]şÏBlc‹ÖÎbܳsßã¦B8(…·•ÏÎHy÷:•.ÁrsØ s8RíÑ2íš~sÏsQ¢2Í.@jÁïo`Å~“¢:WÊ ôGl¹x3ùğó~+Õ`¿Y‡€N¿ X9pÊ2î}Gà[·Ş('ö;ÇY¢¡”6¿C13cDÉC¶·@nd83=o÷ã„ÿÖ/<åşR¡ªÊìVğ“w‹›WÚzÛ[D£‰7MıäÎÙœ<‰H=Á|G ÉÉ…l—¢iïÜ—[Pã¼ÿ^êbšé·Àÿãë i ² ²¨n069.¡¢r{éͯîÓÚ—FûÒÑ]çˆÑšp¬3§ü|„ ɰ\î ÑOM×»–?_;x:WV4r¡Ø·fƒÍ~8;we/̹yáÁ ^Ive¯]>`\Á*²Wò¨«°©ß®øÀñ–òW”¹+¬iF2=F¼r-;Óz‰F–ª˜AÙ  ‘[ÓׂN·Ó·+l¤JôÈ8Ø„‰• ͈dü%: /×Á­Õı© şx^ $Á×p‹.œ>b¸vÆpı¿˜oW¹åpןaÇÙ‘Å2I®ñ¿`¨t©º«B‚Iòj!Ÿ ¸&\ı¸VWLr‰ÉIıW[€ú-À*g•Ñ ŸÔWßN\CZ”¨¨ÑÏJ”qùÊH³ä‚ı‚ƒV_9ÜŒ]W„H å¯=ÚSşx‹ÑËj1`ªøO ¨ï™ @SFRÊÿBí|©0Ɉæé×ÖÕÌ/VyV*éïsñçhl±uÌpsë]Ô¬^XCÀ­‚t«Ÿ” ¸äöf)YVeï j‚[åºB"7g¤ËHŞô{…FT:ÚÃå4•3¥çğßÔÜ»ı­ RM)Äİ|à"±3·—ÃÁ݈R/퀆M÷©» àà®ìŠ Z÷9®1¿ÂAÿ\£8·¥­~÷ş ½HÚ\zß±_»ÏœB{Éd*Á¡ F áC€l:<ÉQ·]p+¸Ñ®,òŞßy¬dO.? É|Vs¢eX6ş>wWœDÃ5h°†ëqÕnN}­ş—Ëi:•§õı¹û—ù*V“š$“«,!ÀœT*¢'Xוgâ Ë ‹` F\Ï,øfV”f·^ÆAÔ^‚°=–Ynºùâ=2‰vEw[HË简Äܹ`ÃK;ÔÖjHЍ©} Q*Æï×OÈ ,Tij2ô^T£ÕµĞ”oÑS¸~×àm»lõøÌº/;7lgø$ãW±!”Š¿êúınáºß\hšrxˆÓ#“v‘dñÈ´Zø„Ô'³±†ôÓ•†Eì$S¡ø3.BÇX¾_ŒÃŞ"çDe‹kü¼L1+¸B&º/Fâ…>«GŒ+o‡·¢Õj¬I9[šÒ,Á]1¿ömvÒ“Õ´é.KxC~xt Õ€F¦½ıãTiu‰åߟ«³yÍ$Í Æe׊&`¼*¡Ñ'<®Tùã‚Æøœ íîÎlv¶ ’eÑÔݹz²©m *˜<|Ú ®íÂ_*£ÖğQ¯õ³aᵺ˜+ʱy=tz¹\p§!iÂèÜÆ0Ç«‹ÈöªòD¾H7ÆÎá!;?äe½úæ1¥¸Ó— DIdºà­é/mİ­£ZÁFu|Ó¯˜ZB„µàİÇ@X:ô€)5/±º¶RNğ:!ÑçPè  S|¼X¢ıç$ ëh 7%‰À'2–‘4õ.š©€êû›7ÿ(nt§ endstream endobj 1389 0 obj << /Length 2449 /Filter /FlateDecode >> stream xÚµËÛºuŸ¯ğíİh€‘"¾$*]\4mo‘"Óí]4]pdz,Œ-’œdŠ~|Ïá¡f<Ó\tcR|œ÷‹Çéæq“nşğ&õãûû7oæzS$EƳÍınÃ8K4›Lå js¿İü3º3Ï6.›ã±êcSoãÎöğYo?›ö‡›İÿñíÏ p—€À]†³İM,ò4ê÷&Y}¾Q*2‡³ÿlvÓ¾ÆÕ ZÁ“L«Zy£XD˜/ H­Ç£p¬ê«¦Æƒ›X¤"i¾‰K å9J²È´•y88b€ˆ&@ƒJ“TgàÏô ìœ'º±ß"¸,ú”ªôÔ67\GŸ«ˆ1‡Ã3,2Âæ…£Šó Q2Àœ±èŞt±ÃşÓ%zºÅù“ŸR¦Ì£İ ÇG–~ìjL9¡öü€öGzkâÁô1I˜k(°™…„{{<õ7°çèp#ÒMÌ¢ê†E¸UxÓp{ç¶À . „wÂYÔtæÜÄR¤Ñßq%3 #ݹ,íº[§£Ê_ş‚€ÌşÚ–Î'ÂznwÎ"ŒhÚÚ­c(]q²o­Ù¢º„ˆZûXu½m-ŠCÈèKÕï†ÃÀè²âÕÖËx>%A;Lı¹­»€ •Hò¢xQ…s ¼dİ~©:{K”£¬®ã)ò$KGÂ~ܽ€'ñ ò “‰Ç±€&5L8¸¡¦£„θŠîÎıÙ0¨È~-çÎ;î¨gtÿo%ªvoè¼EjÍ¡khC“cÓúC}k(.8|¸…@şxBívºç0äѾmêêߦ÷22€qVmN¢1JBökË œR–`#ͼö+}œ{D¥§Öœàät0¥İ7‡­m;ğ‚,SÑŸšŞÒf¿7½ŸáåçS5ÃBÓBÕÑÁsw&d¸xjíζMß!v>êO΄‹g›]oëE§3E®„ JFí¹®«ú‘V!$<¶æHU r¡¾L=¬½z(mÓj×›ŞÒt×´Ù£\ÕÑ#Ã|4Ãî á·!r¿ì+0ùY8”Ù~v§í,-¸6 lÙû3Î`<’î·ç$#R"A3. yO¥¸hÛö Êy¨ÃI-æNçHヷ@W£³%Ì»ÛGt¶?O]ĞϘNDA7‰ƒÓçcø94e/àИ•ÀiÎ%„/Ğ‘ãÈTuG,>T³ëG/²kœUÇÓ¼|P&.2ë­i}”œùÂq¾”GÎyŸºwH×Xô¼ı™É…±ÌA`0œÁÚ˜=óÕeDÄÙ”jUz4O6F¸Ô@’Afdcø!”)dRH9I3Eùt•p'"áÂÿgÊ‘èŸôˆ<z<ÙïÑû6|ñ9¼ó8ã¯gşÁeI÷U ¦¾*‡B%)ñËäĞ< :Ìò$Ÿ2Ü\;ë‚ Ä–ek\%=—¿ô£+ϯ3PP\è×2¿F£ìÿ§Q¦X’±A¥ßë”­=XÓÙo‰$çI‘gß- .å T›‹Èq7‚@Î>© „b²Ç¢T2Hó4,*Z‚˜ïF—‹pò‰ éÛşŠ–\ZK‚„ËDMâÇÉÕu§€Ç̪ͨ[!„”¾…z¢÷Ÿ˜8©ÚW:)R½´İe ¤‰ cqëÏkÓ_ÈRàa$ÏôÍq¨nà5ùp,šp­Ú´­!ñ°²×I˹0ÄšFzÁ¦ZÀ%¯x ¨èÃÎßëıˆµ `|xåav• Ï‹+Òà Š(€j"¿@)³¡/"&HE"–AoáêÈ€.àÁ&ÅhÍ jÈòQ€ÃcH:ÁDÙÁ—" 2 ;‘"aŒ­ßRXZq±f™Cmí Kî*;7ú³ÒóˆÆM\ØäRM`‡g$•~>Ş<`À¿ü D«ñÉçÖ\Á`g¼yÍçİÜ=÷@µz0 ½ä$dù™Ht1Jğ.´õÒd‹©hpšUôœ %cDğ:mb³@ÈèÉ—rïK3ö|íŒÓ&è_E"Dş²ƒ-ƒé;ß›‘éeT¨Ğ‰°úîıØÑ8÷½[´u58¦º°§ù=r!ÿdğ.4Tùܹ )>0Íœ„T~•¤á*t©šÕ“áø²ò x&+yéo2ào'»L&!ß}/¶@׊W[ #tC’{¯hxèU©FMÿğ8,şÿDrtÓ.8‹ì¬Ä4í{ßsä ‘äSµ;¶HB¢™„´/Wm®¿^ÔzY>βʖ(wÉ?Ë£º¡ê>t8wa¥ÂÅ+’‡B8[drYÊè°°.!2=&/ ÏtL^î^ïGOgå©,fy  ™qîECè¸ [©“Ñ]• »Y+͹³>77õ–æIZ“µ =;¤cïé6¦ª²€˜¿ˆı×Ó$Kr6ƒ‹‚§‘ïfÚÖ7]$£Æ(î¹÷00@ Ûã¸j¿ÚòŒ‡A?y*I?x‹º><“ζ¸ï¨âä`:ï|¶@S¹cOã]K~F­Øòù.Âe𿜠›—a8£´î´¦îv¶¥Ö)l8GŸC^W™˜•¸ëPú¡\E÷ì ¦ œRóë —AY¬.°ëFğ¢÷ã?)øì]·`¸oÁüeÖÑûfF_ïÀ°DMQët „ ¦ó@#FJ¹jÄàÊÔˆÁ/_ô_¼ñX2¥|DéÛ$(h=úûÈôâÎìHWø‚˜½ä‡R«­zÈ^uéóıyDÙtCܪêyÖ'ù]\¤´ô!¹õI{¸óۻÑT2´ĞKåŞy•HçV\`QWÚî7´íÚ‹8Y(Å­8̹/vˆ”°fìãù3œñŒ>CÊæµŒõğŒÊjéß-÷?×2ª­¥:æ¾ÇˆsS»„Gc¡ ó÷8€t{ú욣‡t®—Mí*öP±ü‡÷ F ‚8…afoZreS–¶C>(N8ÌÄøk„/£/ôÿS!P*x„ú®…ijõ€\T)Äô§#Š8-¨†ƒuÚ_¥59¯=ˆP›z¢ yÖYô¢ rè{PâM‰˜Ìé*%œ®;ÿ(ôş8­êh‡‘¸9ÒÇ £¿ü°´¾G·&Ôa`åµEùšv Zc+eà ÜiìDñœÔÿ=S,û-¿¿ó_µmÄç endstream endobj 1393 0 obj << /Length 2457 /Filter /FlateDecode >> stream xÚÍYK¯ã¶ŞÏ¯pEe`Ĉ¤HJè¢@Ѥ˜ƒvq.Ú,teúZYr%y&7¿¾çAÉ’-ÏM&7I7ß<ÏïœC'›§M²ùë›äêûç‡7ß|'ÓM.r«ìæa¿‘V k7Ö8¡´Ù<ì6ÿŠşH·ışáoÓ¶o¾SÙl¶4L„Å&9||ª‹ÒÚzç;“xÀÕ]y.¤rãÆ¯x…2sjR‘§é¸OÜ…S¯HZK•ŠD§Ğ"7¯ÅÈ ‰¹Y>1QíÂ’å±ÒÙÙ±k²‰PRıJ²Ğ™¹ú…²˜‰áO+ä9-ò|"o8TÍÓŠ(”F©W–Å# ¢¥ŸÚã§h^‡ŒûÕä÷~øêEÛ¸VYl’$úXÔg¿"(gDænuŸ%— §_QÅñœ0s×iWÌğê’4‰M_Yã÷¤ËÌ€T"’4ãÕïW½x¾/sÂdf<½ì|1ø~ë\¡-Á8<†­Ê¢g'¶±•9 ğáàyu{ª¶)êNT"…Ëì5bÌÉ‘Z$.WİÓùè¼|Àµ›8iš/µ]ÁišFmS?cËDû¶ã¡°'.ö±4"àWMÚÿÇ Í×ZG`—\¤¢µfş´Nñ¶]U‚~yœøÃÆL¡½X3­<Öi&=·7”Ì0`aY˜¿» ØKÁŸ[c#2gê ¶‹5KcKÓ$úKKÚÄI€Úpâ±íèØ`j°¥äÊTÚ¦$;5Q_=•öÜaS7‘ﺶ[“L@½¢‡9\, F‰‹_ù†®(‡pks @wߵǫÄP5™^24"ª6Ä…ŒvÜîüpîš;Õ ĞÖ³èİø|“Îå–ö9~–FoaÜ&dÙ¸î±nÉ‘J\ğ¡¿:¶ë#œî"O^×}°åı¹®Gõ8DFZ…Ò†Cµ;x¨6Je¢nó4ꪌF™Hë3¶ûç¦Üjº¶©~,¸x¢xìIa0Ğߪ.S’â]FЧàšÇªÙÁ==÷ü ܪñ;îV ÙhZ /Ã0\táSÑ Üj÷ã5ÀWZ ™˜KÚîãª|7Áï­°ròGàï\ÿNÉ¥^À|<º\#ƒˆıF1•¢^ D€Ø5#îxæS5xqîO¬Eœ&Ûd×…¹@n8µ {!霭ğGíÎMS<Ö~ÍzЧ‹¶qȺ=X ›R  ÎDc!— áundõ'Ë"J¦ÑøSJY6c¬Ù¡zuæF§ùI$8ÄÙ–¿D¢çNç˶› 6à[ğç¿gë˜ìÁw>@ÁŒèQŒç&Ÿøoı„ŒPãó 1@i`¼¹åyà¯Å%ŸxgÁ£/04„•£&±3£ÜäL9Œñ¤s=T§Úó 1Ñó,& }à%º¢MàÏr)Ã|™ŠÓBn1İ¥ØKÓmãCcÏß‚?¤à3DŞ-ס!¸ÑzŒ½ˆo ˜şLˆvXK_”©•3£üÒîÃu`ø62k@ªü’ÖŒTwàE÷ÌJUY.²Ñ ƒ%LCŸ#rÁâ9¡Á1_×4M‘o@;Dà,†€04Ûæ(í1ËÅv Ò‚ôO±*,;ö¾f¿áôàZkßAd˜ÁĞQ°è T]"xàØö°òJ¢dt†m%*åÀƒÈï(ú¾%ë++°ìpn€XX…ƒ?áÅÕüˆªŸ³Å˜¶M€…„[.Øn°…€h6™1´ÑŒÙÑ@} œ6wãé7pŒ a”ì‹·`¨ —2TÁ—|̤—ğ&›†&Q¨Ç…œŠƒÌ0ŒöŒ}eíÁÚv<ÜkN®>íÑès` RlŸ+Â:ÇÊÃ}aÆ”Ä$ëKçµZ[B½d»îƒ¼y%V¡ò'½CÈ_¯öVBNÙ›ıâg™çGï<‹‰e¶J*$(‰u_"'óÛ¼Q\ J?…ò™[ÑÃ=£XææZ¤z"»€ô.DîX)ÅêÁ0`¢Šcà ì»Ø¹äW &t"¤‘/Kp!@' Yæd|É´Ì‘'涆Հ·—b›ÓmUT /¨ > ğ²ç•œ‰»hlj8”š6Œ/š¶‰çµü>Äjv©Eæ&¾¿ovK%†mWU.å«P/Züú WA>NxCT­(‚©K²Ÿ©˜LèËjÏ·‘ÑD.¢êybÕ›2z7ğÈXP± • $ÓËŒù*ëÀÙîbÛnµ¶Diûz¿ú*â2¹ ~âc®8ÃpÖ³ãÒM|şMZÈşóåÃÑSÙÕCBCX~XE&#”›|„ßĞ jÁ§^¬ÎÜïılꌰ™ùÅOêk"ŠÁ+çx¼ Ú)µĞÿ1ŠßvV ãìk‹Œş–@z^£ØH÷ »íîJÌ:lşNqÏXa’t÷ŞÆ›Ş!sa/ïìÅ0 ãcên ¥•øåc°RLœ¿Ğà ôø4ZÔ€}™æç": ß,¸ğ .²¨™Jµî[~f\rùÕ+ËgErÂHcüä8÷ç¤sw}ïûCز\hgP‚ïÇKÚµÚ-Ópæ3¨st5øJ±(¡&̦Àòõ°…Z ÷2 QÅc^Ÿê<ú;f%ŸªŞ¿]Zäê¥@qq Û;V°"…$gå_¨ÅuÖˆ‹¿6¢µƒàx•Ôëv/'¬™ˆ8şdÓ7ó ÷-Ú.>º•@9M1¶züNÿo`§àÏ ´C˜&Ë¢A¬ñø .¹==bÆR+ˆšW;ñC†ßfÊmtxÌÀàܬXf¦âÓŸÍ¤ÊŞÍF‡§g°à›«û¬7Óvùøõş%Ì]h!ME6bQécÖê«P[®ˆ-½úÅ7ÁÌĞ‹ƒÁ®yğfÛEî&Î^×”e=7à—*Wwù Éáƒ=i¼kxÉD ´ËâÏÙL$Iz×8_’Í쿵¡«| ! ^!HfWQŒÚS.À5šŞJqæ®S•\ó.¶{=Cæä¿Ò.½ÀÚ,d/Á 2#™aQ#²,$y¶ØñíÛÿê>ò endstream endobj 1301 0 obj << /Type /ObjStm /N 100 /First 950 /Length 1458 /Filter /FlateDecode >> stream xÚÍYMo7½ëWğØ^¸r>HÀ¤)ĞA“›‘Cš¨QÀ*Hÿ}ßĞA¢VZi%9Ø%93Ãá¦ÜjHrk¡”k jş)* É\à?¹e+şj(–½#F B´‚Ђ⧤”;D1«B V½…J¨5¡AFC ]¹fN.á“  C2ŸšŒ7,û/nŞë>kÆLlìf˜W:Õm'´8>»d®4£³vÛ ¶TV…`f+ğ-{‹ÁÄÌ` õI R7¨€bŸ¢Pȹº¹%‡Ì>¼8‘"nPÁ§®)[¦UG™t•˜×ªosë$³[ìÖº®Êû@lŸ ŒR7–º¯…s&zS^®¾<øı˜ÎÂÎÂâ†y§¨· ¦UMş ¡õ¹ÌÔ­ğ¡µ/†`ÚÆ°Ç¡Í*Väs"'_ RëR Lݘ ¥]ƒBêZ#Ü!H%0Ãï¢ Vxé ,E A1R¹·fêä:®"T=ä¸ô‚xâ¦N~qk®Ë…tÓŒP*XÉìk¦ RÍP`Ä9‚T‚Hg޼ʾʈQëmaæê+©ÚGÔ ­\kÍGTõxï¤ExBE-Ämò•» ÛÁ)èMÅ÷Æ(§3Àg‡¤æš¼S{ÜA‰Zßf˜ÁÀÑÕÕjx®É7a „áùÍı‹`IbÒ7«Gö˜8æ” °C",úŠx¾¹½WWèÅ4¸ıE4lùò!ÁèáÁî/pËâ˜nxy·y÷j}®ÃğòÙó0¼^¾_5½ş÷Ÿ5:Ş~X¯†§Ğº¾½ÿ虃}üjøcıqóéîİúãCÂém¿¯ßß¼}²ù®İ¬Á9Lr‡Ñì&n{ëéì ac€æ…ÊÂ0j›àkDÑV¾gõ‘Ëùª|é|Ù_ÛU‹ÔêÛ^oÓqT\-¦ƒò.”–ÓA4CÇàÁ‘©ÎEǘ‚i¢–3  ğ È~öd‹Qôs|±K9M¸TÏp©ãÒ¶Ú·0½tÌæ‰”—MyYwÜËs)oø~ ï"pªG$ÁS6ùpß><¼ªH&;$/§²MPigPY稬³Tn#¤I$•”pQÉN!{;8÷e×ÅŒ–‰tRø4F‡Ç··ÌvıP>»=½zş"|º[Gô³u;²EÃáŒR4ö»Ö•ıî İ¾ÿÏj‘üj¢“W÷¥Äê7&C$Z;Á«Ef6Ä É"®1¨ãQ¡Ö“êϽÅÕ(K_ 13MÄ~[M8Í70#íÊ!®?1_¾v¿H&fÙåËÜñw<—‰G‹š!¨!ƒÔ“jÛ»ûÎÀå”Nn|ÆáÆs‡Û …c%š)”ÆÁvÌÍg\,&GÊ.9BG’#²CärFDİ7Ût\âl–‰»Ÿè>ÏİıFì¯XËäşØ›d.à´NÜğ4-wZçnx#Àdb!˜0E’'m¨M&§¶]Á)_²^Ëgy]Ò¢„Œ‚ ‘?[¦¨L“õÉGŒ¼ÙÜÆ)ïT(ªsë©£c ÇZù¢4EÁVÌSÖ&*mË7ƒÍU(#À‚ןı4]"Ômâ²b¼<Ôí¢W/(ªß‚¿Äêÿf‰ŠΉ#¥Ã¡.Qw"İN™9&J³_'iìØgššwƒñ¨gšã6Ş%¢«N”´µ,÷¯Î•´##jÊäÃÀ‚‡—K¼Ô׉r´ÚtÌ•£#€:@ê„ø¶ªt‘3Ų•üyÌßÃâe"¬M±–SÚæŠØ@Rœ"ì?O ç endstream endobj 1400 0 obj << /Length 2344 /Filter /FlateDecode >> stream xÚ½YK“Û6¾ûWhk+U™0ñ"ìiãŠ]Ie|ˆ§*‡$X–ÈY>fjòë· P¤Dyœ8Ù‹âÑèFwİ ¥«ûUºzÿ* í··¯Ş¼3+Ël&²ÕínÅÓŒ™Ì®23!õêv»úe},>m„Y»n“Å×U:E{?]s=´C]w÷Í&‘Ö¬«İæ·Û޼zz„´LÛÎ÷Äû}»Ñ|íğ§Ø&M›üwpƒ£SÖò”ÉLÆmUä âŠíkøĞ>Š~:Ø;ÅÖS_%"Eê«„sfu5J¤¤ÉP‚DæĞöØjO¿ j"}œòlûmùº8løú0]ö55-î÷HX¢Ù:šôú¡È ó §sVMuú=ÒËd <¸è{ømàX—EçùÊÓuİÔa]³;Ûxb¶%îïÖPÏ´˜é¨7Ϋ}ÂÚ¶/6"_?zc¡©;¸ó|í\`s¼ûtùÖÈăÍLu¯S¦´Šº¿)ï\R6ÇcÕ'E½MÀ@]‚ì?_š WŠYaãŞÖõC r\!3<‹ëşÙ/‘b|´[² ,C®»¡,Ûº­7¸Âz»pˆ1Ì1²»<$‘R2¡ùü‚ĞSûTud @4Gn¤ÊîÛ”‚!iqÎ ¨ ½~ÛÔåжpıÕé­ëæGj‹»®o‹²¯šxS6€¤à@’É[o&)8©Şµ»¢ôCùºohªkN§2à"*ÌÍN}û±DãÙo Àø˜2aYX~lºŞ[$-êâĞ$Kuß ¸^XâN¦;hÚ꾂ôU.‚XlÑòn_=<ñniä©ê÷´çãÍo>ü@ı_ğtÀS´ªØùéı+àÁ†)‚Zøm¥äúCÓ^©:9 ¨yIâ]Jû¹¿}tsï¤aÍ–, ¤ºÀ‚Ú=Ͷ(ğJ\üL££ŠúŞÑ¼×Líğ@¥u¸Ò2-Z¥æL{“ “"ãǪnÍ}U¢pv GU¿¦\d¹ºt´ØãµáÍaä-9‚’1,óòá* |pÛ…À#Œ`©2#ø°Soİïh,—(lƬs©ü]é­Õ¬÷Λ)|+ÊÕV®ßmà«iiôØ´a¾ªwM{Œú|h¡‡¶¹o €²ú‚™ˆÍĞñ‚c'xÏÜä³`$èR¯I;?90^Ğã3\î¿:Ò"Z˜Y7dgŸhìYo°¯.°WZ §ğM É_X„&‘³<Ó#41ÀéÛ¢«J¢–ô€(E c@¿ïÀWû¦]†(n˜4v QÀÙ]  òEº(øGºp.°îçP‹<Í¢.aœ[ËrÍOAåºiÍ20ðÔ7”èElv½oŞq53=-A0 Z&ñ")Şóül׌)ß‹ÕîѵIûxÉ0Š¥¹:ã=^Ñg¹²°Sfs³ûC\aÊRŠçndm梘ušñ²‹Ã°tûbµš!e˜qËS&ø¨¡,%¢ZŸƒÙ© 5pgÕ\)®Ş³ÒL«|š¯bºPPsa˜0‚æ~„£ÑT]KŸÎçH[Z³óî¹&,j›ºúİ# BQ–R‚8#)¢=¯’ÀŞ ÜºZa.ÚQ»lşÚ°Œ«™©]Ê/SĞÒ˜¯Ï ›h£‹a èv-ïËËìh=ÿ™[ÎŒ#ÈU¸>OòHjÎoœ¤+"/]( xÆR~ÉÀbqEIÜšMt^ØYĞ ²²!Øâ’%bÏ•;lC߃¾§EÊ€ŞãFƒ'_˜±LÕ’Ë\÷ŠÙ‰TéeÔF›¹İG¯º úbÊçaÉ€LçG®Èå¿{\È©!³—v4¥İP—1e‘cŞñƒÌ õÉN®b×Ó>{F'•£Ê}ÓtK×­8Ô®×0#Ñi — <ÈSsy7™fJ½_œjÿRøÙ½ŞNä<«…”Á³„Òªw]ȹ©¹0?öкÎQJù –ûP'g4U¬| ­Oğ¤'ï İ7`ûş?zÊÑ£’h¶·™ÕFg#œ¤6¦ü9f•İpùÏsğåuù"vuñD08ïÆnJÛ8°;;fÆÿbß,¹ f¥cœ(¯iìáT8bš'$$]>©y*LÂP>8P±ì+ºsµ8ä?^—bPF ®Ú®÷5J:ÅA¹8nETqzÅdjÁê”d ªïYÊP^·º<•/`ÁÍ€Ã9ÿŠä …j‹‡E¼e\ÊÏÀƒlğ§\ i˜—È/I^Ä_êıÒ0¥óù¥ü<Ê8 €OfÄ'¼ MÚøHªíšlÊğd!ÜÑJ(jü¢Òm}Åèw·ÍP/Öesο´.S9Ór\ 0‘Y½şyïÂÑc‚#ŒeÆçĞÓ‡¦ ¤Ù"ŠÅ‡†¹pø®³ …L2~Ê2_b‚6f–MÇ¿!q*ôÓÓJ>O0]‘ ¹—‘ʲ1«Yx·„±‡¢ë¼ÃCD£©DüUvuiË3ä2LŸ¬ôßT׆E¬jbÕŸF9Y|İÙÒš;zxX¸ØT3n¿Œ Hn¸Ö§÷dzl /FY|kõ, ò©OïŸzb.ÒBvW–sk¥ôb+vÈb$gy’ŸÂb~¡¦IíàŸ–=S1¡Ä9@¾Œ‡P+“_‹ˆ÷CÑ.ù¯Ì˜ÌÔ麇úÓ’€š¥©ú¿ãØËí\ò÷'Aæ…1³ù,[wst(™IÂH̆Ђ |÷€‡³hNØ´æWpjòhŸ‹Ø‰{ûêˆÿŸ(ˆ­ß÷´vòh¸æÙœ¹<»PUбªÄ¦8¯/ÃkšY.[¼Ôè³~Mxøm"Uwvd~:Ò³»Áòu»”]wzˆÿ"[0¤ëv´”_[ÈG5^Ñ5§BŒ†VsãŞnˆ¹˜Ÿ ÊÌÁ,Gü>Ũfhˈ‡Cˆ¥+üˆªÓ¿÷W<®6—„b›}mFVõû¤.ÊO/>½‚ÍãÖßEÁfI€„n†¯iÚl篭ßݾúdª‘™ endstream endobj 1406 0 obj << /Length 2614 /Filter /FlateDecode >> stream xÚÅZKs㸾ϯPnTÕƒ÷csHU¶vRIesØqj»9ĞÇfF"в3óëÓ €O²½Şª\Lh~~İ0İÜmèæ/ïh|şùæİ‡ÜnqšëÍÍç Ó”hm6ZÂ…ÚÜì7¿d?Wİı®Î‹/ÛİüíÃÇ)½4„ ‹yÂ÷ÛW.;T_¶Üfe Ÿ­Ï9Ñ–÷ôwç¼İ_.Ê5aŠ/-Ú2ïʼHšåá±/9îôuËMVîÃ`[ÖûòÛ#7çÓwÛp6ûçLÂ@hN_ë îÛ¦®¾å]ÕÔq›î޳½Ù9E5›cÄ©(ˆùÒ°²2Y^tçüpøŞÎ'dUq„ö.ÃH[vç¶îén¨ÔT LÉT/†‡v«XÖàŸâRdÌÅ‘‘íN1•ıµ,î÷12Ô~"c&û|®‹]84pZ¾85~šª.0 âYó+e¢lıàuv†)[ÖJİKÔÍFu_ŠBËİË&ù ´¶,ÊÊë«<‚%µY~ <çu|¶wçcY#MçI@^uÂiÃüBç^LL¢jä\LO÷U°)øNs \Y4G4Z¡øÃeõ–eùíÁK¨îaëË3Ѓ¥º?FÏĞÅi…!Zêñ´ ó„ *²0v’@6ö¥ªTÁ`à„“_GôÓûG´¦‘à˜ÖßZ—ıJ}¬ò„HFŒ³=›Å}ÓœÊÄacl€ÕXX×{’£ÙCoˆ-û0VÕ§®Ì÷°ùá40\FÚÆ«c.ÊH|‹çKùsŒ¨1ü¼Òï4^7÷í ûCdáV.{ëÑáÓS~D^…*d< |ÿãßS®E O;?AˆşG:B+´èéĞ×QcÄ‹ˆ‡\ğá#ôøÙqA r¢Ö‰µD¥0³øjÆş Rh/e ªfb ô¶]li?†(¡g–á‰f3ȨŠ?¤4+‰“C²zÌçòº kçöşz”‡²èì€W(·&„¢í‰)1>.%£‘Ò='p,æ~ƒd›AÜS~“øÓ áY–Dº!¦ÏÓ­‡ªwSe³âܶ1‡î¾ N T!mÙD^æKj (›kFuaSf2„VğQ Óİ~µuUß¼ç5¥šÛÄãò©8,DÕ.<1V~¹üÚûØšT"°Âóş4±—Yx”DuE¤°£– }ìÀ…4MUÄw" êâÓô÷ÇoÌQbتA367h+'í)Kg„õ`÷üñ”™ á @2 ¤Djc+!‰-™"z´³¸%£W÷¬{‚q±™®4 ºpÀA>°k‘ÊcX ÂhùŸsíÅk¼mcªmRRæ†e."çNqåßbÎôï«ògÔ+Ì3 PÏ*À3ÅÿAòiéGs˜¸¬¡Ùí¹ )ú ÆæyŒõ ~×C²ğR½·÷J—›ÖS1„{] Mi@¿VbH†X3}yŠÔ9Æ‚ëx7Ä!»ã¯ü´˜Âìî?îSs*Òù©Nk1—K>bÆ}Ò‰0Íi-Ô̵€#ğÁ½£HNcP$¼çÍK8È¥úÜAƒT@¤Fea$¯ëòËxR À#,vs¿RDò1$µCß«Ë2 Ö(ƄԵg¨ÛPË ÑÍN†‘üHò¨?ò¹iñ‡Ín«}uE¨ŠŞGd 5Œ–2¡¥¢ÃéÌXÙô#~a?Õ8{®!tV w FÃõØ“‡¿e¾éğ?ÔÄŸ:Oä°#°;æ_Ê^Ş+°Ã€!Œ5Ìó°#®v’QA–½’Åş”`I BÍ@üßdÀ²œ½‹²—ıv¨1šC‰<*wNC9-çøëlj".í Óƒ'=)9+)¡Ğ+ŸÂû…¹âlñ‹CÈ3ÚMŠü¨Št>œár|´Ã·<’ ğ)ò3S_º¾á ç‚ëåͲĞÎĞS?3ƒ7l–è½o•ÁÚr>Z.<8ˆüÁãàôr*Åë 8_«ô[«.‰»ö1Us`+åÂã|±±†ú5…Œngƒ¿Dçë"‘œ8>¯–“D­Cß ŒL’P½Ğܧ©"–f;B™Á/…Ğè—øê›9[v9ö¨„€$ M¿-˰¾oŞ }o†eñ”A\èˆÓåé”ß•©JÊ2¢Åà¤s(_õn5±©;0‰ ‚³wH äRNåó/  ØzáÜ¿G¢Ã'ÎEYz9{M}ˆ;‡ú£*£ùÁÆ– Tcy*A[]W|5…3Mx>ğ®úæá‹c”»ûÜ6Ç”Pܾ^Ò²iû vèŸA%°¿Ç¢¡–Å“*5w-Pû&·v%¯V£¦çz@µ_·ZO‹Ø'<#JÁà›ø+$ÃTÚ7h‚wAéì§ xÚK³ßNPáPÌÄôÓÔ²–—j£ƒ™P±¥Jó*Á‰|à ÊŸCO¢ï‡%aÆ#£_)ÿtB3zÕwæ e3-ÆßÒ„˜¦´«ìÁ—q©Ş­ä+½[Í@.n=Ï-£ä설5f÷WğJª›X¿‰÷‘©%J iİÌè4~y×á½ë€H¢ëğÖ&SkimÇ…"ÌØåV¯NoıÈHÑ×ú‘[ÿPá­üzCÒöÉ¾ÙÆñğşª¾¡›ˆà“‹ĞN´¾èæİDñ-ƒa‰ù…»ç ç‚ Fξï¶Í ‘f¼œ´DyQŞ7‡}Ù&·ë?œGæ±;:çµÙáG™ª¤(uòÏ*°«OÁ«;C¥n İèS[u宩‹r8½N*ÇÿĞ‘Ò7¶=AZLpğs“Å¿óRQ«è<‰V¡!Î ¥WçŠäÙ)'ÿ%ĹÅΟïâú½8{>tÕÃ!v›b©¿ÇD~ í6À¨Ä&¼#J­p«CéŒè‡›wÿÅx endstream endobj 1411 0 obj << /Length 2177 /Filter /FlateDecode >> stream xÚÅËrã¸ñ>_¡¹QU+ Id©dwgj¦vRS‰+—İh ²é¡H…¤ìõ~}ºÑ Òìì8• âÑè÷‹/n|ñá ÷ã_¯Ş¼{/ÍÂ0“Élqµ]±"3‹LçL*½¸Ú,~I¾ÔåÚŞ¶õÆvıò_WŸŞ½/‚+|±üEήR'egq’%]5ØUÛ¬-mÜ/µ†İj)’òº¶p\$l¹*Dš\İú3û¸,©vûÚîl³”y2Ø -^/e‘<Ò•î:$åKÁŒö$u¶ÙØßïÛC¿Ú_¤NHÉ ×ݵ~èëá€I­’öW.”íèÇşûPI5bW$­oÍz¨Ú¦¬«Á£‰ËC‹cêĞu b¨Ò«”O\Hu„ °xäÌã\²`OGr.“ DGè¿rÍ{ë~²äÖч@³øB,:T/œüıÛÅ/îFÎ2&ıR>€ `Äw$WÉõa𤛌q@qB{¹ÙTÄÃèSE Lµ©[¤ÿWT²n7î‘ ¶ªæÆŸ¤í€VZ¯HHíä”× ºÚ¨NşÖĞT&!Ğ‹ø†é;‡÷L¿†ÛÅŸÊ™ãʶkwÙ0¢ô¥¢ÑLäz<ë, !o*RÈ“şÏ¹YÙlhÒ´~ÏóÀvkoËæÆ¢)zId)Âx¼}?TÃ-°B©aJ¥ç\²üdCÿ…éq&M>Şcíy÷^¤ÁÙ•”‚ñ"ƒ gEê¥ÜÈg·¦,ÇÙuzW~µ!V¨ „Øä5cXÒxñ­§Y‡¸§sa.µHFı»Dˆ)ãj¦ÿßLHE£Xqânµ‰©$hY€ñB€„üñBLù¼Øğçz¹bÆmé·4øbñ6ˆ—³áyкØ eyϘ‘£Z{ünx¯È™cğo­;[_•A'€#ğ·Ã.àÀëeÂ8Ö¹8Œ§Û=¹ß]’ 0ïl®HKVŒŸ©ìn»ÑE9O£ÀC¤©™Ê¹r¡.MÚ¦ö1mÛv´´±×‡›çáq}¡àĞíÁ¥IÛÛş{pÛœSdÅıMÕ¯kØğ·==O.`kßy8†ÙÁãpğ“jóöûÎö æôc¥•ô D2T&“qtX©L%}¹³´Tö´â·dòÃçŸc~47L¨úg<8xz<3¦줴ˆ)Deu”Ü—'v2 9ãÚ_¨! Ãt–?á˦ZƒîQÄpŒÇ@2ş¢[XF}£O[õvxû¬+œ{(§L÷e}ˆeT98‡\ΦÄ`2î—(*ì!Š¥f’ *‚6•8Ÿ4#.î÷”Äg¦¶œ+“üØ’±(”˜3,8¶k]:çÖÈû,Vşı‰)cGöÕ øí#EÛu-¾ƒæ¨<œ qÔkåT“|ÿWN·Ó3j/à”£mõ…2Å'z/SuVïϧ Z1ϽŠ9EYu÷±! æB$œÛ§aqöPÕ5–®Ü$‡½]ÛĞNÿØ8)ŞvmSı^º ^$ş¬WÕš¥I¨©|,,Á.àÄ’¼:ŸêUDl¤ºàõ+[o|œ¦¡¤eHªõ‰,*#LY&Q%Ø:U ˸ …ÿÓ}DşpÌ(uIşfO GÓJã„iĞwëSy©o&èĞ_ÛÓÃÒ@õ6I3şXë°:“ac¿Ğ/OŠîÊË=šB2aÄk´«îÊX›JK¨;õ³mªì•sÁçÈ6ÔâæɆGb),ÕòU:RòÕ;R`¼H§Óç‰ø& Q ‰³~’ÛÈ4w>GëjBìá¸ôH«‘K>ö¡dZ\êC ­Ã\´%X¦L´åu)0¾Ò {x¤×µÀİS׉R1€oÎ:³>”bÌŸx؇Â_j‡Àä¼ÌÂşş;Ÿ #9d\Øç§|W$áY?ß÷Iwy¥HÛ.y ıªw=g2'ìxEº;׆ºTG²æì(–Oe¬ı¯ªtÚ~ [ñN“r¬eÏô۹Ó±¬î[ò Ò‘·Ï:02/5”R@çT G“¦‡¨„İaÊ¢ +‚Ooütõæ?—™o endstream endobj 1418 0 obj << /Length 1823 /Filter /FlateDecode >> stream xÚÅXK“œ6¾ï¯À7¦ÊÈ’ˆONÊNÅ•gyn¶ì ³ƒÍcb7ë_ŸnIÀÀ°›-'®œĞ£%u·º¿ş nüxEı÷ûíÕ‹7\)IÛCÀJ’D‰T„Ç2Øîƒ÷áÛ¬N½y¶ù¸}ûâ͹¸HˆJRØËÊÊl—w›(–4ÌÜçv#e˜•ı†…9°°€f½á*4ÍLòSÖºFqğ_ã¿~Ǽ:™ ×áıF‹l"‘ÊğÕéTŞõÓlf g’p1êöé‰6,´:ôe‰K‚(¦š(­‚ˆ1’J9î rq씌E˜Õ®Ÿ·mÓ¢’B„¨¤Ûã á¾qh¹ktY•ûÅó)şğËÏk–QF„®~ïÍ¥Q\€ñ|9ôõÎMM@†Âc¼xÃÄÙ²ˆó˜$:+a{+?P¦«f a+ÎBkÑÙ&ûœGí­×_‰'Š(!σfq‘›rŸ·+öŠ”ĞDœíÏœĞLsF g£ÁÏVe‚¤“ÛZ{f½Ï¿Ü6}÷¨O˜„f7ÿÕ>YÑLrB¥øŸr Yš¯±XøˆH&D˜Œ™é&‰ÇËLYA&~’Ğg»‡¶©°E‡y›tvœöZLOÙÙn¥P¦¨]ßf œZÈa,ê ¡ÂŸnÊË0›¸6­­¾b~·.E‡3•CœçkÁ‰¤êbt gc4\—^?´ç³?«¯±gŠ»©?¾¶’ù®©r/ˆÎA`‘é XÒQkz–ÔËÙÔ:°D2“³¹3ªíªI\9¡æÀ,•‘èAúíÎE%4%Dwm4‹Ã@-l]ÚâÍ`êÚ1sÌ D OXØŸ¬ÏšÚÍt÷µuô±mêâK†Z>wWÏbH½Èë»c/æ<Ìÿ2m¶3®c¾‚A{¨i¶;„/NdîãŠökX´÷»ÕËv ¿/ïrÿEü ÁÎoNt_î¯ö¦Ñ&:7æ‰EBx&ÉXPğÂ_ßšÕ0f¨­İ¹ ÜñÜ!¥Dp(&\ EÅ.ƒ&P“Ëp[TyÓ›îò(4D“xX´=®A ’ £Şíˆæ‘)ª•Õ”(:ªß™¶ß™¾ÏppY N¿Ã€Õv " {)\¦À»¼q²cj€0vhÚa#ÌÚÊgõŞ5P§Èø…Ñt~Wè‡ï«C ›Æÿ²0g“·Ö=ë¥YÔO­ •E—cE²e©©÷İZ q¢dò”šÄ¾M‘NB‡\N¾Ö=&¼)qÖ@G3§8[ƥ߰\jÈÏ„óyˆ¼º¼ñóEj–Ú*‹fø¹våĞ[lQŸp.¯³ë2ßû=Œ_€² ÇıóÖ“€»9àQ’G¡Ï›˜'$N€ı@p.Ê´˜Œ´9p˜®Ö$ Üî+€€…YõŸß&,åOÌ–Y²$EcX8O]ù€OUÔE…Zõ•¸Ce…±/§ç .à}q>szù%Á©X²v¸ö>/3_†°[wğ.Õ°¨l꛼uØŒIŸ• œ¾¶² ^B B ô½l><ô’Iá%3(Ôÿ·Ş¬ÖhYü¼C‘‰Œ¾ZËîY€ÕE.Ä2v¯Áø"pÌåB,ù’«Áܘ v㿵¯<%1Ÿ#Vvİ5eolY×>kb¸”îä÷.Ó„İ‘#9´—·™ğöM•¼„©‡Qê%n™‚5\èUæ×TRÏ L“$¦\*#ÿîÍÒÊ’z¦6‡"]»öôp¸¼jƒMdÀ_ôJòQ8mb®½ùW"ˆÁû@=îIxlë)ŠGbPÂfÏÿÔÿÍ8·¯³ü¢ò½¬óùM%zñ.¬g“ˆ '˜3È®Vs <§âé<.Æ)OãôD㤧q¨N+é~À÷İn³ğ˜[« ¿kÚ6Ç€‰-"æõ.ò1>| V–™AüØ—Ì*T¶¦ó£G?öÎaº;&jë]r6ApT _µ`kˆ²Ö»¾td^ >_RlÜX:Î@ ,¿ÜË…›v®+óJHNçú SHS^o¯ş¼Â¦ƒ â„Á£‘*IÁƒ]uõş# ö0 JØ:xgE«€³Õ–Á»«?ş›M.ÿ Æʯ‚MtKÖíWƒÔ‹'dßÚŠ«!VlÛ£ïèËıÊ»ì¾Ã˜Â*bûKa¿éîØ4õ ¼ë}gEì®Íà‚şË³Í‘›>k÷^=×^Û§0Ç_³İg[ߨíF5öWd-­pgÚæŠ©]^æöm‰ÚûŠÁ“ÿ%\\¸8Ú³ºÎKïëQxæ+1 ‰Wá+{ZU£Ş[[iì=àmœLÂæœUÏeMw©ÜjFùlúßÖh¯A endstream endobj 1423 0 obj << /Length 316 /Filter /FlateDecode >> stream xÚ…’?oƒ0Å÷| wƒÁ±± k¥$R—v°ºT¬à´´ĞD`úé{æ_hêæ~ï¸÷|½!Š:<ïõf»g JI*™Dú„¢4&,eH EHgè%¨ìq׺sN©?ؼµ¸jÃWımp‘T\Ñlj#×A š&1’°8ɯÌ~·ç¦Æ—Âíû¹ÈlUw<¾µìù³© 74(ͧ«–&ÉŸ7à3×Öİ-⻄·¦hì߅˜½‘ŒñÄ‚0*çâÆù‡OàìåÇ@/Rj(Âí$L€`çk\?3ƒ–#ºr“å5?O^š!·¹¼´ë|õ±éƒ‹l“99ˆÌ^Ã8 Å^ À q¸²¦˜K¦uŞî竬$¼FrQDò¾[Dù/ÅNo~ji×£ endstream endobj 1430 0 obj << /Length 1543 /Filter /FlateDecode >> stream xڽɮÛ6ğş¾BGˆe­–”[k$A4-ò|K{eÊf"‰I½åï; eK®R (Ú‹83$‡³Ï(ôN^è}xİúóşaó>ν8 ¶Û8óömν¬ˆƒ4-½ıÑûâïÎÕÅ ½Z'yæ«?÷ùZäEáµĞ[§eP|şWù"û¬WIäŸE'O ^«şÈÀù^”Ûxë¸eQPä1³ÛŸ¥Y­ãmè׫¸ğGap¦ÖòHá wÈÒBúu3ôµ•ªgªì‘ phªúvĞñ¯Ú–$Gdç6İmǽѪC‰QÈ( Ê,c!Y6Ğó èmo¼’(šì"O™â61%h÷†W6m«H½º²WvÆ*]# ñ$½ï[ô,ªK°Z§Q>“*Î"ò ®]Õwȱá©%2~×/ö\Y†zqRVVÖquޱøÖ3~„èÇ+îÈh«©¸[·Vä¯'º¸ZwrßèØW ¯3e' "°»Ã]|Ä~':¥_İîÔÌ*±!Šje-Åİk¬”²+ˆm¦€j¹¯t{4Á’Ù?û$Iœ9“$õO¢º²{¸1k…|VÙÖ¯d[ZÁä׫ì¦ËÀ³–.4ÃÜ8º]ÉÓÙÛäVšD®ô‘÷me¾±èQ”i òÇA_“Oób!«z—UD2¼vlØ£hÅ‘)UC Œ Ù~œèÍ”Oà‰Ñíˆÿró¾{e]_…û0 ?~ú–U Z0${Ğ s^NŠ<Şó TF5P ˆqC¥:ÓÛöòv³ù:‘60CÔª#"FjÕ͈ÍvsDÍგ¯—¢bc‡m¯¬0›Ó ¡¢m¾ör#û£x øÉ®ı¾_vƒÖ‚­Ò¾®ŠÄ…3zšYRPngIî›ár!©”¶†·n™©øÌß]ŒTtq>ÚŞ¼]­‹,æ°À]Õ¿ï»ß?#ÿßöïvûµ±Èè#;-CNÌ´(],¥Ï €ïOßĞÛ–zb“şgb{‹$À XyÉ<! é ä%TËmêTMÊ’T%`fG2¼ÅE ¨%ò¡S7eÛ2tR¼R(‘ù+÷¾ãÍm;h÷††L‚[,3‚=[ĞæC/ò4öz>xğ¾@„§~D±;Áƒ€£Ÿœ•°Ö>TĞCrÈ&œKLˆU¼Îê´¶L/`œ¾jÇ#®0ÊMxœ‰,;åêv2È{çŒç%­gA\Å$İÆn¤H’ áã ?°ŠâÌÿéi…ÅÿZh!Ë…l¡ ‚–“M³IMÄÒÙ(lh”k°á"Lރª<‰»úŞpHgº\¹-ôP®†´;›.§ Ÿê]iß½¹{ó>J'Z c`_+h”ßİ™¡èw£?[sÙ;håÄÄ.ϤÓy(‚oÍ‘xeôãâ±—Šx ÔÉ»B‚.šœø„E˜)Í@"äkex*pyF¬ØwM  IòÑ$€+p xü+ÜZŞİd‹Â™í®…!Âx“€†ÅÔï0ÜÙŒ]wÜÎæÇõRj*&HÌŒÅt÷ôAÂÜ ×K³™äóŸzob ¡[ A´£ÚùÊL7ÆÑÅK-.ã| ñv¨(D¿¹AG1õ{icÇQ zàø°ĞZéˆÓøßhãT2-–ùMSÚ£8CˆËQ1Ä\ŒÒÍbî_œøãr>$<ğk0EÔ8A:ô*šá3Xƒ"“…J3˜WiU.í{Õ¯¯Á7šóEÚÿËšøK4Πؤ¥Òin©Å§ôØdNÒğÿ.œ8À$uØı©áük_u‘(\`åšŞ#ıYÚ³û‡ã¥vsš© ª>‹?$iSA†•Ôçn‰ĞãÔ©E ?`ªçi”Z¯˜•)V€´œÿyâíI\ŠÅ~”^Ìœ¡{¹V21Ç´k±¸c³º%åî.oç>÷¢¤ Ò<‡æ ÿûcï‰Âtvêİşá/ï­V÷ endstream endobj 1435 0 obj << /Length 2901 /Filter /FlateDecode >> stream xÚ­YKÛȾϯPNÖÍ~ñ‘KàÙÅî!Hârğ.°©g†¶D*$å‰ÿ}¾êª¦H‰ödc_¤~w×û«bºz\¥«oRùÿËİÍët¾R*)Ó«»‡•J³¤ÈÊUæòD·ºÛ­Ş¯‹D%êv£”vëwÛ[£ÖOşào7&wë~èNÛáÔùşö×»Ÿ_ÿP¬Ê¤ÌtF‡¥«*—å|ÌİöØ¢8ïá-zº'Ë]”ضøÿ ¾kªıf[í÷ 7äE’Y\ıTõ|Á¡ínµü?Ä»ñ~]Èû©ÿpj¶Cİ6²sçûmWßßn°ÈïèBĞ`mRÑ|’»|çì±ÓeŒ]·¸¥ë©mÖU'ƒu³@¥Jm¢µ‹ß·Õn³ûÜT‡z»‰4/«”KR°S¶ı‘ox~ª™(î.Pcˆïz¸Uë3™a¤í˜6 éRÏi“—€º,o«›GêdëªÙñ(ø8fåëöãéÈ]{àÖ;Ü‹Uj®¦ ¡zéJ­:Ò?jüóÇ›Õûpr‘XYÀºÉä¹4 w^sPg:±gEéŸÀğİæ¾nè±Ëšb;s.Polš”ÖΩ_f§‰ì„hw»šªöÜŸßı%–_hVØ İàü ¢ŠD'æ’G‰°ffİ;£m³³ùj1ß·lµ$ßğT´·¸&ı‰~<šzͯşŸÌÙ.€Öê@röD+„IVGÿ0Z^ÈúrpVô"8 ÛâUÏ ?Õ=x¤Ö{9û-/åïƒÆùÇÀ>ôŸëá‰×ı¶¤)EšdrÔ[&şõîæß7J¸lS“F¯œƒ§ƒVm7ïMW;Lş¼JS«ç°ô°2‰2ZûÕ»›° Şfá@ËA³J¾ñ¿í—Ô¥dwáÉǮ݈¦i¢R%:("Ûú¹TX€Õ$^vuu¿ÇØS³>TÛ®íq¸‚;Êœ]ÿ­'—âÂQ*Wp|áİÁ¸iäS–]€‰µ*îşÃòáê‚+uÏîºöx”p”ğÔ™’û%J°|µ0,æò1¸!ó!W ʼnóG€¹ˆ…ır⼸bş9Îæ–}U8àÊWÑèÜW…!ÏPáÒö)Nh€»+e!%›—Àß$pQârÒN®_– ½lŒ ÔiØjÈ¥óÀĞòÿ¡ú(¦¤Ò¸5q¾"xı›Ø—í~Çë(ôêÃs¹yX’ “ŠÜHk¬ ÓN=OI¨Qä˜Ç¥Ü Rã Â_õ‹^“Ğqdѱª»{7Ü=kİ/¢ì$+¾ø <Ôp5¥~‹ü |š…£ ¿pk ï íü·–¶¥¹¸u á ‰qê{\ × ÷ìÊE‡¨1WU‡ôC€O ™ÏMµmÈ”­‹Ê%µ&Éİè.{? 1ìüÍ’L—/)‡2ùW•C+\—æ+$‰³ß òjëÂQGÅ÷/\j(^Øïr©É =¿ [¸Ôi0ì»Ü‰#rx¿Ùúëaòh «¿_CK'¢ÇÛc´°N°-µ’Ò,cQ ˆs pğÎäÌUmÌçFı|dÀ*ÙZFœôÕ]ÌèO„}Ì ÏáG–¢´sK=ªÚ©é«¿àĞTb =Å‚c†h§ï ¤Û'BWV§—†7,„Ûo8ë’ˆšÅˆš¹˜M]ä˜×ÓŠ‘Åh_e¬» #€óC{ÅBJ»xLÀ1!eÆÅ},ª\gŞ1 ´qï—¥k«íë~KÁÄÉÓ5_3ä™=ëÚB¼Qpi¸ï*o6’7ÿXu÷Õ£ó~ï'Hd„3ğo"iÁ»L¯?`íËéô´0…œ91ıCP}`hÊy şßÖ½'”Œ¶m´ï3§ó˜~_м´íÈÄÀPÎÙ¿¸Š»‡*Hs Iu'JRºY:fepîÛûß'ô"±¹› pW> stream xÚ­ZK“Ü6¾Ï¯èÛª«¦eñ¡WrʺlÇ9lvãŞ““ƒFbw+VKIñüû©&5šñTY'‘ € øm›hóá&2ßïo޼Ï6y˜'<Ùì–Da’¤›$NC.â;Ú|>•['uVÛHxĞİmwqü©Êq Êx*F,± èî‹aP•i¾ªo‹†j‡K[u× #il€Oƒr»šß«ƒêwÛ?ö¿À\vŒ…ylVm©†p»K"¼»ÊÌbOf–‹ñÒ·ÔäÍÚf³ŠVzje² $¦ )²(sA·’W E ‡L¥Èµp.ZÔãR4Í#µ¥8šî®’Øæ+©ùè¥À¾İel꿱¿é\İÚ€ˆ0‹†è É‚¾Ç¦»Ó±?QG¾Í ƒV'™l†W $øI‚Ö“H =°G} ïxRfLoC}lµs`‡nIa$W½¡ü÷”*úº¸kQº}A\×LÜEÒ½{úcדg&AİÒ·éÚã¦X·Ç§œ|‹Üzê&¤î ôÜ$ÈĞög´a›7)~ûp³ù D…iÈLÚÂÀ"Ô|™ s)yŠˆóŸ`™2á9¬Ìøu©¹è f7uEÕ®m`‘©òP'œ2–µÑ°P=¶Å¹.©RvÚqG˜¿˜uo‹Ñº*¼›4vVï¬Æ“1>˜… -\e¯ŠQ T©GtAÉ‚ı ¦r€u¹Åò/h÷ö(°q¦ŒÍwºU T‡t2ŒÕ×¢qëi.õëºÀã)ë÷›ùZ–’§À—|-ó<È“¯ı€[™GêUÔîl¨‹Ğí\Jêqõ=…­Á°Rc¨ ´ã‚Wî·¸€8_ÀÚ䵚ôà3à¨" n‰bšûGå¨Ã]ÌÁZm¾d"ºÃ€CQ*ÛFëòKu¯ñ*z+—{±Ü¥frã@‹/ÓŠCµ@&oŞóØ=£ Ê9°&ĞŞÆtîÀg$#`û'X@aC9÷ •I˜³Ø×pƒ’Qîã=9Ÿë"W©ƒÌôV·¿ùë†,ˆ“9ßÄĞ7ɦ<ß|ş#ÚTĞ–Emt×óF„LdPj6ŸnşGg½/-ÉC‘¦š@°™*âğS©yæ0j ©¹ £DúR,˜…" X˜µªi Eğ{Äd?Œfûãå¬~B:Ì~"ˆá’…iÌgG05iâ¢3Ê®ïÕ@ ÔµÕ@T¿¤©¨ŞıX——¦èÍ ‰ß¡ïÎT“1µ'ãÄ" ކÄjRóÁ®2 n}êšJ5è¡l )X¸Ì¶AGP2HGx¡›0Ğ@$ ª ©´c#á÷(4IA]ÿeu›Ã ³F2½mi«åmI±–„#l. „1"iµ˜tpkn´U²¯„õ¿Úc.˜Î»§ãÒiܹÀŞ4ãK"ôyĞİÃR".õİåx¢ÊÙ¢š±¾otܼ"†Li–ÑÂc7<³ ˜Ùpü‘ACmÎQÃp..cw†³´41"KÁ0J/=ËŒs0»l@ñ6sAd ÁLC@Zˆ`(R4Ş-\Å-Å»&®³ÍØÌª9ÜRøópR-‘ óuNh¿ò±Ğ¯+z_ ß‹†ö§Ú ÇY­= ğ + 胉™ ew>w†Xƒ=RDñÂ_İ£i(dfC#u:Ÿ€hër„ŠÖ — «C‡r°ô°Õ'᪡~øÕ؈- ö¤.LÆÓ|j=û÷0z¡‘;ŒÅpÒó ¡úĞ¢Šk 9 ÿ™9éá;Eã,ó"$ÓMŸê³nU1TÆşR‚ÚjĞ¡³ËãPscdp5VÛnV[…½Œ 0Fdv¬OG"Á(qì¾Pü îÁH¸% ìjBˆÈ¢sd.Hq!$JffÒ¢O¦ÉÁÈ ï9ey9ë«bCa±ŒSº)É8ñ÷|<»£fàˆ¿’:±Û£ˆzk/¹uñz^!«oÑ'ÇX£µK ú8¦7±)½Ëív¦ÅrºãÛïªüdK ’ñ^Ç©="ÇĞı (¬AŠ[øãîáŸ÷r,ªê‚ínÒÁᨨ{3Œ, ´J•pòk§ÚtCxa?×ÃŞ•íÍ{&İX3Ìs±Ù ˆ°R3¢›t6Ä‹¡°$^ Y¬„À'¡Ìå÷l,ça”æšϯ§âS¡¢f伂P&Ä@Ó KGÑò„¹È ¬LW‘ A#b_6ºË‚Ô„C|)W‘šÄa–s_*Çhly¾°*IºÊƒ´0c³é._X Qy¾†PÁ#`‘..0 ¿}a­Eš…,YE‹ –Úxì˾-ò4LØ*ş%£œ&~fêıK3—10ÏVÙa€ó!°yÅÔe ®&ãU„¦q˜fbyêU×_ÂJŒ¡BÆ…w¬—€à1Ü®×€K`%€Õ+àòû…Npé }\® ÛÂ¥+üxAhœ†1,ŞBõC÷…¾€–YÊuÖ—çQÏ×÷9¸äଫ,°`qÈ“åş6\ò0_Åê"MÀk²Wø¶€] ²UüKÀñóxqê }4¸àa–Ä~\¶"hD<ŒÔÖÍ&_ß/t Wè«@cÙ4\Ùp¼+µ á }h¬ Ù‚†7İ—Aãû¥N ±°À¯´° ñMß@c¡4¦î†ŸtŞq@ï:F‰#dî Ødì:»é"ÉycÀjA|½¬1u]Rra$òİ¥¯”áÕA³0¶–ƒV3Ç•Ñχ:_cs`ØcxFu^|Ú{’ù–æï“¤1Y:JIKr,ió¹H¹®¼~6ˆƒÿ5¥²¥Ñ »?Ùå ¹ÎÙÇ8n„UL8깘^S®¹¾Ô{ÛÀ^]?5`ëëè-òÙşÃ¨]óq˜¡5ï1›M™9›Å|æ5¦¨0{}E§Ôª·58§ÿS° ¾G5RÏ…”åe€%Ñ?E`bÖtÂ'ò nw*ç6…cm†: “²Eß]ÚêùLşÏô /±F¨Œ¦ÿdæmùd³à(z_Æ—\ïi·´XhIÓÕÌ@š½”J e_›G¶ŠhõRvúİcı¿<>}‹'ãgTÌXjú±&pà ª}zUÖö™ZNÖâœS ‰æ—óğ?Rã~©Ëä´X¥> stream xÚµZIs㸾ûW(s¢S-4±`å”8ÓS•Cª’ö­3¶DKÌH¤CQ½Ì¯Ï÷"$JvÚÌE"ÖËÛÒÅf‘.~¹KÃÿ_ïŞfÁ“*‹Ç§O3f³|‘iÄԋÇõâSb™¸_r.tòq[´åú~)N>Wõºª7‡û_ÿöşƒ]ä,ÏDF“¤‹¥àÌ î‡÷ƒtªNƒPÒ ê}u·-};,êĞøù^Øä»oÿº­V÷Â$[_¬‹½ŸP'_îu–»cy>åa@¥©–\v4ÅWš¶,kZ6­”s–ë°Ñ+jÜ–{Ì¡dš¬°í¤qƒ×¡ª¨×ôÁ“‡ĞåÔÌv¿4R%Û²-}¯¢ ã:šÙa7¾âàF<ßSŸ¢ İ»âóvBš§Ğ1l„¾ûã{7µú¦Æ,R™ä©iıÇøp¨¼.ÿ•rU»D±ªé?sÛ6aÛTïöH ÅjU´Î2Ô<µÍŞwzˆú…ôÑt[lÊí® ƒFëÁ íĞLKšØÂ¦Áò0>0_Iãmêϯğta%·¶bD”ùˆ¾¨T¬ºc±Û}?µù/¢ŸƒŸ²k|ÕªÜíp¬K™ó¡Cm¾8µbš ÍRûQ2sÄf“P¹k\©ùÍQİÚWŸ£8Ğ»êüÿ¶8D=ÊÚׇCµÁõaãJsĞYuCÿº¤ +Úï¾: _ÇC@x˜ÚCUW]Uìªß‹®jʈ1]SqNİN;D¡=â:ë¨!lîâ Hü©swˆªp¯„жåáÙŸOIÖáîEćÃb,Ó}æ—¿.ı$efHÓÄmÿ_·e <4>¢ùÓô4¿/ºÓ¤ÿúlÖ{t’ǵî‹M¨oÚx`{¬/g˜8øÕGPÓZÜÅCháöpÌËTÍ®·è¥ªaæ$“RùçoDPTmPÓQÓ!ÉÉL ¢Àj5 ğşW#Ağ\bÉ–I›{\s6DŒe¿ûBCè¬ÓuùTÕå²üöŒå•ëeàаC=F“)Ó¼ëKãğ¾Ğ²Cÿ1”æL¦r„Å}§x )|XЦ`Ë•ê{´½×$¿ğ­öÚ!A×e,—çiíœÓAY×÷çÇ»ÿÜÑ ¤ ãĞŒ+¹PÖ2½Xíï>ıš.Öh1™ÛÅW×q¿ŒK‹¯İâãİ?‚R·Ñ¹‚X,wÉ4(å¶|š€ÔŠe3Âx0èvş2§·j™Ù¦R#o ø/ E*™¼R8‹IÆÕŞSû®Ê8}\-˜2"Æ“k ksf¸˜6ÌêUŸ¯ˆqÜÿ‘X·gÇ«\íd9¸%ˆ3rɘVó𠦂ó2ßÌÙsÎòUœ3vÏ;cìÛ¼óvĞ{Æ ¯à{ş#¿Ì?3ãîšÌâ TÉs–ÍBËRf²3Âr|;IV笕™çœï»Ú®1Ïs»Ò&Ïo70¿ Ÿÿ£Ğ«‘‰™Ÿ3ʬL1Ï"²0“Ì_–XoìÖğUòêíȽ¸!Wù’{ÁGŠÏ±_>ÒZE¨×…††ĞÈÕ°™€‰)_¾War&4ŸÒ ‚#ŞiÎx–Ï+9`Ï®õŠ´rtK…ç GGMñHVLo<é9èYæà¤<{ùŠÎç *E‹–“Ì{…“HZ™YÀAÒiÔKNêÅğb)µfFÉØµúë-2`V›â¾ğQ˜Ã„(À6Üô=Ggl20•¢‹ˆøˆVµ£¸İ=Ôƒ(‰ÌÅ©8 -PñX¯ËvÊ …FPycç÷oùhtÚdNŒK–ŠØªŞSûñ@1;C}¡˜X‹²,5éºvòpq&գŀ€“U[!a&wuùÕ—ûH¦[E5 ù \=ù>§VğaÖÇmXíƒïót¬W.RuX˜¦æÌ«˜ÖD ’Rø—9“*02ğISñ\ܰœ¹ÑãšçU¸+cĞë–3¶êy}䜻)"äëJPXذ|`!9.7Æ—”iÁôƒÁՖݱ¥”‚̬#ÈÌ$›]óæ¶«‚ˆ-Û²^•¾É…ÅPíC~øh£=‚À ~Œ‹E¡È!ÀKÁ¾/iTÁ4=‹s]rWÊr±º?m ( !GŒF87vÿOş?b¢wKàwV™›V©_UcƒJfoó>SJ¹©„¼åZJ•ÂO‘³€*Éò”Ç ×DÚÌ{ 3 ÃYÔgÀWùCAx=¬¢K%‰6ƽâY*±,3³ÀÂ$°NØ ¶\’'˜KËæ?å7èOõIZ¸«ñ¨‰êæx”*z¥ïşœ]g¯–}¯rPwşÚM8şr·øä:Y¢¼¹ĞàrX4çºì ïÂ)ÍV¸œ ğˆôh xu–üË8…CIğªSnÔşàÿöŪm¦XVâZ gn±,<g4L‹7†G@ V¸©H·İö¯ \²\Ì‚ å­Á^å Ї¯0¬”‚‰ÔƸ“æ·„y¤Å<  ‚,Ó1èç(´şŞa>öÜpğSø¿Óİ,–ÂÅ\²˜Ã)’¥&eà;o~¡XuŸ:KIÉ>g{,_™”7’R·sQ£œÕÔ›‚qêcåU¶æ‰ËOoïC®6¥¯e‚uhƒŠRà”á9¶~uøÓ tN`׊•Ĩy4ÇîP­Ã4Eíǔߺ²­½„½ÈîyßQf$ªN)q÷!µõÙBm’ºñeçæºš‘¨ ˜ÿ¤€òªnB Ü8íOW›“©‚¹Æ»7}Öõ¾bí%ìY>P`İ„«Yã i©Æ›òø ¥T›z9˜â®_å §lŸ GÔ3dxËUE¿rg{`¯É:şh6íKS­o… 2ÎR•9¡%¤x“% ß•[å¦J¥ì9”ÜÓ Ü<ƒÙªfÁÍ) .bÜŞŠšC¦¦bd˜¡,?ÛğÉk?OİŒœdšÁÀcQ’¢²i¯Êûğ>ür\6LÅùãDG»ß5ÍoÇçeoc¾:Õ=v±ÅuûV†›ÿ_3ÜÎã“â qog‰9ùÔ.ƒv=_kª`æØ—{†–‘ğ™\‰-EJÑóˆX  eôM“üt‚(sjzíãKѵèaœØôõæ¬C¿~¦şi–›*s4îæÃ6guÚäÏäJ’[™¯"V„‡TA Šj.1QãñÙ7Fo~Ü(h¸ÎºwL£Nô‰ê%VPøj§]\÷‘£}şV)¨çûU*<0sfŒÓ,ı5Fô¢HгÍ~ï4}‡PÛ<ù¯YÍI³Z7°^yâo¤ólˆ 6zSäf§×R(¬ı#=Œ;N¡„ñjÃ>•{ÍP¦¯ºW2 ÷Œ4„cø&…c$Sn̵ÍTnX3•æ3`‡3c#ÔşèIœLE.Í8ryЬˆëQÔ“¤ˆA% ]ˆe”^Û)Ú;ø1b°yšH^‰p05]uîòt/‡'¹¡@{>Gx’¦’yş‚•¢aeËl\Z”+ˆpoX)©tl0²HAğ"#ä‘™òÓ<´ó“¸„1ÆÍ+BÎÂÂäÁ|œRJ¾-;g™ÊŒ›Š"kşlëÎ'Î_€œağÎ+¦bØç¦"àk< ÛS½ê\ÇÆŸæKfxİ2æŸSd)ó4È[÷p÷›åÛ?&FãXvçIğ¡·Å÷8Ú• ß5ï…ŞÃv¡ôÅiÆUׄ)ü«h\ûª‘Ç6ùô™TT³IşŞt¥Wƒİ¶è¦Ş=ÒÓ+}[ò[°œ(˜D.Iş¦<»rñ{šŠ"$·(MP4‘Ï* ğ£B»$ ™3%òq϶}±+ƒrx.VáT]݆‡Èô1¾Z*oË"Ø6îéc_m¶>&¶a<åg»­6›2"…×›¢ıì_ “ÉÒìv>ù§à—Á¿şøRh’z[fΓIìF;w”¸sÁnY<‡áÂş ë»k endstream endobj 1452 0 obj << /Length 2839 /Filter /FlateDecode >> stream xÚ½ZK㸾÷¯ğî%n`Ìá›rX ¹İ·ÍÑØò´ÛêØîyüû|EJ²hÓrÏX›‹õ0ůXï*’O>Møäowüäú—§»÷„¬°ÒN–a%³vbcR™ÉÓbòÛôŸ\¸ûߟşŞ}öşƒô½oèNáf°á«ÍK½;ÌÕrµ]Võ–¾ÆG¦ÿQÁ„tíWÛrS5ƒú3KÍ„“½©EÔ#\Á|ÑÍ´ÿ¶½—~z(¿œ,s¦„b“™¬0ÿç…Î çÓùì¢-gNª+‹ÖŠ)mó‹¦Õ¬N`ui§ã §çjlåõtSÎwõ>Şï±ˆõjù->áá~†©°¬ÕöS|·¨ÀØ|´ÜÕ›x÷/‡:^çDÈsµ©–Y8Bm¦®¾¾”ÛE §|_Eêë 3„f…V.™8ê£áåU†İZ0¯Õ5½*˜æ}½âëºşÏëË, ´ZÌ>®¶ bÀ9€P4§ùø¢•dJ}1æE9“º`6×hãø/ÏÕ.·-éjŠéşõ¯ñí²ŞÅׇç*¾ÙWóz{üwC‚”júá2 ƒñ¾Lš±Ûâ4:G³²LhñİTGUVq¡R…YT»ÕgÒ™° á£>#ŠseHtÁ1ÍjÆ|¤Y¿ÅIwÕ˺œG3nú¯ŒP(İ~<;Ÿİ°£)ÿ)ÎóeuxaÆ»_Ÿîş{GDò‰˜( %0~bœg^êÉ|s÷Ûï|²ÀŸ0¦ ?ù†n&p`Êãn=y¼ûGtå ;5° f²Ò$$”Û†o4-8ò²5y¼_W‡CµÛÇÑÁ¶éeMþıór"^áÄ—B]TT¥`ú%œLõ.ÇÁñÆ;U蟙n¾Í–u}Áª‚)Ş[ô4ûˆ=à\å\‰Ôôzî¥ï‡\EğóæÛ¹P50=1F3§¾W¨ Éšk&½ SÕxv÷sê`p¢0dãb³ÂàZ¥ yu¡ì‡šäs £vfº.wÁ²pß­ÀK%¦ĞŒe9ϘǵÊö|ØL" ”ñÆNËødòº¡ß!ŞT»øG½l®°1ÅGbº‹_#K±|İΛˆD»j]ˆhKK/Û…Ğ}\&ı´§YÿŒqOl_åbR ¸Ñ\uãòğbؽί»œÓ÷p8º ,¾Uı9Ã`šÚt¾‡ f,ÂÂʸNcúwg,)I¿d|¦‡Aú¦¯9“…gçùIšGr&ELjŸrq”"»>ú]#¦uøYWt)·ÃÜ@&¯v[ş–r£ÉJyÁŒ÷}©…ÌÓL!IäT?ú 1J¼Qоí"o$wÌ+7.oVûÆãı’%H(‡ş@U’pº£²k_~úaU õÁçrıšs1G=Qœòl@Èo\\ ‡oÍÍ17Ú:¸ #™ãúÍ ”ÆÙfEöWÔqd ?¶¢LMa° óöeX$ÅîV#}İ~‡h ç½:y¬u8ËìÍÖÓ­ã-¹eD0òa•†ÑÇ\TLâºbüXw…ŠJù6%pÓ|½š—!ÂûXS)wš°\kSÇşÀ㥈tR2j-:eú®BRÒ¡–4º‰ º ©®e¼²! dÉBùj¼¼@Öi0H¿ÔÌۢϫ@Ğcµ¶ò®´$x%nè$¬¶¡ã‹¤>寧.'Òɰ‹t‹»Ô’Yfâ-‹›®Î9¬Ó[Œës¨ÓÜé89aXø1€d‚Ò ~ fÖ½jRA3 ²öŒÃàäy¹^gP-jJ5Š|¦pN¤¨‡f‡ àïâí×ëu®@],Ä uÈ[•Úr&]1†Rc&îߨÓ# ¶:݃½®Ò·ãv*İû;'²@ÈÖ£@Òæ[!SȲsʬÃfà°¨^L*×Ó-PÃ[PÑ” 6o¸”ÊP;¨–zäyz çv›]¹¦{>ŠniP¦SİÚUË fA›¬f L8(ŒÊ­<£Õ&Y5 0òm —ğUǨhÒÜâ³BÓjƒ°¡äMy®(àûÁšJH3 EÉ}˜yP veSĞÀÖJ…øhİ(ØH­%7)öå ˜f\g™2*Å ¹X¡sJ¤À”_ööÊGQ/e Ô‰z]Hl¼bŞ¢_Ê;P—Õ¯«Y-Æ BkǼôo0-*6…E½5 ô&oZd0]™Q\{‹bğTÁ¯»H ±+uƒ‹ü\¯¨vãCÉ£3"…Aö|kòè}OÕ¸ëÙ£'9¬ƒûS.Ì‘nKÙ£&÷×_nup†YcFFät¤M=èK~3k9 (¬AûóÍ^#2r@tʤOůÁ™Ñ*Dˆ"·îı@9p›AöõzˆÍFhæø(ºm„ Çq®²Ù(8g;ŠhrLq™côçôü¦¦ñü ›|†N㱩os~¨;=ÍìÎ=ÄK¿EEq{ws:CzY¹DTV´}¼æ‘ªÙxÀÍbǬğ~K-±C|z˜e8º·o¨…¦…öŞ<ÄK®ğBõv4 }­€TÅ£°U³)Oƒè0]Ÿcg/98Ôİ5íb3¯Œ/#¥Mó¯şx(W÷bº çœh7n°o¢İ¸T?¸ÑJü8ÛRšÉëûŞÉÙ„xj¡iB»‰e…ƒÒ‘5á{A›ÁÃMå¹3Ña“¯7ˆFÅ‹ÎoŞÑ>œ¿vTDôÏÜ^?*Ò;’p²¿*‚a&Ò_˨!P -ãn*®ñY¸-_^ ÂõŠÚŞô¼:47İ!Ù0j÷éuSÅC‰Ğ4I'sã?t=…‰ó—í‡óyõÒNYnïi—™>h7~3§Øê˜ş»šÓ‡ŠÍÆdÓ^ÿÖhxîhC0ñûqˆBipä)oKj2:¦’F •€–ª1 ¨EU"‹ôÙü‡R™şNX` OŒ{ÑBıø×lˆx ½ïı üP$KİY„J.|%¸O†aEÿ'’î» endstream endobj 1456 0 obj << /Length 2548 /Filter /FlateDecode >> stream xÚåÙÛÈñ}¾‚o¡³·OÉ[&vàğnÖ2`wåHÔ cŠÔò°=@>~«ººyH”DZ'Oy‘šÕͪ꺫ȃû€½áîÿÏÛ›ï^¥AƲXÆÁö³4΂Ø$L*l÷ÁOa[tı&RI6úï \$aŞŞÇ¢ŞÈ$ì;¶‰ À^mR6íæ—íß¾{%Ø¥`Jj mñîòªŠÊã©iûbİ•õ¾¬ï#I/.ßӌǿ稧áa¨w}ÙÔ—¼ ’Ú0•š ‚eÆİ渑i8Ø)Şm"8_ĞC˜” 'Ãu‘19î˜E,4Ë´´’#­¿u¤ °RU´@á?°Ü/`:á!°¬‘•¾hùÎNy×İø-vCÛú{`Âüş»Ø¹­¼ŞOo“ÌL’ Xæé¨¼İŞÓAÁƒ˜e‰J­ÈSq Wd:Ót¸¼TL¤4g*CQp¦c'Šƒ¼ˆŒuØ7î/„‹[ú›Ô‡O–óÙ1…xŒÅCğ¶è‡¶.Ü©²£CıCޯíß¡lôNmcÕº+öC[*ùÒ8ŞÀ •ñ06ø>n"æ} ;Úh‹¸CAšËñ|×XĞü)Ún„7Ö¾v;D4´€§#øME¥YX”pßÖQõ ¸İ9Œ.·Æò$mëiøî䜴qÿˆï£e¬"ş~N @Ç­ì‘üéΠ˶†¹w¶À± ¥{³vÄEÿ@RŞ N'¸vU‚bV¸'9ˆÄ]%]ß„µêËSUdnXøloÿowxô¡8ºs‡5§DŒšGÀÏÜpOèC¹+hó^”•ö <æe]=Òa'ƒ]>tÅ‚ı˜Ø¿¥è°§+[¾ ÔMOğ‡|2 Ú:»œqšµëÑâ;di%ØÕ¿ÄX“·èî2bI;œP›#×À•³{$ô ö_¢˜qÓŸ‹)’¤:Û¸¥¿ÉYíêßÒ½¯›Ö©6YIh ÆJ@®´p±³Ø O$Ÿ–`°9ÆåB³põÓ?X£ƒ'ÿ¿«Š¼µ*ƒWr‚³ßUÅñOødœùÓåQÿMûÈ¡4V¬³qzÉIy]S Èó¨œ1‘BôÔó„ŲLªŒ%’0ıÌEröÆ"5Ú•ËxKÊ‹Q•ïöy´/e]"mŸa]è˜I>&È:?+éWfL5'²‚Ê@Ş÷GÀ9yµ‚Ii&ô˜Ec(ëE)"M!1dşh÷è"ç§Ï‰\O«ÙRÿ"\A& Ëøˆn]aLI¦D6clEŠ3©“uU Ì ÜM.¬v‹e Ú>‡Ô°k›ÖH¶*ô4«–lPA˜÷n÷‚ Ȱº¥? Mv«©ª†2”Ûq§¸Èg•ÀŠ“ÚÂÊÊEB#È"+»@DLÁ¦-f¥«7”T¨«âY4 M°}V¥YBDQ….+\‰fJM‚Ö©5Û—Û›ßnĞÀx -f@Ñ:BK‹`w¼ùéìa.5U|´G¸Ôd<¨‚·7ÿ ’}ANKÎâXYTBË©¶^¡ª%“B> U¬­Í’h¿V!*©¸TÙJ{±ø³BB,I“*M¨ëãoa_û,•”®Ñ9¬Afà©ÏA4Æ~D.‰®-eI2úræj0›eKËE§Ck‘°½ß°%ğÉ•&X» ….ıHÛû"ª®×Úi­3¾ † 3O0Nø¬!¤Sш\ùÈ¥ fYøMNƳğ#TÁXqyÿ‡Å}éİÖ @ÚùC6|À*Çâ‚Q1î4C0½¯S©èÑÀVä VäX@]~²•zcÛ¼µ0s{ÙÇ}°†xtûÛh]løÓØøS/\ÇypÆX-#O{X¾pÍPù^t”±/M¶P\µTÊ€ªÁ=§è­ÂâÓ‰LD­YäÒ+95J1™Il¥Yš%SÚ³ÙC ƒØˆW¸S5ÍûátÑׯ¥Ü İ|Mnóù øR‚ñDW #ƒ—Tµ`©VOäy°ë©h©˜˜n»F ¾¨P™Z)‚(;qsIüÚÀdÒŠ 4õâ븹^ÕE’ƒî€†â®ñ}Xc€ıdMÉ ú†¥“mao„k¤Œ¼âbJwÀ¿±/Z7ö°¥ÇZ¹—1“<áâd”Ÿ( ¹e»ïê f›(\T–Ñ[»jäv 6À­SµÔ±/„È»á%š;ZïÇΉ±kÌW|ÖéìœJEŞõm¡cã!Té¶eîç2k])&‹8 ßÕå'Z‘YÄ15¬ø'Ä2&›÷)ĞV[ü6”­uøltÏó·^:ĽGÓõí°ƒZc-zòs³Î÷ÑÔNòİʘ:§crCΙgÓÖ­¶âéòÖ“íÔ6¶S[›ªµÓÍó—Ç| Ù¹©Ò|‚­¦2FØôjüãL)¤`‰øš1ҦN çWªu¨r¹¡˜L¡o*œ¡[NµEÅı<º©Wh&Ó xš ı$‰–ƒ‰o~%1Bî6ğÚBªÛ‡Õ6‘³„?Õğ((»t RÈV©ø¶†Ê¨äV6×EhRğ7ñ,4Á0º/h¢ WR­‰J×ó@H¥ÅàF îчyßÑbôXÏ\Ìw>¯ûE[Tb5åZ!›Î!¸åeݹ,eé8€r.\N9ß Ts*éÛØ¥¡áãÙXì¿]Õqš2 •€H ÚßÖ_f‚iT ÒÒqıò_?|ÿãv%™KÅô³•2f”· ûêİ›Ûíëïß\ª:‹ÆÑ~zx?û6qñ‰/¯ÊŞ×_Iæ£2„…Æo…ûÜp7~ÀHı'0P"öİü¬½ ğ¾¦ìYSTµLx‘-mV¿şAB:p3’ñ!L_\pª^u ½3 êøÂ#B -ÁèÃec«5™¸a–ÏÏ8¯çjä(r–Û?›ğ™ÿû¼  ÇÒPÏ=C^@TĞ‘<ƒ&å…É¡^Ë W%CdÕé7L·¿TÂ"ƒ:]>‹„•„^ıi ?M'á9ɶxB YIÛâG2ciêT$x¶x˜ÿ^æ™ endstream endobj 1460 0 obj << /Length 2863 /Filter /FlateDecode >> stream xÚÍZ[ã¶~Ÿ_á¢( ÖŒx)¥E[t‹I‹v'ÈC’-Ø–#É;;ÿ¾ßá¡dÉ–=›?ôŤ(Ї<×ï:=ÍâÙ?ïâĞşíáî«÷é,™Uvö°šI kİÌ&N(Ì–³Ÿ¢‹{•Fëb[ÜÏs‘I©µÑ"ßlšû_¾ıê½.âa¬ï?n0Sîşñp÷ÛÄh<“3•(a°<‘¡v±½ûé—x¶ÄËog±ĞY:{öS·3-¤NÑÛÌ>Üı‡7<"¦’D$Nw\í&hZ‹£©›Ğ´™HÇ»M•/™Ã©Ú ©\ÇŒ_M˼{¼Ÿƒ§Åªª (à ^¨aN·ëğ¶Yçu±ä~…oıZ,Zq?O¾YMHa.M"T’¡#E–$WÄ!Yjg_—½…52q`ã—‹‹Ò™Jê›ÌŒĞ‰‘¬‹ â0BYÙ‰£lH Y´¯‹¦Ø‘’·ï0’¥#•WYìUf²Êû. ŒÚç5>R× :©ï˜xò´€¶:›['2˜ÎHb~ =4Å¢Ú-¹ß–Û[5±‰ğ-¿®¶aâ®xæÎG:DQ7%$ÀŸ­‹º¨VP+ ©¥}û¶ ßWa`/ÁIŒÊèÈ¢9dföĞşãñÎ/ù¥„Ì®;™eB¦©’"±oR+¡eæ—ÒîŠZ˜Øİ„¤´"‡$§õQAîõq×´E¾„xŒ1ÑÏqïıƒÖ&ò"Ô"Ì[îmò¶¨fÉ <‰Î±`Ì~Å÷÷©öbb}Wz!>‘ePNz±ª6›Š^=—»'ZTÛm¾ó~ˆŸö妘¥ÌR_‚UU‰Å„ÙÁ)$öxL¯K¯sós,Í$·»!¦š ö³<“Ÿİû_úÉÛñ›æ°ÅÜ 4 H ö&yÖøÈÒ{Á0éSû4>¦›1y²Küœë؈ؘÙïf)cŸÏc* ŞéS¦NÄL‹“×x‹¨«¼AW%_Æ# €±Ìû…¼aDó%¼¹ôɲgˆ}ò”MØ»r"Îl0•ʾ»²‘‘bÊtxŠ‹t&;L##¬áº½3@qVœ÷XG7I¿ñ`OçÑ,¤yıt˜wá!†+cÙlØ¡½¤ÑKÖÛrçİ`æñÁ(~9B©Ç‰Ôæû=‡–9íœFÿş0oÂËEIQoÁãÍö!‰³ÿ܇t.³O9Ioãì< (ı°+=06BŸXÛa[,$α ğ†9[úÇr·d,Ñx5 áX¯t@Ø!æä[,!_0zA¾&.íˆLºÈ³}ÁfÖ …İ ”e@hÌI^4”²I“hÍg˜2Ê6Ò¡R- e<‚Ş<Ö9Qa˜—+j çƒôÜğ³~¹Öu—<œ?!òÌç²]ó )#ReçynÔä>‘íˆ7_Ãâ`y”Фví c·©>åÆğ{Ã+öIİûuXµÏU1xLuhÏá3RnR;?#dTRÛ¼®æWX“Ÿ¾IKK9ız{ ’!’¼XOHD¬z—ê“›„ÙŒˆ¬õ:DÃã¼V;CÖî{:ÊW­wb˜V{… ğ‹¼›Š£q,Ì`OJîHv –À>WÒW¥`,¶ßDğÆj¦‡$/–FR(WÁ±h¤ïãP2¹Û$âLÿ”t† ûJÅLY#!Öh8ó¦ìTeĞÜÌ/å°ÔåŒØ`a¤^· i\;¦y!%F&g²o}2¼«Z '䀠¼Eàç²ñÉ)vH˜õ\ÂAz>û -+Ƚ^à×vOr\z!ä€5^Æ1§Ç NX`í±K:ó‘’hH5ŒCsmâhY°O ¢O×ox†·c´>]¥çmşD(Â`Æá±)~;„7/aÉÃ6@‹%0C¨×Ö/ü%Åbè¸Ozë7z-C…+ôÇ…+ „è㻇¶Úæm—0눪2õÎşá•ÅáÍR¯ÏËéa’òî… eÓ‰l1™jväÖU½ìú$¤šeˆ[â´8fcw,Ÿâ÷ İøX¨¨‹öPï&Ÿs³†ûİÜGͲ+W/A¹áœ©Os@jsÊZŸÇWä*³/y։ɤÑ'{£bÑ»ÏF3*âʾf­uÖí3‹|İpM@¯î ”ÈkwCµ ˆÕŸ¡ÌÛ"Ìô€¦_“‘ üHzŠl:¶0gÕ<ø@?o¸%\Á$Ï‘øÒïDz:4dA4…Ô—‹``ß4 Q:V™ë¡:dá­áµ)³|KX‚Z9“ú¥by-­§ÚŞ„&ò%rø#šWÉ Ãîê?Ô†MH5‰Ş«¹:¯H\ı«jIwœíªœ˜Å@”z\6üxåÉ7åz^äŞÇ¡Ói,?="(»I¬ei´è4Ì%†y‚“åÌÖ8)ı3ÔŪ¨ë£…Vl ½ò_­x¶<|2zûºzÌ7aæ¢Î›u?¹ŸñTçÛϵàÿ¿Ç‚S×'Îİ’ò o»m$6ØûÅ@—ÃcŞ#_¸_rݲŒùÀxåÉõÆ0*ª4öù(œ_µğĞ´¦À`©ºš¬±MgÊ¥–ñ¦¿D(àLZI°/c&d"pï· I5­Ç$/¡Á{f„‘£«Fâ§~›ë#ÉĞMWÈ èÃPr ÂKà´: Nï&/„vê• ëÓhº•5qò¶ô ŒÊ¬_Šdtå†'IjnA“.‹2€Í+—.f Á´©¿á™J ëè5VR Ë%öÇÒJû*Å«¬Ä~áuôMh"œJ%Ç4¯Ü–©SFê‹«XRÀœšúÒât¹İWuûYœ~½p?æãœní¨ sÄvwBş>\©“ë«‹Âúy’ÒËâSWÑô¡•†¶PꟵоJHc}¹‚Îv,¦Bñ7Óz8s ©€O—Úîòg¿ABÒìÇ> ›.id]Tsİ•ä¿ş‚;=R…e±¾o»ª~ÅǾ¢i+OïI.Ş&õ pïmhWİ3-<Èc)ƒ6V±˜1ä2È“øö¯‹EÑ4 ^…>,îµì*Ùx¾Ê¹·ª«-÷ş>}¯($†÷ŠJ+Lõͺ@Rsÿâ ¯Kà">nA›0©XŸSK Puo•şB2õ’ “Èı™¸OhŒÚÑ_9ğìÿÊ–H=ØçaÑÒE§ÏYeW©İÙ2¸.RÔÉ¿7¨×ÿİ €¨(lõæ7ªÓRTò h5ı¶dú&DIäZ‰¶çâJ“áŸm´tpŞ>¥ —Âò8ºØ- ~Wh$¤ÒòÔ0Xq;ºƒÁ”!XœÈ¤è -}–ìb¥”) ª+e<šæıËı©' endstream endobj 1465 0 obj << /Length 3528 /Filter /FlateDecode >> stream xÚÍ\Is㸾ûW¨*‡‘S-4ö%—TÒ•™š9¤’ê¾ÍLUd™²•ȤCQíéüú¼€4A“g„Nå`‹ ˆËûŞFtõ°¢«ïnhüıó§›÷ßÚ•#Ns½ú´_1ª‰Õn¥•!\¨Õ§ûÕëæ±¸İk×Í-·ë/Ï·øñ—̺ڇ[ÛğóùVéõöxN¡Ô¿Ê })ßİn$åëÓy‡çáîö«oq%ŞmЇ¢ê¢9×å-CT¶¾İùÖÜşüé‡÷ßò~'¸QÄ0=ôÍÿ\욪Ş‹ò¡y Åû¥7mñ cÄ©Øç ‘•Šm‚NİA¯¡»¾ïձؖá~í[Ô@Ó Å}[v¢eŒ„ÑmË·‡úo[Ä5aŠ·…`È„fmCÔzWÕuq “P•÷‡ò!\ÿ~ëĞÆ]q®cÛëväš3Õå)\޶B  ÷Ò­M†¡7ŸÜ8?ÛøëƒÛgÀ{®ÛÆ_ğ"b‚ˆ˜uMç®·å}(]VM|lllŒ$‚ucs’ İüåÓÍ¿o\¥+¶âÎEåJ A—«İÓÍ?ÓÕ=ÜüaE‰pvõâ‹>­aÂÂÑqõñæïAĞ8A)Ñ’ûªİ­‹ı[Ph<Ų€rJ¨s)hóV¯”ázı·º¸?ì`œOa#%Ş£•ÄD|š½­ÜJm{‚î§´†Iö‚ @¸ğçpdΦ“T:†¥K°„ëıöx*H¬Ï¬d$ú¾”8ÿTBˆ/ã ¬Uyj€|„ùôB«‘€éŸüäIƒˆÕñX¡h¾P e„\?mwuu %î Î"\ÿ´SñŸŞEPTJ'äѼ”´Zôı·LöE'%t…-LhÈO”™Á3É@⑘}¤'ur¥¤#Jëk¤)˜`!|UBÇAös2k–ñ,°–^KQùOTÑqªS‘—ƒ|QmSàİöxœh09PX5ènİa$ÄØF‡ÓÓ@q°µ¿ÛTB‰Ô¯JcF@½ªç”ƒˆrøÍ/¢@b¡l…ª˜rqô¢ŠJ(÷£—<ÇSĞ9 aM›˜SE,èŠyBDÍê,¨ dX¡tgD”ım&D”-•Q®ÒדQq²,2JAá£ùBĞò<6iŒf@2Ú] £×w2ÚG¾ £P[í£.•Qo¼ƒã V½xzL¸~<œš "¢'Á´¹EPZî… "ˆU¨ÊƒËÓs±;ì»1y„é,Øh ‘{F…$f'²€à”¹yB•%lT n*(¢uZ³‰$B ã-ˆ©T#ÃÑùÂFıc<8—»æP•ñ¹—ÇC.ÃéãO>£7[´¡Ì*w©Ç!÷F1pr!V… q¡ß1\бƒ?îExxŠówğ·Ä«Œ.o®ÁÔúrÍ#ö ¯ôºƒ§¡nì‹‘p|$4—Ú‰E@knëHÌA;အy5#©¸â(E4Dlí<”pb׌ƒF^#—ss8Äé£ğ® J¼>áˆoÜ×2iRhby–È«Ò<¶°¨F‚b¦ír€ˆÄ]Š9­G˜3àD¸ÀSÈè>ò”Eã`ÉtTÑ}œ®uJ Öê.Ûì åı¦Úo@„ä1^ªî€lzıÏbׄ -¡ñ¸×â9’9Tè«V4É÷Ààç_©Æà"áí+Ñap:¢ãqh)µñÎEj3 ŞM§8Aò6ÕïË[jKà§íS»Íg©­-a¶ËŞW›CÙu¹á¸e¯å¿É[¥½;ş&qÁ_˜´øŒÿŠº i;ƒÖ@ ?âK³\®÷ Ê{ ¬ F»Ëf@ ŸrË}S×wU‡ÅV„2?…ó»àõÎÒ‹73Eî$‰‘>̇p^Ï›1_§"¤O¶¾1„TğØ!èÿ?Š_šz»k¾ÁS¾®Jß-FÚ ÷uõ &í;M®§¡y:ŠEŠ©åú›ˆğP5¸iGÕÁZ¼à“Û çV̇/P:0{ZªåŠş•ê%öUQ:¡ò­"†Š•@iS×%e,±’ùšLliœŒ1-¨½w=,çp ŞU!­şU{å“T;¢ |uÆauÀhcrà:Àe*Á73‚cªJfÀ6‚!ÌæĞnJ¤À³ôFhå£éä'Ö!”•<¢ÁÎTâ&A‚÷‚ß\CUa G¡€ª0V›M†ãRb DÙÌÈÖ«é ØÖ@¬nRì_„°”Çn³t™3C—)ìtî_ói™Çšòx.êÀRFZ€§‚G:׃ ƉNo«—åÂRA$Á¯EXi@’EÂBUøÖä"a3@¶„íC."lì–°}ìK„½¶#lvâLˆ5Yæ–Kb;˜Û¶jL#³,È2¡–ôwü«1Y&×ÇLL+Òì‹|Eñ0WEÏó|…_Am¾b•tÍÙòµ¹ˆ¯°[¾ö±/ñõzد}؉ÌË× ¨-_û¨“©t!9Ë‚k·ë îL†ŒšÏ‡\ìSÛf0½S¯õmHˆd@,$Dz¢÷nkDs¤ßÁ`i -}ÚvßHËõw„ã n†}5µÕâøäP;Ps ÔNÈVíô!© Ø­Úéc_R;×Ãvj§;‘lÕNÔVíôQ¸ [7¡|ÁMÈ€Úº ‰`]$;h ¿®æâ¹ÎÍsè DY¬ŠKq‘ç9 #ÏÈ%<Ïy`_àyØ–ç ì<Ïs F'¨ÛÓXªʂ¨4áéİ~)ÏOcÉ=i²à:æ×N%¸s3X´ʌ‚”"O}ÎÀ‰U< *~ñí º¨Ğ4õ¥éÿ­ßâÙi³ø-XØe}–²Õg}ÈEú,v«ÏúØ—ôÙõ°>ëÃN¾'ÁÅÜBfÁUœâÎx.ø¡XdË¡| <• ÑRĞ6ZJ%+ò< ÷8ÓA/à·"—™>ôï …–ñ#|9ÇY­‡6áš&{¥QÆıpˆUu “¯û˜~›ÀZCe ğÄ+ĞåÕQT܃³•íqdÕë~Jq½..“íàœÂY\…&×'0·˜©Ããşjp8m×¶I¿Z\Ëá"ì !ŒâÀu Ŷç¬QöU£aİ9û| W9ƒò:ù|n|™3ïoG%ÂrÆ×…y~S¤âøåÖÊõ»|©ÕüÖ^F‹`Ş ¼*5ÇÒùªº}&t(~Ulàé °øòÖj“ÂK)fq%jù ¨B¥dŠ:*¥üu§®]]„Ä:ñĞéZJ¸¼Ã•ŸØz¶Şîp~ÃÊÎ fldNtk3E_¸Ğɺè-4E!’a³¿v»n5Û¨nÿôñÃ÷~ ê÷İsº[ êt\ îC—ò§0±8y‚“_ãö\0[­#ÊXZ &ë¿Ğ(í endstream endobj 1469 0 obj << /Length 4692 /Filter /FlateDecode >> stream xÚÕ]“ÛÆ•†ïõ+xImeàşş¨\y·"—SëT%–S©rrAÍP#ÖÎp´$Dzÿ}ŞÓ PİP¤‚#íæÂìè>çísú4 ±º_‰Õw/Dÿó?_¿øæUXÅ.:åV¯ß®¤·“rå¬ï”¶«×w«Ÿ×¯ßm_şãõ¿y¥ÊS•ì´õh&s4Îyñ‡×/ş÷…ÄQ±’8Ew*¸ÔšAk·/~ş‡Xİá\‰NǰúN}\éNê€O«_ü9_׈æ:£l}aÛ_O‡Íí©¶ºs‭ë‚Ğ5øÍo§mƒêºD±PƒìL¬¡¿loOO‡O±½Ìr«}ìpFEUyèËó"F"ÿöy{Ú=í_Ş%×ûíöîHÕúô”İm7ùȇİé]>v‚E¥÷›Ã›Í}êËÕt¶3ø!»h{úíÓÃC¾í#DnSÈõæ¥ ë_èO»»ü§İ>³v½yØİmN»ı}ÿ¥ÇÃöô|Øoû/¼y“¾Ÿ¾wÚº—7ÎØõ«—A¯ŞãÓ¡ÿîİö´Ù=ó/Çí6_Çq{{“®]Ô—:„*Ğᾪ¿|÷bõóÖz:ßéş”ì‹øZ—Ú’¦‹fÔ¯Ó=„@ħ=İAğëÍáşùq›¯?ÿıó©£Ji;kÔ¬§jëñ0]xµuq™ HHjIûŞO÷èßT£BdÑYå+jÛIµSğ {UÒVĞI'ğ)e8°°ÀN;]a^Šaá¬Ï»co!Ùüúa»¿OOoó±7dJ}¯­n”‰º6Ääté»–©5L·io2â ½²ègõ†Œ¶.¤¦Œ›µ7… &pP1”]ÄÌVR 8ŸBë,Ä”Šq^WPõwaş“ °8;@¯ÌÊš¤¢*éäÃSÁÛ Æ<ıéˆ%=Nÿğî¥\ã3d=ÿuwê[¨•‡Îİ•mâòo8qwA“Šìm£¿z:[+·ş»æD=éx:´É¿şxKwÛÇm> cJÇ鿦 x~„r£ÖßïóŸn7Çí1Ÿıáİö°ÍG“áÓ±şK/Ùû şSÉäşKÿ³¢S>ôÍ5®‘&²İ¾%üšÖbuut$¬i˜nŸ‡¾Ó~Ë'j‘¾I]K'æ™4æ–ÂZ«›áo8vȽ±;ÁŸÓÔDGÓ|€ãNk¶åLn«uİŸ´ ÁÂXÜ><ßáN1Qç#¹£[w÷{2»ß¡i©†ã~ıö‰ŒŠº/Í¿têûCoeÛ;´|Ìo7ûü…~ ò/ÏÇíÍØ 1ã·­K}÷qòïí4ÁÉÜîvÇÍ]r7÷¦l’Â¥Ÿ{êyúRßLºÊdÒ½ÅîÑwùœÃf¿ı] X¿y>õ>ĞfQ—¯ñк‰ÛÍó1£½MhoαP:Ö>ˆ#š:«|'â¥)İ`¢ƒÚa– ñ%ù®t©)Løí~İú³z„î8®Q˜éLÍ}ß@’:Å‚´˜TGwš4¶İLjø¥,`Düª®3ùı)ÕÕ; T#,>Ûšzš˜OĞXte@Qïãæ6¹¹'wÜœòÁÓáyˆ%l@>3Š vğŠ…“¾i=VÒŸ†¿ä_k]¥#Iü茷›‡ã6{‚‹>ìÛ® °¿y%My;]ŒܸΣ‹Ò¡y?úŠªŸˆ¸kè€=]£¥t ™û ¬€MŠˆn“Ëæ}Õ‘ˆ€K–óއnǹ‘ë=â¿Psާ’mÄ#Ȁѣ[q?Ê|1" dÊ}½5¹í~ZCm, ÔÈ”UĞ&œI«Òmò ¯ö®SH*øaû¶•»ÀşËkDëŞŒø¬7S®z£´F23’ÏòÖvp‚ó‚Ç¢4„ÒʘšÚÍô¦Â­SË P…î°€UĞÓŒù(˜®p… ÛUÂÖì©ÄËydK†ëe'1ÕW؉̋ÌÖ³Œ®‚ÙYC7ÇVÌåºÀ3¶´Œ"Æc;sa†Ʊpíd?Vgî\$“›q=Èb4´’ih¤E‘ßLvu…6yXd\ MÉ|o´ñÇ©PÂ[˜_°P쥑D »EK"ôòû÷k­ #ŠƒéÄ“m–ÌWßÿíO?ıĞòYÓit"–IàUØ¿~ûß?ıav4¥6]ĞúkŒ&¦r­,ËpRT zãıáû?Í 'tÏzq<¸Ã€–Üó€Ö© †BŒÏ9¼ïI¿¥e,¥’hŸ>¦,Fé´œ±yHy?}›æTFë]øB{¥İ锇ΦåF`$0EX×Ù–IµÎ#¦(Œœ]k÷½fY°E’_b?ÎLõH p³£¤ıù°=ödqßèI$ôZkLM?2Jdã %MÚÖwÔô#dÁ°@á´†SA§üÈ*—çÆå\« ¦ÆN¹‘v¡³^׋¶ä;Zªõıa»9mû_&ÆßwZÏ£2Tr†C“Î]¤‡ÒêSSMÍLo³‚·,PÜ£Â$RA§ÆÓBspµ€÷;Ys'’†ÜÉa(˜ËçTsŸî‚7ÏâÓv<’·³Wö5'¿r]LK(°i„ù¸IŒç8ÆÆ:’ ÛúxV^Ä5šT o³Íz5GäêBq^û"2¦0Ü‚ÌXZ'§Ÿ›üã¼æÑʸ_S)„Ç©r3ÔÇàÀrøõ‹çıÊÔ§× õ7Z1÷²“Í^öN5º—ÖîfmuÕ¨jw³ƒü]ÓÍEH$ûu¹}µ˜7”#roõݼ; 5§T‡ è»›ØrK!뙺K,äi»hÖñ¨!o†µ~‰t,O°z ì–3‘zkåkhk¢ª`9ˆ I\IœI !c’¥{)ùV´šS‚'òGãè^­àH=¦³+xŸ]lÌaa<´í¼  ¢ƒ«S^6¶áË9²ÂM«%ëw×:)¬)Ëá¥hɇaİ%n;ƒ€ƒêfE_cß·÷˜¡óY&b]#ç1¹Öd 30´2W’§ÛuÇ3®)¡´¡†^pUL-<ÃKËdb<¼¾ ÁöŠdÅÊ‘)Ÿ•¼2vÁøzêl/”CÓi» ]‚ìE åQ“š&Î΂B¦ı. T%L¤ª©ï[a‹ş'§=SÒæ«Ã'“èHŞ‘£-xtʱ¹ Uö€I&Âp·ÚøNFÛîãQf€<ÈUö³:¡Áüª†8PĞÊpñ₯/~B€F~éXìÒ`…¹ÊBÔu’ Nhb¬Sèq¡{Âl,’D!ç·Xkˆ8õ–ÇÄ—%²Út^ÙÔ”ˆzÔñ#³!-=wÃ|„)?ö ôÙÚ¶³KíšÒöšÚt¨İUĞkjwì¾vW±/Ôî8°}í®ÂO‡]«z—ò­8¸)1ğ5ö6ˆO„–JáF5UN—î8}é®B^.İqûÒ]E-İq@ûÒ]íA}@wûnsø u~ÿ©x9ÉB•«ai3àoYŠ¿û¯ËùL¤ M~©ıÚ X !¯Q´¥È³•È«ôl1yP³’|IÍC-+¡µl)uP²zAÉ#+™s:¶8¨X lİ EJe8:ÕÒb[Í›QÍ@ È€ Tÿq§6|ÚÎWIaz¹J%™£ õD·+ãÆÒ÷¡¡E¥ı8Wi×´ú9 íÔ’‰¼¶`Ò& ¬‡D"d®°Sş2\Ç@¥İŞT㬨²½û2åÔˉH (]­n3?ŸÔÜëYnÓªì%u~«wğ£J«±¢)/8~^7X5‚ö·ê:»úE¹µq†ƒ Ú U³›Ñˆ±0=‹2ÖÛF{:+ÚŒ(Q84ÊÖ¿Œ(It˜eû5e‡çu/ªw¥’{I––cϺTbçt‰Ù Su£„‰:(S‰mF@>)’ü%úv.òi³9‚ÜÖ™<¡†RA Y\‡êW.\g^Mzè’ƒmÁo[ÌOz¨DÛ¾aÒ¬Và7)“äŠñ¯Çn¿¤÷/Ë$ ²gÙóJ-Ù0¼Vàıoíª;f=&ÒLë]ÅœÈa‡$´ß YBe;Õ,=KÙ¨©;6o‹ë1uG·j?u·NæÜQ¯ÕÚ. *©sÒHåcÍÁ -¨Úp'ÂD¸£æRy0n4¦ü°-‘ˆ lä¸u$OV—ÑVHœ 8œÇ ™–9ª¿B$[4ô„0Ğfâ„hÊ){•2P-,©—Ä;¨a‰“ÃåÈAK⬠2 E,™%‘;hbÉm…¨ˆ+½R,H˜dİéŒ #¬ì¯o)6éûÑúè5ªK›í¨FF±ÓÄJİœ([¸FÀÒûSF#ĞTe U”>²0éYéGıp…0c.rÖ a¦Äšgy1=¼í¯Òeè Ëtrñ FÌŠ«‰©°m‘ÌY<2gñ%qjµÂhÄ,LÓw¡‚ÊIf ’\¯SÀCœZZï|œºzTK3šÏßU§TdaÛéÑØNäxÜÆĞì7v›f­{&iWtækH¢S]”<±*šòòºX•:hbI½(ŠË¹gQ,¹³ªÈÀìU±D^Eè ‹%uNƒ.–ȹP•Ù‡ª%ñr¨ÊÀBÕÊiæCÕåÔs¨Zï¬S ™gt5éQ¼-Æ^@ŒYÆ—AJ¶ïx´˜ú™ m–î‹m,R6o^`ØZDMùköJ20‡½E%óš­Eè~sQ‰¾°·ˆƒÚï.*©—61`ûíE%õùÔzFA)Ì|‘©<˜-LÛœ- 1msÖqFœ1+X¡YÀ^Í%+ğÄI$»’§{C„̇Ús®Ø" ­¤İl[$»’!Ô°(Ô‚vş_!eË¡g)+¡Wi{в’}Ḭƒ˜•Ø‹j¶œ;¨Y‰—3æ g%tNσ•È}ûÅ#6°xNÊäÈsæ¶NåG`8Ȉ¼œõïÔFsÚGêX¨´+ˆÒ³Êi?oÛ$eÂÿ;m›T2?Ä‘ÅKÚ|d®Û¡ÄÁíw(UܦïŸ+N Ğ¡âTBÃLÅi9r¨8•ÄÉıI´Ÿ¼KúhÅ¥äÎÅPô̲g!{™©ÈSşO/0,ÔèÒ#u>ÃU0@ —à ¦ zJog¸y‹³ß¢TßğÛ'¢¾†8‰|â$.:^)N ÜAœJî¼81@q*¡sâ´9ˆSI¼(N ØAœJn3¢aé\ wqÚÔȹxd©YÈš†« O¿5œe\éi5îà [É]yF× Š•cç™ØKóCâɵrhÚwüÙ›'f“¨ÍWIúWVd`‰à$½øîüZúÙ: µ¯ÃTÔKuîP‡©¸suf®ÃTÈvšªé½‹‘…©éù/_CCû¡>å, ÒX uœÓH•ˆdo‘½É‘ O>œ<”ş‘&!ÂÈ’æE’ŞØÆ2¼F›.‡wB$s%†ÚWbšw|eùCEÊ’¿Š4zúWJXâGjJ¨x•42Pi,©¥q9÷,%wV˜½4–Èyid`ÒXB礑9Hc‰œxâ™^ãÉ„³Ærn¯LÛù8¸Á¤í|µÏL>ô‹í‘—kÛß-Dõ–Ñ5FCŒG£;±]H¤×Gs@½¶}ÃË Ô˜×ü—*êHh›òš£¨CM ¯¯(ê0@‡¢N½¦¨ÃÁî‹:ûBQ‡Ûu*쥢·/êTØÙ¢³/êTPéŞlÛ‹ Ê;ª‘¦¦Î/*ÈÈ2¶´¨ õhl§Dš^ÖÆâ¹¤÷ô:åÚ‰®¨U[› ıPY™7z[¿S,↦¤»JÜ–CÏâVB¯7ö n%û’¸1`q+±Åm9w·;/n ÌAÜJèqc âVR›!/õOçZzYoMœ‹yÓn¿§OmÊ]ğ,ƒÎ…*<ç3KÖÆ¥÷”ü•¬%mEµŠ%«GSÊêëªBܾ*Tqg«Bо*TA'œ§Ğ붨¤^2Èš:Y¢·sE¬¥WáFvN,c›_OëjòT@:Y—^¤õhp/d½ºsC2Ài£¿V5|"ëE[<¾KïËPcßm–­ë,Š¢ ªZÓû°Ãğæ©ªïàšÿ öŒà# endstream endobj 1473 0 obj << /Length 4492 /Filter /FlateDecode >> stream xÚÍ\[oãÆ~ß_¡G¹¨™¹_Ğ·M€ Pdó”äA+Ë»li+ÉİlĞßïÌ e=¤œè$Í‹M‘Ãù¨™s¾s¥ÄâıB,¾z#FÿÿşöÍ_J³ˆ]tÊ-ŞŞ/¤]pjá¬ï”¶‹·w‹–? éo~zûõù¾/¾TapS:Â…4øa¿{s«…Ë£ é¶¾}óï7ÄB.d°]´Áaıøæ‡ŸÄâ¿^ˆNǰø”†>.t'uÀÑÃâ»7ÿÊ[áÊ;eı°ÇÓa‹'x«”ì$ªRh¡F}:İ7 è¬õ, Fw.ÚTºw›ª³2†Õ…N‡‘4kám¨1Yñ¸ºQaù¾ 6˯şAwÏRšŠfÿ»QšÅôβPMeÜEJã@,”6D| ¥q@JB_ 4ÔÒ†¨—(¶PÚv–Ò80 ¥ 1ç)´PÚ´™”¥õ`YZ ÇËÉziç*åŸ9€¡øVW¸Sù¿:²`"ô‚×ú:äĞV‚²¦Sxæ”YĞı?éôµ‘¼õˆMàˆäi*kâkŠ@ ¨}¨B-q€–"P:¡÷¥ÄZŠ@ê¥"n)U°sÚÙY¶V#â2f´µSêoºYö–2—ğ7jÔù|#? ,凕ÚÔàí—JneW®5†b¬¸§×ä¡0~;9 ‹­YØ SÙh^ÅN×£Ùiˆ:ÏN  =; A/°jÏNCÔ‹ìt=nÏNCØ™5b)QW—KÔÈ¥D]!Ï—¨9PK‰ºB}U‰š¼”¨+ìÙ5f)Q7¿ğŸ¸D òî‚æqâ0ÕZ^Qa@íË1ê¥r n)ÇT¸såÌR©0gË1 ¥S¶MB_a@íË1êåB5r)T×b<[©æ@-•êZœ^SªæO¥ê z¶VÍÙת›ß÷OW¬¶‰xœHLå‚y;^zfÇ!êEvdÀíÙqˆ;Ë ˜=;1çÙ‘´gÇ!èv¼õÌCÔ™b5d)VW—‹ÕȹX]+Îl±š´«k~M±š¼/VWà³ÅjĞR¬n~ã׫ë<&|W ê Ø9&*Hó½ı°ÉCG,ÕYgçË8Æ`kñtÒƒ‘¯óS ÖŠ˜X’´„ÙÒ†ô¦s^²ÀzÀS a'©!g‘W!†ˆdi‡¸«Ó¶Á ñ¦×ñf ÂV¶Œ|(­X ­ìÂ苪—’IGè…íşi·>m÷»›[cÔr}جN›#}ĞËU>÷İšï6›|:o4À¸¸Üî¶§íêaûË-á@Ö©ò§Gy-Úá[«är{:Ò€˜ô´Á?¿ìÏŞö£ß~ÿÍ-óq»Ãsݑڹ°ü†6ïVŞnvëıÍ-æ¹ÛÜåá«Ãû§ÇM»»¹•Bø •õ#¶uNaÅCX˜çÚø«„_¹NãĞÀi æ‚ÎYÌ&, ¬u)GUÁNé¾j"@Ü(S{N…;¥sàIé%,å5(¦‚méœòt’Röi³Mfq€Ô<”-nSÏ)uöRÏE\Şe½Iš§›|p\=nH³qíİÓ)Ÿƒ§±'…úT?æ{×ÛûÏE KF¦B}¥TiZ­uŸÊL¥»Í϶ëíéáówû|JzMßòçí1ß³Û¬7Çãêğù&èe—¥é¢!ã §CÆ ÆU^°­6¦¾Üâ뢧:ƒç¡©”¿oHÈ‚Q‘7z¸¾ÆR8e:m<,)’ ¶†m)5Í E2e³¿éD®œëTáÀõ2Ul*ܦÖ)¥ZZ«‹´Ü?~|º‘uúpÌŠşÉ³¢ä“«S>{Êr a÷º‹AÕÅñb I)ıòÙ$&£«‚[îïó¥dSé`h$óŠbVùphíés–İTmO³}"ƒ½z¸+“'°õúéc®ÎC?ÁÍ–»}™|»[?<İõL1²»EõıYõ±X0ÜÆÚ m–B# Ó³ú¬‰È œ·N]'ßp–dJƒ½ç}VGƒëàí;WãN©3l­5„D¡O+Û%(kd*„x²ò¥mç" ª]P#؆2‡Î¡~¡Ì$°šä÷”z“aEI¹aI“Ö¦ò¤qµà'óJ6nh^ÉÖÍk”ÿO«Ã©œ4P,@Şm~ΟV»»jìzÿ”ëbJ³¾‹[,3Íñ±,ֿź†ËæUKØ%À^ájóŠ%¤©|˜-±P+ †5À]$q¢Nz³ h%9`©\…Útfßò,/§°#ÈfÖRÓŠ°,.i‡ £Å¤X¯R×Û<’!lÛœ[ß2ç†än›=h3’¦Q¤„V‡>@¦,ˆ9Ê«5ÌYgãK¬L€Á¾I7™ïòˆ:&ÎçF6İdU§+IÕé ²ì4e^ã2huÊGÛòä- íußÌ÷a{ qfk[&("b¡¥›·Øˆ”UGjE ׯ€Êšj:~şMaC¾„dA5.¹òêEÀ‹S"°Àz—\ù ¶Åzƒ(•2ØäÊWMÀ£yV7ÆÔİ_aNq„Öğ‡|äÀ¥ªª—£åm•ÈÂ{–奺—£åmz&ÁÉ^§†¾43[wgûp^{Uü RÛ‡ÛŞ-±£êá³/¢”ξˆø"°5…Pp5©şÓ#ı}—ñyDŠ8ğ?SHluX¥Øç”}$¹Ld‡ÏÉ€›`–äø‹)QpÙ"|Ó9Ñp¤‡îCF¥ºÎCt–Z15¼ˆ¨ô‹è€²‘4ÄÔŠY¡NÉ9•>„ğ¸TúÆÖ¸-6¾˳`RËVx‚1s´’–Â÷kØcOK³º^›­®jUŒ¼L–²ÒÈgŸC…Ğ'Îÿs“Ô-Gô¡¨$]N&Ô­88×ÇÿçAuˆ?pè¸h<)ézû£&y”5c]÷îÍ(ºú$ˆ‡A>ô!…/àùå§Ã6U t΋<¶îÌG…ÈòèéøLVıc§y£[ŠCPäÁ4Ÿ{àÖ!QzäÛıiÓó_ò•p´-ÿôKsæCéÚQ«ÈS-›ãÓéˉ3Y¦PÄhÒ$¢:ÊÎêU„ˆM%ì¬ód¤@t8P©­F!Ò©P'i~ÜA:\:mMÛ¤=D°†|Ll¨-›%.T# Ìæù¦‘ÚÔCÚb½H+ÂiÈ,Ú²ñ%-51YÅ ‘¤loÙ"Z“ºïÕÑj[§wla=:$f,n•Óŭ€*cÃK×) *×rÎP9¿İå4 Ii•±£·"²œçÉ›“B/ó<ğäöO‡uÉùü¶D$s}áUSë;KQfó꺢£(.õ‹÷õÒŸO´­B u(`±#ÜÉ:Šï|Œ,¨Zt#*XÙ®"Rc $µ©!Sò¡™Ø6A³ :Í“5êd¶‡^ÖÔ’¤w±ÆmPƒOï¼H÷d‹}z:ìŠ_åïàkè÷ègϨ²èm¤aÃÂèjKiY¼2-ÃÀ’Åÿ"‚È%£D%)£D#ÇNÛ?Pu)WèB.°ÈªÀ’¯_X=ÁÀ/løD½«E©çuvµà'9“7\.K._õ…¬í1_?ôqà‰ö°Ë¹2U®ËÔyBÕ°R]Z=äÏÃiÕòqµ[½ÏwâRy9tX.}ûıa³}¿»ìª?;–›ÃıŠøQyY\Qºv,'NûG¬5İ}Ηî›äãj?SvíppØô±.䥌¹¯Æ`«‡Ş5n‘:~C&>ê8OĞÔlŠ˜‹^÷†OA“ÏÓT"\hh¡°6D؈ ‚ vúU4ÄnÚsà*…ÎÛwâe4ÓYxì Æ§Ö° ´•=µ,ˆög*ÄM’ï/[Uî =dø°Êÿª² {Ȭô™»RÙ¹‰,vaüêöö—L?^åJ6 ÛȲ?›3èÕÀ—mdÂ-¿ûåmgì1x”ØN0ô‘iÏÒCFSIÿº2ØÒCVÁ^ê!ãÀ-=dn[åBxÉIoPKU…Ù¬W@O„ã„°îÚdæá™r@bŠ`F+ÛÌ1ëçÔà <’ux$ûğHúsÆYÉá\|hÌ‹ wñB²òSC³µ=|n Ó/ÈÌ+Èz‡ãÜGf–¿c¤_¡8 šÊ }©‘ŒZï n¤Öû¶­tX1)¦’ô&µ¯AÃÄ«åDj ôr¹Ñ5äd1 Ïò*ê… Râşº8dMd§>Ùx®Æô*R§(ÏùF2vÏÖ5ºQ–9о}ÌŸ‘ó-¥u©™Î”ö1u6ô©&Ÿ¶ÑğO4$·Ñåv ™–&'Réç²t©{ÃÁ¯[Ȩ¼­È>B³æ IJ¨.Àó’>¦—±¯J(Ø.ú4“‹—:È´‡£Ì‚jdzS±‚mëqúYrÏêr´m­®£Ê°æŒ€”5äô/'È”{eÀ¥wÙ<ìE…Û.Ó¶z°µu†1öÆs6ÕoKv1жÂéİTÑöÜ@F™GRÁ- ߹̴úÈô9û8ÙD6Ÿ\4 ¤ï#›N/ª Ák¯^¡’– ³áÚØ•^D¤©HI.t‘yáYPƒ‡×åjÔI& ¯ûË€›úà ¢n»©Ë ècYa"2¥jÈ ö¡_ ‰,˜°ÒÎû´É> ›vxK©ñ¦ku0sóØœt©œKÿ«—cJ#;¤$œߑŞ+±1±.ñú§â vF…yÄ„'YĞ‚±êÚ—½5i*ŠÔçúã¼î4œTT“³Bìàx°Z’Å5l‹û4H2‘&ö3”½:c6É~’HjÃJUqD§h«W»/Yv”~6~jµBlõÆÁlKÜÂI9g7İö ®±Õ³ åêvÑÕáoe@±á#z„µ· ¸Ï€J©«aø‚ÿÀ5 endstream endobj 1478 0 obj << /Length 4301 /Filter /FlateDecode >> stream xÚÕ[o$;Çß÷S OL$âãûå ‰#BHˆå ˜LvG$3a29Ë~{ª|éµ;}[º6‚§ÌÕ¿.Ûõ¯rÙÓ᛾ùİ;ÿşæı»~ò›À‚•vóş~#,gÖº5Ie6ïï6İ>¹5Ün?¼\onµÛİÃÃùFºíççôüùéæVúía¼ÿr<}ÌÂ?rû|İ]®İ‹ÇÓİáßùıÓ]úÄ.=ßß@Ÿv—İşz¸¤wöç—¾z-_Fèõœ]?nşşş÷`Ê­,˜r½ç—Ëşps«”öÈ >¯Íö7çë§ôòåp}¹œÒclèíÃáô±|à|ß{óóåx½òW§ı9Ú{?§×ù½x¹_®xYlY¼>¡Yк½È÷éÚøIÖı/¡ûƒƒ’!ÚãgŞıöı»½ÃWùFl¤ÌJ±±J1#õfÿøî¯ç›;xz‚©à7ŸãG7Š åáÑÃæÏïş”»¥ Ü ±)%ó…ş}ÅÉB$`cᮿ\ï N2m, Ôf‚n¡Cì % ÒkÖïßûËùñ5Tqì’ÎU<0éz›ü`€«“Ş‘pµfx W¦I^Î3gU™â÷/§ıõxFß1:»%:”1( øçÃËØş …ş„²€¼~Ú]ÓÛûóé6:Ù­L­›]wÇØæÅ•Ãö/ïºÅÆ|zúÕ™wé“åoOû‡—»¨bø¥?şå¹ÕÃåñxÚeà…¤!ãà…?§æÃb•æVóZDÁ^}¸Ù²ÚG©€÷%töC”F.rà£ãsz?vôÖ ÁÒIˆáÏC²s¿{HÏëöäöqwÚ}LßYÅ hğÊïÏ—ÃñãéöëJÇ£Bƒ\°ƒñZîw(Ų¨}üÈs~áåz~„ƒëyø’޺¿wéİÒ`ìG|[‹Í^qF\Nùc÷½í_.—CõUÛtÕ›Vå[åT7/ŸÓÓÏG ¯åÚ;¦D7—G ¼Q«qŠ9íש‰dʋؔÑ!A…}ía`™p¡\V L.†²ã%=6eUï¼ê=¥¤€yDÑk†=0¹cŸ¾ å a(._BZ*j/,¤IˆÒ*n0LãÔ­¹à¯=§v赘òíîrHRŠ˜bF~/E şu~Áã.¥§/§ãõ™å§q^«E©¤`ÜšrIUV×^¹æ4¢qU41EÇ?uÁç_C>Ëa9( ËÑrø…÷: ƒl,„§ÑÂd …yêMk_zU½’ס7§ÚĞn“¾+Ñ:ğ2é˜'JRÁ à ­¤&AZ +[¤ü7|¸v MÿBÔu¾cÚ>à6p( Jr.ÓR¯±ì52£Bi†²Lõ‡÷rÈ¥•éÔiæA–[¬¹…è¬(àš˜¨rÅZÂêdFk⺨5f´˜”&iÁjÚœä»HäbJQ(4„‹²ä9Ÿv—!¡€5"œõL‹>èZè4A¸8s×¢j‰ãʤ84HÒ½X¤“Ä´ı;¬Lv:Šî… ¨25sZ— Xï)ØúC;,K’M1¸ÊCÖà{sx“J¬Šë6›ı.N*!Åw$ù´$\Ö“ÓËĞ,ê¼”ZÜ´¦N¹)²øi\à§ëÉ£ÖäiG%€O­¡Ë<•^\µ†O»*´øjcñ7øê÷Îõ…„Èí)|ZR"/ìŸvÇ©ˆJ-¾ÚP'|•Y|µF.ğÕõäÎWkò´¯@‹¯ÖĞe¾J/¾Zç}•Z|µ±ø âê`o ïYÀA眻*aÀm?³šRĞÔxoJîcËP İa”m¡×‰é#•g——lܲå¦eï“|ã˜A§&€Æƒ!²…NT † àd ©¥Ò¶…t£Ë ¨ÌCß@§~ÏŒ—dÁɾµƒîªøX * åáê¨3 ?,j­';Á`™ÓÂG~>fH  ‹xĞn¹ÅZÊx®¥IÑ`Öb,ô²Ö† Ñóİúäñ„ix }²šÙàHô šÒÁ/Ñ'hѧ:œO}"€}ª¡ ôi=¹èScí´>@‹>ÕÔeúD/úTçõ‰Zôi±Å>­‡wú4kqÑ'fѧÆà7Чé–‘Ì­;qÒ-° )£—T` İ«†.Z`°Ë«fïñ$Öğ £I¨X6 ²¥ÎÈp$Œ2¼è™;~ à h<\o€gd’2‚]0¥Q; àx ÃÈo°dX¡(àñ@† ,2Hzd€$ô .ŠØ;£Çãa^ôÏğÇ]wQo÷㼘›N¬Ò‡s<7Ÿèim&ÑÃó¹Ş÷l÷Ó.˜8(«\Èà¸r-w*í²°dÅ ‹nÉcû@¸¿§H¨JÆs© u&ï‚ğ‰)Ü:Ö·x$íR  „é- ¡7ÀKö4S0/Ò­û~{¶ @â6äÊ’Ÿûëù2ì9V ªs04¾ÅíÙÂPZ\L­'ÂH:ß3tÂU…Š[ëÁJ˜‹<¶Bò — ë™ráÉú†9í§¸9N2´XPÀßH6ìa?Åœ‹S ®Â3°º7¸ ÜTá™lı1NHÖŸƒŠ1šrÎÎ{jŒqÜãjîXlU‚3şº‹ˆÇ5î„Ã*üª&!ët\£!x,.tiÆÛëï´Ï†‚¿‚Àã {8qîH 2×h wZ˜îÿè‰p…Ïã4 |I¸X²À_ÍìÖ÷5sÑú~=º,ïkô¸.)&…¡Àâ,£–ôrYÚ¯gæ•}œP$,À¡C¯æ* á ÷Bkğˆ iÇ k( †3KõfJMê¿rƒ‹Ç¯ğ§âóƒ«e•$`jXœ97l.†ùya‚-ÄŠ³_KwF¤ñǪÉ„ÕóÖ,K&(¸9™h¸Ã;2–P ïĞà˜†³Nù­Rd<‚©…hÉc ñÇ’@ñ;q¸*èŒã¦3ßß™oïĞZ:öïLò ¥õØrB©ÁNaÎàœğˆâ~äÍP÷m”½qŞÇÃ%$`k‘î=ï¹Z‰øo˜ø?¼ïÙ;¯‚Œ††¾ÎbCüq,AÎ-øé¾\ãw®£€æ;×5Ôñí÷SBÀU\2 ±á> ÿL\AÆKñ׿6È©…”³€KÎRƒÇ6$ D=lñW¶¥Îl(À2IY 8Ş“*ô‡wdGÁ1HXãPUo€—ì(@Òş&?3@òœd›²<Ì©„†Æ(¨ø»7œK5uJ%Œ·\T ¼;~Ãİ|TøËEÂUĞ„“-wB*ò6 9o6ä­ğéúPPªqo|gní !pp-]¼¯m¹µ,›ƒ&j Z×á%÷vÀÿÔµæŞXñîîK´B›ø/N(´š²F/Ò jÑŠš:«ë¹VÔÜáÅ9nbkIÅMl/Zè„P¤ pŞÀhÀc‹,69ªÃb“i©37<ğ° 1Yã?ññKoo͹" Fh1lñ²½;ğŸí¾Ë§P*îARH†B¥]–^P‹dÔÔYÉXÏí$£æî´v’A-’QCç%ƒ\$£ÏHµHFM]&ëádÔğiÉ €É²¸Ú¬9®ß(äwó2ıpƒ¢Œ M¹E÷’"€vuܺ¨KÀ.…Üš=½ÑJAÍ­ uD˜K%—€ZJ¹5uL˜»RîznWË­¹ j¹äRÌ­É3Å\j©æ6óyR2Úí]¢Ô|Ãî.H ¬—áo•„åW>"„n>ÿ´Ô¯ endstream endobj 1483 0 obj << /Length 3161 /Filter /FlateDecode >> stream xÚ­ZKoã8¾çWø¶ °Å—HgƒîA/Ø]t€9ÌÌA±åDÓ¶å‘äNÏ¿ßzI–lÙi`r±É"UU,«¾¢”.éâç›Tşÿùxóá“ í”u™Y<®:ÍTÌòEæƒ2Ö/W‹_“¨²Û{­OŠÍ¦Ú=ߪÛà“/Ë[«“—r[r}Ø-»ªŞµÒmê-·nüׇOq‘«<3ÊI÷F«h4Køø½+›]±ù™O–õí½‰É ùfYÒİ‚”¢ãÎKÑò¤'šS–;y4+Wè“}Sßã*Pq­UîÅ4ËruhJTÉÚäвm¬Kº—’iëz³©‘׫ŒÙÁN ›ñá“v#ŒÜ‚,¯‚cQ¿¥:œ«…â€ÅD®9÷8ø†º½y^’À¶m ÜÄ¿¸ƒ(%$2‚†fÔ­´:BøSn¾İÒLòCPˆnŠ5&.rƒ(8Ù˜|»õYRlÒmÊîĞìÈ¡÷Ôkí®b q°rú€:½o²›ÁEuœ=á :»à’Ï;\é7dReTS‹pÅÎ82œóaÚ`g ÇqOv®;1O.*#ËâĞÊÿ=ÍSñ<«öĞZyg,rw² ²ÕÆä|ê±Ñ"àÔ‰ô–õv¿©–…€a$u`±% Y „ÅÖ¶úNÖ .M“5À_´Øyv5ÿöıf¬¯Dš×ªƒ e} z‰uh½~8TìVÜè^š²X¡{¹ÜÓ6±Ş‘5½NÚÃ^Lİt-“V _ _wƒ7Íj$2°È8‰xâ[UÌĸ“MÁDôÇvóçSÀ•4 'ç€ú^‡)ЇÓ26ÀD› D“Š}ÇNä‚i{Ú4X3<ÀõºNx?p¿í òݯÜ}!'mQv²BÜN—‹îóY…F[l¥ÅF×Tâ¢÷¹±É§ÛhA5.¿à{%&k¨4d·@óVŸúܾr鯇|“Îdş~Îô(±)—ÅY×›Ëni ùfÈnŹ0$î' Û"ÿNI sܤğ¬Ï(ºëtaQàb™Î wÙ` 42ºı €´JôÀ€Éj°FŒ#ŤŠ;îÓÃŒª1Wàoonó€–ÿÑNÄôçSvZ^ŸÈƒ-JÔ\ÓHŞ¥o‹E$ ?cp³Ö‹ĞlŞu3‘]İD§‚@°~ºXK¹ò·zˆüHãÈ­é–Ùt „UÇÿ[aE¬.0ò" ô2O—*4zX쉟ö¦…ù"½Ä|lËeÙ¶ÕGÈúr¶€¶Z9ó–+æ1]QDï±GNç_©¸şnÊõ)Ñ“ÿ5åtòÑVws ,ZŸŞ»Ìï–3ù#Ú<ñ v °¶$ñçX–µ ™KùV–©’ĞsIÛğÄp¥qF‡!²8 5}5øçZUCúp‹¬‡ëÌüŠËïİ[Põ+±Ø-U{nõ°%Nƒüñ^i[iaê†Ø¿Ÿ‡.iÿÍa·$¦æ"X?ºÁªóv×.ظrPÇÖqüÔkÇÕÇ£2ÔH'w+¼-ŒJgëEH_áø¦çRôŒChëËÛş‚Ñ|Ň8v¢³6ı¥’÷EÛñ@Õ +¹3=óĞ[qòuƽ1˜Z£\ÿ-ª _g¦Æ Q6Ğû¯4äú7ôpH>Ü0£7^ȳ p¹ı›_jL?Œ|A‘…Ş.€˜ &,kªhşEîX̾)—\*Àp /séÚ½nQy%Wû0xv÷O€¿ xqáË @µbŞ<ğş B(h”jwò©Ædi0@KúKYì¹…¯é…[ÕTÏT-Î`G«"ϸò2ArÑ¿emôé €yRÕ“ª}I°†Pñ¶õÇ5G~|õ#Sxay¿°üda¹,,–KˆµòFƒ‡Nìz?W¾mÁÏ—ò’%Í@«çªÇ£€}qº¾,@ÒÑ4ivÜpîö·ØØY6ëb)¤5?0â .1\'zÕµàèEÿÙ ^Y,ç³?uf¨µÌÑTò:ilgà „ëHÚöAkzC›şš@v EòèÆ;ŠŠ³ºÛŞ\z•6õ;0uc¦t@A¹èzÆÕºW´¼ìµ8ğv„¤Ú“çFççrAÿó¦~"/özü&k€ş®ä\¯%}ëÑZ ³¨Õõ3$ıkØ%yÊ@U†/ت®-Åáõõb¢éø¼èëoï²^-¢Õüߢ ã4ß*™D¯wÒè?æâºÔ¼‰QÏønØ„şJÙ‚İ{Q•<ûÌáµĞ|lrcdıµö“YoşW;ôà endstream endobj 1489 0 obj << /Length 3365 /Filter /FlateDecode >> stream xÚ­ËãÆñ>_¡›%`Õf¿»äY#a ö9ØÆ‚#qfè•È IÍxóõ©êj>EÉr†‡]öKUİõ®îšdõ´JVߪ%ñûÍıİ×İÊ3o„Yİ?®¸I˜1ve´eBêÕı~õÓúu£Í:­òôáÕ6[)üúéP>¤l»õ>mRjÕMuÚ5§*«©_VôM« vı’Ö0Å×ÙúMI ùC²šm¶JÉõY!f»&/‹Í/÷ÿ€]'+¾ªpëØøáÛ»ÕOa‘c–møšÇUt¶8÷{€aÚrμgÚgMšÎqżRãİïsÄœ_6N­ñ܉Y7ϰ1áı:/6½ÉªÇt‡^ªÇ^ó=œà~ıQè!mµf\[ØI@p(7š¯wøÒ¬NpŠŸ.‰*èD8CiŬí 4ÏiCØ…wë#lÈ ;Ù}µ§¹*{‚£Ô4_>†Co…PÌY7>ö1;–ÕXÛ!¾r"t d'ÀÈşT¥;¡pÃt—ŸŠ]?¹ƒMÅé"£ ÃÈc•eíØ©)sȆN/á,$S6VH PÒ˜òH­æH—Q;û xT …±·#Âì33«õúş9¯i¦ÊyöŠüËêJa¯OUzD* áÂç`e‚…şC4)%Úh =¦£ÃÁ·ç¬ VJŸŞœ(Í y,ì—Aëw;4§è—«š ëV9Mc‡¨70îb;§ÂP\¤½BË&š’¾/ú"p.~ğ+ŞïA w“ä—°5!A´gøÔ–Œq“m ™<;CgÜ¿ªGŞ*x 3>´Î*£·y-á䬻Ò“ÇR#²fW´5B–)íi£Ã8D?À¶j4ËÁ [ݯЮ²Ç¬ÊÀÕÌ„Zxx"O ÿÄGIw)¦ É‚™A¤4Ò¡ îÀĞ¿õ©z͉£¢ƒSUu¢ p:+£Â¢Nõ{”>î»qØ ^Ìóõ¾¤~ÎP‹T¡üü9ˆdö„=0\­¿ë"Z?8*¯aìˆû>ÕbQ@Ïî½ùj£¡=À÷适@lƒ.ÉuÌIHà‚¯•*úch H½b'[™ÂŒ¤ÅhDÕƒ@g|6ŠrˆIfv¢[%ù ÄþŠW˜A/NÄ ÇÊ(¢e8ár@¡,¨g0BnEA\şöœÇhğâ.#2¢¢Ï>-(ú7D$vyó¸Ûé ¶‡„§‘²ŠrMT#ÁEªµuñ5Qº1£’ë‚Ûõß ĞÍt¤Y¢ñ<–ÛCi4ÚN(,ŠNÂ7®îT=¬D:>¶í([l0Û†®  ş8È!5ƒBà·ˆk¦àå(M¦‘ cğ Yï ù§ˆŒ‹–vIÒÓ'¥ ï$c‰‚>yElíüŒ3cû _¨Â˜]PœM¨g…bÌ,*¶}F§’3χCEL *êvÉÒ6EıE­xPe­‘Àµı íà„(B·ç¸ìZ)=‹yÍÕ‚ì ô«6{(GRã´éF¢ãÊŸñWíx~ÌØÈ}ı‘«a”Ì<„F[®™—–¶i»üd aK^«¹sÃ@œk ¾Nø{"/îK¬ d"Ú\ùñ©H\€¼RÑÒŒ‘E5п܅t,1vÜ/ŠDqÓÏ3µ0‚Y­Áj4s^Œ±FI>Ç Ñ°OÄxeÂY¢Î¸ûs¢“ùŒ -á1ÆåŠ»1ê×ôpʈÏåï° ~Mw¶ÜBp¦İظÿ!õy-CHŸ\,0S5L+ó>ÁÌ9@I5¸Ô™,ÅÀ.‚ÕXÈÂÍëeÁòL;³^`)³Bñ^—,ü±Z·‚¨Üs)±{%­'ì6‹Îı;² ´w޽т®@)Èœ—q âü[\Áû‘v®`ˆô&W°îÖ qÊݬê€y§Ak9ãBL\Îàt‚}Áé4Hí„·—Ì„äak¿^)¦¼=“©ËfB[få"ì•&aÎêäYZ˸_„¹ÒÁz)fåy`&V[Á=3FCÃy·DTD8fô»îÙ8ì£ÕPJ««ÁDÆÊ%°ŠD1ÇÅëE% sh²À‹.åxˆ7 Àä1xÁ»»ì˜„VÇ´ˆ©P¸=ô*\[Õñ^ß·÷Ğøq‡Ë k}ݾ‡²¹Ç=‹ÛµÈ šÙØ8ßí'èRúô”)ò =ZMŸºº«Şg5Œd.1”Vêj4íËHd‚ŸÒ <,G,VpXáÆXÓC=ÇÃ8°ı2 „ÒŒ›e¶¥ ⺘YîA Õö6xX#6L~ zí!Úât8ü: äYÂ,±-)@ɾ˜8'A -A_x ¤E%勠ŀCú1ÚSQ¿d»ü\Ãù³œ€_^a„’R‹Eh¢ğ†‚ó.„rœ”ãnâƒr sjUPdÎé)öÙcÏógl@i±gï£ Ññy±Ÿ7Şè1äÖ¹÷o™‚ÒêŠÁJÈc,€T$è1Äé%ƒ%ÑcğEĞÊà1FX³r.ÈÔàÛ;sEÅ4[‹{Óà“Ş÷[洛 ¯8Ğİ~ÛÛ^)p]ZĞ7<"¨SÑÆ±4/8NbXù±v¢ê_ËêÃåJšSë)'D¸¿z‘ÕÖƒÛqµÙ÷]d@:á<‚2Ö]½‰ƒHÛ³V!8ȼc½˜åhP®Á«¸‡ŒğÎg9 nTŸÀy_…wÎ>cP¯Wú@¨£ÄçÁ¢!çÂ¥ŒtàVô"2#$,~"3s—2Ò{ØŞ"£áɃ¥Eğo¼ïŒo’Çl/1ñŵ&yIû Ôø‰ ½¼†rşå_Ô‡u á­ŒÏmÔíŞJ¯şôr9âÇMû¤Ú—»} ÂY*#Vëc_%ÓğN+èX¨A¹²\òğ6£¡b@¨Aòáí³İ!Ö,w ê†2§àÚñ+…ˆáExx!|ábeĞ©û A­b~j}ÂÛ&Ñ–®|¢3àÀ_èóı¿¾ûîÏ笪Τ÷m‰Ùy“§‡ü¿‘ yÓOŞGƒ Õ›X­ÜT`MÉWõ\, ϯûó‡/‡Šs~^$ ^q}Š âíã'ÑÁ'Ì.ğbîVª|_6±H=Vd‚|Aa*O4\dTµŞŠ› n1 ¤Ô]Qµ¦ £ĞÅ Rù‹ 4*ÖØôŠ.iiÑ>ÇUiõtš}?vüR˶ôıÌ>2Wí¾à6d’ ±×»üg²żz7©ÀpB¬µVÈÑ Ö‡ ±^ôÚ/˜Ì"x^0é1޼6šİ—<ë zUlb…ºÔ"VNÁ@Ê,vRš¤‚!›a\ÑĞMå ÑXAg½»T9¦¸ ³/R y†•ߨÊÁt6d%Nô‘.,H÷û¹ÀÑ jO_dos ·g\ƒ JÎTòÎØC€s÷”H¦)Ę/A`¶‘ t¸ìÿ €“ûø@•V_°fÍC TÈaA° 8Ò–ÓlCéä´ªkÿ“oİßÔEş¯©›?‹!\L"áT<çf´ ø? Hu endstream endobj 1493 0 obj << /Length 3393 /Filter /FlateDecode >> stream xÚµ[]oë¸}¿¿Âou×Zñ›Ü¢/[t‹EbïK±»¸Pl%q¯mee9éí¯ï’rDErÒšûH¢Dr8s8áËÅı¢\üùC9sışÓ‡oàvá §¹^|º[0f !Z™‚ µø´Yü´ìêıãÍJqµüC¸ÜïšÛj÷y·=v¿¿ùåÓ_ÑÖŠ±Â©Xağş\•ª\¥ı¼kÖx×5ŸãWm}÷3ŞÑ«us8~æô„OvCİCıüù©Úê¯Àñ%£¿©>P{wm]`h,TÅ÷ûÛ†CG ©ÙbÅYab+ÿ¼±bÙœnV‚™åCuÃíò‰şÕTb—]Ş´õ¾Şßp³¼½Yáݦ¯«İ3½ôÕ¿CÙcÛì›.¶ƒÎÕm}X×á]ƒf”^ş«^wñëĞ’ƒïAc¥ãÔøŸêÃÍJ–rYÛûÃöp©)_.}‹tÿt£Ô²j·Õí®%$²ê° »ª«[Ì‚äüÜ ‰8¶ûø»}u ‘0‡_IÖÅÍ ú´ü; w¢§İC5¨±õW·ÜÃó¾iëpWÿ\2½ŞbHcüÚË×Ğ_òP‡ÛúiÛœb3uµ wÍİèà¢TäEwÕfã…Eï«Pœêy½Ã¼û±R#"ÈVÛÇ µ_UãfêrR6´ÄMauhÈ07؃~ÿÍOõrí§Ù¨åí cu{|­±Ô[ëB+Ÿ•K±¼ƒÜ0å«»Óaİm›•òå6ô´nïªuüğxz„e“`ZÒ4*êB#œô¾­ö{Rfzñ¼íÂæµñz¾®:/)*„4í×))mI®Z,ëûà‡…§uhbS]‡ÒøÎÓ‹!®Ğ ±~[ÿzªıtQuËiÃé†-_¡ØO°>÷Æû‘¤X’8wõ&¼ô½·^Âİ=Ëûc?—Uœİª³Zºf±S£_C)á&|Fò¦¢¶îNí¡İìÕËõ©mÊ#|½®œéùÛ˜rsáœ@gMaœ EWͨJBçş/üÇOÍvCÂ.—߀}µ?}úğë†Ê[0­ nôBZqğÅzÿá§_ÊÅ/!¥BôÙº_ˆ‚ ‹»İâÇÿ˜ZF´+$:OM%ş¾úRO ºÕDT' V²Õ¯7¯a9/ kYXÎeQ2—ªãâ6Ñ·ÌÒH[˜QH&@IÚ ¢¨v©uŠÚ} £>nÿ31×B°¢TYĞaBsj„Ş{s&´â\Á¿©ÉÿŸV4cD¢„TŒ‚¹šëŒC´Ò7u¶x¿Ú½FµøÃÊjma KQ猈©B«¨ ™ÁB– ¾Ç† m–¥$liÓÌØ„­–•„-TŠÚÛĞ€¯{½{¬Ú%çqMº©åyùşÇ°¦. (Ͼò/£k Q†æ®eɼ $¢ ×wsz5à\ŠÌ'*×…&ó¢Î)²ğıEXXÒÉ!,iò«éc® »8 Á]8†©«Âå¶wUÈMøʼ‹ƒktq’²à\8xõÛ'òj?÷¤'X 0—i„D½’Á3ÄU z¡¥«ğØaĞ$òÄå‹wç¿®݆ áíß¿ò>åkï“jÄ/©î„+6r‘d°ÇsE•ΣÓ^<±è÷^xïÒ…§axÒ{ˆ(>ë CáB€`ôEK˜q^By°$Á ¯ZÕ&JrßTÙûõÓ”/,—ÔŒ»tÆP$‚d[Ú°’‰Â‘©a§ …ø–õs0O!Lã…Ñ6„UʽÄU"ÆU?>ú¸ª^oûȪk몣Å](‚îÆ¨‹ ¿úøOO7¾f×\ˆÂ’ QÆ8ÜB‘<†ûŞÖÂSØT}m­è—ǦÅÎÓ‹gªv¢sc`Ó‡3Xß‘ûª½­îëĞĞÒX6;ÄLâ#ÌìhÄô桚ÜG8YI·Ä(¶;èÁà…*£¬ğê:·ADD±Ø}xıèã»fBvŠ_ıÇ]l/'nÎl›şOgt샕*D¬çê>*Ãİñ´¦ÂS g£ğW“Q»í ¼aˆxšVûG=Áá¦9ÔÇp؆X„Yï5Y0Í /ìYó`øB»ÁİÕ¾4!má¢|:«»)² hÖ‘VP´Sê¡}[­» \øg\ê,¸hBX•àŞ~í&™~™Y@­+J?]/ OŞN'¨‘õ,¬„ŒyŠÊ_*øY×¢F?oƒÃøP¡7‰êï¶_<ÑĞ®÷,X¥Ùס ØÍÓ ¬®Úm7¡0¬ÓtGldä€QP¶nv»ºßfÂsÜòärjı ÍãöÎ Â -¢è±m<êvìp&ì6e . Æo÷Ew'ø TX…o^úЇ¤¯ø&lËĞ›ÑÀû-¼IÅóØ{ÀãÂxüw)›Æ¾³Ó¦%Hå|*ş¥ …›àğÕÇğØyŒîzWKhù£ Û”ç—~µÒ´K²ˆ‹Ih¥ŠÍ‡-,ÜÀÛÙ„ÆÂöœ|Ù›rÄB¯6õx7Ëï Oî|şX¹ŞÇ燺zô+÷‚I,û2€zûÆ£ÛxŒ.­™½÷2L!‡kæwc~ÆÄ®Ø8›„BÀ(@úPÇ5!·°p¦˜oJôªÒÖw J: $¢ƒ/ÈîÒ¾œD®mlk Yš{&,­7 ¨jP:™¢N/ äôë•„¡4Qár:üÃe:ç!Q’(Çœr eéœÎúG†6*YTXS.A½@*%Åá.®(MQštZç|#ë³0ƒ¦³Ú“ ¸Š ½~¨Ú˜mzÛm?¡S™'¿ó§Ğ˜<”Cş¥}›r2 öœ3@|çd€îIgıé\zfê%J+€Ê‚Œx‹i‘ ϹPpÛÏêxaU‚9ëCqYä‘±à”ŒL•êßA—1Y€) Êt<çE9J–y¾[™Î때‡HU‹wި?+ïótj†¹ ‘‚/˜£ÄşuÑdåÈœ.,®—N`!”°Ìe…q:5B6)"Uê,¨k¤”)꬀B+™—ÇS܉z°ªTıŠ64i™s¿IÍ“d _66Ã3¥Ãè+ŸÔ·K¿bÊßœÊBI¬~üò )V+csA  Ëô{M"&0ñ ¨’Ò0ñõª!MYğ2ˬK#|ş:.!fëXTg}’ş]:®DY”"‹E+/ŒySÇWd+ÊÑ“ewAÙ*»ãƒdExö‰oÇcΗÄê‡&ì›—sø›a›}ÍØô=å @ñl3@Nô 8¼9ìÆ5¿ß®¦²7!]ÖĞAi|f mû¦éyĞ4=ÎVSesâxiU<¨%õ å1q…;ĞøÖ¬x!Í0h&cWn{¨B9L·á~ݾäÒ2+H52ÀZÀ2•ÂÎØ…Pg2 Òa^òu6½‹@•3 -Fƒ2)o@s¸”r› }çw.FE4™¨âï:ׂä`õĞtt›]T¤$%ÉkKJ2„½)Pze1y’’œ†!ôL¨ AÔ´2e@U0Zi†¨³~EsŠeÁµA¯Kq'Ôtú*ñkFiáíaÛm«?i8ÎàŠa¢ºˆa\%·¯’Ã15ÜĞ/OPç«#~'Œ$a,ÎÉñğòàË1+_wœÉ1“-ÓL¶=g²¥ÏdÿÆ çw1g‚ùx=ÃsjŠ—ö㋔˂K‡—hY↠SÉXíñrà:J‡¨÷BàO>\ùÜùÕ òLä¯è?Ï‚ª Î£á’29b:+–EµüQ±±jMnÊË¿Î2¿²´!ˆ0íf¼¾¥]oޱ3ë|Hı›ÿN†Ás‘׺Ø,ršâıOæÜ‘øk³°ñ×f ì ƒ…ßÉdí'“€Î˜*ı”WQ Ĥ¸³FF•gniãµÏ탠­–9)]Rp0D!0YÂbYP¥(ôx~/3¼b™E·„™X;ã»éí#Wš, ´¯ûÿjÀÿƒ¥?¢mdÇ‰É k#3²aPÿyˆÜ€ endstream endobj 1395 0 obj << /Type /ObjStm /N 100 /First 960 /Length 1735 /Filter /FlateDecode >> stream xÚÍYMo7½ëWğØÊ%9$‹ @>à¦@In‰#F+° ù÷}CÙ‰ÖZi¥Õ6íÁ2—œ%‡oŞ g¸‘jtÁEªÕÅ ÖP—ˆ­‘åì"‡è$%ÇAœˆàuRªI§‰LB\NÕÙ•”É #+Û»šl²ˆÅBn/á'Öd}ø![ÓŞ‹¤M×+G[.2‰õa@8.ĞBŸRuœ ¡Ê%dÛ'¬9˜<s¶‰ ~,Åúk.ÖŠ.…h+@õÖ}↱aÔtjƒ¦¹´Ö(´šFH­•›²í ÛL¹­E諆¡«tŒYk© fqLy›–‚ØĞ™¢¶¾ärÖ‚¸m†Š#)6Êͱ¡RуÕQá6 æ«™°†ö±áÈÅŠXß +è‚Vİb;[Oı¨‚kIë31©0$Ôb³5«ØŸ!$Ö]M!ÛYif²Ù*H€4šŞ‚Õj3‚€7¡±³‰™APËÔ–‚–ØÊNH+¨:aÅ¢ ¡0ˆÉؿٴèÑ6Ş„FÖJNr¶äà¤ÆÖ‡W«Ø`‰¶]A¯°Bh56b MÒZÕ)EĞ(¶æTf‚I¤‘ªØ4ÃT1/WB£-55G[ ÀEŠ19]#‚yshÚ97šË¤ *4ªi^Ğâ¶W •‰µØeé<ÌXlñèÑ¢;[]ݺG\wcç`şü`iáş{~ëè„)ï°oø¾=<~¼èşº^]¼Y޺w®ûëù™ëŞ.¿Şºó†l¥·ß>/1ğşïå¢{†U—W·7æ¡m•E÷zy³úr}±¼YdžÖ÷jùñòıÓÕW÷΄®k:ÇBï¯ñ6KZ >¹ºZa¶wëdú´dë7ÉE÷æË‡ÛöüòòêÓ¢{ººş¸¼n«„óîE÷g÷ ãÜ»À–H‹/Ƥ苹ø ©' Ä7®ûcõvåºçî—‹ËÛ¥½üüùÛïÏ^½üíÃjõéWƒiub->esòµZoN*!y„Ä) =ǬtgÍîìòö >èùn©ìáx{$8¯%—øA·6 ֧ކõ:nºE7;_¢ÛÆníôÚ X_~ékŠ{$P|ˆxõ`Ù ^ω-Ô„|?{võûûvr(3ºqŒ¸ÖÃpå(İØø“¼7¶‡{wa¸E ¹¼¸hp—Ğ¿Ão¾|¸ÁË—«+Ÿ½úôĞW,Ùoú€jõ±Æ=Ô“Ğí+âz²ı&)úü+¦Û´lÛ4êq6íí6¶) ©zœo{$ˆ³ç À¶%£V=Æv¡8›$Ú†4Å馴ÒÑÍNŞ…]”éÎdNg8•S‰ÕGà"ùŒD’D}ÍÃGã½£¼±åçiäLì ±‚Ÿ—=”C„4d§ÍÓn)§M¶Ft‚Ñî-«Yf´%àW¨…jAíAȸj°P½f1Ÿ’b=83¢´³Bj+I¨xB „¼İç˜ÇÎ äg¶¸D<Â¥À —zRȧ=ã¨9q¦ğ1\ÛúoC“YÈy'Pºcáb­Ö‘ Ö¶ÂOªz«E/ô„íb¨ã,€çã$ê^_ÛåB Flo÷&Q şdeR€CØÍG*-™Jøì’ªŞã-‡C³Ã ‡9"&çm®²ÈU®[\eº£(ó¬SØÛEPŸQãSV/®Ÿ}æûqêDR”èí'F$³…)ü&¢pÖµŒ"osBGfO`0`ö$„¬Û7IõJSçİñs2 %mÓPÂq4ÜÜ­ÄH{˜Ú#‘"8¤C®zÚ•ÒfÉ:¼z_øğÆêı¥ä±(¶™~އs†jDòx)'€3–)÷¢]©‘ο[œé@†¬4Közõ í‘`L‘ËqlšûşLëFyú™¨iÖÒ¯íæ¹wû0“<ê§­’m§ìZÎJvRv†€–nò¡7yû!tƒ°;’Ïp°¥±{¦€ ĞL9ÃáUeÀ¨å£–4‚@O`0kêI$8P™#'šÑ@ä)ù8Œ6#O wÙx‘û†Îzç Tí¡eçÁ¾ğ!4Ù·=E©&?¹T#)Ş,ºş`cŸ{e]ÅRæC´I3jƒÚ  p—”P±ˆ#Œ©&yeš¦K£|yèôåÿóYª€zB¨c ' aˆ5ÿi·ê endstream endobj 1498 0 obj << /Length 3751 /Filter /FlateDecode >> stream xÚÍ[I“㶾ϯБrÃØßâÔLªR•CÊs³}àHìcIìPÒ,ÿ>ï=€¡†Ô“\•K A|XŞúÍÏ ¾øû;~ñûóÇw?~zX°Ò.>>-„•ÌÚ…5IeW‹_›ß¸p¿üÇé³?H?ûK ^PãÏC¿zx4œ7{íé«÷ßıç€÷|!Rhæµ& Ëí»_狼üÇ‚3üâ 5İ.ÊCi³øåİ¿âP3X) ^æc]/ß ¨*0£DT rÔ§qØP­fRø*¨Ö1e\úéÛ¡+ zÏ·UPƒdn¡køŠf“K5˜7ô4£²1•à±@Á­ğLÉû ›ÅHº*éĞîĞå`Ó¢9­€Š~MÚ µ¬@k*¤ è'¥Ì@¯éE™JÖ€¥(Óe¨×´Gk¬}P#˜¿ØÖ‚î@¾¤å¥ò¯»(üŠƒö½Î„9DùMb ßH©šá “Ğc! =–NBïšTƒ’5†ÈUo·'%Å)©#½¦~v«î++èX#X~{SŸ4 Ö‚ÕO«Ü]VKC à©#án&æ:(¦t¨‚,ÓŞå¨åÄÜ€ãjBò¹‹éälŞTL\¤húM‰´œ9y›´—œfæ’Éàî3 œyHɱ+üQ–·Ä½¯¬”€ÖæÀWx{#™s¦ *8ÁN0C½eÁ*©ªà‚»äVä¸Eh̉Dïyö¦[±ä¢ñ‚¿à£>ƒµ{6`%AܾU£ªã¨öñ‘ÔíârÙí©.£ ÍÜä¤O–Ã6½úÒÖ©› q;³bÒqš—²ÓÃxH†W³ée¦-é¨LótT¦Œıd½úgTôG,>A!Í 6ë“QŸÚeöÌYÓüLƒ×Ñh¹Óàc÷è°Ô (NÕ”¾èÛÓ@öEÍ­ *õƒ…ãaض‡÷ç[¬šÜ)<ÉqÍ·X³dPûaø8:BŒMÈ™däURå§–ÌÈñ)2’—Í-n†] h c9.<¾…­$l¢Ñæo’¹Ÿşø.-Ä-¢ß…]qi¾ïªœø® ø&ßU4ñ]è[|W܉ïÊpo]7Ä„İTA6˜°_ìïõDÒYÕáñ×Åæ¾™Hº$w‚c"dÈÁ¯d’¦«ì0f’Ê_ìğÛ¬“´0mJ*gëϱÂ1ßװв±ßi+*O¶b|ÛVTlÅôM[q?îÉVÌqÇ®] »Í·Òå;CW!k [¼€£säV ²f_g­¡-ˆ¿Ì‘¯Qãœ.j jXi«BzÛJAˆ\eÂÚ@4«üå&—lZe㪀:GLM>ß3Ã¥¸¤;@ß}¹Ps¤Ïj\xÌÀa|Áu?îÄoe¸·ù­  ‰ŞÊ@ߢ·*À&v+ƒ-æWRˆÉ­¤= ^& ‰?1hôKÈx|NÑ3èÎ/°{Æ6ÿ†ÉÆ p3ûã6޽r‘í‡Ên<´‘ㆺíp<ÓG.‘ÿ®Ùv[4Äì‘i÷ úC¼:¿yú!6;u³Zõ‡tùÒF~_Lü>Õ7¾kÿ˜.èãã$³ÏÄùˆäi*`ÍH¥Uì9s)ğI¾ Ğ ?ìağà­pÍûÏsÌhÁó:6›X Òª“<¡?ŒÂr7õ‰KzŒ~ëŸN£B.‰ãÃ߉㣺§Ôcz ¿$gCrO~1ª’œtJF—_zêÇÇÒèÛ‰S–-ùr)`ebq×ğ¼êöıØ~¢Ë©PM›¿Oc—>Èõ$ÏVŸ»¯/›~Ù6„ ¼H5é+a£ş´ 5ÄwCE’þ¸æQ ¬MgxXÎN¡ú|ÆeíìŒËÆ‹³6Å6ÁÙèæñw—¶lŒ ÖmbÁ;Œ”Ó°HıIçpÑXbÛ(³İK|qÜíºnd/‡?Äébcúÿ’Û\íDÀ{¦Ãuæ*ÿòş ŸÅ. ş¸d‰æ£Î‰­íégàgÓÏ©†6è¸} øö1-¾@¹¥¶3™À^ç2ïÑ\̺ixŞt%›1|9mŒbÁxşu«º¯íö…Pfeú‡(èâdÚØıÔ©şûMlµé÷‡Ÿp$zfV W"»‰x iT…ÎCMR§ıôÿDP1?‹8ùD|±ƱۧØNâç…Ʊ€8ÿ«F;¾vH@œƒHL( ÷Á9óîÔf¹ºÖ{u¦CkãÀì×SL éR[¶™yğâ, °‘Ƈæ#Z…!¾#A¤Í¢[jXõ¹°—íãòPhàÀ¡·Ï]¬|"m†Ú Èo†,çBXØ·—q8z‰ŠI)•ñI¤ bÓíñ +IÌ”íAJZf'Ïu%„jÒ#ı <ÍÜÂE—»ámU7x²4éhfxñ¢ô~ºCŸÉ/D“¸g§Ş ï´ííê2w“fáñ½Ä;=ı+o¦ß66ÛÃüzğ—h²aõ¿`¡W±Í Ôõ®ŸşÃ.Æôõ.şÎ²4~N‹Ê–¿=m-›ö0Mô”IN{ƒåÀè쨤ãss¹*0ˆiAnó>é á³VÿòÁÄ endstream endobj 1502 0 obj << /Length 1462 /Filter /FlateDecode >> stream xÚÍWKÛ6¾ûW¨7‰>ôlÑC 4Ez(PÔ·$0‰^+ÕÕ¨ìAÿ{g8”mÙÚ A¶@‚†ÃáÌœÇGÜ<øuÅùÿ¼]½x)³ gy"“`»D$™TiÄ)üã`[¯Ã!Êv½Ùïìúíö7X¸‚åñÅdmÚ;{ØÉ7<æ8.t]ƒô&–qˆôs"Ïzܰ® +Ä’ÖO)8‹’ùDݵw´¼¢ßôã?,©¹?Tµ!ôí»ÉÁväğ…ƒ“GÓwvBx½É{âÊ?P1sÌGÙ?jkÑïgÏ*âo–lüóøToìØ·gËc;è½Ù™Öš~‡g·ÓÃn_=´csãQuvg³pòÎê‹——ÑrrAq&REr¯À¼ÊdhÕ@TÕkÓ˜v-³Ğj[u-XTy] ïàÅÀG7KÃÁš#QEo´5^™ÆŸ [sOãº[odëuM<2Ó›¶0KgÛ½ƒí&áûµ .*à¾"‡*M;œ%D”1ÎĞ1;ʬ~Ù®ş^ àò@"O˜à"ˆò˜¥`¥hV¯ßò „I0ÎT÷N´ *ªş\ı±”~yi—;Uñl=·F¥@‰ô)ŒJ‘±$OæFåímçLñl: {ĞşÜğ–#ÁC]Ø‚é#q»v¢ZcJS½ïz¶3Í>LzN×ï"U‚›óZ!ÁÖ›\ˆğ'´šåøëÍ0ÖÖræ#Ùûn¹-(¨q %¸BÂÅP†¥jÒæãgRãÜÂ|Àx5ıÇ¥À2ç uyv{ú»Í"9şGJ†Ûï¶̓™mœ×ıi1§Q9öV™~o½š–ìG¿÷Ko§¨‚»b§‰”%QFÛ5¤W‡‰Áé‚>g¶«JdA=ïÚalœm”l×ë;CƒcßİnºÍR:F¡õÚœŸHP¿ }xHóIWA‘rÇ2àêÒÛC7àNS5?EŸ+ #Êù8|o ;1RQ à<ûÁE2ŠÚèv z<ÒßëFë£|ÁËKה𹦏ÖûZnxY Uä"ÿ{W®{øuY¨ÈßRÿ¾ÖqÛ+»ãGèT`徤iş¿Ğà+qÁÕ¾­i3'ëå-ı7(ñè‘àŠ}oÌ£Š~|) I¾i"Iî÷Îb‡QéÔ©TŞWP1F;± qѶgu @¨„ÅIöY ³ˆ%‰ $— ›U3ÎR–9E€Â©PCBÜšTÚq”?…I%$‹²¹Q/ Và“$}«ğÒˆx<³ ñy{½’3=á­eo{Ìt­.v$DC’^ˆƒÑ‰(×vğïˆòm©{×ïÆÚK¾såÛKa2y¾¦zãVTØÍˆY_é¥Lw=Q÷!>E๟h?-Èš-õì­6RÊK¥ÄÒ–¦§)jJ(sèjOÒæ[llã ßMszoo–N Œô¾ïš…¼IÆÒô³i‰„eIˆfüUÑapåTE Š‚”`Ä­İX2.Ô“Øc&b1·»€c€íÓY°YŸ~ñRD—ÅJ©ÌÕPH`AKŞp‘^­š#ï<9©wÈQq@'pq²xâËòKz¹ ÛÎ’Ät©ÈÔç@ $N¾ÚÇ.«?AIš#  øÈ«k—úGÕ¾¢¶²%‰ ✠2°Êj8j;½‘ãßsİÑá´Èe â@§àAãSÒÍ D"®Ë øıXT¹¯úÈö M :½ëuÓ˜~ÉÙà»Ü¡ÅÙí«2NgÈeívâ=(AFqÎ"üé½QÒtÕUé'è˜ãşGàŒü¡»PµˆyGˆxÍ é~¡‹blœGµ¶]Vøş)ÍtÎQ`붤5µ+ˆHY¯NÓ°1M7aQúkÔĞsAúÃ3ƒe™9‘Ϥ )ÿ®ô´r endstream endobj 1507 0 obj << /Length 3833 /Filter /FlateDecode >> stream xÚÅ\K“ë8Şß_‘ešºÖ[fS@+j.+`ᛸ» y4q2ÍğëùœX¹»gZ‹®È²¤OÒyÉ]-Õâ÷Ÿª›ßß|ùôËßI³¨Eí”[|y\Ho…“rá¬JÛÅ—Íâ¯Ë¿UÒ?üıË/ı~ù»0êC%úØö·ÿ>µÇ}³}Xim—ëÃÃJ…å¦åÇ]ó üòG~x>l7\jøgË×ÜÙ-íc{l÷ëÔùtµvËms|Jo¾_? ßs»kùÕáëÃÊÚå?ÚõI<¬Œ­–¿~Ĭh ˜æJJQÛ´´Ó3õqvÙ^çíL6o¼ìz®Şö©æ•Çvû'®8ì¹Éé™Ûñ,>£Æëewâ6/qğöøx8îRãş°K#7›M÷ —«ÉÙv‡4ÅSܽœO UqÅWƒ¶\qlOç#†Ú§IÖ¼…ôûœš`¯·íQĞDÕòËP á—뇕\2\¸ƒêÚËh÷vT9H5Ş ~÷rl Vh÷´§kS׉öÇÃ_}Skã’èù©9~mäú€å¬Oí†Ï{Â8uÛëğQ^é¼_§=ÅÓe {"¡2Kšv iÇ×İ#ÿò~¢M<¶èùwàßíaÿND¹Zvi”sŸzƒt7ãÛœOy×tûMÆTËM P±¦½ÂcމAH œ[şáÄ-ã¤ĞpǬ‚šş¥Y·«‚îÖ]"JjûÈmÓèDºÃÓ±Ùí¦åéñضı -2¹Æ3mhK3| ƒ”; ÁÂóóğbÏ•—¡r)Ñ* ' @‚ßNÜyß?PÕ M\àSó¿ĞGk4‹úÉ,_»í–«xP"cì¹ÌdC»»SËuIQ:u»VÜhÏLå®X®d-ÜÏѸÛHF‹… °@ä¸7xî»Ó9rBÏϯ×>uğ|Ѻıí˜Ç¶‰¢¥-é«m»ı‘_ÜèÄ£Ió*»|iúºR™”ı6ØÌgÚkz¸’’_¥¶ éíW’↸fÓSµIY Sçóeìæ ’nw®Zş! 5ò©×Mß~N4Šü F}¸Id½rÖÍ›‡g½ôáÒ¹®ì¹.Jé ÚñŒ%E2 jğË'Ó !†%ÚAŒ “µ0WîZ(¢©1ØÒ¨T©øúÜm‡M2x¨îÏ_‡Uo{~ÍZš^äÔğ®FjÜ7J8q Y­îi¿ºnºªkÒ´/°”MÔUµæİmhg©ÑĞ¥ÙB¾£\ÇêhëĞÙ–ëşÙ·¯üîo•­°~%MrŠM¢JwË *)jv™xTK·\oÛÈÒ%â¢q„t¹Pņ͉K,^4ÌE¼ğ°‰V‡÷:k>Şõ_Íq VP³xጾË,ê–[ÔÀ-½ ±ío¿|ú×'‰Új!JjLXW‹ pëݧ¿ş½Zlğû&t¯±én¡…Ô¥íâûOfG3SÒ‰:8 DÀPI$™7¨: /j¤p^ç¨ØZ f˜^1ªÊÁöRh£rlHT;Z+jYµv¢Ru .¢­ì?µjhu!ëğq„¾…Ÿ&³öhâ‹0— C¸I2§…ËYU+k#Œ©sMğ“äç‡C·™ã+] oAaìOeÃÇx̰ÅÖ‰`ë«6ÅÍX+ê¼°Şå¨oò•²Âk__+â–ü;Œe+a”-‚jµ°0©ê ?.‹ƒ·œ…nvà­yİl¬•.¢›u•Ä&lŠµĞ•-ªDNç óªY‰štylç„”2Ç~ìö]ÿ<¥œƒJ–ÀÕ• l”á¾­œk°s|l¡½Å¿#D&¡*Â^:x¡Œ›¤4!:÷©KLØ ª(0o.L’­}T¯ í4›3åçÖo Ìy(²~kj¡”‡”[h, öqPXdÌäò=(ÏÅJ %svZ @†\]£¼À?¢*+*-ãHÊÉYM9KRSÁ!ÇL|@°yiFúr zŸ«É»Á ÄÈhÕEåu(Hìào”8†Ì/S‡<Ç‹,ÌÖ§œw“r™†zíNÏ\êè,ÁiŸÒ䨹ä*&X몪Då "JáÔs; ×&ÔùçªJÕÕq$c..¤¹ã±@[ÕV•À…ºªÌpo¡ö¿?piH£˜rÚ:µ÷ãö‘pxòÈå–Ë©½Êi‡çŒvÔ›i‡'ËW°-Úİh¨”[”&’¢ÔñÁŒY~=Ÿ¸f}xé8LoÓÙÌé¹;¦¾7š5|¤2¤~nuˆN:$áô—ÆÍi™äóñ‡Sœ=g /¹Æñn‹¤\ü‚;«_(²¬X=,Šw‰FP‚­¥²Ë?µí g–¼]~Ç?›æÔp©?Ïk¨¶ŒçxHᓤÂ÷ë-‡Ã6_}€ù$ó5mˆP÷ı¡©5f2„¨5(™¦¥úˆe‘µ‚M¨ãPRê¹Ğ´ qä  ;jµËAgCSШ6YGDØö§Ñœ·¦*<şP«õ‡f{¾“¬t¾uU X™£ª™l¢×P—‰)åsä;°§î]TJLIsÃW)ü;ıøÒáP®[e3.ı r´?t±‚lÅï¿{3¥j¸—?=õNA·úÃt %j½CĞ?zô1軽ö ècì7½ê ècÔ¾û[“;‚^6 úõz¹HùÇQ/R>†Ñ/È•+‚l­p憸÷A¼uâ"jZßwĞ/DäiıBQB]ÿÕ i¿xFûÆù‰‚¯o*Uâü„†B\u¹tlÖ§ `ì©Tuà …"å1¾'¡£q%`µD‹`sØ)ĞÔÕA6h!2ä;RàŒpeè‹PPø[úæ’¬º®)Rİ… !Ç´bFÖ¢ª|PhLiìô‚ÇnÅ}ù¥#°ÈÏ—_ºGõ.ùÕJã‹È/†Rfޘ(İæBXX²cXRªS†Ó@•Û"¨Ğ¬Z†:ç"ƒ¼.¬)×-e|ÏE†芀ÂWuÈAçeJ•NfK€‡hØçàÓÂKyNYdŦrÂo—­øm‰…jõğ²àÿgX\Ú×_<¬Ô}Á5ÕB)Ä-õ.· ¡àW¾ÃèjŠƒ?,‘j İKÿöƂ󦰅< LÍ€gvÚÖ²2vÚ“§4F¾s¾ZY¨©"ô5ˆÍ-}OóGÊğè¼/NçÒæàÓÃR*¾… Eƒ^M¯ø]æfZHğÈÏ7÷|Ûéæ¾ 1À.aî)ì×>ÙİvJk`¹T@±ÇšÜï1è=#ÔˆlXDÜ »œÁÎ/ùF•@¦¨[™#ß³ös]Ô8È;ƒÎ[{„Suğ …w>Ÿ”]Œ*ªP„À†.)3½b’İTŒ¬v½Aw¥‚«ó<ıŒ\/¼ÊZ‚ºº!ɳ‚(ëJÔaşş*ô96¦(mŒ©ëôài¶"%`5[‘ V}›*Ÿ{MÄb/.Gv/Rx9>BBåõ‰Ÿ‡¯ØPl÷‡óÓ3—ãy~Ó7r4ÚóÛ¨x}>ômº™áÜÜ\,ä+ñ/ÃÇ =øs¬Øf Œ 9ƒ–.¼›|¦„§Ú‰‰ë |wpöª¢ÖPÌ ”§H᣷5~"Ç€xáã°ä„¥î=4Ìz%`-ü/¨¶ v’É©¾½§†¯#©°>ğW¡£OO™Aâ/ñ©Qc>EeâÓt»DÖu̪çj6ò°RôUÙ‰KüYÜ Ï+Œ ?UÍNİ"³1·7Ëmórkaå¿1"X‡’ò}BNÖ¿,äÅ#Î`§slÃh¥K ê ±ºS9ê$³3Ál }¼:Dšëgb"ş^ì[*c…ù«€à}[bat©Ğ„/ì®Ò09¯B` œ{û(6:*+‹İõá†}î&]¬Ò0o¦°UNÈwp]/ƒ{{“h¿°’1:Ş)…Bbîpù ’_ÆOiMº[GQ¹…±r£Úx?uÜìªŞèéj†ÅÃÊûôø ¬h$S|ä‰ÅomYGzşˆúfõï¹ _3º‰~§©>vS È™8y•o¤)dr¦0%\,tp|O)Ò­‘ ŠÀÆÏ™rÔ»LMާ+²Íä|z´Ïp'xº§×I¡ué~mb¤.İí>ì·éö™µKWx/·{÷ W]şÁ=¤ğÿ¥Á·Œ·’¦YÙŸÂğŒ èŠğ†R—`|*!%kşÄ©(Q™ƒŞã=h#]d©tı7FãcÔɰØÚ‹óÒC±´ı”âOWİLşæÆ1¯NzÒ‡áR,”MåQ˜­uú¬UÚ8‡IÃIúˆ¿!$&–ªÊaóş $=I endstream endobj 1511 0 obj << /Length 3289 /Filter /FlateDecode >> stream xÚÅ[K“ã¶¾ï¯PUÖ¤vh< 0·dc»â‹“ò¤r°]®È1–H…¤vvóëÓ$‚CIS¤r@Äô İhˆ­Vlõİ;æË?=¼ûú[»*²"ùêáqÅÏ,—«\›LH½z¨V?­ÿz'ìºkZ,ƺîî¥Të±ÃR®?PQ•cI/†±?nÆc_ôfS¶Tùxw#Ô¡W××½h|‡q[SåÇÍ0ëm½÷ÏÛº<üáî—‡ïO3ÿú[®&ó¾ç"+4‡Òd¬4ïŸ7³Ät±®/\çAY×÷›‡wÿ~Ç¡•­øŠKqäP,“J¬6ûw?ıÂV¼ü~M…]=»®û•̸´PÛ­~|÷7"lo3a¹ ‡t }ı¸ªU–'&èAw÷š± ˵*¹M‚mM¦˜‰±ëÄç%¬à*ã6É’ğ_ Ã@v—Ò:WI€‘ÖLÄÀâg¦Ù"¥PZY‘(Ï€7ån÷T²"ãy‘T‚¾É9{Ç÷$[Ÿº¦¢Úï'[™BfÔXPSÍö%—/d¾û>»¨î¢>Ôwz¯ƒ¾O& f‰]V‰< ÔVØLZó6•(€ìn$n­×ˆÏc_nÆy¦m X!ŠÌpã^V‰<‚¦6 lq_Q‰"ϬÑ)%dÜŦÈt6<ê“U(0Ü¿X' îᘠS³z òe¾>Ni ¥:îiİNĞ+jô8ö„ãêN“¡…C­£‡’ŠC_jº£ï9|F7ŞŞ?åXƒå°Ÿ>l¢%˜iG4YÍi²PúÙ@­¨|î›q¬[ßHjŞÑSIx”jWŸ:L_íKÂiÚú¾i«š¬E 5Èwv4‡JçÉÓ—cÓ>İ/MÜ-wa0ÅÀVtı¾‘yA[}çzoêŠbnl¬êaÓ7>ந­üH’‰bŒ¶Ÿvb|8Åèøüõß]¦3νKÕ×åè%ºƒ/AÄÿU{PŞ.ª³fDœgÏ×¥©¶éhÅeøºiiÙ¸çÓÁ'ΦAîl¦‡¬Í±_$r¦(ğ„‰è§ E|²OÔ‹:ôب'd`IÁÄúÔ–¥‚ØS£[—¡u¡,…¡4¥©Î)*בÏÔv#µ>»ã™şWÚÒõ=|±ó½·µ?\Ù8îëÊ™”DÜh:#¼‡;+×Îd€>VôGXQÆp·è;G É § 0+ßÕMğp:è×8iã& §oÖ¾õÃı“&ÚE­Dgt&ËÂ× å™wVñƒSSÆ¢œª{34ûÁéá46êã7u-QרOIÅ|aĞDfz»Æea¿ÊÚKV@õ$‚z÷è{¢Ì/°}di’~FÁÂ6OQ'QøŒfVŒéá`'Ü<˜ j£³9¨ °"}>c¹¹#y:$NåáıGå’QØ—m‹²@Òôİ¡oܨ؀äŠÑèØk Ğö…b¯“º~ğ©Ò¨d¯N8P»Éö]GËìÚi|qÈo?ZÄp§ªq§ A¸RH»»|/]U>íï4ФFQ;&Àou¬‘)_ r ..Ê<¸÷İ©¿ûåZûÍr>M‘ie'ó 1„²èmD1ØŸ//!râ¸ÈŒ9ÅUfº ^F´X)œŸé{^˜<,q:ÿ)”bYatøU¬ğó¶!O $ €íbÛw(XµÍ¦>ŒTïÚš:@¼ !ëüŞÛ›gÌÌ ‹Ól¯pfıRK‚]4/W[˜Ì2q…³8;~9\Z¬ÁÓ#ÿµSî“ä@)?èç3¾>QCOó…çàtº¯ƒqųoQN§öÃl#Šwæ«[Ͷ^ €ĞÒòâàè´D•Ùâ¤7'¦’'V(ïÁÌä‚Ú"×gQ}¥€C8ŸŸcܰ'HØŞ^"I©Î¡Ãï†eî,è,ÌŠÄÉBy¡‚;#Áα7V(Ò&ìÈ=à~ƒåèeëaçEÒb“šo;Ø EÁU‡±rò˜ñ‹îè[›–Jr|Ä)®ÀX¢‘lÃø9Úôs\b\Ì‚ïµà;9':8¨ĞŞ×58q›šQ+±t”s|*C_ÚvİxCh;ìÊókaè“‘.c%ñ±Ò0tYt*ç+率ğ÷ƒ÷g&ìª÷ôÊ8`…JÇÏh•¼Ô üµ²HÕÀF=¢ÅwûYØ\t•ı—K“àQéÈ…ìÀêbôè£FëcƿޅĞè§Küô©8IÏl,_ĘKA$f'¨o>C0Ü–;ïÊ’é©»YšPM¢ 9F*´ŞÁú†¶}O‹¦÷ÁÁ® β?¾$-˜­/wV­ÿ§ûüÕ¢ÅO‘B >ÄÍb HŸBŒ _“BLíSˆö¾üµ^: ²Î&@ྰB͉ì ÉK\ÄcI˜+`€á^É–•1Á“ “q]ÄÈËÙQXwâ”U2° *ŸIÖÕl‰”Yîäáíà°¥_¡I f,WI@5¦g¾/ÑHşÿÍ6­;ĺ¬éddöÌŞ¿IÓaâ sµæ†ÎA„d5O+pÂ1îa ²€ù™$0DCDWÔ\n³Nœ²ã×ù‚šãíÿR ‚×3 _×r^8O9¶"Ssö.k9ì¬íZP`jÆàñ¶º‚qcVÅ}Bï”f”Äûd›nz ƒ÷1…|•÷‘;xñr/Ø$ZÅ“¬Y€Ğj­fkşr¨¯x Pƒ÷1E}…÷‘9xSäŞÇÛQOŞGDåWy Àƒ÷qS“NŞGĞà}D+¾m—èØé·{×ÍøíÂäIÌ ÅL~Û,%€ fi ù*³”;˜¥x¹7ÌÒÛqOfé&™î¥& oÁ"eŒÏx{Å*å` Ù€¼‹"F¾d•d¦Læâ¸Üóë,XW­^ã2&¸‡Esı K° Vª$ ğÅòŠw]ûô .ÛÛ/‚Jv-Î)ÀæŞŠyëPò‰#qqË¥<ã @1•*ƒõÒ•SÅ@ÅM LˆpóBǘ׼ ¤Sæ2¾¤¶°å)ØŠnÉ ò†';p‚·è“𢘠ԢÊ Ü)x+µÈrP׋{méŠëL«"Á4·Yní+–®À×`,O ;Wj¶ôåœ{4§„::Nv—væIGjYÌOÊC^u¥Š| c%|ü¦[p/»˜(®·â¹ ²1¦À›w6F½h5P“7îNîâ?ŸpÊ%ŸS}ÄNÊ)ÛÒı§É½oÚŠî/¸ô]çrsĞgr›Ág[ñ¥ŒÃ¼z¢òóå5»_ƒù5+ÖiéİßÅe† âSO=¹k'PF­:î;¹ŒŸëݺ DØä-ÍÇó©ñÓê`| Éğ~)%öÜŒ˜rÚÏG¨I^ ZıäèaëÎ6?Q ÃĞôôŸºï0&ÂÚ m€Y·ÕRïÎ]$ÁÎeè0tT>vıxÇ×[¤›º='¸tıÊçÓ¥!ÚI{¾]> stream xÚÍXKÛ6¾ï¯rò×D)AQ ES ´Ù’À eÚ«F–¶’¼Éö×w†¤¼¢,oQTrÃùæÍ¡h´hô˽ğıñæêÅkE9ÉSF7»ˆ¥”¤©ŠÒD.’èf½_}  İš]Y›¸5EÓnãşáÎ\Ç OVımYïİğ¥¼ù5b”È”E1c$OF\ú“‰GG´ûl`Ùƒ4>ÇÍ‘ à&ğrâÚTšïc|=ö®ğ·‰H`•©0/tÕáíÏéªvñÏÙÿ°æâ§·'=lŸ®œØFè´›î«fc£Ü²ñQ>rgèª*ï±Ãòl.ëÊÊ‘›/ñ\Q¸«Ê¢ì«w«ïZc¶ÄÇ§Š˜$Àç»àDA_fA‹)Ë ’ü®ËÎI¯)ÌfGçæ»¶9 ;ÿµUfš­¶f¶°pF2ΆÔ‘Œ®vy jôÙ¢IÆ b‹¶éÜ64N'MpŞ‚XşdaÚ^c¿béÚ¶i;¨•R€á³-uoN§l‰ôÔ§êÔdï ãÖ¢V2#×qÆä£)d’®°“Âİ“Iܲ÷|»kÚCç)±2 im ‚uº}pëEetïܦ.¼]qk^0¨—{ëP0ôPóql;Uø¢üÊËs™9D–B.ªãöäL½ıóØõ§© g@ßf9|rS[­á뫵í‹Uºº¿FÕÚ2+¾zS™¸îG’\ŠP‘›¡[G§ÃS¡A8çw!8"¹²k ÔÚš‹îö€3½è @Y!Ûƒ»A{ X ¾Ó-ô ÇJûÍ =}Sl„=ëÉØ7—3R[ÿ@(H)QƒÎ?)jso¯ºvx€ GHĞ5Oî`à™cǦ °¥Ã©É‘ ÆáHѾAóÒE|‹ ’ß^jß8áù"ŞÅNPЉw‡LIÓğo=`eÜşµÏ2_?çÁüíŠË endstream endobj 1520 0 obj << /Length 3432 /Filter /FlateDecode >> stream xÚÍ\Íã¶¿Ï_á"°æŠ_"™[ dƒAƒ6ôæ µ53jli"É³Ùşõ}¤dQ¦µnÍö2¢(Š?¾ï÷dr²ÕÓ*[}w—ùë_îŞ¾Ó+CLÎòÕÃãŠf9ѹYåRÆåêa·úuıM}¿aL¬‹®+Û¾jüíkÕì‹ÓmW=ÕÅ¾Ü ‹ûß~xûÓ M¸€m'î„ÆAwß>ÜıqG¡7[ÑS”HÎì,a{¸ûõ·lµƒ‡?¬2Â^}°C+N(×ĞÚ¯~¾û»#&€cJ\ÑšgĞœ1Âıø¡9“Df3F8v­8aiU<Ö!2s˜ \ ’èï™^|©¶Å~ÿÑIğPu‡¯­6 ¦4‚¯6”#ı”ısÑßã£u Ôºªq–×{ ]ûjç:‹öéx(í?ü_™ÌšvöŠ„WîézxËvø÷=ôèué_h=ædÚf¤îñsÑ¹çş­²v·/(õ¹ß–£>#YYHOÙ¶¸*ÜD•ùEUVš(É–59ƒé9èçD2q“&g’dJÛ©`…ÓŸÃrJ´TI`¹ ÆÈ6¢Kti´j§8–‘NG‰Åı†‚TmÛ‰íµj›ÚŠP­{¾{tªÉ¾ú‡–®§ğïÿö'§—”çD‘£Ó¡¹Ól4¨ ëírUk[«Úğõ÷µ┦éŸİí¶èÊîMÌå9Q–qñÃssΖıÓaHUïÀ¶úÒ¯¥.]cïW…‹V4~-¨èÁPK×O¸FÛ63ƒ m9e_ÆF]| ç =ë­óâxWyy5–ÛíÙäÕh?‚®¿÷cÊÎC½·„”n±œ“Œêñ·_~ü1Ê.ÃFsz3 ºë‡çj‹Ä=Ÿ–îü’æ``*dC÷±ë˃Ә§cÙuÈÛÒ+dá.ÈK [?<ÇÖLYn eTé®+Êóes¦Æ‡a¡¯C Êâæ^uåT¿‡9íó²Ş:MØ9nçH»5蓃çè—‡w=x³İ®Bù¡ 1eBÏèºPP…7Ş3âv~´s÷ƒS‡m›Cé:^жwƒœ6N…°±mj·†˜_m`&ˆÿå¶H[˜EdÊCaëCµß»Ö¸6¼i‹ªCnˆ ëá%ÿğg§å¡tºjW~S> Š•‚Ü6Ǻˆ1# ‚uÄXfÕ:”HXòÉ%”ÎT±¨Q˜Ü1çb.|†~nªà0Ê»Ş ™‚7Ö|aˆ7vÿ(¢ÀÚÁÌb|┑Ö,sJ”á7%TB8”v*i„mËÇ(gÉDP.!gb!hDº0j4Q“ͼ/°ïj%ñb¤šälæX/¸0}ğ=K ¦‚Ȧ¥À±úZ)ĞH3e§ÊÁó;Óê"˜Š !;¦’8b^J:2€¥<,æ:èñØhkN6{Šb,7ÖíâuÌÎÅ—mjY|Ìğîyš ¬TôVBˆ#J%a%gK?ÍJ´: ¾L³uùç¶|é}X°-çDZíƒ6!˜m¼AädjV+¸@Çs’a|ìãZLÆÆ cÛæàZ¶²€ëO?»ë€Í­ËPv~^ô¢Å8wÔ!B®¨Æ@ĞõíÈşàȵ`SA\ˆ»™âË~VS’ë•äŠh}›ÇÓ ‘ÔØ©rí=^sìÏ1ÔÜSP‘ ¨œF\»€ À¡¦L ~Xf,Ä<”‡¦ıÁ•kS–Wr’ÏH½`¦Bg6¦@…™k°‰{ğL®¿ı³/[{l–¸._ï9Å£9ğ·ïÎ7¡dø1hæ+;½ÙŒ¹öm¾»g·'Ó€®éÁ’z;t>úıÁ¬°$àb‹ªŸ½^l}O3lL:±zO Q@ãå=v?Yòä@±œÑ)íܹ+ÔiÌ”råú†½ƒÅ¾ê‡3"нmê®ê†AN:ìpŸßÅMwÃä~“¡ÛÖ;Ù{Çñ§†ã¶?¶àèqÃîK[ª¾z-#º)¡ÎÆ=¸_/FN:n¡üwH¡G­Ë›»›òµ¬ûͱÚy*d@…$ì´ëÂϽÄ}Ïğg·ñQaÓ´›aßW ÌÔ28º`Ñ Ò‡qwØ_bk€&§ñë\(á9¿!µ@ë¶|*ÛŸ¢‹Ì¡§`'n†ç‡í‰Æ3†›d©á$Ïh(áoÎâÌ6«Z ½IaY¦À-j’ÑZğæBÊë´Öt“7jí(<°õZ´›Çf.¸şàfl1±[Ôb7S„’ƒâ³¹¬.Sˆ;NoÊhíA*pÀªbDqÜ4> [$… ¢3u5)xn†)s#)ç.梀ìK›ÿÍÄÚ‘ Dä&Ô9»×’ÖÓ®óˆä!É8^r•m# %Ò–`fuçÀ ¼(0ÈÒæĞ3×ĞÅó x-ìqèuG‚Ôğ‚;?àd¤uYLYıa>Û£ãŒÛÎÒŸLùPõÏşdŠ»øz¶‡ßç)`hÅÎMÑ> stream xÚ­ZK“㶾ϯБSµâo2·dËëJ©J<9Ù>p$ĵ$*$5ãı÷é@GN2ºˆx7Ğèşúe«İ*[ıøùï_>•ùªH +íêée%l–ZëVÖ¸T*³zÚ®~NÚjWw}Õ®7ÍiûZ¶ë—¦]W¿CË©<¬«×êÔ?şúô·Ï_£•r“šÈDKtkitRò׫ûúQ$͉[^Iʶ.ŸĞZqã[İïı¼Z­ıâk!ÒÂø]V¯2OªÓ£tIÿ¸V¶Hê-Vó¤¯É„®ÚôqmŒH¾>æ*iZ{À!<ùq-’®‡Ò Õ'ë`=oJ¹,y¹ İ}İœ˜/efS9²àT½ı!Ó —æR…›æˆ»z®OU·°şZe:Ír³ášÌúRoîG©±"Ğ*OÛÅ#¤Fëù%şràRcìŒl^:4o¾­úK{!QJ¡(¥“—¶êöÜ2^qNW ½ó+öS ú}Åã6M ëœAŒò¥/oºH Qq ˆ õ"X¥´W¡Ó¸°2Í´ßé.¬­D9ؼ#Æ+ëş¿c˜Ôi^äaŞó¡¡Moğ”¿uL´Ô7åဇÆò/™ÉğÚŠÉ<ÜšY.3`u6“ğ">8¬%¸õâÙ{à*3 ?цöÕÑ×eí×Á[r“[‚&:ƒKš3WÛjSÕ<ªã–’æJÖÀÙ-C÷©áûİ”ÕÀ>†åcàáŸqÆ÷…‹yZÈá&:㘇şı€ ­ÄJ&-„X@+ôjs|øù×lµ…N •*¸7z\©T(¼Ã꧇,ahQ¤™¡•4¬ÄZÙôÕ5Q‰úU÷ *¥Jr1Õ j ”-`SæîBÙ©Ò³ó¾#ÛÒ¦ÂÈp,dZü¿à7È54Ì4û®5öû²çRİñ¸€RÕ–ÛÉz°ÕP Yj&ş,Ï.ÙÕ$U§ PØ©]ª¸.,=¸œå„Mà±*õÀ©\ 7ШEcéÙ€ßSÃßİ¥lK6Š•Â<ã’o 8"ù2ÎdóT[ı ™L]˜öƘ#Û`½}…H…Õñ9ÉMÈöâÑ~ªÁôcâ{ŸØƒè‘S°ñЇ1Ğ@y_v¾·áï3íÓ<·Õ¹$é’h`š0ç´=øGÜÇ6pXGP5 îùàˆAA¡6úÛø®p쾜ú)ØÇ J.ÈæÒ¶ì› i<ÛÀ‘Œ‡óÌ­_‡Î‹}xüçÅŞó°ğ %&¤–Î×°!ízb³bäÉåN¦|ÜTtxò?°º8ı¥9€ôÀŞêÓ›ÎmÓ7=™€ó°h¯»™+P3™ª})7~ Û~ÆÄÛƒ“öü‰@4xΟ¿ÒM\1ØdaĞ™ÉVUĞYáf“"•ÂÒàë½6भM–-›' ÜȺ Ç÷#p-\Z€Óˆ+©BÜ4O \D%îATKpöŠ˜è ë¦DÜå°9܇Ëgt©¾ÍiG6è µà>Á;áB%Oüa )ѳ")C%Â*ƒ¤‚~@”MÏU45Â+?Ô•ÖE_ —®ZrÉş¥¹éË€†àÍ®´s©Êó0Pƒ´(§i)‘·¤E+ô²Ô]¨jôœELõ}qѹf9½eˆV ü /[6Š`²L-€_.2v ¹·²Xx°Ç8‡eä áprŠá;£\\Źy6yg|y´7»ÍÃáÜyPEzízɵŞ]£3. ¤v-–ڥι›b)!°q€xÚ¨T»ücŞ.€X&h)Ôï[ ¦‹ÌÇ=ˆ™¯ˆè ÌÉL~ÊEŠÂÎ(¿ãbÃqÇ?¸:%¸»y ö«İ4‚ÆNö; ô†cÉC€ùàü¼ÖÍ¥;|÷.5Ä…‘ó(~ôÀ!:`¯ ¾ìlAa;bí+#ì„‘œ§ݵHô%åjFÈ…*C®-r‘ĞsO‚›;‡>/ôkx -8msä’_LÏvÎnÕ9VeÌe¡‹É£}@J#Ïeב¯­7»ì»sp •eú¶µ|Ç Ó™§¤3=á$6Y ?ˆ‚(( •˜{;tïD6¹Ğ7Õ\)‘æd8¬‘zpÈÒBñRZ¨[J®ŒMºïBÕ©Q½a{20U¨š§¬3f[Ï(/k¹ÊR1 -¦2ñò‚¸ñuû\WKùU<ª`0¸ 1°âœKöÁ.«iFìpñşsğï¿ğ=©®ò}]5$ØAíÎsêŸ?>¬~¦àR¥"òŒ£—;ş?Õ§w´Xw p$Y¥Ó±Ç5W&3Ø:®n¹ZyŸ „‰gbüHwˆ“‰RÙGÅ›èÚA°88{ .šïÁŞÎ7i³¬0+U¨Ë•$7¸Ôè‰ÎUêruª9 ¿1Õ÷õÄ€]Bü”;,‹å÷œ4hdgjS‚oé¢Ì€tÉ·KG ˜7 ]4J"AÓ<…şî*?mO´=„9õñXm벯ÀXæ:ù„ÎF8ì¦ «hÑ<0²oÚ€[Ò$Xë.­/…„Ijÿå  C‚ó£0[&ökó¸ÚP½ë”̳0>MSİêèézrly^´¯£Ÿ[d‰WDz/¹ÔõíeÓÈõÊW{míÊ?ï4şVDÆçÈ—´Ü9+óÛZ RkAÄ”÷V»é H­3‚–2°Ô--+{š°„VELó†-+`jV܃²É€·›Q~OG!܃ծ2}ZSäŪgR1ì•IÌœÛO!?Ü\v¨™Ÿf‰ešQ¿ğ·9l)¡<_¤ã¶8õ†-d9°àSeÕiIÜ÷Ğê}§é}êEÑ­x¤DÀ<™§Êúyàíƒ}ó&¤I¾ğ‘9ÏåL”Î#•U· ¿œ3de¼‰Úƒ¶Õõ d”ç0ÆÍóò¬Uœ,Ä*9İX üË͘,ÄFÎc3wÛ€°¶\±WfwAÆ»‘ñĞâSÆŒÍéÓŸB†mó(•çÔ#°êSŸÊ§>¡¿­¨mï §ªÚÒ5B™1 KfÍ–yO¿ÂÂëìïXúçkøa™.¨PÌ_üi1‘¼ oá<§â¦ˆ%ÜqÃ|U$ÿê.„Ááî&œ±z™…û[¤TjÆkeÁN’>ø–<¤ßG·é¦Hşìû:L¡3Ÿi9Â則†UÒ3, *è?«ôk±3F--f0#&(z=ELğä1„d9ñ –“‰b9”£÷Nã‚@Ï(Èi!Épa¿t¾†é<*|á-°ÀêH¬À ’XeŨHÔH7ÍoÏ$ÛGêı½ªùQØKËÅ7aéȸŠQ ßÔ} ®r3‰5ÌaüìÁ‡½NY>Ó3@k¯gô&àÿô¡ôÒ ƒŒ§Ï¯uWó£! ÿ1˜G\UµÂYÂË8£¨:àQM`mAh¦^eAv–McAzn/ğ¶±cÌ`#;´Y$éXÀ +ã?4p™C ˆØ3:ÇÙ5¬CÛÌ· r2Õ+k“¸Úñ-¡ :–Qyvºsü_l·gm@Hÿ#Á/÷Û‰ßØò¥5—~6wz´hñ¡`îßÛ$eaÉÊuÜÌ84mÃÆ(„‰a<´I¾1Ä ~ åÄÜ0:ÄäjÓ×="2ރ.¤FA0ô} \ò endstream endobj 1529 0 obj << /Length 1830 /Filter /FlateDecode >> stream xÚµXK“Û6 ¾çW89ÉJ‘(QöÖNÓ¤‡öÏôĞô@K´­Y‰òè±›ı÷R/ËÛlgzØ âñÑşî¼ów¿¾ñÍ÷§Ã›÷Ò]æe1‹w‡Ó.ğc/³]Ì…|w(v9U³wYêä{ø÷€ÿd±w#?uE_)`-q.4y.»Æ}Cßk+;Ù>ja³ri¥(ÜNœ4!sj¡Êë>p†Jô¥İ¹9YnÃUˆ^©ëÛ!w÷~ƒ£¸AàeÜØÛ-rDZóÅç>‰Æ‰óYà"k3ï/  °SѓԵ5†cÈV%Ù®ğohBÁ£´Q)¿ö²U¢²d« &ææMUÉ7 Ãİ8+eH¯ºø™&ÖÅ8ÖšÃ02®A’v zÁ°àÁðƒ¨P_Ö¼xhÙû,Ù‘i £ eYD†¦^à{ ì w> UT¥:Ã6 ŸZÏ÷a€öÃm?ĞJE_¸…Ñ-hóèCǤ^˜f¤ï\~Ù k*3 J "ÁWùжpÚox!š¨Ù˜dоÓ-ÂÕKAw­]ªé®á‹ĹÑwjÚ•-$çVÔßãŒOäYͯ:¦ueaÂbç":è s®CUÊÅğ” ÔÖ6XlC—Œ´è:«¥èuZñ©ì/fYÑæ‹è¥¥SÛÔ }‰óóVt¢É¬óÈ9\¤Â󆉤eRáœN†±“k§é‚‘B7´]…¤Ø оûnº5Ü_E}­¤Ñ/HG¯sâZæy¶¯5d¾­eͦi¦+~É(|¦JFç¹9ff'ÜO”:²í@åP×9t8š0Z¯zpÇÊù §À¬Åñ³·e€²Ü;0U:»í T‰iq&âÌH-Då ǶêCnëF©$´."Xï=˜iù°·`u)»ğc{±_¨+·iå‘·Eº§RÁ>*ËwÖFW>JÕ»CY|§ıÕ'Šƒ¥sPXÉ'÷V†6Ãõªi†«[Öצ…$q¥*tåB†wõ3ɼÃ2hÿ´>×*d¡—Á¤°»Š'5©´^¼gü¸¡o¶švªdOr`ãu²x”¸wäQÎpûy£ŠGÑNÄZ> stream xÚ½œKsã¸Çïş:Ú©oÙS’ÚIÕŞR;9ín¹4m«V‡¢æQ©|÷tã!4EÒÃ9̈‚Iütãnˆ$_<.øâŸ7<~şııÍïŠEÉJ+íâıÃB8ì k“Ê,Şo¿İşü¹©êÃjw·”Zß®ğYÜnªğõ|ªNw¼ÿåÇw²]Q!™,@| ']à97?¿¿ùÏ€R¾ é4“Ry–ÖzóÛ|±?ş²àL•Åâ“?u¿PL¨v‹_oşZѤsLÙN³Ǧꡖ+Tqɸ.rh•ÆêXiÍŒ(HÈÚ1¨¦CşXš`‰lh fŠ‹!šc°Úóùôš§hȇպIE«x´:„O8EÜbÏ–X,¥0Ì8µX ÁJ“ÆÛ{ˆ+ %wà ÕáNºÛ&ŸY¯Ïu]mBÑö€gùÁ·Ğ 8د¶‡—jœ¯¦HÕìB=Ççğ³Ä«ë]ãUOw"4z‹Û^ _Uµ9Å+c Ï;o5ª¬[¡f)oa|ξ‹pìë¾t3´Š7«fêãÔ‹Gøòv;àëïÜpß_8n¶§XûçÕşyOù´mz&˜´`n’a«f™HKï §×¾P–L9—.¶`ÁÊjV2ïø{ßñB⯗ŸêmÓøÑ.ÔíÃù°n¶ÇCO»„P¬,.ÓóêÓá¥eÍS]­6¯[&„dV—éªú|8vı"Æ"FÖª‰)-³Êæ=ÙõjÔ² 5jާ·OÕ>~?m±:5ó>t§<^µ^í èni¤¹ÅãÂáK…áëúéŞOçûó/¡ø¿'8Ó°êe¶`Œõ™«Åñ¥5¾ÖÔ(­AßîwÇÃã½ÄÒv“ºmÀ?õQ|Ùײÿ½6,ƒY´Gk‘¦Šl’W,~=)|é)^ú€~¬5(0,^„ñ˶‰'e“¾×Õs]ât‰Î‹å«Ã&œOU<‚…¢§ËA[‚g…yNÕ¦à‚´à_¼´¸ -ş{ôåWÊâ R½~âÃé§g^µö#°ó _ˆ¼Wãñ—x2‹óĞ-„fJ[‡^Iætú‚ p-asûïÃiõ€-pæ"ô§ğÕ ìWëúxê7¨`…¡Ö¿íP¯ËĞü rÿÏuìxµ9ƒB¡§àA¤øãMuZ×Û ÌUü{Òiìlò,ÏCo‹?߇6¡%Û:V“†ïÔgã§U› ¤LŠ~ò ]x®· ŸQ+Û#å: ›RÄ{%?lªÏU’î:ékÔğzux¬rñ‡>îv¾«Ÿ¶‡Ç¨Õ—áëÕå4¦ÆÅ1…ƒË˜b!rñàeb­ı E>,Âϧã)õÊXEôgñ0@š9ŒaÖÕs“êX]ª/±²X?ˆRï’(uœ\¸Æ#â 5ş K£¯àŸı…²8ù‚İqé5¥Äaü/ñ£ —àèa³¡÷± …s‚}ñœsx~°ÄOJ8"4DîïuœÁLSëpÛšŸê%~ùé¢è8u«CU‡EM¡ú„ƒ$8\¾ ®ÖÇ=x-´eË×ï„n¯¬,1PwŒ ™?á:—d+]2\€È9¿’Å©’9éQŒÏÌâ´„(´„ªàSű<5êÍ ¨œ‚ë ¨Âåܸšôäqû@¾IV¢`Z˜¼~ZÕ=T…—iª†3¸Ì©2F=d[‚UH ¬TÑcœÑ-!Y¶% ´tÌñu m®¹4è½XXÃk¹ÍáŞõ@uÁJIb` 0n;ãÜøàq@(0¡fšw’À7iEïhŠ:¦qÿC0^Ìé—(¡_œBsï‘×SòÂ×<Ÿ)a0 ŒaÆlœG*tùh¨AB†Ÿ¡¯Ë¡b¥d>ÖYN˜c!ø¯úT‰cm’€ª¸UÍ¡W”P:Vˆ’‚©88z: „„DQXVYºe¯a!™FY˜…ôÕ *duWùq’•°ß2˜†T„$˜¨«fb0AÀMÁD›;LÌ_‚‰6x óö±wæì1$`S01f˜Fè‡N’aiqBääşy¤gpT Ö–6t8ĞÆo_QÀ!JeÇ»úã «™$†Xf¥îôxT.7Œ—zF<1Y. »D-„e¥›(ó©I+ZÔq©˜½(E »9?ìª>à°ş *¶lÛ¦©Ô®%·PLöŠD ¿Ê’©!ü6·ë°B`v')\JCrÇ­ÍĞıú`JRL´’™vB¶QBZi¿ËÎç ¿$ò€.M1Q¸Q 2î¸BÌ'‰ÈÀÛχó~@#¸Q$2î• ™ÈÀ#:1š„"£NS x”Š >¬Ğ(yß _›z îMHø”ÙlN`UœË ›Ğ´;‘A§ìNP°ãöDÆÛ àÆı‰Œ;²?A€õª Â(KcÚ¯E‘c‡öjAOJó*'˜êºÖµÍZ\IŒ«J ÚÚ1îÛ6)¤g³âŠa¥€a P(…ã¬,§Å|æE(ZÌI:A€N:ÑBÊ6ÉD »îÛO”`ëH,+Kà ‘!檄•cÊù\% s(NY_{§ªv b–ŠQ̥̽†BÜÊĸ¸‡¤„ŸBš fq˜ÏÔ\3—ñ„¸!¾ÕO*â2©4‰AU\™)j4zQ£6t’°“µÙ£zDÀMzÔæ®7C‚D‚ÔfNP¤ùà‹"e½–$j’¤Ì¯&i·›)[/ÒÛ¶$ÙzªP¨&m½PpÓÖK›{ªš¾ùªafhé˜.UíZÀÓ`fK ¨ß·39s@$´bN‘pµ…œ¾èv¶W#,nG9*DÆtº;¼åI$Œ\C©ÎáıZìhÆYƒ—B¼¥ÇÆ…ˆ?u‹)v I2uu¿õÙN‡Ç¯‚ŒïÕùú`m²,*X*¤&‘E¨J@UÓd‘€›d±Í–Eh’Å6´7vºÈâ|h’Å6s\ ¸I³ÎË"5Éb›:MçÃ/²Ø†Ë"4Éâô'Y$€GYïp’Ef’ŬÃoÅoıCa‚E(dQà r¢,p“,¶¹«usì)θ¶\Ô;[¯mî®:<†g»†/5 WşY¨Œ; ÎøÓ(È0Ò²ÓákÛÒàVeIÕ\²²kŞ‘ßé4³4¾¥•ó·ñfğ+¿Ói&Œ!â£Å¸äf=ğ;t[}»ßé8n¢X’ /¨J;eÃk>ô²áÕ†NÚğ"`§ ¯6{tË€›6¼ÚÜ«’ˆcm%WáXs1ÁÀéNb h¼•8ƒßJLA÷gäá{‰)¨ñfâÜ¡Â%\Ëğt鸅µ²Ì‘Ì`ß…(ú;<í‡Iˆä¤)¾Cz k<#I.±"ÉÅ´(j>5ÆPu,†šMMTFíMhñNZà Ò"G‰E Ó–À¬ ï½1³^“ ˆ$8QU^ítaEÉ8wóј+ ݱ와<Új$¬µ–ËşŞ¢J uÜp —f~+ ‡ŒMé 7RI$,¥¼ì¸ô„ÜÒW‰ï[ |CPQ¨"¦äÅÄ_"(¸IÛÜSSLJ¯èâ|îEÛܱܒ‚sËŒ;[RCn™‡sKhÊ-3ê¤Ü’sË >˜[R@cn™÷ø;ä–şÂ)ba È’" ¨JBUÓÄ‚€›Ä¢Í‹ùÜ‹X´¹W²®F@S Õ†N¤È)”j“GB)j ¦ÚÔiÁÔ|ø%œµğ%œ"€¦€ª¯ÇÓ.Ü:’ß#í2ŠiGòœ V Ÿ¨ܤmî¨jÌç^T#ã&_ФmèÕ 'Õh“GTƒ€šT£M¦óáÕhÇUƒšT£¯Ç­4 ã7æ(ŠzK[( İ6[ÚX•´Sîá$€¦-í :eK›‚·´3öØ–67nigÜÓ—ı‡ãîú–67miçc}¼~'3ŞÁ™÷õÚ’÷³)¸q?;ã=ˆ¯ÂÕ$ä’û÷däkoLÑL^- >w˜›vøm(ç$hçOÒ m-dœ$öÕø:)ձ 8£î×ï…ä‡õ/wKy=šÓğ?¬ÚÌ|:.œUI3šÿX$ ·0 ›sŸ6ÒR€ñ‰a‹ËwüáKß+¸ñ 4VR * ³ÂØ»M½ú› 3¾%œ‚ ìqÿ§Í½®RøÈ0"d|dX‹¯¨”ÄË Uá;ã:Ö–)|¥tô‡¹p‹ªޯS5+Iba ‹6 ÷éTş`ˆğÁB¸Y‰\Œ<…´Ù5ĞäÿΨ 3 endstream endobj 1540 0 obj << /Length 3863 /Filter /FlateDecode >> stream xÚ½\K“ã¶¾ï¯ĞQJY0ñrs¶¼®¸\Nâ]Ÿl¸gF±FœHœYOòçÓ €‚C‘ôªk3”(îşº¯bq»(ß½)z׿}xóõ;®y#ÌâÃÍ‚9#F[&¤^|Ø.~YşZp»úíÃ÷çç¾~'\ç¡ğ ~…÷õávµ–EQ,OʅǾığæ?o8(|Áf^G›û7¿üV,¶ğã÷‹‚IïŸBÑû…d\:ø´_¼ó¯ø².wç/ûx8•7Õk\!8ã¨B(@s9êÇçfSif%AUyø˜¡>U›¦>ຂy(Dë+¬Ìq÷Õá¶¹{+¹a…“¸’{"Ëqů….µJ*@.Hä+•‡>GŞ”ûıª-˜qÕJæúòm¾Z­õ%CR…fšF¹X½:?V7 B³B)Páw=ªi@¼Ç5A­Q1¤X¬9ù‚ÚÜ•ÇYÆ«¬'!(¨ ~˜ÃO׃ù©:AO -=u@'Ù‰¶e§ì Ş‚¸¡b¡ÊB2Cğ’„ÊIÄ*¥dJåb½ÀJZ1ïIÄ*5ØhU :JJ4ŞyC‚í%+¤š–­*€’D®ÄT\0Õ3ض½ØL³(‡ş zzªwÛYôú …"¡'¨JŠyñÓõ¨g~ê¢NjKP]ÔI†"Àmª‹{ªšŠº´¥¨.æ4Gà¶Õ )Ô–¤º¨óXмe©.ø8M]z¦©¡#O¥»Ã9úú]·‚µğ¹Z<å€èx¬á›ív×ìêìyµB,›:^u?<ÀÅ-«ãM}¼ßa¢J­„]>ãOvYá-¹Ü¬ Ø].¿Ÿàu„RËæ.ı‹Ö»>ØTÇXͱj‡j¿}ÄGŸã«÷,ÊÍó–/‡cca™)À–8ğ¸’Wõ5X‡Uw²vŞÕøâŸ r™¬˜>5Ì÷¦Ü¤[۪ܟb±O»æ.ŞŒ–ÜTñşSè'ìé\Mø¡Œ_uK2ñÆ'| Œlàä’Å_ğÎ^æ¤ö§‚¯áˆKjÆAÍ4¤èD^×D\2¾™¶‚9ğ—½ÿhH !½¶P"ƒlFœ#‡ˆEG‚í,S…ͱ/˜Ø+NÒfğL›d¸'ÈûÁ¹¼Æ…ÖF‘àb_›d¸w‡-ºÊ×ÀB %H€½cÅ,½’\AÍTr QfOºcCt€Ì- ²½rÊ/Ä™rœ‚DºиêIwbˆN2_0˜8¨9V‚B3RÂ@˜y:€X!°Âį0=CšÎ¾¥a¼øçgß1ƒ×ÑcÉ·E™³½¼+3ä"“ƒƒPHs \ˆ¿™‡À2ýÌ<ª'ÁÕ8¬nsÜn4LZKì=Ó\çÀCù·HÙʤÈ!Çpˆc=‰t%Jô¤{)‡Ç ¤@5P]wµeÆ?&Í=0ü}³Å©%HÌÇ“”œi¶×ãͶ‹;i¶¸­Ùvq§Í–¸5Û.ğî4Ñë+ LÉ%äú¢‡yÿP‡ÆëĞGiA‚ x}Ù> ™YåH!RuÎä# 91šrÄÕAf¨vÄŒµ1ËPÇc7…¤Db» ÂUÙïp謰$À ]gLœ#C ¹¶r¸ÅH_ L;Bv[¢˜}GÂ!…ìÁ´Iµ@º$VÀ#B/ßÖ‡•äË'üW›¸Zèä«ã¡ÜÇo›7b.·Uü¶Qãõ.İ8TŸâ‡›úXínë°ëÏ…£m,óí\éÍã¡İói5î•„jÛ-—»TS m˙ǥñ†ãÚép=A4²»½ {7>n¯Ç¼àÎ*Ùâœ÷.¦!³3íåAà®ÜïşÛfwÕé|JÍK÷ŸÚshÖ°¬0¹ŒñàäüÇŸøaÀ+@‡>3,ƒP7,~çz_ahë#·{Œp£^Éœåı Ë¿0„÷E<•ÇËV91 ÚÅÎ*S¸í»P¨ê&^Ÿ¡~<Æo/L;è½TRχZºÂ@‡òÎféé„ï9šØ9P8›{¤_‹BÎ%ßOCLƒÄe¦˜E…H…]Å4x؈ U!oĞûò÷¡A2)C¼LŠh uwQ- L_¸pÚ®¥€<ÃM¬òʆ„pgVåRàÂp…í WàÍ¡¤ —¢ŒŠPB:ä‰q‹†7=^vÆù~³J¼˜p¬ZĞ?ÿzª:V‡M…)µ|‡eµ‰ì¶jÊ]{*WHJ‚Mâµú£¼Ø'Û;UÉ⦠¥ñ1Ş;D¬Çj §nzœCdÎ¥.à"K ÿÿ È7 endstream endobj 1544 0 obj << /Length 1275 /Filter /FlateDecode >> stream xÚ­WßoÛ6~Ï_! “šáoRÀ0`Íš¢E°l­÷Ô…"ѱ:Yò$¹F°~GR²M[ɰE/1y:ŞÇ#¿;~ÁÑC„£wøä÷Íââòšğ(A‰¤2Z,#J$""‰¤Pˆ2-òès|‡1›}Y|د»¼ÖGkìˆİùşÑëzyM]ˆF”$ƒO˵ ÷vqñ×+HD%FR:`ÀÙúâóåğíC„Kt´sëˆ!Â4ŒÊèÓÅï>‡ŒJ†ø9”u––#¨ FBéI`€%2„íêsL†9Ò˜OɰB §!æCYßåÊ,t\Î>aIc–şæO.k2\<œÆœrgu5£:şnÿ˜¦óÆÔÿ”ÖGÇö¶ÜšÆT™ñÓú~6"şf²Î¢EsÂÂ<ìÇ>gŒÙ˜ŒñáDœ©® :!sPsOgˆ '«ÿ{¼_æñ£M®Ş6~¶ßŒ¿Ï„ŒÓ¦HïKã-EëÛíf㲯[“{“Ë~WuÙ[ÒŞw•6ƒÓ}QåEõà'wX`ƒ\’°©à\Ò ÂS ‡šÕMîÇİŒªøÑâªØ2e.ތĂ‘×öäÅ_” ‘¶ãõ. 0õlÁß|é‘~ÕKèÈ1ñ¥¡„òe`ºsPn Éø$ ” ¢XZ¬7uÓÁ½œ#CW’œM‚,%RPUòÀ3`íS2°€vã^‡c`z^õ@aǬNŠr•v¾Óm›ªõÅ™zÛqîkş´Ri À.8`¨Tñ÷3UJ0pd`äG³)ÓlŒºL!yxª>?Uh$‚$\Ë*„Ô.×Ôc¾»TA·SixEˆùÛÇÛÅÛ«ÅH•‚ ÀLLÌ€5¶`Âdonßü|sN!èêï¯kWt«‘»¢îz¾É@ÕéIîŠ%i¨£`ûOÈ ;“S€r ¥Î’tLTpà­¦“„s ã‚<%*¸¢(Q“ğƒ+x4È ?ÆUE‚ø±¨pB€jÛÚIØsΔÆQÇ9VA×ñ^ÇJÃQÁşMT„­Ê7ŸÿÕªPÔĞû4{^QƒH# œ§ÕÃZ¾¨gp‰£.”Ğ}ã_6ÆŒ5G "a T¯ôâõIu‹¡Àò p"Jâ>EDÊù±¼eBÅYiRG»íÆä*ğqϲÖÏw+SùQº͵iêy/l h{2[é!6 ;ϵhÎmC‚„HBÔA~R¥ÔLÒ<¡,‡ê6ÿ*7Ë¢î *â_o¿ŞŞüòõúú½Ÿ“‘ÔA 0¹—xß¶m׃İ{ {¨»qlMöUTY¹Í{ğÛleÖ†k´úi—P$=,-ª ߯Ÿ õNA½g×ÂgWÜœ@_p›Ìûé&¼4¯íÔx绢,ıhUxG§ƒ©[õK×iÖÔmÿµÊ½n±«;»¥G/è{çÜX¤ªèŠÚÉ0ÕK¿vĞ ı龬SÖ endstream endobj 1552 0 obj << /Length 1491 /Filter /FlateDecode >> stream xÚ•XKoã6¾çWøVˆµzPÕº‹vÑE¶{P$Ú&"[)%ñ¿ï g([wŸD‡óæ7CG³õ,š}¾‹øûqy÷á÷¤˜%Q˜çI6[®fq”‡2/g™LB!ålÙ̾Ÿ6Õ¾Wf¾H‹,(çß–Ò1²ˆñX4[ˆ2”"¦¿Öµ²–øû¾_ş~øã_:+geXæIÎ'³8”iJ'—çRÔóD£b 4ÊÖF?ÎI¨ù"c<glæ1Q·ŠÈBşÄ’ôEœUU+"9£ğ»an²ÎÑ>±şªmYÀW4¢ƒµC‡‹>ß½1oQ@ğ-œ/„ÈœU`¿s€İŒã°Ì2ró7•±ºÛYt( º~E°ílO+¢dd#Vîîı ç–û²éÈZfİ›5<ëF5hP’»~C›£@ Lq ’ª]sÉ^½İ·à ²B#€]¦¬P&ÁN½ĞL·Zıä¼môc œàİšù4Ë\ ıàÏÕªÊ*ë|ÁƒO²‹‡Óᲂ —w´ ãdšœ3ŸZm{.¡—æ"+Šsçò¿@ï{_§G%åâI© ]4c–BzÉ•~ªDD¾^E”ø„"ñ¬tq÷E£jÜ< ,ş> (rZ½Şéÿ¢XÔ‰ñŒidp…€ 9Ùº85ÖÇjéïɱб#éêáê)Û uèǦƒTıDyc$Ö?ˆİòµ}Ô 1ßÖœ#W€Èä xgp?t[=¶Ş6ݪg4J™ŠSj{3Ôûó¤€üÀïÁDI9[$qA%÷Õ¯ ¸…ˆƒÊ¾…=ÄÙ8Bqü«Î<İ“võªêû³®ŒV»†ÅL”/¼ Iº&êMÕWW-Ğ;°a{’Ñ ‘VİĞÓo„$œzônSVº}G° ô“ó€ûÚ¨ºï ·jÕº«:»½ó ²?^ï4ğ1 ½Îô·jî5áşU;¦)\\W“Ÿª,ô«zˆkÔµé†ı­^µV¯ûë oh+ãëy7Ér]Aƒ«z*¸©7ê·Ûvë«êGPˆìÖkÔC0^ÕºÕ€=Ş÷ÃÊ•1»ÎŞ¢Nt<»Ô[š[Køªº±á´0™hüı%ğs€Ëğ.aܸJ AÊ ½(‹|/娋`yŞ‹€Ô r§®ºğØÊt[Úx¨íÆ‹øÑôôf|ºÿ.³“uŞÒaŞ"Õ®¥ƒsÉ`„Ì5µ {­Á‰({Ûqsˆ‹áͶrz²ôsôÖ½Ş,Zn%-Ñj¸Ñ®—0»}¸z(Äíçè8ƒ?³c*/Ìb§@ ©Ğt;jÅ÷Š«(¬HÇryyºPR0*ʼng9Šo b'9XסCÀlYÁÜêî¨=Á æGÆit8Õ0Ÿu¸.Îm¯î(eæ2›:Ø»l1.c,â$-lçŠ4.¸£·ƒgé7UO+Ì ­`zäú/FQía‹{|MZ¦z=Ãîd—¯ª¡?5¯¡îÁê+1Söb®ÀÑvh0™äöFk‚ ==f° Ò<›0l) oúa”!œ“$¡9-uƒ©Èâ2ø‹ªrø€Š7¬`Wm]J`³{Á~x3(3Kîbàøm€ÿø˜jTƒ•ï0ÆSiğÜ :ÎCNåoº.m8>*árBÁ%ü4LÓ0*y¦‚*Q1ÏziЈÜx&‹ät~”ñY±["âCÓ{©©0÷)¿Q¥§g*¬¬ªyf‚pá]m˜®õ|¬¨6ÊÏV Æ%c¢ŞZ¯ı;/0šÕá,·‰, ¿ jmª-&_–zx  —Á¶ãw”tœs/àF’‰PæbD…Ó‰òm| ˜Ë|Drá¼Í¥Iæù»º\M.!)œ‚~œÊ0IHiJÿEœ”®ß–wÿÂa, endstream endobj 1560 0 obj << /Length 2296 /Filter /FlateDecode >> stream xÚÍYK㸾ϯpCÔÀŠË—D Av‘;Ar`;È!ÉAíf»…¶%G’§§÷×§ŠE=¨–İÎöd³›ÅG=¿*–øf·á›?à¡ıÓí‡o?J³‚Y&7·‘s–çf“g†I•mnï7ÿH &˜¸I…Yò©mnR%’­ë:è˜,Ù¶®ì«¦¦§²¾§NïÚCUÓ›İşu<ôÛBo Vä2÷²¢P›TX¦lAÇı“ ³X"íl ö¼“3şĞ´OĞ \´Ø^åLM“C3d6'@³BëaƱ½ÉDÒàßÿ€Ë´2Γ¦ ËçÄä e†å¿}¸Äk*¤dšèx‰¿ƒİäœBgçú¬%æÃšşñT?­.3Æy6ÛÙ ©ÌNI…aJYzı¥=¢-3¹¶ğ–àÀ,¤C ¦vÏÔÙŞH“<ވ¤ÚßÓÈMIÚ`J~M^µ®?µuíİ| \/’ßù—9* õ5ìã•…s«z±øX¶®Æ zâ2©Ï-'°Í"5KA(6™€?¸á`èÕÖSÍVöÎ2fÌ(ÀkšO·Ìy4Öm¹ßw+ê—‚«VԩΰBè%Õ%5¤5èÌuô{pl'u3eHìA¦ "—±PI#<©Pc¦ºu«âÈ53²øoÄ!õÈè©#Ûã Çpd²G$r÷˜&Áb¦Ç“¾ KqÅgük àê]ğ±Â,x±)¥’ŸšZØ]åèy.=ö ÊàpægÂ<àû›È-˜û¨î/k¦È¬K4XÒÉ™âz8½Ñ´Ù;lÊú2@ò‚®‚pówKâk¢0 ¤ıâs‚||)_½k ÁA4¦ø?ËO‚üT!Ş`&ù¥ßUuïv®]£Îʬ}#r¾–”–†¿ĞlIÖñ]WÜ7ĞÍòsiƒì©×L¤§A‹?Æ(:³Üö§rOƒ««/ÚÕPꃱ‘2ÆÒOç\;Æ2Å´q= b—‘ÿ­zÄ…}·M=[`,¬¦=ñb‘☠u0Rkn²€QHeø" ?´Š} r€İxD‡_0§îKÕ§]_ö§µl ÓíYäøõàèùKÆû…¸òÒ#3§ùz!i¼XÖ»´«v58Ä Wp/³…øu5PyAšI_+O«ÁóÌ;s¤çl@9İâÕ$ òıÌ3;PDg±«ıĞWeÜ'Õ_@ àÂsİ´¸ ½¬‚pÂZáWN-ƒ;_– |®ö{:Šp™úUÎÇ­åŠåfaìtÔáZ{î2ŒDÔ—©:šÒõş\jOuWÿ€¡Ûg¼l”aÑ(”{z¾CØ{¡Jí§?ºzE^<&ıjyA4PZÄòÊäpÙ[»m(ˆ¿òâ­2¢ d¼ø€î«Cµ/4µ[•`$6–·ò¦ƒ§Woo¬¸–¤ “|zPvávÎÅ!¬ER˜‹VÍß¡Ü_¨_RQÌ…d¼X±¿s0-ÎÀz­Xš¡˜™!&)e?1\ı|gDŒ^÷Z*³heÆ8tVO¶`0ó¢4³bÊrhCoŞxÆT&@©ûh¯«Ğlj£‰ã8e‹&=N]İêd5ëc2ËcşıØÅno·G´¸ÛÏD yò…‚"9Q>Fv¨/E¶†Ëâ–¡C^xò#-q‡°ƒ¶Á ‡2ø³‚„³uå{SI áŞÍ&€ÌÁ`Q$àhÀSëOzÚóß'×õİ8¡jiŠG7?HŞ®¦rp‚SO÷t®#OZIİô”•{ò7ïBáJl»æ• P½r «¸ãÄ(U‹rŞÀA½Óò‚ !âêé-bÔîD|*¦şğÅm/æ: 6âúŸ\8å¢ÎgyÍÎwËCZ—蚘µ•¾´ U!ŒE™¦F­Â¢Ÿjƒ¥œ/K`š¢Ş[÷BFS4•ÔÕŸ«¶©®îWS:θ.®c¶ú™2À »Í®–„”À¼û¢àeğPíİ ßç ½w±EÌŸºÄ^ا æ*g_»«Ô¬s&Ïq©uíõ[Øyiæ ­Bág\òØPal%R!F„mO›Ãé0ê7hšSßá0ñæYòì“P?¡3ˆ‰Á@†üaå¡p´ºl½üìnØpLOGa’c iÎú§5PšQËP³€³Óœ3….YSïÆÆ™¤ğpH$›'"út¤–d ’5²3ʪzø¬Ȩ̊”‘IçÆ»PøÆê‡eÿˆ©š‹yœğ0RÀÚDä:#YràF_––§ûÚ[H—{ –Å|é©wÄ»•zı¹MŸtûj{Ú—-=Æ ØÜ  ĞèÒ Ù¡¦ €@¶¨jèVtİ€G*#b¯¶‹ıÓdá tºf¤!܃ؚm)–Gò_1QÈ$¦:ÊYÑ -¯Ğ£6sŸğ@æÉÃë¶»ê3 ÈÕôXêËáyæ8"ÎñEõ“1ÏcŒ]c4å> stream xÚ½Z[oݸ~ϯ8İ}XØÃğN ‹4ØÉ¢š,?ØöA¶e[ˆt éÄñ¿ï G¢.¦ídôŤæŒÈáp¾¹É|w³ã»ß^ğqüÛù‹—o¥Ùå,·Òîίw‚[æm¾³Æ1©Ìîüj÷Gö{wfDÖ⟛0-û¦8”gÿ=ÿÇË·~ñºuÌæ9¬Ş+š+bYo‘3mıÄó.t]¦WÓœ)±Zm¯´‚É™ôÙ}bi噑‘?ˆzCl‚ï,ËòAÅ”u»½`:×Ä\%ΜR»OÛêQ†‹³=ÈP&dІ)ã&!Ú~ß]ÕÜì‡[ø›ÔŸÙ‹îæt(Ãù†™w{™‡Cí…`¹1“Ò ïËD‘2ëËË¡j䆋å;±ëğvqò¯ß^ìş&‘&ÌÈAW«°„ôÎ1ïì$ΛæÓC‰¥`RD‰£R`“I)A¬‚huÕDh¯ûyμW_®-°N­ÒÚš6 Û·£×mw÷].´—–ãZéõ‡„„p ¦g;]­&5.2½zn•OE}J.#™Ï#2~xxüÕ*ìlïÏÎñ¤ZË€¤•×í©£Ù±kõ\–W§®ì‰X\]ÑôTuóûg"‹KDíºlø9q$©%3ÜLâN‚,Xq;àm¡ê4â¥¸ÍæĞ¥Ü‡d’ë/q Ï£;øìAEà‚Y”D@KIÜ—bÂn] ‡7ŒGÅ £æ!å·Ä .­”¥lQø°0±LøQAo>——û»j¸İuUôwñ’Ùh ^¬pèÃØšêâ4×&@´áîºèøDvÂE¢âC¿à oø¬ÀFbƒ‘¥œÈ>w̽¾ğwé ÷p½<…´&«IŞö#*­¼"â鈣Ϊ†ÄqÒ—Ew‰œ·ô|,†Û‘5årØ­šaV“m?¯&ä˜3f+ŞĞJÚ Ä$$M?úIÜb¤Ĺ6Tğ?Ü3AaGƒ‡3uwU_¦´ªá/üŸÅı ^îË”“6|yF”Né<++Ü€æ £†YÒ?»¯ŒfŠÙx›ã¦5šOF1>U]ÛLÀXŠÊ@Îs»6 z]è¬)ïhv}ÓzˆÎb…A?ÂøÇë‡C.`ü¬¨†»»­&‹ÂÇË¢÷~Fx_d â*Ä#$L“í™[tVÁÁnzݵ° _CF“ËS×E]!¡m’V’k–çñÂ~=“6#ç…>hH¸CÄ7Ûp;Äp d.aÿëtúà¤ş“æò î§²SSW|Ú}àhŞBL›…'ğĞ”¢Î6Ñ/Çx]5ç<&¥å O°zÓ4xЏÇéĞ☓ë$ƈ2øS·Û²¹LÅ¡ ä$ÑŸôşŸ¥æ0hÄd < Ñ ]±Æ!¡ßCŒQ`è=gܸ&ûPİ4EXŸcæ ɼ¢7 ËӃϛ&ZñŞTK„Ogü]W•C…‰’B>c?îC+(æª..ê2y-`ÉJ®nÌø*á£óJ?[sx·¨$ÚæşĞRhğË|B¼É (ˆ2\MI9ÀLl,‘μ\ÑÅÃ(¥ yA˜,] >¢GÛQ1c ”‚†şş€lHí5,ÈA)1µáyÖŸ– OF³ITÁ±Êè>Vu°uÅrı [*œšG-«c 1œår™¬j¥³_Aóx’û˜jær±‚áfö?Z œÏ(G*DòB…áqTÎÛ¦¾§ÙZ™H '+_Ş:’«ëŠıĞ,輂v?õ#…îç›d×:ğïè4;¼k³eá‰ã­šÜ‡²hÂ~øBŒ“Ãé1\x iA¬C– ÕÍ»`’ôCD<ÁוݸgBà1íW¿ğŒA3¬–¦GYÀŠÅMI$Ê_¾Üdï‚ãrQ×ÄÚL’,±tòf½@Od u“–ÒÙû?õ)¡©@);eï:;Ô Xæöôsª‡ u¬Gv”²§ß Š0¦Pêæ¦ß}ÿƈh|õá³UEıò-$² Œ@VháÌJ‹·ye«0[¸t>[Ü6ÌÌ%¶ı#Å©:Á»e¤["Ki=$ì¬IyPŤßì˜È¦` Ãrÿ½Ñ3ãõ arc¾A:İ«ÔãÏ* *æt¸(S «\-»zß®µ¯Ï¯O"(ÏÍw1W¯Óí4îÔZœn’DB#Ö2-ÜÿVë0 ±Ìr1†ok üØq_…µ­/àL¤A²ò• xäêÊáÔ5=­^Ğ0…´«pp ÍéHàêû±²­Š!ôœ€8•Ê[ ¸P>š.<-¤Ú•×z÷ èúudw¤Ç¥aÅÓ*Km(Ç·§Å_bòót"5 X<ÙİÑps“ôšV£–ìJ“y¯DÖ€}`÷loÀ›U'—¤ŞlÒŸ”Ç·]¸(¤]LYë( •šƒÿÚt7• vɨÀŠ*d”:©KûQÃa3øåbù¹l­Ï™›Él`ÕMÁ”Ø6ÇFâTè¥6áP4¼İô‚Ó}Y¾º«mª±Bf|.ù/[(çzRTÛ\…ÂÃQ« zŒõ‰›5sªtæF7ÎWå!\..á¼ÂĞz Z_‚6”Zºô]ªhœ1 ƒ Ç–>mR>îYS0N@À@üğ¨-gn÷¦!t¦Êƒl6ùÅÎ2©Õsş {]ÌÙ òC—<Å¢Ìå¢_³XÎñ⑾­šÛ–ˆl\‹½aœ{­”šR¤W̉_%¾hË„2[%&Ò`Íæ¯N?_ z"g`fnõOá2Åı3/ÓëÉûRéo ŠMCJMıo,Cï IºXLtg¢p&¦ôÕ‹Ü35ÿÀ#wïüÚ«SWà¾jÇÛaÑ 碦(d àk°)Ê™65E™Û¢¿¿ÿğ÷£«6±›‘ì¬XdÔX¨ë6´FcKdÂp?q[ ø•4ô_ÆŸÚë LA;+ë¾ÃNX°¨Í±a맯PbÅõæüÅÿ³¢mú endstream endobj 1569 0 obj << /Length 1345 /Filter /FlateDecode >> stream xÚµXKsÛ6¾ûWèHÍT´øHã¤NİéŒ=±ât¦é"A c`ĞüúÄ‚[. Oz%ƒ ì·»ß>Àål?[Î>Ÿ-ßø¾Ø_†élãoÖáz¶-gÁzí¯ãÕl'~š³m1ûËËvLÌÿŞş~~9B)‘Ès@f¾SJÉEEŞBe;BYUê¿ØˆÕ˜dS¢_®–׿ws¹ÿY v§%ê4%!?úh ¼ @±³Z–ŠÕV¼U&…¨®m>Ç{¢QAÆ#‘>â$|+­»l Ş÷e°¢ÒQd¯u5Ú»˜(ı€=åh¾¼FÌO¹ÔQı¡mlêÙK©±{RI¿{&‚9Õ­ª-Ä¢N™^-P&ú'-õ££»F;ksĹ«M¸ªl6I´71Å„ Öæâ·abMb¬mÄÄ{ı“,ØŸ ôº ÷½ƒ©Ì„Û/OóûˆaF& •ë„'k÷‡ãL$åfÊPáê¹Û /eÍ}ùxdX )á2 ÉTşkjÅ¡z…¡¬@Ì™@ÿ´ØŞNÆÕ±¯•s´°)—25°¥cì=`Zº0ìVróÕJ)\èÅÕ”=甈!’#W„Ê(ÂW$ûoò¹ªn9 lª[¤ĞXii¸*õı%éKwÓT8ï q×Ä“8Báÿ…ü‘ªÂ†#Wñ?ઘ`y±:©³´iºÎ‹Šií61tOzYÚ­ eÊ¿æk ™¾˜v–éC\‡jê¹CR{¬i¦d&N;^£Å1~oq\4Î}EÕ™‡ùP ‹)OZ©¢©­(­_õè×İ]7±º†0ãi—uŒ»ß3Úx®I—¸5÷µAN[ò¾SH|Ôx7?ÉÉFt“Tñreƒ”:f†Úç>§ìZn³D‰èù1Í©>%²Üäê`¥„„ä´TLFE6Ô[ZN:€†šÌ4®PcMıTb\„k? Áí?ôe1 ‚på]‹RX’Tï#f,¥©©¥½}{¾Y-—²VU.}ìF<µTa.¸ş)”X¼Ùx$«¬)Àı3õƒP²¸¹¾½úS‹ ”‰âü™w±U²¸CÚW§–1覕¹stÕŸŒ!ã8ÿH`שŸ¤±ôÙÒ#¸" –Éâ8ò£hè2}Ñx’Ù"î^WÜn¶O̤5œ7åœ8L©°©¾ºŞÎP Êé3¡şg¸õ}ëÃÅ—yy[W4¨‡™dHl w¦ödlßšYF3ÔÉ &h¸—İŞ]}zëêu ÷eeuP¹ ‡gme&àşÚ3îÒWú[¶·)—"Ûe+Ôoúú9 h¨ª+À器‡Aäâö$aj%Óùµ>YÚ’1“²Ã9ŞU£½FC]s¦@>ظ{{õùêzDUT½¹;'@@àüØÔu:¿ıñÉÕOyÓÚt~¼ù ™k *\ãÑ+T˜Ş¬| ™!‰O ÉSÉØà\b|¸ày/?Äñ·müó6W̪R }Mõ@Ã2ÃUËĞ‹Ä0'%&%ıYqóí‹«ÙåÂ…Õ¤Dj:öؕɉ%?Ø´}ä'Ã庛 ÿ¯ß%Æ~Ôç¼¹mÉ)tk‰¼MZËÑW}qâ&݆kwÿx¶’#Ş:’Z–~¤z_…¡_·gÿªKª endstream endobj 1574 0 obj << /Length 2045 /Filter /FlateDecode >> stream xÚÍYKä4¾ï¯hÄ Ú?“˜•@ ‰ ;ààîd¶£íNš¤{‡ù÷T¹œ‡3éÙçÃLìò£ÊŸëéæ›W¾ùù¿òışöÙW?É|#³ÆÈÍíİFğŒ™İd2gF©Ím¹ù3±L2u“ !Mò²jʺyu“ªÜ$}ıªq‡şæïÛ_ÇM¿úIèe6“™ßY«6©(XVhÚî/.òÅYÌ–ø „Ɇ›ôÔµ»ª÷Ü`…™­(Ó*–œº#’ÿíğ¬Iëò&5œ‰Ãs¦¹d…V3®‚&Íç¤"+˜TÆÇKs‘™¤fÊŒÎùη”–).†YçpU*9ï+lh8 Pdì /8»޵]Wõ')’v¸\Ö®È!4gpÒ§±y$—–ÌŠQ.öT%• tEpˆœËIWtЕ߫]U¿YÓ–˜@-ãØñ€†y©:éü7pÒª$Ê;Ø€âËR÷Õ1ô ¸"ñ ã);×Ğš­óÚíÙÕ m­’7µ äfïhäØv”Oá÷€àÿ\ªKÕ³›T‹"ùÑ‘HÀÍ gǶ¦iÔÜ»Æõu&B{G”cÛÔg`^RwÀ5êOË#øVDöm;ïrMÚ;\BëhìÁ·ÏabKÓF(‘ØU®$ò]ׇ+"Ô¼„ ™ü±¿‰×ë†æ„Éñeâ@t™+‡˜Ò[G@ğ3 m:Ü’Z ÊÒ+Nl‡$¶‘J:@™Î÷ k§6⮤MÜá0g«K6W2İû} ‡ÎQ]°ë¼¶¡©_ÀÔdz>º×U:¿à/d-“Š<\øÃBËÇn8<š'}¶êô˜Õ:f7Év ğïšñ¢ˆµëCÕg÷íŠp9øH „ÿ® `X!Å'a;:şöPáüá“XHÎOˆE:ú²4V€Hè,M‘×®n ”‚Èc>1Rä„1[@k²†'óôº°‰‰Mü½ñ*+‚Š8®ÉZXȤ²Ox_szZyò‚ş±†ttÛ*};$B Ƴ†iM·ÂUk&ù˜¢~~ç(MƸıïoëî4BJ°b’®«Î—®Án}ä“BjuOh#?#Dy»¯1J!-X&‘)[>K€Z7$rà©9­’Lç1VJ°ŒëUïİù³!ᔣî¿|ìg=7#S ô(¡£Ï ¼P½sg/7d,şì@ó4héÜc1„2L³&È5'Õ27,/Ä2‹®q3äƒ ¡Oè€2B=]ti.˜'0#dÍ+u (²öºñ\··ŞĞk¦»@ÌÈÄ@¸±Š”ƒCA:^çškx¼½àÍkŒ€¾`‚¼.Õ†¼©íQÅFSı{†§Ì9İ^Î饡 '†(Á#ËE ô)ğ Ø’åV}Ö4Ûä—»Õ˜ÉìS!óú®_øJ"Ÿ*‡"Tù¼ÒÈÉzà[OgLSÖŒœ˜P£W*ß~÷™aàcඇë#ò¯­æ&¹j×êb%ç¿'¨ N]íÍ ƒõb»ök³¤ªŒé:Ùªzôf”ş·ë¡'>sÆ3™D¯¨H:@3“-¬¼iC²ôåöu|Ác9Áı SÄqd!Üp1jCİôgP[F"Aò`-".™´!ŞÜî+¬6dÑ5çTBw{yè ÑÉùaæoˆĞ?›ã0ËêÎ]úª§¶ {T]Õu{ ä„‹ 2Îê‚}Q P¬±Ì2X_¢MöÔ¡¢É,¡E}õµL¹GŠ«ÏT<á´Ã×øóÚÚoÖ„%MK_ğU7p…UÀµª„fÌËq_ŞŒ^­åì%Ú=$_ùäRìàã³ø…Õ#éää<~±™f!´…2É/ QClÃfˆ>eÿ|-IÒœV¿sŠWd,ÏÆj`=¯‡ãå,[dÇwM¿ ¿Wc6Kõ¬¶?° ÂÖ˜å[5Wß1:ZIÈ#iÈjrª¢p¬m†ÙUÈFË•Wô { aA‡ êùkW3ìçniƒoªĞşW”¢¦.”Šfıxûì?Z(!: endstream endobj 1579 0 obj << /Length 1825 /Filter /FlateDecode >> stream xÚµYKsÛ6¾çW¨ÓC©™!$®™q<íôĞiœSÒ#A2'2©!)Çş÷İÀ(ZRlõ"á¹À.¾İı&‹í"YܾKüÿ‡»wï?²tAáB±ÅİfAUB”JJ¦„q¹¸[/¾DšğeL)“ÑßuµŒ9V¦i ÊÈ”K¨?uU>¸r»ü÷îÏ÷³…&Z1…R“EÌ(ÉuòîîMc`:çQ‚£zI#[QQºö¦­«öP›ÆIccq4á$• ÕJÛWMñïë 7¯ó6?Ş€N‰­üŒ¼\ÏI5SH=Ä¡²D¼0!%ZJk˜ ERA¡X´3!¡/±X{Ó_*Vy[T%ŠîOêıG*Æ[%ZóEL3Â3퀉édJ –x·ï¯‰L¶¦íV¬¡…:e‚…² Ğ ºi¿xueh5Íúûz)iTáÏ œğSª€I2"¥Äšğ-Úäµ)/P ΀°TŸÕJ×*GLÁk¨‚Ó¬ ¡¢Ú KWnïæ±¼G<°Ìã[е/Tü—0Ü]jPr £Û—&#ºí¤¢õ-Ö0vYÆiÆ¢OÆ‹kÌ*F=ĞCÇö0YĞE‡€…nß-¾XÕ„‘íѦª W{»1S[87¾Ñûw¸mlÉ%˜ÓÒ·`şĞ˜úel¤Œè!´œ¼—vá #™W@¸Ùl̪-Í-~á©!%€;õj¨WªÑ G0·­Ğş£mMäò„h!G‚é™ ÃI–ñ7A3w³Æ í=5¤Ÿ,½‚lëê°?áa‰º?[!­È3¾‘D_×ÎèBÁÈ2Ñÿ‡2@–¸N¯€ªN…Y—Îbº¹) ‘B](&HJå|úø8f Å«”™æÜT“„†.q󸴙粤¤I„dsŸ7®ë›í¨ Ûj YÙ¦Z(Wu±-Ê|çj.«ÂTæái+ªk×q‡MíjÅz2ϚŵkÌÃ~Ìe_·ÄH<"z\JÈí»ƒi\ı!ÇÎgWA5Òn$ÇïXRÑ·Cëš:ºåA/.0!wWyé”»g×é¬c\ĺşbã,)Á†À¾3úXk[¶¿‡¡ûºÈ[ÓÑÔv¾Ë·æ|şgµz}àk^*â._)š“ÅùÂŞ®‚ËËüÁ\‰²WM —­¢ÜÎ8 ÄğW1I8·½İ8‚–ı¦ãÅÃW ¯z\¥Ñ®hZ×€ä[ ¡9ì÷;óà¹jî‹ıÎshÔ¸ª›¦ºiiȉ±gŒG2§–ßep·q5K1ÉcÍÜ%™/¦y×`%Ø’gÃÂïZÂİN¨ğü…Ò/=½O2Ÿ¼™¹‚ÛkåãRÁæÀݾíLs‰oÁ}òµ¤bWUßÁLÙí£ıÒs””N0·÷óHTœƒ>Ê¡ a”D¾º%‘Ë$¸8³®T$òÕ¯›“NÎğ]ƒeΘq^! ı»†ƒêòˆ‰bNJxÂ/¦ n.Œ«7*4V&G÷ñüá2½ü­°Ù°Å)aR…aë¯s ƒ£áàwÎE«ïèñ2‰0“㿽bsÈy½=< n]¥ëq ®·wÓn$:-`»~Õ€YÁbV¬X,¬uTø„V[VÒì-¨ÊµE6ê -upÕY ãÕ‚i"}bá§7>²¿‘Ú .ìŞ ü©˜‹» Rë—øtçÁ2‘©C‚Ÿ4æx"¢äªÕff)@HëÀe_ùˆ*ë5-'ËÌŸ$tøÜ†c«9SIäğ‘“zbŒEÆ¢?æTx tò§Tñ++¿Ï|W›|ıìàÇ2¸%§“øeY¡äGJ§¾ÜİòN™[üfıH%ˆo ò]™ÔÂN)üÔnu;Ô<õš^BÓK·Øõüƾ§²ûñ Ù="ÿè E;ÿ¬™ÒÑñÌ…##rˆ]Ÿ@şƒ½B èq$h\ÓV ¬õ\+“Ì7KW¨NHÒáÍ4šÎ¹‹„8¢'oªCøĞ‰ÚE%8Ê¢Õ°ö¥¾éËøçà¥jŒ¤Ü1Ì„tI†€OÒ4!j —d–Y¥ip„'%*A¨Ğg!²0,ïó¢óµá €ƒæ¬§jµÏ@ı‹¿ êXé@‘É7“Ïã7¤³œ$CJ÷w¹á ‡ ‘›±/ /ß½;±µ_ ­>™µ¿:´˜­SZj³÷Ÿv9L6)¡ˆÏeñ䆼Y Ñ™ÚœYˆ‹KZ0Uˆæ»{3¥Ïkû¹È=&—ë.|Kƒ÷éîõÙéqéç&–@9IÃïMnÓGfS ɤ¼Ö‡& }xi‘?ë(;Ó$Ë27ˆr »¹{÷­^õ7 endstream endobj 1583 0 obj << /Length 1531 /Filter /FlateDecode >> stream xÚÕXMÛ6½çW¸§ÈÀŠá§Hš"𢽤@\ @ÛƒÖ֮ؒ!Éiòï;ü°V’)¯w-ÃíŦÈ!9|Î{$=Îğìç7xğÿãâÍ»„Ï4Ò Mf‹‡Á ©„Î!eb¶XÍşŒşÂDÎÿ^üÚö{÷‘ªN'[‚o,ğ¾Îª8_ı`:­èØ †°dã¯Ş¢;š@Š’ÎhÄÙ ÜD”´S~˜‡p¤9?XÜωJû³ÉÌ_Z Ô>Öa?&iq! ßaPˆáo‰ç±ÀøğEØÈ1.o I4’‰šø}^4ÙcVÜÔ )- Pa–#&FŸeÀğ®£!ÌÇ…`x â÷ıEƒ1ğî.õÄ€t\; ×ÜÄJ°z%U¹ßåspø$ùƒ\1hDù¥ùãC0$ Öú÷XY߬¹Ï"ݪP*Q ®oŒQ 𠦓™D#£Ğ In•N$FRÓ©òÉœg19#¡¨‰!9ŞÕ§™I"û¹äw—„êyÌ…èZ¹Âa™¾~Î©Š¾˜ŸÌÕ4ë,¯\±4Õÿ]•­òeÚdÃá—åv—Vy]w®â~C?Ûùk^<Ş÷aY½Mó½Y´/Œİ ‹iâÑþX6yYÔèTPÀ š]˜S[ºu…â¡ íæˆ u#Æíyvò€pHğ—"İf§±P %IË·e×Meö-†Bœ]Œ£“Áa°AD,ÖY¹€«²f_. ğ}€®dGuáWúª´oã|•Ù¨mr€–g>’ïMÕ7g±Ÿ“Î ‰\ŒØöÃpݳ#Z^Ѱ–çéñŠ× (Rñjúà —÷±œ\ Dlp…2ƒ•#‘ÕeĞ-xñÔC¥wvNÜ*(’,™äVa°r¤HËdZ$^çIhЍ|,Œƒ¥Æ±üv;(†ä".$|ÈÉğX—ùWy•-›²úò“ D}3dÎ;.”„ùd¨Ôël³ùïEÉ€vÕğÂ^¼;$ø!àÌ9ızŒ€f­øY–Ó¼š£ZYެ¶©Ñk¦BF©×tûÆ;;3šÇˆğ×¹H¢4ߤ÷@¶5­2gm™ù`ÿ¶v•&ƒ;5'Fs‹şç«;ǰöTß9&^—[KÅ®ñ)º¼Q«FíN_Cn²ğ¥Ì—F'ˆEnz1ëÌù¬ô„Û*WìÂCç¤çIXúo=ÏjO~uHGóSÔDcqy¬C …¨ a/=Óc;+FáÄä`ö¤GyG²ö ØU¢üjJ4ìcRT!™<ûâM']/–¢‰z…AbT‹ö%i½8äLo°DÂâ5ÏÜcˆ„©Ú|!7Ôb ,§ƒd›mﳪ}Š· ”ıáµ)5ATĞ3äA w O«"A„%aıÁ”èëSaõ‡túÃ~»?;ÚÂñ$@+@ŒKɇok/;$¤öÁóŠS%>…Ï×›¼n\Kùàj`sŸ¾`—‘GGºa.n°h<‹…”à&ÒHs*¢OŸa)ü4PئË9#Ñ:/2WaYÁ<íÙ'Š¥ÃåTl¤²½ê÷HJëhW•Ö³e¶ÚWöÉ*Û§(»ášuÚ¸’ÃÏ´ïw;·µå;ã(@Ş”®ù‰µ¾ù–µï¹4ææ¥ª¼«‡Ew“îC"ÁpØ@`õ¥4Ë&¬£ß>}şågU7Ğ!­|Ÿ•[¤]ØeãêóÂ=uº/ç\„¹²İG¬Ÿ= (ôÚ¹8ğû1¬&Xª¹W§föB´©öËÆÚN Hè6mìÊ:ÿï6ic´Ü8”šàô¶jÒàY#&ioàã‘(EÑ¡Ó71-n3Ák5p’YÕHâ¦àç+¸3èM&P&ò½ñº\e§\ïÜ$® 4D.Õáà{•m²´>é~_ŠOã>QÀUür÷¿@R…¤÷¿tr™ÉcWœÁjD%:fÁ;N˜èõøiñæ_µú}ş endstream endobj 1587 0 obj << /Length 2081 /Filter /FlateDecode >> stream xÚµYKã6¾Ï¯p‹ ÄñM!‡ÙÙ^ —‹rØÙƒÆ–ÇBÜ’aÉÛİùõ[Å¢(Q–İ=Ó‹%ñYõ±_ÑÙâë"[üëC¿Şøx'ì‚+&•‹ûİ‚›ŒcF[&¤^ÜoÿYæÌ¬Öœ ½¼«e»ZK«—E½¥—mu*7]sª ç¿÷¿}¼s‹œåF\/[¬gNpZé~_¶%L“ry<5«µpËM¹=Ÿü¢R-‹Sè­jz¶İé¼éü¿¶/εd¹æ°‰_üØ´ÕÓzçE¼ôrZ÷CQø™õr&­H–»\HƇ=YX@ä ‹ö ®ì&E/–Yí"ŠŒ?Ì Bв,æáãI—Óãi†Çiğ‘è õPı¹\Kj®êã¹£#àm—Í©k·|¬º=*‹ ÎÙÓ@XuKíÍÑŸQy*ºª©û^8_ÖUı•Zº}‰¢{i= $m]>utŠuñPÒ÷çŠSüË6ªä$¡ÍóãWãÓay.a ĞZÚásÆídJr ø&û£úœé¬9–õ:n¹&Ãêñ^"c™rıT/ÿ¥½Åø`/°>§A©Ø<úan3År¥ú İJs8>ø!`n`h€ÍÊ<ş›a™"òËœ”YƸŠô4ƒ‡Güõp|Aÿsğ˜õm@g™Óó€ |‡Ìİd/é˜ãö†Lgà±§™=•`ÆF)ÜİDPH)@¼Ñ¤6‡¦-_¡fÂæß ¡™BˆÎ`X¦ÓñûuOB?Lˆhİ}Ü«!¸ Á2‡ˆöHßCÔòŸ´*›K)’Cˆ²~šw´IÉ2¾jI5)-˸L¥‚ìq\aPŞV›¢+©¥Û½ÁvÍ׺ú ¬°*|H!B¶ğoޘ… €-qĞX|øœ5vŒÖêÔÚ'R¢?Dç©v´Zq8 ´$Á¾À¼ø¿P±ó YFDÃH1{ğòxğÿ¸á.ñ>«˜V:É;SO‘¦y³çI½şùóPµİ ÅŒ7;É”4ï–7¿!Q h!î³E˜¥Ì+ÈŠY§xÜï«6ğÏ€vä)ÍoUs=ç®Z!ÙêV@ªÓáéí~|b$ _k×/¾âË@Œ‚Í Ü}Õ;ö8ãò Ü2ãŒ9wÀûî«Ä(Œæ1e¬"0Ö?V¹û“H߈ö?¿Ææ€Ãæßir´é`uWíªm_o0ÑH:ÙÊHfÔ¥+¥1B¹³zjë±ÃÊLìŒælª; ,e—0vµ|DGˆ–0Ká§æ•]Ú•U”dPˆ`¡Ê——§ò¡YI1ØHѯ´6—¿¥BÀræp°&vì£g£XAa°Ô¡\7GTa®Xµœ)gŞ™÷y ¢»mÂ`#νµFx'`Æm×oçRçÒ§ıášlN’35M¿§J'œ₳³„¹=¨w$Ó$|F Ö±í9ÌzU<93H_2 È*ÆüŸ¦‚çî« f«=íò€»œÛ.á5½ø—{[,ïìÍÈ”ê ÃVbÅéëù¸lÕ±ÕZñÑÌnƲ<ãÃù_zWRyf,RÜxĞG°±®<=Tµ§uZC0ÆâDÙm8ÀM†`’Æ' ¡œ^nC­ÛI•UƒÈxïçæù’§è5eLs3Q4õŒI)§D~ESØÉp±së ÷®Ï¡oGO åÑCcCÏÁ¼ÜÁ¬ûŶtiWJÏÔŠbÂVë¦Ã“µ­‘?ÓGùüp1¹&\°1b _fì-؉ªøeêğMWYø¯²BÏnX83&2ój‚ÂÅEªêÍá¼½uä³àú‰ÒşÆÀC}ydPº Õ2EäáôXùl4G£FÄÑ(¯8v6ç.\⩱‰ÍDM‹×±ôùt>®ÛǪ۠‡‚MÍÙSyy¸ØĞ–*ZA(ÜsùDá``Êå(; 5á _Çá&ìVÃä c2¬¥ïÔ ¡..qZ·Ÿ-0´czH x6OU7£¿V—Ä0Öq³Œ48P4ûÆJ “Ê„-$ÁV@@Ó³¶»¾RUY0wÍŒ1v%iB9 Ôí¤)Çéü%ÇáÜ05äšö™ÂQñôŠ’qıVR2F¼oîŞ2Àõe^Gİ8TYÏß™Œ|ëͦ …–o¼ÙL;×È·çîz“ZêûA{ï"ÿ%[„˜ùѹ‹R¢šÎ'¶9½½Ì™xÈ—ş™T]PÀ¨é%—ߢ G"(69¨› ÈÂ’Şÿé¢û4 /UM—w[úŒ8{‘ËÙHFü3›øÏݬ;Œç9ÇøG× Öé\Ò[µ Ï.t¡6XÒh‡]†Ô«O™4/Ó𥠋…ú‘/G .ÖAD ¼(ñXØpbcƆ¶Ü4uèLÉäÜå+$jµ½»bú“tèt~‰îF’LY“:şî|ʇÆM‘È +ú ÛʧbÓ!Oþ vøôÚû†~WüèqÂwÄɯS!¯ˤ\ÛqÙsíé?u»æphpÜc,ê{jˆÿ +t<Tœø/‡…aÄpŒÏÏsôD:£šézq•P¦4/Ö@ì$‡,r¨k×&õÏûÿäËî endstream endobj 1591 0 obj << /Length 2034 /Filter /FlateDecode >> stream xÚµXKÛ6¾çW89Ù@Ä’(ô [¤(CöR´=(½VW–\IÎfÿ}g8¤^–³Î!'ñ%Îğã7/†›ÇM¸ùíMxåûááÍݽЛ”¥±ˆ7û —!Ó‘ØÄ‘fZ¤›‡bó×6oMÖ›İ?¿ßİχ1ã!‡­¦Ë…Û¿C®*×.÷îÛÓ·hvĞ[ÓQ·np\¥Û¬‚ Š5ßÊ®ÿeD!LL÷ PpÎÒ("ÑGÚ²‰RÊmÖ>¦ŞÁP#j[v4ÓšÿÎek ê=—ıæûƒ_Ñœú²©é°3hÜ™dó-¯Î]ùõux²tTbkÚ¶i±ÉA~UÑàø$[C6+;TÛ.%qÄ)hG³ºXÑ”'!\/îåB¿À¯›(kˆ_,¤ !$·qP¢L;ÒÜJÙvÖ_"NØKìnƲn‚¼©û¶©ª²~ úşåUPÚ=š­aR%~ÉiPpŒ‹½„`ñd+$@’ ÛdÄ1í±¬³Š óµÌ›9ø¥ş*°ïsŞñm‡-c½ ¤`©Z@l:È:Ùö ZƒÀGм9Úİ?şg€jÓ®aǹÄÎ@ÜQà{Oyw}§–¬'7İíwÕ·ç:¿Å+ŒäÎ Õğsq³¸ìt2ëßöÜ–½é¼ğ”<Ⱥ ÃWê <ìyDçøâÖ_ª&Â^SÍÃ)X;m¬ÖŞûol3d–;Iá´µÄÀ@˜=Qê>ݬ&ŠšºzݬH‹¦íIğ1C@^H¸ÓÂ;§8{U—x¢ üGT˜.oËS•™h¶PÈ㬶´öTŒ&dúYxYõ¬‡Àjµ gqÊiÃO(5èîkã{ú’İB£ÊºŞµÆ¯:yâ@gÔCÉ1ÄàÌ ƒ°šğíÇı "B(&ÅŒ´×n+ŠXÂç^tÈy‰×gŠ÷8ŒÁƒ-4ZŠ9à͹?X D½çhMnkÔ·á œ+ Ç ¹ MîwZWn¾eÇSe•¾H~.8à6!ã‘ôԋµy®^:^,Èpw6rawÜ&÷BG“€³X;li»’èe5M¡zµY$$ŞÀÉ“’¡·œ¸ˆ!è5è:A´ æ§:7³%jæw(“y ‘ŸL! W(ô Ìsqj”œÓ¼n‹îqñÉÿ\¸PEU-sÃëæúp0k,4ÅÀ^ şRÌb̯Wsa¬cïôİ@CÚ*¿tÀ\@Êg)&lîg¨d½sûu6åÚè©g‹GÉã+͸Jç—mmBh=Ú¦€d8 E†WzvÀD3©åà~ïš`_eİåñTÂÂdXˆ´éø,Óà*}ş”'·Â¯Æˆ:ÂgwØ$Sl´­H(˜Ä10{L®á%b&ÂZ°G0`ööR©D2…#hVVLi½à± ;Ày°Ê't8Æœ¨GÉ'Yºí‹ ÷-æøØš§ve îó‘fȤ ñ9ÇıæèúJ;A“<Ã-J+†Îı¨Šåaç‰è rYÿ‰$¤‚¶.ïX£&Xµ[OLêê­Ué‰Ê˜Íü¯·¼/®EÆR$¤B6N­«+këqpr¢(íg•‚uǬÎ –C \»æEÜèLeò¥¬;IÅ™VrÌ8#§jû§½×3X ‰‡Ø€ôiÍA 8Ø©—dÜù˜=íe쑼dğÆ86ñÆØ½¸÷înSÉÒ$™'{LŒT¨‡ÄÈvş=c"©ÂÁ¾`™›ÊèOïÑc€<«GˆFéu‡æ\ÔHBRL›—”jƱ¶ŞÆNL)Œ} ğJ°‡*Ñb–;Ur²Â¬$ÿş}ª¸ı¹óO<å~×>Ş}Z«´\†>òc³pwÏÕÔ³Á]KĞ\y8„z,~™ñö& ‘"6À{cY÷ôvíIŠ„hQAVˆOÅeÊ”ÒS>¯½ÿh8÷‡P´ö³A£“‘w8Ñ$Š¢‰ÙbÕu‹Zë=ôÊTdóïáú=~(I;åŞ£@rY¯‹b¥úfYJ°T/u­?le2z,åPº(Å|åIÇ–~ş%Ò,ÍÈ¿‘«¤O7/O‹²Õ´¥Àséõ$¨~nÛÉ3çü)ç§³·*ë§è%¿6¸Òñ…% C,VÈŠ¤z…«)æqzNÕÕ›) €gqr¡À%Á¦ÇÌiÌ_f{“NÆôÑ«?K(f^ÿˆ·Aş”«Á® ”NNÓ]ßÚGÏÃzr”°$s­Éû6İóQÅ=@úÇpQzS¨†£Ù¸ãåAñS¶ m ª„Ë”á,bÔxòöaßó¥"2ؾ%’¢ò!õoá¤K}à+éÜÖ0&¿ cW´ÇYä Ì,‰Õ4U%/«œ-m êqI®Ÿ\$úrá)f¯@e½°è.;®<ªw/]o?İ &ğnèe@-™’—ëÖ´_I±`Q-í|¢İl1¤Ø ò lTÓ\ÎóëÛÿfAÏW endstream endobj 1495 0 obj << /Type /ObjStm /N 100 /First 952 /Length 1614 /Filter /FlateDecode >> stream xÚÍYÉ7½ë+xL¡¸ÔB^àØ@‚ æ0 ñ ‰Ì8ŸW”ÇV[-µ¦ÕY.›]¬åÕÂ"›»à"Õèr¶u1‰ ªK‰ü³Ú„¸ªÈ¤…l•dƒà8² ÄqåÅI͘ÍNCŒ q ®ˆÍÄäª@@TW!•x‡ÜTŒÄøEˆ‰jsQL¯:ã„ùL*xÇœ+, TmM™ ~Œ_Ìk´)ûQ¶¥0,ndx¬j« fŠ€CŠk2“ ĞP“ƒK 8«Kͤd#2DlicΙ]0gа“F¥ Lµ!—¨Æìr`3+r4ğˆ]N ½\0jğQ†Ÿ~ö–ÄdQÂÈÇXŸ¹ˆ qY8Æ¥a\(³šª£Øìgø0†)Cs=£&‹ƒ# &ñ’šÏ%:â’fŒ˜ ÓÛŒA†$%•EFs’‘UóሂêÖƒ h-ØXğ›}Rà±b@€‚G5í¢±€LdX @jØ[n¦¨)ðÀ¼ Ğk2…”M”q,’L€k1¾%8‰P’/° A‰Õ Hḫ¯¤æGµQ1ƒáBÉÕæ€ 0-’CJ`_lÔlB‰4Ÿ£(|&HQc ß2"Ô¥Ø+D)”7ƒL›š Åœ†lsÀMc–ÙÉÉlşÌ!-ò÷µ›?¿º}§Ÿè|öèQ#x¾Z޺“¼Dü*²tMi¹y¿ ±+HõõtP`à0u½º<]ܺ37õì¹›¿Y|¼uŸ™¿ùë^\ü²˜ÍŸBĞby{ce¢ØúÙüõâfuw}¹¸Y—6÷ÓâıÕÅ“ÕGwfªr§5CĞÅ5VƒP¹~’°¶O7ìÓÀ>Èùn‚É×{ذí08Æ"À!m!ÀkaÃ0Òí+ø³Ö=àá œÊA{Lâ#L’ıNídŠ^# 9µãÇM4:1ZRGŒ=pÔñpÄ0G‡eЧߦHµøÂ}Y°#0şqÀx°˜Œ†Û$@ßà MšiŠB =”‡!0¼\®Àílİè˜>_‰m³ùéİ»ÛöüãÕò×ÙüÉêúıâº1çóó—ó§g±=˜>—°MjÍ–xô.…൵‚êÑEîqìÔÍX½Y9€üÍ V^­–^=k¸tà¯CşÙ$@ËâS)áÚñÕ.ÿL®©'\Sﬔ¦t–íqÉzï}UëÛÅ œG1ûš¤ßYwïîı…ÁÇ-¥¡Œêä¨>kúo3ªö8ItR[5%•!6 ĞpÌv"ó 4£Î´mtNãÎyÀè1ÃhyH¢Nİ_2õÒ\†Àfnæu§Ñ`&)W¬•G%ÅqÅT¾*¢†sùµ™£GVŒR|;h}*ï8¶z*ï]m¶+FªñJ8ğ9ªÓOîG=™DGdåCºôÖ ìãS‡ñyB÷yBz?(÷ƒz\æàŒ¼™9!ylÀ¤hÚ¢İX 9ÀæƒbëS½±zyu»ğ¯~>}ùvºœ¡}Q첌]Uñ½üIjÕ½QE²£HL8ÒÚM‹¯8eü-v«dɼÓW.®o¾?½¼ùğİïË»‹ß&ÔJĞE¤úE+% =L«*[U…ã@U鈠2Õ²‡"\îÛ§;eG*Î>éÙ¥¸Œ¯.¡§ûÀ€İ’»ô=ı¶…y‡ w èRÄêI÷QäTš¶; ¢TÜ\¿– .nJŞŠÇ'QI˜wáÔF;ãì¬ÈSÔ”Òsm_ø8†®í;½!Ø¥@溇€ª‰÷PoªüB°ö|(‡~X ïX[w|ø1ü`ì endstream endobj 1597 0 obj << /Length 2321 /Filter /FlateDecode >> stream xÚíZKs䶾ﯘܨ*K¼A_\NU´åœR)å”äÀr$Ú3ä„䬬Ÿn|c²¦Ê>ø"’`ı@wİ=J6Ï›dóåS²¸şõéÓçG*6)IS›§İ†*F”Ú(© ãró”oşı'¡úá¿O>ûüÈÌä¼ãğÂËäıRÄ»rWãW@,'ĸ±=õñAÒ(ë^b™$ÈHì‹øPãj^ø¯§¬@:™¨ /ꈦ41å”h¡61KH"„£}z)Úâ!æ)ºf¢WüSã‹ ÜÀã¶ÈOMÑ:*PI GR¯n9/›bÛÕMéèX”U¹{ƒÒïüN“–<ÄŠ±è§Ê­~µ\jT·Y‹›Ğ軀8Ähº2ÔZİ2¦”¤ÒŸÙe?µpâÂ2ÖVxÈÜ„"R˜YİÆm×”ÕsܽÀß5O¥àv-kO‡¢BY8Ê̹@BJ$]œÌ»İëTíËê—°{ÊÃ&›mI 1‚.İè¬Ø:!<Õs¿[ê¦8Ôߊ¸÷Ÿ·€ü)'øÜ]~ÊÑ ı°Uv(®š½Şçñ<¬!vâ ÊhC¤¢ë˜ñ€ f„&éÜuşŒFIBe¿a(¸4‘†^mÆS¢†½0Ö×»DR Ii­ít;Á‰fCú£THÌıöî¾Ø@• Õí¡j•2ª- ìYç_“H›çÊg©÷(å¨ÑÃqço6obzTÀæÓÒ‘İÉŞ•U^n³®ÈİãW$…åœ(®¯§Ày8„Ô2„%Czûg0gäšp1œÒD/íõÒ£^£6° ¸§0$á«X“Iq8Zày³TÑ(a±9$9Ê=àÌE‘lğˆå'+Ü8XÂ{ æ´`T:g°‡¤µ{{şP')Oo °»hİŞ(ø¹—hï‘7ëʺò4 ¡<[0 ­òÒÂõ¬´ŠCÒ7†&#fŒ<2ÆjQ1ÀÂvhİí½Â!­•¤GZx(+ÿy¿O›ïı“= o p¤ö­íŠz” R°èÇjP Œ‘@dª¹Q ’(un£«uønK+çã©ÃKğåÌŠë§j‹ ^²ê¹È/7ğ„ÿ1Ôζۢm˯ûâ‡ĞA¢—…ÙíØa,íK,±^ߨ÷ö-ƒ·m6©D¢×P3W6!ŒÙä/¡$ÓÃWdleªÁÊ(xu™P›¢±3'¨›‡@Bi¨€å$%X‹ÅŸ%}8A¯˜PZ^¶ ŸVöçm¼!F…dmß\ˆg¿ÅÔpÆæ®øãÒ³ƒ£º)ºSSÙÈM¢®9î®Ü…l¨5ê:ú@q%Ø´'I^_JYn÷I-O® ğŒCµ¸†[Ãoxh¨Xàûƒk¥pz`ã\—`!4È3d \ê^²Î­nÁ™íÒ ¶ıÄZ³0Ò”Uÿ•½/Û®yp >wyb¼j£¢Ÿvâ¶p„ÀÓïSWÅä[mCİò±1 šÎ"§uĞPlKÔ Èn# ¢Íh¢+î”Y»‹è.>YÃxŒ½fû=Şğ¨ö .ëÂÂJ.ûº7‡…f Ê¿¡§ne×ùlŒIú]Éç C'.Bŵˆ?ğ­ƒåû€ñ¤©G‹dy ’2º¬¸gv%‰¤{mÊ. ƒ€“·ïRüZlO¡}¸"вkû˜qp×6° %|ìúòLoÜY0—ËqÔ€] \¡Ów¤Ğ1¾N™ŒK‹¼ZB”ìêæ0Ô9W JÚ4U¿‹.Şãy†2 –ÃêÖ>ó¸d·Ã¥òô¢oZ±áSòƒ0Ù›â3HçìAAøèãgP’ B5û½¬(©„¹ƒ5uÓİæ;_ÚÃ!s¤àìεÔÂKø§á1ø²ööÙx:Š0vğ3?OÁÕ†ó?ç33Óê*6–€ã`r Må3w›/n“Ş1 İ",ÖMî!I8’Î¥yLšH±:ù¡‘Cwͯtm _AßÛI‡»¦Ñ´œ&“rƲìËx•3Ğͱq¼sËhQksv´¸Dv òà°W<j I4] òvõ~o[æW¬‡ wh߬†şL÷ ;,Ó¾ÃB 0È>”!(qñ.?2ÖCi’»ê h˪>§´k”/똾 ´Z6LôOèÒŸÂ%矸Úô…ÛÖº(¾´.Š7¶ÖY~:zK ØÁÒE›7d—eA‘ˆiÑáeİ5õÁñì…°ÅDëÖºÊK(Ʊu¶/‹¦:W'”µ8üÒ×>MVÚr[ä`3€6OÏ&ÆYÙÀ!—ğÀ‰"8QÏë(ËÎi„kµïå]y4ëå³u'%ä¶)]İ\¹c;ñщûT?„g,’ä¡¶MÃèó½]7b¼Ğüƒ:">3 7ĞÌruœqœß{1$Ø ~JA˜sox\îìäÀíé`Û1â@¿J£cS¸Ñ§[uÈ•¦3­íÀ8HÁy3•P‹ùï1`Ş–ëi}Ò‹ãZ.`Ü„ /œ²ZÌ'8ÆÃyt²­{8ÙğÇ; 9¼BöÈ›b6&‚ó`#4I4Ÿ )ƒ&Ï&Ò2ªÜ1ÆY;!0 –$IÍ[Î=ÉtàíRàÒò4´ßE¬‚X¨Y_µ àRl1˜ô™ì4$Õ>‘վϭ3J?ßm|zDkØIiîéê ïPaªÁT*1ëæÎOè0³¦‡ l›mâ/+¸{à 5Ãéÿ -`a•N~@ïÓ‹¯›¿=€.Ù¾Ì×%õR›éTtğc›¦(`JŒ1 åfFô·§Oÿn³Z endstream endobj 1601 0 obj << /Length 1484 /Filter /FlateDecode >> stream xÚİXKÛ6¾çW¸7¸â[ú@ ÔE{iì¡@ÓƒV–m"²´‘ä&Û_ßáC²dÓN«d½XôÎ|œ'“Åv‘,~~•\øşxûêfEÒ…BJ±¸İ,(MÉBğ¥D-n׋?£¦ØʬYşuû+l‹1FŠs7µÖM‘wuóšÌwY“å]ÑÄëâo¡5we¿»2¿Ñ›:Doöwu©ó¸ÔÕ»Éáߢ m­»]ᔉ1MP‚é"&qŒİü›SÖ7«1D#Š0µ‹³jí–L`Ä Q‰û5GQ¦œ(C2¡§¦XƔҨª;3`€ûûà»vä»%I£7şı·7¿ü Çá.oV˜xǘPD•„AŠ$Nİo,OvMä¶£^ · O6º,b]mêÑÁ>ŞCQ ç ›0ó[¸PŠ$­åØ-šˆDğ ÅW#1Cб~…®ºbÉq´u·zAddj O@DWõ:Hš"!^ S£‹1Wˆ'|j·;o|şš­ıÛ¶DĞtƒõ­{ 5¦xØ›ß;;Q4­Ûr¨ôûÃG°G% }]@ØëÊ3ÈÕ`kÊâª)Ãm):›§óúPu!È«¹ïcN)X͘[ıOĞ–)bT¾<Îl™!"Ù™-·ÖÎDĞîĞTfÌ£nç‰ëu+ê[`L¤õ›jGÊÜ_€'9ï1>ÎòÈâi©ÚŸñ[F]Ñ¢eÌ@#ïr“¥m0_U¥ûû"«tµİJç?pºé“…KÒv¡“¤ı‚nU¨úzYÁğĞBı¡×׉KHÿdZ@<ŒmSî_"ÛÆø÷8D^öRås‡ä¾6¸ô">"ÄĞQˆa}$ Qm‚‹ñˆ×nÂ^Ÿ$Ö,ϋ֧νɱÒçX惑O•½GÉ<™µ]ìå  H pfêM¹ÓûâZÅf3a رŞè<ët]…Dä ¿dXÜ‘b^XÚ.ëm _µ-‚¸ˆ|丈τˉw"S*èİ„«Á» Ow¢å5%õ©ßŒ?çÏZ·ÂÀÓ³ÊÖ¯‹C7Õ±wwm¶n†Ùln¶í²µÛ¥;ÏÈAìˆ{_û½Èk/îN‰Q Š¢à¦¥ÓI!8‹ VÚV)’[FÔ¾ö›Ä‚’ö ~Ç¡QÄ1\½o(ºÔ÷wVE ?Ú`è' ©+¶EÓÑû0¯L‰ÔA…}ã}cJÎ2Ë­ºÂ(kß}™ØhYÌ“$º7 MÛ‚ q•í=!tÉ`Ø£`W-–"’Òÿœš0|xdxp f¯º?…C œÃı ßÔq:(ú1àá¥Ïìàw¶²±?¥í²êzzHb’ÎÄ×! Ì£’¸tŸÎ^À9=~XA€Â'À2oRêIeÏ•RP ,f³˜ø±@%©*@¥(R˜ÎlWA7$Óæ'âjg~ËA‚ÁmmÄÄjì¾öÿÆöu0È!oøˆÓc,ÄÇ,à:J–øVóKa£“?Ž1 Ômgaì›àÒ­!ŒÈ“öhu&‘±ŠŒaÎÍÇÔÁM±6ETá(VW3èµ3ã¡n2!©0(9P«WœåÇ1Tº¤>–*9‚é¨İ.soÇo ”.'ed^ûÛÒ† •I”•¥غ¾÷şiÁçˆv:kÓºİ×l{›ÎÇ6¨©ËJù™¦q@S™îLQ{’ûŒ5ÇŠ2$%Ÿ*ºËúŒ^–Ó¾dèuŠšhì òSvÑÑÏ´a)bbğh+«“¦ñõ€+·%E ®@ËÉ…ãpà80Óõ÷u’B˜˜ç}İ\å·ÁL ¬›'.²çηJ"©Ä\iä› `4=úùËJ$Œ$ÂÛl€}÷?l’£X‚å¶ëISɖŸn_ı ÁïŒ endstream endobj 1605 0 obj << /Length 1563 /Filter /FlateDecode >> stream xÚµXKÛ6¾çW¸èE"†OQÚÚ-ÚC î©íAkk×Bl)Ğ£»ûï;CRozíu²‹’¥™ß<83tu¿¢«_ßPwı°yóî†Ç«„$V›»‹(‰"½Š”&\¨Õf·ú;¸ÉYx,wÙ?­ÿİüşîfüEÄH$Ašy³Êš¶*êuÈE4U›áJù{²wš5ƒü)íƒ#^ã`—¹oÓʽ™=¦Ûæğ4û¾N±X&ğ9Kˆ ºƒÓÿÁ‡R’H½ #‰Ró-pŞmV°«N÷Î Õ¢ÓöeÒè[+;¡KR¡¢îı}ê´¤öR··uÖàZå°wú¿~²ê˜×u^vøJ*&a”Ÿ€Å<°a²ßÇkDb-X}ïeUPId’LYÍkTF eq'öîYcEš°¤Çø7ûu(„° !ÁcîÛcV O5µı¯Êş[ÒàÙÎì¬wşw7LqkE8CgˆÁHºçNÏ>šìW#û+Úo"|ŸMvŸU>C¨Âo Q"!RÆ#=Έ“ ›œõ }çu p÷>VjtOòÂtL.§ö|11ğ}ÏĞybfç¤P"uòI9o àxkLå·Û›p’ŞãM‹7—«EDÌœi.4î¥6UZÔ‡h ‹Ünpí2¬¶ï›Ò¾ã€@6„Ü©õÌÎwUy\‡2a6Ğdƒí!…´µOÿ*òG»êtá+½.w›ÖŸk²›}Vgö‹#FeŠúdec·6ÙÍ1öY[g5½uÒ0!@†`Km±ËªÃS^ÜÛÌğç§i.è®+I a@I4·B?®Ç™× ,àøœÒàCŞX¡ˆÏcÓDHña›ïÌ>dğ}))õœLhȽ[šsu´H *{‡bğú°Ï »Ê³-¾ĞÂŞÜ®Ïì¬û,ş"X÷UÙ~±Ìø1µ—‰¬Üò¡€Xª²ÔÊJ•àé¿@GĞÖà,5ÅFáM"~2¬ş‡*Ç@â±!„ò ¸O¾kÍv˵ƒ€y·¬¬Yê,­¶co2å7€hl>3XéJ#Yz™î™ÀB×èíSã€u^Ï8Âë¢2æ½”t%+Öıx]”ûgÏ“1Ü‘›Ö¾d3¨#'ö~ë’5’ÿÖÒÅnœ·›ô'ë³¹ÂéXÌ€ À½¶“¡âÃeŒ7ÂEõëqvÒ}Àl(2Í•9ú¤¼×RiZØ쳋ì¬òh‰+ĞgÓ~"v_¨^ ¡8ì1vNûœó¯ÔŸØ\+Fú¬K8-;¯.ÏbĞ+«»DN×Dig„„D$Ğğé鸦*†ßò€µ·Ğ*8äÅçú¹Ö t$Âô)б+û¶-xV“…õÓñ5‡¨Ô×EA½ülŸÒf Su·ÜcÅIyÚ¸YÏ…°˜ö\›}í§in°£0Ï1’n[ Kş{€Â·`_m¼ ! šĞöI·Mû±H³Oºğ€&Í ĞVûGbèó¶–*$Ø.™fÔÄbzôÑ/Zå8æËÖs,*.â v N˜˜YÌ$j ÙmİØÄskú?_‹¾.{ÎÊ:¬› '´á³ûD°d=òñŒçùi£:ù•ãL«ç}:µè¨ó ¼bKöõ# XrµàĞ7‘"> stream xÚİY[oÛ6~ï¯ĞúR˜XŞI]‡ [ 蛇=l{Pd%ÖjK.uÓ_ßË$Ë–ã¤öÒ¬@`QÔáááwî ®¼}†ıó×ù³—o¨ A±4˜_K¤eH¡e"˜/‚¿Â)Df!T„ó|Íş™¿ë™¼|Cx£XRi 8fADbD¸_ş7&jg Õ[Kì>xb×ɇ,jüF@,¶ˆ\ZtÔyÑd3AÂë¬ò´ÛŒF\Å[œ‰# Œ%¤#úabKÂQÌyGÑ "”"­ ,¬_‰AÚVUV4†’+(–ç”3J>Qr³ÍÏÂ0…˜î)?MèK MÉ}ÔEïèKc¥ıYYSIŠ;1P%g€ ª³´,õ„„Š¢XÉ]µì0ÒÃ1Îd¼{ş¢Ç– /à¼#!ıÙ™ 'äߦ¡iÑûiXT‹YÄb*3ªÃ&É‹ÚÍ€Jì3w2#h–IãFUvSeuæü2»±cĞÍ,ı„¥k׿÷rÁoDZ¼2OÂfid"&•Ò¥t7‹8!aif†Øñ7sù'7•İXş¥ıM͆KGbìã ûçHß¾Ÿÿè¾½Kœ€Iuë>óÁ3VبM N•D6W«şØ/@ŔҰı]»aŞØ9&Õu»öÆä>m–ùjÒ ‰@˜÷¢ˆ"%ù–θ†|°ƒô2ñâY“2ƒÔXd;#¡ÙaFU'™ÙjÊbŠxï_ó!æî@·r¿eâàP‹ DàˆHÄÅY Â!àßBÿ}¦¾¿ÈSØd¾˜hfFÿ{LØXÁîğŠÏe OˆQ]öH@¸Ÿ¾ü{@ôòŒ[[ÆáÔtúªBkΔï`*è]Û´)+óo"L¶¯î ebûKYA[ëÿ#U,úŞĞ°MÓ¬®KÓnšWèÜÚ…ç .£©şåß,5wÙçˆéú”u–®™î¯ÔMKÛe“×+Üè•g«…¿>±-oÙüı‹;7P&õ¨ÇÕᦾYD@$‡LÂÍÿÖÚÉI8Qı>öZOà endstream endobj 1613 0 obj << /Length 1704 /Filter /FlateDecode >> stream xÚ½ÛnÛ6ô½_áu&•BR”H¥X‡µ[Šõeõ0 ëd‰¶µÚR&É ²şüÎ!)‰òäÚ Ò¼˜·s¿ñP&³õŒÌŞ>#GÆ×‹g—×,š%A³x¶XÍh’RòYÉ@²d¶ÈgzšGÔËğ§*ófş×âİåµt°89´à™óeÂ"ï‰ù©Á1ô-®OiD‘¡°+Ê}«N2°9“õ¥H˜e%÷a¶©öõ)N<I…åÁÂ{)T•íÆÏÓ»SŒò5º›ûaȽj…cˆØ¸Ûnæ~Jª% ŸCzO Nšs`ãr¿ÃM•ÖÀœbÕ§÷b~§(=iæ%¡^S”™2RĞ„“ìbCæV³Slğ[-‡ú8÷&„ßïËè÷’<Ä –k°£ÎaİGˆ¼iOñ.îÙïvª6"´ÅÎz’N°ÄP¤¡ÊÚ,w—&e4ˆeØıv‚-%iñb‚H){« a dO¢ªlû²¹™ûh¬¬y†ˆ}Ù»¼¦Ü5ã"H… y¸!hâk$ÎzåĞyÚ*ÿUÓÖE¹p†`A"¢Á½­š²VİØ¡jİ:’¬Æh¯ò7¼(>ÔcG$—™O™  äSĞ? t­Ú}]Bp{)¢£ ·juS«F™R‘¶ S­¦‰ òø„Ö®Œr°LQ>íFÂÛ <)àúpK·ê;+Ú' uã à"ÆŞªÚ. ŞZõQQ'ĪªwW#Oñ8Ç›‚.–íz!<£š]¤f°#džf´”^šeUõÖæ¸ƒ6.íYXÜqgû ˪G›p5‚ër2-÷z¿³Q@sÀ)TsÖsƒùnp¢ÕGJVüµYjÙ³²‘‚îáÙÑ:øf*ã ”…ØñØj:]yĞ!@Vû2C¶W}Bwº$™ít/ÒÉŒ¬»ô~Û4S¹©§Ëş…ÒjŞwk¶Sít¹¬Õ§‚$?¯Foœ2İ©`Jd+ÊÈZ?~]‘WûíöÑd]>±yGïøP ‹—ŞimŸyñú©Œû`I;Óf_Ù´77uuS¦¾pŞÏÒÒÒj¡’¦«èY<Î×çÍYúáê«%öuwfnô!ÂùX€«¼øTä¼ìà)!8‘V#¤PC±áDl}†1-Íhk¼Z«k:[X¡Ò©Â–C-Ü¥ÖáºİïÀÒJû`ן2ÈçD¹;ß^ù#ú?ŸcOl İG—à ZÓ.Hlhè)µBë)¼î3ŠÖ³ûvw¾?«§úgı4QÅCï;tÇhÈ'¸Â³˜'IGìbwy‘_^L|£âŞA}—ñ|R|¹‰HÔu,æ§pÕE6ÎÍk&}-ƺ‰ÅÑpê¸ —©¥›°ŞM¸×»É GW~yÿ«Ù•1¡ãÚÉmËu4ÆÔé¾>K÷(vSV½Ñ£îÑ“mª;C˜13hßY|÷.t×øË´éÈ:ÅV¨z£TÇQG~z’Ş­n×õ~jé?}•|{éxäæ®:ÓñÈAܼEÙcàáŞCcàª7†¡ñcà~j9¦fèÕGSê»&‹‡‡– ÖÁ‹î‚Dôfé_j3FA"ım7¶ã¥œ ~^<ûÂT¨[ endstream endobj 1618 0 obj << /Length 1848 /Filter /FlateDecode >> stream xÚÕYYsÛF~÷¯à¦ÊµPÅÍ à7ïÖ:ñV¹¼+·÷aDB"6À`G>İÓ38(HmÙUû4w³¿¾ä‹ë_|õ„ûñOÎ_Êt‘±,‘Éââj!„d©NIl˜Tñâb½ø9zº9ûïÅ¿Ï_/JÉ´H€Š»Q4gK¥T”ÿº/~;‹ãÈnóòL¦QKûm…£Ş ¥‰ÖèWf:K±§—wNp¦n|Á&ˆ,7L™&‚eqàıë¹¼×ùnkWùš8½Dîß{î79mnÎDTík…Ç\êåÆo¨hµ”ğj…OcAû¶¡––ë|UÜØ--@H&Úßà‹K÷8÷Ä:ç·R!I¸Åí«O‰VÈOŠVÜ yÚÿ="Ú5 µÈŸ?¨®.¼ÇW¹­gÁLLã`S{¥Š[•$§½yD 7yæfD} ùúJ<Œ× £ îÚücqğÛ8;MåÇãğl–`u@D‡å¶(=çR[ÛU›×ó¹Ú=štUœâøß½¥ûØÇvrİ¿}ñúü?¯ƒ[4ÅuiÛ¢*ƒ¿4MµDF©û«Â¶Ä’ŠYgç^Dùò©Ñú¶ïˆè6ıûâ&ŸÏğ7Ÿ7í~ı|ÒA&bù™W*Æ“coûˆònòUU®Oğô{òiÂOóôöÑ<İeÓºø£rI°µÛek/?Êß/>¿y<ŸRªP2ªÎBzywÚ{õö í¦ ½'ĞáUUߨö^µ•2›#ìûYØ…êE˜^/0'î`BÜÁÄs'Òèàr}şËÚXOÒÒĞÛ,¦+8puÓ­AxÏ`Gòè°Éë|*¾ ·Ã)BT™oß΋ÌâXdÖ›+8±à$È€V“…o1üŞõuwv€Gï¸ĞuÓÒâí¾‡‹7msD(ÜŠÊÇ–‘œBêv)#”¤z0\­†w~ЈO,¿›£ ƒ®‚pî„€gœ8!ãÄÙmÍáÄÕ$óx€Ì7yh»#HI0H4¸o='–†`ÓÖù°ÄÉB:Ìò`· «Îƒ¹ÀÖUO8¿ë±pÙz–îô {ÓxàÀá¹M‚Çrã=Ö×À䄬ø|1|?ËcÍĞVpÕy¬ñ¶"®&C8íß©¡ÇšAä¦EğXX`€tIHË6G´şoö÷O^Úİ®®v5Ö¹S7šuŞøäìÊåùŒÿğùÉ{ȸqŒÓ{áúšùŞÏ‹#\ bA€“­EsÅ™¤a]\­ï¬nx{ĞÔs_Yr²9>lêù}öÆ;{ËNì!|DµM}šø€N8g×ì™wÄ,3§õöÌJzZGuhywhmÖ¹µKzµï'q³‚˜¢š¼¥í«ºº¡ıo/şI[EIş…¯7qÇ'MªLÚ½§Ş•&e’Çß%׊ßÓõ_"] ;ĞLÅG*F‘Şä¶,Êkj&#ƒˆ°Elh~ÀıÇ à•³)\ÓöÍ(b:#Ï(˜#ѯPŒh)’ ê,|*Ó<$Ğw‚ÊóU×”lJ:Aoâ «ğŸÆÂÕ¾–‡î&¯ëŞ<{¹=¡óıi1 ‹\õæÃƒ1ğãOZea<$†qVÚ°‡2ÂÑ^^Öùo… Ç(¾Äиô)ç …©ÏÃÎËb¾ÜÔÊíéG•»¿’(&úğ.ñ˜É®ñ \š…gЉtlf KÁ§–ʸ/îfÆR0(!ãèÕù›»D¹ǹ¡ÛH0Ä5¤!Òe¾Ş×yÈNu]IcÓÖûUë.ÜE$bòêüwW5ÅïË⼚ÀÆ™Êt¸hÁ'¨eL9"öWÉ©ûæü¥Ğ#­jÃR÷Ä"¥C æèÕˆ œujÀ¨Síòr¹+v¹+§C£ŸI$‹EèşæÅC`šeº_”»}»ÜÅø $¼èKª};:›°Ô4 <‚ô&p8)÷Áç„U[ŠŠ&sͤQ™h(ÓÒº` ÷êÔï¾8šÔgIœ ÓºèYÑF^®á&P Ñ¦£‹Ä¶»Iv°Xz6Gşg½’PÈ<»÷NñA°Krç‹)pÆe¯S¡·X`§I´vñ½°¼ª‹][M|ÕL„x°J'"@Æ ÙG=ñ‹*aZv¯®ÖG:Y4x°p‡5;Òv½ ~!¦a :\¶ëg Óµ¿Šß pÄÈ*ã8:Ô…S7îQªwKß¼%á‹X²DßÉ·^J.í4^< ¢´ÑKì\–®ì\5tÕÅ©bo5!…®éôŞĞ(Œb1ï«s9ò“«b;aÖP\è¸ï³ ŠLûÏmw®i‚©bIú Á¥ÒÜ[Û@Lò4I>ܨ‡H&Œ§ÙˆÇi'>¦DiéóM>YO†ôqt\$š AXƒKS"&´]ú×Å“?"B‡ endstream endobj 1623 0 obj << /Length 2499 /Filter /FlateDecode >> stream xÚÍZKs㸾ϯP*‡¡ª†âE€9$µÙdRÉ%[‰oIªÂ‘(›µ2©"©ñÌ¿O7|€‚dïÚÉæbáÅF£Ñ¯Î6÷›ló§wÙê÷÷wï>~âjS°"ùæî°á¹`y¾ÉµaBêÍİ~óäŸ7Ûİıeúìã'aß`K„_¬³Ã>=µİğ;üÖêÅZ-Yfĸø´Õ<•~á’(·ŒK¾ ÊiQÈmÆŸ¨ı*²W¬Pj\ñÙíçş+ü)›ÕÁò)Ïr&…€g…ş¹â@Y¤¿=ìcâ,ÓêMÅÁ_.ºœî«n›ê,ƒ½#[+ 1 ù×\ÑDb¡¡˜5†&?É™-Š‘HW ç®é·©Ô*ºs…-Ô©?Uv÷çǪ٠› ~É8ÓĞ/ªÚ6…yØ–Eå–3“™qã‚«ÔLgğÁó7¯@oÜù…±¬0Ö«FNŸí«~×Õ§ä˜J)“²ï[Çİ®.‡jOƒOÛ”'õ–]Pq©sô¥ ŲÌ%3vºîú¹ohe6®^KJ‚3¥gJ=1Ú´1è„ ¾n8x ´ã'NW=–§ôP«t–lSk¡™0“zŸ½;¬Óîé6±k9ÿDİ03ãhcp VcGU·4ı·¼—ÄQOf½•¨ïfbT(×^RqC‹¿<™DŞï¹È’»‡*&2(®É ™4Ìòbö)VJ¼:ú¼}½ަ ¬àé¡Ş¡E>`7wì§Vn•‡‘{ìvÜûOAdt´WUåLr²3Gg¿Å#€ÅL–œ߀lAv9®ïzÏÀ}5ôÊ%»ÈyRÓ°•ô.Bq•ôÕ®möÔvœ\Ò7“³±ñÑ/GšèOğ÷@}°yò]D¬`V^5ˆK]W2Rw‡°IUù:j—ô3)#v%œ»¼?„Ènò•Ú€ºï3É’Ü[×>RÇùGQ+Ä­ºcvšËJêNVCóÍ}˜Hż~Á²ùøQç™1•󅘑Ø8B\±áϺb%g[röR7÷ş<(%·…Úµ·7¡(€¬×{I)$£¸™ÍÚËHƒ}º2C>ç¾Ú£~:ù¨I¾ÑxKö Aºv¶Şõ÷Ǻw Ûeçw}ÄK*ñÂ~D’Õ>f\ÿŞÛ¾JÛ&­¾V»÷À„RÚ9-DúòÑ·º„]"nà L®ÃͶ8óÅoë†HMğC<1¢Ö'R•4ÕÍÎÚ#Qj¸ JWƒ«uq`„EA,ÿ´µ2yõµ|Ò‚ğu%Œ¥5À<æÙh–j¡İüîÜuU3¤íy8¤¦„N‹•uy(–­áéLªn–”fÔ²;Ñù¤ òG£ÌF”É„ˆ˜ fˆaš\Şiæ¯([\,¿é|EfÁ.o8_ËÀÓŒóÎ-º}<ñs2q"¸Æ œÍ{ ò—ZsaÌ—fĞ n{óÛ )×€‘E3~2fÚŸO‘pW\dbn¤¢`V‰7μV[^•A‘1›ËW&\ ƒ´_¾{ß™>¶û(^ÊÄaûÖ2áo/bàöõB–$‡ÄRÆXr¨™ì ½i…ÿaş»ÂYû,0;H+SÓ;,­“es»xø´pò¼(¸ö÷=QŸQ»3>è“G‚e~ò¤¡ì /3v=J€…ç­ƒB}oÄ–ô"_gu„ Y°ï¾ap‚PÚ#ò-ø|8±LIbéBLøÜSÿÃèwVU [Lʤ§M< ÉÑÅ™'Š3ûFür‹#šCqÇàŸp¹¹ßwÖü@8Šq¡â¼‘œ Y½SŒˆ’²"d½G˜ <7 áDR`E…ôã6NP"5áPË)rHàgŞ_¹ QLç­¾îªÓ0nR´‹ß{íõø.p(‰e0åœj\P©û>ìr~±ò@+I8_y`ÊéCÙûé†'”qI’Œ_ê]E« ºt}‰ğSšäχ‰?0#À©ú —0û%8õú1¦z`¹(ü@šiş¦Æpdzv-WT4c…A"§dBşºcÙÆÁïım¨>D™×b úåñ˜~>Oe@å² GõÒrŒÌÂu¤#rpkyX[úş’• çæÀÉ$IÇwO>¡FÜÍøUOmïç.kz0¸L£Ü¢Î¯¦® p'ğÜéÆ˜ÌÔcÍÍßæÒ:ú›— Ä&ôh^u£>u‹Õï­bjvúϬéò=D:“©W§¾ÒP.QN³‚ikãÊ~…ñÕÎZº¼Tx šÔ¡±~¹© :g.ëÙ õÈÜ•(æšqKÀjåü&FšÍ¥Ã§m)ÏÅ>´àИ=õŸ\Ñ];íîRtìC0½ïÊGêÔıxj7k]íŞÇ#®ÄÄqЏ¿via H2›MGíãõ:^0eÅ3ò<õû¥'v  €‰)pèòş™:Ü_nå+tı±MÇò>#ñ…ÏşR–ìÓŠö4ÔmÓß–ĞÖò-Œx’FŒ?+™’WbÕ%·ë’.°XèK­rhv·|Ò"òÀAaˆ#4€Óšjî¦28Íae•Zü`ã©sUTl~Ùê"Gİıò‘uˆRTŠ_a¶ëªÎ犭¤ê^¸Q^,«Ã9$Û«Û‘‘Ùk`ÇÌÇЈwÊÁóL÷TNUy̓¬VÚrŠ8[Á“†4móùØî~DôwYÀ1Nÿ¡%O<{°ùã·È#$^F¾˜+w¡WHiÁd¶|%J]Ɇ\jn—ì}$Uy†(óiÒÌæ+?üWdÊÃÑØ-)ÎÌ ¯Ş’‚ğó¢ŞWş¢‹Ê³eBº_-ƒ22|¨šgœ¯Æ„~%–rÏşuŸ–éPuuSc€ İ[Éÿ¯ÿ‘CÈ\¿Vü<ÑŒRIÌmŸ-Ğı#T?t“’­Êû$ÛAhşáÚe‡xÃ,ŠÁ3&S&ƒVô0Ùâ­öFÁJkÓ¥§¦€¿çf_uÇoô¢ıéE Úa‰NWX–«Õÿ¾øR¥„_ØH:„ƒîÍ-+i`Š ßVÜ¿=¸¹ş<¾ıbo‘IE\×Ëjû55Z•UŠùµu”9y6.Àôôú„ŞS4ş =Ì®~Ë4˜şİÃå’ĞhñİÔ× ÜzPs±ûÅÁ,“âåï•¡ÿÚ¤^ q¶`Öz•äJ«şx÷î?†*g’ endstream endobj 1628 0 obj << /Length 2367 /Filter /FlateDecode >> stream xÚ½ÉÜÆõ®¯èÀ R¬…dU.‚ãX†1¤9°sà°«» ±ÉÉöŒ‚||ŞR\›3£8J.ÍZ^½zûRï»x÷ëØÿrûêÍ;™í„”Nåîö°q™ÔîÒ$‹¤Jv·ûݯìM(„L‚îx©òö&TY¸ÇûÖu]ÙÔİÍ?nÿöæÙd*SDïB)#©ÃíÉİ„‰Á}Û܄҅Û_à0/–5~ã ?•~¥sEx§3pä÷rï‘äE÷ò¸oøûóß?¾ÿ…‡íR@+ ‘\\ÈEj‘@!"›xÏy_à-§²>F7a– &Z+´×ZÙ9šwŸk<×ç œ×{¿áÎ9o•EÇKyëxp`l†È†—‹æ|_¹Ç-úPIÜ|†ìádﺢ-ï…ÛãšN®uÀ€Ö"øëÅÃñaTå¹ìó4F(yÜèOòRï][}!ğÆ!/ʪì‘Ï7F¯qYM]}f€]ŠÉ)“Üõ-à›¤õ¬ãàxÉ[/‡4ãI¾¸Ü´Ÿx†œü ÅŒ“®9{÷UŞ@¯M{îPËHRœx’àÛß½'‘¼çù9gòir¸ÔE¸)`Ò¨² h¡mÁş*bD™JüÔ´­\ —j!&mˆ È/c,M|ÇŸ¨3à¸úMïxôO‡^£;¢´6M˃sŞ~BlÑM—e`ßõe2h¼â€2àFy÷×@‹#KÁñ¤?å= d«ñÖM–‹ÖL,hleUñFİxÈsƒîøi‹ò•œ"‘ÕÀd$Œc V©ëè¡”fËÂ]"¾ÀÎ¥è €Â’œÇ%‘( @-„ü¾éÊÇÜz#Še"R"€Q`mü/^#’i$’ˆ™Ó‰£Ìznyç[30u\äEϳ}Şçdˆ8&_%äü †°¹ï§·Ô|,"ϯ µä(Œ÷§ м”=ÄòúçdÊXGqš,Ãî,.–”çsƒ¼Ì—£À,¬sˆÇ×"I€0éç%b¢$y^ *’Fm dAçBÚD"3£b§¼|Mf^MɆæï§µİ̤à«n00Jè9R>j÷ÀƒÉßD6ó·×œ1/äk¦S E­ìò:˜Èd£ğrO'`ÊŠõT ÄTËpÌIP›bi2O ò®òÁÔK™Æ¨ë)Øşya\OØL¢,Õ€Êú@î{ÈQn¿![i3ZÍe÷Ì•ÒÓIΜȶ<2ô˜–ëXCö‹¼s/]Í | ÁÓõ'ç%1¯_¼~(ƒ.wxì亗noWDÛûËGéF÷Åü‚Veı"¯=¦ ¯`>áuÜİϪš2¯ As2P*Šf¥¦É¬²W*›½JE2n–¾ê€!W0Àb·¬X©)\*Wş@ÏËû{ŞÈPŠt~7ç5ö•×~Òl¤®tHà¾$£j±2iÈSòô˜İ¼íÖæEã³nø‚ÅÇ,éYq®´×&@=¯—Lª¡ÔÂKXï%ïÿÏ$Ǹ·AHg‘ÑcÚ Id¤ø’”'¿<åİapoè§¢@ŸoÄ÷ĞBÎ’eȾ¥–‘ª¿!B ¥¢Û—EŞ{-r‘¤æµ¬Îj¡ÿ“ÌC [IVBâLŸ¨¨:™W*]ŸcŒ á^ŞrùB{]ˆíW°3ğók}J 5É …ŞÉDV­JMÍBbµê9͆*¡¶¾ZRrfQ×ßY°|²ğšc#–apѦÈ(Ì÷)'øÚußN𤠌¢2ê+È dsz©T›îª·±Æ|ei”uïí¿}V BÚÈ|%1¸±¿›Ó…/a“ü÷BXëä/$´§˜çéÃUœY”é¼c™¡Òi€µ#%>O‘R'Ë„ó) ëὌ,ÇÆÕµ¯•[-…Ô6ŠUöb±›DY<Šş5'v¥ã릔,˜Ss*J«é˜V»ò‰ÎÆzfˆg86ˆ€ë”˜Z÷0Q2xà›˜õTM•,îù•‚„ S.ÒYõ¸:;IVçı–Îc !—Ü·Ïë<‰R™MEfÙ.¡¼³éhÂß6Z¬8šÂvÒ’$¤É˜iÌ( \œI§£^ãc©y'ç³ø^[Ò«^ÏëÍau’áZW4í¾ó•'«ÔDå€]*À`V¶¢œ$‰Æërıí†(Áá¦Öu¸£o/ãÓÚµ`¡¨²SÍôM¿Õ»Şl÷Švşöşë¡À¼ğáš¿ïóѼ¬œ‰Œ¥dÀ™´XÊá ÔãüF™Ós%!·ÃS¦7Ş»GR¢¦=î4q¼ğ|#'œ£ğïÔDz®ÙUF\fbª3f Onë§Ã¦Æ‡ôXgj×tŒŞ„¥®.\*±&²q†W-¶W4ãÒÌÈ<~H (\mı¿°ÉE·]ïïŸÈÅ©—çÅÇò÷áÉ@ÚÔ{ *ÿ¢™s»KdóÃ32.€INEg‘LÍ»£ ‹~1•)×ïJ«8y.SsïöqnAïØ!…›±=³P¦ñ­øFÅi¶~ŸÑüu<ë…3LWènô‘«yÛk ƒiw©ú'¬s=š*ş³Ä;üW ÁN†³Ò£-ò#?\òPö'èÙ:CLÒyGOÆxd˜U_O ¬UŞ- çè¹7¶_e%°¶ÏFk Ùs *5£»¯è¼ˆ¤CW7İğ<”‚ö †.béÔ§îKßÉ"3 7ªÛÌüQûã¼#¹"ê«ÌNÏv§æRíYkwÃ37©°½Ğ(Ùâ´'é‹õ0§Ô"ßwŒ?ÌH_+\¬)ç=²Ğ©|³p„+"=öLŞ\ÖÍØ"QX€·kQ àGQĞ»‰‚^+¾ùõúñÿ)ü‡Î-[Ú Í$ØÊAÃçU#t²€úşöÕ¿ø °^ endstream endobj 1634 0 obj << /Length 2486 /Filter /FlateDecode >> stream xÚÅYKܸ¾ûWtnj`›)êåK#öÆAÖdf»9pÔìÁztDµgæß§ŠUz<ãÅ.K‹¬.’Åõb1ÜİíÂİoBş¾¿yóö£JwR‹H'jwsÚÉ$I’î’8*Šw7Çİ/A.d¸?H©âàúÉUíİş¥qp2EY•ı>’ÁÓş?7û1Ûå"OT‚3…»ƒ’"S’渹·0JFÁ¹k÷•…=^:ëˆX6ôíïKOѳE_¶Í4†|-<‰) *ß·ÃxføçÕõ§SÓ "ìƒÈ0ÙÓ>ÓØt”yá`(³”"yß§Kã…0ãƒÊU€"ª\z¡±oèãúîRô°'ú·0Ue„‹š#ãDd¡‚Åü"çÖ•òЉi¢^/®$,qëź·µ%tÆ6Hïmûå¿!Ü!œI.â$YnÔæÒtÄJ¥Ù+ÿï±ü5”‘í3—w Rta`½4è÷2¨xp×ÖÄÕß›Zíi Xbú¹)‰T•·éx™ç°oœ×˜( Úîh;ljR ¹ËùìU¬íz¢Ô8Í¥êËse™§¬Qd ™Æ¶GÔ¢mÒ;&Ğ”šõ*š)´G€ÒA™PN0¦\륰ÿ “ɃÚ:gî¼ÖC¯0î9( Q¾îã80YZTï}dAøçl:SÛŞöoı^­#ãFşéícO-;û‹!عì­N?àÜ:h`A:Yéµ>ÎöÔ S…ï™qÃé5°k«ªlîˆÈ笗ş|áá§¶« ·Ms¤ÆÑº¾l Nè% ÃkAºÔQ¥@–.OO´²b·€ÿ•qš^nå}ËÊÔ‘sˆ&uÄ[´5Ï©½†£p¬Y¯Vj¹¡·TÓ£|YÌ«f âVtp¶DfÑp•[·`‡ AÑOª†P–Š4S kG•ߊ}2Q–Ó€¿ » 8p†<ˆ“>xqÄq´B刅ŒWÆŸŞ^…q¸7Ûn> ÈiŸhpÏC`§$cø ú´—Ô8l!L3Òà6€Óï ÅÍȰo+ˆK¤Ìbêâ~›u‰$ƒ10Ä¡³üÿ5ç ä/áNî:Lb°ñ¯ßì~ñ#bLTˆƒ2f‘4ÅhËıv𮓬bõÚx=>¿gÇJ&ù¬kSt­Ø g?a>´—Î+ ³à•µí¾8î–ı=³=Ó<ˆ@İ-vîKʈÇtìØY Å: Öèø`<`†ã‘/5›­ ôé( GácÓËÇŒprë8Ä‚øö£ÔóôHäy"§€#‘ASÒÕÅ)a+`÷¢>?'Ï**L†ÄvÀ ·¡1Ç4›Í.‰i!t&âX<ÚXQFérÅç $u&dšlî‰NÉ<¾&¹BÆ«cş}˜ıyc ™:·ğ¸¤ûê¤d(”|*ÊF˜ãvƒ‹ñ?»Å˜$¼\RD”ëß Fm¾ØÃ·%i¹t6êFUº~+ßD®òïE}?,3¡¾ Eœ‰$JşH½ØB!‹¼¥~Ÿ1as¼Íñ 4”J«Wí)Ú@cePJ •Æÿƒr›•‹$‹_³(ù«Î7,jµòAFJ$2]zâëW UÏwŒ·˜½å>îã‡Å<Ó lÓ}[>iÁ†W!hQâà'hæ!´‚]y¨‡ûûX§½Î•·xûS:õS;jú˓р1"b›S«Ê'¼3E]Ú¶åŸîç×>tO*¢d<ğr>–eazæ„ÙœÒ á…Ö$Áy‚r¬”ôjÌ ÒÔ§¾Q´¯ë³ß«ñ(àeğâğ–°å°b¡'}±ÿİØ‰ŒE’Ë©.ñ|‰áèõ~ú–?]Ì‚ÙEñ–úøíÔşâQ9€ÀIºbJ4^Õ0M­©cèã5´"ʨ€2‡÷"ûÂxó˜76’&"ÑÙü˜Ç…#J ‰2OÛ kÏpÇcn̬éî2n ™‹£åı×[„Œq($uÌIjHòúK×øK şmˆê¡Ã¾7(9]`ü¿l‚’,opÊğòm6´$ƒX<¹¦Ò Òø Ep§ÊC¹2ÖÉ|‰¥íÖ©¨?.üέa«‚ñ7Ûñ,ş":¼UÒÑsiï"ÒÉE ‰]Äœk~[äÕß½ÆºŠ’BåɤÕèw—ãæÃ´q>F’O'ºkºYáîÕMÛSûì ØâÛ^<•.<µ?R§äÁeUQËô½­ÏırÌC‡×3*JgéFÕ0â›$B©fnÄhPJXîÎ;2M{x @„ıø_®}á!Ô%]@áÿh‰>Ó˜%Yä‹©>cñŠ-óÛåJ¥<˜Èe¶Äã8ÀÅr5‡»4/4F˜±3i9—äñ;€yHTüììéÂs#ÆTŸ|­¥bıúÊ?¨rm>ºY5x,>ó F´ôéşâ,õPs>Ò“EÑ•gpî}Û niğS%¿ĞÇÁç«zä„’Éç«›=äGX»ÉuğşÃç0ñ»€‹<£õÍf©Ò |Wv·œHáãÁÀƒÉX™Ã5q s-])g,ÔtgÅkÅ€h|Ç(ªËÑ«…ÎE[³…É<i²²±se{Û€zøÚqÜ^øâØÒ×;Ol`á, ¨4¹x›H1¢raRBÈ<¬ı(x¬ı™¿fœ9“”Ë^Ȱx¤¾ñqf³º†/6ï N†YğŞæâpTµÿ8’ÍG6ä\=•¤l(ÃC”ÎÂåú- ÿm'ä;¢bŤ´â)ÚÆş@Ô¹K®¯…#GQµn`f–Îl;{Õi›ÁM¿zÊaù"ï<_’ Ô8èÒPÒs"a®ò¥©Ò%#°ğÕ0™,ËH©“ׇ›7ÿˆ®X endstream endobj 1639 0 obj << /Length 1554 /Filter /FlateDecode >> stream xÚÍXKÛ6¾çW¸7ˆ‘"%*—¢E“EziöÖôÀµi¯°²äJò>úë;ádÊ«õ®‘´èÅ|hÈyp^Ÿ“Åv‘,~~“œŒ?^½y÷QèEÁŠLd‹«Í‚'ÓY±ÈTÎDªWëÅQÕlã}¹^şyõëxôİÇğ˜äL>8úOÍv§*úK“}Û,c¡£•í:ÚëÜx_ö74³fµ¿Ú¥ÙÚ÷ËXj:»9TôeӴöÆ}¹y,kϲ¬»Şøí%^ÄĞ|7Ã’§L€£°|ê_Íi ¢"Ú–wÈÖÖ´‹^ËfÌ¡–&Å ×çÙ·ÕÓ ™šØáÈ4Z—+ã² ìz‘Šhƒ¦Y9U+Œ—4a…DÑÇ¥†Ø³)İØÚ¡Ú@ÔärªìªÙíMk®+K‰ã®43ºe“£jö¯m¸bÙñUqÌÁïÒ“úö‹mm˜Ğ$©œFUÙõÓ²·‡ª’GS°+¯Qa{Ìk'5’‚ɪÑïÏ–Lïõ±/j¦9ô7zÿvuøLåÌ+ò12¯n¼RÓãAO9d,ë·DÛŞÅÖö¾„Áóù¶_¯÷^€°ŞCY(èÒ'"»SAŸñB›A—„l騯iÆÒL¡ös$ÚÅç…ãğÆ8õ%¼zwj!’™Ç"j›Coפ¿Á$ÛèâÎ5.8Á–Hî X®iÇ…N ]Tåªì+ŸÀ9¥:qÒ°”6P¬[²Ïѯ.nÅnm[ÛêÕ6úšLïã[4Œ­m Á÷\¡„c7qëò2:/ŸçÊWíÛs“°,ê9UY{ÎûÖçf뻕nïZBj ›Š21îO‚aßú¨(ÖWÓåÚ/_Œ/_¨ĞΔÕå±àNM:³ c¡¶÷İålk늒k·›övؼï¾JÀ&í«e =3Ò³ŞÖB=v­p*‰Ãsà"Q«ıåfs§¾ÆBU³2UW@ŞussIsì§Á\4*ØÏ‚y~N-Xµòw F¤¬-DêŠY$Ü_ÕúcÌ¡¦O ÒSM籇f 6.?à I®ş{ğsLrSğ® (ÑNÁ´Ö$—Ó0ıpõæÉüe+ endstream endobj 1645 0 obj << /Length 1915 /Filter /FlateDecode >> stream xÚ­XKoã6¾ï¯pÑ‹ ¬¹"%RÔ©h‹lÑ¢íeì¡Û-1¶= INÖÿ¾3J²ÅÉvs±IjHÎããdž«İ*\ıö.¼øÿåö݇B¯R–*¡V·w+®B¦T²R2a"’«Û|õO`+ÛîlÖÿŞş1Nşğñ|¢,”>¸?¯7QS6ã kê¼è‹¦^ó€­7q,ƒÛ}Ñ‘ıÇAİ´•)ËnÛÆä™ézêö ™–(©}ìlÛ± µfm¼b²0ä¤)mÛ_1&âŒGѹ1‰<³º*è÷¦§ݾ9–9µ·ëĞf´­Íz›ÓŒ¢ªl^˜Ş‚:ŞÃ¨VAwÌÖ0eO2¦£©Æ¯°Şğ iÁàöxÀ…@çÕF1zn8g©ô!êN]o+rTnz³5½î³4L¼_­’µ``~Ş5±bZăk~&¸Guï)<–íØ{ú¶7mîÕ³Ef½@Û:ë:´óº¾~ãYiúkãxƒÒ/ ÅϘyåÑ´uQï®9…3™Nù¼ÖQàç8‹+Ûufg_ØÚ/2ÛºnzôÕ ‹Ô1ÃHxŒbË´W¤òkÎâ&¤¶G/4@ÛøK‚¦ëŠ-Pѽ©ór€(`3–ÉF$îŒÃø„úˆõ]sÅB”1࿃0 Z6@ôu¡ğËÌB‘Ûíq÷j¬ıå÷‹Ó1©s5öŞ5pgב$&ÄÏÍÑQ£©‡O{ë§8Õv¢‹ô`<·Í®5•3lNV$#æîNXšÒ´?›ñPeºûfÛÂ.šÅBDs”8 4Ë5‘™z§Vƒ@›Ï‡=ã>§¨?v;ëÅÑ-nš}@wÚºQiº¨-Q͸Õjç¨pî#ë"s¬ˆ™ÜVè3Ü ÿİ’øå|Ï9x|~“‚B|òæ—'×`‡­@_BVæŞn€Ùaë3„Â&ÏçDL§É0©,ºŞ Í.õˆ¥"=[™“Ğ\ß .¡öâxäšA¡çìßğX€¼œ;ù›}pİ|•°$³ˆŒ-7µ©ì‚$Ыԃ(cì?À1ñu?DLèèÒó“Ác$æq»îäı׫.‹`i.ÓïpÙ™»6À"O‹Â´}#òqòvQÜ@"Ó¼Œd å”S¦“× ™¿)’5Óú ‘üÓ‚N Ò)‡øº„`H€øŸâíZÂ%ã~J‹Ä—"ç (DÍèì¯Ev:Ÿ¦¦’Q¸úº¾=f=²p:NùÀĞ0p×6ÕÙ§è̵߃ğ÷^‚#8ÉqÃO×tS@“7‹Q'wƒFB³ğ’º*“µP‚Àa€«ÊH†öÔ=· û†ş*wç¡uØ#ë°…å$éáëv‰‰¼?½t¾uÈRÛ5j¤áş·o!ĞÊ‘…jHqÔqíê•Xø/B„Cgé e·0†j81gDòlpTʤVK†LŒpp4¤µı±Å´Öí¸ –·KH˜»,GN]‘Æ>£ŠImlL¾§şñ@ÿXo:Á:§FQgå12ô—A)é³¹xrV=!äϽi{ÌçºpHÃô Vf:ë³ ÕWœ^Rš^AìCÑ=ù<¬ñ"ô{:{,Jÿ¸¼u^v|iÎ_¬÷Å÷‘‹¿ŸÆÏ= FóÚˆè‚^K–Š…À"/Yâù<%“çÿà:#Ÿ£S¦âèŠ13sÆ1JE­i Tp³7·ïşhOY5 endstream endobj 1651 0 obj << /Length 2472 /Filter /FlateDecode >> stream xÚÍY[ä:~ß_щ“–6>í$´ÁÃ.ÒŒğI»g餕¤g¦%~N9NfÊGC?†±¯ÛGwç±îÚÁݵ|5)Óy¶x7Ù¹â,Nòœ))`°"ı?bğŞ}šDñ±¬ê¦Ş'Ѹ“èb]k–'é»YŠ3‘'ÿ[Ö«§²maå–B3İpÔ¦ Ë€“8Ñ,Õ -ß-¨X^"K¥¿¤¬ÆKÙ4×},“,‚ò¨¤ GÛÇJÑç²Ú =Ñ–îH{Æ'Cç²/Of4ı@ 7êÓ¹©«z¤éª6«˜XpT­Z‡­BZ©š×Êœñ¨Pѱëi®†dÕΜÊáŸV2öWU¢i¸[ö1Poè‡y%Z,ëğ{8ÓjUƒ¾•9еå@«/È·išğóğ>sSì{ÓîE&‰lñ5CU‰7ˆ\EcP¯(˜˜-ixK “ÚïúˆTƒ¨‘¾gKdß×ë:ö$“nÎèp:µ*Zí#[D¥‹4ºß^Ñô»7îAâ5Î8˔ڨ°ùH+¨e&UÔõõcİ– -<ïÓ,*›‹hµ<Âş Pl̾‘(VØ'Krgç÷´M¡Ÿ*woŠ*:ÑôF±îwyÌ09ÎÖ¾ãf™Ìx/ÅÙr"˜>*ı kE÷kÚ3ãt¢E“9ÑLìµæut¤š é`Î6ò‰R ÚÁ”À>¸T+ï%(±ÚËÄél¸µnÃB^ÌâğaDç¾³¢©ÌáÒ[Á@ôYwÈË ı<Ô=EûOe[Ÿ/Í$+˜±²š‚ò#Í-,høˆSXÁ¸G;ğBPù?àÖfƧrí-N@½9UèN#¼R… .àÚ—ı¢0q0Q‚cÊ#rsİkAç…ˆ¾t£™N•îâzúº{ÛÎMÀs¨õşêß øõ*–€F;gr-ıt&â…„&= ÉY›s”ƒûÂNğ’Gö­tÒıŸ˜ªº³ic",^çtvËxî#Ó[¹Ù üê’Dâ ‘@ïM»ÁWL$É´é!¢È§Üñog÷L2É‹µ•ıÇ"«šn0ï‘YÁ´Ôú6@æKDş~t–JVÀşŸQ^êñiâa|HÎÒdˆUğøtiC1s­şË ~Æ$x,@`Î7àçë[v½²D.YRx¹”í!d® ÆÌƒç·•¯7Åşâª7%†©¥}ÄPê½MÛW·Bq ÈôJ¯í¢‚M1¿„BôaÄü,8âFcÉmú·8ÀfÆ<Â+Ÿq“i¦0©”tyo #=%XÙ$€iRÆ…€‰C¾š~ ÙÄӾ˓" èV™9ˆÙÖ±•…À^¸Ã7´š@å¹8\ÛòTW$u{h¸‚J© ˜•&fÁ`FÂøk…„“$cZÈ Ö) ¿V0ğJ‡ñ*ãm¶wÃtàVj0[‡œ_ğløßÌa¨–dïì/¾ ]•A‚eÂ'€EYa¨¯•¯ˆB´’ pĞ&Nüş½ğÉZP-`–‹ÀjoÆKßÚü…?_øØÆ.cØÛ4Jácİ<,Ğ›bRe‚¢T"°ƒu‡c,2%ú<úÜ÷¶¦@4‡K0>±œL€uØ şôõîoÕàX|´Á À'«ç®i‚0 Z„©@«û‰Æ‰ß²¥¯!Z”Î£çº Y…̤¡…;æD)ÎbmnÏ€.§üpÃL‘C5ì¥÷/§\)Y®6!àë]¼6Ú íK£Íbø3TrZÑáÈ´¡Ûƒ¡‰’>Tpôµ™½Ä…0øğviz:å,5TËVÆ$3@¶Ÿ¨Öso›Œ½£xdN(n^`ÙOÅäG¬¯r/nŠ…Ë ÿºZù•²w§W }×®†¼ -{/ƒWÚ. ‘³<]V“H’Åèé„ÑñY‡”ù2¯îu—®gšoÚF"1âiM5³›¢8ËçLGõ¢ÓÄ(V¨>Ív‡:[çyşÙÁújH­—j´EM ÌÖ2€jçn¨_ã·äO»Wl½ d.V÷¾ã71gõ!ü*%ıîÒOfˆiYÚJ?x”…w;/|å%AW‘Ú_“¨ñ˜7aZzpn€ã¾¬jÀFê·Ì_¬P<ŠÚ©ÃÑA°¥d%Š ±àg1!¤˜2Yø ÿ«nˆ‰Ò©©œñ\ÎRû¡Ô›ƒÓwÜ™rƟοI9L¥)Z+éc³g4‰˜Asw0C,ó9ø" TÊ”ÊnäjM¡¬Ûa ‚œàx U°ˆ%ŠğMŞuyÊi`%`û^MÌ‘³6®4µÌä©9âX0(Ú[7åCc>ó+äÆ9øÛ0y ÅèëÛXëyO×^Oİ%àÍ @…^™äŞOD7Òpp¡ RS.7¦myDI Û%#•¡ ÜÀ pÚ»ìy±ÈšÆO¥kÓù™’ ×…¢:@†4$¡Û‚üYÓ¥bø+ƒR’‰¹½|,/ÍÄ,Eêe5ùÅÆ|Y¦½cÔípÁ—Î(o|jÉL¯SS—+ûO’•­fl[ˆ¬qY"]Of_jßeæÎ »ÖvX¸%é×È`PÍÓr^ÜCس°kç4ß- ¡¡s›8Ôæ™üÈ"Él£Mì÷ÙK$vÍË af69á· {7t…×ÔŒƒ%" á…‚ºá‹MŸèöşÉÍp£…½—€Ì\5@÷LNA¹Ò~OÔÊ„!²ÆXHqÿ ¶¾pÚ6«%¢8ëvÎSP8Lb$@ ÎãiúØw§ÕM€ÜwÓarä-©#"Œe§rhrٺǫ£f¬Ïkı"…®H$;Ztİ€óÆüzçÃdëúl¶Y“ïé¹%?±ùBÏ߆1€Õr®¢ì®ØFÆ[M¨&ä´X€Æi;,0æp¸ kjVıºáê2Ñë7ÛTàÒ€sŠŸÙ¦Bîãß¼%¯ ¢´Êf¨Öèšğ¿Vò¢xOKJ¼¿%åÌȶACqêÜbN]¿ßø7F›Øí endstream endobj 1657 0 obj << /Length 1654 /Filter /FlateDecode >> stream xÚ½XKÛ6¾çW¸ÈEjF$E=P´EÓvÛh´{(Ğö@K´-D–6¤”Íşû’E[»’ƒE/%q^ß|39\íWáê—áÙõõí‹W78Ze(‹I¼ºİ­pLP¯b– BÙê¶XıüâdıïíoƒØ«’dôŠÂ ·™…eİŠ½›ï„”u£EA‚$RŠ"÷"zûšáDÜŞ±v¢(ÉFê±İä»"‚q¿é« “8BYõ;ÇF1y 78ÊPH),0ÊØ—"aì|?áN0cÒoı<7C)ÁKÂ&ËÃŞj˜óSÈyı$'ÆÈs`°©ùQLøtc˜]¤åL'‰ ãgC=-ÕzÃÂ0h¦Ø¥($ƒ/wOs&Ö7ìYğjÔ¦îÛ¡$¼òI¡FãE %Ï ÚY­>Q>\ö,Ôùv²~”Fă ´i4k˜ÊŠo«yËî@ä;H;Ì0:\cxÇeåªÁ9AÏæÅ±ïyYÏØşC¨¦“¹cvWs}ÄŒÃıÚñI:ŸŒÒÅTRğâaƇ›ºyë˜D)c¯tïd³×(-5½åÅnÆîk^Xİğ¡U¢§±Êey×6ò KGµ_jë1p]¨ûÅLÚvjŸħ²Ob#m$ÒK­Q’Ò`iT9¯sQ‰bÆğ»Ñ)Òç¯]lêPVsv޺N–k~šı=+ìW *s#Âñ­é¯¤æöú2ÔÖ¤ØAÓºÖš“ºÎíÕf@f) (ÍêÃU]ň¸<énúÁòó^¯›®O¥ÛıÒx¡T[İߥø8[ †œEù©åêBùØ•r9ÎEsœ±÷;‡aàör0…IÀ½[?iº~±³WЪ۵÷l×ÕùÆLs¡ï‚d±»»¦O˜vŠ\ ƒø ³ÑŒŞ›²r$0»ÕR–íxWµK[ªKæR¿wóÖÉí³9 ò¸xô84ªí  y~˜1÷+ìt£¤•Óù8,š9ú×BÎQóMáhXêS¯Ÿç¥ıO¢9}L,¦AY©Ùú{SUbÏ+w™¯çµşÌ°Á‚|'àÈXl±î‡/8œ®'Nÿoȹ(-°0ğwwöï"=ÏA Õ:ü»b1 #øŒ¡¾+YèmúùöÅYŞ–X endstream endobj 1662 0 obj << /Length 1094 /Filter /FlateDecode >> stream xÚ­XÉrã6½û+x$’EQ }Ìdì©IÕ,åQÍ%É"[Ë À <Ê×§±#ÆJ¹H%‚Àën¼×‹fÑ>šEnfîûİææöaGwÓ»Õ|mvQšÍ¦³l­–ëé<[F›2ú=®Ø‘ĞäÏÍo·çïæËišã9æ,™çñ1Y.cB«2™dY±ok0+jj Mì“4Ş-;0îCºıbO!¸>Vœ1ÏÑßx2A[ mğ“ş¥¡¸ÛBê3 PP†Ã–•ğ9ä' 7 §$_Ä¡8”óƳIò,Ö®õ§Fª‰¹š“…§pLp ¨3‡ïì·<ÕúùÖî¤Ua7ÓŠ=I¯y+‹]ï* WÚ‡êËA:™ŸÌÒ ZÛ{m„‚\îå^VûœşR’=Øó•¥ŸÃ¦¨Fk©ª^<‚q4̦0#5(Î)g{ÏéxÉúí—Ş`ìp{0"¨’?ûÄúʼnç?ë.†B-¹Yc¡EH±QÌ_­ş+îHH¶ÖG)Á>Ùj­8¾°¡…#Üo™R.‰€İªÈ–ˆı u’´KF®k'W¼Öe© ¶ŠoÛô…ÁQlÛ¢ (R@—XûÒTÑQAá%Q$~½Œkíy;9ãÃÅõª‡_uğö±á¾¦îıo›Çû_>ÙÅRã"ÈÀ"¡Ÿ§şj¡…`zó³{Xe[hœàX#L]„c¹ã2½»Â2Ic] uX± ⯓fàc~àæ·­¹ÇWZåne`Ç"ŞqQuA³Á8-Ã@Ï{§Œì/s^Cíõ¨‹ãíşp&ÃpšbÕ ŒÊÍè­¯]¿bõäèF’H"§“0O®“w¾K`ã£öWıš½NN] è‚B4Ù/»SÙ¡šê’¶°sÈ]±+e)QûÄ…°XEy+ŠğÆ q”e–k‘-`8«°èøZXZvVÚû‹“mÓü¬òán©€cspä•ÃÉcí&¬ohœ9‹ñ#îôÏ ÿğEC"Aݨ“ë}öĞ3½×v£’¼’< Ùİ“¶‹1È zcÛ&o$yzÆ*o?2Ò`ZjDE”#Q?›ŠÉíÜ-ºLÔÍO‚h’»ûÃ;¿Õ8 :)KÑ'åà Ás_Ğ¿ |SÅç‰ñ*6ğ#ˆåÏÓ¾kJÚ¾>éAïç‚¶ÈÛ.“KÔJgr×F›¾Ô¬^TÑõ5ÑìÖêJÈDMÕøFŒw‚ÛpWÓTÈ—PçœzL±_©Gux ² uE[pYu1ğêä ç+ÈÏBò]3´¶Ôé¹¶³R}QÆhB¶ÚRõŸj†âŞéğ'¦ gôô²¿7‹Êú¾ú/¨°³ÿ¿k´\Mg‹4šÌï¦yÛ½é2¼t¿¹ù;p endstream endobj 1666 0 obj << /Length 1106 /Filter /FlateDecode >> stream xÚ•VKoã6¾ûW(7 (¹¢¨—/-ĞE·hݶö¡@6†¢l!²èŠ”òãwøPlÅr¼{Dgæûf826Aü¾ˆıÿ×õâç¤ –x™'y°®RR\Ò Ï œĞ,XWÁ}¨z¾Ö~øt®Yf˜”àŪü%#D) ÕÀ£¤·n¶ïAœ”!Jaça†œD^f#˜f­¸ö¯P¢?DàYTßëW7»[nWºlç¨7¹n¿ÄY qrãFúGP+Ğ¿üQvàº‘İ ¥2Ã4ü°gı¨¾Ş€ZG% ųv@_b’BºíøqcX¼ —;OG9´Õc+ùÓ ÈÏ{›KѳS„G³{ÆÇn}¾øé{~®ÄáVf{©½† —Ğ6"aÓ9Œ×ƒ0ş´HŠiš'•Ä%L’e%Îb»Ä$‰€I’…Ái‘…ZºÿŠG”„[±nÎeß ñƒTv•èøLÆJ.âwhkŒË2¬e i„›nãDš=Úí*‹°m”V^:Z¬lş<<ÌO°€Ç¨Í´sñÊÎìEWùeémY¯>´¬7Œ ÉóÔÛ¸/p„²b İÀÀ€µ­Ó“µû;¦°2aZÌ1¡ ÖIX¹9ëGmàvîx9:.ÿ?¯şøoÂØ—kÓD-úšqaw?HbCÖüiBOMZ—á¡”Ô’6Í„–ÕNÌéš~¡lø,â7IdÜtÆåÊÃMØß_æè3Åm ƒBŒó°bZ Ÿ•îMeÌlßVMË,•Ğè(û'PE …>#û¯w³V­TÂ[Ù1jºı Ñ^öú'@†zwbhJ'¹qDâ/I6ãñ-ƒæÖNì4 a›¢9a×LmYRoõJ)שgÒÄaAûä^t¨nÜur«Ë¦U4Ã÷²Y pFŠ¥Éû°÷À©c£ùÖäu'+qÅ:EA!;œQς߷/‡‡{ñ²qECÈYÑ'I664èØÅLe¥8NÓQçª3‰cëÚÓ5Ct·Ht‡¦—İNt~ï’çi~IʦîÜÜ̯øx³ '4Ö6LÙVûÛzñÿ‚€fxfLI$KŠ‹‚|·¸ˆƒ Á¦Ë28ZÕ]@1¡¦·ÁjñÏì‹%Å)ğ6®²‚Œ¨‚"©ÚJ¨üMœ5ïtë« ‘¨nÙFùͱEw7«\vè,ÛÆv"¿{§Ök8›¾FÌĞ»0Cĺ Á`ãÏʛʩá­4Ö:¨Øã'¶–sÊ À•ï5í`nÁBlšÊw êÚ¼Rmz õ‹óHP©•ò 4Ï Xߘk윫3s ¼“>7\¡9À;ñ:Kœei¬fC:¥Â.C¯N Ÿm/˜wİÊ Ü7®ye;GÛ‰+û ¸QÌepú~?‰îC“ª©ÙÙ£fr^RxŞÀëÑ^ú©sI²db‡õÇH{ endstream endobj 1671 0 obj << /Length 632 /Filter /FlateDecode >> stream xÚUÉnÛ0½ç+Ô›tQ[ìK ´h ôZßÚiä–D¤øïËM²ãPM/6‡zoæq2Qı¸Iıÿ×ıÍíÃ6Ú%»*«¢}‘¬J¶;Uå]’åe´o¢ß›o1äy¾!Ûnjl&1„›_u¬·±l0ü“–©Ô?$~Üÿ¼}È.Ã¥’ìJè€jbM UcÀ$Q€ŞÑÌwØ^±=Ö,á¾ã5í ¡ C&©R'O¹PÀ$PP(z6ĞîKˆÓ±áÃ]¾%ny ©<ÄuRŠ»²òR&U¯ 餢JëØj´9dË:¼5î -1úcÄgôôˆ M¬§0ºeÚ;¨…[;ˆ¼È¡‘ ÷v#å#>fiE‡Òa>Z±å6­t R ¤}ÈıÈF¼toíNó3K¨Ÿ©ø¬ƒe¥³Ÿt9kij.‹ı]èš Ìæ˜òÔ?ñÕğ®%Ò@—´z#*ÑŸ«*°ç/ÔU¢:,Ó¡ 8>z<>­ ÑÂí ÛV;g:ÌGÄéM?„«Q¦•(ÿäÙ°uœGà}÷W3V´®Om Z.zªV§KWÇÌ(ªuÅt[X2y’?̇vFædXÙõ$ti¬ Œ¾k\Xö¾™¯X눩§òè;BÎi±G`|ó1˜ÌÉ·›¡qi½û™0oĞo*I‹dGʫᖠ°C*ñŠü‚BšĞgşõ Bëg6àùD 0 ®&6½Şx{¥LK7 tµõ³®ıªÔ(e(o¯‚©9v}y/¸åbX޾«‡¯(’¼Ê´ßŠ$ù®pI™¿á|ßßüèc endstream endobj 1675 0 obj << /Length 1806 /Filter /FlateDecode >> stream xÚ•XÛnÛ8}ïWøQ*F$%^ú–¦iënÒdã´»@ÛÅVl¡²dHrŠ ?¿3Ê‘m¥»‹Åëğœ™3£Ä“å$|xûçÛÛW'ï…ˆ„i£ùäö~ÂU̔ғTkÆšÜ.&ß‚·Å]YÔË&Û¬BɃÇğÇí§İ&'ïÍÄ2«„Âõ ³FL¢T²¤_ıÿØ[0ù¥qL«ûºYg]QWa”Ä*èòy(L°ªê²^>bŸhèê¦ËîÊœ®6a$t7°Aµ¤¾Y¶µaÄa«5-œV¸²Ë›ûlîW~Óøf^ͦC›34nÂS–X=‰8g6MÉğéìêdz~FRÊÀÚ$8¶“àôól #çç44ëÔàq,l%‰ Dµ Ùç öÚ[«Ø>Q°àLò11ŠØ_EYŞÌÆÁY ÷ÎzÉğ,l|ª«¬[e½İäy ÖX΃ËlŞÔ-uÄZ¿ןÎ(p…tÀ¤0‚ÅR‚Φ릨æÅ¦Ìa“4A}ïp‹„R,•Ê#§úÉaʃ–®™­×&™êàÂuTËm¶„ÍÜÁCâ±bÜöÇzä>Á•€î-ğ–5„+ ÉĞ•9„SşNiNt›²€ı Ui8¡ŠgTq*¢JıèJù¢èê¦%OŠR“ÀøCÑæ º™(fµ4ÑT1 a&™âŞÅ’ãû&ŸDƒIMÎî€,¨+:¿[åŞÒ ¦T€º pJoæÆÅ/ ›|âöõ.,ãC†7Lsq@Q:JÑMAî˜5ht"‚?ò²Í1æ“>$¡s’Ğí….QÆQ=·¡‘A“Í}ÊÀ%½›¯sš2]ƒš­s',ËC£®?’F=®ïÂd±Äóz½ÙÒ¾#"—@@x(õÉÓ')Ó]H\Ãjs lêß! B€HosÚGC>øşgXÅNé°å•TÅİC^^VyÍÃş1İ3š™d({é1"š<îÉŞÍPöˆ ‰ j´Ç i!¸ïi9; ”\ìćŸ½`œm0Uí’ŞÇb¹Ê›èÊÅÅÂåxÒ¡A¤ót Ñ ï>hû ÷Ò#úÄX|If´êÏşŠtÕ% nÍ9†—6ÁçÚõØ ï8–O7 Ñ‹ ¦¤Ä:‹G. ÍùPvè¨<š~¸¾8ıŒ/1Û$2£)[³4åÜ †Áw"ÍiI²Oš”>¿Ó­@=¬ï¸šwõğ>æ?UOz4(Ş‘ìX)AıÑŸÛÜ)ºJtpY»ÃPÆ[šà´³às¡”ÄÎŨ‚‹Jh5e"8Šø‘Tc¿+}EL‚B0ñ˜ sàÛÿ[¿áäq ç T³KäÜšc¡I ”Pê@«Í(¦Ç*¼'Óqğ¶ÙνܾC“Œ ë?'Ö4²®ïŠÒÏjë:¨;¿Uá7ÿ}ÜJÄ_ìâvÚçL‰pŠƒ –*Bx@ØÏ¤&¸qS¨C´{Ú¯‰ímWÓÇÌh`K&Í.qâ—óO‹£d s˜,í ¬\-¨ƒ@Æ jn©GŒ>tîØÕómÓäô1Dó=¾,‡……ßœVe¤*M±pâ c_ªâ!t1ÙæÍÇ?®›¼mŸoinC´‘ËãÑ[^fÍOÔœ2ª€g«ĞÔì‹û‚¸¯İ`Ş Øñõ¿ìCñ=æ²n®T1´;’n òNé&¯ àkÉ¡éÇZšKu4`»¤i;ò¶şJCæeÖ¶Tf¯3æÃš³g İÕ€Xeʇ&ÿÄqªG°E‚Ğ8T W¬ï+…x¹Ò‹È–½¤5(÷Dü$~[îr;şo€«/kg«sÁŞJZP"óƒï=ϲ¦l»¦^û)à]¿Á‡¬½ó•O‰¹û )`uYüt›û³<ŸÍËÌõÙæÂ( vgr,v€ `"§×Ë̹Ë6+Ñ&ˆ’v7³ÉË„PÜgEIõ)ãG9>¿Ü\xïRï[·êºÍ›““_¿~1> stream xÚ]R]oÛ }ϯ@{ÂRLùºÙÛZ­›¢i«¿LiXB]TlGYWíÏ÷b¬ªé \8ç\Î8i 'ßüÃ|Ù,.®kb˜©dEš"xÅêÊ VL* ÍléVÈûâ¾Y¿ÉȶÎé¯àû¢Ô\ÒÍ£ÿ[ÈšºñÈŠ²Ò†~ÉÀ©lH[Šw£?DT Úæ‡Ñvî9цñi‰{Â`•±¶KÀŸ¢Äqo?%Ô’ÆG7÷Ñw6ºdHÎôÊRf`ö~'”>ÆbEƒíÛ“mİ'–$ת¥¯%Ó 0â$½úİi Ôõ»Ô+Mm¿OĞ;!)NÁì’wĞôfB†4´™ÔaØÎ÷íLøéâ3F-'×å|ê™íÌU°Ê*¨éÆ¥VèÈÇl·Ìşß?^Í`şÙşSQª• ÿË –yµ9ŒØŞy%Œ©ğÍ´–t=¤«şgûŒ¬íÊμì‹Û!¤:[Ï'YÿÎ2ïjš5ı]Ôxm‡e^¹½Cú%gÿIhÅ R‚’Œó¹“8£}m¯^,²$ endstream endobj 1752 0 obj << /Length 1236 /Filter /FlateDecode >> stream xÚÅZMoã6½çW(·(¹$E}ğĞ(Ğ]´Ç·E²DÛÂÊ”+ÑIüïKYtV’)‰ ½ÛC °æ=’3oÇAŞÎCŞ—4xş¾~øô™D¡0Š#ì­· ÃÈ b ½uæ}}úSdüí—Ö½¿©^‹=YHÂæ-äÊ`ŒıöóIšòºÎ7_5o}úÜılÁÀ§ê•ËGÕa‘‡½ª‰İüò÷—ï+ğ}ÿ ûñ.ĞÁ&űFÏ2Pç;‘àß?qıÇã-LfÍÅŸärÖ'³•¼2?pP½Ü2#ÈX`K‘I:X¿xMε›FE¶ÁØ$´ÕB3 -Ά-`Ȱ%¨? ªcõ×+ÎàÈtoÊ<}d»àh[ÇbP ‚ŒÛO§»ÕG­r¹?p™§ Şç[yË öa‡– (šd c T‰á¨Iq`»p:][:V?¿XğüÂSYV¥5o¬¬ |Å·#•åßZÇ2@×\>:&ù ¶1É[ì}räÚ>n’öÜPc>†~|§TÓ±ú¸ušç JÄÎuÑQd¿hv^ÒœÀ(¼ºÕ_ºT9®Zéh ‹bHƒ{µ0lÀ <¬åeNW»òÒÍÓ¤(ÎgΫ3W.Œ„|“K–'!]Å-ıš×$"s-p´¸À¯à¹IѸ(åÿşöSW®%fs–Œ5Ò¾òïà๬A-«\ì ÖQù=¤ ÄH0cÖu°Q&;¹¿eÁ(ÄôNfJÇå`4‹ôv†€In»ÌãGûɃßV®ÆÙ»ÛbX9öÛ9tİo/ʵ›¾÷ÇóŸi=¦óp=ÿƒásÀˆùªcb q—õ©QM,—¦«¥ºf«lî2ß»l ›d2:X¸•6Ø •üp,+É3°ÉEÖP"®›‚Qü±]yUwPğ®İ@ò·Æ¿d<5MBh5 ”>tfp‰Õ£Ãó­ ØZ'QN¡V‰§/Iqâm:ö­Ût—¶,²4©ùH‹²mq8ߢè-ú ^©‹YšH¾++“ "c?²¥1İ*®ÁnxÈ\ܼ ‘ î³ :Ö8üʱUÎáwZå;~Yš–½h13XíN#®°EÙ\Ï”ÚlNÒ1÷0¥‹“ïŸåÕÅ!ÉçÉaÌ®GÖÃõЯG&¥ü§+Çô›Û Sş]ğë2ıÆ¥£Q ëÁLü\åh-6I…!²>:3p×ÑzœÍWıÏÜG:“ı?YSŠÏc³Ã…àdi7nÑÍ _¤BCìëS¡RJò‰òá×Yºÿö>ıÇúá?ñÊ endstream endobj 1594 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1701 /Filter /FlateDecode >> stream xÚÍYKo7¾ëWğØ^(r|A€<¦@ MnFi"F+° ı÷ıfå‰%kµ²W:äbÏr‡ßÌ|‡«¬­‡²ö:ÛÿrÏ¡"± ¤%ä’RàB&P’ R‚læô T턼€PBe p µØ „jÈ%qh<€4س‘ ë‰ tğ”JEğC¦Ğ̆œ1FbĞN±dSHUL£¤ Êš†·}ãYs~°™M*öÑåZmÌbl5™„Y=™ ‹¥÷AÁg³S¨ƒ¥P4AhÃP Äf1²1Lªæ;Â§Ò ˜Ò€YT ” ˆ—Z—cÔÉ\GüœÄ‚0Åà'çjoA “±PÀÓæ­fµ`#‹˜+`i<B†¤æŠÚ«‰P¸ªyo¹6s p’š èr/6†·’|"$u³€'É4 )¤b +4p\8³€Âİ"+Ğ“ÍX ¢€²õK2 Á‚ñ I [ ¬ŒTµ©X-Ùø„‘ÖŒ,¾ôa¬–  ‘ØM öÁi&Ë.XÕl±&ÓlS[Î-:4Ô¼#k”ú-([bdcDì"H}ÈLHÃb+,+|7ó ÉöBÁbé°‰Jpée=X­C`µB1¹bÙ´±1Ö,©Äæ6øoP°gšeA¦•.ƒöTÚ¼­¡R²°Jen‹gÏË7ë«ÛğìYX¾A:UìÖşÂCÃ|º“ÉÀøî©">{xş|±|w½şü~u.Âòİë7aùaõı6|\à•øïë />ı³Z,_ÁĞêêöÆöWµù‹å_«›õ·ëÏ«›MÁÆş\}¹üôrı=\˜+¶ƒk§0ôé³MqğÄ-¼CÚ8wyûŞiLåãaI%Ş¿¿+²dì°Ã ò¿÷“È(“Èè³É(?¼>@Æ®'й×:¦Ã.OÛÔœ…İ£ÃÊÿ|:äÛ ÔrìE'4²Ö(UBØ¡ıs&ÂúaõÂÚ1¶Py?mB…&"ü1Â±ûf–yŸ°œç–éa; ÔAÕŸÃUf›3Ôß’Ûåq Jû Ôc l+ !‹8´´ƒgÊ=i³é ‘„ <ŸšHˆ›ùñ,7=q¹—/®®Ö@»Ø´·æÏ³ƒÂbùşÛß·Ãó—Wÿ.–/××_V×xú¸|»ü}ùê"æÏç[;S´>Œ4vëJkŠÖë)KT+,Ë_ïÃò·õ‡uÅ¿Ü`âåú*j¤ü«ñ²Ãş±dÜQxX¿T§ÇlÇó$#Ëşb1Í_,Şx:Ü,θjÜÇ`¶†;ZS)Y#ÚS´İ-ærdÕrÚ^µ¡íş#B‘ĞD²h´6YT"é1GöÓ‡ùHúì(Œ;š9ö&gO0a%?¦{;°æGQF¢¢Ğ#˾£ ØiBCJGé¡ù…]ªzIu¤˜”ŠIMYêGóü(FÎÊ'Dqì ÙQíXv4”KlÒ§4zó­o ûh cÓ)?„ZÔ2¥Á#kÒ()¦¦S‰bO<¡AHìò0õw5ÀO9J(š©MfZ¡'5Û5³†~_LÏ‘‚#m_}lÛ×ò~ kûj{Ôës㬺6TMO‹sû2Õèî2ÕØqA](.Tš ıNè~)ëÙGîܹ;rwäîÈİ‘ïR({fd?‰! 삸 .ª ÍGΜ9;rväìÈÙ‘³#gGΜ™™™™™™™™™™Ù/¿•™™™™™™™™YYYYYYYYYÚ9oåDŒK0ÛïªQqyJ*£øŒß„¿bÃÄÌí|×qêf¿œ×ñÔ¢ı"lŸwªUÀÃ^ğ½`ö3¥µ³ H®‘Ã]¼Xw{ЉDgt"SlH3é)vmöÃx¬FMÊQ§¤÷ó9‘[bŸCjCc2ÎTÁnÜÅ~ö9ä÷sÑp ğ𭨢„ãØFZáL?ìD=+%ZI·ïBV[óæ;<œR¤H`âÇîø…d‚‡ endstream endobj 1849 0 obj << /Length 1364 /Filter /FlateDecode >> stream xÚÅZMoÛ8½çW8·.vÉŠ¤¾lk`m=.r+zP$Ú&bQ®D¥ñşú¥lÅIä‘eŠjt‰s°ß{‡oFòë…·øz㵟İİ|üBãÇ<¤áânµ ^ˆã/ ”‹»lñíC–h*ıÛ÷»>~yı›0œğğå?š/oAeCÓüóï×›Å7Äû@|Ò~á(¡ÃZ0DæqüŠSÔå9·a/bq·`çܹTµçì&Hó'boÁöBé @N1ó&#?‚õ›Íߟ ˆ¦tª}oÁÎT"-T6Wì ñ¯ş}²~/’Ù²¾áqíËs^bЉx[°·¼â¾^£\TU²ëæÔ~Ùb•Ô[6IµA«Z¥Zê\ñ8Yt¥À»¨ã¬+D*ÄÓ®(µÈнT™Tk@ õ0åñµ[âE—µ´h™O­%¯EiQ®’H‘˜á0¯Ô@/Kh± ¥©Še†2Y¥Û¢¥k4|ÿ’¡øüptôZí¥¨êTn•Ş!ÃÊ %£D¥Ë:Õué¼ñáØ×âI£´ÈD Hˆ1'×JˆrïˆÕ‘° b³øÚ²ÌøEŞ àE«²ÈÑZÔâö\÷1ñ¯]»¹4·X] ?€ ÉÜ’iVŞb±Ş:ރC´à5ØfŸàØgÓ„¹Å‚˜QQ"½©Õíc–H€³ü$á1Ù‚Q°“@FK¨äZ%[@@c?¸Ú€1vÙzÁŞ*¦Jë¢Ü7%O$ùÒ1„…öQ¨wÀåà“«- ¹ÔÁº¬¨ú)uº1&ô?™p,6C"ÀjSï¨cµ¢}.7”bŸ·´"ßé}o‰ )Bšƒ×b½Y´PÓTb]uZf”'jÛcûıiè[¬}e,Jt‘ËTê½kÅáÌú¬ Uç¦ÕÖèóVB3«^ßçÖ­ş‰?“«•(…‚¼5ç˜Eá4"Z,XÄÁßWb’ök@è6OBr‘ß‹rÙã6'Ú V Ä:Ã`w òñ)YÕ÷æcÎ Ô ŒÀ{ŠOË集»Åêp?ʲP¹P%pM°4¾}”¥*Jrá¸~Ò™t?»CpêÆ3ÅÚ4#¯Ä2›rµ­vl`*y²ƒ(XˆCB'bnÁΙ—ß 1Ğù‰GQî]‰YlÏû”¤¦ú&Æ.PÄíĞÔİÛ¹?æY7› -ZÉ­p8pCç72Ö{ƒ^Uàşeù!ŸHÍ3Ú¹œƒSû’ʹqØO .ÇÂÊ‹ Æ4#OR¿S6¾îEVj¾KÇn`¨ ‚ÚCJµ*P&eï”÷úí··/ÖeõÁ– È­ğET`ü ¶Ie\HšŠªr?#üxGI^˜.E¦=¾˜˜”¢„O¥§E»¤§Ò‰®+”n=µ"~h‚{…Ñ+ôÀúäHõ€Ò¢†K•Coº}:¢õç6vO¬™½c»VK±ƒ€â§rw©N§¶’ÿÍ»z¿›u\Û¶!r¨o;7Ùÿ»39Of%ÿÜÌoÖPö[n=ëÁíIÄŸŸ\‡¡@ÉX½13´À3'öÏó.~9Wö»ÆT¨PKgÏóŒÏzFVv`@Dïh ï¬7`#`¦ê«¡ºó«ŸyoGCCÄÀdèHŒòdçíQGNe߇°ò:q4Âê”Ğ\ôW?_mk™9ÒÔ¶(f˜J5´(1;mşY =Ã(Æç‰>¼íü*çĞæ>3ˆ±éf¨é>ŸyIğ6%ÿ¾»ù­Wx endstream endobj 1754 0 obj << /Type /ObjStm /N 100 /First 1019 /Length 2719 /Filter /FlateDecode >> stream xÚ½[ÛŠÇ}Ÿ¯¨Çä¥NíKİ@l Å„­7¡E‚hŒ<çï³VõÙs’€Zô´F5sºW­ÚµïU#mÌT’´‰/&HÒæh²Ù9°Tm=ã©5å ¦´4up€K[ïã[™z‡Ñ¤¶$½àm¯“#n@÷’á1’Ô·»»&ìßpK9»'ğ&²cÇ[Ş!°^¹çÔzk e¤Ş'×Qñî\{±CGÀtàÓQŒœ}¦1;çÀ–M¾[©BNäÚÓ´µJ(ìÂy0ÛúBÄ«\¦„’ğS*c)KDdYd‘Ë)¶=€7˶ÇÜ¢R|£²öí,¤Œ •¹´ cñüƒÉ:EÏvÌ&Ö FiKʈŠ!m{³áëz Ñ q¹^-¾¸ÊÚ*Q+|và#ÌÀ¥‘¿VÎÙfÓez«ÃÈlà{dÒ©-&B£¥Ùb6lȦfø¦sHÈìĞ?e0É@ TŞÕFjØÉ’¨=O¨Â“$ÚÈMê—Iô~$‰‘+¢Á(h%;|ŸÕ†Ÿö“(8´‘ÑŞ<—1—Ÿ‚÷fô‡¼ç—IHÑã]•©æ‚0®ÊL³Uù2 Ï ĞGƃ'•Ğ’é¿LbÖã]Ìà®J'TdÖs"GHB»åZû“$h3÷É$9‘€<‘蒇̓I œÛÍKhIâɬ㽑ğÑ“I@§ş›Jàdâ'‘@„œ| T‚a‹ÉÈyÛI&ê‘‘{?Yy„+xʥȻU$['Iâê¶e \!©@˜Y͉]:‹Â–á¢:Èéı–áÊ€’–³,ãš\¢ÆÈì>’KÔFåÈY–±q©ˆUs<…qi–‹Ö“õdØ«}°“BW(²êâ ¡ :Ï¡à a¢úWh!{¹5*ë ×9v¶bÚ‘°ZÙ½ÀV€œV İlgQ¸Šiwê) d¹õ½œîÀtÊ'\{A³` “£ Eí_‹ä=•¬~+‹]`sk¢şƒ\|@S÷ܤIaRÿ“·‚Õ@*ì|õì'1€B² å¡»E™B5ï¦0ò ûÀnH_B`³hµCtOt‘n-³“ÇvH‡4ê9ÇÖ Ù ãH»¤ LYͪªêmë…ì(ÃhR@”ró­B‰ĞÉÆñj…ìxÈq¤—†gğ ì„T6‹{fSp5BÚIbP5Êj„,€£,}ëƒôs(Š+¶TÙ1¶dPàach{-©9×G«#³/@ä\=ºWú»©¨bÚÖ} Ùmëì0°ö êÈÔĞ”9ÓÖ‘³¤PàŒ±l¨å„”×|mìøÇz¤Q:÷k÷£l!“ÍÛ“Â<ŞEë„"Š=ùh+H©v¤>Ø£ëƒ"w(;*iÏÁ.¢±YØÙË!Ûñ¾Y|•[°Zån?‡C¤ «²Ğù”¿­öË8‰‚Ô\½6ï6G­[ïeÓªË\­—şd™«ó2wİt9ŞI*J©ó)h³õRË‹z`ɼ½øµõ£wä‘«],¨4÷Z‚GÖ‚Vy9Æ–G£ÆVÛz/¶×|9Ô:!í6•½)j̺u_ì¬İ¸ª»/}ŞTbu_öÊ«)‡N6_¶cEE4è[óe?‡y«ùb7«û²KBvTl¾İ5Lb,N_i¿ü‡—é­°«YÒéòêãã©cqAçúÀ«‡O é2EŞcÙÔ‘x•eûf$Şá/]^~øğÓ=¦Ëë—¯ÒåÍıïéİ.ú5¨Ü]¾öı§Ç_y1bsm¿>üöùÃıúYß~ö×ûŸ?¾ÿîá÷´ÄÑDÓvvùúıg¼½²=¸Dù+&^×+Ègİ®¸Z z F âáVb 1ĞX <ܹr äÈ={ ÷@îܹräÈ={ @<yòäÈ#G @<yò äÈ3g Ï@<ùª=2®šƒÄ@c`1ğÔ´ôŒ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²oÈï:âí3OØ\«ÜËñÎj¿Üªä©‘ºäÙ5Ge%¾bÕ„ ‚«Ğ³X4ökj†ÒŸ7ÂFCÆY8jÿ½&ñÁ,<+œV“‘7¨†ğè&5„±¶w#åX¨³°şÔYó¦Í¼İØÈúÉûQBçb? 29M7¯R‡®û0a!•M)õ“-¤vd˜×³4ZHeÛØÚÙ²¨¤ø×«2Õ¡›}G7§yÆ)™a»êÖ=ƒ×Ê^ÙØQÍzèi/Òj¤fƒZÖÓo7½Ä¾Œ½Û¾z¤( &CÄÆÌº÷¼n éꢽ£•q¤ºeãÑ;êïj+t(uÄÚîeß#»ÈŠŒ ®/¹ly^\@vuÆÒ½<òf§ñş;§ğ¼îï´Ì±:VsïĞóHID· ÷ÀûşPÏÒxõº –¶“HTË,b­ÃeñWMZew(ÙˆÕãœíÛ°Æ6‘=Ù†õ–§ŸÌ• ÖÔ#s¯<4­‚*8ØXÚA­ò>8ôr·4{Q°„÷Vç© Á¹›by*ÚY‚ó·ÀPşÈ²Ñ 31‚s¿ôãİ•ñf Aåå%ÈBúI ÂW)Ë@vÓ‘Ú±ßcì€î—G²@.Ãß[mü•%¤xìh*ÊÂ*'Ùh8+´ ş²âÕY)ªÂªí$½–>> stream xÚÅZMs£8½çWà[¶j¥ @›TmÕÎTíq+·©=ÈF¶5áÃ+pjòïW€HŒ-Œd‘™Tb÷{t«»_7ö½ç{_ï|uıóùîáKx)LI@¼ç­‡ˆ ‰=‚c„Ø{μo÷[Áê=ÈyÉ~û÷ùï‡/§_À ıHZë>ù{ûiŞ÷'ZŒö柯wŞ7†á=Fêÿ=ü6P¶@B?E½Å+™ 9ØĞ†í*ñxvI"Madž$|•„²Pı`ŠÄAğ‚Êëğ‡KJ( ñƒYN…Œ1’7¦˜ôŸá¦0é¾r…ãÓ%§$)"˸IÙê)…°í–mşÊÀNTǃ6\aè“Ä £«LkgŞ8¥r¬™Ğ3ñ¥'ÃŘ(kNÙòœ^n«K$†iŠ $W (cZü™¿/$Ò¢(^ˆ„2véó@d¼P”± tğµc›*Øù³ï«º%-˜ãÀø¦øçÕ—øqƒ`)ç+cÏ ‚•ò"ª «ë_™Š‡J4¿2¯¹à§„b²ÊÃÅ¡76~|UÀ£ºÓFù‘lœæÅÏœƒŞÚØ ïDx)›%­r„¶W*<9—$l^’ÎÀ5ØQ ı8\[Ó9_Æ^ß ì’ğ†zø_°bÍD=Ñ—о26儉ªœÀ/åel OÎ¥›—‚áùTh‚ˆp`ˆ›¦Wa•­ñCÛÒÛµ€†ıhÀ¦ÊØĞͦ/w ©Àº*45)M¤F Ä<–©îJÌ«ñ)‰ÄüéÔ³§RµÖouʧ ½döÜĞæŒÜŠ Ä««¤œuĞwpR |˜Ê󲌳•±N*µ¨}áyš½`4[9¦@ 5¢”eN^ÔëØ‰YÊ~F¥*[£ ÌÛÕb~ÔÕ+ˆs™x†<µĞ[ZÙAó‚7 :62½]¥92/zxùâzÊÃØè”Pë<şwdGWe!Û¼î°3&Î@Éøn¿®È´›\ÙÇå”f*ÉXÎ}!ºÃÙØ£‘_¹ŠØY2§²áB6lí++Ëõ#1×°'ø;昴$± ²ÏòëÊñÈ/Nv"G:² –C“£-´¨5!E" l]Ğ?ºU#"‰u#WËé«Ga³ÌuI´ô!Õ¶®–mC×ùÔ)µ:$3şš<$VÃ+±Ø°(ÍŒÖ+İíx©õв6f²yyrİ¿Ææû×µz9+_¹¨Ê¢Ø^©àmDt‚J—z¨¬éèü8t9Ö¼l·Àºu—ƒ4Yhõ6XçrÏ¥ßz-É%6ãr:Ut³ç%›z_mSWf_Ğ\Ö‰¢ ©ôͱ¢F¡uEí°×oR­½v"ɱFÍlØ45ª#°ayîØÈft¶¦‘õÈ{Z–,w ºïßôMUf²¸Ñä&ğväüºã6¯/'Éc[IŞá³âĞ´?i«ºÕ²tu-;˜ØWÀÊ–ë~`ùN:¹) ‹ŒOŞ&tĞÃ*·ÑwB«µ>¶ØêŸPø®Ë»Ï^UvÈ­q ùŒ™ŠxUK9(´]Ö*ïp¨İË!‰ÛæšÂ$Iz[ç_Ïwÿß„} endstream endobj 1851 0 obj << /Type /ObjStm /N 100 /First 1019 /Length 2670 /Filter /FlateDecode >> stream xÚ½[K«%·Şß_¡e²Ñ‘ªJ/ ~0q ÁöÎxáŒ/aÌ5ãkpş}¾Oê:/Ò×ÁÌ=:GİŸªKõ.un#‡r²*¤V,è”PT8¨¡ÖÂA mtzš9À…©âş€–G{À(2ó7ÜmÕ8Â%·c„¯MG€ìU8ºcÌQ ’¥rÔƒH× :ˆ’S"\#gP[“ $#<Á®‘ñiŞ›KмfkP•‰Ò‚Zéõ e®›GĞ&$HRĞ^ÖLFğ9D‚å5«ÁdŞ (Óy/&¬LšñÇêšmÁÚšíÁÆš¡,ªğø%Ã`xÌYpºØšÕPÊ|^µPÚ|"Å^ôJZ´†2Öl 5 WÓêâ•PU–B-R°†en¯3 µ ^gêy…– )°ZîäiI¡©k†WÎÜÑlıV¨%7ŠÜÕ±FѦ‘¾b¡·ÉçRBïú˜ë–F^³!)|6lãĞy/a”9‹G‹fÈ€°b ˆ„dÎâOJkt¤<±)½imqn²‰^qUZ¤U 뢭á†Ô'BÃTZûÜÀ ò°XÓæµÓ 7äÅÔ†Õr™ÏްZ^$6¬“_[§L65¬&iÒĞ1%‹ÈuD'ç;şˆ•ŠÕ:n².Àj²ˆìXG‘«ÉR‘D]:Ò1¥kã¹oº´„0Z¦`ğ©´N¹™Šå~xõêáöİ¿~ ·Ïß¿z~¸}ûë?ç÷¿½{ÿ¯‡ÛO~züğ}‚yH?ܾ¾ıõöå÷y~y¸}óøö9|-‹à&ôÓ¢@¡ö1CÊD-–*¸îóğêU¸}nyúî)ܾ úùÇ>FŸ}ö€ÿ?X8*æ" ÿQhÄDbi¶‰É‘ÆPRŠÕØ ’S„¾î!"«M9‹‚OI-VšŞÑ#lî&N€SZ‰âÌm¡Mƒœ€˜±™‚ ½¾s¢Y¬’7qhìD*ö¡¹J¬ª›ˆ h ‚9è»k¤Ñ) *›EBzÔéØ[¤kÎÚc-'r™Õ>'rèë£0Df=Lğê:*´¶(p’µx!1,‚˜ âà¥w!%20'"ñÚÀ ÛFD‚z JI‘*´Y… ÖV7‘{Lğ !tA$³÷ÿM„ö i(™Ş2ÔÁD˜Z52rz¢íBÕ4bƒ"ØŒ J”*X­&ÃïgR©Wî…–È ¬tˆ#b-„.‘Ñ?óˆ8h†X¦!´* r ëmϰ¢ô›Ö]¼8ÌD)0™ˆ+3QjÍú."7T&Vi.,TÈN s#\4Rš|Íbئ¶O4é.!šˆ5WÀZ‚Ęrcf»Ğƒ!1†´ÀƈéŸö€(¸ö~º!ãzÉ´ ÚzH¦AVdôİD0Ȭw:=û.å0˜ëÑ䮆iİ&* ‚™à, >dP4 ªy‡!ÆTµmT z™e©«$†Úa2Õ¶ æĞh ßà6,su˜-D™ZöI¦ÄÄâ¼7ûֱ` Ì–¶İ4À}'ı/"2D³ŸŠf¿^Gî;™İ•4A2‡mf…Â{³¸å¬Ğ‘ ,u7` ë­w*ği¹ïÚD2™2 ÿXğ„(>+¼»î¦î; ùHÒ!³]VóNÃıd©@"de›l"ÎTŒ<"ëµ ·Î² ƒ «g²iéúìCS,"+BL  Ÿm›Ù„ßÂn52#…S•ÚY¼1»h88!4TEîœdE%í–MA°—ëGÙHKÉÛdó5¥@&) +Ô$EENÍf½^AÑöÈù® –í»¨8Œ· =eAß·@dKÙl7YÜ,¸T¼Ti¿–ŠU-ñJ»WK^¬´_*™«vå…v–àÁ^.´ ÍÈs ¢q6x^*´ŠhVtg01¢¤şr¡½· ‰@HɪòQggv>ØÎ}©Î~)#2û†—ÊìE®/Sx™İË/ÖÙ?IÕˆ…ö¤÷ÜüÔÙÓõ®ÜëìîË_®³Ûï6ä+vP¬û›p{ıîùk¶§#cöã‚×OïŸ'Òk„--¥ãÊΆöãºÛ›Oo¿}Yáöæ«×áöİãoÏá‡ß?鬺pûpïŸa‹Ûx?è—§_?¼}œ¿Éúíï?½ûñ‹§ßÂäAÍÚ ı}óãÜ ©ëy]8ù÷ rÒ3ûäÇ@}`>(>¸_Ü|Ğ}0AM>È>päêÈÕ‘«#WG®\¹:rsäæÈÍ‘›#7Gnܹ9rsäæÈİ‘»#wGîܹ;rwäîÈİ‘»#G<y8òpäáÈч#Gò8„ ƒìñúÀ|P|P}Ğ|Ğ}àÈÙ‘³#gGΜ9;rväìÈÙ‘³#‹#‹#‹#‹#‹#‹#‹#‹#‹#‹#«#«#«#«#«#«#«#«#ëBşáªş?{7;j2Kbıå–Zɶ8kaÔ9»Yä´†ü–-6æ'°—+»ŞN¤3»Ş9#…c'©!6²=D¶¡Â0°—Ľ— ³İí> T/¥¡§È“Wì$Q‹d´Ø`ËĞX,oj8K+Œg'‰IÂdéê‰+eó™,¬fL8L‘æÕ]DöŠÍ#.îöʤ`_Æ6*xŠPg÷ˆµ7AºMÉ–Üvq()›GğŸw-MYö¶ı8\)Ë…‡<WÊ m>w¥WRa<ñ[fóˆGŞê™ ;[µó]T¶‚İ£’Ìm…Î`> stream xÚ½ZÏ›8¾Ï_‘ŞZiíbƒ:‘VÚVÚËJ»s«zp‚“ !˜2mşû5Á™1`b:§‰4Éû¾÷ƒçï=ã­ö+oõåÁÓÿ|zøøÇ+ iˆÃÕÓn…¼Æ!]…$‚Ø'«§dõõı‘=sPdlË"K¸üğíéïŸÛ?‹}Æ¡²yùşõˆ·B+Y#Õşıò°ú |ßOcıÿ†ÄÔ‚÷ÈC_ô8‚4Ûœ¥(Dɲ[Âa)%¶„ÃQxm«§-øï'~â·ØCß ,±ƒq×µ­[×%ß ™À#H|kp2ŞØºu¼Õ¹àµ„÷e^ò=ÿY8ºîõ¿<0ÉÀ¤dgCbH‘uüñ4¶ Ò}β¡œEù38´“PL–¼ğm% Mƒá2϶eˆC%Ó|Ò¼8U ²ºå^[!ãD®Æ Ñh˜ˆS5B{Ó¥¨hcƒA©Ø&s-âİYçãFdoN¡…s™‰=8²òÙ±K¡ ¶oS ¢¨R‘—†G„B?ЬYŒ7Kmì6I˜uNM$¡sNÑ>6HÇÓåÓ;Ã3áQûÑ2<®Æ‚ê®úfª‡Š¡â?+° ߪˆb[½W£¶eAz4”AA/ò­kp¼'icç%Û>OvjL Á‹µÇÆØ—ñ^í{0"t!2ÚX/)Õöp ŒCˆ¶Äè(®¶Õ‹‚센r2PŠ0 ½é”©¾¯jUŸÅD¯[&(úJÁdŠXÂ/dQäCŒmåC€ÇåCcË"¯gOg)75wvµœ‘Iu¨‹Ø™ÉT›EeMDl*–æÀÜkfM94ºcÊ©)4‘8¨8 6d™\Û꿯ŒÏW0"IwgÇ3GVGÆxÚİü“©Ò`¢e|Õ¶:!ÎÙ‘ƒG.e.œ×]t¶iĞ÷Rœ ¥Üw±ÄOf×XC¡é9ºùİïÿí/ËQp¤Äܦs*¹ȬQn* ¯³†i|Ï*îXı‘]õwqϺ)^¨şµ­õš~ş¢B-_ à ‚q`;¬ĞñÚ×¶zşşjdç²^´*yå¸ãDØ·[rvÜï“§4ÒµÑBL®Öºñ@oÔì»°cóÔåv&XfÒ¶º 8eÈÒ²ZlĞüe\×¶º®×ØË­"«V£¼8h ª›YgÏ„ºy=zZ¿LkÇ5Å„Ü}]:´â.r¥ìv®6İaEÁs¤òr¡r®×øœİevh©nÛÁ¯™ìÒÌy_8nŒ~]¤…û®Ò¿»TõÎ]×M„̯ø xse°=°<çÙÀ•Ax§äÓ—a×éşûpùvsm4±#£Aõz• ÖK†')„! ‰$m¬›H…¬zæüLÕh¹êÂKqV1ø}*ñWèõ5àãæ\ ßÒÎ$˜¯ZLš¿®÷ݤl¤0vš"/€¡w(H·­6Æ’RŒÕdİaÆÛ[cʆOk×îÌïnWpW!5á·IH)l5E”©Òoø8¶””éUˆ­%ÌÄåkm©ãoÁd•ÖwÎåê¸/ô©İ¾°•ë.ş;ÇxO0ÌÈ­·Ùêíò;ǽÅïy¥­´ç–9¿×³> stream xÚ½[]‹\¹}Ÿ_¡ÇäE­ªRéÌÂ~àl cûÍøÁÙÂğ,ŞYØüûœ£ÛÕ“}Ø;ܹ`<ênõѹ¥R}ªeLK%ɘ5‰U/6~ÔnXÃ=¶}ÚÒèKºŞÓœ}$¨ ×ğ™°wü´Q…ÖÎ4IàÈO›& S¦ÍÒlKöP¼9 ×hæÜ>ÅB¥lãuѲp[Ìø  ÜK]»ÃY¥QO'¹àaø4\²[ğh£DŒ‹Q^¢k©\b“â ŠWëXMÖ±Xš+ÛÁ€Y!VƒÀˆKÅWáQ›«©)q^kõ‰Õ¾«>I’›¹¬¹€Ñá «éœ lòx­ |mê'¿k6ÉŒÿ™+éLŶÖAïc޽zuwyÿïŸïÓåëÏŸï.ï~ıÇãzı·Ÿ>ÿëîòÍ×ï¿|(0åãåûË_/ß~õâîòöş‡ÇôÁFÍêѪæ‚#s‘ Rj®¹™bŞ×éÕ«ty—.yxÿ.ߥ?ıüéŸ÷;õçôÕWwø÷ÿ³¨¥d˜¦3S~Uz.ØĞVKnr k–¦¥au*¨’+EÓ‘}î²#Eá™¶bzìEa° o»¶?&1Ü)™ì]3,vUÍ^­V®;F?p3ÆÌ Gß[ɰrTˆc Ÿkıc ~¤>ÌšA  GTKËÃiÍG®zPóÜaÙB°yOrü‘p­>3N„[Í6v„õÃmƒ‹dÚû*0T°¥´e¬GÉnÙ°ùuÎÜÁ¥l  ìôshó@8P§¡nÿ‰nG ¦zt<œ‚ ª9 ³8ˆg†Oµ{nğıÕ4wøÍ:Z†[İÓÊv´q@„˜á)oÖ¡öšµïiÄ8ÖJ3¨»‘À‰`Hş,‰.‡ŸÎêÂpáv:kÓŒ è,A´,Ñn$à°±ÙÏ“8T*¹p7l2fÁ_C@µÒ‰¬v œA t†, 1°xßşÊI$Âu¯ƒŠ”$|7É!ä=G'®ç³lÅx:ŸRUDáê¾mJÈŠÃ}ׂ ÊÏâ­¬án$ •ÌtŸ%ñZi®kŒ›VÚ¤í8K&e@¢õÜ‘^Öj™Y%ò(ĸg‘pøMä™&rí²L54¤5ĸ{ñ””#cº‘;¥AÙ-ƒ:–KÌãíydP7p0YÚÁ®ÔUL ø0cê}ω×YÀA°j†Ø§»1ó3ä¶G¢Œ Q`æ AŞ!»$úá¶Jô±lŸÎ”VÔeo;üh›­H:­Ô›Í†åÈÓv8T;ŞT)ÒNãfªyç”=åxªH=zyu ŠÜsL9)ç¹j„5ä´ÿ¥H>GßÓˆR'ôÓ©–WªÈ?ÇZÎö»Ğ¶n¡«£ Œ=µ”Cwãšô(Ãí¥—[ңȆœ•‰_-• ¸ÌfË{Õ€GÙ .ıvCzËUo»!Hşú®Û8<¶”Vó“•È¢ûIu!œÉ΂¿#ˆƒç®°m ìO·‡Ú¨­n,¾rØ­n,HwöÍà d‚„Ïì©Jˆİ†@NŠd®'S„–j+õZ=,x’¶GÂç¶¾KdVöñަË럿O¶¯´1áõÃçÇôùL/å:s$Öa8Ƽ˛/?¼»«tyóİëtyÿÛcúøû}ƒÅï.ßîşóã/ì3ñŞòy~yøõË÷|Â\ïıışÇŸ>}óğ[Z"`^ÛW%üͧ/ø64n\¿¼Ä÷ ^İ*òYͪë@bĞc0b“=&{LvÅ ÆÀcĞbÈÈÈ-[ ·@nܹr äÈ-[ ÷@îܹräÈ={ ÷@î<yòäÈ#G @<yò äÈ3g Ï@<yò ä¹!k¹ê$Å ÆÀcĞbĞc0bÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈȶ!<ÆHá4ä†Ãטã1’D®Ñ°;ÈEY:ܱ”ºMYnêFV»AÏ’8Ôgò+šÕğ\had¿5<›S2vP˜šÆL“×&Í@ñV¿s/Š82¤”†¤¼ 'C(¤â¾ºmì5VÌønz‰(ªtyÒK8Ó¶W©íxA8ºÂö>bIÄ× …®ì5#ûÑ×Õ\`€™n ^.™êô¤ô÷Fé®ÀD+®Ëê¬íްCY4V7V¯U`¼•¥¸j_•+;çx(â8Zsv[_"ç™.×Á·û9ıWµÕÁX W^ª0Üüí­Ä!tBY2–'Åd ºW/<2ݸ‘@¾‹4牄B1Ç<‡DX+¶;‘ï->ØŠy”İRÀÁnÔlëwÊØÜ¨v6a‘‰î^–©/àÁX¨¼vµy°Š´ph=I)TrŸcõù*%a†£ It*‡Ÿ¬H|±7V4vï¶Ì±$°8{K0RĞFÆ¡ÈÆuUÆ^›g¨˜â33¤e Õ…%ÏÌŒX®mT)SëP†¹Z}ê´™ğî•İGhæ^©ìP›Yé´W—‡<×­îøØ»Iv$ADluÙœ×z¡ …/˜ÒYvhŸÇë»lŞX&Ãâ3Ù€3?‰ôwnQ•u5ø‡Æwe²ÙçınìæÜ»×w¨$†¯‹|Áf¢®Æì3$ä%‚~6}Œ›Å4¸”¹×>TÕ²U[ Gç}àÕğ'ͳó¯¢12a6mİÜGÚ3¤pJÚ^ÃtÙp´ê·@×WÌ~Vm "[^õoÙ!ÿàõWvAÉœD Õjz %,÷ºFdÈçô“8°†?¶®'‚<¥†À‰Íu™è¤âDõÌKëìÒ\òÎBŸx9™…Äû?Új7Öº®ö3L€'…²ö}¨z||ÉvcEÆ“Ñ {SéPÚYÙp°@şIDË¿eö“´òš~±İH‡é¹I9©Ó~ƒíÆ:íæ7´Ì¼—÷Ôªh©}ıj ª–~îuƒì?†ï¢ûpaÏͳ²ÿÇC³WÑ#wƒê¨[Rù›Ş çoj8â'IâT± ¹~zu-İq[ *{n|¾€bÂc²ÜuÕ†ôqÒí™&¢ÉÂvkú|#z{äí²´ËV‘ßÔš‘ >_ã?ô"‘ò–ÄVâ_¿Tâo%şº—uù–Â{ús+ñ#¥d ¸Jü{w˽¨`<²Jü nW¬Û¶ÿ#¿ÿWÅ” endstream endobj 2135 0 obj << /Length 1520 /Filter /FlateDecode >> stream xÚÍZË£8İ×WP»iìÆ˜çbº¤‘¦[šå¨v­Y¸ÁIPój2¿œª@ †‚Jz•D ÷Ÿûğñ5¶µ·lë˃­>ÿ|~øøÙ ­F¾ã[Ï; ù6ôıÀò½:سë뇊•1å¤  ?ÓğšÔ ÿíßç¿?~î=Œö»ü‡ğe[ÈbÒ¡üòÏ—ë+À@ØVèÀ €³5ñFax¥¦,O R§Åğt_LƒÈCp ÇuÍ€:chˆç§k÷¾ßÛˆel„wB»yWƆ‹ß¥ ©  ER§9ÕÄÀv¡o3qxşt ”±! ¯8ö1k MrFÄÁF(”­q2ÒBd'kªz„ìµnC‰26&§yÉN §kKÖ„d¤b_‘ˆĞÜR Ö“¨R¡éÏš2qtçc÷”³ßÄAöŒ‹Ê«®‘“ tw•”Ç,­„~½ œ-İ9cŒ+^òò(oU£E Îcóǵ¼æc´H,/‡Š•Íáğ İ´ƒĞTY+)4A C¡¹ªGÓ:[:İkY ;Zw?ת Œg^ô¢¢ßØI|S,ô¿¢º—–lßâ÷H§¶=¡‹· ½²ÕMPg‘Ç$#jŠ>ŲöPâŇŠK O+÷½CÅٽحâµA7£5ó N Í9Vh¾ÈA¹UÆë-íÑııæ/Eo)t»ñ¢47Ø9ÍûTëŞAñ ¡mæUÊÖ`¹5ˆ³R¡²Û?ŸG¥şFû­26\ºœ$GQbÂU™­¿5Xrt ®¡´0W6›hù£Å0Cz,»|ôµ#déÙò1GX;®‘߯œ¿şH¾à endstream endobj 2043 0 obj << /Type /ObjStm /N 100 /First 1019 /Length 2744 /Filter /FlateDecode >> stream xÚ½[]‹7}Ÿ_¡Çİ]Õ‡T˜@>ğfaŒ·‡Ä³à βÿ~ÏQ·fȃ۴ŒG÷v÷ÑéRU©>teŒšJ’1Zs"iëôäe^©ZIZğ©5ã@Rà 4 X’Ò”#€Èğ;Œ* µó;€ûv5’ÔíQÌÛ³#IŸ¸²3ÁH’ʼ*xL·«øÏ¶«´jÇRÁ¶‘œàB Î!xƒ¡•£¬T2‘LïÓ’Ì”x*ɼO5Yíœ ,”(êÉz­˜P6¶«-¹lW#¹nÏBL¶!äu"CZŞæU“ä1¯š&ÅÈRİXAàU†`«ñölKuce‘jí¼Ï5Õ•a-¢âݸXµßÒzjá|Â=µŞ9›×S`ÂÇ) "~×S8[|¤ÀtÕ’¢g«XİÎ(U±ÎNÎÕR/yêZˆİ|Ş×R÷àš×H½•y_O=œ\êH½¹`¡•#ICŒ³5ªP‹<¼p¶æiT#J«i´ Jkiôb˜£Ec¾9õ´ğ ¡DXeòÂí!óõ€+ï ÅpS½ ²ÆÔÌ€¶–>( ®ÀB_E”BÃ;cT'.f›*)ŠÔ¹š·H«$Û1›ÄÔ”®´‚¹d³MaaˆÙTæ’v̦¦œ¸c6õÊWë˜Mk'IÜ%ËÃlÚ+Á J0‹N°ÙL¨ìœ`i•`à/fÌf³J»(ƒ¦Øœ`ÓĞ£—»/înßıï—ûtûòıû‡Ç»Û›ß~zœŸÿõîıïn_=|øùşÃ÷î¡üpûööÏÛ×ßËüpw{}ÿö1}o]3Õ£•–òµ1r‡š´ÜTqß—éÅ‹t{“nÿxøî!ݾIûåÇÿÜg¼ùßÓ_Üáß_gáÅr‡vÔáY±Ô®%w8¦V<7©±0ñ )×.y@¦-8À:4·Ò?NÂú‰j˨Q2Vë9`êµ—Ü>ΠƉ \²@öğ[Y¾´Z¦O¨ R‡]$†x}ˆÁ¡–p§#È@ªeØÖÇIô8S-ÓaCÈÅ0Jæ]Ͱ($Æ™$¬â¥› –E¸İEîØÄªJ;ĞJ×IÀ±;œƒÑ2L³p»+ä@/ÏT‰ÑsäŞ#D8.5cG©È¡z ¯yşrxÔL§nUá© š^sH»šEƒmv}fĞÌ2X¸o^%s^öá ªYÔ¢ÖIôû>¸Ì°ÂKvâ>r~$Š3¦•̰Â5 ø+× K«NшâÌõĞšËÑ0 ì|İâH)ìÌõ€2T„ÜÒA9¶ ø °2°Ğ«Xìû‡ ÉØÖ‘xFæErk~‰ÕpóBrÅuéLX:4³ÆNø‰‚xG ™™'G Íï[½ˆÃ° ³„€ÏD¶G¥4è¥ëEà!aŒ0 ƒb`å0XF7P ³‹ tw˜fp˜HÀ—ÃdÈÕ´_$‰=¾3éyŒçø.$.Ä2Ï‚¿Í–yš@)Å.2OE²ÁÔ_99RlƒZf]ø> —3%¡Ó.‘{e&Ó†|0…G^GjãüåІ0Ïä)ÚV$!QûE$ §øºn.›zB. ÑÄèçF•u‰]•³²ñ)Rä|§Ì±L{rÚ ÿn‰^;XvÙI¸FuŸ&q®(ö½CFZÆd1 V#µv‹=¨QÑÍw"î®,Û(¬ôÈq“sâÆzà"aIêSΕİ6 †%³:Åt´²¨HíĞ#q??èüeÁmı‚†s‹­v&Ñ2ˉ«v&RÚU,vç-ˆhX!]Î[‘‹J%[@e±Ş» ‚İ­ƒ Bã|#/[@³©T¨l÷‹öóİu‹B3ë“çÆÖìç æïŸ!%†×ÎÅíÙ:´‘ÌQxõI|ƒ©8'zn/ß=~›HTìı†—ï'ÒK„QQÖ=aÍ÷±V|°ùİ^}xxûæÓíÕ7/Óí»ûßÓ|íW rwûØ÷ïe›„í­×|»_~ûğö~~gÛwÿ¾ÿùİ_=ü¦@š°ÛA}{õã< ì²İ8…ù+&Íò™½–}P× ­A¬ÁÓÍcÔ²²º¶ ¹.äºëB® ¹.ä¶ÛBn ¹-ä¶ÛBn ¹-ä¶ÛB… 9r,äXȱc!ÇB… ¹/ä¾ûBî ¹/ä¾ûBî ¹/ä¾ÇB y,ä±ÇB y,ä±ÇB;²ìšŠ¬®­¯A]ƒ¶±} ²,dYȲe!ËB–…, Y²,dYȺu!ëBÖ…¬ Y².d]Ⱥu!ÛB¶ ù‡“Ò«^rÇ´­2ÍBœÂ:-´·aŸjUÿ´ú«=† ³:v&æ`ˆ'Hacjv ÅfÀNcCğD‡¢¬¢6¦¨—‘°¬0œ&Ü™˜L” ÍiàÖz»Š2JƒÃb»‘¾ˆi.«„³İ8* 'VϵU–ãg·‘ŞJƒ™İÆÃêù™$¬ÈŞÙÓ-–î}véS%±Û(»ttÊÉ!¶Ãô"»N°á8{á»NÔÙû´‹I »íÏ$Ø­õâå0V¤Wá—­]Ä“)v¦Š´R*+)Kô‹I¥0í^‹,#úEªC²v6=MÃ@‹Í~x-=÷"×J‘R Œì’ğÑr½V-=X¥'½ôîøŞ¯’DÍ•m_¤”³6Ù;H„ænGç;mGJÉŞÖî³½A@GNå À˜­Ee±–•1ÄUîĞËz•…B™É8RJuX(Œ„gÕÜ —í2 ElÇc —Ui¡=;Ò‡Dz¿ÈBe Äv<8¥3ÆCÈ,I•<,®ÕK‹¾5]wÅd%`x¿˜Dc—ËIDËã"ãPÍ¡* é0‰D¤n¶ûF\å´}dÇä³Ïc  *1ÏhŒ~T¼?³„øz°$És -¶fŸ±\ ­<:1ü|OÅÉdvOÅNc9ªIbÅ3”Èì&Íp†Æ"Ö9ì| l,zÑ',¦é¸ˆÃH0€p6ö@!RÒ«8l[8¹8+û®]°™ÈEú°l»Õ³ ÏÙÅ«lÃı9åÑÇÇ…N%±‡ul¥9 {XGŸYúUæ¹ìbQ{A?^F\ÅaÒ §– ”'%Ƶ‚` Ëy‚}I¢Œ|èŸÊa/Iğ$[¿Ñ]Ÿ ­vDâ̳¦«X&Íòü% ¶,ça}ö³² ?±Í©,’5ÛZÌ6X¹cƒ‹ ­£lãT{j6´ËT³Ÿåq1ö³m<‘`Cë(Û8•ÄR‰½¡õ¤Ÿjhzz?™³êÙÖë ©>YÏ>Së÷ÍdÖŒ…ºb©¹×">ƒ$® Ÿ$¸®—z ŸúøÃ•`0娾-@)rí§Ãf¶üa×€‘À[xå×NÈ:OaŸÚq3Ê®İ &¢ˆ.?[1îbGçBÎdØ–¿k“Ù9’àÎ ;"»8ìpœÊa×ËZ‘ɳ^VèF´#_uæ¡_Álªó06™Â_²ûu@ás¨%¶oçÁcïl®ğ7‰HíÏø?b«r endstream endobj 2230 0 obj << /Length 1522 /Filter /FlateDecode >> stream xÚÅZQo£8~ï¯È¾íJg/6Ø€´ÛH'İ®t§¾­î€“ZœÓ6ÿşLp²¡˜`jÔ¤!îƒNõc4ä9~–)†! –Š—ÎØşETO­S2^©ä"ªÃI…ÎH*§Ğ}L*– /[ÄkÀ‹v×ÎIŋޑTúlʤ`Cq ı0\ˆ†6vEŶDµ&q=Dµ±k$TÈ|º¹+ AF0 d!ÚXŸß•I> J5ßş¤¢«èÚXÿxtè¢eSlX5¤©ŒÑ…(hc&ì+‘²ºv-.¾?¿¸tşkXÃ@!J®²•ЉîßBˆP# B8& ic£„ÖÎåŞ·/÷=üïèÁ(ğ mÌm@ö)¤h)dm¬rÆöC\L!"Ø7¾«mõ,Ò'U-•ˆ`{é¸×„Ìßê>͹RÜ7ƒ?Jª±4«Mp0¢}RÕ <U ¸Ïy- Q€ìë5‘0Vä(R‰‚.CAۺ⇑z¸hä¾ÑY¹ûîÚ,ô^©#Sˤ’=ìD [Ø]r™3s$µìB‘ m™A³7ÃËi° ¼¶Õw@³)™>:ŠÀ0¯›ª> ˆ ÙV<14él½Å•U’JׇóW|(6"¿Õ¡?”©¡äz0ÆÈºïíþı|;'äXvˆ¯âN킦Qçbç¸ë(è7àSO¨ş,ˆíCÏ /©‚m’òœËÃÚ17  ´K-…¨G!gÏ,_;&‡)üsvº ‰ƒ$Ï]ç&åÜd„A³—Ây¢÷nBKaí:e€?—¨¡ľ½X;Oå©İàd¸ş@í<< è{‚@²Â1iLèôSÀX%îΠl¯¥À½j™«07ŒóTºg§Ò/VŞQ06ŠA½Ğ_ZÛêm{mngéó©buÒçƒe¿$ùÓ°×®ÁæÙ—›“¿YUğ2Q}iÚTU{3*+–d¦«H –i”OÆú>8sé8|rŒüÛGşÙ¯ÒQ¯„oTĞO¿YªÂ9ş<_>g,×o꼡}}…¨şÔ'H“ê87쬒Ù¶[ÑÄÕ”66p«¦ÃÊÒz§½©]û¯Õ}À`í(Ê'.pÏ¢ür7§k‰[¡‰Ö{àİ…+öF‰{œbZs‹›9jô@Ã]§@S0eú#öØ-ÄBƒHm«Ì ¥+r‘&9ÈT–uµx¶¨í(Œ gŠZ4[ÔvğLGÖ?SÔb{Q{I V ¹Ìê\ÿ…û¿}w ½)䱨û¶vnÀÑ|}£€¿(ğÅŠïoæëû[ùzíxÁ2…{ºa¹h˜š2c[^ªjòÚN•¿qñqoá\xÿ̦{èVl¢Õ=;nÉÄÌñ|çÕsBÎË'×ô£Ù§N Uسƒ7\‰ÍWÕSŒ¼h1«AÈ›ÑÏœœ_ƒ¤N9ï„c¹™Ğy¦jÓÔJgçûófΑİ̹ܾîy)ÙnôÍû÷Lˆq¬Ä >_¹Ç0Š´Ûí§¿îş [ll endstream endobj 2137 0 obj << /Type /ObjStm /N 100 /First 1019 /Length 2787 /Filter /FlateDecode >> stream xÚ½[M‹7İ÷¯Ğrf£'é~HHbœ Ì€‰½3^8N3˜€;ØÈüû9Gõî3³˜j/ʦ­îRºººŸU­ÌJjeTE8˜©¹§VKIÂ_j©É¤pĞ’{ã@RŸÊ¦Ù:–jñ5ÉS­³ŞaÔÙÖ4€«­y3U›œWKª½ G5ÕaÆQKuΫ¼Ğ*Gh¶æaŠŒ5ü¬¬Q1ÙmÍ©õí*HOş¨ P¬mPR×ÕÖ’'W,.ºîI±íª%éÛ½°˜` < ÌA‘´‘´nWgÒ$£²®JM€ãUñ¤¾Ö…HÕ‰ÜxGßşÖ’y_£‘lÇ2“M¥\ğÃK'²Öä­P Á‹’©JrÀp¤ØŒÂçPKŞ·«|lW{êe»w¤P¬¡3õ¶­¤®ë*¿ÛZÔ:`8Âî…lÊ}&SlÏ(Oiö‘£†èºc¤¡ûa3 ¯äe}]õšÆè\ Ê3˺×%M> FK…ˆì– ® ı›¶È{š¾8ûHs“•Ï4§p^‡á)9? Ÿ…3!Zh¨wBG}ÍÕ¥¡\¼SY»¬¹ĞÖ2œ4Áê9ɳC_¡Œ| …….p‰Õ°QÇÀjoX Ô¹ÄÀj¸aÍU‚Æ­ÀîC· X­ÕmVk²ô`µ¦ÆGX­mç? yk Ü2ë„`uèŞ:"« UCåI[ê8çxéãÄj²)ääQÜÎÉ:è}èݳgw—×ÿùã>]¾ÿøñáñîòêÏ_×ïÿüğñ÷»ËŸ~»ÿô¦À<”·—Ÿ/ÿ¸üø¦®_î.¿Ü¿Lo´–l gM2…¶– :h"¹«cŞ÷éÙ³ty•.?=¼~H—çéo¼û÷}Vû{úî»;ü;€D«¹àɬÖ,¥bqj¾áï]Æ ?’„çMĞ93",Bne‚D=‡„LÍØ„ѳ@ïµx¦Îèìvö¤Í(%ÃtÃBeÁ!ÖÚrşë°Ü«ŸËÁ¡Ü’àĞ¡”eÄÁ[8•ğ¹Àòh×<`Õ¡”¥¬”2s! ¥TÙ§D¢P`:8`3 œğŞ*=ÃSt.ú̈k°8¨À ˬ™n<{?K#®r(ĞJ8lšÊ«¬UÀ¡ıõH! J ÀƒŞ$Qjvßш~¨™²ÌàêÊç“®êIõl"¥ßôR†íèåìrбˆãl Pƒó@œ ‡Ãv8Ô# ÕÈ+è5Ë¥n–º ÚA°]÷ô²–YXçŞ#§ïË\b3 gClO#ôHB —Hytø P‚Z¶0bÚñùIFˆ K-Aa‚Õ‰AÈ8`ÈÄÓ’P¸ÁñºHÈ<Ä<˜æ1¦A npêÌÎe/{:!r¤½¬ÈlšÒ^œ>ÄáSø“6䯢cuœÑ)H Feø½cµ$14#@Ş ‚ÔI¦cÃAÂg¶q–Vˆ#±@&\œçc ’d”ß!1TŠÈzZÓÌD+²&ŠXßÏ!qÓ xOds_4dú¹B¾| ÄØÆZ N§ ØLµUñ‹z‹kTƒD>]—j²(‚TY‡Åâz@jw„üóv@ô#ä÷“N©!ÄgiÁ¡›È7&£©€êÜ uû¡qM…nbQƒn*‹bğfÜ$E>Ûiş|KÁªB7åK V­ õØÑŠéǬڠš­ß üÂş~ ìƒ RĞLefLÃÅJ“#êš_KâyzÓ*`Jú%]^|xü9õÂ`ñmLxñğñq½hƒÕÇëÌ‘°ékŒy——ŸŞ¿º«tyùüEº¼¾ÿë1½ıß}‰Åï.?îşããgØ4YX|Ï~zÏ¿aõ·İÿöáİ¥%GàÒ—½|÷ wóæ¶M\âûŒ…W–|Vö:˜×–ÔÄdˆî:ĞX <=¬llllllllllììììììììììܹräÈ={ ÷@îܹòäÈ#G @<yòäÈ3g Ï@<yò äÈ3ç¹]Uƒƒ‰ÆÀbà1è11äÈ5k ×@®\¹r äÈ5[ ·@nܹr ä¶!¿=ÆáfÄÉM‘è"HѹR~¤|HtwóšBc ª…Ò-u°@…Ó°Éı,Ê-¹À+±•`,8@ğR]OElòLe£$6nªßcq`œc€ì«"ÑäqxlÈ~jìÍ•ŒK¦]1dšbÙ–ÙtVˆº­à,gs¶YdËsd ›-ϽHz¹!j™'sf8ˆRX–aò¯Ô³H Në0Æœnië‚-ȳ“…!©Sö¯ÆÂ ¢]ÍôÃM…1¿d’u5ì®a§öÒšq¤bV„ÏPLf½ˆ&¨˜ .Ÿíµ:Ï" Á× İêy7VÑuµ×Ún…°ôãE¡Èèܾˆ‚¶ı”û@Q ¼ÉÊÊÊè˜z÷, í4=‹,‚"vb’µòˆDU³É&{)E•z¤,X¤†Z ¥ë«'ŞX‹Z]6İMüequ l¯ È Ûljó¤Reó¾Uk‘Ô­—-†Âq´Õi³¢'±—é¯ÕÃ¥³Õfz–,OåÁ.”Ä5¸ä)­º¢ºnsuØöÜ>Œ,‘eéÖ`[¯#¤i¬× ³½t¸õo -™áTÈşËÆI*yµîkòù7û°škÍαUà¦Ö‹ß[s­"ëõ+škÇ6ŸüÓ¸ØI?xºÀ®G6Ÿ?²oqcA‡ÿõ,æ‘o´¬°Ô,ó—ºe:ü~‚Uşİª™ö#ûğ/«Ì_˜èÈ2ܬò»ô³H İâG¬ò¾g8`±æ*ò»œ¥±+œõÛnà´x;M1­fc y ÂZ¨„ÃeMH¢@1«ÅÖ™¯y¬ÔT Ù6W‰ßË^AàĞ—¡¯JÁšşdubS Ğ̳(lÆŠıéP XĞ*Fc¿:sd²±Jpßp—yûÔkÒ\¯ú~79Çw}û~FàÇÿh_ñıÌ¡$`µùe_|?ÃRD±¯ø~æ[à÷3³$ú~Æw¢ñMèå“ĞÉ…Sişå šõFp}ú š#Ëq8ø ÀBÅáxòšÙ‚Ä endstream endobj 2282 0 obj << /Length 810 /Filter /FlateDecode >> stream xÚŘMo›@†ïşäæJİ ûÍšJ•šH=V¾E=`XÛ(\ÀIüï»6›ÆÄËWØÖ'c Ş÷a˜™]ß[{¾w7óÍï·Åìú„’cî-Vâ>ä\xœ ˆ ó±w?ß•ªI nê‹l•úµøq}{ú ¤Q¡UO|>Ü m|yÅÁëpñónæİBÈfn¨9ŞA#‚’5!¾|=÷¦ú‚:ò6b6o›5‚%®¬k1‹µ9Xùn{N HwD`ÄZ6ù£qR¨¨Ê‹ı9  2,±¼ªÕ0ü=LŸp güXK,²ğQY>»0b-åF¥é%ÓÁR Câ»*D#Ö4¯Vñ¥Q«hbü1>üGÿôÿûó7‚/ûş§õÚÌõ’Åucn´Öæ(¨Ÿ},“,,ö Tam,MЧûCWBA»{ kÁÆAl ÄH-f‰Uª*2•¬7ËÃÿݶ´àèÕ ã4˜Ò9— š¾Ø\nüÚÜF¿Qá”yQ#ò`h/¸“Àhu\Y®j­FC1I¦»zÕ†ã46˜ôOvö0œ0X!%$B8‚¨µlªX«–Ábhk•¼„й@ıƒmǵD‹ (%ûg¼İyfÌ[yÛªmTª£á©Ş†p55ÕÑğTo–Ûï]=8 şhŞ&‡´âßÈźΠÃåº=FÍ3m±$cKLiy#:ØÁ]ÙvÖ£FI×-×6{¾Wá2U.–Ê u$í ÃÔ¤íƒ0I{:?‡IV#Ú$i ¶E©Ò6ñ!} Şúİ#œQkÄã/Šz©T‘…)PO*«lG>Är0 î'Z“%©6 £‡–ª¡§DRöŸO‹u¹/Ó|­§ñ²Ò;ƒ*ɳÉa ÁȲBTœéCÏyñd뮓¥Q‹""|ôªø\„–³5M+íY|7£Õ¨¤p“—`¹×»§º²'¾9££_¼F(«B‰‹kMۯޘ"Èñ1“\+#Ş"¾/fA : endstream endobj 2300 0 obj << /Length1 2337 /Length2 18866 /Length3 0 /Length 20230 /Filter /FlateDecode >> stream xÚŒøP\ÛÖ Á]ƒCãŞ¸» NphÜİ5¸»‡àîÜ!¸» àú8çJÎış¿ê½êªî=¦Œ¹¦­]ÕTdJªL¢&vF`);[g&V @\Aì+ €……ȆHE¥fál ş‘JìèdagË÷ qG0ÈùM&r~3T°³ȺXXÙ¬\|¬Ü|,,6ŞÿÚ9ò$@®& @ÖÎì„H%ngïáhafîüç?Zc:+//7ãßîQ°£…1È r6Û¼E4YTíŒ-ÀÎÿCA+`îìlÏÇÌìææÙ8íÍ„ènÎæ°ØÑlø+e€"ÈüïÔ€ˆT5s §)TíLİ@`À›ÀÚÂlëôæâbkv¼E¨ÊÈ>Úƒmÿe,ÿ/FÀ¿‹`²ş—îߪYØşí 26¶³±ÙzXØšL-¬Á€Rò@gwgFÈÖä/Cµ“İ›?Èda 2z3øûè €”¨2ô–á¿ós2v´°wv:YXÿ•#ó_4oe–´5·³±Û:;!şu> G°ñ[İ=˜ÿİ\+[;7[¯ÿ S [Ó¿Ò0q±gV·µppËHüÛæM„øGfvp²°°psñÀ°»±9ó_Ô<ìÁ+Yÿ¿åàãeog0}Kìca ~ûAôr¹‚Î.`¯*ş!²²L,ŒF`3 [Ä?ìob°é¿ğ[ÿ-Ü:,oãÇ `ùëóß'½· 3±³µöøcşw‹™Õ5Õ䍺ò•bbvî/&N.' €••‹Àıöàó¿<ÿ­À²ÿ[ª²ø÷éşÁ(ckjàıWoÕûO"®ÿ Ú¯ à#(Ú½Í3@ûgüuY8YŒß¾Xÿ?/Áß.ÿÿfÿ/–ÿ×ñÿ¿'’r±¶ş[Oû/ƒÿ=ÈÆÂÚãßoóìâü¶ vobûM5ÁÿZh1;k“ÿ«“q½mˆ¨­™õËhá$eá6Q²p66ÿ×ı§ oäÖ¶`%;'‹¿.+ Ëÿѽ휱ÕÛ¥âôÖ«¿Uà·•úß’¶Æv&íÛ[ßA Ä·Ö¿!N€ëÛ’š€İÿm3ĞÖÎùÍğ–œÀÔÎñ¯rq˜Eÿı q˜Åş n³øÄ`–øƒxÌ’ÿEÜìf™?ˆÀ,û½qÊÿAoœ ЧâôÆùñ¿ˆ‡À¬ô±˜Uş ·xªĞ[<µ?è-#õ?è-ºÆô]óz‹şé¿ˆ÷MúƒŞtFĞÛÉŒÿ‹8ßtÆvÖo-û„ƒã/‰Íÿ¿zÉlòÈ `ÿax;Õ¿Æè¿lo`“ù?doi¾uüd,o…0ıßhMÿÿRZü ÃştıGÜ¿ôv.ÿ {31û|;ÅŸ`o¥4÷°7ÛşÃâMfñøV5«À·ÒXÿ¾ÕÍæ‡}«É*Î7WÛ·!ÿ‡ş-»?ÑßœíşGıvzû?ê·Ú¿] vÿ¨òÛkšÙá¿ıÀÁÅîm•ÿ·Ô¬oIş£¬o9ı9Õ_ìú”9ßÌŞîè?o‘ÿнİiÌÎæàTù-Mg7»8¼eêòøV$×À·cºı£…oŞÿÆöFïñ'é7WO°ã¿¸ÿç"0vqt|{Iş}U¿ÍÌğßod0ØlŒ¸¼`gÌÿÙ²îsÇ](¡Óş„à,Õ¾f“ײã7—T¸dºê/›7¢É#½èk»’´×"+¤Ï^'­ p¡m‰ÊíŞOñ*ÓûíˆKSï' OD눈˜ÔD¼Ÿ¼5¬ŞµBvÉRå:¸ğ *åcݹõK»×”­‡,ì+TsÉ!=•Í0E«GéÏQåeÍã‘Ã:3ÃÓcşrG›»¾™ÅÌ™|%•g@ô9f/òÒŞb‹¹Ÿ÷\¯PcsêÆ§Äׯ#~w9>Mí%v˜"‹»èUò5jSp1›;¹¯ãçR&ÁLù.,Êî7ãLGk ãIE5 i=¼W0U‰´ibÅH‰A‘…ßı3±jÂ'H†o=$ݧ?Õ»è½bñøX£LØÜbítfùr=İÃ2—ƒ¦¥åa’M!6(V?¾Ÿù®šç#©2âİPè¥3ğšüzËdùÎ2Ôû«³î_?’;®ÒÄ£‘RÃaâùÙsQWœùˆNc ö5NкA'oØî”3Û {b÷ÅgF6\1Ô³ò,aÙ´M–yl'"u(Í)å“O§dDÓ¨³ÏYge«Ê?1O9ÎÀ*‘¢‘ôf#€éö~S߉„¿ìñüÌæ³;âkV'p)”HÔÖ±I×g5ήø-p¤Â7Z_q 'Ì¿ßw–ğ¥&ÕÌ®p“ñša*Á÷8˜o+ûgLä¾ï¶t­š¦ >×sªuP!ª ¦xŠÿì&nN¾†Ñ–óSúğ+ŞQ*SàVR6¿î1ƒŸpk¨è{Rê¯1[ã//Ë`0 o9Û°ƒèü¢å*·œOú ¬ëŸ.ÿKÙ!F@#AFt!˜àøÔg°AC},%ÑÌ+M¡Ñ^t/âj1âÜ”$òö,ïÒηÈäÏV¬Eş(GÊÌó€Oş ~½ôƒè wç‚°yyvA®óiʈ?ıô~˜5'R’”Š˜æŞk°* ÙËT!}ã)!ìÜwCÂ(¾Oqm—Öêåp-Ÿeò¯„uÜÊ¡vƨµãO—ætnÔ ;™|K}M¥yßBïtpˆ23 fÂ;'Ú*ŒD ^щÅS¦˜Õ±¶?™¢Áé&ñ!pŸ‘€T&õ1h3äq-1(ÆÈlÜ6ØÚ)ÚmÇ·)½#_§Õ0Ïäá’õ¦¼Ê?¾>p ¥“ݰš*öV½•îØÄÍÖÜ~YuKÕd#!(V›ZòǘSÄY“3p–÷šAÄzİ_cĞßoü¾³­‹øtåX &j"Y"&ª±]ş·©%CRüéhç·®1È›“œ‘,rw–Ş[sŠwå›.:"+>Û‡Ëä Aˆ#&2ñ’ôŒË®½ƒW`³{+ o¯ô”şâI¬ø ²ûñ'÷ñïîU¶½âjm@ô+‹;ÍEæ ‹}ú a9Õ‘ì¼~ôågÂWŸ#3ş‰®ø:´ŠD‘ÂoQB ªı+zNïÏKWmlyÇYÓ˜Bo÷sqJuĞ  +ÎPú8[r#Á³(¬{ìx~ı|À¸-¬ı«YäàA[IÌBè÷ŞÔIÑùéªk˜†Ô¼®¨¹U­]ZSÌúhRX¨tèószØ®AâpEe×b^(Ïö×pÅ[›4€-±DÖñ¦‘ŞĞr6Ü«ÀùwuZ³ıë¥û ÚBÃl©‘­Ï…x«Fì0,»Hc×Lxj5^ÕwÎã"õCu:ÁXÖbC;;(©1ÄOQŠÁ€½î‡°÷­BB]‚àœbvåÄ)¦ éͳR¼œŠkYxM üæz!·îc0¦ó/Ϊ5|öè$AÒ˜¾‰ü¥6hÜ´Şo•ŒíZ!Ιh¬ÏeYÍ×ÈîèæUæd»VcªÃUÜ¡2HwjæÃ µÄkìu»“‘€ÛÏ1´UÈš&Nê2w‚çz³éè Ş³0ñ&²wºZe*¨åÒşhÍ&´è›Š±»D-^äï­ïu#zVÃU<ˆéwç¿DÏ'ï¯{ú~7ôû6î×´àÛ ¢KAİÁѲû—Ü>±¦l#ÿ©ÖéO( é ¥5ߢ*1—Šw0-íc¶Ò"é†ÏK‘s}÷ÖYg õ.ÆfÀ ğû™0VëÏrí›f1*uÛO”xÿª²êPáiãn¼"²@ ƒ kªô»>×ÉRœÉ'i¯1Ç<Ì2¬Ö“ íÜ`”§š³Q'úÒqˆÕ öï §¬!µµsßf— _÷şÖ ìÔÉ×é‰zN3UçÇçx‰Œ®ËÆW†µlığğ¹>>Ö¬=”Ô,uÓnc …ŒŠX»»Ã<¼¨´}v. Àv}غ˜SßU”_ÌØnØJÿöOg*,aÂ@W8FÓyL`8˜™¿5¹‘ü@…¨Òf½·*'“®ê¦;S2F×qX“¹gv:Á.©h Âcw!|™Nl<â—n§ÈŠYÀQÔ¤¬° @ÒÁa9éó‡şÂôèZ×´DN艗y·°¥{Ê«r¤8³\›¬ÁÀÉqÅz9–ş¼İ20/{h¹m)"ÏZ^Òl‘ÏÖH!ìA¾­ß!– iÈñ‡%§~?ï»2EzY´•Ü`œ­Ë8Û:ªÓíÉ,­Ád—aç¿’Uè0\Á–È]rMg1]ş<Ñ’;½§‚’ºkBS¼7ïØy^Ç!ê¾ï¬»ÆA/ Ä0iÈş?V[—¶Ğ ¦;ú'æ…¤&"ûS#\”CG,Ñr^0 ª²¸p¨²ıßQù6Æ!¥FŒ}<€Ay†š ¥-«²f\N‚C½RH.(NúäxGÇÁ nqŒIA¾⿊|wT ; Ÿ-Ƀ–‡+䬢Q”9qÿŒÊ•Y=I†\©ÑıD«FË%©jt;Zw}¬ßö¦Är'Ò‹Ì: ¯"ZÜ…MÚC4 ìè:"D󢊖÷mi Ü»2”ÂVË‹ïµ'O0”¯ò@Åb§İ{DİÅg–s¨»ÔK’}–ueö ÂI³FFqeÍ‘³º·ùV%„ñJG p´™—=À”SbÎèO*Ȇ̫ßJ¼àx «x¶pĞb#wúW¤0%¨åǽ æ_€#¹ ® ã-ÕıT~nuªq+şw»òÈbb†?­ }${÷ÑıuÃ>¨  ~'—J?>û„^ê½æ1yî⻯Œa^nÕåÊ¡7[˜ ‰s„)§Ù6‘ÅsQ’ä×Ëùˆ1¯õ¤¿Ït¦¸Lë“Fìƒ4Ÿü¯iQ*œùL(éT,LTNà;şEûGàçÏÆsEôïBîü¨#ˆÅ¾a_Œ™s?N–3ÄŒS‰Ù51qO!¿ÏVÍ`;¡¿L²s áï ›oŸd>Àˆiã:Ö)A–G_ø‰n×ÒCج†|¹_š'T'$Ø~±Äó«)‚2.;Çd?’š‚…tÚî.ÉÙE§aVùûø£¤úŞÀ˜.éFœ–›äëﻊêåS®¶rÍÅh¤,e”³zd*wkêÂbÄ…«JôŸ¾bæ;‚[R ù›älº­zŒ{~³µ"`ÚTk©ôZÜOËÑ+K†…HµöªÂT-Şc‘÷ÎŞ:ğ·ïî ¹ï¿Ìpã:LÙ6N¡7M—¹±ql /w›0ı”ğÕ¡«¾‡3ã(Îc?|^—¦†`¶W ê¥BK&^æ¯ìpN<@L僌³?ƾïõqSÈÀÁ`†ğB(š¬ğ/`•¦îZ’iïÆˆD ޼xz,XÏѽ>“×V]ËåaMîu¯«ÛØÍ¤ÿ„_f+„0†Jõ¡óÏÚıᙸŇ/€Q{{~½úYê!×®÷×@ziöŞ¡´<šÇ¨Ú ÷¥€äêùÎK·C¸¦¯xCş½şoÁà]  Õò‹ĞëWşM¬®Øæfʽ ı ¨\!F­/@b©Çµ¤BÈŒ*È$é>Ü6lËNFjˆŸïÕ©'T+ÊXĞÓ £ÊÓT+¿›uêî¶ô>F¤Ÿ¬OC3˜óC±ÉFŠ„ã_9|`ÆG®òÒÎMÄÇòøoNH¤û;k ü ´)DğòJëÏgĞÁ’­BhP]*òe/şrK"”ŞËš•鑳WÌJŠõ°úSÉìô,r×{GıÏkƒÍt>³ïªdÌÈg(9x. :ÍÊŨĹå²rĞæ³…á'Ú'&ér’Ã86P×X) {íÚÊSZ›qqdH?g)İ.ù†7³ àA—{úEÏ8#\ijIt–Ä¿®€pı };çhıÜòj^¬ÍÔğkøCåTù]n;%‚VÂIïV_,E*”¼‰¬nŞûqH½œ†8ùĞzî[’ûjYœşÛØ^ÏÏ7G [d7®'½©À²uŸ-+4*’—[q⥧oœ~oO”|Ÿ¼â.ï­GøI}~È)<´H;IªşD'ş¾±ÀÛ‘UmÊ¡rÃVv3ı©µuŞ‚Í@Å“^{Ü…Îa{Ë ğ€uƒz Ïn¾«zº™ùC g Cbt Á–~ö´>‘j!µw?NYO`ήÜt*ÒwÁ4SĞáË·flÙşò 2íÕÎy9 ‘ãÛcÚ}üOxCqxÀ¬CÒ©G­(ìއ A—ÊÆ^÷¾Sâ¾KH¦#‰Uah1Vß.'VSÛ†¤Í¦#mz’”Ó7Y¥jè&¿|QÊ ”åP{s;„ºÍK?ã/e>dSni„O+æu.½XÛÌp9°éÊ„øm¥Fµ­A|ï:-$±Óõ#æ"A*rÊrדBÏm³r—î/È5xÒKòãmŞ~ÇÃ0´£r"ÁQ¦¦zëуVöI3UAc¹ÆG¼ôû=é÷±,³®ÃRSjÆaİ¥…óß[ºÌı§ş« Ÿòq*…¹ì&ömK¼løç>-ØüJ$¾©m?U´&£]ÎJ9Wyœ“˜ïÈÖc …¼İSúmJGsêúÄ1YŞ#)«á7¡ÃÛeSÄvê‡êE >ı~Êßà®?ó3hM1(m<ı¨"Ş’[óë1EfıLì,\ÒâhıÈP›˜†4­ß–Å®ÎL±¦¨€HËán¦` ×p5Ö‘F%ŠÚ¨té f^‹¢“<çõ2ÄÄQ¼<éo—¦H®3×(Dù»"Éê–Á|_º92öOnß0‘ ä•o÷1½n{Òœ'ÀI@ÂãA]&øbÑÑ´v´,ïõºİupa©ıU­–>kÚ£½sÒyÉ wű*YÀ[Çr8ɸÿYÓU®xµÒıÓ§A (»`îH¤˜î›5Œùm¤Yã¾U’® vXZ@ê¡=¨xšütØI:µzuGï‹Õï³^ÕùsÓ ƒË»±4•Å&ó]Àåxë<¼#ssyn¦\Ïšñî†\#N\¯6§ê ¹4\jäÅ ¼ƒ+ãä\|˜K~L“VRt辺ÍAÑeš#"eÕ—QŒó¤ÉO/Ù6GËìî‹WárdÑ•N.‘S &‘õË‚xⵟ„[w%køišx¬¯rÊ¢ÅÕOZ­°œLß!©¶µ›«®ËµîEÓµàÀø“ø/>”„'7Z·m;ı"¬yñ‚<á“ñj0¤¨Ú¿ÌÏ!×Aæ§ÅWim˜¿â-½ú@_sünJÄW°ˆã¶e‹JºÂÖš 8}CÈ6‹é…VŒw9N…怨ãA§ëU+ú0` ѹ^’¦¢Ú:)7úïÄŠ£à7öš*|ŠÏ2?»@Êêñh£Àq*@U]j"2ÖÎş ½áÕ”œSD4!ÿàÂÈûRè¦Ss^ãc,‰B¥óÊ£ê/3x½Æ\–àˆªc&éÑOówõ‡ ÒŞ ğy¦ z’Òñ«› ‡Õ/1fqÅ6óz ¶¯©ğ®´5uÌ W+òFå~G‘‹&;çË*•ü«Ò™Â Ù> 5´íıÃÕÊ×f³ß­ Ã:m¶¨Ãí©0ïH˜)¯=QYãTe•»Bd[Ú ´Õ/é—Í7vß ÕÊdÅc¡×~õT­] Í+=Õ=,&¡/‡º~i‰JT°ŸЉf™.yñCi«_Å2—ªèä[İ™ LG¿bãMã&`‚»ÈËPõk~Õtn.#Ğï>ù῜:Ş._xWññ5£kÀ(Ɖ}ìQ÷DYû`ô $]-ñµúŒ’‹’ÃY¾£½ZÖ²±Cæ§¢ øÂ‡FP.ƒq°YÈ_<ÁÑ:›&ÛÆ4‰ºÁn”u`»”/øÀâe&¸cß…¸Ŧg¬8陓%ÂÊ{<Åùé£M›7‡K¨„ÅŞ )d¾oXveãöèñn©¢n«K/ÑGŞÁn[vñl~µ|¾…ϱ·®!.&P*ÿãÑı;«“Ai>­.Ûè®ö^§6pv QZøv}‡0àLÕàÒÔÄs„‚ƾeŸòă!áÀ˜8ØI}·¦Ã®€|µíÛï¼ÀŒ5YÖÓ¢†ÌÿãgÂcš8?N’„D­ Ë:\ò|¡ò“ §ÿËh‘R½œ¸ºC‚U.DRĞ.Å$¶ğ«Ö$:„‹³Gi"’š!MRr-î_Åš/ík3³Ç ƒ5'áçé», "õójëŠjCÂW¸Q…«?@í²åî¾­<øÃ.öùŞ(mœç5ø¯”:tNÏŠ&Y1ÕS[Gêå s´Z,Æ6;2ëÛM†«òS@KÜ ŠÈ݈î³å`6İË>B®D5“'ş`óq9­¼,ו^).·“®å‘Ô®w(y1ydåóÔGl‹ÕA™’~luÕ÷lÇ» ¶Ñd‰‰TUW—‘C±™ÔÛŸfI}bŸŸG”Ä#ӻ↠繋n ‹˜2 ÂM¿åf É/ø\xì˜RFÆ×Ãg£LøqwÑQ–72›ñ.>^ ;HÈœO³»©=öâ v1 C—!›Ú§øY Ğ;¡Ê6âŸuäé4%˜§7v@ıèC¸ìÛׄ©ÇĞ ’S2çat5‘ ¯ÂKÏyáNÃè¶I:€úğ^mŸ;*Ë—/”Fu|•/O9¿ymwà‹º­ §ºO®z5[¹ğ‡^t¥ë‰™…ıõ”Ææ:ª¦­«•Me GO»6êÙ+üÑêÌ}°FM°üÕ¨ìQ/¯&ŒÒ×úd6^7@g«qsVóïñ7_{cT÷J_²RìÈe‹Éˈ\‘Ûzš ¿ø ÛqÏ¬Ï .ÑØ˜‘¬3mğ¸¨l¾¢ u M‘Å@Dv‡;iÏĞ־߇UÀúàğ2g™0;Üκdö¡ê­cîAùxĞ]°ºúçïããR–iŞÇÁok>iŠs¨³ä_êÏò9?Æ®î¦veñô¼^T£”²Ìvï>Ç ^T‰..~hÁu×RgIËZÅ0¢¡^¢Õÿ¬¾°Áó{x8Úa€²,œ‘Õƒ‘BY¦w«À[Èk4z† ›à¸¾°r¶‹…. fóşº\@„Cò´™”ŸËıÙZ9û‚ ¸Ğk¨xMş[\¾Åæz¬¯}Ë»yu¡Ü4 ³ÛÑmâÌûhÎö®âÃ;#°Õ-¹ø…û¢Û绫ò„¿§Ój½œªÔ²ÖFƒZ=9‚«ÄÜ—Ù,9™¿êÑ)a‰çC½  (bÍ â¡¢Ñ|jü=¹à‹4ªm5á³·i’kqÆÔ¥DSBæÉğHu…ÖG#p-RQªˆjÖÊ «¤ÔF6xà³Îq×Ô+Gšcׂ(MÏkÄ`ÀNwåªrWC¸Œx#ß6²+YÖ“ ½Ì\}#û}Eá;‘§cqẽëMˆª ınŠîÔ˜0z¡0êÆüb1Øîüg ïåùÈ-a§ĞÁTH<cƒİ«Šµş±Í¬§â®1?îP6Ì(2yqQŠbëqèÓŒ÷ò\_(|fbû;iÅßÙ†2ĞÃü¢"do1$ïQq±KHè ‡½æx‚c¥î„¤YbŠWä|KĞSÎÈNß+ƒ#ÙAoiè‘óû'*KßÕ.ÿ`œµŸ\5HÙN¥ƒ:¹dç´9ŸŠŞı`ó×àÕĹ2›üWMræSåhT»cÁ'$·öà)ê Şá¢åVû Y ˜£ÊYR+Ñw»ô ­U8ü'|‹b÷›un)ˆ¯w ¾(³Mç)„ ÉÙCnò øşÏé‰A\­_„î@ÃLh\ËT¯A¬×öéÉRbTòç+Gg’u…àİ…4šzôµ€ÉŠËd™—ûO:XbÎÕP·¸Íé'ÖùP˜äÙ<­„냟y¡«ì¸ê0Pé’0ëÊP|ÙíëG +3›*TÂaĞ~†æV¾·h¡(…ÍÓõ;¶à«Èøà§æ…D^H]ópíç¦k[æ¦nÚŸ\¥&ÏRa½Æ¡6¾èXfϨjİyZ­w¨Àff^À¥¼£eµ ‹Nª•(ÙÒcÕЧø]ê¸Z9AÒ+âù~BlıÛƒFÁÈnhùîè;«”SÏdÑ–Ú̓#”õ›Y*•^Ô/©Ë`Æ+Äaæ»  »J¤¸l4 õì”%Ö5övñ¢¾üèKO'r@ ©wµgr‡†G}…2ĞœÚôş¢Ñ–b_®g!§Bè† u^1Ëós‰¼¬ÊX²ªéšÉßs²gÌ _§µ<ª\ÎXÕ—Îğó"k 1mɉ ï«OË‹&eÄ¢Qá;Cow]pkÓgêí%óp¢è]øùu¶Ëª5p2åÌNJûe:Kd”0äÎÉæcœK³:ïüÓ›q²ºM¯_™Tüºü—¬tƒXOvÅØ&òŒ»¶ø¸oxvµñk¡ ™L@ããñ½(£k¿ä†ÒS©H𣲧»ù£B{"¬H•U|#Æİñ=I £Ê'Í|h Â6â1ÜF,}Ñ»æUÅ™ÕÓ®%¥Txšd‹¾e6XL¨'¼UH‰ØõGX_? ‡¸p435, ÜI/ø³•ş.}á2¬RÛQ'“aW‚ú,>xÌÇ`¹jÚëàçŦ‰@š§m("5äï²1/ò©İ¥™ƒvi÷R9‡»Àiî×',šMb5Ä.I4"é”ò.„¶‘\(°q•­fãHIíZ’>¡ÀU(‰Ùã7§ Û)ö0€ùø®v߇yÒ/rxi,?£±a±àäa±›B f^ø¤}o/ÈM²fN›Ñ$©Å»èj¹èhµaOAí»UÖmàËXD#®Ò|#0³´VrïΠ"û×ö„Lò´õzIzSø ñH,`ö¯Ï­ˆD«áçÚ_§¯Ù-´±†u̳XmÙËk}ƒgg]8O Ÿ?`ëÂe7¾ V3ßë9%vØ3ùG”Ç?Ë şN bÓ?º_ £™oMIğóíôÂjz/—ÑYDeOä8¾ƒçœôd åûŠ Ş,õJ÷áÿ¢İ°ï%Õ¬ºqo.w•"Ü )İ‘ †ü*È›j® ¶­éõ”†Ê&‰Š6g~l†ŒÃ24Ÿôşöyô[güëØ§£Y”óªZv-½“GıÑ­!\Iv@ ;2eá~ëÕÒOyô)­¬©’wTÄ=.?*ê Ûj µ!ôOJ±‹p:ıœ_ɾ ‹: k_*“3»1™†;²"=˜:3ÛÑKÜ Îù(éó\~&tÔ”u ƒ¦ W¥‹çŸú‘:ç/Vßæ¬%²-ÂÍv'±Š:l)¤02h}`HOuh&¸¯G£¨!5Ã̯ÚF•†¶\%şñz/)œöŠ"kYÔHƒPò˜¿7BÙ½#•à!à5í&å·VĞ̘-ñå„Ê©EËÑÎä»g WP?u'îf§h¹çŸ#^ûÔª™‡X_ª›×¡w2ï !¨‡—eŠ;½îârÖ‹Óû«uNn‹Ù˜z±ôü¾dCOÛÕ:à«#£”†´ô‡çO Ïöğ«‰pF§ß—n†zÌÊOÎhÚFpT±ÀGè§‚ì“Ş¹œ‰øì®å¦ié¶(´KRŸ]j´±‡g/hò$ñB¹·NÉn¿kÙˆ•|şÔ’Ò{³ Ê.;øÙ¶JCU*I¡´Oçû$$XJA`ß ­7ÙW'v"¿â¥0ŠT¦r ï5Å;½î#×da´¦š¼ Ñ•¼ë¤é/Vù¤ŠüP@DõÃŞJñµ‘Ğä¡uÜ$†2Õ7­\ÙAÈñ¸Z§&(ú×gŒŒVMfªVk)ĞóíN³§ï„q1œõ6Æ}¾ÇDÊÔBA5ëÊ4W?ºàJoşÕ(‹|$xIŸ>‚ Šë±ã[ |öRĞ šaÓæÇ]rÀ@OÎC{f ü6Xš0-‚6Rm¥ êeMîc¬xÀ.zÀ ö*Ⱥ-¹ÈğP ¸p=1?Ù@Ù÷;sl1Kª´”ÔM¤Ç•©o«‰õúâ]‹ú˜ıÌ`Ak!¤.Ha•½ÇÑÎ ¯7Ænñ6ÇUò³ßg û¼OìÇ•Ûá….Ô±¥”ìœø©[êRü9YÌİÎé04PÂïȇ}ÊcÏ£ƒÍ l‹>eØM}F ş¥ä‡&÷ ãÉ(™cP›`_Æ'öşİ©¡©©ªÛ¬K9S[±şÊ…™à=óè;¸İ´¬^(˜ÇNJŠ0<‹í~õåã›A$Z±!éfLʨY)*Xé€XìAHÅÃ:ÓOpJ%Š3mº˜,íß±2œ»¡e4šîIv³fÌ|„—78AÃÁ^óyáô¼ô ®œ)šp„:¸è!z°òÚûôu[§ ªÁ£ª~’• Wh8P*ã !÷ıi ’3Pg³ ÔylÖGQfÚİ^@"çgxe™v¡ã²ÊXÁlOû˜iÄİôkèğ~<Ô9Yª&ÖñfxçЦʭ4¹ps³jù»Òòq|9ËR3·®g¢äß·Hqs}·ı2©2lUPÒtêó&è|ÊŸw…š94pYï%K§Í‚æöMÈ@½(_ãl-o¢Tı«lµŞ/›È—ûh$i=æCëúÓ8+=ä×?º€Ğ¤OGÏcåÂ4¬<| ~aLÌ£q›õë…ÆÉì&”êwϼ¶Ò›m Êö)í²TVlĞ©ç^AâíÇò‚/ù0•dQÅÚ™g€$ªÓsϵN“m©Pm*®F;®,&ı.tXªÍB† ú« ¢—Y¯ÈB’©èz'aŵ73DÕï'*ã,hÔVY;É#Pß ùч¸+ÆñJyl’V:FCß–Ğ&8ñ¾‹Ğ±5{§RºY&xbvğ&‹*fñB$|®@äÛ½¤ª³ÙX^O;]Š™ïcåÁ\ïA(O§ÈÙàñIIò+®²/Bkt°ºy•'ôgçï~Oû•Ò¥*«ç¦]`E®ûäú¤#…}fSqSƒ,‘×ì¶öş ¢ùÙöŠ‹dmÑ)—´‡(€ÒP·ZY9šìºcíòŠtÕ±9)hÃܶ8 0T` ı¹›dLës¢ºğ»)1MkZ©-²ÁËâñomÔ$?óï‡ÅÅ"%Ë lŠîïXâL*= ‘3{'ä…èëÇ/»4_»?Ê, 23±ø¬&Å¥¾¸Üw©©~´P¥!Şg `ÓAŸk¹»’œÆœ( G^7islcHŠ›Jõ(ŒLdm£Õ.Q ½׬LÙùÌ&YÆC<÷8Gèdz¶š€Ö×'1öôU‡¹|¦‹XKg—&°ßyÁÑ¡(±‹&o>:mŸš/ ³½_ùuÑõYœ³ex5ä<~22è-«ázÍ­}kÑ7­a­"Mûë½y±äúVñÁ²Ñ=ãC›cÕ bاÄm;S¤t™º“Ï{ĞãJkpm".0&sìÙz/vkKÜ,Vtòlg_XV²ôm™øôgSCØIÔ_X÷6ıÁMÚçP®Yy gşi»<¥ô]ŞÎÜZŸLÏ ÏÙ¼¿~Ã2š˜§.r=}„Å($l9ÿàLg&í9$(uçÁ źΠ›ÅÄKwÁ+5mÒä„'JÅK†¸)HwırÀʯcæ“ÏÅ¡l® íDrĞÎXo6(8ÓìÄû }¯Ôÿ„5‹›.‚l¹Jµ#7½ïôŞ `sÁ‘yf³Rè¬Ípv)ÎÌw”ÁÛJO¯`ÀÎBqò%À^Jr-ò¿uƒ…Ï¢T—Ö[©9¤Ë(‘½ Ş{–Z0”øâ›¢ñ½3 M«ÀÊÁ•Ë /¦.AĞş-(.¢ZJ%11áT °:´)B5#n–±¶±.õš3HÎ:\ŠbÍÓ0éh,~oܱnì:5-ËAåü•U”1b,j+“µ$Sáh›×«Ñ61î†ÍõÔ =“ı!ˆøKãpİğì5¾7İO—¶²Æ9­F-e&G€+€¯î>ëÔÅ>İ5Œ¸à*NXÕ*fócÈÔÉ´Eaı¬ŠvÖ©å—ŞYnõ?®‘×Qî"È$˜$çËùÂ8hôé,2èÑå±-k¦ÿü/@R` `›İw~êšSf¨íñuÂJ•ÈaLyVƒÃ8é[2F(/Æ¥óY>7#/äƒ× ›«ÈÁèu¢ Ş6SQgs`ÖO@ÚÑ•¢Kås…¦âéê’ù”áî«NÖY…t9aÄi/Ú,(ß!PuÂv"ˆ”½wICêÕ½ñeåë;À ŞÑB=âLD0Z |‡OğsY ƒwDm«óy- 2åϲq¤ŞÖH’Qw_¥A¥fåßâ_İlé%ÒÚèh`ÔZW¿áôÒŠ¤àå=n¼ÏF ØÛ9ùÚ«W³ö. €ÒUëÚe½U¸ÖWŒ¸]v»Ğ…àQއÆW’ÊÔSâ"a¶ùnwXÒš·*UOó.ٻͥÑ倿•6Õ÷xNSmÏ]1ªâæéä4„ïâ_›üé“eusº Wø¢µÏ&H_Öá&Ë5yÜß«¬œ…éâøgëÀÙ|“õP`¯XI8¯ 2ã%§,Biu[rŠ¡@t®áÚç6õ*B‡ÿGi ëô±“I€ş‹^ÿ4„ü°Éşc‹ëğÄ£Ö°œv¿©»n) ÎÃé—£×9¢Ù­)l¸u(ºüz?ÈíØç0Ù‰+‘¡/&]VÈìŠ iò¿Ñ1ePJ=qqë}—ğÒlÛ™”_føÕ§tÚ~ÜÜøîŒ ûrk@šê1o[W8í^.%â~_ú ó |!w¸}Á´ÜòXJݤ ;&ıxğ—]z…TŸnìtø Ć@¥Ó¥¬’}IW „@ÑÆˆŸ_ÆóšŸĞpCéO”;•¹ Ÿdáãd>“1 ª’è€ê$m…“(Ö>Ì)ÊP‡#…Ê~»®/¹"2™=¹†:·á0¦ƒÚd ßi˜w½'ö.ÙX‰À^çüÀå96J››İP4ñ„äª>ë ?{4"À•›1$UëñÔmÀšÇŠ)1@½ÎJQA X†U"DS£»î=gÌã´<²JOáÄ׌ìğè›ÄÕÌyD¿Â¼~o0¡ WB¬Y”_¼,}$Ob.‹v“Îç+BcÔÕüBıº°O£+´g¤ˆ SŠú•N1A€¤R¹Dò7ÔIdFˆ&"pºáß÷œµ[¢R¶0°~¹ç$®q Õìšš$Ó<ĞOó½ Î1öÊÏ鍿 hTN»d\ÔÌ÷ÆíæNKÏDT¿‘…‡xÍeÔüÙËî‘à *² ˜Â”øŒOéáRŞLݾò¤,À‘š°´¨sñEz$ß«í½,W¸½‹ƒÕÆ–%#„îµõB™{Øü^^Ğoˆ]š„_›©%éHGádÔÚ• R„Ä‚Â>2¶n+ÆÏDKŒô™­K¿Öà#Ş|Êï…ƒ #Á7ô¨ÿúğù=Ö¢Gwßäû°ñoÆÀiŞÕª4üıı¬ØÚ1ê”òû6}fK?§ˆÏ¼–ğ^ݽ­¨'»^ŒàË VWI;Cˆ¹ò^ûü$«¹<5Ëê”óı+­6ÀÌvb ‹,‘*Cú—¦O¼.CÅ9ŒªVjX‡F¼®;ğ¿‹¾­¡B–ÉpÈœ6—È1Àî¦tşNˆ[60ÉöôÊàOÜÏù< 뵋…‘š:#qš« ÊbAƒîÉ+´¬"†èͧ6 —Ò¤úQ^&~&›³p{ü|dİxù“U8¥­ üşİ£Üä=8Ú ™TGR_Ûšk­Ï¦+ À]ÏëlÏŒ ÜAiŸ¸nqéIŠÿ Ì· BÙÜdeÚĞ»ÿ8ï§D%rgƒÎ`ùúˆÍ%?¸5hµ0#Såøáç©›õn÷£#iœ˜Qªª|`=•‹^8&#ã2›Ú¾|…ıå ÁÃÓ»¡h*¡†Æôs³ˆ‡{Rì>f|ÛΧCMÖM@d;”ä!‡9+ÇrT&l¾£Ì±u€ŸWŸÚ‰=l6Ó¢Îb‘&W×$¬£qAÊ tŒ‘FÿŠ9H}QxÉÑÍi!#M2ì¹XóØ‘û¨“Uü“§Û‹.ç+SFÑ<=.ÛƒIŸ*ÛFƒ„y[†@êC*±ÉLÅX>ş¹€´Ä½Ë¸F¬´ ´–N_­¢‚æT2³™!®óz7Å~0¿³İ9Z;Ü#6½‘ø%aß} {÷ÁôBõ”y‚‰1”¶Yjjï—ÍàÃ\ØAå«—èJÏ£©T8BMY–ø·øt»+Xi«ø_>=HE ü>#íøo,9ØH"3¸¥+†`oÏ_nkR?Q8šâÒǘS3/±¶" uÕ^ ˆdO¹Å&°XPE;Ù\lòäÀ‘×ÄÑ;©© e2ï˜ê]«C¢:˜PÔªJ02‚~è0$¹ÎMíëÊcGü}êªhë˜BˆérXt(ÊŠk²ˆµ¯´€Üâd>hjƒU¦wĞ÷6>•Öît´ï¦hFåâC‰Æhì9ÓV½^QŒØÁOÎç¹m¶µB…“ú.jPaĞÈ>=‘Nşİb'§îu„²sdŞéˆÂäš] ¶œ%O¾¯íQ³=² { 4S3âÑt3COt“ ÈIîˆWZ¦šUÁÏÚi]3²¬â­VIäiVœgÚ¼p*Á˜µådÒ³³ä|Õp_TÇ×dø’‘¤6JÃXÎLÜü (µ¬ô0ä±Î 8â>î|äS;mİbUÿ]AûÍSCáqèîÚ¨’œpÛpŒ|.ObÄ´6»¦BÜ×YËÛÙ ÁU?•í'P}yøı&yS©q'ת‚lúˆWØáÉ÷¾Kğ;à1ğƒÊ]_\ü·&Ş&~şïDğ¸VŸ‰<ä9Gañgª¿=×ÁDöX¢Êİ<†go3nQã"WHQ}Ä …¦rŒ(HÈYBIÈÜÊ ~ü™ +©Ÿ¥§ác”{xÄsmvŞ©ù³µÆê‹¼n7L¾q–â5:ÑM yjÅéº怽d§Ë<$İOÁ[TWC¹ÑĞ‚­\¥Y?QXľ…şE•ƒãpÿB5½p±š8.â°N6{Ó˜¬‹(ş¹ás΃Œİ•Ìóœ´eï-÷ûXQ— «ízIğ]e* C¿—vz“;¾°’GáÑJŸ¼ÊÃǬ›9ÿ½ØUl»ó¯•J™?Jï|¯«ó ?¨][e7£•fÓûÂùptÖ¥o`Ô'\2&l7Œ˜»9Ûê¿ï»M wxœ(Ë‘ìêt7¦!VyäàÈ™îSµùXm8| ÖŠb6Ö›–q¬n{8µoU_Gı…ꪑşõ8ÚÈ­ªğTܨÃaĞÄd_^Õ|›ùhKLò:Ñ=*ÃЉol²&ĞÍ„‹›-ü';^²hc|tz@gÈ*=Gòаg«Aì<Ú,8‚ÛİØÎÛ÷Ò‹,?±W:õm0 ÁA—³¡Úí(Yqœ·f¹-Aªº©ª’µÓı–³ª†Á¡†_ˆ²añ<²PgIGû 1ÉXQÖ>Ö¶”îìéÚ“(aúÚ²w@03ï1Jšø:‚çïõû¾M‰ö«×*~ÎÚ Ş;³*K¢—Ùeäe‡*¡[Ø–uf,¸G²³ıáé:|/:İ\Ö>.B0TôıʸØÀpP%ߦ “qÓ‹méKƇ<ÔHׇu.i>dµ2SÛäcÀAzòKS/Îó¨+ä ˜‚«p‡\_÷,øÚ$·‹¦K^‘×8€ÆÁH³ÉÂÕÊKùÈ£xpµ êÙĞ83ùL2ö¸ôë.‚…½;û}]#ò×!öÈJÖu>½Š 8EÇ/ï9ğ¶úW~İÆÅ£=h’sHKß:\èPÀR¬§‹bÎ=áé‹–kb£“˜vI0øÙíH|3ã RKva7Ïk|‘”¬† uPöæ„øÙˆ²Èn— x5ÀZxÂá#zbG+ Ñ‹}!Üù+ÑkÌE:šyRn~µU¹<¢ğ·XdAıát–š‘Pcè“ÓÖMBâ ¢»×Ï®«EãXe-GÊ-Ïâé£ÚÌòi¢Z×qXk­ø|Y}ÑZıÙ2ÖSåOºœK $D½ YSÄ¿7¦:—¨çY©ƒîéS¦ğ?±z¯ƒíj‚é1·4“Mb—¸©¹²çdÕjßó~˜¥İ.öø£Kh@‰måO3î&öÄGªa4Z¦›½:‡fãĞü—u9A8â®Ù]İm°&Ÿí«5o4ú ±‹KÍtlÆ=ɨTù“Š˜R韧¢í$@â‚QŒÜ$è3.LŞa&ØTV"Æã›:mP¿h·È©±×òkv‹>MŒ‡\Ïßåq)/l †ª«Ÿ$‹g=’ û eÂõàP–… u‰×^ÍŧÚJı€˜h¨}Ÿ{ñàWˆ‘ËğЦO3ÎI™PqŒ'dÓğD`Љ°ûÈ HY4ìËq>i¿Ş))ï©)ŒAF†°SÍğ͹¼›Ê„­7{õş€Ä!Fàà¾Y'ò)}¬)­Ë]â3~ŸhYnôşÓ"Ìqnq(‚Ìå­"¥°áú°Pœ‘±ûIqÖµ•ş+_H Ò춺»—[Ü:ÎSÈíÔõކ6®¾GLCÿ¥6+&1xˆîæbжW¥Á"·ZÑZØò·N ñ‰ûFQ³YcbhÕ棠•Ba¤’ÿ‘¶T¹ ·²xŒrh^–•cÓVä œ¥ŞHÏaZf:‘Z(ÁµĞ䩤İX”ßš*‘P®~ş6‰´Ú´¨Ûlfñ·nI4¸_ÅãÉPfè{QïÈϻڧ*–l™X°ıu°%ξÏÑ›ÃòŠb~·õ=Ø¡8š) ³Æ^6{8¡1kÆq!¼Çlë<öìyë’Q'ìrŒµ@õáºïo8•T¼9Iÿ$¤èƨ2Îgíi¨ålÃÌ1ĞǬ(‰¦·‹|ÜÈ‹b¨|ê¡™E$4RqÅŠPoO|ønTݑŃ ºCÿ¶<œì>Ùd¿ ¼ó¯r”¾i·:‹ ¤&.BÔÍ qP«†ÆÁä›wqu3í‹JGCvѹ+¬*^–®P+é«Û1^: …I7KF,æĞ•/ÍÈ'>q®¯ÜI¡ÉÃ+hmj¥d¡}ê&« ãOnQQŸ…ïÀù|øÜYå³,€ó¢†ßÚÒ<Ï-uõ›r” éK¡‹],I=WáO\õ”ßÁbå±1h5°úøZdø O®ªA¬IšcsÂ0%ô›?™ÈÇ_šuØõ'ÇBF“é‹8@$ŞNפ“\â² ·E)_õMĞ‘ãk™là}3Åwµ¨òÚ†ô鸱@³Y¢K.Ñb=؆(†Åß[ïI¼şŸa ò:]è7nIüJݶ³-ôqyğÏYr8Ğ*¾ ü6$„šÏÑÁjşˆTÔ6WüÓ¶3¾Ur·=L4·GK·]…ƺxhæ…õ1/ÀÿÅ``®[€°ÕsúŞÁùâ¶šsí¸ø.Ã-•O×}uğƸÁ‡IÕ ¿«”ÖÔ¯ÂXşEŒ‹cùA&¡ªÍ¸ÆÖÿU~íu=±!I„°:Ò¦ˆ;ô“={ò‹ğttÑØ.M<챂³¦0xĞá<˜ƒ8ª]d\úèh8ÛbûBxtıB—:ÿ6çšoX½§ŞR˜«—ºÔ0¶§ÍHaï±" ”5:癩)5CØìg¤Şl}˜–y…ܺ7;r ‰mñ”ÈíÏ`Á;å0 áØÿN£áAÃ@îg\"ù‚ E:÷&§E÷EÁº‹Ÿ7D$õ’ŠP i¢AXb o§ fØ ìY¿ğ÷ÛpÀOˆvN[]ìÖ‰mî‰ø²*¡'‘¹!ã/j¨X:MË<ÔI}ü`¡C24c Øe8åÿ†'3 Õ²,÷ÎÀb[³Bkˆ˜Šç[¾/ ÑëÀ¶şa‰xù>³¢JÔ»'Íü¡IêÌév=í9qı`…7#‘ 'ü¶yÂÜe £»,ğ½ÇFüT-ŸŸnr‰LœpüV*&çû½^æ2bOJ”ığawX¬[HğtíÊÜP0 h…‹‰É Pˆax)?y*ëüØÈ´&o>_C¬Õ˜¢óׂŒ”&í®(¹+söÍÏ ±m'«€Ânzf›^7”b ôŸNReíì…åà1¦ e%>ªümĞßë `ÔzôÕ©\%êüÈ㈀u}ÿ-è)•ÔÃGìY†ráå“˹µKs÷ÇÃVSş•Ó”7ÊJÙ›îs¯“CóNs“û¢ëêàáAßKÓú¥‘F9¿w§º›NJqÊÉ€DŒ¥¢ÓUGcb¡$–VNäñ@‡huz“şÏ"ËP¤d5ºúq5õÕrùĞ–.š)­ãIÒ´Jí‰{àôzœŒásŞÖ¥ÙFÛ÷{)´€“’ zü¼‹ß²(Zúb }ˆP,~›o gÛ\~J—¾tŸb! }Ѩ¹ìüî< ±.cm ?:Uyú­÷Éş1‹œÒ?ñ­e(dN|my‹56qL —K)€„»Ä¢ ©÷­Áå0µñ²P¡x¼q ÑK)9—×Jóë5Ò)JÀˆVYGk’ÉÔt¶^' ºEDgàÄ}àÉó‰UÏ‚èEoWk!²Ÿ@àDñ­ÈÚúû¿Èhİ(CõØí‰§Å¢ÇİÊ}]ÿ¯ÅĞÕœ¤ üÃñüùœCö*ˆïdkVQßͬmÙØÀ½ïˆ}úû¢:º4(„"kzîÆø6– ­3±ûÍ`¤(äJ†ß‘š©ÊrL¢kèäDã´7;ç¬/Çô@ı6jñ×ÄJ„ƒ½ˆÖfÅN ¡T§3 RHyvpn‘wQš Ğg(ó‹Úgh¯4?´sÌxOt5á=Oljà§Ãú³/ûxm“WWK,n…S';N²BVĞe[­œ§ÉáªwâÀÆA ™ªq»M7áê´Í«Óë ½`€@ ¡6æËğ ÆŒ¨şÃè52é(é³vó<<’ø¡¹L¬³zÕ«ŸUÁo¯İˆ7×{}{Ç…­P<RË>;ĞFGõ<´ô¹ùõ§( "œ ¡;¤0“’É´àú6Ş¿vãÑ Ğd¤!iûnbœÖËß Ş§}­unXK»*]æHlÀ&Eò—ôB²<߃ǕœMšÔÅP²¬m¶– È+Ò{UºF š©;„ŠÈ0\È$ ·„ ÓË$x,Hò; ğ|Œº€E |MÅ·El¬”–^g¦ „ğ‡zìR9l¡>õ©Ë ªÀû@T j¢İñPgÏÙŒGï8„H}pi¶-,³ôÀxRFƒ8„ÿ›—¼è¿šÖ*¯RLˆlÑq_ ;_÷Şûa/ZwàJ˜·³@gÕ7¼·ÃeD^ôã›0k¡>İà ‚Ñ —kpı†<׳80Î35ø) 3»ßXŸî-‹ç®0ƒ½°âDÑ›)@‰å^àÜx^z|Şæ7^™Ãª£4½Ñƒ~F!ÕóÁ”këğ.À|ãb5¦¶íĞzÒĞWÿ.¼ôߢ_õÊŞaL·¬àI Á§ƒ¤H;ÈDo^ƒr¢KÈÕqÌß@,#ã¶mÕˆ2DÙ¾4§;³óX`ë2|´¯cŸerŸ½0ÛŸûü޵Šd™@yÍİNBãsqê<ªuêúÑgùà;¹ı-9àÜ«6ûœş°Rº>ìGB®6&›E3™>°o¤0ó©şÖ?<0üûÿù'~¥A½´Ÿ‘è¹Z3m?*÷Í@5“FÓ€®ŸÒX€ÑÛç`oŠ˜\‹}Fe«ªËO?Œqzvm@µ#¶.+êYC¤»ı­Ò’şJŒd´QLš|go‡’ñğ¨‘_ÁBÏÿd°&”ñ…Bb3Òyc_ÍRËŒêD eÓ0›Ş…BÀ¨5ş1S¡ºQI -'΢ėm¬mÌr¾dQS†:rq‡ gLÃ2ïô~ÔKÿKø7=¨$nogFqBXC!¾ØoœLwrk6ë—Ù ,Wȯ5¯° ¯„‹”Is„^­–PA˜Äâe!ˆkĞí„ë ßÌ‚@©›ËôĞ›¿î†H/v1Õİù3½(ŠRâ…\™³>Ğa {ÙúübÕóNi.¶HÛëFUÂ<æ¥İ,~ ÙI<*Àõν‰úU ¥’À d¤ OoˆŸn*²ÏEâ³+(Á¦[=îÕ)dì÷e=| ‡! ¾Bıçú$ İFM\@à &„À|=<ôş“/ÔÑ/·2“â„…æ]hã&¬}ã•b1€Wø=ñì örH3]pHÑrîò,ȼö—:¹:Qr1ó5¯ä‡ Ä,üC¶§ˆÅxfĺgŸicqã÷Ş…¹cÆFK‡!ç#éj?›ØÛ²Ù8¸ù)Ï ÃJ5!»y÷Š|È"Q3{Søõ4‚è*'Ckº¯.wx¥PK H7ßaWû!6®AÊâÓ€: ÍÊÿ¢S×ı$?ÕğE:Š·âçWÿmrLªå|l6°D å<%¦»d½U@š´àû/̼BK¾ú™‚ö§FÅöÌÔ³3‘²û&Œ°æ/Š=äÖ#N°¡fAÛ&W\ßJË0ÇN²ÙüÑFÏÉ–ˆPu@ã‹tú‡(İ´¯ò²ğ¾¥ô4«âÕc×TmùzM­åË7Ê ÔñU:^}B@då~‘Ñx1Å04£}x‡·BÕ´ÇY/F•zΡӂ¥îiIøÑµi ŠoBªÙ¡pSª{NqiÃÕŠ€ã£Ñibc„H-Êë÷¾/êÛ¬ß.jk½ ·^²!ÏB˜#yÌşÕ¨ø¾Hû['p Ï/ª§S7rRÖ²ÎôÒ?ÃV'¢%gé®Wy‹mõãz×Öà@Ë–çÁuT{kâ$ NËiL÷‘´Á’³1jf_·rQYs§ö,¥f-QrÇKúÈ4lUÍJ×~¶Ù¸}ğyŞçİHDiÜ ]ÓÜl&~aI¡O»ªzA“2àœ·˜† #û1Çü&ÑOƒlGÚÔ½’R5 eÀ>E ñ$rı±Õ?% œ^6,ó_Tc“2ÄI;MX—Z—C9Áù2³‹­0©`Aª²"8‹9^Ü»‡Â.œ-¸‚¸òşƒ}YéŸB½hoğ#ºOm*EóF¦¶†úU Š~Úˆp=—Û6zŠÖøAÜŸc†è²¥J„ÿ¬¶Ş·Áò6Üœh¥0µEvTÓıûÛŠWïOş iéM›ï%¹ölÚ+C°æ}İ‘Q,bh-ÔYØRmşÿ»"f8¿bÀN #˜l£9“›êõ4¬@ù©Côá|b6JyxsËó&Ë Ë3ºøÜ!ô×+±seA4F}İn˜›ï¡k&¿¢ëš>-çÒİ»@xÔÅ®¹P[ endstream endobj 2302 0 obj << /Length1 2337 /Length2 17308 /Length3 0 /Length 18672 /Filter /FlateDecode >> stream xÚŒõPJÓÇ ãîî,Áİİİ%øKpw÷!@pw×àîîî‚ îv9œœçı¾ª{‹ªeÓ=İıï陥"SQg5³7IÙÛ¹0²2±ğÄÅtXÙ,,ìL,,lTT–.6 ÿ®#Piœœ-ííøşá!¯I]Şíír®6Vv++7 €……÷¿öN|  ›¥@‘ gorF ·wğt²üdáòç¿_´¦tV^^n†mˆÚ‚œ,MvE ‹Èö=£)Ğ noj rñüŸ´..|ÌÌîîîL@[g&{§OBt wK €Èää2ü% ´ıG@ÃÂÒùßu{sw ğ¾`ci ²s~ßâjgr¼g¨Ë*”@vÿvVø·à?Ͱ2±şî?»ÿ di÷¯Í@SS{[ §¥İ'€¹¥  ,¥ÀäâáÂÚ™ıå´q¶ßtZÚMŞşU: %ª ¾+ü>gS'Kg&gK›¿42ÿæ½Í’vfâö¶¶ ;g„¿ê“°t™¾÷İ“ù?‡kmgïnçı_2·´33ÿK†™«³¦¥£+HVâ?>ïKÖ>\œ,,,Ü\¼#äajÁüW OĞ¿Œ¬-¿kğõv°w˜¿ËùZšƒŞÿ!x;İ@'W¯÷? ÿK¬¬3KS€ è“¥ŸèïË óóûù;YzôXŞÇÀò×ßßß Ş'ÌÌŞÎÆóû¿˜YKV^CJş?’ÿ6ЉÙ{¼9ÙŒlœ¬VVv^7' À÷ãüİÿªÿת Ğò?Õ±ü‰(kgnàı·ˆ÷îıWˆÛ&ƒö?׆ğ¿”ìßç ı3şú,œ,¦ï¬ÿŸ/Á¿¶üÿ›ı¿¢ü¿ÿÿ­HÊÕÆæ_vÚ;üÿض–6ÿñxŸgW—÷»¡hÿ~Cìş¯«6èßZÌŞÆìÿÚd]€ï7DÔî“Íßm´t–²ô™©Xº˜Zü{ˆş{ ïÁm,í@*öΖ=8FV–ÿc{¿s¦ÖïŠóûYıËz¿Rÿ›RÒÎÔŞì¯»ÇÆÉ:9=XŞŒ“àÍú~IÍ@ÿšm3“½ËûÀ»8_€¹½Â_'ÊÅ `ıkéßÄ`ûCÜfñ?Ä`–øC¼fÉ¿‰›À,õ‡XÌÒˆ À,ó‡Ø̲è=»üzÏ®ğ‡Ş³+ş¡÷|ÊÏ{>•?ôOõ½çSûCïùÔÿ€Yã½g×üCïù´ÿĞ»Z¿‰÷İüCï6“?ô^™éßô×2›ıßkıïGÄüïñùãğ^®ù|w7ÿşe´ü³ı/tûG¼¿ìö®Nÿ÷îòéø.Øâoäxláé`ñşÔÿñx_³ü¾Whõ|nı|Wnó|—nûÚߥÿ‰Ìù¾Õî}†ÿagÿ§˜÷Íöÿc~ãğÇü^ˆÃûû`ÿf¾ÿ 3;şï¯³£«ıûMıß²¾kşGGXß:ÿ©ê/¹ı£œïîÎïOğ߉ßëv¶:[ü#Ä{-¼?bÌ.N ûpwûlxáú|o›Û?ğ½p÷œñûnà{xÏà{W¼ş÷É äôïTÿó˜º:9½ÿHşë©~%şËÿúE<@¦+‹ö¦ü!Vµ!í÷ßE İ÷&ç¨ö´Sè½Wœ:\Q`éª3‚6nEGzÑÖw$ioDVI_¼[êa?·Æ«¶=ù<}S›ÙkCXÆœ*8­ †'bÔÙ÷yqôÑ ´†lï’£ÊqtåAQÉüwï—ö¨([[ÜSݯæ’G|.›eüª¥X­|Şë]º#—œ®ÛßécE|$ßR5Öˆi8ri.·¬ÖBà ôâ^ö[KºšrCo?´®n:±­)®}ÈçšØÀ‘ Y}Û0%°0?»Ô„£½S¤Û|}üs¤t'¨åE¨Äö@åş7?¸Õ§Ñé•ݨàüà!´£4«û¤É=æ5ÁÈÏÌ…¦ÚÉÁ)C/ø%<àÁ£jƒ´ú¨%!­“˜yPı+³]iÏ”ç˜ñdÓäÄëW¼uQjAnİKßÒŒõXúc/P(¬^ê(<Œmcç‡ÍîŸEX”+ ZºŒÕI=U©óÚ«òI ÕH¿óšsı4\ï Ï•ëX±¿U=ùÓ©¹9 ‚ £×g»`[éÇÊ´¤pM÷ÙØ¿áñX ZœAŸÂØ´aˆÚÁÅnÓö‚šn•º‡ç»øÎs‹õR)'²Íø¦-M±S­^ÄŸÙvÇ9ªb®øòñvë †VvNøı|5ÍÁXR4†/ùIfÎk$¤rTí 'UPz[)½¼Ÿ‚™Ø˜»ÇßNÌã‚Ğ„£—Ã;…~À·FÇGbñ«2,תöCÇØğ£ƒâÅM’ÎfÄ2 ¡Ÿšÿ “Ìvßk›f¹ÿ0™É æT“Xzr= ¤[ş{|Cx*z‚g[EÜöW, …-HBåz&­$œ«•ğ[Âo‘› …d·‘í gl˜Ò} ,-/Añ®ç¢@ކGt'&YÌ9’x:ÌwI¹ÛèòÎ&4ıåy\,¼Ö$’úªôç›Íóã„|‰…ˆF¸o›ZŸê‡–u³†Äıê†lnn*"1ÚÌRY &ø˜ŸÈ°†:Ö}¿æ¢¨NÒŸÃò²ky:U¿Ú,KW54n#sƒ‘ñ“B€{:Òoí—_ ÏÊÕ'ú‹CÃÀï»İY1;M/¬fë« Ñq|7_¤WvĞ1 wñp&éŨéR Xäˆo¸§t^'ÅÖ~‰éòP:-ÍÛp؉q†,Êl‘VXQ.´ºÊ³ÿz=wœS’IĞ ¶*Ç.G¯o‹0IJ$‡ÿÄ…7Úk½hÈK£„0–˜íÑë8ü²àr÷E5ܨróMGU/Ü„›ıéã,º”|b.?H]ÉJXùµ8^İî¡``Çâ«¿ú‡0â¬}Ës2ì¹ ËŒQDZ[9€|À¼#'Üóƒú8Šïm„¥´—;° w‹Ò¶6ÌMÍKW•ĞPaá€EéHÍ1í–lí÷ˆ«‚rû¤ ‰ÿ„ßïg£rğ/âA²Âœ…ЈH^ÎÅõ§¾® ÆIŠËeäÜYòsˆ¿ïÚ.wÃ~ğx*¾x_^Æøä¸Ó‘ô2I„±ç®ì'ÊS&âcåÿ‚Om0°ûצ%ÍşpîË”Àmû9§ö_Ø«Ü0nZ[Îvò-˜*ğÙSB_±]Wfù\õkûB¦“ùµt±á³>'ççDŠ7l½ĞSõtØ8ò»ê…†Dõ~v-©•Š:O <ÔùÜ@äA3Ê×䉈†.ÌÚËS]ş]ıxÅpWͪòŞt+‚`¡ÚífBmö £Uİt‡•DËFªˆJœÂ›IŒOÅ-…49W—üWR±M/”¢lİ0ÓÙ;ß·ÀS:*\…eyse6ÔUÛ?´Jóõš±ÕŒõ ·'ÿì¨KW$µòÏ( k¡VšŸµ2§sH¼3AŒ t]O®5İ®ôX6õf7» ‡Í^¥¦ Οãqî5ä`ôø +Ü& C÷£„µ#”î¿(bhEş®myö[ÁüÊ\j¹X1l<ÁmrÜ8A–³¼-väbpã¤ß›]±‘ ÆœêÄQpüëGñ±$ g,}IÊİø ÄImpé_¯Û­2Aâ0 ½´ÔXäT-<¬ ATˆ§a„$@˜2ÅF/û²~Ç.í[¨@“¶šc×M1l(3›³H“Ã˜Ş °°.uß鮨¬[-á,—2¦JØZÿØì ÿØ¡±ÑÙtÍV¥…ÿ­JÉys6úéÕ¿“J,xÕ"êr’h‰aëJ({ÿ3Á•ı¡|ò*¹LæT5ʆÚûÙ¹µÌsDùØEA‚›ÄX°&F$¾0ß0ÉMЉÊC¬Â( ªGRq'”là-¾™¢Tj YÈ{)y '·ÒnÓq†|Qt"X>’¬®?É\Px&ÿEvòÁ> \S4âÛÔ(ƒ0;F÷wÒa×ì*R0|‡bóéq$qĵ÷‹I^3sü¦tWİ:@FåN¿TߨdkgòÖI°“nB8–¹ˆà7Z İSLíèx…»Š)‡³tO¬qGMZWÈ $ÇÓ"ÃÜ¡&ö@gı´_|\á˜b(˜vÅĞemûZİşCFï¬*mW Ùªî&2›oyØè~0ëIñb–öÑ;v†Få<ºé—® zˆ¸Ÿ3 >[EàÛ»²µÏ`®¯{‡æìíHg/fÁ‰Ôò æÚT<8÷y~­tJ·ÎjEš·]Ë¡·ç®wË‚ ·üfş}cÀÏxuŒ#í«NIôAºÛ²GZj´v¥9sOG{©Nö “:J Ùpè«g#Áj‰ï÷•ı°Q+&>%ä)œ¦l4İΑŒñÌ·Xc"y£eÂÚ8«uş`ÂLşYŞ^ŠÅÌ$HĞz‚ÿ6½aÎ!m8^aGë}Ğ7Á·—ÚğºaÀ’kZ6!H3 \Æ®É~·¹s¦Ç˜Ìó|4jpNÏT¯ÅÍüEÌt)ñ´¯¹˜wzm¡ª¿”bÇş„V˜]¸ñ…:OÑwy­d˜=[ÂzØÂø«~¶“«™Ğæÿe‹(¡Qçïl{)£™TSë¥ôù/÷¤vÆynKØ tli‰k©q»”§È\3ޯgpÏåÛUúRn7š'ÚĈ]6¿¨< õ>ÕÏ£†Zqùbˆ#Îc¯“ÇÅZÛˆ×y¢¶®S½’ÒMSÙ5j/He(3ƒa)¢¥zVú`Íø]é:vœ–®’ZÊæ…Re‹i¤ğ.0x*;H¢»&µÌwáĞMOÒ›7°İ‹Ôšû¶ªüPuÓN÷ Ìòµá’ŠBNs0GÏü»†÷<3A¨égœ/pšPá wÜg<ŠySGDğ^¿xùvÆë¶¬^mÜnÒU®£)…âràL<.ÛvŒîÚŠÆúšû³=ËÃÊ⃿_Oq¢Î¨‰0{›«Š_ø–›và /İú-ï8Õ’UCr´½dÏÄŞ´E™«äÛ7t)ÎÑÒ0¤ üæ2b^Óö¶X9a˜I;·:¨S÷}=•ûì…8ã¹Ğ¸¹µh… _²Qçç•®àí(ª¦6kAI÷…ÏKI]Ná‡'‘•aVÂPqxì  ݬƴߴ¼.¤(ö£ tLŒœ ­ï6u_á†[϶á9\0t']ÇgÎBA H¥Ù  Úrm)ÕWVèíE7ÖõOnÂ\uÜ2·ßpÉ^¯”®_z¬ò¶•9ˆK:°V:M~¼í´|wÉ•ºô¼Ü¯Û»¹ >ó¾rWÕ£×”‹ËslF oÙA<Û±µcØ´R´“4—E²E,Q“&®Ö„ª¬ÿˆRÍÓ›v¯Š[’ÿ–)ÉGhĞ_ FV6€«$ ‡yv@³$Êtkİí- 2Ü›,¼GÉl’·CeªV¶e×Nõ!xç2-— ‹'’t] ÕÕH#ó(µ‰”ú÷hP’!u±«¬ÏÍCıÛ"Ki9""x¬®:ìyey/W•¦û2¹äÒ“?ñôùå± TLŸÀ iêŒy¨ úÎ bê®·wĞ×¾ë R¦<¤S±!šF]øú # Õ'3d¿6ÿX“_òÚóåÇš9^a—à·y_F•2ÃòndÓ ß–ğ6BÏ•[¦;ùaİĞôÌ6b93~X^¡wŒû9ˆJĞÚØ˜Ú¦mN1Ó˜‡¡¸QÂş½Z fàú”üE.DjİTXŠ<='şÍÓ Ùν#$ê)8ïƒ%¼¥úVüM”v…hf£Ù4ò’HI4ñ{HÀ9’Ûu#qt\pÖE3”çÑg ¤$Ê:yW‘€ŞÑH…/4w7ÕrkêA€53›l£uMe±;¤‰À¸X"Æ­ÏÿÇíoˆU]6İRŞËe Ø·û…¼˜4 BÁ6ÇDùº"ßq"ğ°Ä¿|ÿ̀…¿ês©‰ÿ«Vm¨Ôû¾y|oßûÚ¨(ò}¸m2ÛõºioRÖ%+vBc3¨ëåɘX\é* cÑÌÏo毸a¢mfìÒİ÷t2}F»îs›Ï7ÜñØ(ÚFù|Ʀ۹6r—8d¾Î[;]øÉ†€IFÚ^Ï_¤¹UFT›0ôê¥y”n £} iJùéD¤€ÛÔMóHÊ>Æg\(Ê-ã§Co´ŸÒ©F!½+ªÕïb)±a†ÜYO¿È°ı!ĞuzÍëÚd÷{PÊwÂãr§3§EµJ‘ß³©®fğ?Á]hêP[L„sÅ.+w\=şœ×d«1\Å»Gñ’®>}X*åÌN–¿¼xšw©¿‘¯=1}2¾%ã’>@x>K$y6ÓùÛ€uİ¢#é V“qºÒÆh3ú•mc£ZŠÉõci_'%PKÀ>Ÿú¬ ùúc[‰ gCÆĞ}ïGğ—>ïtjÉÊ(¾æ‘²íê T¢¸P5Åå™¶{ LÒ3* ê­l}u‹ĞÔëQ4;8=VíL}İ0¯€npçûñƒb …Úà—b+ú‡&®o7ÏÛ†Š½³OÒf-7 DÅ\dµT$ò?¿1¤íØ9ôà(øiKĞû8šiKsUÕz²Âš”cÁêp@ËKÖRôÿæ9`_`tÂACûÆAn‡<)š$wµ‚A“¸EŠÍÏä#!¿>¶n¤[4ÍŸïnâqÕ~ŒLöÒ«Íl›Ø;Ú5H˜,ù³Õå K×Íı‹âÂ9½!×İòÔEÖ@'Y½º¿ìOæ"Ü G6Ï F 8Lزùj¦:¨p“*7'ş-ΈëšíV¯˜XÂÖCåİŒ†[´öécölGZzeb6Ä’ë¨Ô¥kºãt¬§gä¤/œ)Pà¨t &6iІz6ØÍq¡}À]œN(R˜ü~_æı5\Ø÷›fr±ˆ*_hDÚ„Fu7—ıÄËC-QÛ²_À=ªª3ƒêFF¥Ğa¬Å³ÆXdm^‡O}¶ 9Ô/õ§`…3GÆù†ÙÜš4™âŸ¥ıî,üÙYƶæÎ©Õ|PÈ!ù{Şö}fH/Š]Iû±B`u+)E•‹g½ğ$°c©®WŞtµ Ö¿å’RêäP%)~1ÓgNË«üP§íJäjވ#‹géòñô,ÆW#‹¬€µ‘N~I… yDHËöx&Åɪïb»æî¡'Ä›êüÄÕ? Í¡vJ ¡¡›3ßϘı˜UÈaóx\iõdf¯19t”J½lğ³ NNoøõû½_"C]ÔR<–;ğ†¼éñQà!î3° ú\Æb›¦±\³Œt7Ì3¡]±RØX6‡-=r\œ+<«ù­5D©mõ¸ û’ÏÀÌÙ—HŞÜGrÖ¦…õìtcÙ|ñ0r^Qå[9•¹,Š;´8T›1O¿¦LÅ..‚åìßEEŞrU¡3Û÷Ùî褰ÒBM½µÒ" ¡A.¸?¯;vÒ6úcî]¯ìï_p/Xe“"…)?*ğ×ÚoY?e³×âA‰T™ÅS2Œ ô:2µ€ïà ä“4”îAÕØ½æ5Ïsê]äöì俉Â'Õr“ÓALÄ©M~…A Îè fñS{wù÷¯W˽³Z Å5,MôÉÑkj¿Lî¨õ~°W­Tˆ¤…_†¥i¥ä8ÔT~CM”±İ_ÎйªÛ;İS©.…‘;ÆnÉYomÒÖ–¸Qô]‚Áéş ¤“Yy{ÃùÁ&ZÚp9ç} ÷ÈaAo,Ÿ3ğ¬rs³§;ãú=‰ÂüÉ c¯8õûÜe{ÅçÃÌøø² ÓRQeğ/¨ÅTy–şMLô‰0ËêĞש24ş&=“Û’L>d›zJT¬¦¤Í¨“*UF‰‚Õ·†Orc®ó`$¥Cr/¡²ˆÙ»+ñèL˜h7LÖŸ'ҋ˨xÀò’ºp3 6mùÎ*"lš'e¦O „[Ø^¯f9÷Ë™+ßIN*9¦XyØ¿p~gXTˆ—÷ÀøhÂıQ£a¥i_íœ~æë F Èğu4» Pª|u>™‘é'W c£!PÂ5½5‹¸F°«{ı ¨'~ÕQˆøÌ*ò:}ê“ P,í.âÉ€;.|YŠ,›õEyc9 >ò†/ó¶dweqkýèC8ƒúmÔ[áMÊÊñ7c{¾Ñ´½¼vk 9~…·zÏʪ݈ºò嵤¼Äuïöµ…Ô·“ µQ’ùxhuu,Nl¾ñ7©„$_CÏÀŞGCè H¢©kê˜g’Şd”˜ª•öf|Ûºú̳"1cwûÛµ¦ÕSnq²r<‘ߖ݆°”¯:ɰçE›—Š:pÄkŞ¢/²`Ôü9ŒÃenÊ WĞ’û«­VòE@¹¶—~2óH¾Îp^£–4-Ô *­Ê=*©È¯+çhé§6N.›Tes¯r³ü 5¹H Ö‹4ˆ^CÍo7R(Ÿ®|Ÿ ×ê‹ßôT7óJ+—òØ1sò¿Æ¤æõ™iÊ'e}½—ÍøfyØEC¤´”’ªj ò…ß_a°»d²…>Îæ5¸µ]÷¬&_ÂÏYqB“ĞnÕ#ű/^á—³éŸ%ÛüİÍB:YøUÆ´UR/ªç8C,¸ünü&D_îѬ!•· ·¡¹ú9Œt^ Zs~LÙ)qÙØ¸Á¯9%È~ÙÙؼƒĞFüÊÊøtQĞtÄ4}“·TmرKîäÓœä;l±yÑgÂÊØ$ºAf…Ğ™‰˜‚±‰b1ÉÛ_Îôͦí£KÙnëúJæOˆ *]ѯ’ÍCüܬ‹³P`şd´jùÆUݘz§ny·6”Ä@¸)õá5Ô–­óÓ­RG‚ô†í3ôÎrr‡ˆeô7M°©®h ¼Ñ¬—%×KA3s‚Ÿ”ò@Ğ‚m)üw† ÂÎ&®¬\ [Ş ggå1dm½—±ÉŸŸ‘`ÃÜÈ`ŸÁmšÔXRaS{N²5óK» o]´/‡’üò:›Å «ı˜›}İ¿¯vÂô«ohn6²^†>5®ŸËöƒãœFlɵqp3[iLB[· l·ùÔû‘xm–pØÜ€#Òğ>;[8Z-6*I¹àÊzã„8à¢".³ªÙ8Ô{#·×‡6/&AıÀ/î&<דQØ‘A8ƒÆ¯áüCÑ1â\Oƒà,UF¡~'Dx€îÚÓ¡‰¯KÊpk Ûf§´%c8 ’şâV¹8;ğ1VW›áNCË)k9ÀYf]ÛqF¶j&F8:†B5Åîµ9ÑŒú÷¸°À­û˜'LféPçc!&¸dv¤‹ÄE' ¶aØ®6QâÙ "ŠjØmBZp¾Ñ¸q­ò¦½`ûp\üi$€T¡•d ğı¼¼h1?mÔ}G½ã¨¼Ö(VÈís šYÊËh5Jj«õŒíõHùœe±ıD} ”:؃Ì1Ä‘™­…yÉ/ü8ÒãÖcˆE4*d Ó×sÊÕ‡r$)ݶïaîö»ÄD—…_,à‘ÄÃÊ“wC¨yÀݺ=7®`õ„İ:¢:=<ãÇ×›ºª–İ^,Z"Dî?H¦jÍ…¨R^."µö; ĞÉD4™0|­<'ƒ„'ùQºÔèúßìâ™ ôƒàÀki”ûQ†C¢Á¨Iå%SóˆØ>^îTHr™“õÃPã—!o½4ªúBûâYTıb-<° Id¶.eõ’{?Ë3ÁÄõĞP¹†±|pQÖåôVÃá1vF®]“Ò|-îæW÷R¼Lí‚8»‰ ãK«Œq8\¢ÄY†SUŒïÉ@4ÎùşÑ'ÆZ¤c×®áx¹X‚ÙMìâ{ĞVº‰äטÑN$hÍG<&í×R”$Ş"u@ôzW‡ú©˜á¼=OxŸ;©#^˜Ì":şJ?şÄN¾äßëpH¢ñux¿5û+]\,‘¿B/¨à÷Z]4IZΕs[™È:$©ˆgmqÙŸ{c;Şy¸l‘ÉΕM^”r8>!ר¾Ø-hž:¥ ¿*Ğ8‘êš¼ £©rvÙ^´¤!¥&­ÅW<)sŞâw ¯Ê]akÁD†b.H) Ù>¨JY 2ú~ŒIî.ñækÔÇ󃟓>${¬Ú¡mP`k¼nKy˜]/{’MZQȽìÿèÏhü œøòK܇&J½¶ê»hs¾òRp3õU˜ğ=Ğj¸S°ä:V«¥Ğ6ËÊ, }Ì.ºfïº9°åş%HKØäÉÿeË»J CÁÑ%h&§ ÃàIĞÇ”C%D^l-ôH ªôZ—Ë=cp¢BVŒíY/°+@¡i›nX¶“ygÚÀ[ø×{æ|¢9!¤õOjÈËüü¹¨”¸_?u³^7¤”,–Ë‘´ƒä÷6*ꢊXÑt‹“å°MKtg¤ûŸMÕµ!Q³@ü¾’øbª‰÷ö«ËjÚ»~?6RvÑØúº‘Æ/¡¶äc×xk8¨`…e;¾ › LDŒ4 Øhr§ß³¢k™ù¥¼bŒFìÌÿSïn„ÌM]±ä±±[>7qhhï¯ şæšl0ÌğD:§ªu:¢=Ñv”ÚшÄlm"¯Š¦xcv„§ºìË„ï0ï!Ͱ {‡NÃø˜kFˆ>7-š;>2S&;˪$n×®D¯^ğ·}« H-C»‚ˆ\üpaÄóƒ •»Š$ƒìCµtF}Œåp÷K£¯İSTê;SÉÍjG߬|Q5Åß|X Œ£ğ¦Pùg¢,hgBç,Tt^|İÊUĞ+ŒÀ VŞñsæ=~Òö]ĞĞ/»­.$üÛúH\ìãVˆ}K^&FßÈSªù@½n O/羜ø¤ä|gn&¢,±ä6‰°wó†õ‚µÁS‹ fügZÏ…Ï¡3øfT³wC~4ºí[È6ƒ’Ÿ¢NÒ)í÷Ø#§t|(`F³e ¨=ÓÓÙâ=òÊÙíñ`uXÄœ*æCJƒOA[=÷Ü5Ğ+JìÖqÂÇÛ >u³ºàd@VêTëcšûšÇÓÖwJÆÀ>A²-€-”Ægî'Ÿ«Ÿé¢æC˜`®ü [´ f¢l¥ ñ—j•¦D\TÖNõ-´äƒ“â~æ§ë\ro»IAF·g߸¨ÆqJ<¤vù÷Ãp¦˜%æw’UÆ«@a[ú@d˜@”UİM©ÄpdøG;ˆ˜q¤ãÂRÔVSʱJ‚k¾E{üÖ,؇Ö$Ze’ŠÇëÍ8å^&şøà€èí˰ã·\1Œ$LP5à…9¾Çã0<×Å.ò… bÀB“àYîÊv)ŠÄÙÍK‹öÆNB ] äCm@7 çñAG“syØI¿Í™ 79ã‰x b"™Š£ ÕàÁØ '7³tdÌŠ«gx– ÷$G“Ó¨Îwïx8Ú9lzs:”Û¶¶ôR ë…m=mJt~H&Ó’¹~!±3wŠ£*yØ–t±0ùê­"çä¤?܃ü œ¤¿ãMX©‰`µöNfƒâ—[˜*É 2"i¾¬~lˆ0éíì8à9Q*~ΠŒ£Å}ôà®…¢§]°ş,ø;†ùörSÕ2ÒÍ1gpküS÷²Si¡Í=Ÿ+ú7î[û&ê7şª«&«áíşzWS0Ñ+ı(ª&ÁCÆ›ä=Ÿ†-tu•ÕUpK'G ËǬ6I¶3‰"Ñ8‘­¡é®å,y]~>ı~&odÌWY ¿§¸Ú}8ÕŒ14c~E戌d/]]`Wwà§^båv±ØD ô.İdñTT¨,/Êoô`ƒ£öµh.=W;·û87ª³’û´Àšì‹¶!üyC¬É”©¿ı=ˆİÅîÑÂãc¢P¸”Nî|áŒÅJ²£–_.–\2ê²ó2 ¨ı>!HyDdyÜÁ"‹´æ™BfÓH;<]që‡oJKâ>Î /Æz˜˜T8§·F·rœ÷ÊnêÇö–\JÃ7oæNz‚EU–İË©aüë¾2uğ¥†Mf¢ç“‡^­~Ê›–ıÜ·,ÑôËÆŒÆğÄ$FÑRş`ádig‹Ms‚˽ó–Bšñ>ÜĞ{‹\L‰“bûóc¨_Æúã¨óådFqŞ[NÃÔêÁÁŒqéœZîwB¦c,ƒêD%¶¿ÆŠÜfQHzNF ±;ZÈ5ÔäÁtë.yøÛä~y°ÄÉó” %SóÛ’ ¦U~cÙ¯ÛüV–±Wù5ˆ\´X®p# W6ÕšĞyv/:ê0,™NôD·< :d0*UYÁGWsŒWÄœ¥)²‹„’_K4Ìğɺ„`#÷ÌP–/Zü({ıìE ùª%N¹ôƳ‘óƒ‹ìŸW®b+z¹jşÆ!ÄÔ+ÅU[ğ*öÕ›¡ÇzÁAòŒKİYÀ ¬¸‰iÁQ¡ÆŞî#?»şïIş¸ò癲ª0 È 0TñgµÛ•O‰ŸÍ†¥0 -E®&)±i<½Ÿ€®ÅÕ뚸÷èîÃÆGN¤&â  C|òÊjİğXÙ–Y ÷üÌpìOZÂá¶5Q½:™ÎúV\ÁG¢»˜ê¼®»¨)l¶·ÛT–ğŠ|¤â¦Ä4¬úQñ½ìò4ş§fûìl!üU«{¡ÈD64D€ƒê{³(ˆA¸H­mùoªğ÷µsög¾¿¶¤õ0kxŞIëùZqJö§´úÚÔ…¸x¡VtE#§w©Ş»2Ê£Š%/˜OÜ¿'µÔe¨4ŒCa,Á‘YÍpšcد çá2%Y“¼akˆ*ö I> 'OÈ0æRM@f0Ï:0RJ êÑp&aàquˆ 1á[õpÏş¶î{|U†°ë©ÿVçI¶A,í®çSÛwş%)šúSŠ{£Åsá7@6&cD\ponx]f¶Pô£YöşØåô\ã`e=ø#WÿdìO‹%Ñ´_ñQ‚S,ÄÒkŞÃÖ#¢²X³.tæ8·§¾ï¡5Ì0rÎÓ©5¸Ú C°oŒ1,^—÷è qS̳ÒP¶¢„°†}_­T”Úô «ôaÓÖ@s¤¬«/PCŒùó©¬3íşfNÑØ`ä”6UâkOEŞ"¦èi¹{õÚƒâ j&"–¶Ëå,©V8ÿ"¨Ï*))ƒå¡JN&Z±“uá]ùÆ}e¿\Ú„Éô“8¦¬B!CΚ²®¡SÕ0I}vû›XpBY¿¤úg·-D¾–W,q)ÌÑ‘üj½ñï¡ÌõßzşøºqÎf`Zê‚#~^€Fˆ‡U#¬³QĞq…÷?Mס˜¬…ï8r1VkhW³1ù6`{ÊşÌH“–fq„i¬÷è„u¸ßÑr¸Cİ„Ààö¹ Ô.Äq!>8f†}ÿ°Ô)©‰ÚEì&c¸Ë­Å¯oê•ã½Q4ó ¿waÔ §3Ú·Á‘ •]l,ŞVnßöñ§õïÍNZÉáÌ[j¾¥‘3‚l –¼…;xøá,Îg|sqòöW.=53Ì–Ãd}Ô0­œò„|¼:Ìu2¦jÓe­Ğ…œ3èT½I¨4ÆZ“¶†Db'c‡$rà]äÑ"rıÅú$l²A¿ÏÂ)¦ª:×ùˆ~eƒ­1EÁZP²ÙN"5óØæ›”Š¢´Ù½vğ®_ dê:NN£¡ÜµboÜğ5€³•˜§¦îf¯!TòŸïŒbÜbÂ,Ú˜}ı˜%3¦N´o¼íH6×·-ÿĞ€f¡K%å‰6´Ì´è|å6š!áæ)'óй´ÌÙ™eœt3´Ckd·RÎHÙÒAÿâ şTê½Ö®H«û6» »j^ vF"Y%¯x-¹¨ş¥µ‰Ê¼-*îlÕ®‘ÅÓ¯=û®¢Úcy•J@Ì ÙºáK2ݸÍ‚ígÖ V‹ÂŒ ÍšO}óOğUnâk¨¨Ò“ ¡oRh¬»onJôîP İA—oL5® õÌ£Z”Ú˜ÖMXÍeq ,ëşUÌl{‰ÓîÙy‘åÉ|!QŒ@–f;Ú¥D¼1gæ–´y+[9¯HÜ¥íş‚)³Ú¹“ ë¾ç#²ÃşÊ«jb‚i ¯¥é¾ctu˜øUA-ã[­ÒËİOÇıv$^íeè™ÀåØ+­PG~¨\¼ëâ­¡Š&3c6ê·GJ-ǼŸ–8~fé/¨â‡ øÃN_óE(BeÙ‡~Š_ZËqü…ıØÊÁÚ˜jÇNÄcâOe+¿µ÷'å¥=hpİı?ŞNˆKä+M/e3_ ÿñ#™¼"»N®® <‘/•çßÑ]µySDšüH#x†Ñü­Èôh5_OEãv°ÇàáĞû¤ê‰'ÆÙU8–wŞ}¥1=öx¯$ôåu.ªäâ1h›‚µ*0QÜéͤZ2Ú“ùY¾aÍj]LAY³˜ÉK˶BÉBw¼´_¢§÷˜Òf©wÍV öf9!÷øÈ :âk Yİ]”€¿õÔL‘δ†°õ°ú§° V o ÒÙ“ '>.'J„ÈXE ëF§mMÕÙM^ò)ÏC®UıÌɱ#c'ÎäQÓö­û^O4Tnúö×ğ‰!İóON(\eU“ØÄV«‰ˆ¼»9Ü'9…µhO¬éšô©­nŒ ı/BUKŞzDj—ğ ÛSÛ¿4Æ"jm¨€—óôÃGıZRùĞ´(ÀNwjıÌñ‡k¥ò}ïzğñ\É›Š33„ªú?·O.”~Ü¿!k'`·T\¤û~ˆbäSkìbhc:"몯ىô†  .Õ³ {ºš®¡Ìh_Ûà$X’p§ê'aÎ>ßQÒ¹¢;2{dŸú°L¤–üèK  a8ŠQ(A˨Q}™‚€Ä@®.5Wl¸‘ÔÚ3ı\{è…c¨ˆ•©^îÍ+4¹š ÔdµqUªBš>—uÍ5–xG-÷¬­=pâI0ZY:%­"}&×ÚÕQ³„áÂù$%8BY¤ü$äÏ.ZÚ|{bı£+Tğ'‘`š 3ÜÕQ µ¿UÕaG–ÈáFÕajÂõMÎ ‡hÉ%µfW‚^꼘=¥ G–H̃²'XbºY(ENá–⬘¬5h†Eƒ^”&C~ݧ]…Cö刟Çú¼±º,œN¢™Â=#°Îö¹ßZ{vA¿É…/€_•Ğ8„ǧl¥º"‡­s€lğ+Jı5XbxЉ»jÖæÕú΂sëcz3Ê5õ·;b¯ÆĞÙݕŋô4ùä{“§I*ÍŸyBğ9'JNò¼÷Qüˆ 2;Uüı´0®çE8†!ñ >°üv?¿nEÛú›P`Ü:ÖÖ¤´ê(õğV4¸8÷ÏTreë䥲–ë¢Fêè\íË(›”e…Z¨bÈŞÏ:a¤_¹š…hfáø¨çòšÍÂr¾¡$°­m˜³OÒÙŠ ÀİÈFÑæAjcrìĞN”'ó[GBåò†»-ĞnÇ„èlš^†×Ç.íÕv©ÆFšÑJWRS£x<l«Ÿ2gÌnZ@`Ûú¤wZ:[¡Ìµ Œœ 9s©üXrĞäóÍ~m1Áœ;"Dؾu¾ fxWÉøùеú« 8ˆùRÕ½”P« H—­J9<ühGA[”‡^*ÈN¢\${l<Ȩ~ldHZ6…ìò‘u²¬·úÔ@ÀÅï8ÒúÛşø`ó;¥Pƒ}w’A5¿“­Àm$Ø+¾/á2üºGUıt%ÙM¸%Š(p'Ew]ä£ ÄZ‘Tª6"¡éÏğ)su^è0-eƒ«:`¿¶_T„p•nA/IãOõøÛ¾Ä cæH»èV¦ĞGÁ"üºOv¾kÅtQ u¨¦ÒNGŸŒ?X]~¿QQ–~Öş­kê`› íH`•éX¶5T6…“ê^×8"¨üÕ˜ÔkÅù‹ %â»BhaF›'ÑOx Şrºk:)Jò mPçºXòvCR¿V/mSW¬¢zŸÜâ'ò´EÒ>„õMJ˜k7SáıÓƒCUL0{¬È#õorr6¬ø–Fx­¤ò_sÕ6Ô¿Ü“ı´C±·‹qİœ‡ü0»ŒLϼŸ³€°B‹šU‡Ùߢ{ãóHÀ8ƒ¿Hj¡\ʱ½Ã:¾³R­ü1(¹'ÛHÜô ƒ»1‰ÒVp¬@*>¯6í/ÑE€y^êÚ<º†ˆƒ>~LZğ¥Ú²”x0?ÃÕŠè!YëD–Mæ.şÜ9e%Dü÷ÛÙR(LşYúdMîXGÊwèr÷c5„N 6¾Æj‰‹L袙¦àó‚Äœ‡&!h>#ü8—–i¾4Ò5è{—%ä6à ÿ×¢a4†ÔA²í6z:„ҒǺ$5¾ö}–ÄÖ!Q¯£rã嘳ôbìoétNæeeYõ„¶ÉHkz•‘K–Ÿ‰`åjAK¾»Kcıü¼Š•”’³(TÂ1µÒBC:›$5F`5™é;jŒ}âœtc?ãj' ÎPä8ŠŒÓ7ÏqLÄŸ/«(§Ü{Ä.Š= wj6/{Wy(AA?<*çğ’÷©#¶¶&vûÅáâ$󖕇)¢„@Q[nDı²6ûj1Ñı·Ëâİeœæ 6ü¹jäšéäŒY„¿ğ¦·d¨*í×"›ö¸>6"’h©ãâòè|ß:¤Tkì½U,Gxh…>#DêPd=Æ/ x¦ šÎÊL„+kÓ ğºá}¨]¿wybÕ½ÄğœEœÀ(®Wf£ßŸ])Ò‚Oϲ¹|Z=ÉȨ'Ö¥;Îça<ãş¶ÖÙ/u›Èúõù Rœ¯÷0ë!òšÈ@4Lu§F=qÑU}œ {$°w2ÿP?$ËLŠºòkh„!¸PTÓ|B¬ç¨ÑÙSèæíçN«¦Ÿ=ç ½õ”Kkâ'¨:şÎ³1S&†_c¹îŠLHÎ]­$?dFt´E›lº û²!ÜNh€ûOBHx(̺›A+djvòôÓÄTJ§ @yÆæ¡`×ğA½$Uå*w‡óÇõŞrkáÇ}8€•Â/WÌŸ¥,¾ •ã/ÉÁµC SôüHŒİ”Œ²ÏÓæN{šguë«/±)øŠ¤6¸[áå{i ,=Š•×b†Ìmj¬|=ÆïL–°LrI›ğMw¯ ÄQ­Ì‰IYtÛ¦ªM3VÃkÍN6šÛoB•áÕ 5~CqêwÁºrÁ!-’] ”GÂ[#¤ ¢º·¸§)!ÉxZ ²nyö|Ÿ¬SâYÃiÖ;P'äùªLÒõPÌ‘­+/TÒ^B÷‚ÃòQ"iŞÍ¿°ß¢Œ±¢4^‚^ÉȽAÓşÈXµŒ#Ó(³ıˆÒ–Ñã)şƒÕé4’Iv’°#•\¹”6=ïieÃ)R—²c]£x4ıR’Åù<ÓüÔÔÆšB òQß7v÷ôªèhs:~6/S6ÛQoü ¬r^ÛD+6Mñùö¿¿¥~¯„Ìix"RŠۥ举õoÀ÷ÜUü욘sãëŲ́SfCgú]œĞ\Pcüõÿ S¬ø0Ë«$2ò‚‰° õu°\ÆÛ‰l,Â¥Geò k‰Êo6)••áßwàÅs×4èˆÙÆ8²CµøçP†Ñ›UÖ1;?õOÆ•¨’*Fñ$¾¬R¡éØ$“š¶Nì'íU‘ÕO?5,ä¹İÁ×–ÌcO¶Î¢ˆ»4oùÏ9Ç´®½¥ÑÏZµAÄ!cæÚˆùoô¿c»@ãÒ'ùyÍrqªZq/ÁŸâ%8áJÑ.d݈!…uq "#şĞ\~p²‚¡ıË 8>=ûîÁÓ}Lô ïµ†”­_Î0ŞïgÉÕó(ö>zYPa÷‚‰¾òmå5¼¹ÈØ—(8F+éÆÄuÚ¶“ĞF”.A¦)„&“U¶AØ ЍRb÷²’å‹Bş$²­Kš€¨dKÙ¤u–V$«Î$úÈßô Y·ı¬‰ñY_”ŞÆUj•ûz÷LŸ^ÊÜåáb]0›•p®…Ä=•d§ğ„ß}Ó’9,6Ôˆ6¼Æ|µ6 5®Ğ0&f£wº Ò£a¡DçYRŠ¡«Ğä•6ÿJEw§=úò/Hv’¾ì$væ†xÔX"ÁÃTk#R‚°é!œ™£ [Œó¦~_ Ì¸ì …Nì‰+8|nHïÃd¶'F…ªÜLDNš¿ˆèKiY€XM‘õE-’Kû\Uj$q?N³h³—¦×ˆ'x•|Õ—¼=|Š[Ãcös-Å A8v‘‚|èƒ;µ-_[~vs=K EƒI΃xÈXçõ˜Û9÷5˜ğ{–¬u#€ZØñnƒèŒş$“÷«ºÜøy›-.ohSûóUš'Ï ¨B'&ƒoèI ¡ü×F‰ÁVVDl’ÚAvEh4˜dÆß“… ùìq˜¢ŸÈs.ñ¦ŠBËW„<¢›U»™ÍAíevJ|è¥V3'5íaà#'7ök'/°rú¹÷k„%°ÉpÚöù‘,ŠSpz$‡ÉÃÚ™¥4xƒN† bçåùlêh–òP8¤š™ÆÜÅÓrÍ|³¾CF<…ŠU‚Z¹šäè‡Ç™%ÇD|Jl•aÖ<ä—ão¸ NÆS kœ‚ç‚Áñ56Öí›…;)Æ¡F{Áôğlm“ ™jùe¸B¥yœ/isğÖ Ù 5ş 4‰¡L®DáÛFªÁ—c ¶H^í`Ú*Í v˜òœ¹OôK…O—[á.õúwQ¡v¿^£¯²Ø·ıâu¡‡T蘲Ó,‡‹%+—Jë…şlp~Nn°+ÇÜÁw7 §n7¾AzÃÉzÙ‡pkGâ?óŞë¥Éù­Şo“V{‹<Rô­dß)J³Òõ‚Z¤/´ùê­O 4U¹qÎ XŞY|Xù‰6ƒI!ßyf¯&ÛCeZ•㻈B¸Ä ÆØøf ã™±µßùc5ú¸uÜ?8rö—¬p-5ª²~°'µíyß3Qzg¼«™|9«÷™“£u0ßM…œD>VZ×0 _àZ‘ÈBøöàxø#:¡›I¹!ÀÔ†ı{Ú´¡´#Äömõ)ZùÎwo¯ l™Õštõ££m¾¢µ0JS”PÁË.»«Avù©ıªƒ¥hü¿‰°Y…n'è/‘6¯&*Y­é¡b…Hã#/®J÷ù .SFVå¡hù‰-xÚÜ41Çve‚²EiA¼Ÿ„`Kè|e :|™œ©×YŒÙØ pª^†œVªE›å ÚªCREqı¢oÎ$ïn°ÉÜ4î×ùYÀ÷åâN¯Í!矪jSîàtT@)ÜŸq\.h{¾>lí°oIм‡Cx…4b/ÍÏù÷m(Ö"[G¤²´Ëú¡º3oḟ‚e>ú “fäÆÜÈ Á„]S¡€™úN©ù<…“%%ŞÙ!ügÌ?Æ;ĞØ9¼\œjjfí÷›è^cZÓZLHf»là —vkØ®ª9x‰ò‚úÍòo¿é!Y<#Ó*2!Ö‡¬ÍÍ+¡rª ¬›êì‘8ÀYü ôœ­Åğ ‘ZÓ$ZH›Á7ÁaŞ/ôÃß!èn@³ª_ Ì?£Ğ~áe­«;¤Í¢f0Û(\UAd¼5á°îó5È۩ӣ׉?ƒÄE¡ªæÿ$¤¶nèy€;ŞÔ¾BöşW×xîÁ…š${_ŞÇ-Òì@´Ï804¢áC&ù׃‰ì uDXg_Øk×k*JõMÜèf)áIÁ,éûC1z©+/³qüğ(˜fW¥ 'Èñ©´ S©ÊQW¼×öZ­Å†l)KİÿoØ”a™ÂÈVî¦ØÂÓ9Ñ/¿ ä-9óyúÔJ¶\a™º„‘ƒ4?ÚŞ=…¿{b Húk~n6+ùS‡)’q`V0£Ùfì¸TÁ@oxì¹Èà0&×.m×”—ãhòh#ǽ˜ù¨l’K„¶ßÆm] endstream endobj 2304 0 obj << /Length1 1611 /Length2 8608 /Length3 0 /Length 9644 /Filter /FlateDecode >> stream xÚweT›]-N¡¸;Áİ]ÚâÅİ­X€PH ¸•B±"…âZ(îîî^Š[qw§8\Ú׿{Ü•µ’gÏì™9sÎó¬ĞQ©j°‰[@Ì€2°;§0@RIBWS‹ÀÉÉÃÎÉÉJG§ r²şãA¥ÓBA°ğ¿8’P ©Ó“MÊÔ鉪äm\<.~a.aNN7'§Ğ_DT eê²(±ä!` #*$ÄŞ ²²vzªô×#€Ñœ À%$$Àú; n„‚ÌMÁ%S'k İSEsS[€ÄtrÿO FQk''{aWWWvS;GvÔê%+Àäd P:¡.@ À¯¶ʦvÀ¿›cG¥hZƒÿpi@,\M¡@À“Ád;>9ƒ-€PÀS}€†œ"@Åşƒ¬øğçö¸Ø¹şN÷gô¯D ğï`Sssˆ½)ضX‚lEv'7'V€)ØâÑÔÖòoêb ²55{"ü^¼)@F\ `úÔãŸ:šCAöNì Û_]rüJó´ÑÒ` Iˆìäˆúk}R (Ğüiçİ9ş>â·`ˆ+Øól [XşjÅÂÙC rpÊIıÉz2¡şc³:ø899¸@ĞÍÜšãWMw{àoçoóSŞö{€åS+@o%ğéÕÓÑÔp‚:½=ÿíø/BåâX€Ìf@+õŸìOf åøIPÀ€óI„\Î_Ÿ¿ŸŒtfÛºÿCÿ}ĞZšê¯•Yşnúo·„Ä àÉÆ-`ãæãpq ğøxŞÿÍô÷üÕÿo«ª)èÏõı+£Øú£§ıû«—?õÁøçø0ş[Aò¤k €ñŸ10ääã4úâúÿ†ß!ÿ¯ø•åÿc şwM2ζ¶¿ŒQş/†©ÈÖıOΓ²¦D ò4+àÿ¥êÿn ˆ­ÅÿúäœLŸfElõ¤w6.^vNŞ?ì GĞBädnı‡ş:§ ¶ 0Pâúu=EqrşïiÍß>İ2O‡öÛ|š°ÿÖ•›C,~"7?À 5uG}ÒÀâxr=ͬĞí·Ìì`ˆÓSà©Co€%Šúëh…¦¿L¿ד9€ÿ‚<«A^‡õ¿ €ô/(à°û>I”ü/È à°ÿòò?¡'@,şÅxÊı|Êîø/øáô/ø´nç ÷Svßğ?»cî …>]$¿…ü´uáß·è4G‚˜‹øÛTø7]•‰“º²m só¢÷œ†œ?ÓY—&vÙRó“½>ãÉ o›Ø ½^ÆÙãÎ{¬}«KÀùÖxÉ+1T˜`¶ª ÑÒlÕkçÅÍ£¢3÷¦Bk«¾ ØÂŠà¨N½Ïõ\lœ‰Õádc2eçµ(}]Ée±õ2CÍ>;Üpx(2‘  œ³xJs‰D¹øøD‹­ã©ØğA4¹ÌÎub÷ 7ßjÏ\+,h%‘twİ^áB“ÙË/ï&‰ l®”Ußį7$4J·p·½–g“¢¢7Ê›0!O.ŹÑò¼Ìê{Ûc³Šä»Š;–û~Jåã.:hi‡V¿€ºÚËY¨¶qË”Ì1¯îÉéj.›††ğGÇZ´¯;fF0ş†åüùğ[CG„’2óè—ş¤ï`ø%‡ê=ÉJªw¹Ñ£8³jßq¢[ {³“±ÅğYa>CFšx^ˆÂ°0Ğ‚¦¥kÉ=™Öç):Å _f:zË 9å—Y1YûpfFßu­X¯íŸUx„[àìøãH?ãëLrNıF\}$6’Ry"¾퇭Ïá]aKa뻇‡!$jµ[ÇNÏı1®Ñ.åê߯D“Üé!1ê.€QÊ|À¹•Í¡'V¦g!¢s¶”i@iÓehçŞ,Äí?wçˆÌŒ%/EMİí{¹€BÚïjÅÎR¯i”Ş6İ`EL߄̿Mıà7jm‰õ”Ïë1°]¬¢5™ VÔ¹/¾O͛ƓÏ÷e?g+èc¤kØÀô&ñHaÊKY¾}¹Ÿ¡8šÏk8†«X¯æ•¹úYˆİÙ5«Œ˜w2xá=Òº«© ³îğµ×¸“D¼[n`O|œÑŞ·Ô#’wyR×W©Y›ëì:9=õ¨‹é×jB+ƒë¾>ãÎÁF’zSdôa¾±Ul|CíÒóCDlªyC5O'ßKy—M¶Yû{ zè4y@.£pU6n’P æC ¬ Ì6šşyi»@Í›g­æ“HÚ`ÛR2øşšçâ‹xʂƃ‹uZøA¼…x•yÎl†l¸Á+„Q 7¦5IÁ§Öâ\tl„İŸ o"ö’ğ%­öL“L| «tmÄØ(]?Ä$Ğòƾ‡aª(9á& Ğóvi5?À¥ñğ;­XÙı!²¸˜p"˜ZBóÓº³Š7"2n£0t¿M,yI€smã Cşª10CÏ*gš £şP2±½ÙÇäö!üÅ!³7JJ ‡}>­[¶ÿ q¿óVeº%Ì(²³\B4&W`öjhBG­Q–@ ‹V‚‘ZN$$ûuɪÿ£á>G!oí8#ÔóôÀ†àTÉ®[ïÛ'\bͤ/Bğa˜•oô—ÙBeD#×íğäºda:ÂxR¶Ü©Ğ8Ô‚ª ,'Bß‘1”±äéJ töKúğÑ(ÚRRÇ/ËC­ÓW¼İV¢G+(ìâë¸á`ûòr¯KvğMáuµD£²>‹á¸©Óûpƒ¯#şEë¡=Úº]Ykh!îû™'Œ}í½9)®Å¦ÊêÜD¶»®X‰X“îÛî­}”Åâ~^ƒA½¶äÇô¢âAÂ/ƒøv‹Ñ³ìX½ñbᚈ„}z;±¯¸“u_ëîïò7ÖÎaá^ãÌóX1»Ág9+¤õ¤q¾ÿî¼£œfú&±çÓAÈ'¾pTU m¥Ë=)ÇM¼–IÈe'†¾•öø,ÓëzÆSÂfĞ#)x™ÏšÇèDÍ;İk¿¾‹~%‰å]Ä;‡¶Î Ÿ(]Ú*{x á­±¤ˆ8Ÿ6Ç1©lbø£Ş1ÙòLqbœÚ•³üFh¨G•,&Ã!îı×%j®.}XïAr°Ë h` ¶j‘ ¾£Œv¿$´®œj£êîëy†Ó«nÉÖò„mÅȱ¹»ìRVIkVÚrÍ}ÔËxpLµˆSÖüá¡0W‡7SûTM½J3Tù™ W$€İÍ/u@±Z5ş1¶O¦>”B“š-‘˜Šª*Lб2àaNt†<‰ì½&…xh˰&_‹˜\šçnË)È’æâço0 &˜”('ÌybŒ3ÒxÆì1—UjşŠ†ÒTHšgÔkññ>«8S–î¹E{X44R2ftkVǦˆ»ÇS% >søö›1BY"IXM?eF½×EœìÙÚİz7[‡Ÿ…ÆNòËù Æ©‚\\–šTʪDŸ¡Ì]ÖUq™)l”ŒîÁ¼ıÜö Û1fŞ.JøzN3 }m7•O•œ°‰~ŒLõáöäÍÖçâæÉïŞšÖlwÄêÜ”šĞ x“ŸáıV@fa/(5`Dµ¢ ï‘?6­FŠ»Û†¹¨ó1y!J.®k£Ï,ìÓ™N¡ûş¡ÒÉ×-¾´ß{æÚSòizĞ\A‹‹ ,‚_J–hQæ(õ~r+Ÿä¹æÈÿğèT¯S¬H¨€µœo^3ĞÈ eöÜ‚¿ê°5Fnˆì‡Ğflת1t|?ˆ§»G½zağ“;讀-”˦_^üÕĺ8…çGßæ‹¬“ ığÆbÒWñN4°õ_RÊÓ Œ3õjœq™¦!væg#äb„6©1ĞÉÓ|ğ¯$BÆa‹Ùl³5?äË)»&@‡ˆ¡ÀKï1r³´?’¾3áãyÂéeÇBV¡„é8tÀ–ØV5ãeä¶‚•i®Ø.Àš5¦£6L“¡83­]!9y]€¿—hdMI/D:h‚aLÀœ•Eq¨Nİğİ•#M¾¤BTH·ËøÃî‘´¤?!Ò Ÿ´ñí­ÁÀÛë‘+g„µ1ïò±Z½’Û€Û$$úZ¢À¼™Ûã¢uåÓ^TÒÔZgEú°ø(°9¸ ÊŸ…ó•Ëlȵ|ß’ÍË› Q'ÙJćñ×uŞØkÓæœ3õ+0¬-æÀq<.êBRæZTECdï±|12páZp˜ÕyÇpKóÒûøE6‹¥¬ÆU[ç!QëN+üV“ÌN³˜‡²om˸‰ñŠ"q˘ÁdÁŠ ß¾ŠJØqT~;Ï¥H¾¬Ó¯™íW`ï/™® QiõZdQ9R©6æòá^°j*ŸÓ€[tÌ\¼†SY·íkCAÑh:|桊G¤íÓÙrà œ—WQÁôŸèŒ6Ÿ¤”B1ÄqH½¸g桳!Ğ\ÛÅËø¹ş#‚"ÏÈ} äöd×L émçÔò§™ú­ Y86¥¤ì±ƒµ±Fş²ïYõ_…(ç‡]Y İAõ σ¢È¾E¤0Ù~ëôÜV“„϶ 5Ğ´^¨Îòó ?c"SÿÑÊ8£½á’gÈmIº0iÄn%Êÿ×Á„ ,1”7ª®Eı`¶ùıY=kLY;"Öbd´–kÓÆ}g+•IdhïE·Öxk3˜ĞFÕ®ó}«4F2?ÙçÜgº1ŸU©^˜`=ÖÏHx>/Ѩ¡77ÇE,)w>ôc%º™É*rE†0¨à(‡×r;|}I—&(ßS¶î<%åc à‘’{òƒ*2Ú!ù‹şjùy•GğÀb´GwˆºíÆëæòıú7JƒÆŸYO³ üÕo'b,_° ïàc/CW« ÇİŞœAœØªF×XàEnI%ÄÖ󴌙CvØ-T5rL 倅Íjê£ÎK•‡ |–ö¬¨/„a-€½ı:5ñÁwñ{ç<u LÂ÷ô¦¹¤2có€¶gÒï²qq£#Âkqê#äyöÙ=ØWí<ô öèF]Óà)-Äw·GªÎù­cE‘°›f`¿Õº²¥Ï̘F-Zø.ªŲÍg/)%°ôÃmQdbg(qÒdv=YbïEé©Ìz@9§(D :̤Fa ËM„ë–±Ş_Õ^HÃÕDrºüäcQ¡äëxù:ñé ˆ 1q¯ai#zL~áÄ Å{ı§¾vLğúÎò7=‘Ú˜ôWÜuJñ–ާ{Fœ.ŒÊä úáPœœ¦ı¯Ïúƒ$¼\úlyİx³½p­ÇAPøÔ k§¯É«Ñ‚ÇÒÍ«'Ú ö6o-ù óüï1n-Š_¦áÖÁ?ªzÕímÌr‰¿£éÊú$éiÍN>îGÈX‡¯Z.+Foİu(ËaŠÖ†9" ÷òŒæPÄù.Zˆä\ñq~}›Íhæ,–Ù 3ó¹LÛE®¸ïé†|4±Öñ¸‚øFü÷&‚áE(»U.¾ãu·\P (MXub$‰ê܇—¹ yäÃ’bÎ)ÿÇàóÂT/x‘;ü g’Ö¾Lƒ­ƒ‹Õz‡¼Ò· (”=WL¶Õ7¼£,è´› ¤5÷ø©A˜n~ªè£?Î1¶ã¼]Ÿe%?tøÙŞò'¾Î ?[š‹Š=fÒbãšóE~Šο— Qû Àè·ÕÕĵ%Í?8˜*oèz=–&&¨¿eŒÉ<¯¥V¡Ä(,3h^8ƒ2®KÉV`›ú.ÀlH~­Eb‘‹´˜2ğκPy÷zÃ%I÷£X«2»&,íÊg©¾Š´ÂíÏÑ“¢õò/öòúõhaŠ™Ôñ¼ğFaŞ~¸¤g®ï)Ø“>u‰ëÂæŞÀê¡)RŸ›åb’ınq-ÏŞ ÛD £Ä‡œ'„p©VA):NÄpØü<íaô{°¾¸CƒW}ãµçÇ­”sİnÛØŒN&¢ÕäÒòÉa®®8gúÇUwÚMÇ&¸³-w–%ëµÚŠgMƒ˜W­i.6‹ù5¯›ç¢49¨‰Ø›µ*NìëJk‚Û5ïnÚD¯}ª:´åÅï²ïğÚˆ-qáÙ²v¦D[)½qæÛı¬–ß{L§‚ÎŞ–ÌÒ§^,T°±¹›/`O~şZƒú ­½Øú¶`•g[ûœB0¥.¥´£<¦³úíûvlÃÆjܗΚœÚ$8•¸¬ÉäÆºğV_F¬IîÌzò–ÄcÇ‘º¶¡ÅçLÂ^<î-Ÿt7cdp[½P´Â!Û„µ‰~¯s¨á®28fP©eyÁ÷ :ºôD6ÊW EıºÂÔ ÿg Ó°&L’»tï´Eò ¶'>ÏÂEßåÛÑ¿—a{—”E3Ën'ì}WûV3*"çàç èƃ*uÏ(µäìŠí=pVıηw á’⻜=ütU«?¨ t î^ı8ʰŠewÓŒ»§Õp;½^œÛ±€^–‰#Y }ÅÇYÎ_`£ùŞõj…#ÖÄ©Iåš‹ßñŠÑôG3=8´/°óÌK‹ÇCc›¡Í ï*(È´œ׆k~/ hŞ%‘<§"k»=¸ñeO޳[V¼E'~µ7¸u§tŞ—³œ*6!ôµ’:°AB·Ó+é½)ê•zéšj}Y}¹¡t—+{Ğ9ó8‘½öK¤y¼Òçï¾zĞhåÂ×’õï,ÕUØ£/¿x„h¸½štà{T0è±á[)‹ÒO£ì²Ãc×Å4T{“佈Ùh×à‰k¥HÛüù^:Zkj¢,S³Iyˆ>·\v#¶Ö±¤\ Ã0¡0î኷8ÕÁ¥ªyn³éçQ½‰·àçA,èy–à3d“ämèZИªÅ:ü:òX nõVSoÔ1†…i¨ÀšÜ´.ú‹Z£‚¯ô¢ Hr%Œ—D#ǾÇ3­y‰LUá¥&½9ÖüÎê¨dsf Öl ¡äPRã·‰» éúcY)ì–ô¯;²B%{æk£›bt6yz*/Ïm¡›ó _ ‰+uB³úã£p3úDHÓ=xj?.d0â·œBœKŠÃ>ˆm·åì6W;·l©c™ ,0¾`­i{3º‰2&ñá†oz í]CŸ [:Ê+®¢v²À>‰›Ë.Ôs£Ì]ú Ê®Æİ”¤’$ÂS_îÌÃÕÆJf´^X§ŞÊ+š7, àL¾™Ä³Ş):Xf™v…4-êÀ’ko+Ÿ^}¯ƒA“dÛ˾ÛI&˜8(—ÍÇÔ.—q')×Óğ8L¯T+şşà&äÕf¤m¼T¥Z†*A›v’Ø@ÆËi!#®­"mUoc±&½¦ğ½GEÀ ®üyø.’ÔgÍ©½k;B5›“xÇ›¨Zµ«Ş0ñ«d1BîògH޵uÓ_ª"­hHãYğ^äGº  Ï\êEy¨}Ö¸&ÆŒc‘°›WµõFÇö¬ ‡ßlì§Øl<#‡gš’jüÍÙ—KÉnè°¬ş‡L¦òÌ$;}sƯù4VRMo?Ã.oû’à#•K!oÚaù~ñ¬®sé%ÅÍHN«ï°3Xóªâ@¢wÆ“ÈÃSóœTS’¾ºé„³şöü™ˆsÌq6ä¡áJäĞ'A˜Zìî{¤P®yÕâá»[܆~¦~û»+P2÷$ÁX)·uŠlsV¶û2îĞæ›ŸÀN_›EÏóØ¡kG¯`çYØş£½7”—YŞèÙÔ«Â+óú{¤½QzÈ56½,—ˆ3ï9ö{SG»¿Éš8¥ùG<έñM±ªÇCjÜ f— L¯+eTÙÈ7$ Äà飘!dù¹•Âô °0'ê'Uœs}¬K˜IèQ/bSÁÏ;Eu/è¹P½e7¶ú²4_‹ZOuÑğûxõöªå¤XÊÚìäʹåÛPU ÇÅGù¢ï!C·kêg…ò,EÎcV‘R×®Øcóï=m2 X$>‰6ù®»3]«¬sŠ©C»—  ǧjÂW?ÙƒqëM9š`oÁğ³™ TPÂkà †¿6e'€+ÀÓôÂL:Éáİ[õğ“™pîkq×â»ó¢â˯¢E˜ j~-°]Şâdù¸“·SŞÎ9 Uj×4o@¯¯HPLsë 0•X¿ñKUÆÔ cHÚ‹ıtg©ê[|–3ï¶YôIp,,µõ7Ç[}Ѝ¡„G²]$< ı:–5ë²á²3íİ’³ø,:H9àèÁuí¼ÖeíÜÁˆr^ ;ÒÕÏ®œÒf­˜ŞJŸè_kK‘ï¬ãàMÊwÿt0į:ÛÑTÏ_ÓôYœtLzUé'Ìä\2=Ÿ÷S`BGô±°g‚2MÒš(ŞepÈa—_h©°(qÌ¡ƒ?{xÉ”“´¿+Mÿª/ ÿvt÷ª9ò"䜢M+♥ ·ÎId.F/4#G7ô¹½~#&S_bxÑ ævÍÑs¤©>VWúÖZ9®—̓€Ê®é2ùо[4Ğ™mìé±©Ùø¸ß§Äç_Ó'GûÓÃJ(.QBxk.¸uÚ!îÖfÃ!–9àРùŞó†i~]b$ tìt8ûÚÙCéÓ{’k5(s‘xuái¦ƒ›;#Ö—¾Ì-*µñ{ìøí×2_’~p-Ú.;Ïõl\P•B¤ä1cåÚdœ:²×72¡¨Öݯ¸~ò<eqS-´ÏóÜ¿’ò#Ç`ëğ´ÈŠH‡ÿüˆ Uå_·mrؽ‚}é÷BÇ)äx—è©(2xºâ+©”§e¶¦ÈDNS_)ÊëÒWÒ|eBR€ú@ál7]Eşr¢¦C™öõt_¼È4,«AÜÆ 1bú£ ®è6Ãʵñ9}c{ÔXËRş»oCEâ-à°»d9Ãá$¤À’ŸÄ$—é³› ÕŶºŠyŒ"·€VÇ šš¯sÒöióÅqiNëzæ©ğpMo ç‚埳q$M‘Øé³“ ÷$—ò¼LƒOàœä¡n¬¥ŠÖvJ=Ïôñ5иnR 9:Í_^3ûyd - ©€o;rÅ> f3-¡•>ò@Q˜&ÒCZåÖT°à$‹¦Î¤­öföÇ«—W¾¿3ñô™“5fyU¿k‰¬>BFß©' sííõ­•A]“q½»G´ØĞ-‹~ÎŞ8´ß®°¤ÕÉF'8L-)S‰3J.ëaøÕ9|Ib%æö%ûšãtQ¿ñv O ,†í$‹W‚*£w”€.2+|Ì.VØQÀd»X†ÁÖP>\ÿ«õ»¡ìÍl¡TÏôN£‰KR(+cPT]Ò¹›ÿ †J"ı]â.JŒÑĞ76µªï.İ/.öˆêú`Yé>ÑIÌf•ÁÇò¨\ oíŠĞ¢¿cÇ*ÀÙ[KM®›¤8ò˜ø¼H9|×»ûÜ5ÿñôÖwŞh÷§`[…˜¦ì°§™fõ}½930G1oíh½ôC¹å–6\â›ûI‡¾v¨Ã ¡§0eaäûªÙ¢2·İ‹ .rõ%Ú¨¢nîÎ/KCA{ÒèA%ªbG!Æ{´äµûïĞc{xö9qµKHOŒ'^µ‹8‰Ì²•1ÊްX÷ºØõÚù—ÜÄ%úmòã{Nµ¾úìúxõ•H0æÙ„°$LĞ÷¬Ï€C ª5Ø—*= eIUšÖĞw‡cæ&ÆN$êAò½`ÛX¸¦|2s>š;/”’Ì¢J2ÈÆğ,H,g\ój›8Eê»1Lcû÷A°MRm¸¹©†Ğ”D}<<­—İ Éøóa½™¾!3Ijjrx_SšH $…9ıyxª• „TvW›É8QÊù>c¢!Î~Æ_U¹C]œaÄ‘×fH O1ì;™XnáMü½yíèFÉîRU@¢$5™o6ÉR:I¼Nɤ£œíÆê‰?m:wGŞÀ°ï‰ÆÍB(ít$$£øĞó˜ ¶g>w#4å»P©æ@ßjîßá+^ݺ}eäóc­Owh¶0¶õšÕ’i¨ ]7òcz„Ïğ`!"1,eÙ6{ÒüM0…"ÿ¡9;Ljš 9"™Ç~÷–Óó` Œwù›”ŒoTïuñæıî_°C!½§­Öú”Ëi@T©7Á —Ĭ ŸĞĬlkgtÚ¾¾_÷6Ğ£N†+´_!Èlí¥¬ìI^ı ZO{‚Æ”xw¤÷Gœ†'àİ›MÒ*ú?®{t¾£ö$†‡«Ôöó´xOšrô òQœxóğÕΰåSšzöş¶WgØ4P_œã$Ô-ûŬq³é%i>!»w¥óİÕIö±Løìy§=¦[KÑ]¶aé Fa‘şş®†f¢–döÆ0Mk6ÈeJK#¥8“‹æÓÌîqÊ5²ÖPW\¥ëìØòØ(ÇÆãé¥îâÀFñ.¢½vÔ!¡fx½mv¸[¹ÖrŞ^ş´»ôãP%áOû åK¡lòØoYùdŸ^J#\‰L…°Eyop']nzS&GE©¹Úï.Ş,E’Èåú|*LüÉşšîp£D™#ÎÁfNÙ¶Œğ+İÌ +F||Kf”ÿ#»¦ŠŸ¦!&ëŸV“¾ß~ÔLß_{@È3KŠß·¯ŒšuÇ¹î§ {œÌÒºÀ…AÕJ·äY¹šqˆZLIUä̧hCK‰li vÚ/rd,HïXÕOÖœâ·>X¼ó· |—f§SÏv¥‰‰Ğl>{ܾ³ŠLT‹PxŸ+“fsN¦Np4Ù)m^Vå"$ò)Zªãm·ï«eoS«N„š ½Í½u¾©z¹ağgïó— ‚C£ ËØî~ıÆÍwğ˜Hÿr{š•$›1Ğ9åòRş"‹x!ßDz_o⃅ÏıîZqa'±ÁE¢U¼ÁÆ J®w>¬„ÅÊÅZ8û û¬ˆ2!íëZ˜n¨û—çÓ!#ã¡Ãò=åyo$ñ’·¥%x“”>6dj(öØïæŞ¯"b­;mÆ÷¨®[wİÜB•[·Ï$ ‹¶”Ôõͱâ4[ÏL²VÅ|2˰ʕ‘@ˆ}°½Ä½¹RäÈhJZ£¼r”™×º1¬"'ü$íÕ“¼å‡‡P‚»}‰Í\Á™AÏSä.QDPÙ O£ºÆ[ãµÃÌ­…]¢A!p¡ëƒ˜²¶èõÜÿ`&„º:Z@¸ €w´iÈò‚Õ±†‹Ær¤s¯*pZ·Áÿàç¸fÑ·æbê 0ªÙ¼š5ñó¶Û²‡¿-t3~H´ÔÚB\ßÇİ‘]4|î O¡˜PRA« ÷Ï/H˜ñÜnæsn¡ Ó¼[ù&åÿ·­Ş= endstream endobj 2306 0 obj << /Length1 1657 /Length2 8549 /Length3 0 /Length 9638 /Filter /FlateDecode >> stream xÚ·TÓ?tR¢ô¤¤·ÑÒİİH0bctƒ€´€„´4ˆ”4HHŠÒH#!¡‚tüæ7ŸçùÿÏùıÎÎÙ>¯{_÷Ş÷­÷Ù‡ı®Ÿœ=ªŒ€£ùÀü q€‚––ùA bvvCÚú·œ˜İŠò€!àâÿÁP@A!hŒL‚Ƶp€º§+,‹ˆƒEÅA €ôèo"%P„xÁìZüuêAÌ®€@ú¢`NhLœ¿œv\ğ£G¢¼˜äÜ (˜Ğ‚  n˜ˆvW€ÂEûş— NI'4)z{{óCÜ<ø(Gi.^€7 íЇz@Q^P{Àï”Ú7è_©ñ³ `* ho À\avP¸ÆÄnE0Ñjš$ş'YóO/à¯âÀüàÜıeıÛ ş‡1ÄÎᆄÀ}apG€Ì ĞQÖäGû y¸ıo"ÄÕ±‡xA`®[ á£CÊrz&ÿòó°CÁh~˜ëï¿İ`ʬ·W@¸¹AáhâßçS„¡ v˜ºûÿj® á ÷ÿ9Ààö¿Ó°÷Dà0wO¨šâ_Œˆø_™# ‰‰ Š  î¨ğwC_$ô%ø·“C ?8`Ҁ ˜bˆ€FyBıÿSñ߈ ØÃìĞ[¨# Nü¯wŒêğ'Æôó˜ƒ0ã€~şy²ÄL˜=îêû/ıMå4ÕuyşJù¥¼<ÂàÏ'(àÀ !1€(æ!ğ¿ıüS¿³ÿCª ıuºÿğ¨w@~‡ø¦|gâõ×hpşµ7\€ÿ¡À 4Àùïü[€„Av˜/ğÿóüaòÿ7ü¿½ü_çÿO¤ìéêú‡óOÂÿGqƒ¹úşÅÀ ´'³ZÌŠÀÿ—jıs£µ ö0O·ÿÕª¡!˜%‘ƒ;b,ÄúSóP†ù@íuah;§?‡éïn`b¸ÂàP]„ì÷ѱşG‡Ù=;ÌåâéÙŸ*ˆfÑ´÷7†bVí¿Ï¡·CØÿŞIa…‚øcFƒ„ş`ÌòÚC}ş˜y@cL˜œñïF‹ˆ€ ¿E Q1Pû_ôÔù= »ğo„ÙWÈ?°0Eb¶ÿ+ €ÿ@ rü}ŸbŠş/cû—]Wà=f.ğcˆÄŒÂş?Bà8c(^ÿBŒ½Ï@0èûü¯BÚy¢P˜Jÿ±˜*ÿÿ¸é P¨ñçi„Äçº'íg5rôŞ|#’x{g¦|#EV„è>¥qëÕdƒœì9 åϽ`e+çNmy÷³Ü¥™Cÿõ7Ìõ¾B'|ÌÊ[̶ϦoNnM¦øŸ2°LßiÆzi’&Ï$^ŠêÃÒeŒ%ï"’±wì3`¿ğ°®g6Å›ƒºLYT=¢]»£«¦,[“†á‘ñ·/úèÛAà á£ûó¾¸%†¯ÅYD§kg²hHvœ'{W“¯ .Pô2vdžª{…mì³E¢)”$…ª È~å•zífRúÛªPÉîÚ÷½ZæJ;«Ó>pZ?ص|Àù¼KÔÉæ¹Cø›ß9#rZ>•_¸c?ŸÅŒÓ4 rêaÜó¦únéõFõ¨ ߹ɱ•_éjæ£ıO8yµ’¥®+׿6°¿÷rˆÄn}X“F±®ÄC“͵è^ĞÏæš³pÂ1i"`.–áÔn(]²ğèIkˆ)…  ©,£Êˆ Øğu€ ØìÄßOèºà°£Ccν:Oç·òf! ³èåÅø¾ŞîEmœ‚Ÿ·ÛêI@µÏª¥æ€¢8ğµ_»›ğ÷•Š„8„8€9·|§3æIü}şÖh–×ók½O™*±ŸÙc•i翺8 ¥ùØhÇ$ö* »Øõ»ÚÅÎh#ëığ*tïJw:Š ô‘`Kæ½ù)İš®¢.ä&¾Òlœná¦ôïà) i]§|D±óÜÕz¾®#{Ç)j34ŒZo0|;91®]nå¨%/–k¢–~òûíö2©PBşGå_³wé鳥ȘÍ;¬™oloÖw÷匋–/úÃ>4˜°0§Å^oÌÉz·9ØFá|NRŸY*Yû÷úZ°óãªpÇ22üN°mGK¶z$À¦Ã)¾Ô6˜«ÛÛ,|ÏΜäü|¿ÎKÔ÷Ì‘˜*É֠)¢€/8yÍ7¾ã0m€\N[÷Ñ» ùonÁõW:­ã¡²Õo¸±ıÒ’RM`üM†¹^dÉG$,{&&ºäóZÅÙ&gîû}h!„|ˆ²–Ç_ۡ£\¸ì¹ïñŒÍQLܺóͤ¡N`‰ÈV¼Ì~Óá#=ä0£úæÂœÙÒPé¤Û9S0&ÈsI²¾N³ÈÌ _t[÷3]HFÖåeå¨>0>]µo|Ğ"a/TPhX|ç³°8ïÚ…5«F"÷´ßè]Ó¸jJ?RÀ½"½‰eï>iˆ{¿­È8^í¢eDƒœ#Búiê4IêéCK£ä¾³Æ¯„ 6—fד%vë#76KòÖøzÃó7î¹@4?Ó-œgê‚ı?…RÑQÃó£¦r•çüm ß·;àG~ùÿÚ?Zs|—ãiWñiΣµ¡’•‹Ó ËÒ2¡Tsëõ†ù³ƒˆúŞ™«âÄQLYĞ–=bàQtë#C÷}ßËïÍdOò£Ğ›s¦á­,¢!îè'+]”›cϹj"Åp ô'LS}ïQJf{Ô 8§êXµ¯†·’³wİN4ÊiXñ—ŒæWV—+¸!–7@#ì•/‘ó÷ì¿ú;ÑIÇPÆXy+–ìËBõìÉzqv 0{³1«ÙÎBäm˜ C]¨|_‹#ôò’iàèø6ÎËk »íMkbâ#é_ï"Æ¤Š¸¨šß¸ğ- ùÌŠ¤Âg{a4Â) © ÉÖx,(~?§‰~PÒLeÌ|vcg¬F[ƒ#ÂiÒb9‹FG؇„„/VhïF XÚÁ «'B‡7R{ŒQ/Ú¼|竬¸»U5>×XÍšE{S5Ğií òr7ôÆx òW?*¹W“Ç"i¯§ ƒšmg>Ã)Ôı°6®¡i‹#˜–Št}ˆ¸È'?í¿vı!í¼dº#ùEÕ,¾¦×Ç‹ò-U`Ⱥ2[K–-õÎ?E=}[´Ä›²mç¢æŞ’umÚ¡×øBç/–ß,Ü8ËqgÙ8GéUÔÖq–|•øZ£GjÄüDi»õQVâ¬Gët›CÙœ3–¸àWÄù³ó™‘ûñ(¬˜ïí­ÖGUã:„&KŸ°×ÊòÊ<ÏA‹§Iñ.Àä*jáãÛïÇËΦf‰Bkù–5ÍŒWØ~2Í5y;ÓH+MºÔ…Ô=0íëÒ|ÖÑxör É(½æ$k  åza¨Ê0¿öÍê…õ÷ßüòˆÃ]ÈAD2X2ª-_¬oÒûµ„.jWq¤Ò=W™2Ë6DòaK Œ©İÚUö{ÎVÒb4 ÔÀÆqqñq_Ég$ò%®ó¬ SU¾áf¿˜·MuI©şeVë‹ğùÔè\õ#ݧ°Îàm…oüLk®ñV˜z#-Ó9>ó ½ $"ßœÆoaØ!£6„2}ÆA{ÑÜV [‹’Fp‚‹½ıgyyŠ{EU£'^§ßãq´L¹»ê=Ī\ (½“g ŒzÂ'…Á†÷m5Ò#Â.”ßîŸJéyè\‹ÒÿzÊJ/:Ã[`dM£©+“Ô00tO[¡jÓ@ëd ¶7E:'JFÑ?zútãöÆOAîgV“ű­X¶ƒ‰€ƒÜMÊ1ËCÃ1Í×tÛsš)ÖÁÄöziêjl­i=fƒœ³÷iÜôİ·¨N ÕÍï'9L“ã<âM{%òæË=kğEáD7€¤m·œÁ€Oœ(NHr8-7Ù·ìëʶ¦y«eİ–ÏŒ³gôŒòÇ·-¢.ÚWn²ãÜ4—Ï ©=›WjÁ.6Ñqä›K›î»S£ºÜ¼OQÅgb!´ğ+ºzGŸ`z¢älŒçŸ>‡Ö¦k^ ûšhø…Œ®¥ïÌ5¢ Šœåí·#Œ¥ªü> ÎuN«µoš×u4\O Ú\yå_#á¨p£ÛZÆ&Y'ü_©ÌøĞ[/2¶k^× øåLıLzRŒE,i ‚7¸ö.Ú´ÙfnÆ`åµb©íÒŒ1Zså<~q8i %W"3@“Ù û¨°*†è&ğÑTüØ)—Ó|Õ§]ÂøIŸ û=Û¡ßgS@‘3-l_77=[ˆ¯+ó íùÜşå‚µDXƒÃt¨d^·SyÕôí˜l+¼,ÔïmÚF"ª ïÎÎÊ8[±|‰&60æÙWñfyšcÀôÒ Gˆ }îøØSdéaJœ|”ÙšÂYK#”·\ʹ½/_wÅGáÒŞÖ’ÛŸæR¼ztÙ¦ÁTå»(»d]$÷ps¦ëqëD%!/›>”ÈmRÑçu|W<2èÃ~Õ~4 ¾éBŠÜ•˜›œßçã¯Ù¸öÚ,ë/‚îã%—u —ÛOÒï6Ó*¨”…¤hÊ«Iè]hü!ï’[>°±Yïp’`ßÃzü&1äæÚ¨„ûB„Şbö°Q~s5e.IrhgC7 ‰ãü:¤«Û»Á+[‚U©WLæ6ıš¼5*îû°ï±eÖšãX@lñ­ª°C°7tÎôH¬¸ºh"ò‡A{×n¿À©”|YMß±3zğß?İ®&Êõ ”Pø”³”f.X0ƒçÇG†f†Ï›¯‘lŸäÒ;õlJÉʪñnX\Ë÷–Šñ*ÑËú°,W6»Ëƒ+…â!¶¿ZğµºiÉ~ı^ùôƒŠT¯Õ+§Ù.—ꬑ˜íDÒ™¬‡Õ½3•ş¤HÂ;»÷uN#3Çşp®^S¦6\hÿDÊËÙ §ÓŸ¯¹ğpx^_X4kábçFÔòlF o.ã†t+íDÙîÅò*T¹öpD^™RíªfõOfà¢ŞZÌ7¾ {óåRаñJ^mEÙßCÊ|¬ªÎv˜R¹‹_[>İb‚w‚Œœ¸Ä ßÊíc;•¢µÁSÿ˜ríÛŞ2¬¢ä4ɱ%s7<PHµREo“š³&û(öAÂBV3b˜n©&ùvǯ³ú!w÷©‘D$ŸÒİFD ¢ÍĞöËb§ğzuS篷Ï;¤_}Óğqì)^yo.e|µıìSÀ˜É ûSPá°Ô¦R’luësş=«Ô›bñËû|ÕãÑ,KmâÑÄNÏ]S~ÚùäN²Ò»Wé®?b—œ,Tllo@˜ÄŠ2›Ø8—­Œ©ªİ3ë'÷ÖğX^İxuÆ6;_S`ÅËdä],|cœhÚæ/óï° —P¨Šx['ãÚY_gGM¹~¥[|zôJX8¿Ã‡'Ìé€I¶’‘©) W.—À ÿeüí±çˆ¬‘|ª'‰ûqÖ¾‹©°SD#GÚßïö7iıŸH½€_½c³3Ù¥~P‘œÛ Jù2'ñ ­1h]‘h‚ULâvğ˃ú›C\Æ<«)G…ı‚¤úĞE™ó­İ?‰xkË”vTæåV5¥:ˆşEÒs¸%¢P.ªâ˜Ğ’qş^üι¼Ô#¶c‚Ÿ»÷Ù²¸›D’/Pw„1C+%¶>…Œ›ôñ—Ùª\ƒ”2VGˆ°Š–dÁëÅñ>°šã ÷ÛIÃÍÕ¯¿&ŸF~u,Ò¾åík¹ÓHÁ¬İ/fF/+İÃñ¸±mòQ€òS9’×)Fbı}ˆgÜHÛ ç¤JÅ'®.¥¶²p=Ãa ı¤8xnr´€ïhd5Í“ÏLm[Û³ƆᬯÄèVãrS‘JâŞC9¹c4Jv”$)y=•=RjÇÛÑ¥ê6ûréûì-%o?Ãéõ!ãŸs*c%lUT¥İÉû Ķkên¡Q/¾½Ù¼Z,îKÓ?è䫱X­,!iv“÷)âWPOÀÁ«¦e¢I ª#C ªóª„¹zO®×v§} °şrݵ’İÕï” òøš¢¨« -¤aѸx°)£ÄúS>~šÊ²³êº˜w”,k NÂus¤jKOÈû|ÜËHFQ’+äCÚeQÖUÑÔ¶ıäÊ/KÛ*Ÿ(ºSğ°š2 Ù¶Ô´NV}c±2Åh„€ZŒ5M¬yR6"tıxØxIhRª1—!&XÁ¾¤íyjv^Ë-âµ¼ûOy˜$¤H³pU惃ıÄÈE PHÈ:¶h—ãõ²k„ %±­§ïÒîQ³ÕA.3l«¿0½ ¹ÖŒ«¥= ØéĞaâZvÿ´A®œŠ&JÓÉÃ.”ò©+níË#-±Şì“ºI!¿âI¯×y´)8|ÿ¥ɪ¯Õ^)ë¸îWFxm‰]Ë/Et£œåçÖÄd"d|İPÄk‹ÇJb0O8òU|ş¹“ÀͤĚ5Ù6r“àÍE¡f³rçu  €ô{¼åãWÏ1D²ÊÉrlúʾıNóe" ˆİ•†$¢ÇèH|HRy†i¸E÷TG­Ïô$GıH¹¥š†„µlŞÛ9åZŞwå˜_~©Ü³(Şò\§h›u0†ğ¢xV,V;65äşZ––OÊÕà‹µfú… Ã;{Jî ñ¨iĞ€¥¨ç·V!$I•®X;7?®—0c®Ç[Éã„7–šz‘ =î³Fï©3‡#‚¬I R‘!1µ>Ö3ûşë¸Z‡õ*Aflt|¤i­9ÍL EÚéğ±Î­x4ñudğEW—Ô­—Ù.aŠÏÒF“öşMÇš”0ú¶‰zì:¥P›gÌùô «ÙaÎ9ìÒ¯Oߌ ßõIİ¡h×N÷_e)˜ƒñ¼‹´ ¿Moyj™»¨Ú¸göò•ïh€0÷€á¢y¬—ñÔ¡µ‰üíïv~€*åC¼IûüÔçƒÕ'E÷fY.Ftúhy rc‹Xf÷kÙÀr×ßöO#x¿nx…øzÆS¾;Q&! …Z–vsP~+|·q/ 7˜Ü[÷S#¢èm÷ÄCŠC¡Ê ±´2=!m~# á-#±§<•%5ñÕFo,Üæ÷FcÂeÍ«Ï 7]Çó¾´}å!É;õÁïh:cÂî)õ™6¯½q=ù@Èk>×l›|惼;¦OH?/e—“1{Û®ª¡((Ui\f`#Ÿ{M¹Bjyç%Ùİ“¥Ç¶µDG \ğ±;Õ)ı¸¸M @DxÁ¥å”˜Å¥UÒ@Âûè;ʽ1ínµĞÓb[ÖÇ\¢fÙ£» >ߪÀ›>MNû‰eI¶nŸ».©&*Xñ´fwa·§= A·Nzç¤(šô|ÅT'ÔTGà 30Mhœß½¹m5É¡4k)3›Câ¨rÑÿë»ŸæØ°ÚØgW·Œ²Ş÷ÙzO0‹MßÒKÄÈŠFqŠîsö;o²¶¡ÊÇæ†î;“©“!FGÄŞ*“y–¬È{4ŠüĞ×±pëŠ'ë•<×äqU¤fİ/¢r(ÌØ z?Ùµ+Ú¹ïyŠ£ÒK ü’3&ëtÂ(ió¯ì‹Áp¸­ÒItLü jè9¡`–ÿt!O€_°KE³³•·úíĞE”bI…,0¤Õù:PXkβé)z kÿU“ÌÙÌøH*/,IåáP–5XôëŠchEúlY‚guC£yï–˜¯®¦•)6¶’Kéaö”sKz…å¶.ÍåB©@±‰¦Íçºà´¦ñóúÉ1Nqê¯Æ!Ïx­€J,KR~È|sìE9İ©j*û.¨ç }Şa_]_Ö=Ş~å8ü ڳ࿱™õhʉÇaâ<«,`å–wãŞßâ’¾•äô3½ò{÷ÊPg¶&»É)ôúÆT¿¹îœ×Q#?’4ÔÑJóŞLhËæ\Ba¦©İâìb‰õ)9ï24¥‰‘y„´œ"EÏÛIüt…0b–d¶¨¹$™¢ÍA}º$àŸ ´QSf·Ü(¾•¬ Q+ã9öÂMÀ9b·:2ƒ=™öq½´}ø‘î«1ß¼ˆ9÷²µj`¯â9í–·«ÑÛÎy®2 á¶„s¥šÓo(šØ?%Şó…,İÓ^“¼UÆİVd¿b0«Æ¿¹+à¡7È>Ô¾àµäÂhĞM&Ú7ú\F,N–AşyÓ·Bm¦'OöçÒ»¹—C<9,Vî*«(ª¶‡-NÆÉ&Ÿ2½ƒS ÍŞDs©9+ ÛÖFşyîÒ=u#^wåT¡€ğsOÊDgnÒKdİÂ×[3V?¨Ÿ>$ DWD1€m²>énŠ\"{1GIaò±ºE4E°7eıKĞ×auq&Òu1Ø›îò]ÑË4Éx}cÖNt;jä}giÔ»ÀÀŸ=Àû”™¾1Ëî[V5í©òñỀ öhn¡b¿çæÛ&˃ à ÓCÉÉÎãÅ{’Cs7UÑûk^ì-×ú:®Û†CH&ş»N4+]«èz9N°ÊÏnïn|šÙ²¦¬î¯›§r\Ø$„÷Z¬ZÇDmÅë~©Gí!Kw=ͯò%MÂseg@W ÁóÌkÒîѰx¢”¾m´ŸƒØ‰ÎƳ·GÒÙhÕ“Z_« ©¶¶¹<é?İ"ëX™p^¹ï»¨õ0t³¡}¿âõÕ~àç–ÇØH«³… ¦Ñ÷Ãğ Â®×–º9È瓸‰u8ñòȦ¸Q‡@îy/M%ÆÒ°Ğ^u%›T¬TşC•)„öJTá$VãÇ”‹ä„VÀ]¼Ï彿nõs,İMŸõ•Øy?N÷Õs;UmÇd©Ú¾_>/_r»ãØX%â1N°èÿÉ~r÷~ L  5ï&ãCu¦©gUIò‚eôõ¡Ê~9¿µ‰…~ÀVÿC4sÿôa şÏLr/Fó'UİJl“çR+å©•'Ie~Jºç®÷i&¨ÉÙƒİùp¿í)k±.?b8XœY¤äqV†¿®]õ¯FBO)m|Üûè슫²ãÃ&lvz§Û~¶½ù´x'¸ô¥ÌT»ˆñCP5iZOVAÆSJn6uÅ2%ToÎù+÷3“°ˆWúÇ¿‚ªä™ËáK~üD(ÌÉ2æ6ÿe}Hg!µø½›\XsÈ"¥õö'ó1 ñú«r¦w_ıóîÍĞ^²ãáÃ7% ¸è=’?*·\ù”•éœîi—Ä+Ğ¥óE®ÎôÕF!¾¼ÖîE%«º4å=ÃPØÂ`¾kIëC…Šó—3 yù&‘Ë=Uïy{B´úêÅÿäÎ¸İ endstream endobj 2233 0 obj << /Type /ObjStm /N 100 /First 1016 /Length 4600 /Filter /FlateDecode >> stream xÚí\]s·±}ç¯ÀcR)Ïàû£Ê•*}\ÙN¤DW’W©ôÀHk‰7©”cç×ßsºİ¡$®h{5/I•ˆÅb€F£»Ñ}˜•w­k¼·Ö¸XqÆçÄŠ7¡V‚IAúD“³ôI¦´ÌJ6Í7VŠq6K§jœkáµ’¤ˆÇTYsÆ¥æXóÆ}Œ«‰T\4àdz†NŸr f‚Å×ä#æpÜ’KÉ‹<õ(šŒõX‚Õ§Á×ÈŸ&¨%¢>Í&$yœ Ås¾¢–2æ¨h«ÚVL ‰ …hbÔÉÄ,ôB6±§ıªğªIVx Í$'O£5ÉË*£3)zνIIä!íÜ8[Œ&é¼1™ÔdޘM¶•<Çb²,ÚÇjrHB¯™+gKª¢À|r&—Ø0ºäZ9"S¬#)šâ"¹OĞ©/2"›ô+¦€AU@ÉE(7Sªe?°[ZàŠ²3hr˜#{Si9¨SCàˆM™Üî hj_k Ò¯˜ZÅàr5µ5¡×LsbrÅÂÀÄæŠ3-4ʪxÓÔ K0-gr_¢iE¬L¶¸¶’a“VÓ<>‡}Ú Ãa ÊCµÂ-d̪¥)ûJÍGVµ5¡Z‰UĞ…a“Qh¹L#ôt± ¸ÌÚX­ì q§€=`M¢'(ßç¤&%&ÌÖ0[ ‘0¥‹E¬ ûÌ¥¤ŠÙ2VÄ*fË™–î!Om‚É€½ë ºÊ*è–Ê)0'ö—kÒ 5†zôå—Gó“ŸßnÌ|ëôôìòh~üîï—òışÉé?æÛgç/6çO-|ƒ}6=3ßyêäËÑühóüÒ< ¶M+ÉMF¼›h!1» ì ß-óå—f~læ¯Îœ™ù®ùİÛã—›©Ôß›?şñÿÀD¬#†6X1¶ó” ©˜ìäš¿‡ZÇC v²ØjÑ— º‰ÑM­§2åZöğP?.M4±->A)m&à8§«6L®·Æ šSPRñ+1óÿг„ù‡T'nÓha9®c[& ì{n0j›­®g¢ù2Qëä°!C†]"ŒD‹M0X`—i U†›qDJ^Hab<fıJrÀ@  1Lôâû2ä,¼ lîáÁ~k„à&#â*åƒHs=.RğÔ Ñ.¸:!DB uŠˆÁÃ*ı>&)‰ìű-&öPÀ 0Ep0KVíDä³……aÚ´–,Ô2>&‚¸=¢0J Sju5&à€ ,“ÛÛÃ8VH¨¹•™HmòÈB¶Lä†xVVG„e2#êHeJ%¯,‰ÃÄçVD6¹­Å„‹“ ^¦sâµ€ÑÁ 3¯eÑAùLÏ·,°q {©€³Sñû¸°õğ\8DS&^ƒ àiÀ߸]!®W = >OM`}ÖŞcš¥Ü2]Ømk™H8¦ÜöYf8¨:0»gJ„0‚¬12 "Œ8„•¼ñ;gÄ\´Àyë%nC6È;r] dógø+ç+DRÄ_%f‹¡n—•°lO6†lómï5Š´dâ®yê‘É‚ô#3ß;¹üÚDbZvïpïìôR(İCŞ]¬í=«Ò¥~óÃó³ç7àÊÌïŞ3ó“ÍO—æÙÕ…>ÄìGóÛœ^^0Y—ñ\ÏÅÙ»óç› =¶›'Ç·Ï~2"‚ì¼)bcÏ1šş±ñ]`b9#"?rDÔ+iTò¨lûÔQi½í¨¸Qñ£FePƒr”ã å8(§A9 ÊiPNƒr”Ó œå4(§A9 ÊyP΃r”ó œå<(çA9ÊyP΃r”Ë \å2(—A¹ ÊeP.ƒr”‹R~vë'^iÈùs‚Wâ!üs…¾h"Çò76ÿßÈ…óSjʰψÀ'–µ¸ çAW†[ zº9¥ÀI„븚,bœxxœ‘ãğä8#å (|d©y-&‚R…o²yâYy°Hÿ}S0àÖâkN˜55(!“R#ÂĞj¢@0jU²¢®SBrïÀ”ççÊV‘ BæÂ,RµSË«É6iáSB€†«D„@ŞxÜ?YçÖÖH$vÈfi¼œ@šcSZ»l™€Ê‚˜¨[™ï§Ò, Çqqm1 ¥áuÁàÁÃ<ÛJ,0ÇC>‘ÏT^1ñŒ¼µb*¾–°/y&?¸€Éä9Ö2·ÉÆCò€ »!ÁCì.¼·Âä‰GéhûÇÉD@İÔB70 Oê,”s˜¢İ#ˆÜ™ç!z¥¶å!ğ ~š‡é°‘FİF€‡ÊëS8ì(WMøÛÃÂ…õ> a”®9›¦ØòZ,(¼Œ©6¯“‹›*ošRt+©"Ã'ój 3€j˜¨“«¦´R”‰eB “µğ”°‹,Ï«¦¼QrcE$^¨ &RÂı4Å2bL¢:x†& ®Ø&×]yª;¬ ÚT‰k¼òÍŸæáslÏ@ğÔâØŸ¼qÛwÕxP]ô퀜\¨ÛíÉ ·²ïŠí°Lt9:Õ°•pvuëº)‰~!‡¦ºQ~&½JØ1ÜÔÖõ”|3"È•ŠzÊàÀÚ>HyXO©xÎ7¤ãÀ’Ïñ¾­Õ¶’ƒèîÚ×ÄóĞ­»ö ğ&Ä•˜èàÖKk[tíkœlYK؇–hr0íÙnÀÃçğSâ¦KÜn _üäüZÚè›Cb_˜ê›Ãg;¹¼–6*᤼6É;{šïHU@޽¸=$YŞ‚ğ@P-Ò_xØ_ğÊØºûN#|8ü©¡|iò®"ò ¯Å–}ವËè°¦íDÏP÷ŞÃòÃÒwL@–fŸf¢>»Bp¥»”7®Áwî»ùpLğB1Wg LEÔà-gÆ®u¥Â§•ŒbHFŞäTHã·÷½<•âá#˜ ¼ÙKÛæd»`¦ğÁ½VuŸí^ëi´qâRu“aÆ|«ÇM|™Õ!à€"\Ê3vƒ(å•D$´Â|M‰¬¼ÕL*èeR ˆÅMHöä¾½S±&¹‚OÉÀц¼öäÉøô‰S33çûÈB9ËS¶TˆÑÉx^™V¹(ñ|+×¾_0Ô^&|ÿ%˱eKaWK‘ß”„¶µògğŒ@ÀVº~“U)•œ×@2ÑÏ&ßd*b$ƒà‘M+ˆW¦Âi‚®)òZÏà<Ø’§4#%RÙC%ÛbìIrğœå)ÜN¹Rî¤]§ c ߨê ½I'¶ó¥B˜@éz LS1Òõ~pdØÅ˜¹ğFÂ’Fåú“åšcÌıdí¹b :+¢KéY¨Äh=Ğ=,*ÚAV<Æ7ËúMJÇ+ê1ì—¾éşqı“åÜWŸ\zµ­Ø:…^îÄ÷逪òå2RÌé·”JgYVO¥%ëDNŒ™-E¶dIÆ ¥;*³xZnTx bºÒ3ˆòÔFηŸøû1r®CûtÊB¡×‘öc ¡ÏÒç•ÒÕ-²ì¥0>¬_•¦KóWê ËåJÕÛ#ëOåR´Ï²¿öá+$<¾jR†í,úT¤u)¡ÈL!Òæ1 ÿoùŸ[ x´’%¾¹ßT*^"ò¨İ¦+}´¥f)%p ¢äe6:ëÅ3&צn”tb¡KȾíØøE6faèĞ.•?÷©20Ér¸÷ õ)ó¤>­sÙ¤¤ÿƒ“Kì˜%¾hıÃUõ•ÙÉZ.Z¢Dæ]ë•‘ÒÎã‚Òã&™»"C)Î/BzŒ©ó£Ï¸“u£%K?Fiîc¾Vj~UIoP(œ,_Ë–´äaqÑ‹ßÿ«‚»’Ó•ˆ‚ê)öÎF2 ¹³§¶ªVğYís±·Ö–½"ß_í¥Ì¸¤ HDëã>zËEçVP“–Ú¢««|ùb¬ Á‚Ø‹Z-^‚‹@ÖFtÔn8²YAM–nåƒ]j&@-º=¤^3‰ ¾²‡@Ø9ÁO )‹ÈK9Ï‹úû«JihSuÓëØ[n¡Mm]ê˜ïxŒÕE¹í­=báÚc’Rt³|ª²Òº–İBh.!/yZ>rËâÉşRåÀÎ7v¢R|¼uÌ÷ì¿[VáKùÑ®^v{f:-«ª]J¦PIˆ”ÚC–êÅ-h¹`Rg+À<Õ63E*’òĞĞ&]ÄT1ì$eV:™?­l4]¾­ÜøHYâ#ÙèŞ;2§ÊVØc*)ùY]]u*Éò`MÁ6Ë¥~¤\ˆ,Нü°Ò_fbJô†‹ùïßÚŒ$‰ù,@şšäÛZG'Ç "[/Ñçã%sÓ¤ú-ĵUFÖ2;ëªDñzû -Ğ¿º>£öÖú®W?1XôXPØÖösx“²S\p&+àËݽäw]kiàD׉ÑArxzz‰¦ˆ‡Erb×d… grI’[gºtíÀŒè’«Rövhkˆ¼‘(ıš"!ß«ZæºÓçYJc¹"¾jÕ„(õ$Ÿ²Ç—úeë­7–Ú¢Z‘qÛ¾ú<&òyÑÖµ´{¦Òz/­•l&H¶#øI<ct8ÁÒ§EWƒ®)û9I&ŠËı” ÷²÷¨êÕxRÂ^Ì@4M¤ î³‰åj]æ—>Q¦–Jqù”×®uKm§7);ÍE©s-ûhK‰AN˜èšÄşä%¬0Êk¿PE4¨,ñ¾£õ%õâ2¾Ïà‘ˆ†ú ÚSÊÖä,bÑ¢]Êu)•åš´…:½m¿uyoÛ–cتšS uËYÈEèy·ÕX·0Fóuh}ÚyH?9E[\„kO„^*Ø -?rîǽ]|[v~o‚öä ´™%zÚ2ê4»Ú²×2T¦üg ö~íAåÉ釖™0Óã&]–O »‘éÑúõ»Å:%œà:Ú&c;uŞ” ı¤âtÖo§Oíú~m!!Öµ±¨/´'­Wtêw4º*ÒÕŞÚ#H:Ô?©BOuZ×rgDŠ<şNr€º·äÅäÕ²¸&nU¡—ƒc¶ğ-è;ÿ0íÂØ(Y^2÷’dğÄGÉÚ3ğ¶Q’r¥ÀT†NñÊóNUF÷z%|ä[¡­ÏĞ甲ɡô²%e¦`Êõr5®L[”r´rЏ¨óÈz¥O«íbq]6¼;c—4¥OHQÒ&M“âèÉ3ÑâÇõo(Ieü•ÌÓȘ½¸–ÚÂÿ«ƒÒÀ DÙY WШ¤/Ax”d¤£ç9‰Œ ƒì´õ˜!ni³Wˆòßl¿$9uß-øjm÷d"ßÒXÔ|“³şís!m‰¿!ïÈ(tĶ—> ‚vx¢ä{}÷LÙÕº”Ïwe¼‹º»¹x~~òöòì\ï¦şrüO¾ıÛ“û·¿ú÷¿w^¿¼0Q{Ü–ßG}‘²ù‚?1HŠt¼!»xÎ_Iå†wß~½9yù _k>š9 Ÿ}áøğ›Ëã×'Ïo¾|½1 ÿøróæ;"Ö£ùû>;4^Ÿóìwó­ùö|g¾;ÿÏüÍü§ùşü`şËü×ùáüh~şw«‘>v:ø„Ôÿï×Êıâ5uzô?&ÿKäÿí“G_=¸/òòÍu»Á·¾øë´’â¯ÕÀÜCåZC¦”݉ˆk+#Šå‹ÿ÷{ë¿d½ßߺÿ§ïb½®]mğ}µ|W}¿½…®¶øÅbƒ[.ölöç}KoŞ^œ`ƒ;XÓËóÍ1,Rx½¹¸  †~¤îßBBøáê}5 endstream endobj 2308 0 obj << /Length1 1422 /Length2 6376 /Length3 0 /Length 7344 /Filter /FlateDecode >> stream xÚtTÔk×/)HJ· İ0C—4Hw*5  1C -"RJKHIwƒtƒ4(Ò „„”¤HózÎ{¾ó޻ֽkÖúϳ{ÿıÛ“®Ÿ¼-ª‚€#ù@ü@I€¢––šâñØØ aHgè_j<6c¨» —ü_ŠîP0¥S#Q~Z8@İÓ€D%Ab’@ @”øÛá. P{ÁlZüuêǦˆpõu‡Ù; Qeş>8!\„„ïïp€¼ ÔÃZ`¤ÔUv 0(Ò÷_)8¥HWIooo~°‹?Âİ^†‹à C:ô¡Pw/¨-à`€6Øú?ÀĞæñGo€°Czƒİ¡”ÂÂ=Pp[¨;U` ¦ Ğq…Âÿ8kşqàüu7?è?麊ş•ÿ †@.®`¸/ n°ƒ9C:*šüH$/ ·ıåvö@ âÁ^`˜3Øåğ»s0@E^Fü ÄæŠôà÷€9ÿ‚(ğ+ ê–•á¶Š(é÷«?%˜;‚ºv_?“u‚#¼áş v0¸­İ/¶®Fp˜›'TMé/” ï= Š‹ ‰  n¨ÄAàWzC_Wèo#è—… Àßá °C€Àì ¨?<°€t÷„øÿoÿ%<` ƒ 6P{ïŸì(5Ô;ÌğˆâüõûÏÉE/[ÜÙ÷÷ßóP7~h¦mÄóñl €?À'(€@b €êğï,ÿÁÿ7ößZ]0ì¯Ş€ÿ$TƒÛ! à ¨Ëû‡×_´àüke¸ÿ.¡@q àü‡úæ@ õı/ÀïÿïeùQÿ¿Rñtvşmæümÿ?Ì`˜³ï_(*{"Qk¡…@-ü¿]M VY j ótùo«ŒZy¸=Šâ| a~ ğ=ÌCæµÕ…!!ˆô÷,P5œap¨.ÂöëÅAEÿeCmÄ õªx &öÇö@­ ò÷pÉPÔ’ı»e8aûkED`ww°/Š(IàB­­-Ôç7ßüp@aØ!Üñ~À~éşˆ( À‹ÿ*ñtwGõñ›¨ş–¿P¨‚77€H…8Ö„´UÉÓyó­Icï§œ™ òåYâ"û”'¬Vâ 2Òç5JTæzA*–Ú ng™_fı×jë|…OùU¾Ù3ÚÄNߢO&øÿ¤g&nDË6IR¸/YèŞ‡¦Ëu¯ó®¬­}ŸñšÙovò"1õĞVíöΪ¢tMJz ãİU}d“Í€áºÈ 5GÖªKÌó¯/Í#’µß0kH·ŸãÅ{WŞ[îX$éeèŠ R÷ ^?`}$Q– WÆ©4^Ì!ºÊ*ôÚyCêoóLA•ëñWBQìzZŸÉV`XåËÆ« Ï\©îg;%WéòŸCêD‰]Ó­õFޯ¯­>ZT?a¼¢Æ ºÓS!t —y7ïHµH_éÜ[J0Z¥`pI¼¹;Ãèg$ÍT63T‰·>ÒÄĞ¿K"º¸Ï¾gÊd›ø¸äiT}Â窉óüÈdûG7†¶T²uÜÔ WNŸŠØd}T†„ğ…ËçhiÍ6ç‰ß±zEŞ$ !¡‹¡ßÀˆï|h—[ÍwbkLt·ìz©\Ù¨îº×ê#ÕS»ÏŒ;Ü?ÉËÏãßF<µnætŠóûƉû&ÖLõİ·âúğvÿ­b™NÉÙ¢¼,‰Ú/?Ç“õ8Ùºó,_â×Gp”“®cºeRÜÔü¡ÇZ…;4q¦Øo“â}Ÿ§)İ«k œ|@y¿òÅèy&Pö¤¯ø[—©£®~$ǧ^²] é¥îˆøID*6‡D+eÂY¸iÚışj—h€ñcÊ¡ïúæÂTf/+Ô£xªÉŸ.8A Qzú숲Æ@Û²óÔçõKşJ~ôÜÂ/œ»?´íÚ´sZ9ó‚s‡%p70¯¸lLü˜=®KTˆÅ²ÿÔÃyGAËq³1îEv%`• ˆáI/4ÿ¬xoøsCÄ ~ëx„xØ(áó½[s.éÃÒÈ'%BGJX’«ƗU=ެ nºY†î­­Œ°Â,6å¢R{z'ßıİ?3èM¯}Rè\اL<ÈŒ¿¥‘ûjNmo ¸£W>F{(A½!øf}‰IşÓüiT- MÌİ[Ä~˜ÇÈZ{‰ö²ø0Vú¾›ÿìÚûógG…ÑA{Iáô¤X±!ä¯5.¯wÄ{}‡¶g™çßeßÜåIë=/Yޘó˜\íŠ$ıÉ ‹”ô’–Àü´=8nwŸá—*iâ5R7¸È|[VCÌ嘒=¡×ºõêªxÒ»şM6´)"JªgVE—\TµF ç•ËÃG¦·z^¶n7›bŠ‹…Ò3M,˜sl@‘éí«Hµk6¾ï™ôKh—2DµMiìçïZ›Ó&\bjaÖ™v2ukò·)¯@­r3Ü!ÇjÌó,"®Î/X‰Z׺ÂXL®z(Ãv®Ofú*rŒ¹ÉhÓ-ù©:XÄ_‡kõسWyÛ!¯Õ?ªµòI}§“Sÿéì!Â8a… 6#îgI.İÿ¢õ™Á2Uÿ?§ã8¿†¾ÙËW,/¾¿nêşšX ×›šN ïÕ„¾óÙé˜Ú̺Á ɾgÂH×&¨İ¿ØèBy ğ_}n&è¾=âªbĞYiWH€ñ3g’“¨°²HÄF8TJ°9€õŠº›S‘Â’Âò“5Ú¶qßb0ÖR²«yß|şí«è‹Ğv¢SNXÄŸ”«_™¬Ìï`6ƒÆ|vOàçğÔCLÓş\ÇÙ*ˆÂBÙÊÛ”Íû˜ÔÂÚŞÑÔ­+bHa>ŸD'ü´İêªÉl£©¢ü?CUaX%×Ù2ÎößÙo漫 öÃC'Ÿ¼Q4¡ãÊy™œtq>:#šêpB^ ,¨.C„ÑW41rìVÆvøô«ty¹Ï¨°õ<¢g,Û¹²ãµş¬ö™ *šoõ=ª×<”]l| /’[N3&܉¢Š³M¸m±àÅÈô©ò• Zj%ÇPĞ2fZÛû õBÑ8auy*ü?I±Vs+:îëJÖhuƒÔâXm‡œ•«JÂ÷¶sıo0’OLy#XÉbœ¨ÛÆ%TDÆzÙèä×;—ƒ¿„uŠ6.O6T»­Ëe¯”†!oñy&£ £#JŸv}µ&lá¥JcaI3Õ·ıÈ6tSkWdå®'»v?cn¢m ¥5Γk кrJï0lë4 ë…°ò€¨}Zu!]$L!EÆûm·["ŸÏ¾F”s2òäK:ü6ï#˜lµ(zÚ44f0³™êô§ÏÍsîñJìP¦I1„£÷ëá{7‡k²9VJ¯ØaN¸ iySf¤è‚u <™–~!‰R{”jD†9u&»ûpÑ–Ê s³“ŞfÒ=ìYÍEå+²H‰³Fh°Ö.W8ËÍrL9i÷ÚäÑ6O©‹Ç†dÉFğ‘f[(=S|ä“yËf8e(º¼6n¸×#D¼dö>ϸ%5®‘7Ú·Ë®'¶jº®*^k¥ fènx°×ë¨=gP#Ùh‚-İ3)I,‰¸ˆİœÖJy{ ãPø!Ô&ŠlÉúd½ÜpåÄ-ki`ó #2g5ÿ ]~Ë/—x)ã§ş¡ ‚Í:o+Ålíɉ ³§l¶4…SâÓ{/æ×ÓÉ@µÏE÷+Î$Fô«>ɦïNy¹yâ“?‘o˜iòkîתPª"¡ ³$/º<Uk ÆxøöÍæÃIÛ‚Ÿ(f¤HGâÆËbÜÑ’ ÒÇN„Y3úÄ’{- ßÀêBÇ2fI\>ÒÙ¦¨êâN¾sG¹t‡T’aÆüjoİóL¾¦ÈëÀi¦—¡íhóx²w‡s 2¾àáÓÅg¼ü±µ«¹ ¡²qÿ=æªñçèŸyíÂ±U\µypìù°†ç¨‡çª¹#\V8ãˆbï´›õÆYN Êàñtæ«ßW±M gk¯,eÙ”|0ğÍ^Y+j ­ÚóV/ŞÕ8ˆÒ•]채Û‰BíûõU½qVŒ– ¸7æĞʼnÆX~µòìúIµİœÀªJŒ{É9n"±¾±×UœåÉ1ÖAÅ]ôÓ‘'½Å|‰®³>÷®÷1K‰_eàÊràlFÙwøÍR:×%„ló¾]§«ei,xÓ$ÿNQ¥<5ÉÌ%3ÔWî%?YÁ¬Çtsì¾ “ıìŒ:ÉÛ‰OŠ÷^WyR7oMéQFOø*Æ´V˜xÌQ~%ì©Ze¨ R3¤#Q}¦¾×>&şöНÊjüv܉ªænï"å^’—3Ë)‡èa~T­øYB¡êR»|ğ¬XZ®El&œDj†;ï3<²¶.àKcgq€·-s†îf¹ntQÓF²ñ”£6#ÓúXè«këh’sc T:½Àø´{ËoRßQŞû̳,΂ÔªrËŞÇşHTœÇzıËëçäq:ét(r¶åâÊ;¢ê[èÖ|IüA{*}¥#8I=Ϲ"-U4‚¨óŸ}cö#^šµ'~UbÅp¢á Pt¥Õ«§Å±²Ki"Ï+ééã^¸ê~Ös¯W솕¥Ì:Y¸)½wÇ_kIœQ‰»FŸ÷l¯ô¦‚DúËt Õx®_ŸŞˆÓú–ÛI-.c¤8 İr“rû'a¹³FLÖ+Œò`¤‹ÅÚNN ©ökyc%]Gd˜^½|U ‰áœø$ø üÍ.a‰µòtS躤[?ú^š —6é{g•/iFŒk¾O6†”ÑrOÉæ„讪ÍTo­»-\=ğ" #^³µ ®û-(¶‹¢‡å}*LÙ]N|„Ñiî_Ó¼£Äçª3(ı±94ôs@ê úÛ=v#‚¼µÊ;MSR¾y¯s¯{?BiıT4S|ÙO6_jîŸÛWhÏg´äS]±©)° Ú4¨OY¶ÛKÏO¦­:$ɉZVsa¯Š´=b)®“wàªŞ–¦­0Ÿ¦Š¢Ù0ÏeŸO2ğj>½a£ÓHÖÛ\åläVã\Ó K¼bm›zE¡Š«44óuàâÚ”:|,•T”ÒTõñj’dÓ—Wyùğ|yÊø²ïÀz`ÑèϾcœ‹5¾E»óä}2†u¶fì&ô.u6å$oxÀÆaôòÅãñ5V_†ş¬ùb(.Îxl7 Æµ ­ŞëÅ3mÈòˆ·È´„Ø‚Væ{È­ „òiÒaï–ùçxĞA1[,zƧ9?l8EÇûÃeç Vc9x mÆSør‚9¯¬ú-K^2JZûÊÜ*t]âÌà°g7£ßY_<9¼¹;'¡Úëf$xtη…J†1î2öJ‡MÌÄ/á8yÏñiu÷¾‘½™[kÈúŞfL´A}RİÒÉ(¹´İÔ&L§udO&ßT#Zs_¹OF¢’5"ƒAòóA¹Ô×À;©ëX'=ø\ ªÒ•m`3йèííÂ]nOfj­‡sÑ޵«ºrѾ/ùz2v'ú$…?h »¾knîõÎÕ‘Múãz1öa:Æ qvm—&P½dÛÚöóÓÄY#jıµƒ±¸Ni ödï¾QÆ$(p¬R]Ø0…pI'…„1É pK.òæx“ñˆùD.¤q*ıCüÜ;_oZQ‡p²8 ?óaK¯ØË/~ï/\o±2K(£‚ro³œşÔ=p-·áSM°zäs4\×~C.~ÀË’f~ô°bd$‚¶¾ø€…h³"¸‡Kpîa/öV#¡9¤ô<÷稴Ղm8¤Ác5&ìõ›.æŒÕRRë§d O„nJtCøŸÕmüù¿RËœF»²Ğ'Cd`º :XfšI$–®5ĞŠ¼²;› >ur¾¼Âch,ÜÜ­ºf‚wKV3R+ú®ÚÏÊ”œ±=.O"5MğWm!)d5*¼®ÕÃş793Í_ÒSo¶(˜…Ùüwü1íûJt©›`ÓR¤†ÙZÌVÒüªÚF*)³ a‡ãá½½á¯Ú©š<ÎM¤_õ†wËİÚMÉgğjöÓ¼O>Zšìx÷^”è)YP§õ<•Ê™È|óhâÚ(ƒB¤ë3ú„ˆ’áÍ1,9Å“Öé…³ ¯ãte )µâ×Öצ’øÇélŸœŸ½lqnœ»ù¸ Ͼ—€G·İŞØ>’¶íèµßucÅ¡!nnt yÜ’"öú îec4›Yη¹g+ù;¾Ç:WıÏŒÉ0Æ‚m&JA{s˜¹—a؇ø/O)'Kc åÉÊsó[džΠîgaÁıd5“pôd^ĞãÖhW.M%CWù•¾ “zâ êè…Œi²N!)¶,EuçˆÇ{Ì];ñõA=qØ’;¡ûÜ{”äõ¾@€ï);{wnŠ•,xQ‘­_—“-•%÷´\L ÄèûÑĞŒØ+èÉÖŸ¦aîŠÖ;¬uÛ=8o£•sé«õ„>®ê!Šò›VÚ¯‡Ë¼İüV䤧:¡Mfܺ«wÑñl8d#¾®ÕX®àÊàØ¯e‡‡‡>Ÿ ¶e°Öaàx!'1jşÙüXl!Y=üb_fšê Æ‹G„—Ã`¥Ø”ıÙêúÉh9¿Y¬4·IÁ³çÕ/“:&“%ü:u Z󽋢!0Qdú¼7=³$H(R Má­UzCÕÅ~YÉ[É&²Í¶ËüM.Xó»úXu¬Ë¡Iªÿkñó.®´JV#Y2¿ƒ‡ÓVBÿOµhqº|{NMͲ$™é™ß÷‚Æ]™Ÿ…¶ ©ŞÁÁ7Ğ&lÒÓó̪º³Á×wCóxõA ‰p¦5XÌ‚u 2#6`Pşº%­¾r*||‹n1󙜉K…%¼!Iè(×]·ºJÄáyùvœ¿±1¡«k\¶ã8~cŠıî!Q‰`Ä)¬Ş-5¨2z#?+È%:åmzMné•Ñİ|_˜åÃ. SôŒã|¿Yuô]ï¡A¸¸2´ù£µÉà¬]qªä“{NôˆXàN]…ßÏ×0)şêÓ`ê\ïQ¨+®ÏBYò6•İT Àެ(ÃÊ¿f“×ïb§8wöÑö†R{óѽ÷iÓ>jÌj¸>•©ÎWˆs¬UQÄ+µxÙ¶6Š%t®0ÛÑdêɾš/\N®–±ZåŠ$¦Åx øşˆóÁ½(új˜‚§­ºAŠ1gO¢RnïõœĞäNêôÂ7ğ$Aƒ¦óÇóX•D¹P‡B“ÜİS¿ø’û-Yºk%‰¶Z?ß:‘X”œ—…ŞYöÀ÷ €\4cÅÔb Ôİsÿ¹i).½J·ITE'XlËĤ¾»“ HİͯóFD–·áe(&\&vίjıpmüÀÀ¶S!ZVœÇÀ ¿;^çãÛ1ı’­i1"éfbرY`cbt.ò9è±D%õ‡…ÙGÒ¡ªßªG=ÍâhÕ .±rœ+ƒÃ°Œ¹"ô€¼6ì³†ÇÆ^Dç2÷l0>xkƒªÜƒ5Wº ôíò=œÍÔÚíšòl¤IxµŒŸµ8 lì=)qŠ|¥&"¦ş¾IÜæŒsB@ endstream endobj 2311 0 obj << /Length1 2798 /Length2 24287 /Length3 0 /Length 25845 /Filter /FlateDecode >> stream xÚŒöT” Û Ó İCwwwwKçĞ 5t£‚´t—t)H#]’Òİ!"İyƽ÷»uÿ¿Ö9‹µ†¹î¼îz¡¥ÔĞf•´v±ʹ€À¬œlBiU-N72-­=Ø ø™VèîaïúÃ@Úh†Èd,À;U@ÉÓ ÀÉ àäâäâàpqpşÏĞÅ] cáeo Pe(¹€€È´Ò.®¾îö¶v`Hšÿ}0X18ùYşrH:İí­,@U °Ğ’ÑÊ  íbeûş'ƒˆì*ÄÎîííÍfáìÁæân+ÆÈğ¶Û´€@w/ 5àWÁ5 gàß•±!Ótìì=ş–k»Ø€½-܈ÀÉŞ ò€xx‚¬îHr€¶¢ @İúÛXåoÀ?½p²qşîï_ìA9[XY¹8»Z€|íA¶{' @]N… ìfX€¬Z8y¸@ü-¼,ì,,!1·ÈIj, şS‡•»½+؃ÍÃŞéW‰ì¿Â@º, ²–vqv‚ÀÈ¿øÉØ»­ m÷eÿ{² oÿ?ÀÆdmó«kOWv]½›'PQæˆù·Ìğrppğ r€n •û¯ğ:¾®À¿”œ¿Ä ı]]\6"€ö6@È?d / ìî ôÿSñ_„ÌÉ °¶·,¶ö äßÑ!b Íß2|w{€d÷8¿şşıfY/k“ïoó¿æË®l(ÿRGƒùïŠÿÕII¹øüYy8¬\¼Î_KÆùøß0ÿ6àÅÿ%Õ°°ÿ‡ÜA6.Á¿k€4ïuxı³ ÿœ #à¿Ô\ » 0ü^}c^+ÈçÿçøËåÿߪÿŠòÿ¶úÿ—œ§“Ó_j†¿ôÿ?j g{'ß «ì †œ…ª ä8@ÿ×Tø÷)«­í=ÿ¯Vl9I­Ó¿m´÷³÷Zk؃­ìşŞ¡ÿMŞÉÔpñ°ÿõ°°Bötƒ³r„»ÔoÄ`—şì2¿‘ €]ö_ÄÏ`—û8ìò¿€]á7â°+şF<v¥ßÂEù7‚pQù \T#µßÂEı_$á¢ñA¸hşF.Z¿„‹öoá¢óA¸èşF.z¿„‹şoáòò7‚p1ø B,-şE<ìݲ÷püİHHZ ğoH4ËßÂŞÒİÂÊycÙüaÅı¯üïûúWIoõ/â…³rq‚ìÖ¿x~Iœ“úµtìÖ@HJàïÂÿÉÀÉ t¶¶ğ°ûCáYÍ?e|¿â¸yBúwhHı6¿!ÄÀæÈó Úÿ‚C^î_Ğë73Î_‚ßÁy™»xºÿ‘ b`û„ÄÿÍ2^;_W; è ˆìüÒş€Q:ş!­ı³4Hßÿ( ÒÓß‘y!® È5ÿ+à†dy:[şzŒÚşÁàWK\~s„ÄtùËóWK\«!9\!otĞ6ƒ‡óé÷‚RŒ+dñ\~OšÒW'O?âC$n¿ø y=şz6ı»_\¿„.` µ¥ÓòróüVüŸ•äûGó_{Á¤ÿ5æüµ ‘Ò©ß y!N@gûÿî4ï/ ×£ä…ñ€¼Tÿ-2§ÿl,'„Õï´÷;ØÎøÇâCº övùÃÃó™¿×ÂÌûİ…xûü!á}ÿ€&úı&‰ätÿ;ÕíVîA‚ÿzûB®ëø¯_X@ Ğ yaÖÅJøµÃÇ×m7µ’$ެ;c¢S´;úiŒ¬ş îíwèˆÉŒ5YakîW’ÉCݘË[² —‹ş?šë#Z’4[ïÌ´&wZ‘ç'ğûÇ‹~H~ê#{Aʪ#±ğè êÛ ıE‰6ÏÍS]£çÆ»WŞçS_ùÒÈ›ÙÍİ>e”‡òo¬1ºïŒCK¦ió-³g©À¬dHLØ'>Ó—WSعãÏJ Ìȇ1ÜÅş†ë\±·3~+•:\D4D†„d°—Ø#“tşRû)Jsş¥ÅËıó>Í"Źh,©Ë¬˜lû\™5öZÑ Æ:¯‘…Îí¼dÀkz’~œí¤º²F\3w*u¼šV³hp·#l¿ÃFj¥íJ¯ËÆ!•tQğÛ§gÀ4šİ¦.ÿûz·•¡á~Öë7©-7CÃ[]ú%â}⤶ޜL²vFQËKB™d©ğåàQ˜N} ".&Ë¢W²À¼E¸ˆØ©Ô1çf‡¡|ôéo^Àil`UÉZÇú4Öœ“7¶É«çW|jÏ–_RONŠˆì¸eͳŞ0ägÊv½Í_£×şl˜~UÎ~²^…Ï&SæK¡’¸É;:@SÌ£(ß³3W=eæëp+XÈv¤W¥ÛÏ[¨I¹}Í:ºß:(õ*¼WğÊzóª¢BÊﻋŞíI•w¤ÔPì†ÿëü·Z!¹êéò’Ñ0®·fz^XRÿÔ‘ò¢tnŒÃĞ×½ÛíüğàÍR®(CK_¼ Ú§ü]$"`Ád^¦¸‡¨6Dÿíec×Çvõ(Ô,Ì•XÚ¬İ%Xj³ö¡F½Ó'b)m›j¿u¨¹o£[”_'·hüªŒKxz›Â¼ïÒaè(ç¶B2Î×DŞE=ÙD5­êzKÖ/’ÖeN÷×GनÛ¹9pÅÆEeôY«*Å̸ϳI9›~ÙwqM¢ÕÆWq/EÂ+D;  iÖdÄ#u^Lì>ğ%ç~ó‘Ï× TdDmÛ×Ğξϡœ›DVá‚"¨3ÊÉÀºØ*f¤|gş2 Éj+ jKd†wğc\Ê©·l>åkV¡:,z¬õ§ It%Œ6ø…ŞÒJcPJàr(º~„x¾:dêP½‰‰Î3³ 3$IçÑìeÃèrs¶ŞTr¼ïã¼Oµ#ijC]4EÆöÆRQP&̓>‹d“sr” ¥?‹´~w>®o¼ÏZ²;YÍ{½Võ=©¡¡¶6S|ˆÈ\üœ?å>ŠÙH¼Qrǹ€†ç Ù¹(xüFjM˜/½¹)Ğ]Ù“ó;÷}†®4¼}~½¸êãäTà•/!ùìS9­ñšÛqˆqKË.:¥Q¦ÙµbKAíñ§š¼ş]«hb5²Š3U¥[Õ\Ê‘8/¾5Â÷³Æ7=÷\·¡ *n"ÑkØ÷Ù:ß ”Ù–• †»X䇕ı-"¥ ¥äsÚ‘ÉÉ|—Ğ£”éßôp©sLé¥Vó)jĞĞ8İ¿«lbM"X7ê$ü1 о F"R™£ã¢µ}oYãq­4B”Îâé¤ZÉÕKè·ê™˜1ÍÇ”ÑÊô­¯­bòYğËXéšxo¡ò{|+F¯ãׯ'¶¹à*:ñ²­ØñŞ‹{‚Îïö¤İ6šÅ©lĞ—ï:¬sq@&‡VúšPÄ«}æMWÆúcª¶&GŞï¦Tğ€Pt>q›aä±MñÁNí®~Ö[€Æ «âe5ãŒoßğ¡“nJõğÀ¹W¢QæMaQ•ó²%-ÇB<ÓyÆÄŞü¤µ$v›Ël§vZ Y®|!r=IFm)ö]‘rü#^œréɵël'ájÿ¯( Ô-ó/áAr‰THÑPiP¯üµæ]±ºzu¶ÍôO`,%Ÿ‚•\TQÌpf§Rõ±ÖHÚÑ|·U÷ŸùB*òêLÛ¯-À9Hêœ?òÙ³¡äN)Şæö%§Nß²ÂPU›ï3|\1‚u®|nñ'ŒğÛ©ü¶‚ª[I¬7¯'§/E¸§Ç·¬=¸dOÄ’ºZr¬…ß„_ÜŞ*3[Ş®‘Ͷ߮7âs÷ĞÌhì¥^$ÁÀù…f^ šÆó¥×«¼[dà0K¢ëÓ"ñ+÷`»¤»¦$OüÓø×ïÌ™ü‰‘®š×³ñf6|ÜÄ k^“~Dº£xfµ¹£¸ı†œäLåÛ1Ø5qªÌ–®!o„ıWÊG^„Virãïëé Ïç·FN¡£aW«³©ç¬Û³´ TÌ’¿:ìyn›+j,º.A%·~§,w£“oyŸ–Ğ¡ëÄàd[İ•½hù­*f…²i¿|&eæ«ñÆã­&'AíH BpÓM¯¸©d¤èaêø³ÀÃ:6„î—Ğ…„XU¸W$4Kª’ãGd‹uRîU\PşÊKM¦#ZU_FQÅş‰.IrŞ–däÄç ¡ô"NN½áLDùÅÎÑ"õXIIÂa¯7IÁ«ßœ èön væê鯠ô'v^Ñup„*ˆğ2Øí_Ø/|ó|a™CÜ-,0Ğë'©P<“Ë ìËvf”çÓ¼¹æ”ô¬*ÏFu•g3â)Ôç²ô~Ïl—©‰ íHeF>® ôQ¥S’mW3ó»yûalÊ#›®ğÊV.ï'áa“æš-7§È7\oœ|a —DujÄ™<â4_ğd;÷d>ÚZ º;>a öªŸ¤Evi­YËóäHóÚ$ÂÖç”ó?šŞO]Ø>9'Ä4øèù^6,bMfS™Pû¦–¸zu¡e“½IH¿šï+es—|Kƒj2®’æ¼ë—[KP_— @M8ªELG+×BçM vL'9…Êİ1  Ì¿S;ú-¼¾QlıTÙ}ÿ:± óa©-J¤ÿC~òVÎkœrX΂" òqhÒ²æázß ìÖÛ‡ziñ4“ÆäŠ]4Ú{7'±^ӔǷSMrs·]kÎ ÆxF@Ó›oU‘£º/êß ©½/>ô˜ºxßH!`ó 5Ë”L%œ‹Ç»ÌÉe—fšKÿç£÷Jxÿ¡º åsá•ú‡\œáQı&9l“öæ¾åï4ë^D½7ÖLî&‘c*_¶×Á?Ù7U\Y›ªš¿*z£M«óI­E™?®‰Y+}öĞȽ8óaĞà²ç§0°­nµ8úzŞ BãîyLZW¶àğüéİÉ”ò«Î …wôÄ  5%Æ0ÖÁ´…ÛÏ)YF¥Œü½tyvc lÔ:¢ïôÓKİŸuzNé_ºO¯¥³ƒÌ@ɰJ*ùø(H )È÷ò¾Nd W5¨‘ù+Ë5¬-˜:fZ®vƒ‚ğš«Ôš -YéæC7÷ù?Db{m«¬-·ìğ$]p¦Ñã¸;K>y$ãv÷ŸŸ ×`™Ò[EË®‡=.O\2q-%ü|gQ(¥¥)¢ı ¬Øôƒ ?“ïr€PÖ-]Ãm=4Ò¬iX'¯jƦ3éTD\¿Àa7a8á 4eÖ ìß± õ¦|f¶ğó-õzE±aöQʯz8"÷Í—¸×tÌÁyÛå\DÏKh‹BJ¢™"g䔥B[ïJDd¤ş¹¾Ú&A§á¹0éU·N.R³ß+“^P¤d{QrÜî7FɽC]Y»;*“]³0Š ³¹Ñğá QÏà 8@Ô¨^’'ŸÅÅ4À¡â–ºà]8ؽÙP0¦šª0B¸áLKÿiÅ«v#Xî*ÆÅ¯Ô*õxŞàÁ{õÙ–á¢ÌO“,fT½)0š$ïÑ×*D¡E#h‡Kyçì[Íhß@å5ôİ¡ûJ¿4Z¥WKÊ”LKÊÂéËŸOfysÙByUKjàÖv–p£qb[«0H‚KïÙŠÂ×ûò)WÍßı¡Ó' ,ßÕ|ÙLƒ °V²‡1V,ªj{<8ö`@z*1«pOÁ4»8-‡v#¡u¨?l%ÕàYUĞ@)Ñ©âğf«ø¦fáK¶¸‰ A9øıqÂ1æäµ?K•¥"VOø€½Ÿ»–)jšÅŞï;}ÑtMxC\Q<ÅØùæsömCñ{Œ0¢6=ªió¥Ğ6N©ÎAâ×§âÓ+Yùaá±¼%M7˜Ø²÷:ôÍ'9˜Â9"ñn$ ùmÏP°“Š4gÒË^ï(q*²[Â\¯Û·âPñíè ?NimæNÒB Î ràŒ6×( w…RŠêâğëd'†Ó©$òàæ»³«¯2?´ş#0*€±gi~Õ"J!¥jݰyª†Ç3F7ğK_ï^ÏE)®.`’òkŠAòáÔ-å4´"Ò´ÁNéT.‘2í¾U±lMÓ!ù}¦¨Ôˆ¢ Iˆ6ç5€ú|ªË}ÄHóŠ]¹ëNX¶û“¯/@UÃ@¾lfB˜\.†Ô®l’À ?:\‚7$qem’ù&+A %»çU㌂CDæ–;^˜Ïr ò.[·ØâÄlMMş¸cjõ¢S¯0]J µÈŞbFí0Ñfr[Î/Ó¼q Q¼`KÑ JB[.Eä¾-ñè‚À Í– #5ŞÒ«+çî;·¨’¤ôõmÛ:bÆÍ±¢,ô9O ³W}š}»ÁnȽ–’ùãë‡-*ù²¬ª=zUIÄiŠ—úºW M½ 1¦(!Ós´£” ÇÑê ÏHC£±f·Ÿ£…÷#>'l*5yå£ 5Y¦F¦Y@,ÇX¢—¶åMy­MøHÖúókmשDRaö‹ ‹ÊúVÜtÉ`«¨7ß\ô¡ëUÎâÜ¡K¨—Ìç&@şKæÜN0^dÕæ-ôŠNyÁëu”;õù—SİÇşï dkÒEÇ\-öMQBçí~¨;šg7en¹ŞÜ¡V xú.Ó¸Ÿ¥¬œ'{"ÛZ¹õ0óvùQ>®˜Ìdß‘Üt¢ë²TAw€ówí…Îò:ÔÃ{—ªÍ€ê¡ßÉäô:Ü&ğÅ*=÷×{Yå…"7N{ı^å„g*ÓÆéşôšï„"G›ğÛ2%\ÿ*ãK¢¦³Ùô™[”°úåuñ6g\¥Ä|Ö)î××dö[s Ëñ¡6㯛´Ø~d^>zч 8³aÓjouË´,8ù>Pò'á \ÎJªêsşŞ`ú¹FŞ“×L>ñ¦aóÃ=˜ıİ4ÊÓzÌÈæ ò:ÏÛ:Î*P¤Ù½ŒX +ó®M¹­  Ù]i´‰Ä±ê­ù¼é·fyå+aŞ „"ï­pÛŠînÇ’¥Ü6’akXö•!İ+Û=gí“LJ߰ Ü1¿“É\^ ÅÅ,Z“#jî’$ÁX¨?XËãYp7[,Ê‹†Zì6ǦK<Ÿ‘´÷•‰^cõê(—Y¼¤Ùö¶Jú¬şÊhÆ'šÄmàU¡/œ"CÊs›&¯JI¹b§UC`€y'M‚ŸÌ&îxw¼w«A sûc¥¡ĞØñ^ïxQ_ç—³§à`'É´¹ç q\å!Şìrä~}F¿é"É{ïä½¹ÅI>ö‡A´(£š±(Lóo#²9…İŞÄ]ğ‡ä$¨ù~»ög*¯ °†k÷†$î £vû‚}0võ?Ã#¦ï€"„Ü; *¾¼H´),Ëš„İ|¼gÆYøğRö°$sí`ƒ²s¢‡ŠIiI›½sÑ€¼‰tşØa ŒîÛ‚ä¾*sÅnä—æV$ìElÑ˵ü>¯ÚÄ:Xo©—«URŸyÆJöÄ3¡Æé¯¯{nƒå¬õäUfY˜÷ğ=ğ*埊ÖMÙ›ÊÜê{à†® íŞõaTŞŞ’Wú½–)K r_±32s÷Uç%ÄEôíÌ·UÛ"Åç †ƒ6€ë?õd”fR[Z^bN–H»G ôë Jî£Ø>¤&¾×†¢šjS¾š¢KĞÉkD—»¾3Ş#~¼6N‚%#†ENÑp 1î CSğœæ{Öì{œH£ÏÖä´ö¡nŠ¥à>§Ğ*w°Äú¹DÛVJ@dÎW>Ê"s×[ í&ò1©mFhcÜ<Îíj0 qʾ…åuéÀ4ÚËŸÆdQ£+¥Ç±/‹2®SÓìR±Å‰úŠç6-´ní@]Ü\³Œi‡è6€RœÕæá‚ÆÚ,‘ˆ¬ +Ï·EU 9³[~·0<óó ,ìU™©×Ɖ* ±)Ÿqn+é–ä>›=ÑFáê%J˜5údİ8Ÿô ”e¼ü Ÿ¼Šô ßêp‘0äá#á+¸Ãs²?SrÏı) ¯ºs²ú‰hDÉ«›E™"úÅY}øx²Şj||rÚC¦æëz£åUİ®—B¤pa‹KâVÌW´ëu/~ªµ.Kió ¾¹yÕõ :¦<‡ªg¶7ë“í¾Î÷¶•mSË2ı>$„%†L4€wŞ•7ûŒxQï’¶ÂMqÕ(İ«z üŠEŠßи§ KZ+J“˜³G†"³: ùüŒ¿:aŒ7àééø½¼öê-5k4uuäyMäfù¬TŒÙQ–RkR¨ô>YÊ;R‡ã‚“£†™‘É+Œ©Å„’h- ‡¦"Vs'Íwú_È$¼Ş5¦Á~biooøÀ•Z{„Sİ¿'m„›< É6l}º YĞo óÆbk •x—ж…®ÔxéÛ!¡\âeù’G·ì7 PiÉE»¾º)İ^‘’r=ñˆûÑl*Hú-Yg<ûËHJ±gÚìî¤ÅW/‰¶®0L#tà€÷ë”ÉL´Œ¦¸?.2«ë«šS®%¹:„ŠŞ"󿛥ëüŒè•f= ¨y¸ŠçÇó†¯ZlšÓjVx;×÷‚‚ôDцÛè–Iâ Ÿp7?rëe>ãÍÀDoyÉî Z}ç÷Y»‡ü²=ŞóMÄ\C­ Ìém¶¿kï­Ú£›]Ü5Ûyü[ö~ކLNåaÀı¸/‰n·/äcšÍ·•ş¢÷ì Ài1ƒÑ-_5dT›@¸¦‰¥ xõònnSŸ$è¿8ÿ²²z+ àıj´†/rÇÓÚÃ郷6şs¨Ôû¶a…qO˙٬֢3|óõ2Ã×dEÑq£DIÀ÷Şêïê`ÏŞ¼Dƒ½£ûPéÏ}zM†;5İcóX¾®øí{ÇíïSæ”t½hzç©\zÄÊq;Ü·úËÊÙ·´±¥–»gÔZ÷ºé\¹³œÏ ‹¹÷¯¢ıærJ‘ÄGê«Û‹'Ç1Ú:Àv)C±µ^_Rˆ8nOeç¯5smò f½ïŒ0îÔ¨ò¾ª+ˆyt˜°ëO‰á¬àùhc!¯vÀƒú¬ÀûAl³‡‡ì{¥Ä§n'ú”“–†û‡1©¯BÇÕİ딬‹ûU»":ŤÒmòÜÚ Îlªh`ËÁşáÇ,© ÷¾L¾¯»ù˜o¤D"JùkˆÎã'øôŸÃıbSeø ñ3ö_N¥Riµ‹S¢gÎ÷MÙw¿ËЧ£X¢İ8Ît£k×&3’¹nöôÕŠÄWSnjÚÅ&ÿ¡ÙJûfoŸcKbO /ÛX‰Ås¸“‡o›.ñ@‚œIÇIıs¬×²ö›k|^ñX\º÷R·@Ü/x2ú|h¨?›‚êWMk¡Î±ğ«ã¢xÕ‡=í€ß¤Üi\ÃZû,Î%&Ú¸Š|ÈMNœÓä¥0Ptä'> |M B½½_—>`KçğÕ׺ñ}.~cyOY¸óce‘ŠNzái‰v¥‚Šòò XB/éœÉpít’üÀLu·/ó°<Ï.V(µ<ÆÊ£‘o¶²ãÇNIß Ü8% búãháŠ4bÛ}­ù±çŸÛÙZ§0-YTÜpQRÿDÁî>›D¦Mߨ-MQ] °óÃüט¹¿÷ù“4¯×Åp‡Fûá¡„•±pùàㆰ£ì•.(<†ʨÍızÎ"DËGI癹©¼§6\P*S7Qq~˜«9Êò²é¯g4¿$ Ø»­"z‡–íúèÚ'›êÀÿĞQ¬z' ¶¸LyëˆÒ ¶…Ÿ&ÙW&–ôF~¥"_j¥ç÷Vãâ¤ô´æSşõˆğ—,¯AB½&¹à|#ɪ’âÉ\L¶éŸğBÄ ƒµqüƒ4Şú¦­ÅÚü£©îµ¥ì¬‡†òÛÔFüMVÏÔCşuè«° üµ»*^k.‹p‚ú{vïvx¿yS¦\ °Å0 ò„m‹h~5OÀ0½ [¯£^pŸ²“d×VŒ²ô+î{…+ÉD§ ó%–ŸÎ8î6áÉ1à&Y†|EKx4UÓŠ‘T‡cMÅò4Ò°~£D œöΪ}_SgOEé…*±·„Ù‰~Nô üÊl\ÍieQôawÕ|ŞóI¼ı ğ3ÕÇ» ˜Ò6óªÔóuL åğNn-a>>úÅK†3˜ïeËM¶ÉÑövÄ]äß¾W\½: xجw5'í°“d»Õ°î¿¯7¹ ¡#G sxù>uͱ*“¤Táöñ°ßœãaéX$gT2³,¢P™#ÉÎ.}°¶ìİÇÚERܨ~%õêÔ´<Ÿ¿òÆAá =ÿˆAøÜG:ò¿Ç‹«Äšb:x”³Óƒ·jŞâÅûğ:¤G§ jÒ)ã¼'’:ç©;Õˆ“ _•":ñ :«x"ô«ÑRig×;œ.¡Š OPza(»ùæïßQ¶æß,µ£ÕŒÓS…ΰΖ“ o¸HcÓÊîÙègó¥|ç´yÚ~$¬<»³õ;+×–Fk•&ïy°\•šç©5æÇYá~PÒÏÈ®¦zeîÊÑÇ èu(ijÊôzgÃSàÇ÷Ãß<†i‚P•‰ƒ$Q`íş²’3’‰İäó:Ú=«…^÷OØøqÅ cíªİL_58éøzN€öL¢‹%ÍÁW"‘¹=nÖ²Š×ğáµ¾2¼-Wʼ‚>Iʳ'r¬ùx:ÇßZå\áàXÚ±C,TÔo Ÿä%+nH KlĞ£ÕW#š–y©>{0N×öbëñøcõ§Ä®êbQãŞwF+Ìí¾ª´@¹Xä:KÔKËÛˆ¬ÓÙÑתŒİp˜.~ù¬öØl¼³Cmú½7Ò^%2oÄç\_’¢lô®šÓtt’-¤³‘5ª·Éóı÷Ì7+……£1THE<°ú2§×?bgfU¡­ô®¿fìı7œñ|¾rì-LkóÏp‚ù¥­×û‹åìLná¥3tù]*öΈ {aª⤔cú=Ÿ'7ñ¹û;«…œš#6:eXq+C†ª4 ØñŠùc³&Û1Şãæ¬3vÛRƒ¹³×¡£Ø®ºE•ºKL…¢·¾ü•mœ¡pÍ@Ma• Ø%Û¶#HùGJÂËÛØ™_c7d¨şh‚³Æ£UÈ#+õùôj›&ëm“ÿBÒHw:›Lï;h€¸7|;LØit‚ÀÚJš}€jZ‚4çƒ:9Ì÷JгÇbı÷Œµô†T?tŞ(;êjHmÕf~ÇiÖbk$¦MAÿ¤t¾õİ^%v¤Ú¸X:)…wxëæ(5&†g{–£}œÔ©æ°]]õÈ:üP-=mM%w<6é¾>üíM퇋ǒiâÍMޱ:İUÁ9Ríğ.~ğóÿº‰qñïå¥ßs[Uâ‘éG2¬“ÙUe°?!²ãRJù3é²N¦qv ùS&“JâôÒpÜÁø=Km4Ğ*Àm»ô$>á sX1›¿“izªÈ,ô%ı_¹ _䧪1XPÌ9KĞ6Œ9İÜ&¥;¸·8^nà!é|í×Ú¼«p/J`^$ºÔb2[Íû¬h)4ê¸^û6’²^%ş/£VÂgUaàqÈâóÏäºßy|§ ù”SƒÙK; _í®õ¡ÁVݲjÍ~â-±2WÂAMx`x­+óé+dM½h Ù‚‰õò%RüA¯x+u^¸ñÄê£7H?v²¿3ë½ÅeÌ÷7œ¤Å$–%Ø¾ØşÀ|$ªõvJı‘Æ‹¼`ïÇ ÙFùéãİFÌø‘‰uLÛ@C%&ğÅÄò•çãò‰$úP‰„§ÎògÏ®×j“WMzÉ'°™cIôUµ©×¬'4›¹}Óğ›ğßÉuI8mü Ï^뉚KqôçE×ߣ®–LËña²ÊWÄ7ÓÄ\XÊb_Le:›õmìOÂ6zúíSI«³Øy»4jƃIZm3êã«-86İO‘çç2¢Q‘y_#¯F3œ^Y¼(À›Ë<$u¦RURáë6®w‡z óB×3 «mõÛO(=ì Ì-RŒ7™ßãÆ31 Z§ä`uÙ5oWËğ<ª‘¢hdJSğÌ|4ƒ9®ùoéVóløIüv½uÉåy×¾áÔ)x“®MµdRş`c²Z‡Ü1á>É¿Ac~^›¸sñ‚ÒÊÚ]¥4˜Ãî…ÃêÑF~Ş'E–šI…ºılna£Hvgğ76Âİ/’hø/²:şÀò„Ïtõ¾Qõƶi£tDÍ,¹©òj UékS¨™8ø,®¸œ•Dx­¯äº©½¬]z~sÁàğk>"¸©{ı`J‚ÿ-ënøŞÙlM:4Z’jóNÖÄ`7&­Û&_2gsYL’õô;­[y¸óó° F‰úÇ6º07q:“È´{Qİ*‰Ò¶¥ƒD¿™ P†_Q!sÓGò‘7ÊךÆÏÇ$P‰?¿Ug¢ã:ØSFGËÎtÅV€ñ¬s(Ò«µŸÄ“g¬¥(é£Ñ(ğÎ/ki÷C›€•Í«È×§Ô,¦­•i¤&oıñFW[8ˆ(8ÄUtBR>MíjòÇøZğ  2Lú \ä¥rgHÊ;Yã+`â£ãöFc¶Ñ—¿L|'®íA½ğŠE8²^¬cUy–ş$¢¥YğÚÖ’Ğü~– ³Ó«€h_-xP‡¡ÌøŞPÔ+L˜şYBU7‡6!HyÅRYñËPD ñCä¦pVë«‹mJ”(6ì…:è³á6î¦H¥ÁŒŠâïš0)ò¶/C¾Høø ¢5d°½•ŹÜHÉUTùA§Ï«©¢N¢ŸF}Ü=«óÚ‘q\Õ$5êrİjj¿XL¾Z›µc݉nXSUº½<ŠI™ó°_°µB-3n·‹¾€ øYAdõú*ˆ#­ü¤ªÆ×tÀIÌî z€4tȵÌ|ÏÔî^ÕI0Ñ0ıQš_ Ûml½!?Œhôʼğ„‹ÙV>q€ßÚH𥍽½’L¸«ëıЏë|v2k@Ø'«ÏµOœn5ÎæY£`OõŒ”Ô§LˆA”ÖS¨mL¶ ¢6ãpÓ~–Ûk2‡úv`™\0°w7”0·ÂÂğJ\ğMï8|ZîU¬q8]I;ùöL°hª“çTØÀu&R•3A5õJ"bÒ²Òõô£ÄkÊ4~\YŠàéšÎ¼HvXş8³½šDÊ—ç?õ³àœµCÚÇ9¤æ£ùF'‘·Oo ¥›û}‹™$V§c $î[ŠH¡ƒ;Iıbø¯ûkHXìÕ(’gf‘{ÇnÑòª±Ò=§1¼¥ä%Ūh³)ŞĞÆ6âÉ—«Xƒâ¦ç_ξ1ſгÁyö¾:÷âeb9¹^÷X)C[¶“öûyÀ9Rö–£Ú†maMt€Ÿ~È=‹9ıí)ë{eØo]Ó¾5ŒJÄu"…¹6ø~ x[Hz÷{®¦_ùµ?{U$¯h,ÊÆÎ*°Ñ–’JW^ÅOƒˆZ¨ûW‡RwòÏkl´F,†yƒ_‘ßqíså÷<6æn²úX 3¤Øä¥T+Ü+Ä ´Ûó?—Ìä%Q2‹ 3›2ç’]>hGÖÒu_îFÓ ¹O÷í…‰¥~±U;¥!”Ëì;ŠË¦ì8Ÿu¬@™ØeT>ğÔ+G?sğïÇÙõ§s Â˼øÖdåBÇ ´€VÁ]Ñ'Á5›8è½K±ö‹ˆ%è«@â‡ùÎÑeıçeª“¯&xº(G'jÔ-Ñ3ÛŸŒ3šk†© ŠiöîŸÓpZšÌ"¡½ìÍ äö1Ï~Òg\è;šHj4²ïñhIº÷šÛ¢ŒÉCÁÒÂQş®³üëUdˆ]ZÑ•ÎY•‡İ`./4Y™'Ø2VË9ğg*¨•yj5Dú³ªATúhÉ [ë›"ÁÉû•‰½4,ºˆ²é²/| ά"q²kT<Şà öY&ìD­}Öcµ¶ÎSk(›æşw28j&´YéöÍ©ø‘.NÕ ±jóIHş¥oäZÊfOPêú>Ù²ĞΨäNѾ)…,ãöU#áé)ô5=Kß1¦mí­Gï0~KT Ù!ÛjÔËE¦µzÿb稖k ô2§Ï·G8,ò­¼ 5æk$‚íòÃBU×§R%¢l½‰9¿!}~I tt½ !='0i°¨”n{;ô•ş–¦dy‚-ó»L¥Äòˆ+"ü«=ÇK-ß(‰áĞ€ğ˜ë¼y£îßè²ÁEÖşYîrõlÃ3HË (oü‘æŠè´×îp3—:Ô¬¥ì#s8`tâ#§./E³š10Jnª„gª{¥ƒÄğÔ‰¿2ãP¼F<Ù¹¸vÎÔAfš\}û±Ó9Œ*:ì‰ìM‹şá'GW¨3Ë }î…É:ë®fÎט>IGÔæp~Bià`Óϱú£À ¢6„WDRLÃNùê@e–ËX‡D(0Ì{Ïò8:ğW\˜‹«Îmı5M3÷Kò™úÓ0w]™¨AgcÌ­ñµåú„º÷üv&bm;ÖZŠlQJµ`Rƒon¦bvã’u?³ÊŠÃ–òåRè01«í¼¤[z|W¢®£®)<)òÒó²¢Ñ‰_èÇH¶x‡ØÍÔ‹<ÒŠ’ æy³^½b#•å…D;ôšçç´©“bo\R¢—Qªeåöˆ‚ /õ§Yå¡/Z’¢ì”Rw…&æfk–ŸöͺfÁ(¡QòZĞD–ãǸñ/9|UŠpCFÒ#W…à6ñwr„©7^Mâ¹°§¾ ÜUˆápñ‰L ²ˆZDîaåÌİÒÆ¹ÿeನÒ$ÙŸÛ(쟴±îzù*¸4n2¨98§?‡Cs.¡CN[úõ’¯MMí‰6ʶáEpÒ‘^ŠûBš(6õÖ0ÎY?T`ºÊ·/ÁRã8ªö”ıÇÔÅr¥;îu÷›¢Ò®µÅ˜I│E}É q 4ƒóòܧôt¶½[]ß&léıÊáèRϸ&¤¸Ä1ô×耷Ğ`ì0ÃòÚJß;ƒø‡*›f˜g,lFMcÅIJ»EÂşéÂb•lÆ#p(ò¤Shj<w1”׈I­˜»Ç÷5I§J±ÓC’sÛèEŒjmAX TKêL`búÒMÇ®­À^)m-ťͰ°?ÖlŸQ’,‡E¿`|İ9`.»¯]u—öPHê,&Æ€¶Š>º)+çcZø~8yã“h7—Å•Jšø×0l9Ï·šºDÂ|ya‡dRıP1>8ÂÃrª,Òaa[вîDáàØà6M^ĞÏ-”/X(w ˆ‘6ŸÕâğ6çÆ0Yd—wí8¯ƒÊM,µ¯ÜÚ8T|^j›¿ÅØl Nq VzÏéıÅ®7¢ËÁ³!0{JÏŞ=e$2本@·ËmGú„×§úşf²#Fy±aÄxÌš!Yı²÷¥$c p­×†$ßq¯ 4R" HsŞ.α$ó‰£Ißd±©&éeïş±^õQ^S™÷A™èxÔÏ–ù•'âßY“†÷*—xõ#ß-Ua|c¿P¸šJ”y4jb×\F,€Úާh5`J`?*¦†´:b©T“B›*u•ïM*, ¦X8E쌠+¨qÙ‚ô½P|¾K/}kÛ~Ë?µ2¢¯-֢̈‡Ğ£ï{nTÎDÅ%%şY’ı)À÷öÛ‹ùÔØú‡†{Aéoç6‰oË¿:ÎS¼}ûÃW;Ë~j(ªcÕ¤Ç+!´‚OW‘õĞN®ëª%K装ó)]Æ«µçކ €GßÉà—_ ¼a¶oÙ5Ë3'>ß¹8œİv¢Æ¾™Yùäw)Bظ^€$ÛØì·h–èéakô©}4}F=R.¼í£É÷òù¾;¨i˜(!ÃÅ3èÖŠ¢¬[_©MiI­00Õw¼P(3½)WDʇвÛVxÅ-ãn­ê›9 æ·-i}“„ïn¥Uîk=;ø’¸Ûà'ø"r¿\†„ôİèÆ‹DóäÏÖß¼ÄTC‰óÉix@a¨<믌oesU?­‘=ÎWÛ‰¼EÀşği5O>Vş“·ËÚqT–̼=ÛͧO2"ªÃÚNmK+ƒ-MÁÂ8óµÛ­/I3Š"Òr`-,/İãÍÀ@«M¿ˆSVSzEÏʸ— ¼•ÖÀ 1P¼,%OfEb–½¢ÒËqˆS×C$îC Ì´›¶6ÈÅc‡»Ï3@§Š1GèÂ}¿Ï|€Jgbí+ãë†áA"2ë Ÿ k‰KeëÕíÌ{‹hı…¤oHߨutPp¢îsàÇ7`¿Äw%c¼Ê+꬧ c¨züò-}Ú;„«ù¶Dàû7j6ûtѯâg¦—aÁ"–ë¬Ù=×iµ "äcq`ˆıµ1IV»ÄâzÃCJöVº>qUÌ4¸£0᩾ İ©šiVjA&vİÍÇ_ºwiZn¤Dá| ÜX‘¾êïƒáË\?Â!Ï¿›twá,¶ñ\áĞ¿}) sUÇI#éã# .TRoã=¼÷˜wÕLe% ø¡>¡c"çP±¡–殺­(ö\HmTc[^ØwîvÓˆæË9ëV«cü`™3¸™¢'ıƒ«ÍşãNk€Ì¼Ş2*È)É‚ ¥Ç™v?LCPúİÁå6ÖéKÊd 5şíí\4ØşÄ–‚ ¥MÍÜ}R(¡Ÿ7Ÿ'­ù¶}#3{9¿l-¹Ÿ¯‹Ï$Øm>Êù – Ÿgâ|æ#ÄÒÂyûѺğv}>Úƒ§w¥t7w{Ç“{餪ŞğCìQ´„­†æ®bû6Şóס·ºE™û 3Ë}€/êP'”‡Xú¯˜¢ Z"ª¸Ë“¾’'´˜ãS„÷„q_b¸ã•Ørrİ{Ô°÷ù#MòmíºšAŞ İˆÏZ$/ Ù£§_(’Te. X}“i:xä?jÅuûp½–ØUÂ'H‘¯lî K(HB¼G÷4ÚÄİqQa*Ü|'·QNëßÅó9&…V‡hŞóä“Õ˜ıòÔz"‘óÁ·]6KõP–`Ddz35“ÃÍ gšxoõÚfÎƒÈ ¬@r}¿–®óÕ\‚>ºÃKhít”ÊtS)×6yø¡?ö‘z—Ê Nй$×=åÚ,¼ÑİZ>ıÜK{íºÈ^aWü•0c!­p^Ÿ•jh[Db‹ê«‰PbZùÑAN‡|‚*ì¹Å$ zŠì#œ‰¥åCCIEëÏ&a Ê'Dª— îè÷Eà WGºá,É”¦×:Ê`³Oø(Şé£—Şoİšõ›eºvE¨ËUsKYòURÕ2Io±×ɱğ1Š»ÑÑgVêš+ÜD˜Û×õú Uä9¶ŞoHa ¾7“§ïÔ¦¬zyëµxW‡Ä„K©°¸}áÇÍÖ¼pZ,‹E†^Zì[Æ’¤Öd*&&YJ|¾Ka`ÎYO,ôq `êØd¢äbD˜›¤Ii¨¼ÓıÙ9qE]5¨e±9åİ5¿—vŞÒWûuRYPtW¶j¾áåWä­—ñz¼ä°PA&1Ïàì–¨‘è;*êµåÈö“$R߃ÜIà Ï\ëVılö‚»¬dé䜹Sûs(Óüj„{;n›±­¡Ã;÷H<öݼnÍúA”ªş!æL{öȼàÀkVa³ØÜë%,·=éH¥`lÚ”£oS!¦Æhi5¦ÅÚué¥P­esnw»;ûЦjzŒ»»08Q_¸Û¡X„ÊåIiì²êk9ÙßãQNytO+µÓ+?åbÍç²ûS‘0»#ïäÚÈI”³{`e|×mìı>èÀ‹Ã[ÜÓÂߣô–±G›è8ÓöæÅ8︯ñúállAhYÔ<Á’¯¤›qš}ïB×'ätÅz®Hßl²¯òõÓI’y(<}»Lßôê9- šğEZ¤êè^ª.«E¿{ãÀŸC¬=¦c†ãô‘Û˹pÛO¢@øº¥#h=ÖuóøB^±4ö‹ècˆkïHœ‚†¡…X*Á„şŞÓ¼Š„NN§¸[–[îH}Ó3Á^*É´EŠÁÖz PÃÄÙw>ä"ÿ€{0Q¼ãÎÆ£»I»ŠtÎş=I’‚F]ÃOeãD¨.Ȩ è_GÔ+êJ¼<~²Yæú ¥z“1¼vîP³!Í!óJãqÛ“²¨3á•0X´ADÇ '-ØUM2±» ÈòR@•,?DZĺO1HM›|îÛ§KäÏ&Ū{¢=Û§nwZdØ*ÜågU÷×’Dƒjxî,Šc¦ß+ğş½— á"wò§í}tòsAÌV±˜8Ò×ø»²…j³ iw´Ü8 îαˆ Níö]Î'„x,)w‹Z2¶~Ÿ eB¥bXİ$:IU¤jœIãv?Ú¿n<#nË¢8Uëx”ÎŒôèÇänïS˜€ÑØ”ºu| Î'.âÁ% x´±ƒŞ„6ŸAìÄeGè'å YÒ&/ nyd 8İ|!oXæ-®2ç[+DYĞxı_@Ã:R0‚j÷0+£"u²#/ç¼üÌ­£OV·z¦ànÓœ¿NË6¬[2$†~ –KáO·n4kó2w¯B!¯o?Ä"O´HÛ]*í¤İ ¿;7†íæ‘©»Ç0^-1£·É'p‘»¸­ğ¶İ³ O¿õœ)c‘amÏKşb¾éÿJÚrúÛ']¯*ø7©¿G|"¡ÿU‰@ZwZguÉò3R~3lñûW~­ä'89‡ˆ; ¶‘ùŠ£?¤ƒ÷W×a,äïÒ'0sì`4ªÎ#îmr™;ò©95Q¸¡ €~§aNÀ&aCøUͳ5$L•ñgbhíÿFCK$«·´Ş8w«f/„kFb¹)p Ş¢2¯GxJ#áNÖb3Û/q„¦™úÀşé@Ã…ÛbTi†'\RØ’‚ n²‚cây“ _QÍbxââs, °+zÏz2¢Svíç?é/š=­:½^lì¾è­Éi™á`y¹“,5ÀH¹ZĞêx¦E©à‘…PàêºØ5}>r¿ €|(Ï¡E“(Å“º[ÎÉÔA•(MÀ•háJܰ!n0–`ú€½ú;D÷5 š“£b4Äİ*«ËÛå ©õˆîHèó.Ê࣠9³H³ñ`îÄÃoü‰ã_ç2<€ c_g®¹šSä*b=Œ¹§·D DıU#!)–[õMBÔOnÒğ`G¦ëZVBÅT‡`ıMNôÒUBq·fÇjbé)`8q Il…çÚù²D!*œÂ¬HV7@HH'³ò–÷ø¤tKQù²ŸšçÀ%7up|ÇDÜß„#µp=uÂcç’%,OYà3[ãt¼>Fß w±^!–ªºå„`ó–ze÷Ò-«¹¨-"@.6üjıCÉ3×ÊuŞ»ĞFBg=H(¦8Tİï |æbk¿‡„í¾vy ¦BgfÇãQ2íoğK·`ç¤Èİ 8j^8ĞßĞ­gtÊWùv7A(Ágh'eŠC³p×›OâAFÌÔùm £wÖä1gÉL$ŞÎ¸’̱'Q°Ç-Ëp§V_öºêpràâœÚƒ'#ô¿ÿÛ±AêxÎu@TŞ ÿşönÊ×L™nEÅFŞ3—J’5×}<_ƒQ‡K?…!GOËhØÔ`Xx-™Vl$šì¿&˜¤(¸Œ~{O‹éuåxÃÙ~èöo†ÿ ³JBèqÆìÆù¯¿ºñ’6´ ÛÈ4>6mEş$kŸôMÈãt;ÔÌišRàí¬Z}Ï6ݨ™Ôä qÒJà%GŠv"+¼Ÿyb/ëâsµv²ÄÈ‚ª¢CåK Èf¹;@×.Â8(Œ{¾ ‚`^EË ÊFvW*5Ïã&Ã葵“û™(QlÆfFöV80@¥Ü¬úì™X \TnîÖäªßòÇÛYÏDÉİ>(À™—û¤ŠğP>Nı!ôg9QÔîã)ó2ŒZM ïWK2yyÇrë®òyÌ®†ÿ¢èµÑü¸×-ÔŞi™Ñ™ı+ÊdğíLƒ\C„ÉŸœ¢U Ò»_ŠM«xXÔÁ*A½j ²æY¿Ô#J\Á¼¨êïÌ¢Ì<¥©œê+-|'íG^Ö™¥°{>Cº‹×ä11z※ óÔåf‡ÒT°İE‰€CYØQ¹‚“Æ­&:±3o¡¾[^£À$.FQC=¨_|îœ`ièûÀµÍ8²Ñ:Gy_AùÂö\¾d »2-àmº„·Î)êf«}†´ aßĞ+á, *^y:Ç“V¶¯fŒïX¹™–îeXBÀvş rJ|iÁèØóÓÌq–p x¨ÒbÏòu;DO´D’€©, ¬:]"wm׺çBvïâòã„F ¡YG%•tVe??³°¨‚6âöj+Ÿ–%ÅE8!Ë•ŸˆûV°“ğ3 ¸&»”$ÚºAäæ<Å9êÆ{wK~òqŞLÍ!Xá²L~ğ Ä½!œÓ*Rœé(8¨òXjPÀ,áğ äEagêç2„f÷rb1ŶIœÅ÷¬EZ¦,ç‘áR—P–/øÿ‘ÀG аR+“ÍìĞF"7“‹Fxùk$3Ç+ú!£jhpÔúѱ¸ÔĞZ¸ª#FùH]òğÒ¢PØSİAµ¡Îáòn¹LşNÅ[Ou¥)¡€Ã2œ3™$}­áäÕ¹’z‹bîïÄşeÆs`}Uñªªs4Üx©ğÖÄÄË ]>ec´ø˜C}. W¹æÆ[Ñ…ƒÄ'šGÌ$ƒQ)¼—4dC³DC_ñeùmü}q&ú(³Ä.áxI“'b%jB 1W­u#İh„9.?ØÌ¬¸§ ò›mb¯·Ë§Èÿ+Ğ*´ÊHi#Ë4Èœ=uC2üÂÃ^»øE](‹¥¡’ÉÚ81,Có¾u)‚>cÅŒ2ÖÚú–t™~@ʈ½~ƒ_÷0ˆaßìr§Síj,M† E eV©o'ÉfT äò¦ğWCPÜÚ/5S;j•œB6œCÎYÏ~dQ¸Oqkè¡Æ8Ì]¨GB—û ízßk÷¦2ëHQ¹ Ÿb"°S“ó²)¤7öBθ–Ê—_ùDLdêmsC(Ô5<äì{ÜKù’ú½ÔœhK„¨—ĞÆÆşè=§;]ß„cc„_•™jw}UA½à:ù½”lñ¤‘$›ë—Œuí’>½jö9 ‰©MJš¥ï°9fÖûé"DşYª~r®Î9JJâzœĞVAÊAÛí=ª\Ü…æ”%q.Ƕ´HeíàÃ(C;¾<§ü>í"nYAKöhÚ04¬jº¥÷ÈÃே4Y¢Éb€Óo>|¯âómMB­vYµx—Y4¯ÜNÜæ%ìA³€Ê e§›ËŠûÀb Ë sÿ›Q„Γ¦VºAÆEÔsä'˜tç7…‡·­“Ûô¸å`ŠB5½œ~hSr#pæ) I1ÜtØ™#²T³DÏt†k|²uPÑtFƒÃ¯œÊ^øÙîRÓÙy´E! R¢öƾ¤Š]ïÉÜsú÷ë ½õÏŒ<7ò̆ \’)C—Yí§K÷9Í5Ûh2®DÚ]Ì Ö©ª% ¬=;ºò¢¬«7(©]J+S,C´ü–¯x*=Ù~;}º oˆâÔÈ+®ä+™̵R<Ÿ]ϱˀIFîî™ôÍÆ;7”£;3ø)KS9Il­kÜıë.aÑ)Y W~>W:.ïÍ“pt˜@á‰9i.Mğ'jOô/ŒD—p E¾s®óçl÷$ÃØÌš¸«é'¨rÁqT(…ÑP ñ¢Ä5à ίÄ©ÌC¨®,ÕL‰’å*|ÒD޵ÎREşé•ŞF÷—è†Ëa{P3Ñã·Ë ¦»ĞUXèeökâc›qôhNàÀƒÎ°«Gšh`—(Õí ‘Ë~èHb!g¶PßĞ”šE«îıôÖZ•à"‚ÿc¥¢8ÆÂÖ½x·ãFë9âh¬×> €½H1Şeû,G0¤¤ÿÌsˆ²+K7PzÿÕLúpãÇ.Ûó·ˆ"Q¥—År/dT‡‹sïÈÂmºåß½ëzún ë}ÚJƒ ˜„5¤*„÷ø»-_{´¹X5RÔYò«Èø½D^tc á´k zFGİkie.İq dŒÇƒ±9}î~Ôra+·]Teù"Ÿ‰å†“­ÕÿÓhd„H8`AÃyAKî°ê†¤îæ;× Qëª>C\À<-?¾…›wHã‹ ˆ"~ËA퇥œ–|Y׉‘ŸÌvõF‹€w]Ä#8VËq>«jdö÷ªÑ­êm¸áÿ…D×ífğ³ëTÔfQ]Ô3D¡‘{ŒËUcÔäÔ=8ûȤi­üÒ PßYfÙ§çs{NWZ›SF!6eäϯóĞıØYßò„LǤ¹PU5°6®²¢-zÎ1AÔÍF-̈ÎOèŠŞ/ØÍÊE—¶¶S“#mõ~ ì%ÔØdÁ½!ùs(VEÒ€*¥Gd´6û둪çóL6ş'-2‹Z{ùÒ»›¥³_‰£ùv½¶ÆåUıË\ş$íó%A›m/ëÕhË“n!‰?:6ÇËSg³6E¦ S3cê6@PO†XQUÖp"ãÂ6Ñà AR$vİÎUxzvtQÉbIÓˆwÙNïÆ1|/2sl"âÍÁÒ\?R0¹l¡Ù¦¡zŞ¡¹QsŒ=܄  >mYH6â‹l¸w^Û•¶¤÷QÀ(Ş@®ùş|N>YúR+›²Ì–¯¾´HaÛ#ñïÀo¶]©m׿~ÔeE”F8X柩2•Gß´¸ßÒœêJJWáıÄ(Šï‚Á¬Ü³|ÜQlGoß¾n¾o5)9g¦¬KàNò`Nv«éo¬bИ­Ù}¶m¨°¥òá[*@úÒu™C½œ1YB>¥ÑÆÍùNóx¢ şc~°~½ö,kÛg>çkÚÁÊŠÜhØ#¯©8zˆ`z^€`5[ØwÍ¥³êª…Õg¼|õŠr«×oâ¬*öÿz`ͫ׌; å® /·xÄèüVø!|0Uµ’8?8 {$™óÚdVw5®vË~™Š’¡Ôg+ÏcŸm÷Ùˆ4e÷ùEëŠø…mnŸï!yõÚ\6”dnÿ?÷ÉÑğnİØ•›±ÜZK¹M,»İ˜ {Ï»G^¡iÚ‹›[8åH°õámÆà pq;îrO‘·bXçZöXV“&E¼¼ú Ó>`¢íªÎ ;Ì{ÚoèT=¸eTûê‰Ñ©Êç¾#V §Ikâ'j˜GÑ|NÏIV3€T|;çOHì4M(â ÆGÚ9/Ù5n±ìé&y ˜Ly~ R{éf&%óp@ÇiTRÇ%ªµ ı"£F`»Äê¾kİXVè5»-›§‹¡ ê àqZ‘¹c7:·_¡¸È³¾Ëğvdœ'—ÄM ]4jíhI=ãMµ<Üj©2²4Yb˜[`’Æ‚V¸50](\EBÅÅe‹@ñö5Ã÷³ÛÍ„æMOİL¥¡ ñ :­>Œë‘ Ò…÷Ïȃ¨ŞØ9ñаu&A¥e«QÖ½UŸ•¾«ıUş[“¾~At³%ª`倿ëJ»; ïAà—ıK§²í¬m ïg¹ß›åw”GvÖá•OQ¶oO§d%eÏ«”_Løî¾uÅ’"’VğnkÔüF1õ7Mn“{“MÎû[öAô$̃»w¿¬xGo„jå»ú2WËğú(mÎÆ¡Ş;8æ×\¤Şûä›+å@%EPlÏhl"åÂu¬ÀüİÃ3ÈBİÈŸP’ÇŞ Ÿ_&2jÁ·G ”bEH\îî~À—mwı‹ÅŞø%>cê´-¨¿Ú#Ì(33v܈·+ïк«B¯å¢¦Õó—‰_F8tÕ¬ñ§Qkà6Ì«y/NJFşÄ¸BòøkC€L® `²v.ƒæR¦=irşüÛĽGõæoN¢C“?³óòb–ãtÇ#ûoo³ e2Ásñ…¯÷[p]êÆ´”Ğî˜ R#ŒŞ–€wæOßÙ9@?m”¬´ƒØ”ÏvCRü`(ÅTDî 9âÀepÚ§ŸÄö‘b áuQÜQ‚—ì¸–Š“ŸôÃsZ÷8i-ËÛÃ34Ï}UØ“%¤¼]JD•>ˆûƒªÀ'QÏ»,Êè^(b<ÏÎ?rTpjeşç<¬›óèÁ1pmÊZ~? ×óg¶*ܼÇZÿ¾¤õxËʨïr®Ák®I¿mª¹`¹e|OG,{97sö¶ƒ¥9ߦ!†Ò2ãÙwQát* zGòpCÔÙ`–«$]p PBН2’­ë„ÅÊHláfQùö½ºäe÷²ÔÅÀ!F¾šÀH¬–®r’€Ó]KeâŸå†'œÃHnN_²eØ“—î%*äU±Z£¢Gí[3•ÎÚ§”u`ö"+à„è „ÈÀ,í@Dÿ¢­K§8©u!ª³HÆ(UßÛqGaáѯ‡fZtÜ\“ºAV©±Ä`ş§\!Ê“–)óØ-µéˆz3-UÚúT‘"§HŸò?ê¾/’#Îí+ìNyqW7ú‡å8rÿÀ)Qİ84›¦nyÈŠl©MFÙ,—"\»‡68=×iİ?[ëEYÙ…~C†?lÈ%Áj3oæ»êo Ù@?¿W°‘8ùırÚuû'6P¤ãÉf惓R ä-yªĞ¿˜4Ì·ÀÇ÷µû¿gÑ£LWˆíq|Á~`ï8î+S rHÌIØöUK訦iÕ ‘¾Ï —D¨Âäòümë[榀RFSà ±Œ«Ûß;gàÓd’:İ®kXOFG.ê‹Y´e)«ô¤4y亿é&@Õæß ñğU+*ć•>•µ5ì±ZúœȯRZ{:¤(ú«×äTi¹AÔÕ+syjµB6Fõ Ö endstream endobj 2313 0 obj << /Length1 1830 /Length2 11581 /Length3 0 /Length 12718 /Filter /FlateDecode >> stream xÚôPÚÒ€‹âw·!Áİİ‚»ûƒ îîîîÁ]ƒ;„àî. Á‚ÃeË9{Ÿÿ½ª{kªfækﵺ%¹²£¨¹½)PÊìÂÈÊÄÂWPee°°°3±°°!RRªƒ\l‹)5NÎ {0ß¿ Ä€&.o2 —7;{0@ÎÕÀÊ`åâcåæca°±°ğşÇĞŞ‰ aâ2(0äìÁ@gDJq{O'¥•Ë[šÿüИÑXyy¹ştˆÚ@f&`€‚‰‹Ğî-£™‰-@ÍŞ tñüŸ4V..|ÌÌîîîL&vÎLöN–B´ w‹@è tršşh hbü«3&DJ€ºÈù/¹š½…‹»‰ğ&°™ÁÎo®`s à-9@MV äÿe,ÿ—àï³°2±ş7Üߪÿt613³·s0{‚À– - $%ÏäâáÂ0›ÿahbëlÿæoâf²51}3ø³r€”¨ Àä­Á¿Ûs6s9¸839ƒlÿh‘ù0o§, 6··³‚]œÿ¨Oä4{;vOæ¿nÖlïöş,@`s‹?š0wu`Öƒ]²›¼‰ÿ‘Y]œ,,,ܼ #èafÅüGxuOàŸJÖ?Äoøz;Ø;,Şšú‚,€o?ˆŞÎ&n@€‹“+Ğ×ûߊÿ%DVV€9ÈÌ` ´ÿ‰ş&ZüÅo—ïòè±¼Í+€åÏÿ¼—¹=ØÖóó?ï—YJY\FW‰ş¯ÿ«³÷x3²sÙ8Y¼<<nN€ïÿFùoÿÿéıO©² èïÚXş ( ¶°ğşÕÂÛÙı§ ·¿§‚æï¡üoEû·Qhş™|}N³·/ÖÿÏóÿ§Ëÿ¿±ÿ#ÊÿÛäÿß‚¤\mmÿTÓü©ÿÿQ›Øl=ÿ6x›dW—·­P°Û ğÿ5ÕşµÉ @s«İÿÕʺ˜¼m‡(ØÒö¿Çr–yÍ•A.fVĞná-¼- T¶wıñÖYYXşîmßÌlŞŞç·»úS|[§ÿM) 6³7ÿcïØ8¹&NN&ˆ,oãÅÆÉ ğf}[Ps ÇŸ“ `fÛ»¼¹ŞÚóXØ;!şq£\Üfñ?D7+€Yúb0ËşCf¹ˆÀüñz‹¢ğ_âa0«şCoQÔş¡·(êÿ%Ş7?“ˆÀlúñ˜ÍşKœ ³ù¿ğ­Rà¿ğ-¥Å¿ğ-‹Õ¿ğ­XĞ¿ğ-«Í¿ğ-­í¿ğ-¯İ?Èú–ü_ä|s¿]Ì¿ôo…Øÿ9ŞœíÿGıV˜Ã?j®7zzûuÂúV«Ó¿ğ­Vçᛇ˿ğ-¿ë?Èö–ÜóOüŸ¡0surz{,ÿ\Û·‰ùÿù2@3Äå{3şëúλZQ"wÆıo‚³”ûZ´ŒŞËN]®¨ğ©´59A›N¿ESGûĞ×v%inDVȽOÛáÃÛ“U:}ŒU§÷;—¾ãM•œŠ6 ’ 3ª‹ø<;úhÚ@·AvËQ8ºò *aݹH{4 V¬N„-ì«Ôp}Dzª˜aŒÕˆÑ,›£,4ÍÇçÂHòó—ÚÜÍïYÌü©W2¹DzDß³XöRoİ-¶¸ûy¯õJu6ç ]|è̉i*o±£49¼EïÏ¥›Néó¸]“Ûv)¬¶G4^ûŠªwNÇ—†T”S|4øÌĞØ²Ñ1›í2IveäIp¹¿Öä6=d/¹ÛL”’@¯J¶Ü œªH¼û½ù ^Gğ48õÚtáªV8© dà~ÎpÈü*Ôˆâ}Ëá§X¼ ıa³õ±uì¦V^TcI’¶®€Ëœz÷ÀãuuòÑ5Ù¹ 9¯™·ã]:[ì_×fÙöCİ“Îæv†©”MMA‚Gµí©ùHôDѸ ¹$®¿yÛˆ` c?¤æd´±7)# ÔïŸ"Ñf×u º#ŞE ìbWhT¼ŠÖTğä`” ÈÀÇÇİ·@…oOºâJßæ“ØÀ ß–‹ˆ{¡ +ºÒªê»šüzunPÌÈ"ÀTa©&††¬h›‚¥›§” >[ÇIdÈÛØıÂWö±Öç§bPÈ«w$`%< bA’a“ ïѱ O¨ËšÅ0İã4­^eğ…Z»ÿø‡ÿqhd'ˆy”ŸÀSwTùÆ¥f· WèµniÍá”5PM³Ò7~˜ïSÏF…É•9‹ÕÀ¢·¿¿€Ü<›û‰ü´‡0œPKÎ!?è ´‘sÄû`b"^é «€¿©Ws´ìjÓø(¡æİ_ äú!ğäIé¢oº)‰BwÜ©Y œ¯ %ÜŠ›còĞs˜¤ÕÀºç?K’p½f³™rÕ¢“®ÉhÃVF[b~º=+ÏZ|`•ı d´ï¼^Ò10"ukéZÛ¿û×tËz•Ş.ìî59©ğ×#J¾òZê‡İx*6.oc‹+´H¼Û©'tøX̳å‰Â—)ıEøÊ+Ô Ò:aͬÏ3x3ÙÚÀŸfD Oc‘{3ÑÓ¹×ú„U2¨p³9 tæhÓ_Jè #íT¨±x¹¶—d¹áŠLxö©%r ¦ß“i³_ŒµfİÓŸL™¯ˆ§aÏ 'Y–™x6Ÿ‹~ªŸ6Ük©0†‹¿áÅÍâd:¥ÒÇ|•ƒõ¨Aæë->X›:×ñU=œ²Şçõ«ù~ìrl«ñ€ãE^a@î$ü(LgA¶yç“0ÿ{š¦HòZºw¨[¶l“íçuü±5X¬ô[¨cW./¦A4Ÿ6ï[Æ—p½¸Jì,È~ÁgXÏóX|·”_­ªù·­—XTÃ,ퟱ‚¨Ó·²Ëëy°R§]d_E=è&Š)¶É×,ÉT¡ñeÔ ˆ¿ğ«öjBüĞØ 8&·ı«°\9Íf‰¥t´Ê„ª>ÀŒÿĞì>•ìO+Ü]*şn³ MÓ›ÛpÇ&;¯üF¿Ò Q±'…î e9Vš¸çSÉÖ²OvÒ\?i„FÉ«ÙdõfÑêègÛ9ÿíd®«,.X=¶åͦïù ¤dº[n×Y;¶Ê>”´šÃ­¨v¿Ú¿ä’`b Ruš Vâ^ËÅõ;g„‘OÔ'eÂzÆù/úx«År 4楋¥Çs[ËŞÂâ…Œd°¥>7˜`G>•Q"¿fˆps ‰¼BàœpĞ$w2 BşL’çÍXQ;TÎìÒ{¤ºMjû†Õ GO`H/°cHğ¥6Ç7Îæ'ĞQµq\8,9íxÄ>ms¡I ⠭вmD.ÔŒ&âöÉÄm á&|WšyEÚ§7¯"u/Ÿà Z|¢Ü¢œ’Ͱy7•qhöòlx:àkøS+¸‡e˜“‹[8ÒUWdğ;8¿VÍÀ-ìk4á,2HûLÒ­Ç„@cUF™í;D¢â+ª!×#§ª‚ÅJ ޤğ÷™¿µ£„Rïš²©İ~wìäZ«#¢jqı¦eL)Lˆ¦ÂCrí.ÍnIğÂ߉d^ ׺f;f0IØÆöŒœ¬±}uãÚõ“!¾MI8¨£~C­z3Lh=‘o¿ÀJ¢Pö•‰§‡ø•̧ôÒÄêÂ6²øjúp&7w=£ñğ2LM•‚Û&ü É ®OC(•ó@Ì7äj.mòË`ó©p½dwŒ½@0Mˆùr\ºıœ=Ùm™QèYŠ=ê®ÀzGTDñ0J/i¸‡B‚l·!b×u•…¹„ú‰îú=òL¿õ@ËVP2ÈG‰éP’×İT ªİyP Ş+a{!k¤‘¼)‹ÍòTÉÂ6×gô­ÕISx3§ ²¶ËÕD-BVTÑ÷›`í¢‰ Ö&ÈPpbàG’^%qF\EÑòmA^õ9±›à² Ÿ’“Zì$ ÁvD©åPiáxk-@Tí½¢T n ”51§gj™!¢ì³&/qæ{&ò41#·/Ài¶ïÖ”]/—µõ_å¢ÓJù’}FV&:ˆk `„{:÷K#´ë÷³ş•’“ôNÊXs@ùñ×:¼>µNÑkİ ¨|¬X’ȈŸL^*øœ®AÔ 'n´íæ•N?p #@3Rsÿ³^T1¾^rP€’ª+° ïIh_z` ©Ô â¡ÆZy¼†ÁZë00Wu¥Ú•»Ñå¬ãÎÚÎ1,*‹=Ÿ|í¯SRÈ)a,áİØu€‡¼“‚°Á æó½†Fæ“Ò¿Ÿïêg´VŒ;s¡¨Âwc¨i÷(d–í_áa!m5ìİJŸ£òé1Ş«Pz P|Ö€€thÁ‘ãR•Nÿ=Ö¸6îf·±×€Gysßß‘ß0ƒmP)¨,îò´fĶ6÷²ï.)Æ|QɈ9Å赨Ø[¿fÛ¨-é-8rOÆQayDMOr”rGÿàoùP>RÄiã7Ï÷Ò•+áîğş ¿õE­(ÌCÂ7c5UıfÔ:¦wÅ-¼gñºD›}O¬/~®2ixP§¹nh›Ì²x¤H–üGÉ, „ŞKIRì$ɱÁjî2`_‰:–ğ§×7{&%ÁŸsDÙ…%Ç1©¢ç‹¡BnÂî¦ÃšMiø(]~¦oÓ ¡htš\L¨&'<7rO¤3lm3Ïı2tâç&ä[ú…&¤’£¸(­ ‚®Ü¼ÍI´Lsô›5BÉd™“™¢otÕêš-õòÉVŸhÜÕ”UØ­± Û,áêß0;¬^1HÏQåœtct¯¦ÛW@[Џ¿Jc Ò,ú„ Ş+ ’³- È=%QıòŞ“ùĞÈa…D Y@d9è׉Èó•q!nñ$´k[äÆ÷,ÿ)òW=NI!='D¹ª.ÈøÜa.¢ĞØ+Æû…:;'Â9ò‡>+ qOà§€Ëb¯bÖrïĦ­¬ IÁºsn¿à¹3­vbgï· «Ü·ŠrºØÅÚîry½Ì–Xg:3Ë‘%?; ·Ïâ<ëcÃX!a((¼êº"ñ†ÁCĞe! n‡–/lÍ©A*ò_¸ëKzPZpÍEiU z_­„WôìB„?œy§³0À¸Û{5\f·¬½“İqU“A£>ƒlø‡7¨©UC®Í5ÌÒî¸bö÷u¾óœÌÍúA³êËËù£‹¥gÏy9#bîÖ6òàï°Öy¸XÅ3B¿OüR¢€6j³ÇN!’’f·`¢>KF´»÷ûÄ%·ƒxeA±|f©œXËÍoŒ›lU¿ûb»W.şà¸*7åZ,éš§İ}e|J´z Êx%—@ÿø¶ı]|[‹NQøBL¡Ñ…üĞí&2ßf‘£©–úİWØò+-lªÃÏ´°î¿-ÔfÅ,<ÒâQŒ&°€Œ2ËÅr½Ü`Ή ć Ìè§cÚCaé‚Ç÷ˆXÚ:Ãn õ'G^àì‡ÈV¯â®ìÚ5ËJÕõ:¯àŠ—LBΩâV¾.·|¤/`:v1jša øÔ§L»rõ½,ωnc›C+Ôa‘¢‰XÛ„1¦ùótX$Ñ ?&ŒĞq¥ ³ÑÄXiÂÇq7Ò<¶pcûû1!ôl;Åö ó•ÏŒ‚êC £q ÑV r9?׃Ï`~¿¥ßeÀ­ÀµB¯Îö’ƾsùn.Ğ’0ÓVíÌ=¹¥µw!„> ÆßáÚ|¥AÛ;^BÛ• »(O©Ô”M X…²I\\¼Û©®j{𴉥K‚Õ0SõUq á <Ó%g·Ñ³û 3û‚‰¬§ÔyYñÏ•“Ëœjš—¯ Ô}¦]Y2½¶´¢Ôk’¡¯ÀDë„Á36Ù÷Ù/±ï€s± G±ówd¢Å R¹K6̦ú7»Gõn²ë·£P-HĞ…*˜˜W¹us'W6wÎiEVBÍYÆ¡‰ù&±åʵ4~Ö”ÊÕa­#£BhˆMÒZ¶©òÓÂP™¹á{M¿î?ı†YO,§ê²r½ ê"… £@ Š£|ˆã5ÓWF~/Mó~yp§âşù¦)lû v´§;uÂ+†8&?ş}ò^Q+öJkp…æLTfÒÍ AS,«ôJş­ŒGÔZç±zıäÌ—QHçÆ~µ¸/½â õ|ˆAм¼@38ÕYo/ñ:èğvaO¥vµ¦ú-õÆOÆï—C6‰96l¢ÙBûTÄÁ†õëGª^Ó‚‘Çi´w–Ö¢ëÉÔá¦bÊæ5»¥†3q ³ähı…nóûvKHrä‰utÕuÌjõP#}P‚ ¼¾Ú$z«ªìÛ¢lôŠÁæ§ïwÜ ¤¸$o’ôΙР¿Íê**I‘ìö’YáãÄûaşúx(Ä9ÍÄIóqûgVˆ>,˜£Ãs^ä3ÎlnÜw±ùŸz:d­)7•$ŒÆO1©‘)‰“‰ä¥eŒ>å7ªš N\æÖ±·_Ü«„ùíU±?h(™Œ™~_¢¸ô$#ã_ŒøGäınŒ³î[ĞÀ^Ó«@ÕÜ­€à{»=ì ¥Z¨—å0|÷>w%W:Åá;T³¨ÜÌWÍâ¹^ŞJ™>GZ¶Ñ’) ö‹¢o——‹şóÙ×EÁLjYpô#x"Th]Q‰úÓ=¹¦Z›…äEŠ¥Ë8&ı?Y’,â;mã×Á³ˆ’±ÈğGâN|µW$ûsg*è0‚Å{‰GØ;¹ZMDи<ޤ‰vâK-ü-*./D»¹zÕQº›˜ÖCY>:Ğ*d#â8ºÀ©¥Ÿxö{û¡.Aª9:<³§Ûe¯ ª»µš$ÒÁDFø‘,»? M?İà!¹ÅMâËDãğiL»[8AJìğ(Ñ`¢v-&¹…ŞeølR9mšş†nqU7sh9o´‚$*NùT²Û6“eµÃÅUhÔʰÇrã´r9'˜y|j–bWPKtšl²ó™»_ö iáLˆ±šèˆòÄu\._ezFEĞ;$$‚ÚÛ3¨Åg•¾ Fy‡J‹)Á _ûhÁÓác˨1‚/¯“z:Å"!SÒí}Û¤ÉÖ&'¬•Ÿ”J캡'¾¸Ê¹½ıì/òÆß—nñª]ğ—øYì¶&Sÿ²ùª c§™XÓÓï%.VÂÿZæœ]Nı½»­ñªQìY)¸HÈHz6ƒX )Y Ï&Sq;³Úʾ˜ÍÏÏ˳iğm]2_RJtÙI…™BÅ×ѱÁs„Q…*a\t¡, ÍuØóVJüº˜ŞòŠÁéH;‘Xó®ÒÅ&ʾÀG©×Í£6Ò\ßûê—¤,¨1ÊZ÷¢Ïózù$eW û¿tËÑ@Pƒá¥èùŸªî,ƒ?\S>zÑ1Ô D¥tQ$ıI?!·üHVTönj<‹ñÊ«T¬AÿjĞ`(è€Ä}IÔ}#c”¶Ú[Á¨ÛÌS}ã=R$‘HbòJ­E…™+f}Va¦£$FàFÉüÆF-NNY²ó“°ˆ0¬Ÿs^Ä:¹Ì• @.w¼†³ûİäÆÑöè¯iüG2sß.7z šS–-÷¯$†™²¶´nå33>¯S÷‹Ÿ4ȬڲH B8~QòqÖYOzEI2 ÛŠˆÛÉ1¼w.óMŠNH¶ÌDy»§ËÒïr;•›-›ÎoVÊ¿Xï.{.~„vk¤ÇMåWÜiÉoø(C”å3ã˜ØZş\ù´éØËİ5 D´Dıɘ'×ÌiE¥B{Ş”_wø1õârÆ/†_Ó®ën*†;dĪw±åìœ[gïş®ªõIŸ^òÆÖ±€|Ä‚D£Œß½ BãüÒÅT€ÀºãBQ/Eêá#À?Öº+É:¦ßʿަ"Ø©ÃØQç‹Àׯwf’Ğfº•aJz·fƒfëÕqGÉÙëÒØ˜Ì$-]­-şô›*Öã¿ü=,beè‹Ûj¤æd6º´§a:ú£è`?j½ÌÌÁ¿ûª+V C»Šø¢ƒ†”PÔ³o7Î<È l¦ÛŞãY[ºÅFª×3cdjNZA¢LÅ ¦f#(=éËs²s)ÌÛˆÓÓ¾‘ÚkhQŸ|îÒ¯i ÄZŸæ ûWàQ…‹–_ÁÆ/yjsÓÈ$I^ğyOÑQàêû‰ev–$uø‘äñ”&°Xmµï‚'^gãæv¬ãOËNµ4@êÆ­[¨”œÎãÔ ©*¢ÜùˆóZ v>ÊYÎÑä=mm®äÛNêœvLÒ˜Éh*Ä2·HÎògyqĞÏ‹lˆHi ~GF[gc|Ä«Nì„oÃkÎ V‹ˆ·ZUSAmÆïkGÏ¡·Æ¬ÊRşÒµ:ÒƒŸ8–²w‹¡ 3˜q«!7YM¹(SFQ<.¬ÓËJH8x7Sù»Á§Ïì ã«ğ?A(öû_{-îxb;k_Á‡KMïÕ^)5Ùœ® 1¾¼=‰~a¤âŒœ¢¸½ƒ  ª¥ÕVãfZÔ¯¦¯ª¦ïìÈSåƒ÷@ F(ï¶H(3g‹™–´ÃÉH)«|OÁÆa\F‚Iu³™_äßܨÔÈFİ6B1Ø„ä’ÆóˆÔzë11şŠ8 …¼ II<ëé瘣ëì¹V¶j@RV!²œ ÄMÊöZîñT[Ûª>’¶wNHñ«Í©4Yè?ÂXa[5â¿Ê|zNÓÌÉñÃK>83ÉšŞ:ȥ侙.£Ü;°Îtê(õ™‹ÅëşíNÁ_À•ª(šÌ9´z¸ºöJÙü ÓäÕvEs/z}]Ûd‹àªx±±}TX™ËZ?(+™2,d~}ÇÀ¡5Ûê¦AÅÎbX«şÒ Pğë²ñ‘㳄r.#EÂVşv<=vÚÆDIo2}IÒÜ íN7óZ”­œÍÛÓqà=a.£Wbk÷˘¹Š¥6x~üYÁÔO…·€ÂœÊ_òÎ{½Bº5¦/œy5‡ÜÊWıøÖ„_(öáåU±}ûÆPé“ÒY¢ƒ"ˆà¢yeË}„Œy¦Ê‘²Û…ÎE7½äìã5¡ RÁÏ^×Öƒ)µSıÊ—¯—Lé #J-×°<>ÑÊõã꯹}……«sAYçx0Ni†\Ó¬›†2Iö-¦†,±‰R©yÖÍ+圷ºT”âK‰^K#£’,÷ÁñÜRäà“9Ä_YÂ"ú ˜qùjWb(ã"O}ÊïÖ1å^å“õf|ººª×”3cÛ2{—?[ìAŸ1ÁBıh´ÉÀy”«[u0ë•!ܤí³dd ¬ûÈ81&*ÇT{I^c¥ì—|öW1[Sø›ä|“¬š¢şdP³¶]Ö3ªèò00G@y7£™ø'9İh&yèİ‘$¬Ì”®,5Ú«›•æox$íV«ãõŞ¢à%¢Ê£K°Ï zmé¥U 5Î…‰ê{5cµƒ<§‹diR~ØF ÄÅ*°>úß– ä |ƒ†õ±Y^Mıˆàª°ü-_ 6gÇË,]YÀïÙ«•.Pl‹˜ÜJ#\¨¬|û&„O\&‰\Ñ2»Ç!•1·5Öm¾y ¢kÙÕ„¬§ ùúw|FXZ¹&–zşüSb·üó€Ó¬D Iôõï"ªIYœk6 ûò‰ Xµ^ëP“qËiWí!ã^cŸRâÁ, ?f±.¡XØ¿í檹‹J ¨¯ıãäš±‹ÊseW“˸j {«>â˜6ó±“9 Ë i&7¯yuúôUØ…ÂÈçFG–¿lˆìOVﯸ4 ïı¬?ˆ?%‘Çh\ı¸œwfí˜ …Ş AoÄõÚc¬öLULÒªtÆ|ô¿R«¦bù)’»—ñPÃéï)8ì³qØ“|õlµ·ñjy_ô+=š´mäLJ½&?‚yHNñBs›lleÜîˆ[M¾á,ñóöòÄ`õUæ ¿¡b ±cæ8µ™a•PEÆr%œÇy«b»: èÿÓ,1”QUãXÔj³& hÿOê9Ñ~mşhw q~JÏm—‚ÙÃê%Y6Ï“K.R±urC‹İ¡{„ÀAi@U0à½?VŸ6Œò¸¦Øyë+Á×â}Ï·…š­.·‚T¸ÑòÙ·\:˜ûPCjÓ½÷ÇÈZ ä\ßçãíë1õè‰LnU§ŸdŸÚ›Ê¦Ä¼è÷B©öî·x¾f¢m–IP\§Æ aDÕÍÙ_©¦³kÜ•²Y’ó¥‹uÖéâ}·È“ş¨*¥†.¤IÇdìOı¿mŠtyÍ`Î Z—Ø2ÔDŒfê6DxFîñ1ÊÒØå~û­úS*øşìtÖyOoL{’]ÚŒéÖB¢i‘su°|ˆİЏlË ÷;ß$x)Ô÷nõ;öÏD¦ÍP »Ği±Šàâ™ÔÍÓœ™i˜ö)±`#Ãü¡W‹mıÆme\Y»È†¹Vx«ŞÈÙ(¶5-£lØG¼×ξŸ)œ÷x-âÍ«ÉU|θ,||Úõñ…?· .cYàåHD'ëÚ6.Væ=¥³ÆPEµi8¿Vg=<ì¼I¼Ñ¦ıè\V씄†F©ø!‡+slsÊZ­KË£¾ˆsqşŞXÂèm0µ‡´×øWêYç$F2æ•YĞw-ïåöúÔ¹¨XƱ‰à‡ S·4}´Pïİ&b¾ÌáÁâÃ[å°û¥2Ş û{%Á«¡mšü}EwËkBŠ(—³îRçU´’ªàÔÛp••Éc¦Û¦+"ú`™÷Zƒâ¡+ªM%äz¦–~¼ˆk±%Ö”$š§ÖœÈ“ uŞO!C^™aCÉŞ‰P9¢İ÷ pt âe`'v%–ã'èXáow2_„”rødû·É¶9”¤'ª‰†¬ÜphAæ7½@k .-ÀÖQêõØ–şğĞu˜ˆcÅ[ƒÉ´ÜMbߦèãsÕ|•£C^¢LdàTLGKÍ•â'dİ ¹^©/ YØEŞQo+áO‚—ãv¢ıs…¿C·<€¤ø<¥JÄ'-,¢ŞGÄŸUÇÄ*»Q†pØ9_X&T×M|xé$oO%‚•”0ı©0W¯PÓÖÑbC™8»_xá‹È‰ƒ™[M“RÑb«OÔîó¤”)$“GAêDÚi{âö°‹1x²û™B‡¯½ŸzO/–r+°¾HözÂ<–S3)U&AGsfè;$Ha"DRÜd>„‡¤~Ê]*“ÎMûܤğªNG vùñî&jÂV êçÈy#J•Wm$Şc¾ß’:³gp‰$©·ĞÄ%ÁRÀ6ÅVKöÀ ¥&Štü ÏϨB Tè¶•˜·£NX{¡,‡Œ‚ñÍ9q5cF2¼£E‡Ê`ş[õŞà*eõç [ÉÈ Ÿë7)‚â0AcrÔ-ı©œµ¡ 6ÊqqGÿ ŠÜ¨¬úÅ&‡&Cå <ÈÖmƒ!ïq½oï´Õ±1NØ6Z˜İ~ÌŠ»SzJAş¾áÚgÉŠÙÁ¡3ÍQÖ¨Û“Õ¡ÖxR…¦RÛ ë¦a+ú€›2ï·©Öß²Œ¡¬TC>M¢Ì·Y{ÜTX?º½î[šb>ö ìP ëú>Ó¥3hŒ5v†±ÓôÓÔî™*d+ÅÃ;ÏBEY]°—ºqRç06±½5˜¤aO:T_«À–‡ü-?ˆé;gš.¨±\ô­»È@tPR-C©Í¶N€CîrµŞ!¸àêº:¡sx|6ëÁ™c êÌ4^mİKrû’—OnM,mv®õ©ÀJ.»iìõV‚¦à<û¾~Âô, ä/‰ÓÍPíò|Wıİ­íú¼.Øq$´o²‡â6Cfnó;`ş6£7·ªùcÉš²œtZåyçÏ â ¥Æ‡ ¿åO)a!é´ûBd뙵’¦5Ïç‰K0mëϸ3¸¢Y‚‡ÎT¨.=|“Òè¡û$6!Ä~Ûõ×ú°øÓTlò¬)È.¹´«±7½Qc~®MŞGşŸÓß—UİÒ^x¨èéàB‰ Š «³hLãG8Í ¿ÊÖ F…ğ6¦`Í:LHÜ´É 4ùûÔ¿4ÍúÔ·Êä „a§¹ô(¿»¦ÖX¯‚dLØÑ˜°ôͳ¥]i9ÏP mLLΡƒ´½1¬kÆè•—6?Şc5¢6¹œ²}ú݉YBXE×NV<ıùŒôœ=Ê~‡sOuºšvÚN$èc]¶p ïy)¤Êô('܆\âCã&A¡ğpÙyªĞşE—ğır_"å–)Õ¼˜ŒÂ(·ÍøÉ‡óì]*K y»DrYâxnV­¤B`àØ!2 é‘ÀÄÑH€]dBy† Î=.ád§¿ãÈÙíÎ{D¬)iIº&U+³!ŒˆAØ;Ê´~xRA•éÏ4Æ\ȽŸ|§ñ?ÎÎÕ9¼[ûué«å endstream endobj 2315 0 obj << /Length1 1595 /Length2 8537 /Length3 0 /Length 9579 /Filter /FlateDecode >> stream xÚ¶TTß6ŒtIw„4 Ò’CJÃà İİ)‚4Ò"t R’Ò‚tˆ’Ò õ¢¿şßZï»f­;÷ÙûÙûœ½Ï³Ïº¬´@<2VHK¨"áÊÃÏ È©ëğ €@A^ P—•Uæ ‡şiÆeÕ‡:»À±䜡`×;›<Øõ§DTİà~Aÿc1~a1  ŠşED:‹äÁî0+€:/@‰€ºà²Ê!½œa6¶®wËüõ `‡pøEE…¹‡d Î0P»ÚBîV„€áƒºzı'»¸­««£Ÿ‡‡/ØÁ…él#ÉÁ ğ€¹Út .Pgw¨àWÁ °ôÊxqYº¶0—?ì ¤µ«Ø ¸3Àa(Âå. auÜ-©<h:BŸşAàüÙ?/ÿßéşŒş•†ø †@`„ a°†Á¡Mŧ¼®®Ü0Âê wAŞÅƒİÁ08Øòğ{ç`€¢Œ6|WàŸå¹@œa®.¼.0ø¯ù~¥¹ë²ÂJéàE¸ºàşÚŸ<Ì ¹k»ß'k@z |şÖ0„•õ¯"¬Üùô0'7¨ŠüŸ”;î?6¨+@ ‹  N¨'Ä–ïWz]/Gèo'ÿ/ó]~>HG€õ]P?˜5ôî×Çì¸:»Aı|şíø/ÂåçXÁ ®K¨ ûOö;3Ôú|wøÎ0O€1ğN{üà¯ßßo¦wò²B"à^ÿĞŸ/Ÿ®¶²>×ÿí“•Ez|x<B@€è#!€ğ#Q€ß³ü]ÿ_µÿ¶jaî øOB„5 úG w½û« ÷?UÁşçÄpş»‚òNÊPû?Ê7 !wşÿgıÿùÿ“ı¯,ÿ7åÿï†İàğßnößşÿìƒ{ıI¸S²›ëİT¨#ïfñ¿T蓬µ‚¹9ü¯WÅ|72øßm„¹(Â<¡VZ0WˆíúëîÒÃa¨Òöë®ğğÿã»›7ˆıİ}ârwV¿]Ğ»qúï’ Òê×Ü =€Á^¸À;y  |øïÔ êù[Ù>^Òõ.pWÀéŒûëD……|ê¿L¿‘ˆ€Oç$àıDï˜à(€ò7â¿Ó+ôox·¾?úôá.³õ?„_éæü/ÿ#Ÿí¿ €ş/x·šÃ?àCü ŞÅş+ÕİDğ¹ı†ÿéÄÍÙùîù­å»6ş…_WP¨'‚;;„< µ« }w^%CëÁ³1"1ÁºaÆÁã3ëÜæö“+™ãí«à%çS™ä]Dók ì'ÒsŒ×>ÛÍuX-/µ[/}¯ÌtÆ6Zq?¢è}½-SÛCCÇ£+ıÕ÷ÚÉW?È­ùŞ{UÖ\'7­|Òsn%ÏÚÒ/CáÓÚ_ß>Vû*ç‰Ó‹5 *šdͳ̚¢bÂtå¡Çæ$ùáI8yr:A’3z˨šÀ…ë·'XèólYàùÅ”÷B¹®€K5 õ3*z´’¡±‡>²ßRT)g|ŠßÄ5ñ ä_«f™îDá~V}Àn¶øÁÇnD­K~çt9ú¡'4¼mğëY &öoÅwruØ1_ ÂŒ”<;%Z´éI‰y!¨DÏNßûO¹íªePÀ,ïÛ›£Ÿ“;§’᲋é?Ë.}áÇíæ úüº³ı‡M¾BO”ó‘zY#b#‚­%­ ©d¥¹ü\"Œ/ZéÂí„ ™_S%-ḇßµR“Ä=!p?VÔU_½Õ/,VWF]a^Ÿóz¦Ô–9ˆ} [e¸’zægcï$š¥LB¹sŸ"áħâšOÆ'ò\ò<\'l÷‚,¥ëášÁÔÖÉ£ o§œ«¶ãï–EÔÓ«x¤8ŞHÏ–™şa$¨OùÍ=£o¬òZ…÷*ì ùi!R¯ÆT]ñC÷ÕÒV_‹A{lÈ·ní£e¶Å"5&íãŸÄìV?éTtDQ¤Å9J§¯ n¸Cé:@±/Ïë¸rlÀ#s:{L/Å8(fqĞM¬ÔÒ”w™Ë `‘öx¾U€Ñ›ğ*Øì×ímfDi¹l>As°©~ûîUïŞœ§(>=é¸Ã/ŸÅæ…´u³â3Aæ*ø  ™Û¨ë•²*…õYç‹Êª_u®^%Y>ê»ó¯6› mZ;‘.£1MşA‡ÑŞ%¦Œh Sğ£“^¼ë— >ÑJıgÑ„î³<’ï‹’‘ô]‘øK7aÅ@ˆÒM‡MUi–¨Ÿ·ÕIà<ÂÍ=øìû1à|¿è$C€B£3|¢`e½ïB•5%¿ˆMJ4Êããe–¬İB–´æ@GÈèñB‰@!`_¬í[®/X‡Ù<ù‰¢·¹ŠGîÀgë@é˯ËW¬â©ñoÛLÃUªF{h/ÅŒ¸x<MR¦"ÑäUgB­Îs—%=©ìY‘ä°.JA˜úYÅGÉÎÕÒÀnÚ9‚IÓ¤ÊvO’b]İèd4BA~äëa%ùTf¯ïµ’øˆ¤‚YGËÍÕªÌge°ÁòO^™®™ÅuGRJÚç?׫õ•8~‡4ï[póöŞ€õ¹š`5[,' -xhç…=±À›'ZWò‚™Ò¾®Êa4ãtŸ\MÉì;õ¤³³…­MÔå÷° Foíƒ K«y8lË)óKÓ*jJâáé²™V7îSçæêEu¦IñWÍg:c¦”dÚN÷ ?¶&{év-ö†¬î¹>8ô±íçÂâ仺,Jhhë%Td-$¶ÍØ¥]¶ãÖôœˆh<™OÓu‹lškWû ­ìÇvd¨¢WˆïèOY|?0q:¹³äºw¼Ùzê8?J«¾ät‰(ïÚ1ˆˆ°zçDQ‡Á3[>G¹JèæÚ—Y0ør ›!,¶X¥Š~ïm—¢ıü3z¡é9åòo&¾/v‘èXg[Lú78ó{C ^ÕåÃuÓËğjçB•> ÍëN…ì§®ÛŸc Ï|˜äÉ{sÓvS¯i)ËQ¦7&g­ Â[{_Å賸ڧ4ùf/,éN=©lõYôp˜,©µ#³më&1ÁÖûU5󥈓÷êǧ³¾zòÑ‹éeS1œÃ»œ=³?:ǵ<Ú³«œ¶ÈWbDFù t©É…ÛtBeùÜÈğ=Î ‚Îü ôcª-!fg¶ò°­ÃºÎ÷ĞWŒºOŠ¿ğ·3L­É¨´«’jóT]¢/[¶êŸ  NÂtVöë{oü ‡ÖÑbEo™Ùh1MŠK² æğG¶ÊT…„ʪ0m¼Ñ„_Ù()WDʱ=Ÿ¸œ« ãåÉS_¦Æ¦&Œi•W]œ}fù¹6@iÒ“RóaëZpØÇ£Ş5‰e⪫™­û^XMtĞ/úfŠóQ{¡ŒA?cÆeØñî_nÈ¿aS-<’6”„¶Ş.ˆÔ Öm`Û3uÛ(Nç¶BÈH=¼Ûxšn“MØĞ 8–Qô©Ptޯ ^æw¯Œ)áÚ“^œ×P@&Šì’?ó)š¿ÅÁSÕK“6¤¿œšíî‚zË«ñË”ŠSZǽ/f«dĞ˃ˆ¹vøe ®ñıezİCPøzFÕS›éT¦f|0t&Æ‚vGE¸È$½¹ÏâŒSõ×õ†ômü|âçm „†·r9Mê{†Oט:$KÒòĞøaCı XêBæFcÁN¯“Ú/ HÊÅ÷av–-:c­£¹©eL#~¦T/‰C£=_w€Øf¼röÉ~Ì<ŒéFÌ l¸¾³Ã<Ô.MïîÖ°ì«VËM~X8Tñ{Ú2n¯øi«–±ôíeñ#ö§İô{I[1©¤9¼EåL”ÂÀxªşhdËx Tå’Ûs SC8àÃı4Ïï„ MI/¦ƒú4«íöè2‘ -õéŒã©£â:@?ãá̉<º€·+&ÍuĞ¢îä#Á1İܽ%Rô‰€Á~•MFM§£äÙŠy‹0¼ó'cpšWéÂ…ÍÔ% (ª°ø~šaãi-İ“Dy¥St!Æù{`çˆÁµŞø½E¼:»F{÷3°ë8RGâƒÊ'¡Rãf=‡õâ3÷X¾‹cÃÔèğïé*îÚ/ÓIxòÍê7y;8޽”0±Ñzõº<©ñÀ‹c§ˆ§?RÊ¸İæ=ë§—_b˜¢sşøÑğ‘/ŞOIÓFÄ.]Š mû ˜©=^¸¾(Ïn5©¹–+‡Ö9å ùæÌÙ’n~iè¢ó¢¶+%¢Úi$Ùwwøwlôj3£QaG,İ®%‹ü’a_Ab=÷«†ÇÒ g|U—,4ş)8`—~ÅEŞØˆğKtR¤ÿ±šƒÀ”®9!Y¿(¡¦rÿ¢¡õ„$xw2õâÏ‹w£•hÒšF¿`гi™¿-(8–u…!Ç Á1’Äèˆk5Å"Áô\Œ³G3ø]:Wü²1¸«S#K›Ö~¹l+Ü0;Şrjä%•µ\<8Û®^zEFíγ6göVZ8ÎC‹…Ô˜*%U§/S2fÊ–{ÂÒWŒYꊱÃ^¯=^H‚›8.Ô¾¨[vÔa=zÑtœ’UiE—ÅÈ?3æ“K8³#Ñ”by‰$­ÛîäÃ}³ /Àóª¦ÿäÙ"ò€¥µ#ßZ`ƒyB¦8ÂŞI!¢˜³óÓ©éöUdÉ¡ës$k³2×OŠQ‰}†‚a'­Y¦k©S’ôCıËGÆ;Œ¬æ©5”“qÜï§¹K²V葱æ‘pÑ%unt÷¼‰‘Á³ĞãWjÈyŠw=Ú_¢8­!µÕ÷‘ "EoÖ`<å~ÿâ¡ûdØÛnØ0²féDÁ¸BŞø Ó‚ ky÷#;B¯NúYc#z ,‰¨E %q÷ù[ÇÖÆFÇúùòôI‹Ì†ÙŠm ô1µµ•&Y’£Ä ¦¨z÷Ä׌½B+œéîÇf;–Ğo†UÅ^¢̯î}sˆÂ¤­)WPƒš×åÊ•>äğ¼eG `“_|NŒÌz—âÆ<-ìråªö¡€ ­?õ¢—Cq—C ƒá2%[z6šÈ³*4™5íc‡ı0ıf !yÉIRQD½²¢ó [¦N²{*W‡\ÔªŞQİr²):Gğ CU™,•¬LœFISï‘UÅ»Z+‘òt&Z+°ÎÆ2ÁU±T­†Ô~<áÔ3T›²Ò ¡j¸S M c÷Iì~¨ÔÔäÌä ªr|…aõ[¬yŞ!â!Îç´°On[•÷8šKewBÜ ¹q†ıí¢`‹¹Œ…}âo"§I¹)éMô|Ó%e+BˆvA !KÁ_0XìnõöØ€^7ëòòàq˜vy¦ô†º ¸C­gğ«Nô{·Ï$a§ììÃ÷<^ù ÄòOƒß½ qÓ‚•û m%?}ÁâÛy!x¹šâ%±tÜߟ7uåşì¥‚&fKÔG›•{*Tß ­c¿ ¬Vò9‰6Ø×-×ì@iÙ­<ª9¥´!áeòM`¶£ÕN|ĞıHJà±Æ«â1L9©úæe ü vú˜z+Eqñ^õ„•o'¾ïğ„uݬ- Š£­ kE·=AÑE»_¢wîk5ñ& L½]P’Ëí¦€$ k7sÃêúW¸QZƒ ”ÄDì3õ×i?É\ö,ğİÃ_íÑ~z4„a5#ß È–*7јOôü‚J¦‡‚Q/ˆ¬{®‚ŸŠ’µÍ8ğÕ—aªGÇÙV¹wÄÍ|<ıTg™ïMQ®]ïBı~èÏi<Ç™ñK«e 8»İⵇÜSD¶õõȤnI¯Æ:Ógç0´§ÄÜËD %ø„Ãö!2ê]8ÕŸƒzЯ´í‰ÃğDŸ¦~¼ú*ó<§QzğTÕı„p%ßQ;Îb>åÙüäÍ×»ÎâÑ“ªWMf´BWBéİ>ÏOOõ_µcŠÙL¬y¯_©b<¥§÷ä¤Të1?ÎZsA4µûæò@ã£$,ÆvG&75v,„­O”è$ƒÔR%ßb?O©_20íÀ¶±8¶s)Û±]§e}ª©íú›ZÇï4í ¢¾.ëõ² ¦Ö#$uæVÿUæï=1بۚ?vƒ dK><£iyaÖwÜaŒg±cK8Eî¯ G‡0è2÷&.ų8õ+à÷c^rgsX>O°PSÅÖˆ´#bÈbZ9?Ş~_ÛbÆuX¤f8™·MÀ°¼JoÚæÍ\÷VA¹å“Hi5;{7¼¶ Ha¸~œ[ö8n!·ß½ÔAaŞ•ÔËEW+q¦Så@ù.g™¨æ(‘?zZQnY2á—“„hU Wq¹ş*¹ëV^ ¸÷Í1h0­%G± á¾”õîêuOVŒJã^¼´=<QÔoB¬æy˜÷ùˆ+Ôóìí·ÅÛÄ/{->_Óx½îPq`zªÙ€£ëQƒ¸T`<õ·…å‘€puêD½np=’+§G¼7jé˜:/ß|ùmú¡xløã†§¼E“¶‡u±cJ›bé—¦‹RfvÕ8i64¿O]{² ,®8v Ú­oƒ4ùoÜ£í¢êjbŸ ß³ 'æö*PÍC'¢‚ä2ßxmÄH1ö‚˜ ÆqAFb±ş°í×Êv£úq= yì5‡?óኌ\]úöbWÃ<ÂMI¹OŒ²úPùdO-ÔDf6[8¬»KĞ‚Ó×OûŠğjaÕO4 4/ZreY wc^øoa0ãª[’‚BeöÎb©DxÏbòC¤Â™3)DÏËJ`Vßô®ÎšR^ÏDˆ `(‰ ~ÖÉ;%­nc^©–Njï¨ZdTšéfNÔã°³>ü]4b9)jcãß{Ê 0EÉoÌ„'É”ÖğœND gglÒ{æ]R*·ÓpcTtQEs¼n`ßÊ1Ö6R)~/ãPÇW ¾˜”Ot´¸…Jqîw¸ç~á°Ğr=Ñû±({D^mÄ/ú0gê§{¡¯¯CÙbÍÅÏQ[«céÅÒSѳÓg€àI<]9⇑¹©%b±áE¢¡ Û >ék12ï0Aµ_SM…˜b®Üg7"™²ÓÍÙä½êÖí€ë©6´ˆ¦·Ñ«Fù§ş|$yàÔ_•æe_`Mİ?ǼëŸıÖé6ù¾«“H°Vk‡Ûމê‚×ğÖÛÄ~wúÎx0oÉŞ ü¡tB&:Jb{ò>WVğTBDû^¥ˆ—FçğÏBÇu <Û–^·‚—Ì{°S½IáŒÄ|"¸úäb„é¬ò –fx¯“|ÕZ^o¶4såİc³ÇÃqòTòŒj¯)S+9¡Quz-Hí*TÅb¬!M¬İıOÆÂ¨?mmî­¦]ı¨İ÷ 2mMZ&±ío9f|*M[ÆÌ;ºƒ ŞjÉyPtï=zŞ`é kª§HEVƒãÑU¢:Óî5H•Ô‰êĞ!É *í•4óØç„›gaŞZd2¥Øèá9½¦ uÑ.É&ÈIÊ…m‹éÖ§f{Ç —‹¹IóÌÁx†!Î wj8rœõ*\\Ç´Èú²ô®‹êèûa¹îÓ÷Œíè ¿Ü¼tË»P˜t;Qcø<=GΨ~ƒ»¾;’X†ŞJ1Úõ&t?ñøéë—q>MŠOuF$(·_¼Šõa/De:õğ‹ış¬L~€^EaôÕ JøÚWÁySÑZø­»ª\ùá–¢üçh¼å‹j ÆUŞø[¹4ÔùÓgá8’Éfj8ÇËİ lµtq,(VùÜYHÉ›Uú.õnIƒmw¢wE?™C‚ó•Ù$ƒv:û“t¶?~UW4AJÖdïfÖJâıèèKqÙ¿nFLf@úy£:ĞÎì&6c£[:–¼¶ˆÖ.Ú8)®•iSÉÌ…NÁ¼µffÊ]n7Õíuìv›òñ-‹`‘”ÌôPЧ~–WDŸÃ¹åp\Ê÷®dOV‹v;ì½~9§Qõn†öT)úşˆ'@‘-4t;PR¨öıs>#0ç#jeQGÖ¥‰Û½ŸÁŸ"¾{ÙìŸ÷>ÌQ+<rÄ>ê~Âm:é_0«Övz¤H;8O¢!q~aOïÛfÒÃh-¶Ã·T÷9Í”ë¤|lÚçåÌ:z2!÷ %µAÒD3Šæ ö))ß[Ó/Á¡Œ"¯ì—Š*±°gİÈá$Jª]PC !Ş]²XÿuYCŠöíªÁVŸl†®½ŸÕˆf<‰$짬Â%²²ÔíQ™dH} Ô´gSç ‰‡•¾ ÊÍ”¿Ò„OYÒ¨h¼K' ïc?[()™CÎÉt’êù?{Œ‘´J–/Á‰rm*rc~zD”Ü_!Zb¥¤$wŠ>\œ|!ô8WϬ÷zw‘X:a¾`)ú©9M,µÄ„>ub6æúM÷Æ,¥“)I’UifQÚX”… I8G»„ã—wõ üĞù\˜š´Ó¾Í•Z|è.X¢‹&¢•œäÔÖ”r†ÚêÜÿá»JµÁ×/½2Ɉ8§¦N›hs”¤Š{_o¬'¼øÃùò"yŒ£ı¸ı1y1Ÿò{/f줆{#éB_¾Êå"üFq¢è$rËyö¿”Óâ7úé—ÈÜ>d´*ëÇÏd‹(¸|Sx¼ÅñÑ™˜¢Wj¡}Üz¹ 1ùÑ}C¥`’—Ö½uö¹È©_¡¬BùÏ@níPÁ[‰‹[`äLyzşËÓ9%CTŸ``/¹¹•ír|ò–ÖÂU®Kñ÷ö²]‹×÷Ïg)I¸æÒ @f?~¦©P£“|\'_NíSQöf$78+ó%p01œ´ÿâFì°ºå\úŞ8åÖš9íÊÈTâgçå#î#{&âù#OP#ˆaaãЯÛà¸sQ ¥ÁÄX6Ñ¥½Ç£ŸõâSºJâ<ÄlêÚ¢“ ‹´)}ÔeÙtboNGÍÒÎõÏ@t¾p¤´húŠW§äZ:ÓiZéÉèZȱDz).-^ê+ÜÏÅ „ÂÛS¡+4³N»TMׯ¬yZŸ üØŠ¯—éĞr 3·˜x2q–¼üíc^NlœêjœÀ>=Ş—BšÓ ç‹Ù³\ ‹.|x©+‹ŒH>CÕD‡Ú©¼—¨gmŸK³¨a‡ÁÅ+v÷åa#àoŒL~Wßú<ĞSÕOà›+ó•´@”õÑ^ <iy‹¬ãÎ}¾¯,»-ËPZ{Ìò¥…Å­yrxœ]6ì4©7Ş+Û¿2úM^°.ŞÃ5[öx“´ô\3®{õÇEtmk¼Çí=Ğ[™7!Ê쨤FKçØõ˜6GY,‰ç†Râ¯$Ôm)»<¾©£L̹¼w|°)ÙwÌ(ëzêuñÕ<ô=ĸ£¦ÌÉœÆÑ.¢³4À¾Ivœ ü*烊g%Mb_2sdßh奅n3õ[ºÑ*fÑ_9ÑD-r38½×WªÙbI›Œ›¢[ê‹ş¬Û¹I•‹ñ¸!s>Àİå|ˆ;;w ©:K›åğö†½İ´ ”* ¡•<è¾=ìTP±j}Qëó(UA¿&Ãgñª®®û%•ôØê8}våÂtÁ½œ–ÍŞ$QíîR.Òğ¸‡_N,úD¨YYaÆFš ¥¼Üƒ«8P¿³|#üYXİl»°õÀIûc]k| –lİlZÆ~_ax ¯qáÀ¾9o¿¼ZîàCS%^tç¸Ìy®èIÙ1¶Ú†aªœúQı˜¸Î”?FVÙ·®ı÷Tö‚å,¼9§ü¹LqcÁlü›7Tך{îm„Š;¢ä¨é•…Rú…á<Á US*³5nF/—l–gCj½~vİ-Ñ$zm\İ(Ï1’ß{‹•ÿ¡Ï]T yôX­w -0…ÄEİ×õŸ}L£ P‰xıˆ§ÒéUv€0µ·|ßu·`5O÷rˆ÷fõ“)Ã7…­”ıhüàtœËó„.#Œeë&®Ğ½^*ñV¹˜¼Q`‹F²/òM:‘w\ò0~Hç0˜ÂJÃ3 Œb”ñËt æûpØaå—¬‡%êIq–ƒUÜ"öq77¡éÈ×–¼ŞZPcXÄ#¢•j`Fï=<f|±v&ë!¯)Á3®zÓøÍüm-~\réKzz0º•{Å.9¶Áı¢¯ÑóÊŸB-®šæTÜİ®¶×ğ+r ¡‹=³ ÄMğ(¸Õª£A ŠíŒÒ«uU(¾1[Œ^bœ¸×Ú Œ¾ùpæÌÇf&YyĞЧš›^+±!U*fô®8ôÆ…ßnb´X´àp*.İI?̘Ÿ<#ŠÄNÆ-C®Á3Ä8Oñc¤ÚKN4G@M&`íı†òI„Ï$3€8¼ ï(År±±$’³Oäp³„=šn0$»ÿ±ÙŸ±•]> stream xÚWTì»§S@¤QaÄèØèFº»”Æ0 Æ€nAB@B–‘ ƒé–4èP@âN¿ºßÿŞsî=;g{ß§Ïó{Şsä06VqB:Â4‘´0X$P30•€@â" hG»ÃşR-a(o8!÷ßôj(“©CĞ83$ ëã‹ÀRr`i9 ÉşeˆDÉÔ!¾p'€@‰€ySÕXÜÅËò×Àå€ee¥…~»T<`(8‚@Ğ®0\F(Ä`†„Âahì¿Bğ)¸¢Ñr¢¢~~~"o$ÊE‰_àG»LaŞ0”/Ì ğ .Àâû L„0w…{ÿ!6C:£ı ('p‡Caoœƒ †àrÌtôF0ÄÆúşl ,ş;ÜŸŞ¿Á¿!P(ÒÂÀÂ.g¸; `¤©/‚Æ …„Ó/Cˆ»7çñ…Àİ!8ƒß…Cš*&ߟ輡(¸'Ú[Äîş ¡è¯0¸&k œÔ0Ú›âW}êp Šë:Vô÷XİH?DÀgg8ÂÉù'OQ Ü˦£ş§NDñ̆H‚@ iYÌ Ã@]E7ÇzÂ~+Á¿Ä¸úƒ<‘gX܆û¡ğ†øÂh”,(à¿+ş}£ƒNp(às#(ş‰Üÿ¸ã&‚c6 ñÀЯÏß';·œwì?濇+j¥cª®¦/øğß*UU$ ,‹I‚`°¬8@wúw”¿ñÿ…ı·Ôÿ³6Ğ?uÎH€ìp½û †ïŸœàûs]øÿÎ`ˆÄñàû‡ö¶ I÷ş“ÿ·ËÿÆù_QşÚÿg=š>î|¿ÔÿC ñ€»cÿÔãXìƒÆm„·ˆÿ4µ‚ı±Ä0'¸ÇjuĞÜf¨ \Üÿn"Ü[9ÃÑP×?ô× páİá˜1Òşë™ƒA ÿĞáv ê†{J¼q“ú­‚áVéß)5P¤Ó¯“”@P(–7xÜMÆ-§ ó›×Qsààœ‘(Š_ó”ˆâ«_BІú P¸eû=x\Ö¿î¿7ÃÀ 3“H¨|ä½úȶãZ•ë~Â˃ŠcÀe«ÇüÂ3¨W>§Ô¤iü5Ùየï*i}¯¯Î}Ñà;ºõ‘ı<`³¥ô~ë#“—?Ïì“MG–_RL3vmª<w“ü†°ù­•Às¯@Ë07Âü]`¾— µq!ݱß[-Ìówå³¢'—MVj¤ô(ÏÊG…,âmÃJÇ9Ìœ$há›d×ö04ãGßÇ®å ]²ë& Rm%ˆX/‰%LøÏWš‹yw²p³X3ß$<ºöa„'@u-]—i*àYñ"êCÆã«O©`÷5>ÿeCÓcÔú·»<À!9>fQBz¸øÅVíR‰œ½9İEŒÎ7éGo!£ø¥‘»t=QåX ÇŠ#ıÆ»›‹+# ƒÂJÔâ¥hy-Òx…ey÷}¹7äÇÅFfiW ?™ )¿‘mËZœù´”qX{-ï8}ä†ğÅ}âŸe$Ç~¬ ³ ¾÷ôd³F*¥—v­'¨H©ÿ>uÏ2Åš×ÒÆìƒ–T¯¤ÚhzòJZku;é÷­-FnÂZöó¶ŸÍúéj±ZÙGú¹‡ç©YÑI†¬2§.O¶ÄLH‚äÖß]] âó4K/Õ‰Éh&ÔzÊ$Ù^d.{èGX°¸1{hW\Ñôš5w~oͽv¸W5˜9·Ò,öãş±Úè¾Ï¦=ÅEkM4ŸDn‹Ç²Ç­Û§a²²‹=[]ˆ¸<W*óÄò~eqy>/2{6ÆÚSr›¨_6øÁ—ÁG¥ÏJ£¼f¹ Ÿ±æ‚À)zu3` Vñ"ÚÁaf~øqnm¹üYLô÷•ªgIÚBÑ«i‡£ô„{k…}:—œ}ëóÍk åa$‹yy!!yá^i1¢Á$÷xm4Àóä×ûü\„zõªBS©‘“J2 òµ¨2ÀµÛô„7Ù’î[Òº1Ğ»L ‹FVn˜ŞeŸ tßwÄS mò¯Õ+`³'*¯&€ ñN‚‡Lö3¥ï>oÕh9+ßİ ‰»)ËMØiın kçfKD]ͧUÌcÎÊz¯OG¯ ü0 ¹ ~e»Ã‡¦ùÂ(¢ÁæÿĞŠ/†+ÜÀğCr£ÔÇ`) ùÉËaµn–ÂÈ]ğ¬dé|¯k Ö™¢Î›öêG™°¡ZÉêN(œV‹[²ß´«gî~Aèy6ukFÉåÒùó Õèj䬴ÉC-ËÍÔ¥JDÑÕàş8·¸“ƒyoÑé0ί*½SbbÇêğ"¹Œ¨ÛÀc˜äãQ×§Û~ër{+ÏMå£ÑUYÓÌÙí\’k7è¬Çéû¢.¨Î‘Ş~åÖL,Âø³›dâª{!>«Ü…ôø*aºŞök‡·Ù#ŞÏã…eƱì²_Î…Ä™¡³Şkå<®¼2ª×Æ,#ÖîœS¥–; i1x€}”Ã#˜&$byÒí6W?>®q¸Ô óôØ #m¶¸VCãÚœ?VŸ×ÅÂíWl[£ëD*#Øi–¯¡XÚy;öÑÔo™ ›U­™ÌÓzo#ÿF}ˆv{ô!IrĞF„B ş- çe’:Ğ å6‚üy›‡$¹½§Jô€!Iáîx«Q„¼¦aQA“©ZæªŞ©0óѽ¶£Œ9ÿAÒ—M#Ãls€ìÍ­3×/ñŞ‚KX,„³kØilßóİèRT·qâ¿u¶$B‡¥ós=›I‰5˜ÉPQ<‘4ä~Æ 6Ép«¢q­Xy{-ğFMÈ+~ë^èîÃT[œbPRÚTç]‚~E¼0Ÿqgbí*OŒÈa')§7ÇɤÙ3Ïéz_C<²Ş ¬LZğw`Vîı¨aFzûmqu™æÔzmßs×8?+û®/R¯mS)-{ìnÜ©hS¶QTµ¾Ûà ªgšÚSÜ™ .',ˆuÄ·¼l™­E¾O—l}%îğèì(¥_™xÜ`”sJËPÛÉv›ÃæKøÌt>Q¢ÃIŸ/‘ó·À O¦§IäœqŒ$Áü´$> Û¾W5¸-*2Ûmã^XÉoÆç²êª®H½ä,.]‰Kª2vS~7€}‰½Œ‘ˆj¥S ş>¿°×Ÿâ¥¨¦Å ØcJo¾å4ÓUGÜ|Ч6‘ W\Œu;øWÕİÃ4$¥Ï–œYÛ^-éAí–]ÉşÚãİ‘ÉùÂqƒÉΛ™™ÉƒêU]uÕÏ2›àߨô—2XQüœAwÁÉÛbd´–~Ñë?y€˜`÷ձàZ…©¥—)ߪ[9|¯?CŞ®WäİKÊšœw-{ó-­ûá̦š³Fv˜ä©¦İƒá8l:Â5ğÆ'2&R’aQ¾`‹ÕNãÚbUÙj—˜ĞxYŠ“… ò‡@æO?„dóHñi‡ŒÈô¶Æ¶õ™ÏùŞ ×ЧWMŒ:Œ¿!$ÕJÀ)¨Şİ|€rÕW°#U”ZÑ}­ûBvuy¶#i‡!DìÇ=Qw±Š§¯¿ntH²v§Õuº\Zâ§ô3- Ó/dËèäê Am³·ŒØÏrJ£Ç’‚‚ÌÓ7~0Ìÿ¤“͹¡>Ê·Ş%“İ-xì ›b‰ÊñÛ6½/#=ÏQ?X‹LöNiavD§^ V-4,2f?îÚÓ¾íÒ;@Ê¥ú8ÈÀ–,s]”ÿœ—Ú’ºuxæRÀoOşØÂùóòm®-]ŞR 0@øX°àÔ¡BfşÓ-ù7NÖ!û¬½l×®cò¬x™—ö\Tğ“—¸ };½†toUPŒ±ôö~¥Ãë¥í¡*[<»¤²G¶.¨õ ÒÏ=’ ¸Î)L)¢Öï< ihË®áÎߪ İ>$ºŞX"Õ’Ⱦœ™ÔûPë!½NF“Ã[g7¯ë [èfbkŞä׊_ÉÄ‹#ljtJ]nXäJ’EÀB«z»ÏËT^Õàͺ&tVú•QÎBÖ İsµ–sïX¯ ¿¢ ™%=N$*(sPÓa[°Ùe)ò<û!ÒÖív) ¿-ÿM5‘൧ݬR~Ūpµ.O£'”u×h4ßwebÔíòؘ^ ’ß±Mc3oönİ·± O-ıÕé©||àØ$%›¦úCó™³V¢4d‡©Ë’äÎä\ÊÏMô ª×„1ß B|¡JbŒV\ÏÄ+A«›(î*ù%•£‡ï“áo§FíœÏ„(è"äøòj›­ »eğ¦[»¶G96u$‡sG ±è´Ñ%ŵ ƒ}„ª=C¯Xº=aõ-„ÏceıQ!u+ úñã˜f<EŸ 4.Æ4©›cª›˜»Ä&Ö?ôä7c˜†L4¡¦Úä6w°­ exOâH|~İXº¬;ÙëéËæVjşñÔ¹© ğ4ŞÎ{ıGlİGfçãM€‹ÖÂ^qgœ˜².°ÑXûåâ<£pËİ-§Ä¬aôş®î®.ñeQŠuâ£òõKUma¼`lÛ(‹ç㣕ø_ò#c–&kœ¶©hıE7ŠNÅ‹–î1$ tòİÔÅ7~ò›·¦¨Jå«ùqcÓõşr gã»CÇÇÁv·©'ZWRÚÜ|,[-k®ğj<ïı½ §Q½y²Œ6:O•"X#$©M} <|;åŒßÇ@så¾9´õûùyò{ëâ碠—ö@‘v"Ç<˜Uşmy¡Ì ³¥.Ãö´â:r+síSÀìËÎõ¦µì 2’?„•ñ^>}µÿ‚ôølùIAÓt”åÀíı/Š”¶£>%­ªi¤ï¶,øÔ|» ı”µ§Èï¡/ƒñÔóŠ˜1èíÓ±ˆÖÓÆ)6½¼Š1Ñ„úȱ¦pşêÁ¥†¦Lš<ê‘÷u}˜¨IM?ʨ“¤t´]j‘“¼÷ §õ+×ßÚºW}ĞOq…l9ŠR—ë¹mXf],¨“ûäSKq ή3Ë"I‰+w^ÀŸ3^ãsÁJº›ÅíßoşĞŞCJiıjİ$–*¾ ”óÂéÈ3ÎÊEX?ɱ8ÏóÇO¬í¬? Ÿ‹i©Ùl·g°³R/áÅ…S‰¢¬…Ø|éʧÆç-jµç%lIÚ”Ÿ»‰(Ş“Dšf›}‚T¯úúç¸{[éX([\ågȇuğ ‚IÃÓ‹ÂåØêǽ¯ª˜5*N4›±HyĞNjЛ{Ê ³£³ÆÃJ¬œı\=iݧµTô‰æ’º¬Ç!ËL'fL·J V¤¹dx&·„KJOò±aˆÓ·²OOJ6ÕjEÖ™/LŒ÷EZ†^£øQ‘±-h…WgfÃj´á!Îlìá».D[!˜j:ÌÜu^ºo¾UívŒ=ºjªÀMÉ0ğu>”ü“Ø%„Œgô{3c^Ø´b±Úxş÷İÚO†ƒT²ŒÒ\åõŸƒßwÄeÏ™×u*7¨ú3|›2hÉ/4¡¯÷¯(›²»FçWn¾¹w8f|Ë82“š;ÕÛxcªk˜¿d|ó5}ÑY< Ôw³ÂsÂéã K,‡Öêfs‹†TzU©Üy^ßêãyíı:"º5Ú^¾•4³²‰ş×Ÿ}ÙysÜv›ÈŒÿN8#›Í9«2‘ãúˆá^ I`ç¸ñŒGwĞëNÑŸš%.iN‹Š7ü‘æ¶SÖ˜Mm*2)6{;oäm?DôÄwÿU˜º¸›EÚ¡Mçè” «ĞfEıä6ff¡~B2#Êm àâ}nb:m޳wuj$´¢×.ã’‰®ÄŸvM ú*¶ì­Gg³«Å”ggc¤îP 4¯>$|„Zè”!Ò % ©à•V#³}ÕF'R2©Í*;+ K'tÙ<ÿ[öB^c™Ñ¥’AŒXWË]Ã{!;Ô]6†·Òò¬_|¿¹"Ïåê:§'½Ê%&_£6ßXş³NŒÊOíÚÚÄdÎ1ön›¬z…n¯×€cÈëXëÈKi†vñ±ŞWùܸÄáTl¿ohš¬”¿'97GòÛ Ñg'/dÚ)|Æ…XÓ®Ú ³§Ô4 ì'ô,r´J†»`m‚á+|jáÏ}Tj_{± »¯™C}lÒ)ÓîM*>ÔÈ"ÙŸÈc;V“ö4„TÖ2ˆ :¡LvZG éEå»’ó“>&Ÿ©ışz+$ğ’ù®c7üS§—à†QP+¾ä§ªp”ı£Ú}wµ‘™'«4¡¬}Ä S†4\%=I‰Ï%¨S•|… öÁ«±ö_j·ª@{pãĞ‹´´İøğ¶ÊıûIÍ.ÅíÖà˜‡r¡QÁ+p¾÷ø_ݼª!5•{"`š¯ÙÓ ¼ròü“ vì{B›RL>èªşŒJ$bæ.GÙ¡>5^}l g¾c.û“Ï}ÙÁŠÅCjÃâ‘6í°Ì9şÜ=“Ss£i* “ˆKöÜTì_±ƒ@çO¥JŞÅû‹’1Tl®T!‘–¡óBkG¾(q󛉿c‹—¯ÄŒÚgÏwsì6#ÇÔ·ÉK/ñ\XcëÅÙèŞ‡Ó)|Z†‹lìùi³ÊÕ r·‘‰©ó…5—(VTíTŒ±é!+sܸsz¯•vÈÇ<pYiRòг–ıàıù|–™P":¨Ğe­ÜÇÔÇuÀİ?Ê¿¶?ô„½°L Y^I‰÷üç‘uèŸübK¯YvŒv1[ös:ñ ÌĞmÏ »R»ÿˆîÌ©ö:t÷Ld‚N‚ãqÇM†srº¼5z¢SM!Zw_!³^ø\€}j‘gÅßuå)MS–z›nÌ<ƒHÒ÷÷PVõëıÏ‘-—Öğ«ƒu?½sÍú™o£ÀfŞ «D~L0çä #VÙx5ı l% µˆ¦´Ü¶e³Ë{š–ƒß^¬ü2ÇàÆ$æê Û±Ïò#Ÿ¨jÙX–ù_××Ï*¾]¬ÉŒlèó&Ü›ı>[¸sÑMôD©ÈÓì<äª%×£.9¥WÎCÔœöª9HD*‡Ÿa{åVTMòéÊQù#ŞC韃·* FYJÆM° m^Ÿ®®* P’j}ÿ}yç;WÈÛ»U’©Ö€&”Ğœj ÓİÏr„†ït‰è;_‚¤U†,–¢’'Jƒ4$òûüUªÖ¨­¢>|:LjÏxZ·şğTì ÈC†¼é Xåâ-?zîc@»–h^·ôíMÚ;"›p—€7Nú*†)İ!äA„7`[Ñ¢šÊT*Ív>9“¾}]aE^ó’lĆ$ TÍ‹)¦å˜)¨™±»´ù) q¿ú‰Yg3Ş Ïï­ ®Ç#§M9óè» 0¹ãôëÎæ¦@[«àŒÊ3Š3Îò”sè!ëV” #íP§[†ğíÕû/-LÒuU\Açjiq_¥!³`zTùbjpBº\²/açt80nÏ>¼B«„šÚAyIDó „AÀË—ó|´„1&«ª&¼h‘.÷ÊI²µ˜I]ÒH“B €‚^BÔõ„Kr½ÖX¡íˆÈ™ˆMLhù¼¢ég0/L|°›¢X1n®¨aîÉmı0.õñœXSşšV§z5íÉÛ* u¬ÒG‘õ+[w{šfØoş–Ó?¿ endstream endobj 2319 0 obj << /Length1 1479 /Length2 6967 /Length3 0 /Length 7959 /Filter /FlateDecode >> stream xÚvTìÛ>£»e”ÒÛHAº[JJjŒƒŒ‘D@JPAJiEABDJBBI %E@šoúÖïııÿç|ßÙ9Ûó\w<÷õÜ×ıœ ñ™ZH¨»b\à:4N" Vj›ËÁ`iI0X $d‰À!á !+8ÖA+ş‡] ‡â˜Gp3Æ ~H D‘S„È+‚Á@)0Xá/G V¨õG¸%4Ü ¤‰ñÂ"Ü=p„SşZ…a"@ˆ‚‚¼øïp : EÀ h 1çGN„A‘@ Çı+…°’ç­HBQ¾’¬»Šˆ80óšÃ}áX¸+ğ]  ÿML ´ô@øş[`ÜpP,HíKğC»Â±@ÂÙ@ }#àuo8úg£?Ä^ " ù;İŸÑ¿!Ğ¿ƒ¡0å E!Ğî@7¼®c$‰ ĉ¡h×_P¤/†õ‡"P‚Ãï¡@u3 ”ÀïOv¾0,Âç+é‹@şbú•†pÉÚhWM Gã|¿êÓB`á0­~·Õ @ãÿX»!Ğ®n¿(¸úyƒn >~p}­?=àÌÊ‚Á`y0î„Â<@¿’[yÃ!¿`Bı¡xoŒ7Ğ@Špƒ~x_¨?ˆÃúÁCñÿiø÷]0Ğî@şÉN€ánì Ç"7ÁáA€à_Ÿ¿Wm¹bĞÈ Ü7¤§nac¨.ö›ğß& L /!%”’!)) !V·½Hê/´åùø]¥5-`:èÔ ¬î*›~=¾d¶üBÎê¤ìƒDâûÛÅ£Bù.ÇØùÉp<¢ŒÛt£{û#Œ¹ƒç¼Éb€ĞõDéB¼İœÔ½Ã±àÏÏ,¥|[99ìØyHöß_Æk¬¦°}Ä—Î<µ÷+Š“şÔJä 6¾@)¯„H¾Z¥ÚC·ì>ÿs½…ª®-®[1•ştùT¼üV…7±ìòÊ x/·çı&~œ§Œ±ö%ËÉSy̓W™, rqá|œÊÊ{WRy·±w§üyU¦xuw9Ò+ø¢A4¼f4:´Æ¯ÂºÜ@¨K\¢ùˆ»Â9ü|ˆÒ¶\€a¸,“ uדJ×qÇòš;\¤âÛƒ€à66΢\”;5b±^¥#Ä×V›>ù¬Sn{]OYvR Ï|Ö »ÄŸ‚Vİ/³MÉII»ËËÔÊ9ÀCRD™èÕ‘¾Ÿæ¼‘h÷üujh÷¾# Uºh¿jZ Ù-Xù—Ô%ë.wLsòfòé绊—.mˆ«p߃æJ3:ÄQToƒŒˆN~ò!“İ»ıGá¦ÔV›K%¬I­Ş¯ä:gÏ­±í/έY5mÚå7D0›ßj¬·©<5LÜî¶M·ÖEšöZ&L5}€: n}¥NÓë§åÊ=!}ÏŒb?CƒÃÎÂ-ÈO†z5§$°}®¨a~vØäPé,72Áõa!ßfŞ+MmD?«^Eˆëd5tä`âÊô’eæ¹Hi‹ ¾ĞÀ¹ÏÜS}j cÆ”ÁU«@¯ÚöÀ®uµ™7£ÓÙLv³rá[Ϧ”=Ô§*gŞ“)Ò·$a\Æıf˜ÁğfûSŞ]ºü íù]<à”ŞÕ‹{0ÓÁø.Î7"åÙƒZWHü·Ïº®à; [Õ\´Â‚l°ÍiZ×í’J´{%“>)¯¥ 9–4¤¬ZëØDêš9ûĞÕıExv{µÕÀáÖÀA~‘‘Ûü˜İy&îµ¥jtaÿ‹Ó=£ï¸#h‚ 'ŒyPU¼ı…U…ÙÛ'”b_ëÆıÕ«ß0Ú}gº¼eşÜë6¯õÕ‰{X¿Ê}JŞs4¦8¥Ù^Ö²&;L™º»Å?âø5…úy¢³pÂ?U˜dwXF\âI¼ıû›‘Æ'ª ó¸Åõ Õ{ZÕ>pŸ¶ôv†Ç‰åÜÕùy%Ú›@Á½OY“ D¥1oæ+FØŠñb&’G§5á]*ƒ±±W”ón¿îÖ78æî¸9¼Ñä÷õFGTæIE@(ñÒGÊÚ'SkÄ2{£v&ï¤D/ö ÃDn7¨]Øe}ºº)ş*/šT¡ŒóÚ.à©úE‘G¦A´Tò±¡ŸkP~\:›ÙİRGñù©Ï*ÃPrídJV†HŞ`«ûA?+òk^¥Ó¥?È_îúÒùº³Y#Ö³‰våM|‡ÅCç${G:ÎóGÇb…9‚Ğ.›+¦š©Sºäêp1€‚­ ‡ËqYíÇ¡´‡[´t¹׸õ–İ?ºĞuˆ)—1m߯-õ½ÏvH‘şzF•y#tsœ¯–@ùã&­îg‡À'=² /Õ†"¼‹¡»äÇyaüïZ€SL®]” N9Ãğ4|ešSì´Û7§ÓÀvr‘ÜåV Î-ìb\Õ@ÚÊ—r:^™Ëº]ªØBû¹¬ÚÌ#x@{{ò§‡bØQ$ØÊtNô6@VÆß«gŠ`¼‡àRGÁú%òiÏP¼´µ£Qé•ÇŸ…O™Øm ‰z<ĞàqëNóÕûóªD~Œ‡DSÔ§Äëv]¼•µi±÷ÉèW‹cï”'›ê¦òºЬ¥àk|_(¯¢ì#nG¤µø1 u=Lzx'ÈÔ׿„¹3’|iIäXR&¹«H]Œcn_aıFQ{…¤¬¨KnIõËÒºE=¯ŸS™É+ޘ ‰ÅgiïÇ®K›¢Ld8¼f—…™‰˜²ê‘Ò`ãCú2’–Üéåy{m¢xj,à|•øÕ,Eæ÷éF?n#è3%ç,fƒNåp_|uÊxñÚb¿µ­ pS+³\2}7¬Ïğ]{¤ióBUœÃíD·®£«oc)å3òVP'hoë=~ ¼ÀÆÈÛr1—Äí#À¾â ·ËõŒé›ßE6õ¿!U·!Ò^kLí“}{ ÂóY‹3WÕÔé| 7„ÉïÿaŸ–dV¿÷š‡ho†ò÷lLŞ];³™ s›Äã„ ä{Ô×n ,Ü4‡,MÜMsŞÔ¨©ajĞÜÛo$G»¬Æ?ëˆõH3}ÎÍø"bnC'ÀSWtX Pè,óİ&ÿ¥€Ë]‰>F­nòœˆhŞ“âJÖÛ„<³øÑd\ı>÷¡×GË)tئäFy$0ª¥+-¤Ì©ëÓ6ûlRİ™× ğss½xU4ç„Û–Hú_Ò(ì«´…ÆÄ3¾şŒ~ß™«o(Å?GÓ¤§!ÖM~Õ’¯ïeÕ:i<¬ø!°ôboº£}ll {—¢ËŞßÕ¶¿İ9Yq,6Á#ŸşÎ‰ªÑì'Ep¤ygÍ ;B £ñ [9$/-H"åÂbÕ‘ÕlÍ»»UÃl¾í·ıÈq½Şá•¼”@ôó–˜íg€@yæ¥×Ú¬²•OÒ®çL mİx§¨ŠyîC]MomOwöåûo®O»)õ‰Èø»–ğ&Í´´é%Lf¬oßÜØnvÌIù·$\‹Ä§¯s±‡ñg®!FNÂfÖúÙõ¼Üç~ŸVõÍkÑ`\ğD‚—}Eî®VƒîzLÛfİdC]¶ó0¹M~¼ºVà•º®œ†j-oW7ˆñîÈÇ|¹ˆädW,Ωt}0ƒvR½éB›^QÛ¦å-º }§NµóNDCZ…7pÊ›‰öR¢Âkœ8´6]D>ñ }ìYÁ”gÀ"àä’$Ãñd¿ì2Õ{Ü|ªjÙ·âw£†cïuõiÈúRqK‹§TéÂ&–G¹0o:p¬ѧ²êÃDÜ÷ƒÙÅ*Åæ¡Ú,Ô=)’¹ı-UMõm—Ê@›+ø{¹…Âğ3£•ü‹H¨©³Ö=‡XòĞ–»ŸÉ/Eİ¿êQt3†6àk]¿¨p9ãÍËå~н¢$±ü6%ú)ã•–Ôğc55оîc\ûQÛÙıî#ƒè—¥eÚÁSJ./Ê¡T?‚‚'c¸Ä_şãœ>éȤ$­nF+×Ë=ÃT•4ÑiV¦çè·êÖ1\?©€!9¤ñ ‚†&twH BvCìÆ˜ÂÓyò<Ô4©Æå"›!È5LÆ.¾¯zâ¦à]‚ºš$!Lc ‡İøıCÉ]ׂUڻἜê+,B2”JÓCa%È‘q&'©¾TëϲFWãë-¼_ˆâ—,¦QğR®vş¦YªAåÔ…2…”xØ·^—;1ª³ÔKiµ[32µÖHb‡¬½W¦R… Ök"6ßı§[Rl½'$;“b­)×Іٳ uF·Û˜*D™Ë$!ÔábU$m;Y[ì]Cï§õv~Xãì~n¾ÚÑm5ˆtCr¬/5¯©gî¸íº©@eµ4éKåêîIͧiµ¢2[ |Q¦‡Ü‹‚Æs\åEg¨WAòê”AFp)|y)…~:©ˆ¥æÚ µÿšio“³¨ŞÓ’uK&Ëù½Ã‹ôÿèÅÈ))H‹È}ªœÓ;¹®Mr¤’ò: ^šË 9"È„¬kÖ2;<[·£*îˆ3Ò'¢"½>œwÈ?Â’k¶u6Ǥ{p5D;Iˆä-y4\Ói]¥ƒIĞfï*Lc§îŠº0kvé¥É[,¥yõ}tnQ¨ySd†\#˜fùk&›ÓPvÂÇG+í+t#ÚOö¼<—×>¡Ğ^ü¸>Ê{Â-ºÜ½¿§]qGáG¬@›N:Êvºt%,ÄDËûy†%·¥œĞ÷ã!=JıIγl'X:7{Ê(šJ_ 7p*˜óÜÌz[ İ1šƒ}•™/ÛH&2œ9yáX}‹j^ÚeKHƒSM°Ìصv]ğªğšoÊ]ÓwÖ°"ÛómE©´a“Ë;> ¤ıŸdî% æJ¬lı«ÛßêÕ’Õ³Y#8t±Tbª÷ËKåz¿¨,øâ·/¿®(U£± f şrüRàK £˜–P‚¿]˜õõDU+ é.i*;#·³†.çnòSó7Ö`QÏàÙ±kûğ£gÒF¼œò÷WܳwWg¼Y3'u63¼ZÅk°½9•îöØË«†+Uœ_eοC9ñ ÛgÿÆtöp]+ºŞñy7Ähò>Êş }¥f³ËÖ¤±Ù…àDIކ¾…ümıéD•WëÜü©Ë%&戅¦r ¯ßѰ´z@ʦW:mË&Öêmj˜í}‰òn6à.éµ½s -ğ¥şœÛNZ#jafkÔ aêt3BÏšTƒ±ÓÌİmè¼İÌÆÅProıfàûi’û Râ ïE@²‚ªN%+˜#ğãD÷’ßPŸ·cg³Z¦€_À’Ì¢ ½øE”hh™÷óö;&ÉøF·İ<íğX57“¼9wÚ|IgWş®šHFö’gXª…%† N_lƒŒ,G‚…DÇ æ^z6§ÀGÄsçÎïuhg—Z’ğD÷•nÌ”Ü(ô…ßåÂTv O {9W†U½F…‘T*,F‚»."gñ÷Rçû¥å$b˜å£ªl··'#‰©Ç.t½úq9>ò£¾__ÒÂ8Óşz2¼j‹ E…I­æü²±*°óaÚ¥{ê~Ø#®Å2¢ÁÛ«~ìÀa5Dè5°€×²èªVC&†ã?PO£uæ,°c/¦ÒĞ}56âU?›Wq{øªÏ¬2[¶İ¿Ú[r¥ıÈÕ´ORO¬÷dz0:­¦´ÖVrh¹5úKó컇TkO–¦€@~/'Ï· Ğ5Öóºï?ùvŠûòRøÄ^dŠ],,ä·',Œìô4µêÁ»v^%J+Ï·k²q“¿'÷½éïû±·l·ı4H–40ĞQw>IâØƒÕm@.°Ûxh6[JK•ˆbW;©ô=rì¾<ÉHu㉛òó0}»‰Ì¯ÇÊT]¼N Lƒe‰ƒ""³=$Y#…8–dÈ-6^´íßÍÍ úir3OvwZÀPHúZà%¥ì‡ƒQ™,+¨ ˜!Øã¢úèßÎ0K’”ßT¦”k‘o‹ıTJÖ·ˆ´¯À¢l±–*åC&³±Ü>K ×¾[h¿ì‹Ôğ`…¾Õ’¯æ4…×ÌÊ­T„Xdr‘D1(±~Ü›•›ßÜŞjŠÍ¹ÿ?Û!V‡ endstream endobj 2321 0 obj << /Length1 1727 /Length2 10032 /Length3 0 /Length 11135 /Filter /FlateDecode >> stream xÚ¸ePØ.Škpwi\ƒ»kpÒ@4îÁ‚»„Áİ%¸;.ÁC‚½LfÎÌœó^Õ½ÕUİû[şíµÖşÑ´”jš¬âæö¦`{¨ +C ©¬ÁàààbãààD£¥Õ‚¸Ø‚ÿ”¢Ñꀜ!öPÁé%À —g™ÈåÙLÙ Ppµ¹@^A Ÿ €“ƒCà?†öN‚)Ä ÌP°‡‚Ñh%í< –V.ÏYşs0˜1€|,¿İâv`'ˆ P¹Xí3šlšöf°‹ç…`¶rqqdgwwwgÙ9³Ù;Y¾fd¸C\¬`g°“Øğ]€ Èü›-@Ë âü§XÓŞÂÅä< l!f`¨ó³ƒ+ÔìxÎ Ğ”W¨:€¡+ıiÀøëj@6àßáşòş#úÛdffoç‚zB – ˆ- *£ÄæâáÂAÍÿ0Ù:Û?ûƒÜ@[é³ÁïÂAquè™ß_ìœÍœ .ÎlÎÛ?²ÿæù’¥¡æ’övv`¨‹3ÚõIAœÀfÏ·îÉş»­6P{w¨÷Ÿg ÔÜâ æ®ìÚPˆ£+X^ê/‹gÚ?2K° €‡ƒƒƒO;ÀfVì×òtÿVş?×ïëí`ï°x¦ö…X€ŸмAn`€‹“+Ø×ûߊÿFh@ Àbæ0[B hÿDƒ-şÄÏw‚x 8àøãó÷Éèy¶Ìí¡¶ÿ˜ÿn.»ª¬²¾,óo«$$ì=ެ\¼VNƒÀ÷|ğıï(óÿ÷ßR5ä¯Ú8ş‰(µ°üIáùîşCÃí¯™`øk]ÿAÅşyÁ†ÆŞƒ‡Ãìù øÿ<ü¿]şÿfş(ÿ—±ÿßzd\mmkşPÿ´ ;ˆ­ç_úç)vuyŞeûç½€ş¯éğŸK¬ 6‡¸Úı¯VŞô¼âPKÛ¿/â,ñ›«A\̬ş ÿôà9¼- V³w†üñÌXÿ£{Ş53›ç§Äù¹S¿UàçUúï”ÒP3{ó?v“‡rry¢=7şñ¼ÏËiöø=×v6¨½Ë³ à™/ÀÂŞ í~òòØ%şıF|@»ì?ˆÀ®ò7âç°kÿøì г¥é߈ç™ÙÛ>Súø<ÍìàAN»Å¿ €İò_Ànõ/øœò/øİöä°ÿ+Ñóº±Ûÿ >'rør?“ux8{óY<'sú|NæüÃ3Kg[ó¿ª>Çpù|¶pı°»ÿ9Ÿ«ñü ÿ«if®NNÏÙï¥zîèğïW ö›¡--Ø› ½³®}×~S-Nêκ;!2K»û&‘Õ{É©Ãõ9™±*+hİéJ>:6ğ-°] ´y®ü˜jx7î}²uıe+c¡ »ê{U¼Šè÷e3¬1ÚцçhóM³ç‰©\XÉQ˜pÏ<°æ.¯fqs'Ÿ(˜Ñ|c¸>xëopÆşš÷Z-×âtî&¡!Ñ'&‡¿Ä›¦ó–ØOQ Zô.ù°î4–:OØ1¾i÷h»Ï൫¢qãtğÓ˜vR„˜_>*z½U.Ñî#e"wöÙW…uùŸ|-¦Î,ª‰'U[¾ZL“¾sË麴g^¡½äÏj©Ù©õ;.¸õ,İòn ‘\}z09Ç#ŸŒ~¢İ‰|=ñ+k¤H'ø–-·åd+$‡*8Æà‘ Æ®6|÷şI)ôçàxŒæ<½³éi[ᢟ*)’Z¼C2¡Š™*Ase…øøÇËˉjí^*F-«„âIcI,¸bmÏd–ngFf¹õ(¡m;˜ÏLD¢ß^ËeuP…ѪĴ ñÓ›/£È"áÅè÷&w'™šo`Ci*šÏZ/â!/AØà«÷ÎyM}k›Á2Œ¶‚¾¯ª¸vtÑ1È•İnàKheUÎ:û‰XfŠ;ØıŞNE\SeÃ+ bÇ«rrñ/ÇCѬFò²Af;|;sÅc?9Ç_&,új0¿ `”öŠ£Òyà“®×áò[¡½#Xò¶Õó­+ λÓû!ˆ¨¶\(›YިmÕº%ÔÈŒfzİĞb•İà¼û<„«¦²ÏšW‘„u~¹;<ÔAı¨ˆ±•hÜÒÜÊ?Ö&̨\Ѻ-Œg·S"4ö-%,«ÂWÕh¤¯9ÿí•Z°Å8wõ\+#yš¯rD¦Zñğ¾%çT­-Ğ2flKærâ óûZFªL“ïÏhïÆÂ8d<U½²×ãó<𸺑¸úd4ÇWk@Äï|°~-ÄÈûú90pd¥ËÉ“'ÅXE¬Ú!R=Óv¢p\õÇ¥ïèQ‘„w¶l•àé`O2k,‘úË>8äxJ‘ÉMºyx;àš)"\İÛ÷?w®Îà¾ì#ˆ@m–9PV±dЄ܄‰Î1"·Š µ‹)ãH¨¬—Ëvê^ÆIA°í1à¡/0Ô*—4Û?kê®H!Ø]EÇYœºdõôãÕh“ˆ&œ O[pF6çŒşà»¾Š ğ8цÙïí°kí¸|kıÁlئÆU°I£ )$"ıM»»m>;Wø¸}«qÍX®&m%”,Ş~TÀùuÆ¯ÑŞ¶Î„Ö]´*~ëN/ùÙ•ÉTZû¶ÙûO±ªP~ÒŸ–Ô)BRí)£¤9SØœ ÌÁ£ç>KÓ=(²YI÷çO²ğ7l–k‚ñÏÁ/qJ؇˜YXM¹Ü[ŞÄßğÁùf/®0qN¼æ7 [Èš?<Ï–¾Ôö|Ğr¸ívY¼køarŸÌÉ]ò Ä;ã\’öiN5@=YŒ¦Y«3Ü?wp¢‰wçy_bˆ5ê`®º9˜œØÚô RÚjï¸ı ˆâ6ñÁmß7yEóIÇàûR’œşCεbÕ“¡ûe~{¢¿+í©Im† †1z+¼HáLÂ>~ò\öP¨d¨EG-ëâJSWÆëö­Hux¸ ,±‹ÑÁ>á–0I§ú{âS¯Â½$©é4¼+°oÕ¡ 1Šô$Œ¨t@Hç¥%á œóå}rÓ+ª©jG-UX#%$ÀN4|ñ±Ì›ér¤™>åñ¤KåØäûO¹J­Q3~®Ã¯Œ‚ÛL¦§—¿aÀâ L± —‰Í6½Ê d·¿È‘§!5(øªÇ"‰û¡³_~ù5gÆÒ Æ£¼ûÖÒJ¢®õı~^QѼ]ÅşvI!„ȺW2:‘ï¯$¥U=BoѬeìŠßY1’èwÀç“ÍO…Eñ7’G-¤xo»"÷bD…˜2í •Œ‚E—Mw×aluÊ}®'pÄŠú¦Yq ȬÄ-¶:uîM/òëPqùá´îVÌk­‰¹)tÚ[ÓvÀµ—N‘únsú,`â™PQ4}¸Õ“7ı²EH¿ÜVlëñüN–« xœ”Â|Q´ÎÜì¬%v?™*÷á Zælôô†]¡öé¨áC&ö¾%-—a½ª ö™ö´»fågeı‘…n"såñæ3¦ãSGCŒƒs³.e ¯#kÜ;e,úS¼‡üş¸åu*ààËy«³Çpƒ¼fa*Bf_Ö ®Î•ñ‰5ß.W–ôˆ›Rz:B–ñ©âkhôáﳉl›BæŞŒó›(VD(ÌÜåûq®Ú¨èLµŸöá6oí’> “Ó:ÕP²¢}Øæ×Ígv ã¾²N'Ø!i¼R5nÖ|Ğrp‹‘ 1NÇïëC¦ˆÎXÁ¸ğ Ik8a¶°½ØñHL Éßãë©Ù"jò¾&=s"¸U& ópo¬s=a¤릇H¯~¥À;ìAå$ñGh5q~âq•*7¾¥İ^G}°;Şì#÷Ü^~D|Qİ΀G„Òñk6iI]ÚÕ‚Öãó>ƒ ,¬:ƒ©“£#‰+¬ÑÄ'9rËÁ¥>â"¾¼¤‚ Á•%uqsØö“Ğùy½äßÕm|¦>›\ûk²^óƒ’t~ ÑÒÛ/»QisÆR–´!·âQ;Ï/cÜ‹L¶¤Sȧ9¥øˆ07ʲ1¸b­iD@7<–qœc:dZÖÍ`Šƒ”Ù†ıÔ´Py—êí¨O†ZE/6¸apµ%oö~ R쓺(€}êÏ@]àvYÑÒ‹Ã"ÈxÒõå¶«¿°í1á{£O¦İWÚÉşAܬ•i ¦T¼Ç›\HeÖ»‰‚ûé$ÿç²|§[©ªgI„R‡‡ ½3Û× VqóœğƒcĞf:<½Æ­Hf€`ç°‹ ¬‰o ª+ñ)IÀöC†L‚È­Xr!&ıܶ˜wk=y‘زöÑàk4éØE)qšcÀäyÚܯìçÖôö“la}îÍÀ F‘ø*H‘W%3Ñô’ö-‹á§:HÎ1öæÆ–3&Uùµíùøê^|á­şÖ|.!Ò±‰‹Bö'ÇÁôd…‹œü÷6®CµÔÌeÕ¥@¹c%Ğ‘éˆR,àınDzÆàËİô7¦ÕFŒê18‹ÖPä¸Q«@ì]—Št¡ Ãø¯ÑWü‚‡,Şáµµ"ğ XÒÁœo*¥Z½¥úù¾¶‘ ô\‘Ò+¬å\OíŞQ/&Ö©‚ÓPæKDÙ–ÅşI–d‚]<[çG®öÕ ù'-¹89²·‰0WnYÉG¥»"´³l =OXÅиˆ Oe‰_PÊMWO7*š)/´…_Ié¹__¯OÀ¼S÷Á [(iêmjÕ 6㲡›m_RÈË{Ám7qnğ¥Û iÈÊgˆ< gg} M@¡q(¦åÕĞåüÂ,Gæüv®åÏ’42wèf—÷A»ºx"şci‹¬e’¼\J´²4ƯjÌó{ÿ~짦݀vnA†0”QÃm­"= dgᮺ¼æ”^•Ñ 4åÜ¡'ôÕ#&¬Ztv’†n›ä7e-Cq\}7²s£+Ï¢O­mÛñß¿—j6ÏAñXjùÊŒäİ(vâ™9«JÖôl04Õ6€?†¨uèw«ñzÅ6iæÍÈ} ܇D­wq\xTúÄk]õ‘ÌRO ­D/©U‰š\Š·%7óÚ½ıÉã2 »Å3Œ#¥l쪾n¼hGU~" Qµ-ßí3-’WªÂ›Zeüb¶¶áç{iû›Ï›}áúYr24뫚ğBomAÅE•æş•1gŒ¢{˜ÛÜ/q!ùµ™%‘Æw½/áÀ²%¾‹}+¨ÁKÇ ¥”I:\Ñ„àQV—Ê;YlHi€[ Œ“­ôM šlF#Ä,\„ı® ƒºŠ}×;†#jB‡`% È"Ö9¹‡©¾ËP­)fU(=I3IØ•’}uG/X5c®¶bɦ¶hó }d~µ®Ä×ìywĞ¥ƒC›z®éÜÂ<…|a]FÛ10´¹p·¸ßë丛«PØ_TÕ¸ƒ9rM²‹|-wœZøö+¦Oò%=ˆ€’ÏàjAŸ.€MÂMQ ˜ÛÛo¼Š^ú=‘íÎUñúê/ ¼–Ÿ#¡šXt¾'c2J™Ğ¥ùZÔÛ2qÒr3™†~¶ô¤O˜3ïGñ[6|ŸØw½ÛæÕ.÷ßûŸÊVJtB›â>+*Edß«’ßEg€/îWsfzuD­ì5x<߉®¦»åõ5ë?ŠÑן2wÛy¦ñ숽tÈ™!è?;@qlÓ~ë9ƹ’ÿèGB'6^¯â"÷x#?Q~·|iÔÓ¥Ç\¦8°’)ÓÛïâÕÇŞä¥aàÿËÈ‹%ǶW€ë3]=ºqì‹Oø1Ow}tÍå†hùaõnÌ…nº‡x­G®’œ·ğò•y˜ÇH~¹/-ƒÓEn¨vÕÛ?^åQi¨w|ÔtzDŒ³|;Z ‡ÈuyĞQŒ'ãøÛ䦵òHß—Ğ¿¸÷Š•±K½M7ªˆ8ûj§Õë=d•ôïÓLHcxU…ûà–å¢Úıò•`¾ÍT1I&·¿=ÉYÚ“ß\Á‹Oû5¹¶B[Q׫u«£À¡·uòb‘±”gMJ¡¥y q„ƒ'˜W·İ³ò2ØM?0몜‡êL(tkÉ‹ê íe‘¸ÚğR 8mX–´‚އ¡º8ŠüÂş¦,Rõ(zëúÛÏŠd-ûTê»Z4Z8Ÿ^ı`ÊÿŇï ×ÿĞ/·Vüç`§ók±§/6±t4Ğݹ‰0RhÅR×Û;ü¨ÉvsE)‹<Šª^nê6:ޤË:nõʱÙÇËñ Üm]ÙJUí'Í*`Òú :™hê3íÉM1è‹'„_`Æ5—#ºeãcØ9]0Şä¦›1—{Ğ:òìÙ÷cM+>$›’ôª¦Æ“ çx4eM[‚áœQ8¾ö΄…N¡Ãàô]Â}\‡á­ÙÔ®kËIJ‘7 {¥p^€¿v–±7¯WWN±R Çß³"ó÷7•nc&D¾qö­qG-Æ1 ??Xô)V(8ğ,à XÇ\dñ°¾îöÓõç¸PE+΂I{¨óP2³èË?P³¦ç•¤]ep‰£.œò…÷SË2**Õ¢Ösv™ŞbĞ"å¤& ~_J4d0)R”·£¥ÂÕ5¢¨¤²3¢, ‰\܇ıâêLBÂTüÊâTƒN[vœ†O×öä'1щÛÏáıê!”Êm£Ó‰ıh¡¸²ºc­*ÛjdÇÖlÂm…˦¹¦]T«…wİn½ì-êVÙìЦ¤#ü‹×Vmc‰‡WˆD*á,'_f¾Ú;Ê {ÌW=څ磜§I0Ğ4NtœŞ8‚Öäj8•UÃäwn¥¦%¤Õ\f+`¸OŸ>œ¼ kÚAœw~çTñU?Úÿ}ş«,¤^Ê_ ’ °Ws퓼ü!>´hİð ¼¾,õ”Œ…Etò.ğÙål%Dí“£)??n1˜˜Ö)ÉÑ&ºE vÉáÒsŠøm ¾×Ñ8×m¯)úæEQ»{ğ¸u• ¾ /½sº`JLÍASË•“Á ½Cu]nëƒf0™Fò+nx¼îgÖb!'5G¹(®ïjğƒÑ´§'I™ šÄ[B·ÂOê–óæ»uÈ­àé˜PgÙ°J¡×œó\~ ñÒ¯÷›Şò±„}'x•{çqÀºnÑŸ Ù˜ËÔœ@묪sş=>¶+^ök¾® ½£XµNŒ'Ô"ğp9÷³½»é¾1@¼j~!Š•’s·,7€"I(i»¬”ÙÙ`Õ –İѾKúöæ›®Fo»OG[Ò­TîÓGÛ¢‰,í4Ëäîñ3lzv¹‹]_ }öueUyc”±(}ÅŞö<s‡‡Gë?÷©ŠÌ34š3Y¬©c?ü\4ÒJˆg“í›ö«4ù%ÌÃïšso€ëc~]ğõiEw-‰‘-ÃñQÅ+»­ßì kóÓS´ï» ¿ëˆøõcáâúÄCßáèˆO¼Ñõ|¥Å©&Ù]*Ü«o§Ñ™`ºë¢ lE¶R¼»´IŠqìxSšK¨Ñ5Fô­dÙåî¬Ø§fYÚôƒãĞlè›şTuŠ)tİ.­ÁÙi­û]7cÅÌX*¬@<_•ØA¼®ßOH,Éé\éµ;P8ÔŸZ±{ùVX.̰x¡}vÊ^…æ,ÙÈŸ¿ˆ—^^¸—Îq¢*Ò`€øÎf§1ìA‰şÔB|ï“v°ÊÜœhuЯL{ZP¾&[d·±ÌÙ#ì5h¡^¸U’XX,g2$ Ğ;½àEï½”¾–xú^”cüVyÀBof´¼Bƒ®Ó<ÜêHWÌP~m%2rÛ¨1\GXCè8œëé …Š^å›`£/œ>ƒº4¸—ú7 ûD*ıl…·A‚#‰q†¢Dë¾,oÒVYgäRÆ8æØˆÂ%íÇ™ŠçÖO#Ş`„µùN¦jÖšX?á-B1;Pm¦ÔÖ]²¼T8‰zô¥¤bfQ´H ûö>/C«$(“³vo¾of_6¸lpkUÕâcÄ c‹^$ĞmªŠ…«cÎZõ›rt5j'G-NtÑsÅeÕ«ê_œ:Ó¡ÓÍÜŸw>Ö,,t-7bo3ÀèP·Ø®’Yj>àÀH2FZt}&ìN,as­—2¼M6<5ë’Æ7R’´vÃÉ``¯q«°‘¼M¬´œÂHÄ©à"úâ⛄ŸÅ‰rl—dAKBĞ ]—Y_^©Ş'‘^ û6 Ã;ݪ´™b¨å¨@¾H|¡I… ù½8v@ÊXùJ#ärHCœ¾YnGͳ¹åÅX‚&\eš²ëæ‘ÍëÚN)Ê€$ÚÄCş #-’À_ş³4gÜûŞÖÊã€Ö­ˆCB8Õº/Ñ{Ñ^½U&3“ÀæÁòr(²ÇG!~ÄV&†e— ²¨D'¬0FÌ÷ŠzÇÚ|ùe®)óc§•sˆŠ, ‡Â@"f·)Å/m@‡¡{i8Tˆéåóp?_Úî¡—KnÎr_³#~¶Ì\ágÜ2Aö;i[ãUw¦ª“° àçP„õó~:½¾)¦”( ³lèÎ…_ 3íÆ2 ¢†)DŠ7½áéÚíæBPæÙÕÎ[—t4Õ§¾ \-}°ngäèfœ\õ3­Ä2ÌJ«aQÔAAò"µXl¿89paŞı:rê³¼¾J=Ä«OT¢²/?sV8†=Nï@Rûƒ{ØKªæ0R f½&¿¡ÃôQÎlo¾s’ƒŒë¿Hp§ (Ï~Û•@Ä,1«—ãׄ“D mm¢Ë(‹÷y…Œ ÉËÆ‚÷rN6á쀡¸†Óµ/)ŒİÅúS‹,‚‘ÊBù%¨vÉC,ŸÒÎêä|€ ŞgyЉ#è'²½Âh)ÃÙªò|R¬ù¼Ş²I©UĽê ›%•¤ÂLEs‰nì–{ÏßÉ»£âèÔîÛ!^=í¼«™R”··ñ£h§E8·¶rê]‰èÁùkf‘ï…{õï£J®)(p‡1Óãû?¨°} Cq-fÖœRå‡ÜEyõm&‘jËHÃ}YO]si/Èåœ HÙ&yá¥.êÖr$¢Ú{}W9›+ßñ6íÃLRà¥öt{ᓬgô¼„Övê”Kú¨6ÂIvş¼z¿5…hV »4lÊÄx,l \Dw4 dÑñ1,N‹N¾jş…í×ô™ÂøK Ó7ª^:$ã+4zìvityÄÍû·Z“µÔğwèº[__Ø)wiİZ[ mmÏèËã2ˆö¸šL´‹u¼\ƧX¥Nî§#Zg «Ï µó?º…\[†AÅhJ¿›¶tïåÒ9y%¨Š•û‹¢R޽b°.Öì Ø wàªŞ}jhàâp(0hĞpI¼KŠF¢»»é«Á“Y¢èwïB¥ß¯4ölî …íQf#ÕδSIÈÍèF/_›4NfPh?Îc›ïÔ«Âè5{XŠİ‘¯õ.Vúi:hğ^—`}–³¶W+eĞOŠƒyF¤ó¾gÑ¢ÄXòÍ4º¿åŠ ò¸$ò ¯T6Ö®%¢î%œ‹ççÍ‘%Êöápi"å<²(“Sş’éoÛHÚ—ô6ÌLB;ºÎWıjyàŒx%Óã„şŸ…šÛnãéHlÌÃ)ı&¯wÁ„ß} Õ ‘öRÕÖM·5¨-q#‘¾€9Ä> ¶GSo^½TzSË~û‚ ˜>G|2ıÔç¸ÅˆsJFCÙ·å‚éş0xbË) 7¹PecYHæ'ømaó«ù«o‘éÏ?æn(ë‰iõ¯’ühûP–+Œ–õΦ \=K’K§üî>£úNp¢ø©0µ=æj]P“dee£vÜn®y-´BQX'DݘÃÌŸnŒÑÅê³&²Y¿¡£¶kºô͆ßız½måo a5¿Œ¹Ù^}…ªØ&Ñ(ïßüÿ±ÆÆîæòN@„,Wøš4ßZ¾¤ín~QI¡[IaØME£Á¸‹éFSM‚˜g«ùnׄ¹¶sŤG’^öâq.€Şg*ÀRêL·;'×+læÔ*¾{1ÅIDŸYJ]/\ÃH†³lA™O«ŒÀo ªĞ +Lì$tQŞÔö0̺óNÚ¢o_JšÍñƒ~ÈV]'¯v§„Òw¼ä¬&š7î„f8µ„Ó~°v¸aş>¥%Ñ„¨qlÖÇ ¡û¥«Í©-ougS(ówrhÙeщ1ubm µÚà×NÊâQEÜPìØ®Œo50ù=Ú˶½ïî¤j%BÉ`¢-•h £7·^ª.P™x{œú%38sğU iÿø¯.›Œ>ŸG©ŸYR œËF ?œ÷YÃ;iøã…•öp\b:Ô6%ğW–XÂæ®nÒBg·mH˜›ådó&ü5W‹xOpÈøÌ~¤>-ê—°!Vvï_P§9ÛË6ùdoĞüš—<ÓNI×ĞW6©Úö™aSj¥ùºˆ \房(Rtà3ßä<,@ ñ‘²w$Ô¡…dÓ·¥Êd"”ôì¯`Áâ+8¢gúŞ8âxDš@†g[«sÄav\ÑÊ h¢{’ºFËàz« x:?‡zÔUFz¾§ap†æB×ÒøÅR%!ã´…+Op©t‚š w—¸€j%ğ‘#ğò-gwnmq-õôF !”Á bõø‘í¸·ñÊÁ×XªÓ 놵”[T«´(F­-L'ìç/¨ƒ,ÑÅŞÙ dğ¯:F.<Qò“Ü4G⻀}Ó®—”ÔR,qÔŞ³v½+èÍİ+ß1Ksöó"±–IÖLÔ{=E¤=u(†h:‚¤_1MÌoèÆ1 vpÛ/ã…A¤Jø°Ch™¯KÌ ƒ+ÜÁy|X)-k ğŞ=¨ÛòHD„í¯´=u2»ñ.àUÎvú¼%'­ºSƸLŸ1íp\a"+'5Àõ+Z·âìÃo´õ.á:ëb焬îâªF¦0 Lc3z9å“–›6!Äê6oÆ e·‰à†kÅé5|hwâÅÃÄúôùø´¡DóY²¥J—l4ÅBpoó2¯ğÅzš7Åñ`3€=ˆÜ³BŞFYøc¬“LjzA·iÒå§²t}{AÖœëÂ|42ú#ù­¸©Âé¦íÖ¶ea2Î% ÛÍ©ï?ÖT»dö¯gĞY}Ôœù.ÓKNdïU÷Ù)ùœ:¸ˆTƒ.,¯huë…ÖZ>ùul*‘ŞäŠRåd1¼–Ö{œD­¶úóû!‰q­£6I³İ%u5¶paà»!>ğÙC®Ğº/©Ú”i 56¢¢Å­Û»Êq”7Èİ+L‹Ü€¨Š=+±\m!f îğa”«ş ‰ìÌ/wbxrÛóVóàogz™8تñ_‡0y³½^nYHä[SHä\î),zà f[óŠà ·?õ~®YB«Äåyà¶°ù WÅLÈ,?vî¼ÿ˜¾ˆ”Î/Lë¬5NG’ ¦(0~iøÖ êļ´(ÙÿÉ_]|¹£œmC¿§yá}­„èB5$±)´ğÎr­.,m·³SZ Uª»Drÿ…4ñbÿcã¤{jt!ä› |[–Ø>9 l’„ú;ìz”ıSck?c覮>ğ‹I›ßÊ5œæNˆÜhãb‰M2³V,;㽊SÂÁÿDìÔëVm“” )ğàÃå§K Ùäx>{ñIò"ía(±ê€ìhµŞÏÜæÓ·ösFɸ½Î•éÙçòA¡û?-¸ endstream endobj 2323 0 obj << /Length1 1679 /Length2 7875 /Length3 0 /Length 8965 /Filter /FlateDecode >> stream xÚ¸TÓm7€”Òİé)éîî1`06`£Aº)An¤C@Rº )NôŞŞÏsßÏÿÎû³ı®ÏçÛqmgÌ :úܲö0; Šàæçá{×Ô7åçğñ òğñ à03€Ğß8³È†AŸüCBŞd‹@b ¶¤ & Pó„øüÂOøEğñøøÄş„y<(Øzíš<5Ça–‡¹ùz€H??Ø€ì~11®ßêYWh hÚ"œ@®H@[@ƒ¾ÿ2Á&á„@¸=áåõööæ±u…óÀ<¥Ø¹Ş`„@yxì¿RhÙº‚ş¤ÆƒÃ 0pÃÿ"ôao[ @À@Tñ„Úƒ<Hï}U €¶ú—°Æ_\€?ÅğóğÿÇÜí_†ÀĞßʶ@ ÌÕÍê †:À@[IƒáƒàØBí ÚBà0¤¾­—-bk‡øº-@IV`‹ÌğO~p Ø çƒ!¿räıeYfE¨½<ÌÕEÀq~ŧö‘u÷åıÓ\(Ìêÿ÷É µwø•†½§¯!ìî RUø#ƒ„pş‹9‚!>1aa!~Èò:ñşr`àëúMş†‘9ú»ÁÜÈ4@`òÇnë < ´úİß±4v§VÕlÈ6}¼VzÙJXhš47Vh¢£x¬q'°i-Ğö º­¦’îÃOî3CI2¼ÇÚİéIĞý¾¼1Ö¢§ÕËV|vZrÕ–4‹zşåÙf&„^é'™E!ª RİIIõd gWşÚPR¼ÜˆNãå0 ãt˜¤ÈÕÜ? o¼‚HÓ9V£«­‚ôª>[V¸Fn¼—†«WhÏ$2¨>ˆ=ûúûÅ…ákĬ±xV÷ØIæ§ Û£ ÇX)ñì×¹ş›º¶‚ÛJe´ô®3Qô*jÌ¢DªŠ±lYoõ†xÃ’ÑêÔ\ùö’0#XÃóe¯ö¼¯©Ò½ ÏèÅŸåÖK~”â Ü,­ì²`¬üÖœM>­wpßKO>}¡=WWÁ ‡oVÆš+oˆl4ÿ Y‚dGVõZÇ µ¢!Ë{1›¸Ä^uXÅÏ… x%æó=™.v8䫺ˆ¡jƒƒ¿úDù8œ*âáá¸imgÁïW¯·I“æmßèZ5˜µ dö³TÂ"Óˆ$VuXÕ^.y¥Ìq 252:–jJŸ7ìK¯§¹q̇‹xá} —\Öá‡n*ã§Éi¥ Y ¦Çl7ˆ:´G¨|uK¢ÂÚ´ÙÃq«øDf?Ï0ãE`‡+?,ºIÕó{E|væ°ë5eE¨àôñ\b«Ğ?+kC.}to>ğ¦gp1.àÀ*滺Qg=T3[#c ¤M«‡R‰¸³†Q~¾§}ûØE[’üàG¥Ì¼! µì#„kE¦·JşÙõ}–;šùÆ×«›–‰…/³°P«L-,ñÛg§–„¢ô¤­xKxø[Şä +ölƒíş`[Ü3ÔõªÃÅ©†u²7úŒâI_Òo=­Pôcpd…N³„å$ — ½ ËY›XÕYIõ“ŒÓWåÄ–¼ãÜAşÑÓƒÃ2ù³œq4Ù`¼{wå@Û 7èğòfãì§9ÿ \­òP”#'fø·Šİã<JÛ‡u­"²Ğ­í*£¥­‰¡°nÛòlËó/Òs\QNí´L'ᔟÚÑ^½Ö¥z»c bÉú+4]·+ì·ÉÔWmÂWoÅ‹Ì2¾tny-Љ¹<ô%L$kRIõu§Rş° Hs¦<àÏzr¬nYµ’cç§,/ÍÈZ)öføRŸ1.œ0Z¬§ó…ésKÛ“Ÿo޳¿IT|´ğ¥Øµªo»›š»­ùá;^êóIb`Ôb7uüÂGò‡®£µf·Tı…x¢“=ç‹ Àѳ¦IÉ"jUl†JñûvõçgÍy왘îyœ–¦¾éãÅù9÷pˆ­5Çâïl¸e0ùˆŒ0î¨YÏs'ë§.ËúeÃEøöÒ+õ&¤èÄla¦aıW.ZÆM¦=J _ä2v]–û0×ôØ–æ&­˜ øPeoᄎ†w ÄOàïB\Ã`³ï¾–?¦Ôİn'­/ğ}A–´äEOtÄù4¹(Ÿ®ÿ™b0ñıëE´TÍÁı¼Õ—´dûˆ…´[Pvä¢|ã®—ÖᣲpàÃ’¯¸‡˜ùy–Mü²äÉ=ñÏ8vêØ¶ÚŒæNÖb•˪ "¡êÔÆ$~«ùÖ’ß•ıY+FšhJغ)úÒë#(ıx?64/úÍhô™…´Å(Ü£|ÌÿmOñÀ­9–ÊLÿ¦õLvh=ª +ºáİ:åB«ìÖ³¶·o®ú •»sƒø„f!m„N GãK¨<©Ä¡¤ ÅÛe)Š‚îZ…Ÿ]«, ̘0ÕwÊÄG»ğ#¤±²ÏHÜMDãw¶#:8Ğ],eÿÓÙ× ;!¤¯ÉÈuèóóuJ÷Ò1GùÊ”³”£…öì{b~÷;¶ ¢åWƒxûOÛS2#ï—Âh9‹ÅzLΩÆÀœk Ô/‰}œ Úy°¹0Ư9íøëæ_Ÿ<ìSÍ(héš¡ †\5ëpCaç§oX%¦L߬a€¸¿òó^ãÅç‹„Äs( =znuRKÌ𷔯bú¦„íçÈ0Íñ Ö2{ß9ö=·Ö÷ƒñâñjØ©hÒ€º·®ãJ‚[.¿1^(Ï|lô‹‰Şıú‡F1OÏßı¼½vÅ%ØNàZ2“|åa,±Iî(·®ÑmÓQm¹õ\$Ò`bÂSQ…|yLÂ’ĞhfÆkØO>Ó ”\Úó«çºTVÅ:¯UbQCùüÈ+”kh×éİcZ’ömËuw™ıÂg)Ô^·-˜Qö "T}ùú»^ñ Ï>Š0O{TD¦ğHñ}hª›[­GeÙEıj¦×‘‡ö¬ıTú ˆpÍA,Œ£–ú«É“‹®©¡Îì'ã«´¨ã ¤}b©,¶©Î✴ş¤|QØìSK²©}uê{!&꽨ËFͬ~‹fgc²´KìØĞÃËÉ sÏû²’—5&ÖğÔöNw­Àewæ%ÇOà/>¶ ô2œ¬Fİä d<Âø&d¾ï0m»ç®xu; ù3>ù{¦WH;@§ã <[줔.1pk;‡–ÓÑM6˜«ë­d€s¥€¡üp¨HÎÅÜÃÔ£ŒÚ¦ç 4A<»¼JeÔÔÃm£|…½ÜõöXTFoĞC'*Ên<à— ­yW·ÓCµ(X£L]ıFFÈOëã=Ù™ ÁÒ ]Òİn9:£ó§LÇbŠ…ídÉÎ’8q–Ò€Ê//ü½ï×Zã ^+:Îv7<~!—õe+ç«lY%Ñú÷דǣøôk=«Ó›0c颊’§ùkt(ŞcWqÍëä ŸovާyéQTj²òÖËæÓÃΦúï äçİA>WÊL?ó©Ã‹÷&y Ú&Œ=k)#ÿ8Ù¥4õ XWŸ*IQıÖü=Çè›  ŞoŒş=Ñv6™ÅŸl?\`ë™>-U×çy+¯¤L޹¦ƒNFd& dxÆ?gŒäU¾\¿}ïB>—r_Â÷:WË×öæ^qÙ›’Á#T„Vcq4Dà5A«‹¬ªe;¹æ5~P³~á矦‹Ğ&ªĞ Œ¬¤9–2«DÚ¡Ö[  şÅ-KËp€ÄÚÄ@Ñó«.ºiªƒ:¢Ÿ{‹œÏ€xÕÁÍO}Y]¿Â%² wCÄܬ»PKu;—.¶XK´r”ÖïgJá¡”÷8[6AÏM¤Ô ü¤‚%µ®#î½±ƒâÒ&ø»“Û™²I1.Šr|‰ëw)ó¼†mÄ^£|ŸÅ¨löâ&)xo´][?|CLºoÿÒ_1•t¤¸/Î;d‘r=‹‡‰Ôh}lj ‘{éçÂäâÂdùx¿–ıèĞZpSKĞ!nœ!s:zö]ğÅås7zˆníË4İÏY1èvëe¤¼ng÷šÎ^Ò¤¹w)M‹¢[ÿ˜“%Lí†îë¾ÇüYèªèÏâ'.1ׇâzºi›$kÜÏ}uÂÊAvçnlpzŠ ‹w9åÅ’.p¥dÏt8o«=H_ß(¼ö}ĶYküä_AMPÊĞ©K—ËËÇ_ói;wØ‘«ä¬šóˆ;R\;2GL/9j«Ó$è¾bºaz-IBõ)ôC®ô½Œ ÀR°‚*oof…™C3P…¦*k·8O\ŞşÕzæıa·7”uü$ÎwùJ„TİÑÀ8-"ı@™õjCŞ"£İ½šıãG®5}6a!{ı[ÛMNqÓMÍvœ¦†p\÷A/–æÚ‘+ùµmA-”f 3xƒ·§ ¼³}²îZ'/“ûEuyaÜóz¥ ÃkÆõ‰ÈHÎÊÎÓ.±4_%[ú%Øš:[£QÜÑSì-›©*wr<ĦæâPÜftç³ì–ʓƚ—ë¦*´vüiM*Cş­ŞaCzV¦ÓÙ”x\8/™”ÊŞg¨(,QI»búN?o#ÑYeV’ì픋¸\¼,PV_ĞqjxªÕhŞŠ®:b½,ul@æ·:〽ƒ-1›ñ,ş6äÍcä·²"ÿ¼kçİú “M 6~(æREY0ᆖ€‹C¡íÌSMDğEÁ^ã©×ú^÷yú²±®æìª ô‡¤„rÍSËoOŒ)ÅI½è“#2ï›lˆß—£OÅ)5!NâÑYW—Îg0(Šğ© ÔsÎ꺳á|”Œ#³•Ó’û!'ğİÕƒ0˜šåú‡ †1ï[aíÀ¸¼`Äşháq¡ÑÆhygaqKUuÏ-­Hlƒ!<4»f¾|Ğwg{¤? Ó ?^^èVÙÃqãŸ@hŒ))êy$’ÛSyQÆ™¢Fb˜f\ş ÷†¹Ÿïf1d)öë¼Q’†QLö;ëà‹mœV3æ¼uL“‹}?1°¨s˜x..g¥›¤]&ø­›Cî`C˜'´©eMuoïg¾µ6è‡Í{úL¦5›Ğ@n1R]ŞşâmÍPpôÂÛ¡á½™º¦{t_¶Ğ,cKì»±ïv;ö*­÷$¦¯Ç39Ñ ¾"hz+êÌ'së£)Õ ~”kË1k¦¨†®îâ"Jš¼0Â"ç,¨Úxí6§ûN5”HGø„~Npº¨n ‹I9d–·¦®û›ÏQÍ•?Û œ+"KúK?Ÿ&Ïãä ›“ÎjÄ:å£&š‘6°/À„D\H×~¤=bÂTIµ@áªò™8‡×Â}ŠUò$”Ô 7·¢î8•>h3¢ˆ@qåZvÒç66#JÂC›P£`m©»‘,Ûúè­µı¢ÁRñ$†éZ[hMg+Ü»Ïz*F‘/–A}U0fj”Ñj{ú›£û1¾zÅA6q7FÉ#À<9.Êğƒ9ùÑıÍXlío'û6D#X¥n©™ş­keªÂäòêwòh¼Şu/\I0+?è¿gªÑıN7-¯q^x–ÒJæ“éı©«„6B©u5ç> îSÆğ-Å4©ñÈ€fqtü‡^ß™¯é—j Ì€ó–G¡ ÔXFåç†TÎ k•á¾±Ç/Ÿ¹'öº)df¾Ö$¯ ìÓ*^Ùqî¼Õ´\€Ôú|bö>İ6y-OĞ­ N§Iù6Ê!‡ÍQÆÛÒ¡Ä(k´×|/èé~<¿Ò·]:+|YA¯*ì¡ í¯™Zšf{^qün¶ ZWoFùWHì]æÜ3ÏñóLcBñW-»Ì =·×“ıjÃ6!ãŸ,yß×Xªû8zKê&¥vÇWæóÀÏ6Ãõ¬ß)ô©ˆı3%|åìDÊ! ,>IíÇ÷eʣޥcqÛ /¿ñÜÚ³@éGı̘tÅêy8@Ê µ,ø¯1¼¯ó•Õ\Í3 ö¹,nÿí¤¶:íù½²ŞF|Ÿw_ö±è£u°Î½å§R6:ïôï:òr?T@rì/ıÄÛê3U}ç,?Ü;ºãæQæ¢ù°EC¦ÄÒóR0=Ò7ƒĞ¿úÜÏLrÀş…×Moèzu±§‚‘B É'S”*tÍÙ¿X/5;e¥Â"©o+½Èü´c­ûšêü¸NB”ï

=™¡2\˜n•æşğ.¿[׸ıe˜öİÅtÊcm¿ïí<ÀÖ3gà³JS–Ûµ “ÄI_÷$÷Eˆ™Rd5^^¿;Şã’‚¨®)ŦóæJßÅf­ãZÚÂyµxo°w¸4 ïéŞÆ …|3Z-G+æn½s-csÒ*{RæFË® ¬[ÖØš*op´÷5ã ò"«N5˜ØÒn6 «‹”l¶´öÙJÒ–Ô/Dş´ö‡¯ƒTtˆ´(Mk4¾èV6æç“ÑÄGåëMÛß“,;qbeñÈLÅ>±èÓÅ´8N³Bí§Y$ʳ]»Qİ饷õZmc¥+:/Ioо,ŸKSâúFCÛ7ÃÖyµ›ŸvÜã%õ¹Ğğ¦ô\l¼rqN«ˆxUú}ÿÆÛŸÚyº¤.;1´ÚÁÒÉdYİşYlä÷¹Wl‡^İÜbÂK÷¦³´ZÑ·Xõ±\½Ì7¿ÕT+,–#Â8æªô­Ãu®@ºÕÚõÔCr!”øƒ\pÔ4f/ aŒoÛ‚< 6\âl6÷ʺÃì”=œ_=¿J.¥š'.ïNÎt>^³qâ–ş„µ&@xª@BO÷(´ÉI^ÃÌ݆H1”rñy½öŠƒ…vûlí~×Bèà˜Iöô¹MÅá´%‹ıv9G<¿³Ôõ¸o7_•B\G¼;•úB5- ùª;şÔñw6+ŒúLÚ‹|B ²Ê &FSË4ÉZ{ªºhÄ.?ÂĞ&Ú¸>møÆºÂF¸˜ôEƒí5F¸µÑȽ7u=Ed …½0´š$„×S‹›ÙÅ3#Y»=Ÿ>=2ràX‹«-Z¹Ÿè1”äÇ«D›ÜεŸG•>Ä2f婹oTÎU%G4»­îîw´‘P«T1ÿÂMê—ÂTÈJ•ëÁ‘­œÅÏ…Ù8zn—éà¼úëÒ̾OS¢Œ‰YÓEõ¤ªŸììİ[e±ÎSŠkhab¸àÍQR¶qaûh› -½ïD>­Œ‘Wv›„$-g<ÈÅOåËN)%¹+L¹Ÿ9e=o:¸4*sp‚`©y=:Y$¥Èå‹Î¬[ç›í•¶Çã§Ş‰ë6̳í£·C‰?Q¢Ãû#¯õÎ¥ñ‘¦ƒCg,UÎU2°ÓbùÜ_V•ëâ#;îŒÉÇIÓN¯¢ÉiöòåÀKM¯w#Ş)<úŠ_1ÓJ¯ß§ªê^‚+¨Conoª˜ği%> ÷}oáE;ö´ÇpÈ{<øR[iŸ»7kb¾Ûğs±x¯z¦\é´Ê$S7+±İB\)LY«_i1ı5^º"šÊğÇÒ§Ãk~ªbù•¯ökߔ☿pïª]í~7ˆ¾ T-v—)›Üàãw\,Ò´tr4¨OP©ùş8±¾ m˜DŠ*Ϻ yöO—ó♼Ã)¶î¸É”Ìaİg´ş¶"ˆğû"LİÂò÷}ØXu¶%Xßfİq f¯nİıìl霭ô>Án‚¿®Ù¯wâc…æp )èŞ}ñÔìÅvÉa®( (Oëä4.öïjeÍ'Yúò\¼/ğÆ|³ #œ¢l²¿íîWÂè+®.IÈJ¯qWRC¹Â{$i{eÃÆ®-Hì5ï±XÌQ~2zæ.—ïİ›L¶fød3¤±Âb×–2öñ JÂòV+dë‹Xñ®®%E]c°ı¥½€WµµgÅl4.¶™»ğz6XO®’M÷& fGgxw¸I\úĞì0 ‘I½¸x>I¹ıt2BÿGÍÍOíº4솩âÿÍhzu endstream endobj 2325 0 obj << /Length1 1418 /Length2 6145 /Length3 0 /Length 7111 /Filter /FlateDecode >> stream xÚtT”kÛ.İ(İà €„0tIHw#-8  1ÃĞİ„t©´tHHwƒ„HHwH#‚ ÿ¨{ûßß9k³f­wŞçÎçºïëzY™µõ¸e¬à–E8 ÉÍÇÃ+ÓĞ3ğò ğğòò°²êC‘¿Ì¬„ ÿ_r‰²Éƒ¨8 8  êêàğ ‹ó‰ˆóòøyyÅş„#Äò 7¨@ƒ  ‡A\XåàN¨-ÕæïW;˜À'&&òèw:@Æ‚€‚A0€i qDuƒzp0‚ôüW v [$ÒItwwç9ºğÀ6RîP¤-@âA¸A¬¿4A?ÈxXú¶P—?v=¸5Ò„€P(sAe¸Â¬ ª9@OE åı Vÿğğ×l|<|ÿ)÷Wö¯BPØïd wtÁ<¡0€5ÔĞRTçAz @0«_ 8*ä‚:€,Q¿o(Êè@(€Ás# NH¨Ã/ˆÀ_ePSV€YÉÁ!0¤ Á¯ûÉC0jìÀ?›µ‡Áİaެ¡0+ë_ ¬\€OaPgWˆŠü_!(Á?6 Ä+&,,( €8 `[à¯òúNßN¾_f_o'¸Àâ µ† ş¼]@ná ñõşßŸøøVP0` ±Âş©2C¬ÿœQËG@=¦¼(îñxışóö E/+8ÌÁóŸğßûêè=UĞQæúƒø?>YY¸À››OÀ-&ÄàãG=DDù¾ÿ.óŸü ş·Uıër¼ÿTTYÃb0 †÷7·¿hÁş—d8ÿî  Gq`ÿ‡úf¼B¼`Ôƒïÿ[¿Sşo¼ÿUåÿEıÿ¾¢«ƒÃo7ûoÿÿá9B<ÿ @QÙ‰’…%؇BşHYbuuüo¯ „’‡ ÌEqn>A^Á?v¨‹"Ôb¥ E‚mÿéïU z8@am¸ ôוÅËû_>”êÀö¨¯Š ja¿]”¨şİW†[ıR¿0„@€< xQ$ãxó¡djñøÍoG¢R(Œ¾k8‚à×Z@ 3ÔŵÛ_Îßv7€N(j,¿,ÿj vE P‚üÍ Ô}ş>ÿV?âÌÍÀÁCìjBZ¾UÉĞ»soâ,¯¶EÆ÷F!Ù>½ò¶UÇÍPšt–}nUN3œª=[61ãCÏyømÌì3+p)E9‰¦Ğ».{Ìızğê¬ÓÂd§³I\'=JĞa¼ûÜËôa’áÌP‘.튭üŸm.Û&bûG@áWæzd¬LNÛ>F´13Ë*rÈØŒ$ ašæª¯òtü'F44îR¶%†öÊsİ4.}hqq «¯7UàôZw¥py9-…—*sÎpb?-eB–jƒ ›¬ĞW¹’äøû´alK˜5Ó| ,q=´¼€"»ahz"Bë®êx]sËÄ?Û€ó/OœW¬’£wZúÉZ Ğ€´œ¼ëY4”жÕv©T·¹ü)Ùm,`dÌ’¥×L3ü¥‹].wÉ(ÚùXù¦ÖuÔÊvgz¼S³$tìÙ= !ù “y½õ"áEHLşGÛ³-39Údd4r÷NŒ¶>e(ìo£ÎÈzH_â2ìfbW>DSØ6]Õ°¸VÖ8î.ᓯZÎ;å,›XÖ+| m÷ÏÆ>6‡ܨÛzE£T¥·ÂûÙìÆøùìé"=İõ,?87ì1?=ø½T„ÏÖYË6İŒjï¥Í· è5„z=Ö»–o®šÜW¿}°ğûÈ O„ò67œh‰«Úá,&f‡÷€/L>Œù×ÏŸ³*·h»åáq˜²Óî€Dú—„¬!)êÓ± ÕÍü6Ûà0óbõ>Kø"²àƒÖ@¾×Ë=¯âh¦ƒz?âW0¼®…,Õ´ÛK¬‡˜d´>'<—ñ Çâ÷šv êü,üêsˆ‡¯æçêşœıù‘°›é¶yØI(Ïé}Œ«0–¸‘eéAúmæÌÑã )‹ÀuëE‘O,™`ªÇÊÅr+Ñí0Ú[‚¢ÒöÂØ´— 'à/º# 0a'ÛÙ Zk/¯Sé(µ!zBŠ9Úk–ã«zU80Êùth„¤ıåQVÌÖ(Şé!ÏŸõIûåûâìDU YÒ)÷‡‚勒øÊŸÓÙü‰BL$ RS’ ×Fß®‹4(øK@¼}LßóAº¯kZ:kK…ïÌŞF„á$å¥Õ* öÌ îp‘b½«fæR ê€?Æôó×ßÊ2t ÕÀ…UÇéZ‚ì¹Äı»Oß;bÇ7}ä¼#‚ç¬ìyû˜ğ+‡”=›"LT@]XBÒ“Şe|/çêg«x 5Ví¾<ìB)ş{(¬W¬)›­#—NvB|Ј@?¯)Ê0î ]vÉ®‚ˆúŠİZ†åä+sŸu¨´õÄ.ëKær¾©oËÆåó©î%ĞJO¯İ©z'?ïû†ûıÖ…İA@'Ê×£ÁÈZ6¿¢4~oÔ‰bÂÇ·`@R#:嘽ÜÁ³dê+q¹.ò“x¾9V‡S}IÄÏ ß%7·Y Pıªj06¦Ò7`i(‹úë¬üİÈÁ/¹_·±‘—ô·ıo÷ğBw{ÚG˜gŒÄ„Jì2%ïu9â±qÆ©¶‘Œê¹S 2 ŒÕ|)[}ÏPº’S;†52^–jĞ´§š²éü(8îi¹IwÈ¢i¦êÇV5Zü˜NõTÑʵĞÚ©<Ú'¼±U)”ßoælp}ª«Ÿë¯nÚ%“¿HáOËÌlşÛ~\ş êŞSöஇeïó`ãÀ'ø¥ƒ90¸wÎôUßèÒí»4¾:Ô%{€¬ Š‹-‰ûPîåêw,m…/.w³Ùğ¤lehŒ —+Œ0“&(Ÿ áí²É‚¹¾ñ0¸ğ±¿O¤«Ğ#Ò6)Ö[V‰™‰ ÄjV¦<â÷ö|4±Q“AóùÎn½XZEs"CæTqÉäΫ ´c´©¸ıE*òr—\,1[¸3Cv’èÁÚw”äS?KüM25&+Ĺã'ã 3ÿÍ¢`)š^úæı2r=ÓB¥a+ú¼ó N®ˆO-w^6ZÑñÄò"25 hdçmu¼>´a<¹Øú‚f4F{€ùÎR)²?"¿ö¸8vey¶„ó°2ó4DˆÈ­4JôÊŸaÖMYÕ.)|lY`%‡6õM3Ã@U;¤_íÍxåÈÏ´QÆ#$·¯Ë@ƒºgş¼MáÇ)£¼+ÌÖ)JÁÅ™q„Ò–iôüÑú™ŸáÉĞ4º€•D7IE¸|”ifVUpëÜ,ÉJ)Œ;¼“[˜áÏbÏÅ=2àŸoÑÄ’’?WÿfE=ìš¡)Š%îÇÚÿÂGğFOøqÙh‰ƒ}Gåcê7!œÚ$ÑŞ/›U8Aüû¨ ÙŒÂqVf¶ƒÜ‰Ê”ĞdkÑ܇ë]«àº™Ü»xK¯`Œ”Yh¿*¹Oì»vãXpÆŞZn0ÕaW¸—KÊ;Kı4{,›7×;BROÌ9®í²-~¹‡ß™ÒĞVêi¿ıÊèyV_j”cKM>‡wª³¥«Õ<ó×F˜2`’jµ7”ÃxLJøó¾ñÆ3ƒ!ǯ¸Ø–e|fü’wãwÊJ»œ‚>Ğ•>9Ÿ¡Ù’…‡I*´Üs2¸'ô™U®Ú0£½ûÃıXDݧ3¿`³:[¢o~ºÁà' _oæ¦6:å¹ù¾ÉtÊ£º"Ïx×˖Ľ§_ ¦åå 6Ãï4ƒĞ}"4½ğsÔg˜¢í˜¸k»gÜÛ¥¶µßØqßéJ2—0–|}£ÉÓ‹ùÕÔkt"©n†¸ıW{}ˆÌ¨÷áÑS²8jÿAJWR9á4Ë䚦Õ{G#4 Ktìp§÷´•Äí+©„ŒÌ5Ï¢.Òª? Mö{Î]OSoù7 Æ_ilïqn ‹¨ŒV*JWj"Á–iºØÿ¤Rªé¸ägX³ôÆ,˜¡{ŸQæuÅÍÖ3bª2³°Åf~)3ÛéÀYÄ~}$ë3¨|óÏ€³è“ᯙŞS–­ØÓ»å ÑYBÒÃ3;tªÆ©0™|Li¼\Bl¸u1«XÊÂ|ïYp¼ŞD_½Ä훸¿ÒTS KYT6øõ„rB…[nsˆí[6äï ϾɤB(ğI#»ö>ñ^X¨ãDŞÌFç$áºaÔ —Ñ9Üã¥çÇôYH‰k¦[ÿL…Êh5h¡tûc4ÑR'şË^ ,İåÈ‘È"Á ­¯.×ë¿‘Úvï„¡¸G“¨<'‰|u‚¸Û~Z.m‘©Lõ–¡z—hG݆aEsTë§ÆmK6-şš Ó0—D¢oôºO!Şãµ,-¯{ uæ/m{ûÖ:¢Ó Ff›Y„ÓD£ıl¤-(E¿^{Ÿ_¸ÚÎz°N &¬ù´ã2É.n…Ÿã¬Ê@;í§XuDM{¯£nëGEˆê£löõ½'…bœü^Ø#•(ܧ#ÈOùµJğOi v¬ihß½Ó¸X^ş“  •^@W\K¾£½€T­Œnùø¡ãÇã‹Ê÷Sä_¦‰„ºd4nt/À¨ü ‡®gÛµš–W“Xp‹nvæ–‡3˜ä=ެ¯Xÿ6şVã#S@Ë+#‹Ÿ$5*5ZNB¯AÅÄa²û¬}³bÅßóí™0/QÎÎ?¸ıô•CŠU¨-H«íˆk9‰ñŠu¡°×‡ƒߥ.u͹IùeùfôëÇÁv/İ&h½/–½v¸Ãí¹”µH°«–ŞFjˆ+ñSyÆHU8—±c/.‹Ñ â`O2²Û·aË]G™7Àu'¿~Y1úU3Èùó/Õœî`~aµÇר^ñ«w E£a)ûè¿-ôâŞà }ÅØr™9§åÓXóx#°-¥£?lÅSqá`ïø-ñ±&ğı©m¡‘]оƒ­{¾FıZC—9%cvúyÿÙ©#CùUGÆ:(tö‰ÃÓûãÌ&³öİ!RÜT’ô¸¯TÉU·¸ue8µŸ40»¶G×áZèqÃzIÊ{÷ó'‹×w‹Ğ´öøŠÇ†? eY7áµß(‡ˆğ{ÅÕ%]©åñ·T–/xÛ’«ìÊİëËÚğšïoß)?õ™ïæu[×¥3}ŞTÇóãr¾—#–«YÜçúE Œ!0‰WCïç9ÉWäçJࣗó:Òxú|wÎ ¡Øím§¤`n¨ıV$=߯7^crnšÊ€»¦’óÛ••3ÅXµé^T·ù8qħ’4àœ'5uOñÂCıÄjh•„q1 h>Oÿ|´A>¤dŸk ëHÅ#üzv=)1²-†]ëh™3N&ÌHUPÛ8óí}6†`Fcï¯Îˆ0»ÖÊ ¹ù¶vºµ;E¡ïÕáû*eô-òYç@Z w3îFô¥ ¨¢W¼ZçŠ9>ÿ2}æŒT× ‰}LÁÇ€·—^!)ÎCÂxɦqÃ@N·‡D~‚‹DŶEÿ๼[ÈÄFåe‘Jó½Sª¸µVü‡g¢:)t¢ònQñÖÃIç"ùQ=TC³ødûü*ƒât˜ŞÆ°v\-Q‚é†ä¤õÍíŞÓr-ãÎ&w÷·£7H‚pë‹@CL]im²à–MÁŸéït±£ñ5®„ƒò[瘦½ĞBi‚k§Í±Ø¥;תiÒªBÉİÃ~TÆMßém],oXcgã~")® 8 õÛJ¸x˜Ká³Ò¬)tŸüÈhÀOK™øîT90Œ’sîêõzÜ&ÈxkÙ'Ù,¤³ã“ò£À‘·™`¤1/x9vs!b¢bAH*Lf¿¹X¼| Y˜æé3ûÁ=„V­4zBdßÁ̉)äF²s–ƒGñ~®\3?_»×¤FÍş‡¹;æW06pqUö°ùújr œÏ"ø”a/'&¬ÑUş¡.´ó˜/ Â‹–§«ë:úù…ÜuîM—†½µ-I“¥¯:›T~¶oÌQ G°9zKm e(nps"÷À@KY<ºÁ<ÆNõugQ»ˆı„{BJ˜AĞ>…¼äÌUÑ=bôË.•á·>½c!=$ ƒŸBd{|®NÂßïE/xI’DÜ}^X™ ÙSı¼İÄE½O+äoòZcò¬`¾VDF°S?I;Ë©*+Gc¬ä©nGUJn€õAîWsrB[ ßfr{?g³ûXiаçQ÷OÖ°ŠjÆÂ8V‰|õai9,êFëıÚşèmÆI˜9¢÷‚yŸ}à‚brPCÂõøcàE™MÆo2]M}îğbÙ™µ}–(Oü!aZƒ–~ğ„Øı”£G´;ğÕş™4¾ã‹2‡äN§÷ò·‰w¹MϤüôıëËØ/nNæŒ"ÈÖE=׿n_[J-λß? ó„$ Ç¢·½Ê½ş4¿¥›•`?ʼÑq§là™jBAAº‹í2CèJª»Úåûóèjœÿv¯P:%j±óD[[éRNøÑ¶:tÁ{¾©âBõÎY ÷líÁó$jùeléϸÎgwzª×èì´¸5…Ê®°Ñ ª•ÚÖ³[“ÛnŠ’£8ıÕ¾÷ä…›õÛoğT}¹ ^etÈ7ªÕ¯û n^˜>#M;ü®Ã^Í<z3`T,Ϻh=1Ed¨1è6YÖÏõêNzç%1ßûÀ*@¶HÅCì»Lğ‰[vˆ+d¤{)ıvıå÷>èüÏ@&ÿn¿ÁM"ïæÂ^v}™—pÙ@sñÍñmíáğ„á¼Ğ+*ØLY¶á'Ğ«/LR\Tt×ákÖÔ~x}s.W%AŸ…s iwƒ‰MæhoçÄ®vxş =Q.“¬AYV§ØŠ]"Õ뤨]É!&ÑŠL„ìFO²É‚„g]]ónx2™Tòí(ÀÿPít›óÑW mm­¶İV›÷Æsº`Âvy¹sw r[êóF`•“D¨’%óvzÜeÿà{ãSÂg˜ÏËÙà4Çì#ö­R8 i‡–ì4¦ƒo’‘AjX­ËÀC'õ2|j1”¸–ôe£w³u·? h͜ȬË6:tMxo¹8Ü';ỬÙMÒY$@6&¸ÉnãuÂ4Ëu2>Ò¢g¼Qªğ7‹.Öê[ÏΜ…«^Ê%=˜°Í p—=ûÛ[j•ŸõùVç6 ¿)ôZ¾Èßö¥m?[Z»hÛñ!$g‡{x¼ló™CM_ûài¹èë[Á 4JЉ1UŒ}n¥¢‰'^xí'-cÃeÇæppΓµ x©Éi]]İgØ}OÄnçÍdn5¯«ÌrŠe£ˆŒ?§¬@§Ut!›I—.zóèl@ŞJÎh2“ N±wOÙk´„"ÿpo4o7ÜÿÂ:¢šU[U‡´l!˜!és¿Ézä1/]¯×g ºS@ ¾ûÚİA:CR™¯­¦·«Í6Ì¥òÁâİ- zçÓxeºì»7'X_vcÉXâ¾'LÊØ×€ˆÂ1Ïc)k”ã~’Ä“İşµĞ2Š÷÷ìJğ}ßRr‘ÄkWœØ)ğäÖM3j¤}U6l#ª¦DaqÈ[Ë8?÷*4 şÁ)øÌ£‹ñ çí6zg-şşœ€ãI«ğ›KbÇîuÓhÚ¶«Û[)uC÷mMçìM¥¥XWşsü›—‡·Nã½zˆTjm ò%T:Tk  ÏtdudmaSsÕÓS¡eW°Æ’*öÌèò{•ààMʈcP¯ÙÔDŸzWŸú İ’I] -nö©¥ëØ^8ÍöŞ&2e›5÷„ÑFîäò˜›ƒ})x\ŠJ WÌg²”¤n¥/«o‡ UGÖ/Œ ç„)“X1Şœ§û°>ÊI¯Ãb·êê±­7‚ ¥HàÊé­ÇóÃv{ÁÛs9ƒnÎjkÙWÜ+å öŞA[y¸÷{0 K¬çÓacíÊ#)ôàÓg;ÀM˜æ«ÒëÊLnáÆ0›ñ“ CB×ûdKö¬t§ô?È­¸¨vMѬߗœÏ4Ô“¥pf÷4òÔ¨û­^…£ÏŠœä">°%RêuŠVÄĞLjŞfBFŠEDEÈB.,ü7®­>Î\;XzHÓÖ U 'XÅŞ ZÁZçBpMöN¢}X›Ö…AG9e°T£¢ºøS+88COSà&—ğy'OT겲Ǖe¨“r ᤱ«£í³(I·ì÷kêê'ô†Z¬jLó:}&(Û"ƒêĞòƒl'øÏ¼xb_éw¬»[ö­˜Óö‘eĞ•HmáB'ƒbcóPjï^ˆ¨ÃÏ⳸ NΙVjÁÑê\gÖ³Öû­® ßõ r(|â»xTƒ½³û’* wŸ¼ãM adt»Š¹”à$ö¥²anLñêolˆ-zLg…{Xè\ÚÏ4ı-€›cÕ%[DHl;ò»Bµ‚´¥„F(„éÿ)müéšn0IJp0 šTŠ…HSfwÆœ©"¬ZÎ9Nèå6xİÿõDÊà endstream endobj 2327 0 obj << /Length1 2436 /Length2 20646 /Length3 0 /Length 22055 /Filter /FlateDecode >> stream xÚŒ÷T%zÿ ‡É¶kçšl×dÛæÎ¶mNlÛ¶1¹&»I'óv΃9Ïÿ}׺wµVíÏ׺íȉ”éM쌀bv¶ÎtLôŒÜaYI&F## =##3,9¹Š…³5ğ?tXr5 £“…-÷?$„†Î4CçAY;[€”‹5€‰ÀÄÎÍÄÁÍÈ`fdäú #7@ÄĞÕ K²³:Á’ ÛÙ{8Z˜™;øùÏG•15€‰‹‹ƒöou€  ĞÑÂØĞ kèl´ùğhlh P¶3¶:{ü *^sgg{n777zC'z;G3~jZ€›…³9@ èttšşJ ghüwjô°äs §1”íLİ €‚µ…1ĞÖéCÅÅÖèøğP–”ÈÛmÿ%,ó/ZÀ¿‹`¢gú¯¹kÿeÈÂöoeCcc;{C[ [3€©…5 /&CïìîL 0´5ùKĞĞÚÉîCßĞÕĞÂÚĞèCàïĞ b‚ŠÃ ÿŸ“±£…½³½“…õ_92üeæ£Ì¢¶&Âv66@[g'Ø¿â±pÔ݃áß͵²µs³õú2µ°51ı+ {U[  ¤È¿e>H°hf@g###'3'躛3üå@ÅÃø7“é/òG>^övöÓ4€>¦À?°^N†®@€³£ ĞÇ럌ÿE°LL cg€ĞÌÂöõ2Ğô_ø£ÿîmÆñc0şõóßOºfbgkíñGüï3È*hȨjĞü;åÿ2…„ìÜ^t,l:f6F3+€ããƒÏÿÚùoş“ıßTC‹G÷‹’¶¦v®%ñQ½ÿ$âúïÉ ú÷ÚPş×ƒœİÇ<TÆ_‡‘ÑøãÓÿç%ø[åÿßìÿeåÿuüÿoDb.ÖÖó©ş%ğÿÃ7´±°öø·ÄÇ<»8솬İÇ†Øş_Quà¿Zhbábó¹’Ά;"hkö1çtL¬ôŒ¬ÿ¢[8‰Y¸M,œÍÿ5KÿiƇk [ ‚“Å_wçC‹‘ñÿğ>VÏØêã¶8}´ìoğc³ş×¯¨­±É_+ÈÌÆ0tt4ô€ı˜€ÄğbúØU ûß#` ·µsşP|äè0µs„ı«±ìlÁ¿HÿBá?ˆÀ òqDÿ‹8 b€Aüb0HüA,É?èßôÄ`ùƒ>¼ËşAŞåş ïòÿEœŞş JЇ?å?ˆÀ ò}xWıƒ>¼«ıq}x7üƒ>¼ıAù9[?^Sç?t–ÿÒÿ5îÿe|„kü_ÄúÄDZ´ùcş¯V3˜ü~8ş~t’ø?ö˜?r4ı?ÄMÿÿbZüQ™Zÿ±ö×ÎÅñÆ>Ìş?Â3ÿìGÌ=ìÍ?…?´ØgüˆÏòğ£rVÿ€¥³şü(…Í?"ÿHüå“Å`ëbcô×]1û‡Ã¿´ûÒ‡‰'öì”ìÿ°?LÚ¼r¶ÿÓV¦Sÿ·3¬±Ûœ»?Õgı(‡½µ‹Ó?ìPşLş_Èèô÷–ş7r®¿ˆvçâÅôQÌ”šé#Á?†ÙşB@×”–õ£vNÖ†NæÿPùˆğÁÅgpv³ûûCÃåğ£Ú®ÿ€a¹ıc0>´İÿ?jâñøQFÏ?¡|Xò:şËÕÿcÇ::ÿı|\ ÿà¿} Ğh »²dgÌlYÜùP+ˆçFw0ÅÌŠ0|y­¾/Šãz¨(Ìûø›¥ jY°wágÔã6ê)sé{‹•&£•Ş–wZ7æJc'„©Ñ­÷ *ßÓ©“Œ óOé-[3Ì‹V¥Q·›/óÔX´W‹™Çâ¼­Õ÷UæP”Í¿èáÁ¦b¢ °99YàÁ‚»3»ª…êçº%Éœ®¿L%ˆ?¦ M0³í¯–Ó‚Zì¤áœ ØKßdğ;êgÇ•6˜Ì“ï÷‹b?¥ ¼é  2ršT åÉ’ÜŸ¹–¸Ş‘T2k•ÙJŞşJr¹ #˜ãnD¹«Çó¹G¤´=r%Y¥È“…²¼¿¢BO npFlöWp=}Š´·LİØl‚ŠSrÖ|ZíDZ³‚òo¯L³Æ0QA±´B]{~JA Ù1P–?¬õ7§ëT ;$àȉ‘"¯ OIÕ ñ½Ù§Ï'Ź,ò0R'Ÿ:)ÚFQNAêÎqFLrí–˜~ªOD鋇.ÁöGd×Â»ÊØ‚+?¥Ğ•–`ç›6‡ù8_wì|ñ¡H.›Ñœ¿Í2ˆ„ ò^ËwB™µ0mÛßÓ}nà Çö|©ûeñ‘bu©úB Z7i Wá3ç£gLò¥2Ù+¼a‚½ß÷bK RJ¹§¾|°Áõ–,©áÆ¢„ìª^>6?(GmE1^àdãš亢’…½Ü¥´tbÊÀµŞÅ· ¾d—°j¯ …ë¶ç` ô»,_)”)½êõühÅ®_‚8á<|ËiÙ¯ı€¼i¢<ÔÕ§œò4€¡dš\Ãçî£KÅܵ³Ïàè<ƒâ¬¸Èè¨8ŒZTdSÇ‹®¸ŸÕ£bN>½­ØVØk¼©òàÑqhŒÌ±yùBɦyJ Ãõ¨ì %ßZ' øc >ì¤CêÁ.ʘWU?K:cú g¡öĞ)ºiš”n/Éyğü¹dwöf„M‘#İIŒy£W·|åÌ«"É/ VÃDª¶iÂbίVmáyâ®î4šrK3eAÚAàİ´Lj-X.úÕ¢Ò~’ĞQ±-"zÓ')İŸÇ,‹kW`¸O/ãËr9Q4p`;CæûÑ|Cøšƒí™P Å"&H~úå«UnìÑöï9° İl³ßƒÌw#ż:Ïä[‰¶ÓêTAèl.’˜[s›&’0…¦êµÎº©ºİ',ÌD·`F×ÇeÙjˆ`M³Ê¾şò·eÕMGI¯ÇæÛNâ‚$ {ä‡HñÃßSIfÍÏ;xß›bÕ88P«ÍIs“IñÒ T¦§#óœá?Ƀše-´+)½²ä¯ùÈûô_§Ä¾¤‰—Õè0˜ÏÚ:ê.¹7p‘‚fY`YúÄÏ ‘=æìÂ!ŒôÜ™”ͨíèV7—h–ò_~.‰N`Ê›07à6ÃS4K/<4„r–ÛNå"i#-ù|E6RŞ™‰ºëá¡“(å’)Eöò ùš¥(èvÃp5[l‘‹K»”Ú^ÒÌÎÎÆ+ ììHÊÜr ƒKó[÷¬{hܳ2´>zëty°ïMO^‹Ówrj'°vıÀFáÏvÈCğ³§ÇryO*èæa¹Í.‹8ê°¼„Ú#^ zö$ç}AÏLÎZûê$Xnı‰ªı‰hÖ’Œşëc<šğÖÿ܃‰ã>J¯fg?KÒw\="ªçr„2òšµ'§ P'‘`lçjVB6|(iü‡‡…ã¢üµ¢o-§>›#ƒ k’”oJ¢æëí#àÏ„øş ¶Äöç>=ÑÖ”… ü‘`ÌO·ˆ)=Ğõ«‚òÓÖ‰ÁÌ€šBÒÄ'Hxí¼‰t§^"»|xögçëçcÃ}iÿ)¿TnŸä..Ù]Ó³HkÓëº'±)ïeÀ€&Né;Tq8©–ù Œqœ~ĞQv —:o¢&­m8†R(åÙĞ*‘Äç’µá_7£Ü²fÍ iEiF͆>^~Ì­Sh”£™ä(ŞEœÜæàª[t05Î:j4l2ó,¯Ş²Ã™şFö%\—.¿2Gé°YôFá¦ñJݼqdù{—§®2†är^çZÃÑO™)oaÑZ7¡Ÿ™C]EÇÕŒÕ,ö¿]CX¹]F¤¿¹uİĞØ /øºöÜ-9Ûd7r§6Ğ"xé@áhbswÉœêû.§§k0}±L&zÑ‚:ãûí‹ùlÇ E¨®àã÷ùø{ıgm"üAW<óäØ^ÂaPq áç~ÓN13œ ¡ÿ6õ+ÉaÏ#"§V"7Úà\±,Ë b‡J ²¹ÀÈhr€U¤&Bøî”"ݲğ.PuݤSȧĂ5†ñdÂO¬¹6{ÊÕ!®X9•Ì ¶hÒ°S ½ÑOó&t¸†Qó¨C$yu¸/ykŸ%x[‚fş¹­ 0@«Q;p„‚w}§TX‹¢jUªÎ¼$NqãlULc®ÆKV¦¯bV"sºÜìòú鯨“KàB¯qŞã¥Š§2¹nıìäf’nùÁ—£ kHù6àû‰cU …bòFíîŒYAYİlÓEŸÍQmi?/mUùŸ.ò×ÉÇ[_©f{Uâq‚Ò¾Ó£#2É|¢otk´0 Ù”¨ªx;¾'¡30ãÃÅ‚ª6İ †UI¬õ{ÃfHºˆ¢Ù ˆá™Áͳ¥õ9q•ÇÇ5"ûß̈k:’-åı\äü–Ùïz@ïâL4ç>µ$°€É90Æã´Â§8·>«éGò¶öFA‰‡/k`¨xXOç¡L£bVĞå…Ù±½Ÿ¯[x€µÖ~Yößæ.HމΤô¦›w ôÁXbîMˆ”$QE#¦¿×³¬¦"çã'? 2æ³%Ûµ—ù»VñÇ}&6 @‚¾Ø7Ó0ƒMún_L÷8QóHñ´¥Ï†oK17ÌyèÒ3=BïPó£)AtJOPe»œ¹ñãÌz·†‡ÄhlO“X–0ëË>£;;kHã¹(ËåB,!ŸN” -°‚|ŠT°AÎ4Zï¿õhWq·n>Ê)•9w@“3Jãn_ŒĞïuÆş2âTÉOöФUÀp9ã‚ûDNÛ=œÁ„ú}p¹åF/PZErͳ­4geßôq§Şé¤‡²,MÌÂMœ‚yܨG„W#évFbê¾Üua>ğ_#•5ôohb‡ÄY×µ[•åzÌ!¯­ÿ+Ğj[+ÁˆùÑï²ÍFÂ2‚ÉÇáµ£B_Ó{ÃóWјoøÄ¤U½ÂΫİc±şéaò/ü]>¾Œ˜ßiE® ña¿cWŒm­}ç|PeÓnÓŸG<뛥>¾BòÙŒï<r¿¿¶2-Ä µ€!ˆs½bùLˆ„/õT1޶ìÛæ+­õJŞ…Û7zX( Lz²9”M®ß7‘ïŠYRjì±;…iüvÎ/lÌWW§ù˜-ZêÓdo=²ŠÜ Ó“½:ç½SnÅw ¿]¿X¶òM½oëË$ -º/w›k… ö[7Ñàn‹kW£ÍéP0Î1ïúÑ.}r¯Ë¹Ò~ O|I(ŒÌÛZDõ'µ.å' UÁ˜ µš ù²QŸøÎ[ñÛ—£, Ÿ©Œ7Ò0€æŒzÛ9*KOÔ஥¼åx]Ò5uïœãÂßEº³Æ©#OÄ3—Ùéj¢ô­ù„•¦ïد»;‛_ĞÖÏşI…ai¥•Bã=va¬h#oM%–ö‹JP[ÜÛ}ÙNÎym¹çhç|É6æô‰'pñ|Ã*Á˜ÏsäòÖpÿQÂ`Ñ€ +åuå v:jUbE\/“ÒZı]ıuvüåpÊŸí³Ñ86׋ÜîxL#ÅBÏj iÖgèuØ%§P¾Ã0ï§&á" æLÿ… uÌ^b7ÁÔ_xV£c”*²¼_”gƒcª»¬8Mq*Úø*~W…LT@˜ı¥šv{¤{tø·bÈRVÆ",ŸÕÉ(Ë!°õ‹ñmRG “şàz-O\0«K†Ô—«^RkE»]çÆÍ+Í*ÈL\ÓQ|鉅0áı¢5޸Q} »£Ì#›»9Åæéü&ks‘Òd1üÖ%şc¹N÷Ôͦïh@f¢$ïnǸX¶e6׊?AB² ^ℯ_S§ÿ|¢y ÂPˆ¾.qI.1 m‘¨ë§ O²ºÄö•†Ktf•Yej²uô§pãe¬|›vhÃ"ZõüÂõˆÙ#_ïå—ífÖa½ğîÅ[0½Îmt–ŞËŠo»wż-î§&/*-ayTî¯N9ËÖc“ØÊ cÈŞa‹HÙ?:Ó¾Ÿåû~¦tó ˆímg,sÀ*½èùn?½Aw>e8N/ĞV:®…ök yº3EHñ Kİ¿ıɵ²:G³£ô hˆîÔºÚıJ°ş<Ÿ;5sªdwAÈùSó"‰lñÈÜØ¿zµU2Áî+f˜ rHœ)Øç 5ö©fuŸÖö/¶³ ï §ÜûpxãV}@SycZÕ·«êV¿Bé‚rÔàl]´ÒEb8_âBfxÚäb Ò•`°k?¿vüí×n@sl§e× "îÃâI60½U—.ªò´)çù¦÷}TB3ÜŒŒİ 9PğôA(ÄS¹Ôâd=5Äã6BUFk0W\ Ë|¶RfäüığǤµ‚MMJ3äÅZ¹ı[Z¿~|Ö%ÌïN% ãÜCîrMYXÇA̤҆O°Ğ±à.ÎnTÍ/Ë€4°!´úƽɢ£»ˆüë¡h´b›¶¿=tM%ô_õxä=$T 6HI¨ ß[!/èË&üËz‰§3,Ü"ܳ“p¼üNà=„o6à…¼£fº±«à[:Òxêö’9Ьú“ ÷³Ş¥O•™®»¾íKr5yn¨÷:L$M›ˆÔB@kH<¡f꘬e%XvûQ³¸¯“Û¾RZ@º1ü¤åKjl”Ğu6$Ùì-0ä}Ùøg̾h®±í'ÓàÎös½î¶şhIdklødÅùñ%¢f >ä®–Ñ!Ep¬?qLä4¢í˜UN¨ÜúºwÏÃiÆS×¾²m´$‰¤(6…^ 2a¶faİz]Ûzƒ"ó5BÉ7NİMˆ¸à&áşÙVw˜“F’ÍMSWÂm½¾‹G•däÑMĞv´vß:jÛ%ëuFèôÆç ÈÁ[>/­¬_ªìqv42äß7ø^kÙ ®cA(.>Nµ½¥´Š»µb5Jİâ6†™=ëÛ¸Ùğ/§FAî3¦ªX2_ãÔQï ¿ …ª®Ó±W×WÚÚi$1†“/‰ÕMq܆Ï[lå&;ıevnöÚÀ_µ5geÖ䯊 ï=¤*©ñ{@Á™AÈx5F:Í)…aä k?Íà f½7` ÚjCΆr÷ÆÇq. ­’ÍĞlÚ:¦B„WÀš ±_4èY¶¯â»GÏó ÖKV&ȇ°ÚÁoŞìÊK•^ŞŞ5¼Æ8¦.Ì‹€Gp‡pZµ½1 „a«¤}:§}R,Ö<„‘l{>n=†ê¦pìÔ2‚Á¯•WæYğuã2%}(®06NÅi_Jë6‘)4bN™èA‰Jß4ÒúqY¯„.U2àÿ¼ ^'·‚³çÅ#L ´–4Ö° Ğf.‡±ç/¥Qìæ‹Ú¤ş¶ÅùC¯$¾÷ş]0X_ 22TxÌœ¦Nà +Í“ZU6 ¨FàwÿÚøLüˆ‘;'û]ğ6m§æ~y$ÒÑè}¡;Ÿy-.܉šZ­tıÓÅ]YÊfT&†ÒĞò-€j{(e¸z?.¾õˆÈŒ•h¶Õš¡oHC œfÆ[ÒÔ(Ø+Ï| ^4/®dßN­†&ol-}Ÿ˜s—GüWUÙQHí.§¶G„=£½ş¬V©_ƒcÙTÕ”¡tCÂSB/1Èq÷“éÎl'!gp‘x«{ov¨e§ O-#=2ûî‚“iu xMšåBíÑôªÙ”„2¸‡:±C#¾à×"ÍóéHÕÒ†¶v–ƒÚ*yZºÀNÿ_ dX´Ù/çK!M=WÚg—kŠÒ¯ …v7_Ö¦†ívªĞ;=Ám"ÏT4Ó -} ÎÃßcœû07 ¿§¥ ü $­_ï#‹€/Ñ:`IVlñ1’=Áñ±ÙëÁb vÂäJƒdÜí= }~ï2¬*±èCşÁîäprÕÙ-¯T\/´š£üe-«Èà™ÚܯÃıšİ;yë!xVúm%vŸd¶ŒÔ›Wl} O·t©Ÿ~¤í‘9ç•ÊE=¾a\É©=´ Ú›ÈÕÛI~ûH—[×P —!¶_EıÌ>¬ =…¹Åèa|vôo¯¯ÚúÅGùÙ¥ò$Lâ[^ÈÛODVíR^‹÷£ŞnÏí·"ù–ğøÃ… ¶ßÉöAKoÕ›ªÓª5Å‹¨ÑàLwì:<¼NÅ-Åò]Œ-ÄóYÇ…m¥ÛU^íMßgN@ ¢9–¥x~æcË)İØ:|>èäƒwγ#äÌ,»©3bÇÅïªZ†¥¶\”Y·í˵÷>é dyûY#e¹Á„ŸíTØ‘kºC‡6”sSï²ÈÜarSAs¤«áŞ_ªpª  »µ|ûVÚã·B®óÅ ıÑÀ·l¬—Ô–‰/şUÑ¢//³]NäèËísŸ;~º]ø‚U·Š4¨<×ĞâoFâøşô­½Gìü­‚_€Z|“]* • ìú‚tÙÛ ëÎû)zè!QOÌœî 0ŠkE•àX÷€½AB´á3[Bòìnß¹–IÙí­Æ1YgeHœ!O»š†É%5WÊUöâ†,6ˆŸÈç@½š[$Áì3c‡ÏK̵Mé³Ô/š4ɳK*Ùo‰óô½mœh+ZZ,Z÷¾™\V•ŠÂ‰tF]Î*?óRçXı/ó¶ˆq9’ËøÆœhHˆ³°åqm¤§]”|BƒŒ{Ë'»ÔHË'n ÉôÑÈ-Ú®nÒÜ=³®'¨訃q®·A4z‘˜ÉC„Ù²¸èc;|RlŞ=-LnéT–±½( 2ÒE: QØ—‹¢n;co{6§róSФõi4~¸xyK~[Má„’Y/eܰ¡ÑÚf‰\¥L0îÀ–ğÖãΈû‘ûd®†Ò c›Q±ol|ÕıòËêÓAìØÚ'ŒÉ^á¨~`üa t-ªÔPÓ’w%² ĞU¹Î¦ó}sæÁ¹aóù\„ùÚÌÊp°¢v˜öyøU½/½D»î ±•ŸŠVŠà—‘ıo 1+›;$_ËbèÀ‘9O¨3¸—EïP:ÎÚPÄ‘œ`.ñ î9CûóÏıµ¾YY3yE1U⤟Î^ñ2u¸J ¤PXÍOJä|!‡»µV}ã¢Ö³X`›¾„aèq€^İÚİ"“íÒW/]PÈéßlÆ&ÖP[~‘ë ß ı´Ò89±QxWö#߇o’ˆöu)eY(µvÁ]‚¬D:â§T‘"¾ w,0d¢C“‰ *[T~åVòG¤HQÆ1P¼tûõäP@æ@ 9ì3¢=lô›qµM« Ì}Ì/v ´îK®—|BŞÖWã6°î×!2$š|ŞŸ8Jxœ³î!Ï_¹YO“·İ®Æ[tßjóÆSÇ¡ó¤’ßN¡Óf#_*°ƒs %I) Dߣ ®RêÃã]3©ŸZxõî)/¶VcßZ3-‹R"ì>¥u*¯ºä¦^fÉЂȦʷª[÷_ŸM#Ëá™ü"Î#ôÒ®l¿ªœ¨T¦öлŠbïwlÒ÷Êoع ¢:,2ΡNåeàè¦=á“•Y\ìÜdß[Eí^# 9»¦§›· &+…*˜vs²‡(y߆÷ı×=<Ùm2?L#$#›¾ëdõo…ˆEù¹ 2pñÈ.ĸ«“m]öÔ-¥ ¶NÅצI­—Yb£ ØÂ„Ä´£äòAlb÷`]häëj«4WùĞÖïsj8¼¥ :IôÛßñfeŒ#Dn;4UD¤dnm`7XUqˆua'ûAN7d,Á¥ÿ™7¶M£AÅÔÊ&®Š¾ù«jM²áñ"àÔÇÿÛ bõ“?hÅ=tèJ‰!Ñ€>IØ3¦ó k)ôĞøu6ê—G–]`è}j¤vS÷²Em¡Ü7(™˜ƒñ ¥u”ÎÈ$*ûÜ–Oßu@|nd¯]rƒ±%Ñ…ÀºZ:H~™ÜôÜgÙ(‰ï’8tlÉÔİÿnáÖ+íï×|‹—0ùfCÉ=в;D{ o܇_¦9ǨŞ>¤•¹r»ùıÉ`CSÎ0ü† ¾AÊ„ [”ÀsåıçÛ9ëJ{?] 4H>ç6*3N.$Ø×Óì0 BÔBß#®‰_”üí}´ü]$`ƒoL Dz0H?Xø°†Á@Õ(²Nı—”NUVEÅ­¤¯´=@rA¦ÈàÄ­¿Ê¿$Iê·}‘ş…±O§ã6úF¥;¹¶Œ.{YB76¤>=Tô}¼{aÑÇÚİ.|ZнRŒ´¶½o*¬Ö!^e1§…•²<öº»Üş§;au \€mR^ÀE$®Bf”êj€EaLJŒ¥İW*›„ؼTx SÕ\×qÌı70aa77p"Ct…§Ìä:¡¦ænèÍŞàùOj’\;à…‡ˆŒçnÛ§³lğ‹…qA‹¶şò³'áíë;µş?Ûv6ŠÊ¶ˆk¡³oİgîBG`vM½(,P§[¸ŠÜtQˆóº˜mıÁ²o£ ³ÊŠ›ù_„V&f- ä Êä—<‰ZjıŸb5v•j×÷f“©‡ÌU*©€HšxvTÇÆòZÄ^•Äî¢áõ¬ŠĞ·±z8:ä\Õ"I¢Õf¦uÒØ¶tw4Ì¥òAŞA–s»Bá™<ã0±(œC#:ltÜı¯½;†²p¢K[M~úÒ#©!ƒ—µ™´–Ø&Ø%J™Ñš_åo´Ÿ&öåPìÕ³Èûƺï#ÊF}©¥>¸üÍšì‹÷n¥N{Gû¿bƒ¢NÙL4ºvÓåuí9˜ú|3|yg8`³¢>Ÿƒ²¥ıˆ«:z|ØşîLÊıÛu ç—\8ÇsÊ>Ù%íæ½¿ İStm’Ÿš ä[§f rp ƒ»ÒÔo¥ÒfŞYKƒÓ×ıÛÍ8YIüS;z%Cğªõ"‘šõ¥Ôª[7‡ø±‡E ÷v‹ïTåéÑöNÀƒÿòKèı~ŞCi#>RM«»£ˆ¹ù¢Gp¢R\VŞè$Ğ#a ‹Š“n¶è\&p¬…!ȹ¸_ƒò-zÄÔÃánßzîgø’S .…òî,ÁF…u)®©½ÓV÷TR0è‘lXj•ºéÊ®ŸâQcLR¡^ØPE)b>KÚ:rİ5§À r¯è½úw„›ÎÃÑ­MVf‘΄‚Uò;sñ&¯‹¢”Ò¸Áê±æpŒ›¼úMyÎ °Û=!ï2^+w•:u½×mü2ݘ¹Ç`ÆÔ±ö=õÑgmÜİ|¨éXbÅfmAËvÙ,„6a?‘çrrÄÎr¥ßÇ¡qîŒ@¬¶I)YÚ`(±…•W”'ZĞÀ˜ÂçUË~L¿´=–mMp´EŒ‰ì'àסí/¯-E7¯WW“M{lr½™@G‹ø¯fèl‹£‹x²/€gºer<²$`õr0t±ÀlööØXB(ÖˆİTĞ0}¥biÉQâï>rbÍ8ğ–’^NgnµÅ®_È·°˜õU?qWìñôÀôÛ§×cºSúö^‹ÄÔ™OçIŸ“ı½`°”dxQ$}`@v‚Ú ½KüˬsMLµe!q” p5ùeTúëE¥¶%+¾‘PI5şe„ÓK ã±ŠPSåÑXR2’_m/—{ uw8袀òè«^£)rʧã¶iU½U,â ğ†‡9(û*~ñ5Á_çˆîª¦¦uŒ^„E‹>Û“N=x€+"â|t”¸s¢æIÙKïY—zk†ğ½œÙ~o0vìVCtœ·o7Ìâ}ı¿W2-±š»&&£Q~ é}[jÔô}.ë)ºğò¿1°ffH.Qô¶K.arÀ±;@9[‹¨öœrõlÏf¸RçLOB[Ñ=²%~“©ŸjêÒÀà ˆI³ÎêYhÑé§ µ¹PÀ¼ºìê)Czû{¤nà:²Zÿ2µg"Á<ÒÅ›·oíöi`âSéÚRW;}Ó)û ê8¨œOA>{\¥By—§š£(Êh¼­:ÚõVáXÇÀ^´†{°µ_•#@üáç…æ]•İ“ßʺaßuaüÓ'×µÛ¬<üÈÕÙ¸ŸÅ£àqcjoàSö?3måâ¹¥~*Ø7,÷à70•÷çĞ,”êO{±ÿd’Y'vÁçÔOMlX‘hÄ,FwD W¸ZB;ªR=ÿ)-c‹ˆ§Å(ó8Á¿Ãï…uò¥÷Ä‹u›?fÒ§¹ÁïëgG‚mîoÓïñ¾Ä\h–:ø"énõ·¸á——Ëë˜tPùÓE‰!:4û%L`¡"vN¢®i×?ŸM ÅÚ#MèšheÇ2öz§9Tà­òe¤R9v{¥Æg„tp„ Şù½×SM˼UIôÙ Õh“ñÛ648NìXîLW`GÑ}|‡A»›ÊjŠcà?ÚxCã ¹æ“ğñ훥T€ı®!ÓfâÚÒÂØ~Ñu à_Z´ò¥Îå*¼¾F/‰?=ì°à—ıîÚ´ˆØU·óØÕPÕkü dÆUÀ‹koxúËr{ıyh™ SÀຊRàEÒpñB’ÜPì‹0;î]_Õ—„ˆtAòn(ôïÆ#GU ÕÎÙÕ4¾®a³9k=?n‘áÉŠ{SçZîg…¸‘0ÀØ‚õšç RY²ø Lga¾²e>;Ï£P}+<ÃÔµ#v) ÀyîÃ.&X­Y‰˜ÊùÊv=nySİK¤P¹õ Ã5ú¼—(‚¸R¥;*gæpN˺:˰¾N–ÿDA¬»6ʬ⛧c/ì+씟ö¬WϘägÙİÁÙ´##¹"¬†Õµbç|ïÒ/’ŞnDZàÊc¦CØeiÍkñÍQZ¸%”¶ûŸŠ![Vˆùòè†KÁ¿{w;¦ÒÔÎk1fË š¬y+y¹„êƒÙâ=şÔ¤ÂKí¡úòøf~œišfÛ¿İ»±>Á ynÅ\v(Ö»GgÉíµ¦J>ĉˆJ€4ZŒ İÎ׊ùí§Ò…ª¤$â=ÔáÌÖE\·Ò8ÆO«mPÎLY™Ö ®ù=LV„D0¤Ã¼EÖ˜S¨³id\R´¾­+æ782‚y%?§bœv*P7!˜¹Q$*ó¹~Å]H}åSgÒÖdaÂ7,ÍøIS¿Îuµ,“9_’‰˜!ğÍy=µv Jm§8\Ë—‘<jì‚Cûş{¬Úx#láuœ¥DÕN?PË–¿‰[.¦~\¾*”+?#$Ş€}Ñß1;4±QÊá3>¾)gú¬†gÌ_4Љ˜)5ú;"i±r™È›ù”¢? CA$Åöëk/ñI …yˆÕö#õW7jp°cÈ-H0EeşÔVueË­cw-í¼ê¯»•Ám– ? Sy_$’}2’s·½3³¥v¼Szid‚:3ï­b±>rßfçš-i21>Ov€a`<&¤g’!¼¨©–îrİŸØ<şìÌÄÖh‡©!ÄWz°6›‰ŸuqÁjæ5İÕ.§¾¡ŸµD¸DWNw/¹”uO' w¥F©Hb§O/9ÌÑÕÓyxúhåïû½pVÜAë¼Dë“¡Ø.uhÈ«>^Åj8ŒÄ”Ÿiâ5¨kÈÚT=¢ÄG…_…8Eâ'óÀ®i&«ŒÙ€hË_zqÂÈ8´Ë|ÒÇd_Oô2§8몚7õ\•|`Í<§” Š8J’.i×…zâ·ó+L:ĞËò Ù/ÕÓ³·ìv÷ Õ¡¯Ü§ï-oådFøy3x"‚?p¾‚°û´Ğµÿ$ÑñĞ—QlRè ûUø0šíMf ©ã*£_ûr®2–›ÑSB\øKA²ù\³éBWı€î7Ø ­ı\ØÁQíÓ¯ª<£5Ú\'Œ¼k Tç ½U9= 4%Yt¦*«Ã{^/ͬxézø6ƒèeiü¨,`œ«‚C)´’Vy ¢4ğ!ä¿Á²Ìl­Ye¨õçã1ê Ã-ÊBB•=rö0½ş?æ`¸QÆ=©½+Ʋ.¶r9z³ûúbáö ;Óq9ìl ãµÔ—û}RmM]/n#’’-CøƒaêéÁ­ß%ª†÷÷–hC1Ù~’D>ä~#åÀóÅ5‘ı¹’•«ïˆ9ĞoÌ––c¨“èÑİ3Ü“…øå {kß ¼c+FÉù Ş6ç†V‰-¹+÷;MiµÍ‹v–-es?ꌿ-ozh/Ì\î (±¯lŸ~ıVJ Kˆvqg®}¬CKl\f]¦\ìS¡zœÛVş¬İƒá®€’MÂ/ØÙHOqºÒÄ<ğÒ‡¼b² ™nor {|% Õ‚7ıYZİ¡©4<†¬‰ëXªâŠRWzNÆ ¼¤;›­s¡¢"<<ğÛOå·9î„I²’äѦÀ~³Y¹Ÿ4ü”¼48Ñ»6 ‹ïĞŠ]ñà¼h˜¤r¦åsɳ$"¤ö‚–´´ğÆaǸ¦MÀeİ)ÜYŸ£È4¢w"|•ÊÄ«ªb&°Û içk92çd»JtZĞg$Ò…t±”ïşÎ¨‚¯‚ne[ï‹•ÍѦ­G+PÚôéÛ}aù°TÀ(›zÊ–)©Kên^V9‚^¨éxF‡Ÿf16'Ïyˆh4A°ƒ¤ÌçäÿÂf¼‰âÃJ‡L?Ï€ê-Ğ2—Y¡ÓÅu¸œ—dsßìI —Üzİ(¨r%´L¼t¦&VÈxmN‚¢,~bêkºj{ÀÑöh½ËWéõhaçöu®Œ7ß %ılXG™œ]…ã3R\Z•ÈìŸéßÌO ³>şMYô/@ QËÏÈÚ,7…ÿ´ÒΧ×4^?!— Å)7ïß³³[<ÖwEòæmˆÑÔ¼…íT^3À®ÿŞØÙk© Rªk0£\Z°†i8½ ·Kcç‚áltùÃN(ÊñéezÅõòÀ:G2öæ÷y¿9nàóP&ßÉÍ1;]j™Šøíø‘—Üîÿwˆë‚S2],ÍüT}É9° ½·5€ĞlÅdh2œ «(º{Ø?sM0ƒc²ûËÁİ)Ô¡¹•Ò–BƒtÖ¦Á‚¹ì{ğ8 —®5*]“…7ÕÃİéÓ»-õ¼'û|H-“~—f9Ïö|—¼â6-´¶ÒºÖC‚ĞD¥³ C††´’U%KA6ãs@ˆ¢b„%Ú¾ŒEÖÌí£Ùá?Ó®®qÎû…$òvÁT<@7]¾‡’€€ÊˆåEí,\;Tø8ǧıÒ6 Ó“"PûÃO:£aÎãş)ş]‚ MJºĞlÓ!¦2oÏ»íœpäiíTkô ITqÓDlŞ·+LùÃVõX"îş ôÈ rfËYËçTÉ—6VŸöCÑl\·Ó‹èºIÅ?Ë×|£Gíq€ËV°;¸*¤ Ü‡½màu[Q1 •S".ƒŒ %‘2ÆP¨Ú{†¼Œ/°e•İu%.ş!çU½í0W+O’r+PÉ;˜\‚" £zy¿HØ7ªØn_xDÔ©j®Áş*C“!‰&¦‹mRc€™ÛEñóÙİæÖò× ’ŒfeDtÆé.4'i†»AÜÍ G)…kvعÀÚEP„òƒÂ"!¤€¨;0WœÚ¯}щ r=À‡·viÁĞV«ATÿÇ<=<â‘x°üîë ÷yV¤n~¬õ£{Æø%õÎ×â,˜X[,¡0¹‰“+bb®6릑ıü1èŠçÚ0¨(‰¾‡ˆ ‘.ÿ_%³Eğó…Şu#f‚·Q—úèw#]¼¦\Ãë=\¶”Ò] WC­[*Ãİ»(¨^e›‰'¥ŠFKóÄtBxãËç6&6ò[üé`!ô$`|eæC{ñ¯1V'Mö–¾Gsä`ôøñ¸b¸.L Ÿ›äBô Îr¹­hš­úcãM(59ÔxswK¤C³µ˜wY´Ü|×§Rø{ËÌş[`?¬R06cõiÆRò¼à:6ZÆáµ+\yQ˜°‘L®aê°Yd&äÈşùÅ5ÍâÛ#³ÿ¶³6§¸i Q$uóDë(â(nVûq.kb(owãq =Ÿ-$Ñæª0'ÉéštsiôÇñŒK£wUFŞ'ß _ѬÒâ|×^”y<òYndcÛ(Ü´Yı”>´-‰«nfa†PdäA  ?1£¹ Ôsê=„­˜ È?©ÃLf¡94îÛ©nºªÇY|ù.6mN>Rˆrê°À¿!»f…IüÆMå¥ i¢ÀÉåê‡PŸíny–ø2ê—…É¿Wä5]«‰|1Ú¤R’@ípMÅPqCñÜ ¨«\-ëf;ȳ֋°“m•ö½ƒT)Üÿ›K«ßó¦×Øû}a‚ 4½ c tóÍ# %‘ˆ¹Ù÷j»œkFŞÆìš¸Rñ_¼¬3Éà¬~‘‘Òú Âå­™ÔÛc™0•¨ fšâõ[ACúÉøxİs–Šx¦>}aÖ„K°®á[áÆÇàÕ RòÅY³ÎŸÙüçÉZO±Xi.69ûş£>o1÷{¾ú:V]z•!FKàpòapÍäğéë{²å}N uhƒsS‘Œş›©Z;A>^ϦãgE^N,±l†±UÜqô§0{¬½’Ѻ$à3‚À$;ë^S)Öª´ÆòOlYß©-Ørdøs…‚fÓÙ¿.ğèÅñëúA2æ·«ƒ!ÌUb_æ”tfáw«8‚“Àˆ¹ pEªEõcÖÓÁfŸÄ/k2^…-(*qYŸi+´’CU8Š0–K7S`­‹7’L„= 'ŧŠc?Àı¿ü“õW‘GÓ£ÿ BGlÅÀ¤è@¶x =˜ñÉA 3Éäe Êf"!áëŠÄ‚Ü\Dqü“Éo¨:Ûù¸5z"´‡AÂnôŒ2Ìû{8u¨è[Á­çÛßHÔÃ' ~=%îµ€ıìJlyºNy­;œo3Ö´íü›¯”‰/Ò7ï‡{h%‰F‰´$ı{mªJñæ şmçúÕÚvÜF8µìĞÅ_n^ÎjIÌœØ4°&tgƒ_øœŒ´yTkÜ?f¬õ·=‘9('àE‹!.Ò·˜İéíÀau¬¦9æÖ>Uq¸Ğ>P0éPsU^»,¶ô¹)*İUÒ'j]¤ê'†.z:«-˜5¼8âB€tQUQjqâëFĞá4®–¯°úà¬çé3tJ Öâ‹Û€Øş˜¸W yÁA£í@ À Ô_³rÈWGhL‡ âŒ|^ˆOÑ,mᵩQ¶hh|†áAZÉ!äÁQ1Cy¸bQùIÉ-¦²FZÌël-3¤L‹d¤Œ˜4>”{|kşDX$ˆ²Aõ(Y0™š”OR„62Íëc†y‹çLèi„ÈLBğhaOl‹‚UÊ,¿£¤œõPÔ\½jcóË=UŸdjìCb¦£»ööñH1Ëæ×>êªúPp0ãøVˆOÍ;ª¥rŸÈÔ†°“ Rv [a3£ŠÉ¹+z§…έ¢ÏqëÍ(¿1"eÇ"5//5•¬¬úË•ĞÇÏW;ÃV#»Ù!ŠPÓ1ëÓªpò÷­Qye`Í5ŞLÜ‘½šfüÕÅs“Ş…K¢÷ipe#vW8D¹!„Ñq /Îä^w°O:QÛ¦ôU8y¢ Úğ‹PmJ½ÔiAC>a:¬ÁˆÊqKÄñ>Èl¸ìÒ¿f3 j 3üe{dC~3D*ÂÛ%?ÖÏ8rX4ç *ÌîQñ#»şQYı´Ğ¼™èÅván6} çl³œu´h¤)¶‰‘ë‚Ì hb!èbv¼ó*Ïóîüå4Q›jí¨×Sà[;ç€Ïvb9|ò Û*yéğ=)Ş;Ó¢CÓ¨ÌaÄ4|$[ŒhQ­R‡b˜ ò^ct¹)·œt‡ÓİàM× zƒŸˆÚ³e%R}"íp(1'ı$€œŒQğ>@ÎÂÙ¨« ͦ*åêÛ*Gı7à Êğ†â€Õ;r˜RáÂRˆê— 8vÄŒÛ åiaFræ7/FE‚ÀCRœM¨Şa¹]½§@Tyrõw8}İ<(¡ş†e*˜QV‘?_±¨BªYğßsC+éví½©6®@€Ää5¤¡@Ó†®Â0˜A«|í^θ¼[a(°à®y,ŞŞ¬t³©q“²6%×?®i5'ØMÿ =l‡Ó'ÈIW÷¹È˜´Ş¤ªiVhLúšŠY}Æ g¯Õ³’CÿçÖ“¥.î«6¬™3)ÿÀª¨+µ1d2 J²ìÊêM¿-»‹j×E9åK† Uq‡÷o»¢è³&% _àM"PNÙ¨W Ȭæç—,İFÀj‡Œ¾Y4ê¹ÍyW`Dcõ£¬·³Œ4„n`©y†Y”àŞÜ&B(%¸¡î.]24ÏøÍaô’æÌ"\d’íôÛú 80 1ɺ~|¹Æ¹’ ÜŠçæo€n5ü !Ÿ¨\:²‡†X*€KÈd©<â°‡±Qµë³>[yÆV›àYA¦ïÈ®Ôë4`Q­)¢ÒnÒgÖD½DÖtÌsp2€eûs%ş5µ• æ{'`»‡BĞ·„í°5­6?ÑóŠcìÛÎ"},Y ƒZmï%ÁxKş:ÀĞJnEhïÕzôÅüël:åêÈ­Ñ’÷uêkÜZêY{¥;ñÇ Jõ~µñĉéø[ÑÔv4c?Rğ¾£.ËÜL ޺$®°éÀµºs—ô3>¼£H#UjD¶¦AÊ)…dHëÀyT}tsA9Ïã‰(œXÁğUïÜF瀹.ºÑÀnbÖ'î LŠ”LzV{Şİ¬CÆåòxç÷e9ï¼6Ü馸êÑPJ¦ ¥r/V?—šTßÜVšÛ*÷e éŞ Ìcy§ï¨qJÛ¾çpñpE•áë®*xe®^ˆ0½¦BdÎ?(q„å(ğ¸ıX²?ôãæSå®P¶}”ü䃖© ROhL7úèÀtfª‹Ö|U©ïFx„$  mïWqÇÑÊbíëñpk`5¶ü˜ÿ>3탅?ŒXæ Ôh·lUV^ÕŞšµ¤°ZZŞ4ÓÃÖS‰rc}ÍíGšn$ \™§¦Ök9ûÖuˆr7ÜOÕÃ2e‹*3‰(=köåL_1vÅϺ2bK :Ö.^ëXm„’§ûWR?ı´l ûÏQ¦£*‚ßçÿÊ®… u²¡òUšÀ*Q?˦„Ïe´O§HYRüCO±€~¢WÁì¿<^ÍÏ¥÷w=‚´9ŸÂâØ…ÿ4Ã^0'p»ÊË=ù"ˆ şKΆ8‘‡¦Ñ%Œm¤­0`x–´æ]¯Çbg%ˆ¦ÉK …P¨+Ĉğÿ àaµ±ŞŸÀa„–…5º§/8³¤¿sş®áªv×÷ZÔznp¤‰›2C ¿<ÈCŠšŠcrkİùaĞÏ·hè#©öNîeÑá à)ùÀ;˜+ÅøQ¨øág‹÷ç.Ã0ëÔ““‰™ñ ×9¤QI^ûêgräÆTÉá"[qÿE4ÓâarÍÀš7ÌYÚÉf¢úQÕû\F!Kºö‡~~ãåCş`¬ɨš†$fq¯"#°}Ø}[w™æBgËE•ï "0(¬øêıo‰G·SŒ(èq¹¨ ڷžöìñN ‚Qàt=ƒ–ef}¢C1bªäO–Ì%=Ú}M"`̳(øJºAÆ—æ@pÏi¿:DPÅÊœcu·h`PÛ-‘ì|Œ}×[’ÑTæ¬H-c[ö¸ƒ¾dÈ%Ô‹MˆNॊâØ&ã°òfã8IGŒ*W³ ğf€š—ø©.ÎrZïğ|<Ø&¸ãô‰¸÷^X¢êZûû/ê;õlò¼K<66†8RxÎp¤=Q\|ğ7ıô÷HÚÁx/§ØÀ!¦’Uî]§Í£P}Ó—EP’ ƒdp½ôI;q™¨Æü:ĞÄA â†<+Ô2 xò„—µ)wÄŒPå-©ƒéñ­oºTq…(ºå±c[ ÿ¯[_W0 ƒz{m@ µÚûÅş|=‚%1ûîfh/úiÃóVò@èá)ÃáÉRWÃa üŸ.=Ê[‡.ãEr?¡è,=‰ OÔGõğ(gºO÷àry³'Dô첊ö©s⣛Wt½Eğü ³j§Oì2Ş ½T[`àAì­§³¦¶ß=ÊèçYD0<ø¨qÔcɆ+¹ëˆÖœœjT  /^!)†Z¹Y¸<ú±o †„1rÀ¨håïÍÖP[úôëš0 LùP°-ÍPZÍÜ>HŞiêv’Ú¥ »µ3Lı0—ŸH\PÒ½İP¯å¹[% Ä»Ê-~²ÅÉElø ’•±Œ¬QÊ`DhÀ¥Xæ&©úÖEÕ›ğªÇ{)€Ë2Q¢n,}ÚÊòB Ò¹–Œˆ¡¤0 tà¨åk__]P@qE+ü»wVlğ|ªø,û:Vú{¦l|nõ!%¨®Z3 U²zp·]VA8¤ü<Á¹¥4ìÚÆşú‡éªıšÛCíyøY㊅¥6û‚“¬Ë¸ÀJÍK¾ı³²®/‰{ CÕú)<¹Ÿ;{×[÷ìˆ.À.YHo熔U‹ä-ê'WóJºN‘½°¯æ-0oRPšŸÍQ ß¢Ùó’Ã$…f€Ó¿6Ô j[äçŸé®K©Œ"}Zİf»’àam¦¹½˜$ê-J}ÂÓ¹òŒê‘íy7×u²cƒGĞq‘=şhJÜRw`¥æ> stream xÚŒ÷TÕ[÷ Ò¤Ô–îîîn® l`Óİ Ò%İİ-İÒt Ò-"’w{Îyÿ÷qï` á™s®9ŸYkı¤z­ªÁ$fî` ’v°webcfåH(ij²±XY9˜YYÙ‘©¨4Á®¶ ÿÉ‘©´@Î.`{ş?,$œA@WˆLè 1Tr°È»ÙØ8lÜül<ü¬¬vVV¾ÿ:8ó$î`s€3@ŞÁä‚L%áàèå ¶´r…ÄùߟZ3:ã_Çbv g°Ğ tµÙA"šmf`«×\Ğ Z¹º:ò³°xxx0í\˜œ-…é`W+€:Èäì2üJ  ´ı“32@Ó ìò·BÃÁÂÕè @¶`3½ 䈛½9ȉĞS¨8‚ìÿ6VüÛ€ğOqlÌlÿºûçô/G`û¿ÍÌìö^`{K€ØP‘VdvõteíÍm] çî@°-Ğbğu @ZL „døO~.fÎ`GWf°í¯Y~¹”YÊŞ\ÂÁÎdïê‚ü‹Ÿ$Ød©»Ë?͵±wğ°÷ù²Û›[üJÃÜÍ‘å=ØÉ $'ù D„ü[f rp±²²òr°@N§™˯š^ ¿”l¿Äü|4@~` ä² Ğpuvùùü©ø/Bfc˜ƒÍ\¦ K°=òoï1Èâo é¿3Ø Ï ?6믟ÿ2„L˜¹ƒ½­×oó¿ZÌ¢«ª%'®ÍğOÊÿ*ÅÅ<>Lœ&v€›à÷_/ÿæÿ¿Üÿ’ªÁÿpûßœ½…€ïï µû_îÿÌí?KCøoeÈ4ƒ´¿‡ß€•‹Õ òÛÿçøëÈÿ¿Éÿååÿuøÿ/#i7[Û¿ô´üÿèv`[¯, Óìæ Ù %È~Øÿ_SmĞßë¬2»Ùı_­œ+²!bö–¶ÿì" ö™«‚]ͬşš˜ÿµâİlRupÿºoLl¬¬ÿGY93ÈâiÖ_*d£şQÊŞÌÁü×ê±sq€ÎÎ@/dVÈ|±sq|Ø ;jòük´,Ìö®#Hv~ gä_-åæ°ˆıı¸,â¿€Eâ7â°HşF|©+€Eú7b°ÈüFìÙ߈À"÷qXä#…ßÂEñ7‚pQú \”#•/„‹êoá¢öA¸¨ÿF.¿„‹æoáòæ7‚pÑú \´#ßÂE÷_Äá¢÷AÎÿEs@;GÈ.ıº&ÿµ°º˜Áf`g37»ålìÜÿ(\Á¶æ åœì¿Äq»ØünÎ/'®¿}B"™şF¦@3[ ‹Õş9‰ÿ@ªcê 4Ù‚,\ÿsı#ş{³ÿõÊö·Øäú{>åÿç¤Pfÿ".E3[Èü›ç/‰İï‚ıZ–ß•â€ÄÜÁÖöOÎ{“åwm ÁúOPî_z'7È5ó¯?ÈzØÿ(5+¤B¿½@,,Àî¸ı¥vpû3,ÄÄòwˆŞò×·èOH:¿«Í )¢•—£Èş ˆ ü„·şBfÇæ©×ï$¸!…±ıuKüÖCªûGFG‚åw(.ˆ/{Èíò»Ğönv¦¿îuË?(A/‡ß¤!>ş8ÅÆIÔñ·ÃòaÿŸşs²ı#ıo÷!O dô!ߘrÿ%;üî1'¤°¶n$ùcqúø/ärùëşü×7ç/¡ƒ+ÈÜôw‰ ïàßÂÿ°ãàûGú_vll4 RŸß¸ ‡\@vàÿÎ+×/ûå‚8q<íÿ&Éùÿ,„Õï°ç‘ÅÕÊôǨAjêêáğLj·ßIAbşõçbæàügc Óáş„öøcƒ!N=ÿ€¨^@HS½s†xò9ÿÍà?™›3¤«®}@^¥ÿá¿>A OòÊ¢ƒ™@ˆuCHçm‘ÓŞ”ĞÕv“ÏŠs—Û:Â{ºÚ¬ MçbïGû1×w¤h¯EWÉ}NÚšÂÛ“Ô:î}ŒÔg÷:—gğ†¦‹NÄIˆ™4E÷}|µm`Û {ä©òœÜxÑU ^Şz Èx6V¬M„-î©í×r+ Ùï4†£ØGo‹=öç‚÷F•&»K/!%¡ ì5öÄ,µøaŠ<ş’OYIô¦ĞR+3タ ™ïxÏë3~}E9l|V[ç>™ J¿F–@¨HY{&ô 'èK Ò2*­%Fû#áH7Î æJîqÊ^>û_V^\ë\+œœ5Lë{é[l#!oã®·ˆoH>†;ùá(Á_íóöúYg–SÖû|´>uœóÜ÷Ô誔:wCGF(zŸù²(£™‡j4áºş%§R-_‡)’Aş(áªô›5f§oûOœgùzi¼ ÷ŞÄ¼l“§Kä¸L±[ȬÍÎôp«`ĞÓ#“xr‹G+êùo)Då×ÌkDg;¤O¡'•ÂnúŒ+òïͱ(,îN„Z…O"_Ìëe‡ß¶¶¤jG*_ãDÊr鲬îê5 å‡&AãIMëOQçÅÈ¡ôs.Üü@‹Ş…OÁ °r´±h‰P֯΢»¬•î±TOW(o4|7/¨1§ÔÚûŒWU,t]±­?Aü1iŰÂ?mBo®OoÙkÌs¤6º!¼~8P›ZR?aî*“ûÃ^û‚9qG¨ªßO¿î„ͳÀëEkfãÇ©˜¼ÕqY²öû1FÇ·Cq£sJ-sôv­ xûº5©8§ëhÌÎ{/«â-|X%{}¹E+r² Yj»­|§g˜oKÕÅ^|­S˜‡µË²ıa´N­½€µ1ìCÚRpñh'=ğjãk%IvSjÑêBú(G¼´‚¿^X1(&غҽŠ*z$³@ìF|´ì8L§>GÀ¯!ñ6gßzPWçZjÉ­’¬³k¸Ãq-^\®³äK~¤ï¡<ÇQ­+†“Õ Z6}~óÂMÿÍC·ëcJFÎ^6{§¾ȩ̈ѱ”ÕÂè¦,««ôÈVÓ¬/Oô+$0”ÈæCÅ&‘”ÕPÔĞÌwü˜äAyßÊébË}ßÌ~*?‰¶À‡ÿYùRòC‘ë-æ¼yjiPUf×ä÷η DÍEçÖ<}T'`ÑçT¼í—#Xt„гãš,P3N¯Ş¬ÏHÕßÄ·±%»JM}jÙ(E›-Àg#üXØ m¤.’”ı>û²¿Ä /Á(ëõ}4 =›¥ÇÍ{o>'KI^n+Ghå¶A÷Ğûx–øˆî] óVúÅ÷À()Ï ]šö‘Š›c®i³·BöÖİìÛ] ğ‹f8‡ñl¨1·‡¦¹r†áY‘}^­ ü±»h‹ùåëÇQI{ÇßJîË,,O©zóïÁßÈTHii|ÊãÆÑ=*Ÿ4ö5@™4¼’Ï߯g‰¶Ù§§z÷ıHo¤«ÄÊæbÚÎ^½îK=×+É…G9Yy¦y_†­â3+öî#ğK¦öHàıí´×FV‘ªØüCÖÒ˜÷ÆXab¦Y8 ‡‘&:r®ª;2õ«ºº¾ãªÃuõÌ ‰b‰Fµ\|Wbg_D†ÅO(Ö‡éEøKiµiöaáÄe*P ™œ'4óÃŞ/àé‚^`„ˆ3ÚdÖPc¾ª”"ÏtûÖ±¢»uWnòUkÖÈ„ª‰ö}õ ¼]ú Š †Âöp.V–Ô–ª2#¿Ò¡O¤‡ »:º(·Aî–ÓÅ‚N MÀÚáõ[i%ö ¡%Päg–8O*ğôxÊ2½tß–z˜çô4æ"Ø‹Ë[iˆÌ`¼Ê)5ß¶å¢17İpbL‘ıÁ PIª;äü‚¤¬l£7 s ‡àä6IÚ2\¿¨” Ó}Õgy4oÎ ÃŒàpæO?Ğ•‚ı¥½c¬„ãx;ş™í¼ÁÏ#@ê”6嫨«¥j·q?BL_ìË,l(ì2£O«¥´÷«l=î¹JĞ:ËbÖñ¯µ^|¶á:¢ÎÔÍ?“®x|÷Å/#Ès—¨RyïH¿¨ÿsd"¼- òº·òÉ{(øc¡3o¡X–« Cê”ÃñÊq2bM5Z@°7Éşkß§·Õ@úšIóƒ7(ñ/è˜]刭œ–"HéYaóœÎÚëj…B”q‡ß r ‘Ämñ` ğ©¸6ësøÆ\p9³Â~osZ~º_æEØ|¯Fì$©8ØÕë³~fÒ€“4bî‘L仂&#ÿìÍÒ’u(KÓ­Gòn*}Yiªˆ7¦h+6nHs""ºQgÓ§VÑñ3ÖÇ-:ª—Ø_mÆÖ9‚CNÓ5Š$ìı8…[ôGê|:œñûŞè=óIUä.ÎËÔ|qKàä[Ş2q têd *úâ„î¹§ê›eÁG¶T%Ò«óÙmDÜÓBÆTêÙC[à>4ݱ ¿X\ÑÆFჟ¢¥å#´í‘o%u'QÀ't¥ }á<åw$=îëͧx¤ìæ¬A×55Ê÷ݧò5İÔÚø7.…¾ù‘|j/£İÑŸdeNê©eûL‡b~Lñ}L~R #@Õ»kô÷6F‰“f†Î™ÛÜ5-aÚ®óG>W¹Ê&i®KnÙ‡Ò+ª£6¾ˆ¸‡P~ƒgû 0ey²ÇOQÓ—éyÒÕ6U (p—İ*Ö=©]¯j6W÷š´A¯f\Ê•´R£è*nÓR¾÷m!TÈÓÕú6ÉÛtÚËÖ÷oN!¯È†'òR©iDä%ù`¦ié„Z:ñ×î6 ³–™¹\禮ZAK[ÿ˜¯© \ºµ ÓB{ß OÌ‘E#ŠŒ¸d]¶‚î¯×q‡Y.·Û£&l´ˆ7Üö-wß&?æG-cúÑpÚ¾ŸIŞıYÛc¬"·ÙÆC˜9ÍâoôÂÛ‹ÉÜy’ÀÍ‚(¿k‚ì›G~svñÛmÈÒ\ïM“FvùMî+"o¶ÓÅsf6ª¦ˆşCPËȬùõıoK&½‰väæª_‡ i·F©WPÎ1“•²äŠCnRK¥Áóö5¦?(!y¼¹É:åL]^`ÌÚ—„ëšl¶Ñƒ– ubœ®”Šè[²ıÛ‰z½×Û?{¾Ù—˜ KÕ- #Ê•4lß´sË›â¾÷S9"”bÖ4ı ‡µĞæŸeÌ©UĞtN˜ßDÄ©~DG‚WÔ0óáøâ ::Z¹C˜|j¬vun›¯¶íÏãYE¤QÑığ)s•…ûc!NÚQaÀ„KÂÚõjü~|*wRzr%Á xÒ4¯£¥mk>e9¸´!®«… &ƒ¤ÈŸ»Š¤¦ó¸}Œµ–*ö4¼¸£#Õ5¯ñ_I͇Ñ<…²áÂwÂ²ÆŞÒ~ê lˆËæª~ğü$ÏŸ2 Ğü$šB®F”ìá8e‰›´`¥ÃvÓ(@s]6×dTâ„!8MûõûÛ»>.™^”/¦q;Ø"ºÏfÙí׳ॺ¼„Ê2oUzµñòT%õ=sz²[å3üå8Ó—Ö£áå80]nƃ¥°Ĭ›ÅÆ=v…`Y7ߪ}»jt³¸Ú.@şF#‡¤ü¢ c[dô¥“uÅ·t:䱨“Œ¹†œæ|1ìáY’ç‚írnjÙ™d ¾E;g8ß<Î Øße~Rñ‡_Ê;?5 ~¦­´”1êhjô¯õT=‚7 PØşjbt¯ä]t¶bqÁnÑêØ0š™N\ ¦¾¤ş'w‰‚Gì÷½<„¦b~¡¹é¯ŠuæU¸îY0i`LøÉ¦ç¿uÁ4õ4%”‘¶Cã~㵌–ƒ¦¼–a|ÿ<¡dâå's\’…?&Bg–¸÷ù{JÆ3Ï”×¼âc]±¶Ğ£Ìë¨0פÓxÜ"Ü‘ZB4D&Yõ+H:/•Œr¤`¾,~MFÔ‰0‚ĞŒü‡·Z^£wo ÚÉ´¹ÇxY²ò —6‘“²•œTƒ¦ªäšQ5\°FÅå4[¢æİ/±W@‡òÉÔ;lÜm)}«Á7§¬N]ÈjP³Î;²wjéîŞß2ƒ/@+ß8ãLʆ'@å¦7ií"•Z4µ@Ï \RÔ~ú/“xHÃùĞşQJ{Wïj’¯Y?‘;g¹dNiHÔìÃõòC½×Ÿ¿Ÿ7|ÍTÂFYÇ¥˜üY KIø o!YîŠ-Üœ" [ïœ:].6”¢0=h»ÙlFß!ÍPV».­mo¦ä7­®ë–nª ÛTíq`&bl©dÃ¥ç0à°³K\–ÛüÉ"/ ÖóL¦_xşaùÃÉdc.f^Uڥͨ!ŒïËØ´Üe`„2‹‰#|)ÆÁÔö;;¶ìÎu‰–E@tÇW@¢dÊè̽³ s¢İÊÓ) ¥‚÷ãÚé;]“²ycñÚ-R«Òy§oG/yQ_ Œ2_NõĞô(*İT =È4íI.QR Lú˜:(dÊíÛϾ qh%òX°$¹äHì[ˆñMPïv"Áº¨¤¹+ÇØ‡Ö¸[t[Ô2@X3/jZDÅèoê}0>µ#®)|Jæ*ª-£QæõÀPŠ B`âwF#m«øZşöK°ÄO`Z5Ö¤Ñõ¦~jsùõk9¹©ËØI˜qà•ıÉDzLışhĞÌmq½åвÃ} n'@ˆòTıgËsõª;¸Ú\Ømy~3ë ’ vdåÄüñ*˜cîä‚oñFÅDø„zæÃ‰s#>8wwJã‘Í?¨ı÷íݲKŞs®åjéOl10‡š—Qºş¨Œg;fnö]ë3›}¨õÙ­Ìt?½YoİÄ›ğ^¼ ¼C™„ú–22S¸Å7á ÿ™àC y–iksúX¥×ÑLÅb¾Ö)ÀP;… ñÓ¼páÆ+lÖõ[2Õ"ñÄmz=‰Ñ¡ÌH•œcÀ¤ÖÆ£€`~{ĞÔbo;üFH=×Ôû&?wAˆóCx+L}™ôø­r5q>l#mab‘i›zƒ»5„Î* ´2ˆ(¯ìÓ°¹wÈp:ã øÀ;\›¦X’Ê7 d¤4ŠıhhĞ{ŒØ Öäݽ”¦L-Ü3ÛŠ~S3.„É"Ô„cÎ6wÊèY„ àR'•«öz¶6QËad¤?ŸÅ…h1ÆSó½ùƒôı”Çw‹/f ›òälİk¼T¯VÌ£çôIaƒ\±Ú½g=vf­ ÌŠùRjtP5xO±}²Ğ²u«ä9mp]Ú.h(2]3Ã÷yèBè6í¨£µ'ÔæÑvy’èª-´†-}O˜Lh&gèí|¶D`Je>Òo#cÔá+ıâç!®½¶~e—™‹ZñúMÉ‹6Oœ"A}gÀùnå‹ówy„'öñFé.í£ü¹F©J>ù¤’[pf‰a&xg7Äw\Wµ)Nµ]Ö8ıú1÷ı §•Ågı¿ÆÜKwôÚ<ÏÎNp8 FPͱú€>»ˆÜ]b}Øó—T“&lÉkË1OÒê¬Sy ù’áä˜Çm0æ{úb2¦dû©ŞÇ8Fy³ò—ğØ"µ2wÊŠÊôúÁ´¨ß©dˆå‘‹QfúŞœ¾n[¡‘JÈ—Ô/éPÀ@›¼Ig]Ìì6¾©Ñ8iqîçµ<Á›ÈsÒœ½¨ÍT;Ö’ ”Ç×8 ¨kÁh9Ô©íøª^ïÏÁ¨kõº3¤bÍN5Wñ6–•[i7ï²ğh¦»ÔwÙ™UJÜ:QuX̸iÀo¸02ì[T€$ãsà'E’!K,…7ü¬Å“¹Iä>³Yüæt[nÕ„ 7©¾9•[Kë'‹++.®ì£Îu’Ê8³n"gü™ñ9AşÈ:kÛ.'ó T3ó„ŠiwûjèÍpC æg¯cKS/OH–éZÌz av¨=¹¤I³ô Ì"5êUËG7vâ…8Ä2«K‘tŞù×ãÊAÜò%šYkøÔæşfÔøFø“báø2_ˆâù76?šâ—zí¼Éı|x'@k£‰ºlÈ’ÕÍÚŒ¼tÿ<¶²:³Nô¤Û#ü‚»coη’ÙÙ`²,L뇢dù ~¬’>ÏÙÈçËc%?Âr—¥)/ªVb£e‡†Kµ–•7~Ö§'Ã/ì4´®,ì~ìSK8]Øğ²§Uª3ÒƒkêãS¼AŸú×[ĞÔ¯Ÿ•X3¡6/ÕÖ|AyN âèÓ\¹MÖ¤¹áŸºf­öëw ÉïhebÇ¿ğ¿yßåw†LÅ"ª%Üÿ0ÿıªñ¨¢T¬“:ˆ3”4$…¢g§û²y’lB g}Y:¿ø6 SŸr˜_ #Áß›öég†i€ ‰â=ÇV?(G;X;pVÔŸ‰¹Mæa#Šİ÷Àw¦Nk’E9’îİ«ãºUW *­ş1xVîîgúwA˜WAdèUÙ•ÒîœuSí÷7Œ]‚ûgy(”õû ­´Ñ¥øíÔ¯áÑÚ™®UÜTGğ.ÃúQ$ÂäUçü>—41³Õ†‡OnÔg[}Ó ÕÍ(ÛÁRÌAvP²ÊÔ}ÌŠCôv;:^½ŸÊ¶î„á|ªVò«Ó^ìş _AÊ9dK|„íÍ/CûÊí0‰¬TÈÌ<2|NOÅEñÉpÀÑËCò ù+½›`ò7áö×>ˆCšo¾>*ã…?câ(^GÁÁJØ$Jj=g†ù€“·»İ²ÆºD¡írCpìëºs¦<@¿{c]¢s£^^è'+…ÑÚåò¾DÙ0µ+°Ôºz½-%” Õ„eşFÓÔÎÔ« ŒöáØêEÆR3ot‰}í½õ¿”¥™óóFrÁ¯v“ÔÑUõ…•GNökê* ܲ6TºoÎ"ãà` Ù´Îg¿‰£9_™ÄR£¬ÌÍ^‡†—©fÚÒÃõG<"K>ñZÍÜk İ›ï‰ E€ãT°ü‚…UIãÂ['ŸP÷ög±èDJWè©ëO.=Oó*ZŞ’)s+A‹\—”í*6D³ïËÑ;÷š¢hBy¹êÕI-áFMóÄ•i‹%8ä·?‡WeÔæ©¡3]`;óğG1»mUewSR lYFÙ+Ù‡î|¨oˆOíû‘9·MX=ˆ9%2fxZ2#[v NÌ„ê±o>•.ì 9ü,Ú!Å“:sĞ5%¨ÁÖÉ7Z°Tä×ÎõÍÃUì|»Ï¢h¶@Úô‚Nçcwe><- îzøÖÔã‰Ä…İêË[dĞI~å&ğİ™n Í\ù“cL‚P†Ÿ óœ'C!fí6—Ş|4×ø'Ü%&#½·tDdeߦg8ZL‡K_%úû´>q¢d=?#Â|Mê"5ı)^Ê™lÂÆ–”b})U4œYªŠàÃ!şuo‰œ ûuÀİOµ—[{ş'Lmš›–µƒğhTMŒÄå«E‰,áà¶À(« åR‘· £”b¸¾¥^ş];8fW·EFqå’­ó㹋j«¬m ÃW‘xù¢ª*éËrJe ÊSNÜ©¾ƒ¨+qN”dfÈsŒ€ìűp±ˆÒ¡>N1¨ÍvøO=ZŸ=E¦bİT3›)@Yó´\‰j‚R%«TьΪ¯/ÔÛİT|c8Y´óâa Oy01ÖúN¿ĞÅ]ÙÒÊ㋜y»n39ª½ƒz|v»jµVM¯kj;Â'¦B³ŒÒÏdZ †´å(Fte µ[‹Ñ?D‰rö¢d°©Ğ»\m‹J-Âà [Aï™CæE¢GÂÊçş•‚Å}t¦w2W­Oö‘øæ öB¥Hƒœ¯É™Ò¶½r´AIÁ˜îV|€ğzf–"3rú9–`kÇ»*"„h…ö,îJ;/}6v ˺‡fm9¦6æÖëªÛU“{œò‘ıtH½Á?ˆ•\á™FÉ;¤Õ;,± ¨†Ÿ¨Õh¤3KCïú¤0‘°Za®cN„%[¢UÙl7èÀ.8/56H6áO@IÖK· ¸m›ıg¥¬¸~ÀUŞE†˜÷t@"Ó »‰]ìŒ7¨[N*chïvyR1İWˆLÏ)lX7—B%ø ° k…ä+º4]ÍÇ„{µcö(ç+Ü*2ùa£Âf÷’¸¼U¿øp!s~"ÒÕáö(kÍÛØ×¸b»ÓöO£faäm“C`<ÂF©X½ìÛQİsZII¨=ÒÇRSözÛ àÖbmKJ`ù :¢É%vÒRs‡Kv>ef4²wœ¼*¬:2~÷Zc `Ñ!ÓÒ5á´¥ Ï aä®fÒ÷ ÊVPm-ïuS{Ş&o|µE†%¢‘¼ªº_š Ê0(À¢j+w©Ó*ÊâÍDçVcÃ5Î^§yøY¯¼³¬şÙ{GX„¤·‘¯ Á±–? ´“¼dŞE`?Ÿ¿÷ğœàmrìİzÄêpÁåQ:ï—VÆ ÇõÊ}¦‘ÓÄB¸Xê˜åŒ•yb©RQjƒ˜K&Ô¬ 3ú9ç>b^.DåiŸ®(ãÙÒP‚š;·¦‘‡¹ZœÖü¨`KD CƒÒÏ\í9ZsL=IW]~Ö/%¥+Q¸©;BX›‘ˆ®(W•/K×ÁŠÖ .u¹Ğo^!¯ï›A»ySN;Çœ½ -ï‹AF6{ ¼ƒ§üj2Uòq{=8_°-¾--Èa lÂ%⡆1˜0B*MF*ôş‡Qcğ%&»§Ô÷#>ó»¸*@#ôgºDЏB¹dV_èˆ=š^0ÊÏJ éx»¼)ßG‚]S\ÈíÔñ†·ª'×󑬧ŞÅFy)v¡½“$›æ u,üq]ú5o¨³ë.ÍÛsReÀ킽Áå]˜Y±Øsw)h ‘´œÒf¸ŞJ]@$õ÷Íë½ù¦´wÛï˜fÒ—y H C%:²DmÛErP‘¦x¿¬¸(¾‰ZN™²DºŞL“ˆÿ¨YâœR4_‚™…z˜ÙFñiWAchË­C†¬]Ö,B©zK&å¯ßQuXE;7׺Cø‘4l=¯söô5T]Åè æ÷$!$™E¼NÌpÊ’X¾ßùóe½»ªÒû=Û‘‘Í "DIV·¹Ir ‹n ‚ûp‘ì9YÁ8 –~Á(MC®(SÉwlŒ!Rj+£t©(ƒÅ:‘ o%V˜ñş+%Õ}u/“ŞP‘³>Í+»bP0—9sˆäå$:«^ØÃ¬¬¹€ıXeŞ·Ä_<‰Ôßìø4ä&óŞ‹£} ·²@&LJ°(¿ø şò϶İÔv£ö[#1••ò|˜`É£³İ©¦ øŒ¦aRºS¦O-Ôõ}sq"@ß+:ˆp$Ó6‹‘)ô\ƲW kµŒ[-"Ò :¡:åúP~D‚Y¢­>dëÕÉÂL½N¸2¢¸NõwiK 2Í$ğÖ~!ùJ:´ŸË@abïœÇIÖÆçжïúmİɳ¿Æïa`Î},˜¹š^^5øóùa”`ß5¾d3$R ¯Ç)Ú˜OzøÊw²`Ê`3è-úÍI”jÛNße„‘¥JB29 2rğÈu‰ &ısßÑ*x[CÕ›7†eã ÌÒÆÓûkü›»ÅNÃfúIr6&Rÿ˜3` ÕmîòA¤7eÓŒg›ôg¨ïí©"¾ä2,.¦$e.µê 0C(ó’¿œµó„ú·.¸Èß²(vú¹Zök‘¥Îª”Ñx—iâS2È5ÙbhÈ[?ÂJ§>¾v¸ÿ*e ‡Ï7ˆj¦Rù½ä¸¢£öì»#Qã[ Šz5„ÿäòn¡”Áa§ÉÀ·ú@ğÔÁEø3 Ú;h"õ9İ›ÆeŞ¢÷FÆxŸ‚•ƒmÍJׄGİ9áÏp³V»;ô;Q$ğbĵ©œØ[š¼OáÑ{€ÑJ™OunK[·ışëÜîªCƒ@İûÏKâ«Â Ô“düõÌeü®röz‰·êé|Û6Ùp}†Y¯Tv€Ãn!MÑ£ _z%ïÄ`G{-ÌáĞG£tñ4]Ã¥ûpn7EÂ>'¦“ûœä¨ˆ&âÖí• }„R}焜ñöÇ!Y"ÊÃÒ§´f$wg@ĞV•P›Ó’ÊlÚ¤Õ+¿×˜U::AÁ .==ópİç9Ğî,^¹':l²-Ñ“;·Ìú;´z vW”LNÕ+’3b}·£ï„f<~ršM-%ÉH»#x¾i-8izlâƒAß&P7õ,Ÿù’©•³ì¶Å|‡B†II_1‹F~£^–9¼Oó³Ë‚ãõşŠ›í·@“Ó»!İ@¹¨Œƒ“Ğn]ù¡ÊÉÅ·føëpöğ¶«Ùtoœ=àT|¸HgpcަF µ=l[j™›{¬¾ê7d€3g¿ ŒDlަ²Äà±ıÀºa9áO U³gªj|=GÕˆõ€ëX…ÿãÇ—æªJR£ŠÌèõ¦ü÷Q%ì y¸äö˕ޟ_ªrSÔ˜Mp‰ŒèôÁ4 øœsdɾ hù~¦I¶¥µR2/¼½»ÌÁì°M‰<7võpö2Â2“¦ü\¾ÏéÍMÂ1q>Rö±åW%(¢^&âD/Dõ±ŒûÈrWõB=C®$¬P&YJ·°Ó¶Ùœ¨jêğÔ×î®ÜŞWˆb¤6%HĞÑêáÍDï4$@ô³»BRşüUÙ¬ĞÕÕçƒ.“+k²ÁÂ.ÜÕ.ZqÆ 5'Òî"¥„&Ê‹Óm‡“是.âü>v†fÓ˾/á`÷•ÂJ¬ñõ,\vG?>%şÜy:нÒáÖ:ûĞ[É~jÛç£xHûÀ?‹+îŒG'©ZÂ77¡ııAåRÆã$ÁƒVS™ŠtæúbG›ôu"zùó(’‰p/Ô¸wDÙa;·yÃOÙRç(FßO5M‚E>p9DTÑ´Qo(5ÃÖÕ~{¥-OΖÚyÌE «B‹Œ@ì×މ²6ÿîûae¯pGÁ ×&şêBü¥é‡á|ş’ß[Ş35t%}_©'1XæôzÊş\Bä7W§ù‰½Oزo‰¦Òr£Xã–2ayÌûͧŒ—«~£¤Å|÷ìhÜ`gÂ}¢åP_屌âÏÕ7wó|n7ó)0QpõÑ””>Y÷› µ‰—½âÔGíš ª#;ÒÃ8VU9Ö–êŸE3?YsÚ}eß œ»Ù·¦t Ì<åØzܽy¡şâcq6Ên……O‰ —Ú$“˜'‡ßp…/w& Ú–=¯¹] @~¾0Ö¡¡NЧÓ‹‡ ü\MÅ]‚ˆ }ÄØÃm£—sœ+;9iñæ’»`v)¾§¤A¯¯¨5âå°o~¶ÜÛş=úÒåš!唼 &qDζ1¾‡¸?ÀgLnädÁßıaï¤&ÎÍ.şW[¶ÅÇ›vTO/~I/[¢ïL¶Ñ0HÇ;”µ°/rSZ©,iª=ZR²ÆqÌ3ULÂü&E ñ¨¹+2ägo‡øêáWÙ>)×W¬»èÔ­kû^a˜D r”fa$\ë,NÒ2/ Íš$àyÚ8ÈÿL@3CõóÌ„w¢dåÉ>Ÿ˜¼_d¬98»é~«`„•ÿIÒúb€çğAùå‡&1œ}ͶçsŠØl¢^/ÃfاX¨ÅğŞ5oª”—Š›Ï"xqçŠ)(Û÷ªÒ—*¸ÿ@ƒ=_ˆ¯˜€›CGâ«"D«“&d_¿»šÑ½`ÛÚz ޹¼hË3›RÉK›nó[“Vròš„U ¬EMSȲsƒíµ†©<8{Kr=ø6ùsa•pÿÀTˆ8\¹á­ú{]„`LK©üWÖuÛÖ›BÅ[ÂHïI¥°ÄÁé]²cÀ°RÊRïWoğP5á&Nœº}¬¬5‚aj3; Se¶…,+d'Wœ¡zÁIõ ¨ŠJğK¨SÔBÖT‡® 'îZëm0>Üå…Ù¦nÒÙK?ئğzÀÅ«è µw½¶Üı\Ügõ©ö.v€¹\€Ò2ÜRb¸ä’Á·2 Út¥e{ÒNÊÇCx¨[±[æñ^>İ‚’¤æ¤I¯Œ8& RuÌ™taÖ„5ñ¦9:ŸDÂìƒàGÃù­eñøÜª=´qÜ^•ƒ¸úm:º™åG·ÛfñÆıŸKñ3.ˆòZ2Ô ªÃ7 ¿Z'Íhãr €ùcl&ÛV8‡1G2Áu\™ ²1¸#Fv¶Jæ¡-­¼V¨«X!µ‡ª84%èû𨦭Ö(ÿş%uö—Âï› \æ™è½’›%n ´ÕZ¹Ú^™ª2_³õvÃ^¸³­9o£{ãâôKúçˆô"x3¥Fgìæ¢rC¬ŒÕR•ê½=’•u%ª¨|Ï\AÜC™ôBL±¢±êlQ¼xkİ?×™ª9œH»h¿h8[t¨kwpúåìs»T3+!.9V`S+‡Â«]¶9dΩÁx{ò°™¶{£¬:?Nk `:"›€fŠ‰Ù nLjƒŸªŒ:C°nDÆD™÷\ÙDÔ]{ Õ}fÆ!³õ2cí6(\RÒ¥ä­n”Š|o óİSºÛFި©5µ›Ä=ıû; E¸S)˜Lk¸ÿ'2Íè Dâú=Ô /oØOñ…=<„#gÍöKèqdÍÙ—c%ğŞ‹Ubåù7ÜŒ(Å`Á± Ë‚E'|şIİM½ !Í‘ ³/å/¶MqrÉ¡3Ü€tg¢‘5ÚÒS\9Õ½5+å&+íø} zæ M…šw${šo¾¬“°ÿª8œgê?44 ’¼­®2ÂÁXo×I“ÒÒ)Tv$Î,w›ú 7«Ø.̯NË‘3”Ï륫Ò6(K*1iä*¨‘utÉ)mâÓÅl(E¢ØuPc4I¤¦+ I«ëò6´Öô…N­ûÚÉ%ÃíÔ îšçvX wÌ! Á¡’>2á´ciï4é-Ô˜]y~öiE50ÀHéŞbšk.{à·âƒ¾‰A\1ƇšÁ«`ÎâZ`,£CÂô™‚­½vÕÚ†ó3푆¡}Û8›|Îq¹€†ãr+¬zı¹¸¤™ÒœÅñXôySŸ”Á¬™Ì˜‹àpàî·ÆÒl Ñ‘‚çõ8¨şsigëğTÕBıE˜s:£!á7×Kö¿{É3S¹#8.uä1!âTz·W@Õ¶E.F‹Ø•W©,¥i#K¬êúÓ%S(]+³s†Ş´î­R7kg•†Pí|7jØÊJ2ˆ+7÷ä¿/UIØLå}Õ-µÈ«3¦¿&ÙñÈWQú®$ZdïyeÙÀ“Ic]EŒÙ­\ê%ÚR5j‚M5ǪJÇ£l¢CÃómnD­'¾G¤¢×9h/#uH§´Š_?Õ ö åK{ GøA„O |´§œg¢ö©0$¹$h“E:>Š1Gªä³FòÏÇ÷t¸>PøÌ{_°½¦ÖSäÎÚEŞŸ© ™ÎÇìÕÛç=¢•»y,õ@T+_kܰŠx¿˜,±çü³—Oô8O5uFÃJiºQôÆ:°óY7íÌT”ànÍ/¥[äØŠå-n|ÂbúĞÒ ÍTİ®é‚KMJŒ[!ÇÂÿ‚%Ô zÎV7jLşÄ’NşM¨^ùÂ@ëy.³ä )Y°¿Fг)£}J‡OÃ7O²e¬ìÉúDã¡+cZ‘Î #a‘”SaŠÄJïU@ľ ‚¸DD/¶ ZÈØ®§9ğ¬eıÖÉ‘'ss¯rô´ïc/LˆFÚ¨§©±a­b£ëÏáû—BÑàôœô$ÇôÆ€ ’äa4gEè!ïİş¡&d, Ú¼2KeÎG‚Ü÷6ƒQú_²€= )Ò@8ÂÕg‡!©JsPæøÿlH…ÎÔŒ^§„jËmÄâ_ $¼pœæ¢‚ñŠıÙx⦰TäÉ-Ø%Æ5 ¢8~”7¸‡¢mşwAµÕöÚ c \ÍÀh'Jaşğ!Îké%a ”,óº®5O3çİcª(eLºÓ(Î~YÜä°`äQ"@ÖNrëğ Nsõë#^£o&‡ä¿&ŒI…$À‹+Ó¤œù¦äsºiŸ–[‚GÒö­,ş-®AJͤ´d½`\[ c¹[æ_¹eÒ?Nd¸ÁØ]"/Y¦Ü)¹¾¹˜C•m,A"Yş ï EË~¾t¢‹iéåY—ÒSô~‹`ş.>…ó)øìm„yg„Dï%…S¦Œ%åDönNo›Ê ƒ8û[êÌRñ®qxN˜ :fƒN–PªÊıÀ×®Ãï̓ˆ£0wÇ`kwâǢΩŠO£Û8´ÓŞ<Ô$èl¬&í#£¨½`|á/¿Š‡­Äœ¢ ^ëïȶ*3âôNd°¾ÑM0£¬–nÁWÁ[A„aÛ |¥R@Q²İä$¸£áËS_pñ½J5¦Êòç ¾çGá˜õ÷ÙjÕ‡Rñ("«iş¿‚Ó+¥øĞs±ÚÚxæÍÍ¢é ¸]ÌĞɲٳş¿’`×c3ğ© Tª ‹Ä+q½5!g&sï1–ت$†MäV(¬ÖQp ÛkÇÑ*áyçŒÑ‡kÌB8ë?¼7én˜*³ü^Ü“şÀÈDšòn0²#_As–áê~OMe&_ÌUQÒ!õŠëÔe\’ WElühÑÌ–I²5ˆÜi¿dÿ²ö¢]›ë>ê¢ÜCä ¨#/‘÷C=·Ø©Ú5Nçòq…1HÜ7Yk'½ 7{ÙQ¢uóãí [¬Ë›äà¸PCjÂXš/‰ãOôcß=±l¹Ğ™Û‘WGÎ嫼”Iq—¥.{0Uãц»İ}ŸÉĞy—i OË,"ä"bŸÖ[«tˆ‡“*Ï"¥œ¥Z‡{#9ªÌĞ‚±)ûÕá Í-kÿôU¨¬ CkxY8t^sÔÁ@¬ãDan ¡ÉğÄm !¾= 0<Œ¢‚£÷£‰|–€kg¶ íê9‰Å.™Ì•]Óã¼*%î›íµÖ”Ìİ)hé—õ&0.Ã~«¾ëÃï{¼²p0ã l±Œ)­®IÓeÿ£òu]t_ wY¥i}ı+¶ÅâŞ[ˆúß¾vtè¿l¿ £éû𖩝e+‚^˜ŞÌ¼£yt,QüÎÛ§ç®¶1§uiM„ü R/µêŒqwLÄÏê©"&È¿$o×äİ'¯ÿMY[8 †ºæN\DŞåù‡†bï 6¨û¯¡ |ê³X ùõî ™“óÂK¨Â5£K³ubëĞa×'bµÇœ~z¬,*È©DÆ;ærK!'ú>sÑ3s¯ïE'ѶÅÙdŒ–Џìã0ş’ùùá$’5m¡£¤…y¬¦Ÿ.ÕÏú{8„¿ã¦5RiùÔx¯¥2£²°¼“iub³4…É>DæÖøÖ›p%½ÎÀ™K¯sMŸ–ó") )õ±Ç¶öï;ˆ¢ÉùÖÁı4ƒnùÔº¤@ş6„Ó~ àıÀUpTm- Ù´^"iÖ¹Œs–7rbÚ󿻄·<Ş=^Åñæ>ÁÏØ•™â¨`ÃwzÓŞSúßrH+ݧe‰È‡1M¬e½]à¼HÃò\óÀ\Ÿ¡/J‡ Ë#ƒ,‚ÒÈ5t¬ııÛÃô†3àìa›–E;fÕ¸Á•Î{¶WÒhcûBÕ"{E݉K@Á¹pfJIe\¼èf^Öb‡ô¥L¹¨OE3³õøÈô¢Ô3c`l‡äõóܶw¼ä»ĞCß!_­üûÊEÎÃÔwó—cºd= n±œÃ¬¿ü¢ Äıø0€LŸŠx,Íí5‚Öô•¦«5†_ÖF)d¸BQïvT~.'Xæ\uÖãœg–Ùô'ŠfQ’gg®¼²ˆ$ş££¥}ᮣlÙáÑ^ïæó¢¬9€9>¾?/c‹½¬Åò#Ú௡‹ñ89ùވË÷mÅjnK$ÿ lf>:tÅEuyÊÁ嶇õŒ/‡Á8¥Q·~¨â`‘ÈÂ:êñ/såFÓ®‡÷¤Ë‡K¡Kñ€>2µ33Ö »ö¤º±`fb²åf ÙZ§m)î-ßñÁ0¾eõª‘˯ÁÕ~‡ß³ æJX~y©H묪¤³ÊD£@ 5À¡€TÕ´"ÖB vа—m¿ù!ƒzv¢-EŞE£©Ò-İ^V˜á›Ğ'a@0zî¯bö]V'RŞ_¾š#汃ŸÜàh`ìˇ§.Yšùà­ı™½Ã¾ƒùşáQ{ÀyŸ&ô°+Bqóá‚oŠRbjm±c}h `ÃC²vãÔ¯\”[NŒš6©÷ıÉòQ¸å:œ<¶* MXĞ=ã€D"`"DËùå õz­šóF—C¢ü ÅEj¿$;-¿Î„ă¹¨òÄôm]LÂ)ÙÓ¾5å­)°ŞŸSü¬+ö×ÌHW K\şËô>¾ú¾òÇ’Ö–Û5n)êÛ?ÔˆPàgÜ[7†hBݤ«øç% _€£’yÅúmtWñx$|¿‹+úC{>™:LõÖÔÔå…ÿ%òMØj`÷€’Z‘²¡ÀN¶‚3ıya0©(‘ $T›ªvyÕË=¦.èÂ2%zıa¸kׯK¹œ‹–çN¥¦»v…7CjPmfÍ55}u³îã+·SIé'Îd…Ó±S6ƒ7à «¿4Ó CÇ&î Ó:!µıŰŒO ŞÎÕbÈŸ”cITWKNxN}ok¹V¯›|ädΗó4KÎ(i„WÕÄè²g"ã£)¾\ÑöCË0"û%‡ûŒnó|úHn ذ@H†ÊX¾3û!µú)Øç‚?ı¢é;8ÓQOkhØ#ó7®ˆË5†Jù€ͧ‚P»"L+­öû2k ÔÙ×ÑL\r¾Æ‹c&n¾9İ¥H.Éô!õbâiŞjG"ÜYaVi ¨F!W‡ 3=È?ÓÍTö?¦Âô¯N ş{¢lX÷è]˜*Õ“rsnkÈ3ÖË00G{'U†š-›PlT>)Reñ¿K?Oc©öl²M¦Põ²âkKÉÓ 3Ì=âËv½×¢j®`  ^Ùù|(öVXeU¸ª°ÎSÃ-¢ü ÏgQ€åñ€Æ<Ğ¥şt¼,nÔÓQµÆ}.zhÈjt‡f¡ºW«¸ß´°é-ºñšèOS·.ú÷Rvß|O[ Ÿ7óœ¤<­Õrø¯™„£|Õ¶ÿ£±ÍmÀÚGö./Nş´|¯¨=×DV—¤QÒ›aV0¹ÈxG;ÛDd`—5j;±-£Ì£“ÌbH8Ímò ³7FPÛf˜`·³å;¹–XKfpøsgч9'_±-ğöÊMo½–Mº¨¹˜eB\»Z®„$ËQM,$^\E?ZË3sQùÍo$™åâ•q#ı¬nFÔÏ$J|ã%&°r,. 3LtëÂ'I¾¤~šŞ‰ùğømÛ*2ctD{ÜkíxÁ¨XûéUÕ$|¨¢N* Wwnt€õµÎRaÏܯø×Ò5qÛ¿"aÜN΢àzÃ<{5ïBTw´áı觇(ÂHKgâPŸÖ1"¯q2KS< S·ıÖc?~uKõ5Ò}T×,MhÛ×bfÁ–I¾‰R‚B¦Ü »Öxt੟U4'¥[ÂiSY«a]l€M"' K™è™É|ı­äâӺɤ4›w!¹+O¯ä;¯†ğE@¨€ÉØ[8ş0Å(`dzYî´ùCv^ÄD¬’ .Âå)ù|Û)"cG¥‰,ô¡Ù— –Ğ€j è̸ˆÚHè²`ªæÔÅ€H| Ä{éÁœécÖ–±´‚êY=‡îø¿dÁ†œKxc…K©BZ`³ÊUY x"bXÎ¥ü‚5«É•Ä¡\¿ D‰;>¹¼u¦ˆ¶İFD:]#àšL kq䇡j­!¬*šeš«ŠcØ® 6‘Bí·ù§‰æ»e­t3?&ìŸê¢* Ê)Ù@İKUPâ™[AAÙ<<ѓ˟ş¼›ì¸*jrúãëÎeÁ÷¢“¼w'13ö0„gS× †‰l©E*É’Óá:S”9°Šy@]×é@!ú{yæÚÒ{OJEM_¾ÿy¦ŞæIzUœLëS:¬t((ndœésÉú)°ª¡Ë:z(w3v‘„sŒ8ğçÿ¾46õŞæT‹̳\dXÓsú5QñUù °óÍ­eR‡PŒ%1 _p«4}¨Õ ¢NXTè¼d&bÎ5nyçêmÔô®\1ØPBæÊºB Ò%—wuïU×À¢AD[›äàñÖx`  (öù[¦€È3ª¨¬œ¨¢÷¢®.ÔáÚË!PM.AUp÷ãØï×Ńø9õâäßÔ¿÷‹„”r$$y_³ÂSU»N«êåÁH›%bÏc¾ëe©Ä°Î…ığ?Æj¤zmH;“qÏ•"Ú)±.|‹¶Ÿ$õH¾3¬©‹S.0ßõ;Úâí‡Î>v»öUüâ©¢l¹‚lÑ0$Æ»?[•&Ú‚ûy±GOnMô¸‚Ü Ûäa[Il–f«» Ùbd¿8;aÆÇ¿!ÑÅğáF í1ÇIT0®Z ­ÿcPÓÜ;k^Ji§{¥²-Ø«ìHD,!±$j¬¥# Υk¼¢Cª6wº¤7Ò¾®ºüøyå#Ê Ê8>!ÏšÇàE䆷UfßñtåqYö‰c©°Ÿ4uD§Î½KÓii™ü…F!Ñ †’…¡æ u¥à:â›æ'o„ºHÌJ×ÑÊ“D]€…íùßÒ¬*æ_.sàÙ¸uáØgÜ]í¨"·3úé¢T1Ï~'1iËÉ­DTÓ…óÚõÎŪG¹µ·sú‚è§Ä€~ïu=0uÄ£Ù%ËÙ¿]©¸tKÎ÷–»ù‰‘zW}—à™:á×ìOr ‘^ÈWÁ•PÚõã‘åVê+ğ@WôáCø%Ïd¬V“åH.~ˆ‚ëÁøšW]Ë+F¿´4/4ÃÊ×5ºíSŸ´:óòY¡q‰íÛ >ü\=]V¦­Õ­Æµ!«D¤ø¶Cl¼å‹â€üLAÆA²M‚Rìø¢¤Ñ. =”«ÎÚH®  :`à$S®Í+¡–oN££÷@DfO*ÍÛ÷ºÒHs‹û̇şA%l}»ÉSëwŠÌ•äÈÊüšŒùär«|Ú{ÙlºÿĞîã^`œ*tTğ}%¶³Ó¶yw] £ÖË|ÒEÇÜ ëw9ùy¼¦½]Ïìhܬ7ƒï¼ Åáêå°ÖùèÚ‘ˆÍߪ%¡lÔëÏ~vW¦Ù ìRşM{¡Óf‰ˆ)r•;¾v·¤7£Á]5\‰×܇&ïI_îãêS‡l¢÷ì¨{šÍ{1•è-PÊ~Â40Ô¯tïğ¸¶ß ë5=7ø½0.Bß Ï<["´·šQLzŠMºæ«i8”0(‚Ñæ‹æFÇX:Œ…ÈDµ´¿[¼F¬d±‚*H€Ş?´‘„vÔğ¤*+8^ƒm̼Îk‰I…#Û‚¾ˆD/Şõ endstream endobj 2331 0 obj << /Length1 1559 /Length2 2982 /Length3 0 /Length 3969 /Filter /FlateDecode >> stream xÚT 8ÔkûmdKR–øÙ—˜&ÊØÉ¾D¨Œ™ß0™ÍÌ0d9¶BBöµ’¥¨D$ËéD²†$äEÙ‰²ßêtşÿëú¾k®kfîg}ï罟WZÜÒF …%»‚d] !]3[[¸2ƒ©@`0eii[<ş°sHŸ©4<™„üG„.DÓ™6=4hF&&^®À ájH P†Á4~’©H@íÇfÀ„LiÒºdŠ/ïæNgöùñÃÈp 5ÅÍtE©x š˜¡éî ‘Ùƒ&6d ¤ûşVBNÓN§ ¡PƒAi2Õ혼"ÀÀÓİkR½A,°A0GÁ-jiÀÖOûî°!ãè 4˜’hÌ/¤Ì)`AI߃M¿([ÃàøÏr[Ù…ğ¤Íd4C&RĞ$_<É Àá `a` ¡ûĞ4 »ˆ&ĞÈÌ|´7O@»26 PVšÉp‹ CÅSè4 OØàİ(ó> «K&AƱq>=<Ä0çî ݺ\™Aòûpx·AëEÚ‘ğ^ ±ŞV ÓÄñËæÒ SWQ@OôÁ¸C7ØúRÀM'|ÃÌäàG!S“€ÇÌ?ÚèT/0ÀïŸß`ñ:à ºáI¿ª3Í î;fŞ?ï8Á˜òƒ°Ïϧ™ Ã’Iß_á›W Õ=am`owx‹òO§ÙğS‚JÊ*ªBY8¢~¯ò“ÿî›VK4~ël°_õŒI82 ñsv?hxoéBnkiäß;˜“™j¹_âw†!`æü^Í”ÿOùUş«øÿ}"/aÓ/÷=àÿøÑD<Áw+‚©f/:s3ÌÈÌı ı;Ôü¾Îf ïEü·×˜fnŠäFø9H<Íïb-ñtŒû¦b~\³:O-É4üÆ{(Áa°ù˜+‡ñ`¾)4æemº@æFıŞQŸ„!c7VOq@S©h_S_Êàgî(ôÙ”6…Ètf ÀdàÈT+=¢@õ7L›HM€ÿDêÊÔú'ÒP è_ˆ™‡ù‰6NÅşÂ(øª (É‹èº!7Ò¯(¸*¥ş ô@f?¯_P™ÙÁgşÆãE¥2Ÿ†M‰2‡óo¾C èb8z_‘1GÃÎİ{¼t%ÌPzߦ¬ÊÕ0ia·ı;}Aï1«]ÍåO*×£^£ê^F-¿å›PÎ_èá ó83蟅è}ğxÎuDÑÿŸÖÊÍÔKyôDm­£‹ ë&0SaİÈXĞî’? è9÷¾;ı£¡¦LEñ—;î3»dË'!œ¬m—£vTWWád «F¥WëÜCu½¬1–¢Ík·MÅ2ø¸œR߬Œnè+T܆J碜XH?–üáÉ¡./€.éwOô®ÆÊ…,< –s¥µXÆŞTÂÙÎ?œ¸ée!L­˜ºÿΨ½è¶òHçñ[ëIµ07§¸÷>Sİņ©Êå»c-åkRÒx¨ãVÜúùæqÉS4ílc?‡Ú9YѶW=v/ääUàÁûSÖݱüõ«s Ó¹wwDDͯ¼ö_É¡hg˜––4ñ|b.áüâ¼d]ÓPöêßr>Ã;\O%Ãp3b1_rsßä@îNæ9 (¬’?uqKÍ`¨ÆõÏu-P›ÏT\ËÚ!ƒ1ºRÕ7f† ,=’EL¥{sbUøÂ¦öM[dÅÕ%xæH«,ãSY82ù "Ã4°w&µ·ŸåıtÙjåš­½KsNW| 4z§İçiRÈ¿‚,"ÁÓ¾Ón=ïQÉ£„¼rgÄ!f»2mê‹ï%ݤ¯“UHg‘ÒÊğ€Á¢S1˜ï{9ä]ÆUŠj|©óIÄÿç ”Ph¶dñ+]ûFö·vkOíÉ9‡ZÀ‘õé>ëtÙ½3lVw¾ÂC1NÜzÛ…“\‘ı”Ä’YÖ)ZØ“Ë_mRê”¶ú®Ò|RgG>›ĞÃu,û_Ë/Ëÿúr®_LS审KuQˆh”Ñk¸:%W´ˆ9dŞîåuálÄŒ”CÉÙşn9cƒË(N3­F"ÆF¸ÂëÜ 9÷Ìt8Eé X È„öãl#(Фä#şä9MPWßì76+^¾u ¶=Øh·årnSû;9½;ݺq!íÎXı› Ó%Iz¸è£}³î©;ô’/QDo†$¹KÇPÕ¢k'zCÖihe°øÛyØXG\ºCª—b‚G ÌùiöÇ»*³5“;fN¦$¼’Ú·¼Ï±íóùª”ÒQ"øípP–ƒZí|ùëGÑ où £FşH=İºÇØ?S¢Z2Ù™ë¨ËPC{꣸ãÓl¼Z.U¤=±~-ìDøÍ7[dz4éãÄ“‹œ.ƒ+ …{–ÃÔ‹BWOÇçrG8÷œCV™ÈOß”. |dãÔhÊj½*%‰ı3÷¤ùúğ(«xÚtD‹ÙG™«É ‚%WF´&°Äb1lï~ü3ÔåSåyûGJ•í™·ÂÂ*È\1ï¶Ù—XEĦ¥¼Y}S0>Ìßt`2Æ‘²ßÔ´1ë|dö1rÈy¡ò:÷ÉõˆB[üTÎåşûÆV”sr_$©}5Eo¢hщZÀîò©q]t×Lız묘±$ŸÙÅu–Ë’Uè ûjõvXööpıâݪ@LǬÙööImÅrVùÜ ùª5¾1ˆªèŞ»t뺇‚CÏmw? Ë/,±v±m¨õå#è’ßue‹K½8–ƒT¢\Øb7qFéV‹/'O³q z1ߪù­Ü[S6ŞmeÓİ\ ¸Î×®Œİ½÷u¶G?Ò.{¶$U› ¦q‡ i-ëëåâ鏸 {ùkªÏCƒñMºõæ…Ü.—¸³MËVİ[S.É‚œ3¸8ucêu{ìx€°Hÿ¼o(íÍŒğù7¹ÎûzŸ5üëDA§_ıéoÜİeK_½.‰ˆØ9EÖ³ÅcÛ®ED”8 Ø?²;²Â7©KŒ·TI¼{½©íÖRÌÙu÷k A¯’{8|¾.ûS™S–¨>ILo>­q‹|ChJûËmØzŞ¢Òs3Ùfÿ$x=ù3y—ó§Q;<ãG¿åÜ ‡º]‘sû|İş˜‰ ÇÛtƒùš#¢!Gƒ¯Æ.†ı«ãwr‚IƒºØìÓ¹0±²¬$Öâ‡Û†:†\Ï$²\}l;„€«¨IZXêۭ̿<Ó¦¤“z<¡ğÁör6Ÿ--pÑûşØƒ]‰ŒÜ‚õ£rå1°Éş>Å—c‚5Zˆ}oDlBÄcñ¶–ó7U›òTõXi冽ޡ¼ÊÜ H¿™l›vçå]áÕz—íáë|Qškš#‚“¢"ã3¨ş ·-Š.¢‘¤·ıŸIB*A§e¶]r§ùmQÜä)¸ÆãU,ş±×³z{]7Ósi×°N˜“Ž÷ã׺÷¶¡t[àRϽKÈ$:ñÍ«OŸ] Eœy…Ï d7oĞ/L)‹º/gÏ{¿š± b¦ÿÕ©9À{!¹5NÊSϯ°ØVĞşÆöëöj·Óü Ôúç=Y~'×üˬÒÄ.‹¸£µı~פ¡‚sטó4¥ğOrù,=0a ³»ŸBµ ?gÅéb;™†<ݻЇš¾)q°X¸p¦#[^A¸Ó©èsĞÓó;ŸE®s³Z‹õ»?°ˆ-áÅ»Í> stream xÚ½Zio9ı®_Á»X<‹0ÀvâÄ;q|ÅÉ`>ÈvÇÖGGùõ[ìf©ÅVK$cÄb¬Wõ^±Xİ’Ò"0Á”–Š)aãÀ0g!,“B»8òL*gp¤“Æù8RL:g*Ãdp2Êùåo­;Jk¼%”sµbÚ ÍÚÔ^[fC`: VĞpÀŒR€(Â3£Áà]Šã5³¯Y4o½eÆéĞ N3ã­C‚™4 8¤ Ì É@™ÚECšàÿƒUí8ğhÑ1ğøÇ{à xß Ê1+<Şc³2Íã$‰ã5tGÍÆ$Ef-ò!%zot8œê#=)Cxœ« ¾ö©4- †ª¬gNáÍRGï4!—ÎXÄĞ€3#•Ú+”ÆG $sè¯4cõ‘:ƒ¡{aK†y)Ò+¼Yšò¥h€qxƒÑK‹jz@!¤E½5ˆa=ÎpH™B‘ˆúkœ¢¤}BG…5Ê&QY”)ïC%¢»8ò,(UG ‘~¤/’fQ =D’P¯˜QA/‘^‹ ":‹—CPºcњȊÌKÌN‹X8BIJ…ÂĞP˜¬è£Õq†W#ߨ>šSq ŒUºTMGMcºÉб‘ᢀ2Îğè—qFÀÀ­@Τ0>椊5U1B©8æ`RJø8àGàâ ².Îä\œas1ª‹kb2âÈãRˆ3lÅÿbΖyƒ÷Å|VÒáUƒ3TL!Ğqqj):¿ıÖá? ÆGÃéËbr;î=NGãNyü®;À+\½şôîò?''GÏ÷»÷fªö÷G?ØŸ/${¡" :†i'şêğ½Ém1œbşâİÇ7Eïş½îğ¯½ñâÑ´Ûïİî ïûÁçÓbp…©Øá×i–ÑxpğĞŸSö/ŞãÃWè‡=œ¤4.zÁÎ:¿ÿşKѼıüúúâ£9Ãğ[£1"…#°Ìí `lXÌßçü%Åùkş†ñ?ø[~ÌOø;şŸòüŒŸó ~ɯøG~Í?ñ.ïN¦Å¸7ù›w§ü†ßŒ»·Ó~ñeJãqDâ·üvÔ ñï`Ğåw¼à¥¼Üu'¼V_gİ>ÿ¿Ä=^şûVğ/xn4ó{şÀ~>>Cäı¿üoŞç>äÃŞ°àÃÙà¦Oz÷C>â#<ñÈ»ãbXºR*GÑÛÑìÏ&ü+ÿ:+&Óúõu6šw7ıòv:¨f”Gõùêä˜Oø¤ôª¨&Å7ôiÒûÁ'ıÇ”OÆEÁ§ßG|Æ¿ñïüÿÉÿáÿãQ.¸^7H—ÃÓƒ7Ÿß—é¢ÚÓצ –%ïŸ'[`e¶`Tr’ò¢‹p[Šû•êåÍU©ˆN‘œŸ >ô&||¼¼øğæªäcE1ÀúW.¬å¸…_æVğz‘±ÈGÅB äşR¥íC¢aÌg`a£`Î^Ç`m{¬ŠJ…Ä ò9Ä÷z¥ø¨e#·I,oöίßîÅXVè†û]ŠwüçˆÅ­.{U‰JU‰ŠÿãR‹·eÁ†MâüôşõÉç×1N¿"?-•wÜUŸ%N»2Î}\°ï°x—Ë´¬[q¡Ş—KµÏcİÌV'•²–¯Æ*UU­ƒW‡ç/ã&wşiÕ.‡ÍÜ‹`£Üس;5 ÈÉv›¶+‰èï7ªú°ªíİñxô}^şË£4L{İ ;}à7İq¹ÅóÍ.m 73ÜEpÇëoûÅíèñçxÊûÅdRmnƒŞwÙ7§U¾ç—¯>¼)9]ÕR[θ8¯ƒÒÕk(£æqÜ4ʃڨԜ^_^ctG«2›d*æ™Ú<ë×tFy_´ØÕ=Q÷©(ï}ª>§÷d{ó ÍbÓR¶*Ô¦<Ù ¨êú§Ó«£ıQ¸‹• -ꆻrùDì‚lRf²ÅùlJ©ÿG;û96´$rÒŞaNßözqÏÕxÚëßÍ%®Ø\]~µ)¾õûhdŞ—£øqÛïb²Ì·©{~?.ºèÅrÂÄB³USy~ª9޽ ïĞŸÛѸXŸtm²oÏ?^VI§V?ÆGM_¢ÀîI·º+~…ivVvq¡/0.·Òy zÅFŠ@³›iyO"Â~wRÄ+Œ_~¼8Ş=Åşu¹Æ2^âhe“öÆ“itŒÅ¨»t š½»éÄ)…Ïé;puôöâğ¬r@µ9 Ÿp@-:[0pqöúä¸t mK.@ÓcW» 6wázïø«Óò5D»n‰È ø-8h¼YÂKø"s z];`6w ñê¢é€T›d¡Û¿ñ,¼„oÈ€EBØ¿ñ칄o›ø 2şİ"¾ß?{\‚÷Ká‡øxP«¿zş×DWb İ/ Cû%0¬ZBWHï·H½æÍ’K¹'ñ…] _oßhş—à—RO/J›£7›ó%x¿IùßÂf“Ùt@/eŸÖ™ÿ[”¾fñäÀRê¼øgµ·¥öœvï‹ v£YìQ:x<Iù=FiùmïnÂşŒß¤à!>¸„ê³ÚL™Ó¦ú¬êzüÚ$~şµˆ÷²2Rµ øY®DeM:6¶ú„" PÑ¿°+?]2îRD^¥O»HHF«Ìïí! ª½)~ñ#¶ÂÙs3dX”Q4pi°!q&‡ŸÌX8BptÆk¸] ɰL‰&qDƒù¿”T JªÄ’¬úñ8HLJC˜v2I" ä:Q*-yaSÆH'vräº'×=a:ægv!P‰äº‰@•ŠTh"WÕ ®_†‚J%º”N,)RFQ+Ğ4p»@YŠÁ‚#LÊñÔ3á ¨] ¨H¤g¦8HÁhbR“éÕó–Péıbü^>¹®)Ç51©¡ß RZh `ˆRM9®‰[í`(—²KSkRFS!Ñ!İcÄfP6ƒ2T}ŒLQª† °I¯4Fì•v;¬9’@‚²eı.PTÇ£¨µ7í,­’ßÃa*vuÌé½â鏸ÆÒjlN‡zº^?=½©~Wü¨½jSsc6¬3 2cmÙ:0 ™±ùìÊ1m³M=[f³WÜ/æ÷ƒ[‹‹ÛÅ7Çå ”££J¹² ¶†Ôk!3æ[݇šyÖÙ2.³-¶LM¼YK¼Î¨Ùf«–Á4d ÙÉV[T¦E»öÙ¶Ñ-³uͯ^˯È81¹¤”·•¤&—T5!kT.ä‚TmËGÕÄ+X;[/:¬ÛˆW5ñJ®³•~"“lµûUË İZ[™(ªMY‹"õZ[YÒ˶ô5ÛbÛiv[š‹šmaÖ¦‡Ê؆,=ÈÍ*=’”¶ ©kH±ÒW R´ˆé[´•ÌU¶Ò[c²¥ÚlAmKå¶hvòK´Í–óÙéˉ¥Ù%6„–2é•~9{ i¿ŸÛZ|o=w¬’€V¬Rğº†lÈ`³poqØÕÄ76Üæl³è°o#¾Ş}Á©µ¶÷Ë~Õ2Xßn+Ín“ÁÖ2ص2@•Ídp™ )d’Á4!kls5˜ ²-\¨eÛ>»rѶ5ñ ÚÃM³ó“+)@«ÖæÔŠ¿®2:o‡d™µƒÖåMEÔÔBš\È9JŪiãÅÔš±nvæ1ÛbK× é†B [ó„üúŒ endstream endobj 2340 0 obj << /Type /ObjStm /N 100 /First 884 /Length 1815 /Filter /FlateDecode >> stream xÚ}XÍÎ$5 ¼ÏSäĞÆ¿IK !qBh…x=ì ´ ˆÇÇ™î´ÇÁ“Ãît—í*'Õ3B\jªE±jÖì ^ûäBØg-¬ö¼j¶ç‹ÂQøèEyğÁ¥I³ûZzÃÂ]ËÁİ>±@Á­Û…ı•€ñ¨Õ¨d¸–›ÈÀ¬`Âb‹¹µ‹-«‡ÅëxÄ£P+šÙ·ÃR‘-îj€Öã‘ıÃJPغÂg®Ñ2¬/Ä®¶Æ,!Û_q`°µ†RmM…‚jÿÑÑìÂX¡ƒ 6«úQ°G]  va‹+ƒÆºªıA ojˆÕ.Ä.Œ R‹$£ŒŒ*bµGÖ Ò‰m±ŒGl‹u°=•áZíeÔ=à­[`"àxÆ ë182À:è;¬fk€Å8FkĞH¯<† ö­A#ŞØ²¹uh ò1HãQ-¡1a}p3ÄD«Àš°GÖ ÛbkP¸âã9LC|´ELO´E‡DV®´Áº5(ÍøAkPºQ‡cô1² T+ÉPÏŒlkP¡·Zƒ:æ­AóƒÖ ùASQ­h-*6·` ©ÚàB·m¶:ÛÅxdÔhsÚtÌr€õßê˜&›ª0FÏÆÛ†Ì.ji8æT´4£'¶xLÓ˜³Æ†1´obŒ‚ÑT,ÙâFğøöÛLJ_ûë÷ÏÆ’Øîûåñá{»Äóòã§/Ÿÿøë¹%Ÿ÷?şwÜõçİwß…h¸£±‡hÑ¿|şç¹¯_°øÊôão_¾h>oúôÕ}øáÏ¿ ç\RÚÜİ)y›Cù5)ɱêk+/XW3ËN¡‰±fôYpí2n£ƒ(‰.Jí;¬DIëªÎvå-V`2¶«³]ëkæ/X5a››íq’¤XW4fÑâѸÕ=°alï2ϱ…8¶º¦¼Eá¾Û)×<ål&bõæX‹(-Ù³æ;ytİE·W†“ş«¹ Ms¬+:«¤¹ m+C«“dh¯2Ì2§ ´¦tt+ƒ¾îÙLÄR—Aw'ÑxixŪ–‹¢‹(±’Ïâ2ˆn£ƒ(š‰".Š`uFç•8¿¼å—b%$•WC˜e¾“”]^eóÌY»ìÄsİESØ œírHs¬+:«Ä˜éÍn¸ˆóOaşy?ÿnؼ6Ò,ÿÙïxY|9úÖœÁ±—œ°X6»eójÙÓ‚N1ãÅMšW“ÑÊLšİ¤y5é+è•Öå–Í«e/XA½Ì²Ù-›WË&Í™I³›4O½¢oÏJ*gaçä`TQÖ$8“Ğ4ß4ÉønòRpæŞ4s`IÄêaÊ¢Ù£!~æß›’èzGO}Ó‡„>u³°“º™èÍ++MO)i›^Ë¿šY°\†¶•¡µ€% Vsšl±(`A†å¢4Øai¨e5—HßHtEgã¡Î¶Òöˆ«aR)qwçæ¨qsô5§«"‹*5¤äLqdÑw’õ+μÀ.šó’1/Î<·ëŠÎ*agiËB˜s[‹_‰Ÿe¾ñ3b'¶ÄSØ© ä2l±Âvàl;‹B°Ã‚Pe¢‹‚‹(3úĬ+tQ¶ÑAÌt¶áȱ®è¬p~aË/~'Û×xÌ2Ïñ¸Ê|7à2ÀÎ$N|m»“¸‡–P1¯˜Ó~UÜ–œÕåZ¼üNòL‰é)ì&‹IÏõWtfè¶Œ‹-¯ÑA  ;ì°‚e¿©ëÖË^±$`%gºãâÅÜ3÷Ew_\ÜwQ'úT q—yD…İ{ºIãbÒŒ33D·e\ly‰¶Œ™-£Û2.¶ÛÍ+q[Fİv8]oQ.ê‚+Ï2ßì~tWÆÅ•ï$gÊÌ Ñ]W^£CÁší÷h\jÀ ¿ÎÂέ9½ùö İeh[Ú« ³™ˆÕ\†¶•¡aÀÊdh.C«;,}}¹œUF,uQT·XA¢–I¤.‘n%Ò ‘fâνl¹—À½fÜ‹s/[î%p¯÷âÜËîÏhÉØfg›uû½ rx <ÂÏ:¯×@‰S¼1»,¼ÈRîå¬av!¨ï¢)Á™äBo±‚^×ÈÇ´ã endstream endobj 2341 0 obj << /Type /ObjStm /N 100 /First 947 /Length 3650 /Filter /FlateDecode >> stream xÚ…[ÛÇ }×WôcÆÀÊu¿†ÀF×8R~XK#iÕ®°Z ñ߇<5İ]¬Kçe·—Åbb‘ìšYmÍ¢mÒır‹ö†~«ÅHë°XE2m›HM¥ÅyÒ#™×4®Ô¬[rXB¶Ï²!#~IiI6,‰ä*.4-Çb]¹¼DÃÖh¬û%uíȺud–ôœöÏ…Kaq¤ç}\hHíGz‘ Ñ:Ò8Á׉Æm¦ìAÎyaT$å°2øŒ<04°†e/èWägGrg=?ÙÅxrÁ0 =«8ÈFó-¥C槸Ğ,<1 ŸÑSf~x†W‹ÍĞózqš`Ò“YœUlÅ[r$ğºdŞkù‰œJD$=‘»90rÈkËX|Z¼ÉÖğyñ.°ığ¨‚^|Œ‘ŸÌâ3ì&~·Á8Æ¢¯h«<Öq Ñ0fRÒ´ÊñD]Ô™-G½D†FO´¿‰´´a1Àè–˜ ôüsb´×I;èÑş[ "²“7Öˆ´ Q3 ”ÁKÒ+‰gĞlÏ S™Èâ'0ƒ'¿ä¤1Êñ¤ÊäH:³'‰c’Æh™”éÑGVȹ.dMÙAÊ‘ÈO–­†G»W¼Dö¢º´šN •8ÑFÆŸi5Ş!Z"‹dÊ8…ã¤5?ÒjVYHi5 ǧPO«|¶ˆ`Hi5Z]ñ#Îo’£¤-´šs1>ûæ›g_ÿóòtw¦ –ïËg_ÿ™×)¿Ş>ïŸpDËßç/8ßøë—óiŒñ_ß~[Û¢^m™phË [fdËï¶Ì¡-UÛº¢lléÍ–NG¶t¶ÜÀ–»-whË[jdkç^r¯÷zĽڹWGl«m%Ù6Öæ жÜ×_.Ÿv˜?İò_«êwŸÉÎVíšÛ®d¹)®ö=œÍÛdw0Sl€l@ŞøÏjn'Õäà¤úÌÔÌåÁ&¤m’90S‡{D{Úh´Æ:ÒÓ ĞãÆq<à8ÔܤÅq£8JŠÃz؈ D†šÈÕÑT¸ş±Æ_³ÖÆv8`;Ôl!olû¶}Ív°í7¶ıÛ¾è0`Ûolûƒ€võ¦ùA@»mÜxÊÌA »Uw˜Fdr\TÙD'²ÈõÜn»h›7şm“ÙMµÜ¨ZÙrëfÖ@İ€ò½~¶å³6#ŠçÍ^:ÛÊ)ÌÔüÊæ^5Û¢)ÌÔQ=ª˜UÁ<`UTËa±Ükå˜â2sT÷ʨ⨦Չ(ZÁ!Šœ ¢Ø”-V>QÎgoC<±Rrd=ñ—ÛçOË¿ÿôıÃë›WO·O'Ê1XgùÓߪ><<İ?<Ÿë¼«ô‡§ó¼¯†¡XÄJàNÜÙoÄÉåÃå©YxÕû­¹Ç|SY Ø"yışöãÓùñ+†J5¯„¯Õ³ŠKEؤ<9¶×Õ+¥á:Dëh-MN®]¨hdì‹RFZ%]yIVÒw±Z¿ÒœÂL„©÷]=Ÿ(ñ¯² múww—ûwçÇ›—çó§?ß¾~|øÂıLç¥{ù ¡ÖøüøtùtóòöóùşÅÏo>ßaÆÖKıx¾ûtş£XyõúıùÃÙÄ\åÈÏt:šÙûͪäÂ?>Ÿ©Bñëß_ı𯿩»JúÒ³WYéZFËİ|ÿp{÷æÅ¯ïo?ğÆ7:?şñ⻟ºùıáá?¼»ÊTïޟïŞ<ÜßüõòöíÃã›t.¯aÅt^ásğêıåËù‘©úôşæÃíıçÛ;8ì²]' _7ôíåİçÇósÇÇ„*¦Ò©]ıxûy#å\ §7tpˆm›ÖùsP`6Š5ˆÓFÈ d‹e™qBÆgÓY-d8›¥dÖ¨w»â &ó蜄!|©Ä2o…,C&\äüH "úüº¯¿+N@jğ¶Ş« ¼­iò*oQğ¦Á[üj𖤈Èj “ìŠ3˜à-K³àM†šf޼\r™ ‚I£ %vÁ0^› Èxª' Á¥a޼ÛfdRyóVpnp­2&»ɖ3‚]q3Á„4 Şd r5"z-x“1hÁ[Ö,ˆˆ“ çõwÅ H Ş¢4 Ş’àÈ‚7o¼%±½¼eéˆ(}C“ìŠ3˜Ì[P¬cŞDT:-±áy Z8ã dÂg!ËùT)N@:æ-Èœç²I´íÈ(±Ã‰ô»¾ëíbdÕÔr€6פ–´º&…9üp’êsø¦ÜxµğÑ';İÂG¯lË'zàà:œx;\È../ˆsöq'Q«À//–©]¢¼[¶^•ÒÚ¢GŒØ|)°-öRcíz: í9òRš[„¥:·´#:œ îç7©÷3·BrÜÌAǓԦAâÊÄÖ:QÕĞGBşT¢ÇK4à,»áb'¤ĞO³)@¤ö´-÷ º[FuR~áê ’ªï ¦ïæ.Ÿg° ¡}›h ¶µøã¨VH´Æ …RìɜإğzOç ıIjO1»’Ì]·Şt+Å+o¥x+È­´ÇVZrï ¹yêĞQ²;Œ¥»i¥hpŒ¾œGİI™’6Ğ|©o9ϱקêSì±¼½½Tb>÷*ub>ÅÚtbÏâЉ_ú¨NYìfø &©ä@ÂÍR·_vÙ).‹;F¹Z¶‹ù"+uø¹ÈXu„?ıü¸{î¢TËVŠb[)®»à‰¸(l¥”1ϡۓÔ>ΑÜf|FgÛ øx¼À‹YÛé:–vº\)œšÏ'©=P_šBIR|îİìu„;!µRv'šVÊîÄĞJÙ44B{ <‚ƒäÚØÔA$wœêÜáÏåU eÔÚNJ‡Â›i¬D‘ÜÓa!MÈY¾ióXÌåÑu€Hê\n¥üE‡Ğé:–vº;ƒYßrÅ#Ô°Á.u+0Á¹#-1g›üÕÓ ÏL»oM–ò×F¼›C¯&Òáæö™F%&‚CónCbŞŒĞÁäf%uRt+±•rã¡ô {–´ç#Ú3úÕaŒ'ü/E#%ڷψvifç×3ğù÷ªÂ÷pt7Âeƒ‡Œ sÀ7§w¤Qá:ëÔxI.¶[FjƸâno)Í—]oÆc\{×İvŒ pèsRx0óØQ£À_¦1&!šñ“G€†ÍäÆcl3¥ñÛÌæĞÑ‚x0óÿ8ª±3y˜Sµí6âK§8ÂX–¡¼±Y£†C\íT¶Ÿxäc(oÖ¤Áª¥Ğ»ñ„e¸–üATÆ«Ál†Cl°¿´ï±öóŒ×Ò·ŞË7C\„¶Û 9Ä•HÇá—#£‡C\“¶*°ˆRãƒW¬ı¼#Y¥Te/Ü„·v<ÆeÂÆÁ¢tûrQ3Ä@ü‘‹W´ı¼cMé F.úrA‡CŒ'g±Á4"ı Ëq8Ä´ j_‡µŸwì K¯Æx¸ â7•öÌk; <Ô{‘K$z?B{pì`l,óä¦ß© f°*Bʇ<b@ч˜²‡CLÙ`ãs¹Oò)x¸‚í'»Xîò+ßöİœfˆû4í†C–‡Òpˆ< Æ ‡¸A3áĞCÛÂİş~w¾^†˜õ&­aC»µa)¥>êCwÊÖ>£óc*߇òr|±Çg)ÄËyÿwe¨RİÖûñò†´Ìú±ş•öúàÖ¿>„õ!}Ÿ]|wõfaRØ endstream endobj 2425 0 obj << /Author(Richard Kelsey, Jonathan Rees, Mike Sperber, Marcus Crestani, Robert Ransom, Roderic Morris, Marcel Turino, Martin Gasbichler)/Title(The Incomplete Scheme 48 Reference Manual)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.11)/Keywords() /CreationDate (D:20130113144913+01'00') /ModDate (D:20130113144913+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.11-2.2 (TeX Live 2010) kpathsea version 6.0.0) >> endobj 2410 0 obj << /Type /ObjStm /N 15 /First 138 /Length 526 /Filter /FlateDecode >> stream xÚ…”ËnÛ0E÷ú .›•ÈásC@ïš&E“®/䄸…H^ôïKJ¾I)îîxLÎ=CQ"#YHAF)¡ä$s-ˆ]#4› V˜±â„“”Á /‡ÅARX°’©¡ñ©”êJÙü'¥ŞdrÒBi•[I¤M±XÕ÷ö©¤MHN¿D>• €Î°*ªëvÛöiÿ—CóË4Í…8¡¦‹UQ×ï2¬Á~ p€‡åù ­_3xá í í í4ÎÎF¬š €±ƒ±ƒ±ÃÉyHx5`_‚™&x{{{œ›‡…÷³ Á¦„.>öí~÷µ¤™9<¬=¬¬.À$L÷[ozK*M9“```p†6?Iʽå?Q®´Ó(ÆŒ#0“¡Ãö³(Wºœt\£`Ó]›1cÆ |:V#%`r>&ĞûÔPR9}‹Œ$4Ô°ğgBs@~›úf½‰%—f&, æQ e>†-÷ßîúæ¥ÿÏuÌß¹S˜+€‚âó·ğÌ„‡@êœâL‡eìÒ²á;š6¢zÿçEuÕôÍfÿ\T?Ó;—i=¨Õí±ß´»±Äcé¦ÙÆnü ¿ó–û§Xıî"–Åëf7İbQݷ݃LpW½Ôu`Y׫¤Pİâîr˜]¸ñÎfMÅ‚J endstream endobj 2426 0 obj << /Type /XRef /Index [0 2427] /Size 2427 /W [1 3 1] /Root 2424 0 R /Info 2425 0 R /ID [<4CD3E07B9D268419B831E8E2110488F7> <4CD3E07B9D268419B831E8E2110488F7>] /Length 5734 /Filter /FlateDecode >> stream xÚ%š{lkyÆçİËø’ؽ¾$±“8ñNâØ¹9qb;¶“8“ØN;v|K_-5J—)• =­(ôHí©ô@Õ)‰-¨‰^(:gP)èŒJ+!µE:- ‚¸ëÔR NÛı=ùç—yŸo³;3ÏóÍî÷úsÇù¿Œãdsœ¦ê?™û§ÎëF3É8Yÿ8ÚÊ,È¡õ£¦ÌíÚ!ÊP‹v­‹²Ô£]@ë¤Üö¢ ¤lh—ÑP6}h£hû)›A ÚZe´¢Í µS¶v´Y4•zñ~´{h­”ú ƒhĞôV:É.´e´J]àa´4†nN7Ú´}”GÁ±ªµ éz@­­‘ÒÇÑzĞtù'@/ZÚ^Ê“ M÷^·®œBÓ}®§< Π]BÓm? Ρ ¡ÕR€óh×ĞdÙ0ˆ6æR^—Ğn¢Éî!0Œ6‡–£—Ñt_•Q0†ö-C9® =BSÌ®‚khh帶]ÕŠO('ÁŒ“©EÛ¡œ7Ñö¢mSŞ·Ñ¢mQNƒ´N´MÊYpíÚcÊ»` ?Š”÷À.T2hLˆ"×VÁÁJğç)q¿â¢ah‘ûR!9•Z´M´9JRW©GcB¹§[©z”+çĞîP’öJ#Ú4ü¨0S*ûĞdè %³¬Ò‚¶ /+ÌĞJ+Z+ÚmJfw¥m?9¨0Ù+ûѠݤd²W¢B#C&{¥ í(Ú J&{å0š‡Fş*LöJ7ÆâuJ&{å“®Hv+LöJ ¯Q2Ù+ÇѶĞÈ}…É^éESЯP2Ù+Õ¼äÛ2hÌ™ “½r ÍE£d²WΠՠ1ß*LöÊ94İÓË”LöÊy´&4æj…É^DÓ}¦d²W.¡iâ0Ï+Â0Úa´K”zƒËhGĞôßôáchİhƒ”:ñ+h'Ğô‘ºèkhš8ç)uî£ñ%RÔéêfß@;vRFİD@Ó¥ÊäÛh<‹g(4¾lŠºM ×4‚ÅS” æš&“n±B=¦ÉÔG© qíšìaFU–ЦÑz)™•e4¾€Š²–™\YEÓ|;NÉd¯¬£­¡)LöÊ#4‚Å"%“½òí1š"Åd¯l¡i¾£d²WvĞ4ßÇꑽPìõuÕÉ/åèF3ASPfA­í0e¸h Ò!ÊP‹Ö†ÖEYêÑøV+vRî{у”  M9@Ùö¡i2í§l-h Me´¢)4í”m mM¥^¼MOÑVJ}ĞA4MN½•N² MOÖJ]àa4…A§¡›ÓvmåQp MÑ%ô€"š¶”8vM—ô¢-¢í¥< ˜ì%¾9‹ºuı€É^ZE«§< ˜ì%¯Û~0ÙK2¾–r0ÙcM–]LöX_—ò"`²ÇòWv&{¬Er0Ùc=|•QÀdõğÍP&{¬Šbv0Ùc=<ø©ùÂ`²Ç|ëºÊé$`²ÇäÀİ¡œLö˜‡‚»My 0Ùc&±»E9 ˜ìñ0Ú&å,`²Çch)ï&{<¶Ay0Ùãëh(“=Æ_÷!å"`²Çøë®S>LöøÚå `²ÇwÑV)5Àdùuíê%zS&{LÜeJ“=^BÓÛëb˜ì1¿Jİ%Jİ&{ÌÃÃÕ©=áÇ{u²»Çdy‚¸÷Ñ 0Ùc îe0Ùc‚äÎSæ“=æ›É½GYª‘r/gÑæ(ë@=ß8î]Ê=`/ArïP6€F4¾ÅİYÊ&° ¹3”Í ­mš²ZÑ’{›² ´£ñíìŞ¢ìûÑxP¸7)€ƒh Èe'èBcb»7(Ãh2y’òèFc©à^§< ”Ó z?İkyà88úÌi*kÕ øèòëß-€.´Ó ßœæa½NÉÖ•ëÄÀsZşT£gÁ9FßÉ®.úÁ%0†Á¸ FÁWÀU ³×é*uùº/ºaº“ºÅº÷2EnÉFù+ã•EEzÁys:~¨KXàœ÷r´ VÀ*Xëà!x6Àc° ¶À6ØÕŒg 0ÀÚ´¬H yÀ:´PX}êkÎÂÀJ³ĞX_š«ÊB3`-Y(V…6Àº±ĞX-Öˆ…NÀʰpŠÏ’9]÷u’‡Íú#± ,ôÖ~°â+œ¬ó '«»B?`MW8 XÉÎÖo…Àª­p°V+\¬Ğ C€uYa°+ŒÖ`…qÀÊ«p°Ş*LVY…IpL›à¸ ¦Á ˜÷À]ĞmNÿ]å0À}°–À° VÀ*Xëà!x6Àc° ¶À6ØDÀçÓ|"à«=A|5%ˆ€¯VğÕ€ ¾ÚDÀW³øj1_"à«@|5ˆ€¯ÖğñÜWæÌèÓi°Ìp™óŞÏ«T¯€Døêê ÿ 9×_«×‘Ÿ0øDÀï1gò5À2ÃmãÄMô‰…Oü^s¦ß§—°ŒtuöÄÂ'>9ğ«Ïù·ê%¤Ä'>‰ğqß¿hÎÚë4:ÌÛc”O|Âà“Üœí_ÔKh ¸ºbáÿº9¿tC£¤Ä'>û·ÌyÓœø!ìê6éíïšã¿Ys€Dø$ÂÇ}Áœgf5J@|rà“Ïı5smÒ(±ğ‰…O,|bi`Ûœç?«£>÷ˆÙʈDDfÎ7U’’ˆlD$"Ê™óáV ğó×ÅéHße8‘’¨Îœåõ’‘—ˆ¨D{Íù =‚" ˆˆJ´Ïœ—\id("*Q«9/¿E?“]"‘ˆ‡G´ßª«9’¦ˆ¼DÜ숼Dz1‰Ô)ê4ç§ôb5“ÈK䙓tKSãHݵª)ùú3 9‰Ô÷ái6ç;/h”€Djà šó£W¤ñƒÙÕçòȈFÌùŸF ¨©ÃÃ#RÛF=™1s~şQ^%M÷…ˆlD<7¢I³œòñ@‰xxD<<¢ÛfÏi@yáÉéÿŞ1kÿ®x´DÌ€ˆĞDä%š7ëÙÒ(ŠMÄS%¢=áã hÍìÔ‹ú„+â mš ½_š~ç4Ñ£P3D)ybvı*Í2ÙÏé(²f‹¯S©HpÍÖ&­è­@½Ùkj@¿‡z8¢¡1Bc¤Ñì cmætÁÊ6P0{ëë5Jkc¤м¡31ÒnökeGÀ!³·JŠt›½ó{Ò‚~pÜì¹ûÒôk‰ÎÄÈYpÊì…ŠNƒóàœÙ‡:¥ €Kà‚ÙG¿+m ƒ10dö‰m Œ€+à7{)««@» ³ÏîJÓ/n®ZuSfŸ_Ñ€ºy³`Úì‹·¥©s§\5%ÿôgÒî‚E°`öÕ§§¦Ü X2ûÖ¨4İİ5 ^ÚªÙ>£u΀v̈šgf?yzÑôתçm³WŸÕÑeşÚ8*Ó(+‹r5%õO¤e]°²k™–~iÄ¢L"Êu–9Ğ'¦X¹4Z¦ûEi,µÜr‹eú~] 6U»eH#eµ¤:-3úŸÒÔµRûéˆe&Ú¤©C¥¶Re¦~ºQú 3à¤efŸÑ@ %åS€†‹«ÿ‹ûå³–Yú´^w`|ù¼e6~WÚ@"ÊÁ#–ù…@/¹ Fy)“òËü²«Q²Q–yë[¤]x^¾a™ßÔD,O²Q¾MYO“ݳ–yV9(ÓÕ-2½Ü2(Ï[æ=Í]D¥L|Ê´lˤ¼l™?.ê%d¨L¶¼Ö-óáW4ğĞX-?¶ÌÇşFÚ&­Eà‰eşêoYƒµ ÆùõYvû?TÒ9iËYæåc*ó€.I[5 _X–F#¥H[ƒe¾¼ ¦I[4[æŸ'¥Ñ i£ûÑÖj™¯6Kk Ã2ßø€4ıBéçè(è²Ì÷:5pôúm8 Y敟è%4/Ú®õû,óÓDz?õ«Ùxõ}ÒÔrTŸğ¢e󤩕¨àˆe÷}[ W}L5Ç-Ûúi ¨O8&,{pVšz‚·À,¸iÙîßĞ€~÷ÀËö~RÚ]°Á¼e/ü¹Ô¹S[nɲ—[¤i=}š#õáV,{ãÃP«Nıµ‡–+Jc¥^ÒѶeWkt´c¹É¯©µ¦^ZÔ³ìëÚ5ãÙN× ¤¶—úaµ–}óó­ã ÔûR³«Á²oÛ¯& ­ ÕòQO«`Ùßş^¢VXÀîÒËşŞ# ¨Ï…µ%¬-©%…ñ¥.Ë>÷}½D-.,awé˜e_P¤JD ¤¦÷¥tT³û¡§ÿM§1è-•†À9Ë~¼A£ôY]ıì. [öÅ1 Œœ.U~ù#ÒpºD·§Tuú‹O¯§K˜\šS–ıÊ4@¨„µ¥Ë~û]Òèì”hÛ”æ,ûß§¤ñ— W­0İñËí©×î—‚5ğÀr]'5@"J²vàyiİr½_Ö¨:1ÆÑ¶å.)¥Ë7ªÃÂÔ3–›íP‰û1³;v-·¾Oš~TrÃbŒë,·%c¦xÜ ,÷¦'ÒHÌü[,÷¶ß—ÆŒ19ÆÕ¸İrïø¸CL÷2>:-÷î×jãcŒ»-÷İØXıµO€¢å>òô#±;&1ÍÇÏã^Ë}ò4J@bng|Ær/ÿ\şÆz« @ıÄ‹“ãËıı´^w‰ÜßË@½/5Õ¼l¹/½Q¯êú]µ\ü’4şòèêíÉA|År?='M½¹mğĞr¯¾]Ú#NRGUó?ÒíTwĞòxÆaT3Ù,ßúc• ÎXŞò‡W¤¹ ÔY¾èKS£Lİ­FË÷}CZP'«`ù礩٥eŸZW–ş èé}‘£C Óòך5 vÖ _¾‡-?s\ê_N‚Ë/¾¨Ñã œ}–ßø¬úÁ)p\g-ÿšà<Ğ ²zs^ÿ#êüè­»2~ŒXŞÿ¾F/ƒ1p \±üÛşRZ9L ËÿÖŒ´ëภnZşÿ®[`L[şÙ—¤Í€‡`ÕòÏï—¦–èGà1Ø[`쀪¿.ßenbC“,Àé$04©8Ô Möú v't9\Mèm&üªOğ<)¬M°6Áó¤гLìN:†&˜œĞ•L°6ÁËä(Àä¤`m‚µ ^&'†&8ô¼Lğ2Á˧“³lL°1Áädà`‚y ·.Áßd`^2 p+‘µ,ÿZݺ1Ë— #¬M&&“üMnLp5™˜—Ì K·dÜó`°´LX$%Kàà©’†d¬u@¦s‚û î'¸Ÿà~‚û î'U÷kXԌȀ,ÈĞNÓà 8 Îp\ƒà"¸.¹_¦œÒ²ü§u4 ÆÀ8¸®‚k`\“à˜7Á-pLƒ0 `Üó`Ü‹` <Ë`¬‚5°‚G`<›` lƒ€û,LjÜp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷ܰ;Àî»å úhşÄ«ºü3–ÿü{uDrƒ` ƒ@,Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷Üp?Àı÷ÜO¹è÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜO™ì©Ü?gùϵé*û-ÿ•Ã:Âı”§@J,Rb‘‹÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?Åı÷SÜOq?­º_»æ9.¨µ Ôƒ=`/h  ìÍ @+hí ìÀAĞ ºÀ!pİà(8¹Úòÿğ¯:ûêOºï=§£ œ} œ§Ápœà<¸ÁEp a0.ƒQ0ÆÁp\à:˜7À¸ nÛ`Ì€YpÜsà˜ à>XKàX+`¬uğ<à1Ø[`ìܹk!â~ˆû!â~ˆû!â~ˆû!â~ˆû!â~ˆû!â~ˆû!â~ˆİ¡Ü÷,ÿÍiZ?a‡Íıªü CHBÂö€"ğÙ‰@HB"„D $!‰@HB"„D $!‰@HB"„D $!‰@HB"„D $!‰@HB"„D $!î‡ÕUÌ¿©‹&!a CHB†0„„!$ !a CHB†0„„!Ü´üÏ6õÎ[æŞúº¶Í}÷Ó;¾cî‹oÔÑsHO¿Îu¬nà}Õ4UiVó+Ïë(c5ò’²Vó…÷ë(g5ßú‰òV›—\«xFG5V»ôªj­öÍã:ª³Ú¿ûšê­îèÓwÑ_ Ø íªG¦Í Ú¾¢ı*WÀU«»²X=µ)uk{İ 6³1ÁãOˆölÓç÷Ø/å±ÁÓ^bmÖNmš¼ûO½³€m»ê<í%Ö&möUyü]ÈÓ^bmf§íÚÚŸ­ Ùœ¤ÇIzœ¤ÇV)O»Šµ˜>¿Ç. Ís¶kk/1[i<öFy´q=íÙÖ&möÓxl ñ´¿X›´ç» <íQgÛŒÇ>OÛµµ?[Ù/å± ôèî{Úx¬ÆÚZÌ&]/şñØqéñ×CõşnõÆ.ÿ*7v—¾í.{/wÙú²Ë¦©]vĞíò7Ã]:;»lAŞ¥‡·Ë–¹]ÌÛe¯Ë.{5v­néùêû­ş—óÿ&„xŸ endstream endobj startxref 612597 %%EOF scheme48-1.9/doc/deriving.txt000644 004306 005702 00000003410 12067075540 017141 0ustar00sperberPUStaff000000 000000 Part of Scheme 48 1.9. See file COPYING for notices and license. The following information is only a suggestion applicable to the Scheme 48 1.9 distribution. It constitutes neither legal advice nor a license. The license in file COPYING permits you and others to build on the work found in this distribution and redistribute the resulting work(s), as long as you meet the terms of that license. That license applies to material that comes from our work, not necessarily your additions. If you happen to like the license in COPYING, you might consider licensing the resulting work as follows: 1. Add your own copyright notice immediately above "All rights reserved" in file COPYING: Copyright © 1986-2001 Richard Kelsey and Jonathan Rees. Copyright © 2001-2007 Michael Sperber and Martin Gasbichler. Copyright © 2007-2012 Michael Sperber and Marcus Crestani. Copyright © 2086 Energetic Hacker. All rights reserved. 2. Change occurrences of "Scheme 48 1.9" to a name of your choice when appropriate, e.g. in the paragraph preceding the notices and at the top of COPYING (but NOT in "Scheme 48 0.58 [...] was developed by Richard Kelsey and Jonathan Rees"!). 3. Adjust the explanations in COPYING, specifically the sentence starting "Scheme 48 1.9 derives" to something like this: Better Scheme 2.0 derives from Scheme 48 1.9. Scheme 48 1.9 derives from Scheme 48 0.58, which was developed by Richard Kelsey and Jonathan Rees and incorporates PreScheme 0.5 by Richard Kelsey. If you've made modifications to our source files, the statement "Part of Scheme 48 1.9" in those files will not be true of the changed files. Those files should be updated to say "Derived from Scheme 48 1.9" or "Part of Better Scheme 2.0" or something similar that is true. scheme48-1.9/doc/hacking.txt000644 004306 005702 00000015410 12067075233 016740 0ustar00sperberPUStaff000000 000000 ,bench ,load-package linker ,new-package =link= linker debuginfo defpackage ,load scripts.scm (link-initial-system) To change between initial image starting in mini-command (MINI) and command (MAXI): 1. Definition of initial system's command module in comp-packages.scm: MINI: (make-mini-command scheme) MAXI: (make-command scheme) 2. Location of (define-module (make-command ...)...): MINI: more-packages.scm MAXI: comp-packages.scm 3. Location of (define-interface command-interface ...): MINI: more-interfaces.scm MAXI: interfaces.scm > ,new-package z architecture primitives packages table enumerated debug-data z> (let ((i 0)) (table-walk (lambda (x y) (set! i (+ i 1))) location-name-table) i) 1385 z> (vector-length (find-all-xs (name->enumerand 'location stob))) 1259 (vector-length (find-all-xs (name->enumerand 'record stob))) 2150 (find-all-xs (name->enumerand 'record stob)) z> (do ((i 0 (+ i 1)) (j 0 (if (package? (vector-ref rs i)) (+ j 1) j))) ((= i (vector-length rs)) j)) 72 z> > ,new-package z architecture primitives compiler table z> (vector-ref stob 10) 'template z> stob '#(pair symbol vector closure location port ratio record continuation extended-number template weak-pointer external unused-d-header1 unused-d-header2 string code-vector double bignum) z> (vector-ref stob 7) 'record z> (define rs (find-all-xs 7)) z> (vector-length rs) 2178 z> (define ls (find-all-xs 4)) z> (vector-length ls) 1266 z> To get a fresh config package: ,in config (define-structures ((config1 (export))) (open defpackage built-in-structures more-structures)) ,config-package-is config1 To load a linker with a fresh new compiler: x48 -i new-scheme48.image -h 10000000 ,in reification reify-structures '#{Procedure 8447 reify-structures} debug-config> (define reify-structures ##) debug-config> make-simple-package Error: undefined variable make-simple-package (package debug-config) 1 debug-config> debug-config> (define-structures ((p (export start))) (open initial-system scheme-level-2 packages)) debug-config> (define go (in p `(start ,(reify-structures (desirable-packages) (lambda (loc) `',loc))))) ### Small images for exercising the linker and/or runtime system debug/tiny.image: debug/tiny.scm $(LINKER_IMAGE) ($(START_LINKER_RUNNABLE) \ echo "(load \"debug/tiny-packages.scm\")"; \ echo "(link-simple-system '(debug tiny) 'start tiny-system)") \ | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) debug/little.image: $(LINKER_IMAGE) $(CONFIG_FILES) $(little-files) ($(START_LINKER_RUNNABLE) \ echo "(load \"scripts.scm\")"; \ echo "(link-little-system)") \ | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) $(BIG_HEAP) debug/medium.image: $(LINKER_IMAGE) $(CONFIG_FILES) $(medium-files) ($(START_LINKER_RUNNABLE) \ echo "(load \"scripts.scm\")"; \ echo "(link-medium-system)") \ | $(LINKER_RUNNABLE) -i $(LINKER_IMAGE) $(BIG_HEAP) echo "(define l-f (package-all-filenames little-system))"; \ echo "(define m-f (package-all-filenames medium-system))"; \ 'little-files l-f 'medium-files m-f \ [The following is from June 1992, and probably not quite compatible with the current compiler internals.] To eliminate use of the stack GC to implement tail recursion, change comp.scm as follows: (define (compile-unknown-call exp cenv depth cont) (note-source-code exp (maybe-push-continuation (sequentially (push-all (cdr exp) cenv 0) (compile (car exp) cenv (length (cdr exp)) (fall-through-cont)) (instruction (if (return-cont? cont) op/move-args-and-call op/call) (length (cdr exp)))) depth cont))) -------------------- Here's another cool thing. 6/28/93 (define-interface evaluation-interface (export eval load eval-from-file)) (define-structure run evaluation-interface (open scheme-level-2 syntactic packages scan environments signals locations features ;force-output table fluids) (files (debug run))) ,load-package run ,in run ,in package-commands (environment-for-syntax-promise) (define cool (make-simple-package (list scheme) eval ## 'cool)) ,in command set-environment-for-commands! (## cool) cool> ,inspect (lambda (x) x) '#{Procedure 6394} [0: exp] '(lambda (x) x) [1: env] '#{Package 286 cool} inspect: inspect: q cool> (define (z s) (define (show-type name static) (write name) (display " : ") (write (static-type static)) (newline)) (if (package? s) (for-each-definition (lambda (name static loc) (show-type name static)) s) (interface-walk (lambda (name type) (show-type name (car (structure-lookup s name #t)))) (structure-interface s)))) ; ,open expander syntactic packages reconstruction (define (e x) (let ((p (interaction-environment))) (let ((node (expand-form x p))) (write (node-type node (package->environment p))) (newline) (eval node p)))) > (define hunk3 (lap hunk3 0 (check-nargs= 3) 2 (pop) 3 (make-stored-object 3 0) 6 (return))) > (hunk3 1 2 3) '(1 . 2) > (define cxr (lap cxr 0 (check-nargs= 2) 2 (pop) 3 (stored-object-indexed-ref 0) 5 (return))) > (cxr (hunk3 1 2 3) 2) 3 > (define-syntax %cons (lambda (e r c) (let ((n (cadr e)) (kind (caddr e))) `(,(r 'lap) (%cons ,n ,kind) (check-nargs= ,n) (pop) (make-stored-object ,n ,kind) (return))))) (define (& x) (or (node-ref x 'uid) (begin (set! *n* (+ *n* 1)) (node-set! x 'uid *n*) *n*)) x) (define (uid n) (node-ref (& n) 'uid)) (define *n* 0) scheme48-1.9/doc/install.txt000644 004306 005702 00000013163 12067075324 017006 0ustar00sperberPUStaff000000 000000 -*- Mode: Indented-text; -*- Here are some remarks to complement what's in the INSTALL file. ----- Building packages The Makefile uses the DESTDIR variable to indicate where the installed files actually go. So, for example make DESTDIR=/usr/local/build/scheme48 allows populating /usr/local/build/scheme48 with an installation of Scheme 48, regardless of where it goes when actually installed. Note that, if DESTDIR is not the same as the --prefix option specified with the 'configure' script, the Scheme 48 installation in $(DESTDIR) will not actually run from there---it needs to be moved to the prefix directory to work correctly, as several paths are compiled into the scheme48 script as well as scheme48.image. ----- Customizing scheme48.image By default, the image consists of a core Scheme system (Revised^5 Scheme plus a very minimal read-eval-print loop) together with a standard set of "options" (command processor, debugging commands, inspector, disassembler, generic arithmetic). The set of options is controlled by the definitions of USUAL-COMMANDS and USUAL-FEATURES in more-packages.scm. If you make the (open ...) clause empty, then "make scheme48.image" will create a Scheme system without any extras (such as error recovery), and the image will be smaller. The files are listed in approximate order of decreasing desirability; you'll probably want at least these: package-commands, build - necessary for the scheme48.image script to work debuginfo, disclosers - necessary if you want error messages to be at all helpful debugging - defines important debugging commands such as ,preview and ,trace After editing the definition of usual-features, simply make scheme48.image to rebuild the image. ----- Deeper changes to the system -- for example, edits to most of the files in the rts/ directory -- will require using the static linker to make a new initial.image. Say make image to get the linker to build a new initial.image and initial.debug. scheme48.image will then be built from those. You need a working installation of Scheme 48 in your path for this to work. This installation should be Scheme 48 1.5 or later. If your installed Scheme 48 is version 1.4 or earlier, you can still build, but need to make a small change to the Makefile. Instructions are in the Makefile---look for "LINKER_WRITEBYTE". You might think that "make scheme48.image" ought to do this, but the circular dependency between scheme48.image and initial.image needs to be broken somewhere, or else make will (justifiably) barf. I chose to break the cycle by making scheme48.image not depend on initial.image, since this is most robust for installation purposes. ----- Changes to the VM require compiling the Scheme code to C code using the PreScheme compiler. Use make i-know-what-i-am-doing to rebuild the C sources from the Scheme sources. (And you should know what you're doing when attempting this.) This requires a working installation of Scheme 48 in the path. ----- Other generated files: filenames.make is "include"d by the Makefile, but is automatically generated from the module dependencies laid out in the various configuration files (*-packages.scm). If you edit any of these .scm files, you may want to do a "make filenames.make" before you do any further "make"s in order to update the depedencies. This step isn't necessary if you're using GNU make, because GNU make will make included files automatically. Various tables for handling Unicode are also automatically generated by the default make target. However, the generated files ship with the system, so you shouldn't need to do this unless you change the input files or the code generating them. ----- Editor support We recommend interacting with the Scheme 48 command processor using the emacs/scheme interface written by Olin Shivers at CMU. Copies of the relevant .el files, together with a "cmuscheme48.el", are in the emacs/ subdirectory of the release. If you're an XEmacs user, note that cmuscheme48.el is part of the scheme XEmacs package, and is thus probably installed already. You will probably want to byte-compile the .el files to get .elc files. Use M-x byte-compile-file to do this. ----- Performance If you don't have a C compiler that optimizes as well as gcc does, then performance may suffer. Take a look at the automatically generated code in scheme48vm.c to find out why. With a good register allocator, all those variables (including some of the virtual machine's virtual registers) get allocated to hardware registers, and it really flies. Without one, performance can be pretty bad. The configure script automatically sets the Makefile variable CFLAGS to -O2 -g if gcc is available, or to -O if it isn't. This can be overriden by specifying a different CFLAGS, e.g. "make CFLAGS=-g" for no optimization. Even if you do have a good compiler, you should be able to improve overall performance even more, maybe about 6-10%, by removing the range check from the interpreter's instruction dispatch. To do this, use the -S flag to get assembly code for scheme48vm.c, then find the instructions in scheme48vm.s corresponding to the big dispatch in restart(): L19173: { code_pointer_83X = arg1K0; switch ((*((unsigned char *) code_pointer_83X))) { ... } There will be one or two comparison instructions to see whether the opcode is in range; just remove them. For the 68000 I use a "sed" script /cmpl #137,d0/ N /cmpl #137,d0\n jhi L/ d but of course the constant will probably have to change when a new release comes along. See the user's guide for information on the ,bench command, which makes programs run faster. scheme48-1.9/doc/io.txt000644 004306 005702 00000020427 10662041705 015743 0ustar00sperberPUStaff000000 000000 [This is somewhat out of date. It predates the switch to using optimistic concurrency for mutual exclusion. -RK 5/21/01] There are two types of I/O objects in Scheme 48, channels and ports. Channels are the raw, unbuffered ports of the operating system. The only I/O operations the VM supports for channels are block reads and writes. Ports are the actual Scheme ports and are implemented in Scheme, with some support from the VM for READ-CHAR, PEEK-CHAR, and WRITE-CHAR for efficiency. The run-time system provides ports that are buffered versions of channels. Other sorts of ports are in big/more-port.scm. Source files: rts/port.scm port operations and port handlers rts/current-port.scm current-input-port, etc. rts/channel.scm blocking on channels and handling i/o interrupts rts/channel-port.scm ports that read and write to channels rts/low.scm CHANNEL-READ and CHANNEL-WRITE big/more-port.scm additional kinds of ports vm/arch.scm fields of ports and channels vm/prim-io.scm VM i/o opcodes vm/vmio.scm implementation of channels ---------------------------------------------------------------- CHANNELS The VM instructions that deal with channels are: (OPEN-CHANNEL ) -> channel is a from the enumeration OPEN-CHANNEL-OPTION in arch.scm. is either a filename (as a string) or an OS port (as a one-word code-vector), depending on the mode. (CLOSE-CHANNEL ) -> unspecific (CHANNEL-MAYBE-READ ) -> number of bytes read or the eof-object (CHANNEL-MAYBE-WRITE ) -> number of bytes written These read or write up to the specified number of characters or bytes from or to the string or code-vector, with the first character or byte going at . (CHANNEL-ABORT ) -> number of bytes read or written or the eof-object This aborts any pending read or write operation on the channel. The return value reflects any partial completion. CHANNEL-MAYBE-READ and CHANNEL-MAYBE-WRITE do not block. If the read or write cannot be completed immediately a PENDING-CHANNEL-I/O exception is raised. It is then up to the run-time system to either wait or run some other thread. The VM raises an I/O-COMPLETION interrupt whenever an i/o operation completes. Because CHANNEL-MAYBE-READ and CHANNEL-MAYBE-WRITE are awkward to use, the RTS defines somewhat simpler versions: (CHANNEL-READ ) -> number of bytes read or the eof-object (CHANNEL-WRITE ) -> unspecified is either a string or code vector and is the index of the first character read or written. is one of: N > 0 : the call returns when this many characters has been read or an EOF is reached. 'IMMEDIATE : the call reads as many characters as are available and returns immediately. 'ANY : the call returns as soon as at least one character has been read or an EOF is reached. is the number of characters to be written. CHANNEL-READ will read the requested number of characters unless an EOF is reached. CHANNEL-WRITE will write the requested number of characters. ---------------------------------------------------------------- PORTS Ports are actual Scheme port and are (usually) buffered. They are fully exposed to the run-time system. The VM instructions on ports could be implemented in Scheme; they are in the VM for efficiency. Buffers are code-vectors (this is a micro-hack; strings have a slightly higher overhead because of the null terminating byte for C compatibility) (code-vectors are just vectors of bytes). The fields of a port are: PORT-STATUS: a bit set represented as a fixnum. Indices into this bit set are from the PORT-STATUS-OPTIONS enumeration in arch.scm. The current bits are: input, output, open-for-input, open-for-output (the last two are for things like sockets, on which you need to block but which do not support normal reading or writing). PORT-HANDLER: a record containing three procedures. These handle printing the port, closing the port, and filling (for input ports) or emptying (for output ports) buffers. PORT-DATA: ? Whatever stuff the handler needs. PORT-LOCKED?, PORT-LOCK: used by the system to guarentee the atomicity of i/o operations. PORT-BUFFER: a code-vector. The input or output buffer of the port. PORT-INDEX: a fixnum. The index of the next byte to read or written. PORT-LIMIT: a fixnum. One past the end of the valid/available buffer space. PORT-PENDING-EOF?: true if the next read to this port should return EOF. Additional operations on ports: (READ-BLOCK string-or-code-vector start count input-port) Read COUNT bytes into STRING-OR-CODE-VECTOR starting at index START. Returns the number of bytes read. Only an end-of-file will prevent the requested number of bytes from being read. (WRITE-STRING string output-port) Write the characters in the string to the port. (WRITE-BLOCK string-or-code-vector start count output-port) The output counterpart to READ-BLOCK. This always writes out the requested number of bytes. Its return value is unspecified. (FORCE_OUTPUT output-port) Causes any buffered characters to be written out. (CURRENT-ERROR-PORT) The current error port, analogous to Scheme's CURRENT-INPUT-PORT and CURRENT-OUTPUT-PORT. The system maintains a list of output ports whose buffers should be periodically flushed. The default output port and ports made by OPEN-OUTPUT-FILE are on this list. (PERIODICALLY-FORCE-OUTPUT! ) may be used to add others. ---------------------------------------------------------------- PORT HANDLERS Every port has a handler with three procedures. The first two are used for printing and closing ports and have the same type for all ports: (DISCLOSE port-data) -> disclose list (CLOSE port-data) -> unspecific For CLOSE, The system takes care of modifying the port's status. The third procedure is used to fill and empty buffers. Its arguments and return values depend on the kind of port: Buffered output ports: (BUFFER-PROC port-data buffer start-index byte-count) -> unspecific BYTE-COUNT bytes should be copied from the buffer beginning at START-INDEX. The buffer may be either a string or a code-vector. Unbuffered output ports: (BUFFER-PROC port-data char) -> unspecific Write out the given character. The system uses this for the default error port. Input ports: (BUFFER-PROC data buffer start-index needed-bytes) -> EOF or number of bytes read (before an EOF) Bytes should be copied into the buffer starting at START-INDEX. The buffer may be either a string or a code-vector. NEEDED-BYTES is one of: 'IMMEDIATE The call should return immediately after transfering whatever number of bytes are currently available, possibly none (this is used for CHAR-READY?). The maximum number of characters is determined by the length of BUFFER. 'ANY The call should wait until at least one byte is available or an EOF occurs (used for READ-CHAR and PEEK-CHAR). The maximum number of characters is determined by the length of BUFFER. N > 0 The call should wait until N bytes have been copied into the buffer or an EOF occurs. If the return value is less than NEEDED-BYTES the port code inserts an EOF after the last byte. ---------------------------------------------------------------- Ports and the Virtual Machine Ports could be implemented entirely in Scheme, with no support from the VM. For efficiency reasons VM instructions are supplied for three port operations: (READ-CHAR ) (PEEK-CHAR ) (WRITE-CHAR ) For each of these, if there is sufficient data or space in the appropriate buffer the VM performs the operation. Otherwise a buffer-full/empty exception is raised and the exception handler uses the buffer procedure from the port's handler to fill or empty the buffer. scheme48-1.9/doc/news.txt000644 004306 005702 00000153760 12070060452 016312 0ustar00sperberPUStaff000000 000000 -*- Mode: org; -*- Recent changes to Scheme 48. * 2012-12-31 (version 1.9) ** Additions - A new C FFI as added, thanks to Crestani, Harald Glab-Plhak. The old one is still there but will eventually be phased out. See Crestani's paper "Foreign-Function Interfaces for Garbage-Collected Programming Languages" http://www-pu.informatik.uni-tuebingen.de/users/crestani/publications/2008-sws-ffi.pdf - A new networking code layer was added with full support for IPv6, UDP etc. (undocumented as of yet) - Records now support single inheritance (accessible through the r6rs-records packages) - `letrec*' was added to the `scheme' structure - A `r5rs' structure was added. - A new condition system based on R6RS's system has replaced the old system. - Some R6RS libraries were added (with help from Robert Ransom). - A statistical profiler was added (Marcel Turino, Manuel Dietrich) - check the documentation for details. - TLC tables (`eq?' tables) were added by Marcus Crestani and David Frese. - The module system warns on cycles and redefinitions - When the VM is compiled with GNU C, it uses direct threading for instruction dispatch, which speeds up the VM noticeable (done by Timo Harter) - The reader for a structure is configurable (again). - SRFI 19 now works on Windows - `list-spine{,-cycle-safe}[*%]' sequence macros were added to `reduce' structure by Robert Ransom - The Windows build can be done via a Boo script (contributed by Robert Ransom) - The unquote and unquote-splicing were generalized to several operands, in line with R6RS. - Commands ,show-known-packages, ,show-interface, and ,show-default-package were added to support SDT (Marcus Crestani, Sebastian Rheinecker). - `placeholder-value' now accepts a `deadlock?' argument that says whether blocking on the placeholder contributes to deadlock. - Most source files now carry author information. - A document =doc/deriving.txt= was added that clarifies how works derived from Scheme 48 should be labelled. ** Changes - The BIBOP GC was heavily debugged and is now considered stable - it is enabled by default. - The system builds on Windows Visual Studio Express 2010 instead of Visual Studio 2005. - The BIBOP GC code was simplified significantly. - The `syntax-rules' implementation was rewritten by Richard Kelsey - Some structures were added to the POSIX subsystem (`posix-errnos', `posix-syslog') - Various procedures were added to the POSIX structures by Roderic Morris to support scsh. - The autoconf code was reorganized by Ivan Shmakov. - The REPL now prints values without quotes and auto-capitalization of record-type names. - The Makefile now builds the documentation upon `make install'. (This requires a working LaTeX installation and tex2page.) A target `install-no-doc' is available that does not. - The license information was clarified. - The external-events API was changed to fix a design bug; it now correctly accomodates "fire-once" applications such as wait-`for-child-process' (with help from Robert Ransom, Roderic Morris). ** Bug fixes - Many. * 01/20/08 (version 1.8) ** Additions - An experimental framework for asynchronous events from external code was added. It's now used for asynchronous host-name lookups on systems with pthreads. - Support for 64-bit architectures was added (thanks to Taylor Campbell, Marcus Crestani, and David Frese) - The installation now includes an (experimental) "scheme48-config" script that reports C compiler and linker and associated flags that may be used for compiling dynamic externals. ** Changes - The layout of the installed system now conforms to FHS. - The old dynamic-loading code was removed; correspondingly, the -o flag for scheme48vm was removed. - The filename translations apply to dynamic externals as well. - On Unix, the central event loop uses poll() instead of select() on systems that have it (thanks to Marcus Crestani) - The external code for the POSIX libraries and SRFI 27 was moved to dynamically-loaded externals. (Cygwin support for this thanks to Harald Glab-Plhak) ** Bug fixes - A bug in the division simplifier of the PreScheme compiler was fixed. - The PreScheme compiler can now emit code for unsigned longs. - The implementations of SRFI 19 and SRFI 42 now include the latest fixes from the reference implementations. - A race condition in the implementation of queues was fixed. * 09/06/07 (version 1.7) ** Additions - A new, experimental garbage collector written by David Frese has been added. It can be enabled by specifying "--enable-gc=bibop" on the configure command line. (It is disabled by default on Unix, but enabled on Windows.) - DESTDIR support has been added to the Makefile (thanks to Markus Weissmann, Ivan Shmakov, Will Job von Foo) ** Bug fixes - Ctrl-C now works more reliably on Windows. - An I/O bug on Windows where an EOF on read would cause a crash has been fixed. (reported by Christoph Bauer) - A bug that would cause spurious deadlocks with the interactive REPL was fixed. - A bug where the last exception handler would get de-installed has been fixed (reported by Emilio Lopes) - A bug in BYTES->STRING-N that would cause it to break on incomplete incodings was fixed (reported by Emilio Lopes) - CURRENT-OS-STRING-TEXT-CODEC is now exported from OS-STRINGS as documented (reported by Emilio Lopes) - A bug where random text would be printed when a port was closed by GC was fixed. (reported by Will Clinger) - A bug in the UDP sockets was fixed. * 03/19/07 (version 1.6) ** Additions - An autogen.sh script for generating the various generated files from source was added. - Infrastructure for creating, running and composing test suites was added. As a result, "make check" now runs more tests than before. - It is now possible for adventurous users to run the linker in PLT Scheme. ** Changes - "make image" now assumes a Unicode-capable Scheme 48. ** Bug fixes - A bug where automatic port-flushing would churn trying to write to a blocking socket was fixed. - An infinite loop upon (/ 0.0 0.0) was fixed. (reported by Taylor Campbell) - A bug that made SYSTEM unusable was fixed. (reported by Marco Benelli) - A bug with package mutation, which made running the PreScheme compiler on the VM break was fixed. - Bugs related to the conversion between OS strings and strings on command-line handling were fixed. (reported by Andreas Rottmann) - Compilation using gcc now uses the -munaligned-doubles flag where available, which is needed on SPARCs to make floating-point arithmetic work. - Compilation older versions Cygwin that don't have langinfo.h should be fixed. - Some problems with installing and running on Windows Vista were fixed. (thanks to Axel T. Schreiner) * 01/12/07 (version 1.5) ** Additions - Comprehensive Unicode support was added. See the manual for details. - An implementation of SRFI 19 was added. (thanks to Emilio Lopes) - SYNTAX-RULES now supports vector patterns and templates. - The ,bound? command now produces more output. (thanks to Taylor Campbell) ** Changes - Many of the POSIX procedures that accepted or returned strings previously now accept or return OS strings. See the manual for details. - The ,build command now accepts a procedure that will be called with a list of OS strings rather than regular strings. - The ASCII->CHAR and CHAR->ASCII procedures from the ASCII structure covers only ASCII (codes 0-127) now. (Previously, the range included 128-255 as well.) ** Bug fixes - A bug with package mutation was fixed. (reported by Taylor Campbell) * 12/23/06 (version 1.4) ** Additions - REGEXP? is now exported from the REXEXPS structure. - SRFIs 4, 39, 40, 43, 43, 60, 61, 63, 66, 67, 71, 78 (mostly thanks to David Van Horn) - In the command processor, switches were generalized to settings, specifically to customize various printing parameters. See the manual for details. - A generic byte-code parser was added to the system; the disassembler uses it. - A REINITIALIZERS package for register actions to be performed after resuming an image was added. - A VARIABLE-ARGUMENTS-LISTS structure implementing a macro for dealing with optional default parameters was added. - A GET-INTERRUPT-HANDLER procedure was added. - An --enable-universal-binary option was added to configure to facilitate building universal binaries on Mac OS X. - The C code now has access to enum sets. ** Changes - FILE-OPTIONS (in the POSIX libary) are now enum sets; this allows using enum-set operations on them. - Various changes were made to the VM to enable native-code compilation. - Socket addresses are always reusable. - 1+ and 1- are no longer valid identifiers. - The ordering of in/out thunks of DYNAMIC-WIND was changed to be consistent with itself and with the upcoming R6RS. - The Windows build is now done using Visual Studio 2005. ** Bug fixes - Macro-defining macros now work in PreScheme. - Opening a file for both read and write via the POSIX libraries wouldn't work correctly. (Reported by Andreas Rottmann.) - PreScheme's COPY-MEMORY! now works for overlapping regions. Various C compilation problems were fixed. - cmuscheme48.el should now work under GNU Emacs as well as XEmacs. - Numerous problems with floating-point arithmetic were fixed. - A race condition with queues was fixed. (thanks to David Frese) - Part of script messages were printed on stdout rather than stderr; fixed. (thanks to Andreas Rottmann) - A shadowing bug in the DEBUGGING package was fixed. (thanks to Taylor Campbell) - A bug in the CML SYNC-GROUP primitive was fixed. (thanks to Heath Putnam) - Various errors in SRFI 13 were fixed. - A bug in the auto-integrator was fixed. (thanks to Taylor Campbell) - A bug in LOAD-DYNAMIC-EXTERNALS was fixed. (thanks to Taylor Campbell) - Several bugs in VECTOR-MERGE were fixed. (reported by Matthias Radestock) - The CML WRAP was made correctly tail-recursive. (reported by Heath Putnam) - A bug in the PreScheme C backend, that would sometimes incorrectly delete tail calls without a return value, was fixed. (reported by Eric Merritt) - Several bugs in interface walking were fixed. (reported by Taylor Campbell) - A bug in the PreScheme compiler affecting the removal of unused procedures was fixed. (thanks to Eric Knauel) - Some precedence bugs in the C stubgs for the regexp code were fixed. (thanks to Matthew Dempsky) - A bug in the REGEXPS package for regexps without submatches was fixed. - (set-current-proposal! (current-proposal)) no longer raises an exception. (thanks to Taylor Campbell) - A bug in package caching was fixed. (thanks to Taylor Campbell) - A bug in the generation of environment maps was fixed. (thanks to Taylor Campbell) - The Windows installer package should now work even on systems that have delayed variable expansion on by default. (thanks to Emilio Lopes) - Exception handlers that return from RAISE are now handled correctly. (reported by Norbert Freudemann) * 05/01/05 (version 1.3) ** Additions - A collection of libraries implementing the Concurrent ML model for concurrent programming has been added; it is compatible to the CML libraries in Sunterlib. See the documentation for details. - Support for SRFIs 34-36 ("Exception handling for programs", "Conditions", "I/O conditions") has been added. This is in the CONDITIONS, EXCEPTIONS, and I/O-CONDITIONS structures, for which the SRFI-34, SRFI-35, and SRFI-36 structures are essentially aliases. A bridging infrastructure between the old condition system and the new one translates condition objects back and forth, hopefully transparently for the user. - A new infrastructure for dynamically loading external libraries from shared objects has been added; check the manual for details. The old infrastructure is still presented, but is unsupported on Windows and will be removed in a future release. - The S48_GC_UNPROTECT_GLOBAL macro has been added, which allows to remove a root added by S48_GC_PROTECT_GLOBAL. - The Scheme 48 header files should now be compileable by a C++ compiler. - An experimental Windows port has been added. ** Changes - The HTML manual is now generated with tex2page. - A number of changes to the VM to support the (future) native-code compiler have been made. - The PreScheme type rule for IF is now more strict, thus disallowing code that would lead to invalid C output. (This fixes a bug reported by Markus Ziegler.) ** Bug fixes - The TRAVERSE structure for displaying heap statistics has been re-enabled. - A number of misues of CALL-ERROR have been corrected (reported by Taylor Campbell). - The VALUE-PIPES package works again (fix by Taylor Campbell). - In PreScheme it is now possible to shift integers by non-constant shift widths. - Logical right shifts in PreScheme work now (reported by Taylor Campbell). - A bug in TERMINATE-THREAD! was fixed (reported by Taylor Campbell). - A bug in the implementation of ,exit-when-done was fixed. - A bug in the regexp-matching code that prevented matching the empty string correctly was fixed. - A bug in the implementation of STRING-CONTAINS from SRFI-13 was fixed. - A bug in the implementation of :WHILE in SRFI-42 was fixed (submitted by Sebastian Egner). - Bugs in the implementations of ANGLE and MAGNITUDE were fixed. - An obscure bug in the implementation of APPLY (which was triggered by certain instances of (apply apply ...) ) was fixed. - For a degenerate case of ITERATE, the code was made to conform the documentation (reported by Taylor Campbell). - Various miscellaneous fixes. * 12/05/04 (version 1.2) ** Additions - The LU-DECOMPOSITIONS structure was added for good. - The CONDVAR structure now exports CONDVAR?. - SRFI 22 ("Running Scheme Scripts on Unix") is fully supported. - An implementation of SRFI 45 was added. - Scheme 48 now builds from a directory other than the source directory. This enables builds for multiple platforms from a single source directory. ** Changes - Scheme 48 uses floating-point arithmetic by default now---as if FLOATNUMS were loaded in a previous release. To that end, Scheme 48 now uses Bob Burger's lightning-fast free-format floating-point printer. - "make install" now creates the installation directories. ** Bug fixes - The PreScheme compiler works again for the VM---in 1.1, there was a bug in the type inferencer related to exactness. - A number of bugs in the REGEXPS structure were fixed (many noted by James B Crigler). - The closed compilator for ERROR was buggy (reported by Taylor Campbell). - A number of documentation bugs were fixed. - The assembler works again, at least rudimentarily. - The SPATIAL structure loads and works again. - Most of the code in scheme/misc (ANNOTATIONS, DOODL, SICP, INTEGER-LENGTHS) works again. - SPAWN now returns the created thread, and the THREADS structure exports CURRENT-THREAD. (As the 1.1 documentation already claimed.) - Floating-point numbers are now printed correctly. (See above.) - "make install" now installs scheme48write-barrier.h. - Two subtle GC bugs related to threads were fixed (reported by Jorgen Schaefer). - Some arithmetic bugs were fixed (reported by Aubrey Jaffer). - A number of bugs related to the handling of I/O error were fixed. - The debugger now prints more information about the context of a VM exception. - A GC bug related to POSIX signals was fixed. - The POSIX-PROCESSES structure now exports SIGNAL? and SIGNAL=?. * 05/07/04 (version 1.1) ** Additions - Added Enum-sets (which are in big/enum-set.scm along with their struct). - Added SRFIs 25, 26, 27, 28, 31, 37, 42. - Added documentation for the thread system. - Added documentation for numerous other libraries. - Added structure definition for LU-DECOMPOSITIONS. - Added Hilbert vectors to the regular build. ** Changes - DUP, DUP-SWITCHING-MODE, and DUP2 now takes ports as arguments, as the manual says, instead of channels. - Added a 'start' index argument to the Posix regular-expression matcher (this is an incompatible change). - BLOCK and MAKE-READY are no longer exported by the thread package. Use the MAYBE-COMMIT-AND-... versions instead. - Placeholders now use the commit mechanism instead of disabling interrupts. - lock.scm has been moved from rts/ to big/ because the S48 system no longer uses them. - The old SORT library has been replaced by Olin Shiver's collection of sort libraries. (The SORT structure retains its old interface.) - It's possible to quote filenames for , commands. ** Bug fixes - Locks and placeholders work correctly. - INEXACT->EXACT now works on exact numbers and vice versa. - LETREC is now compiled correctly. - CALL-WITH-VALUES now works correctly for the one-return-value case. - SRFI 0 now exports MAP, FOR-EACH, MEMBER, and ASSOC. - Blocking threads are held onto via cells to allow terminated threads to be summarily removed. MAYBE-COMMIT-AND-BLOCK is passed this cell as an argument. This fixes a race condition in the blocking mechanism. Also as a result of this, locks etc. use regular queues instead of thread-queues. - Package mutation code now knows that structure clients may be either packages or structures (found and fixed by Martin Gasbichler). - c/write-barrier.h has been renamed c/scheme48write-barrier.h (a change) and added to the list of include files that are installed (it is #include'd by scheme48.h which was already being installed). - INTEGER? now works correctly on floats. - The sources can now be compiled by a C++ compiler. - Numerous minor type issues in the C code were fixed. - Some GC problems with the POSIX code were fixed. - The SRFI 5 implementation now conforms to the specification. - Channels closed by CALL-WITH-{INPUT,OUTPUT}-FILE through GC no longer cause a mesage to be printed. * 10/7/01 (version 1.0) ** Bug fixes - Fixed a problem with the debug data for LETREC environments. - Null output ports now marked as output ports. - Command reader now checks that , is followed by a symbol. - Got rid of 'return ;' in void functions in vm/*.c files. ** Changes - The byte-code architecture has been changed. It no longer has dedicated registers for the template and environment. All values are now accessed via the stack pointer. - Image writer now uses hash tables instead of breaking hearts. This allows for more careful construction of the image files and means that having static areas no longer prevents writing images. - Continuations no longer have headers when on the stack, making non-tail calls a little bit faster. - Removed the unused PORT-LOCKED? from ports. - Made for less duplication of code between the VM and RTS: put the continuation offsets into vm/arch.scm, moved some code around so that vm/data.scm could be used by the RTS, the interface definitions for vm/arch.scm and vm/data.scm are now shared. - The VM's stack pointer (*stack*) now points to the top value on the stack instead of the unused location just above. - The VM files are now in organized into subdirectories. - The interrupt and stack overflow checks have been merged into a single test. Calls are a little bit faster. * 7/15/01 (version 0.57) ** Additions - Added a SYSTEM procedure that calls the C system() function (in structure c-system-function). - Added SRFIs 11, 13, 14, 16, 17, and 23. ** Bug fixes - Removed duplicate definitions of S48_{ENTER|EXTRACT}_BOOLEAN from c/scheme48.h. - Fixed a problem in lookup_record() in c/posix/proc.c that was causing crashes. - Added scheme/srfi to the list of directories that get installed. - Zeroed sockaddr structs in c/unix/socket.c. - Added configuration tests for socklen_t. - Marked DEFINE-RECORD-TYPE as syntax in the SRFI-9 interface. - Fixed (another) bug in s48-shorten-bignum. - Fixed off-by-one error that caused one resumer record to be ignored when writing out images. - Fixed problem with macros expanding into uses of finite types. - Added a handler for the TIME opcode to take care of any arithmetic overflow. * 5/30/01 (version 0.56) ** Bug fixes - Fixed problems with s48-shorten-bignum that were causing crashes. - Patched PreScheme compiler so that the VM would compile (how did this not get noticed earlier?). - Added scheme/posix to the list of directories that get installed. - Replaced sa.sa_action = ... with sa.sa_handler = ... in c/posix/proc.c. - Added one-argument version of ATAN. - Fixed macro-defining-macro bug that showed up in SLIB's FLUID-LET. - SLEEP checks that its argument is a positive real number and correctly handles rationals and inexacts. - Fixed a few typos in the manual. * 5/21/01 (version 0.55) ** Additions - The inspector is more efficient in dealing with large vectors, long lists and circular lists. ** Bug fixes - Added an error handler to command-levels.scm to avoid bad interaction between ,break-on-warnings and the handler-raised undefined-variables warning. - Fixed endless recursion occuring when loading floatnums after creating inexact rationals. - Made ,reset throw away the old value stack - build/filenames.scm now loads the interface files so we no longer get the plethora of "undefined variable" warnings. - The flat-environment optimizer is now idempotent. - Fixed a problem with single-argument receivers as in (call-with-values ... (lambda (x) ...)) - Minor edits to the documentation. - Fixed a problem that occured when (optimize auto-integrate) was used in the presence of definition-producing macros. - Changes to the socket code to work around an oddity in FreeBSD. - Added the os-{...-}name functions to the Posix interface. - The socket code uses socklen_t instead of ints in the appropriate places (the configure script defines socklen_t if necessary). (thanks to Martin Gasbichler). ** Changes - Replaced all uses of FLUID-SET! with fluids bound to cells. - Renamed WRITE-ONE-LINE (which did nothing of the sort) to LIMIT-OUTPUT; the old name is still there for compatibility. - Added vertical tab (ascii->char 11) to ascii-whitespaces to make our definition of whitespace the same as POSIX's. - The procedures in the records and records-internal structures are now in three structures: 'records' has the low-level, vector-like primitives, 'record-types' has everything relating to the type records, and 'records-internal' has the leftovers. - Removed many of the uses of STRUCTURE-REF (because the manual doesn't mention it). * 3/20/01 (version 0.54) ** Additions - SET and UNSET commands for modifying switch values. The following commands are now obsolete (but still work): batch, bench, break-on-warnings, form-preferred, and levels. - Support for some SRFIs. - Support for some Posix functionality. - Functional interface to Posix regular expression matching. - ITERATE and REDUCE macros for writing loops. - Much of the documentation is now in a single manual (doc/manual.ps or doc/html/manual.html). - MODIFY added to the module language for interface mangling. - LETREC-CLOSURE opcode for LETREC's when using flat environments. OUTPUT-PORT-READY? in I/O is CHAR-READY? for output ports. ** Deletions - Removed misc/syscall.scm and misc/getenv.scm. Use the posix calls instead. - Removed the .notify rule. ** Changes - Bignums are now handled in C code borrowed from MITScheme (thanks to Martin Gasbichler). - Replaced ,levels with ,reset and added ,resume . - The command interpreter loads ,OPENed packages without asking. Do `,set ask-before-loading' to get the old behavior. - The command interpreter no longer prints out the names of files and modules being loaded. Do `,unset load-silently' to get the old behavior. - The command interpreter has changed in a number of other ways. See the manual. - Changed misc/either.scm to use fluid variables and replaced (init) with (with-nondeterminism ). Moved the sources to big/either.scm and the structure definition to more-packages.scm. - Moved the programming-environment packages out of more-packages.scm and into env-packages.scm. more-packages.scm was getting too large. - Modified the opt/analyzer.scm code to get CADR to inline. - The last-resort condition handler now uses DEBUG-MESSAGE to print, in the hope that it will be more robust this way. The message is a bit more wordy as well. - CHAR-READY? no longer causes any characters to be read from OS ports. ** Bug fixes - The flat-environment optimizer can now handle large environments. - Removed command-interpreter's saved focus values from the stack to keep them from being captured by call/cc. - The code in misc/pipe.scm works again. - Changed variable `errno' in c/unix/misc.c to something that does not conflict with glibc. - Fixed (lambda () (define x 1) (define y 2)) bug. - Added Mike Sperber's more generalized alt/ fixes. - Fixed definition of S48_SET_CAR() and friends in c/scheme48.h. - Added EINTR checks to more of the system calls. - Made macro-defining SYNTAX-RULES macros work. * 2/24/99 (version 0.53) ** Additions - DEFINE-FINITE-TYPE and DEFINE-ENUMERATED-TYPE (in structure FINITE-TYPES; documented in doc/utilities.ps and doc/html/utilities.html. - Added CHAR-SOURCE->INPUT-PORT, CHAR-SOURCE->OUTPUT-PORT, MAKE-STRING-OUTPUT-PORT, STRING-OUTPUT-SOURCE-OUTPUT to the extended-ports structure. - The structure BYTE-VECTORS is the same as CODE-VECTORS with `byte' replacing `code' in all the names. The underlying datatype is the same for both, and uses `byte' when printing. - There is a new and much improved interface to C code, thanks to Mike Sperber. It is documented in in doc/external.ps and doc/html/external.html. ** Bug fixes - Session-data and user-context records are no longer in the fluid env. - Lexical environments can now be nested up to 65k deep. - ,expand no longer prints `definition in expression context' warnings. - Added ARRAY? and SEARCH-TREE? to the array and search tree structures. - Flat environments work again. - Templates of the form `var ... ...' now work in syntax rules. - Reinstated caching of SCHEMIFY results to greatly reduce the space used by debugging info. - Added argument checking to STRING->NUMBER and NUMBER->STRING. - Fixed space blow-up in LOAD. - Unused ports are closed more reliably. ** Changes - The heap, gc, and image code is now in three separate modules. - The symbol table is now held in a VM register. - Inlined SHOWING-FOCUS-VALUES into the main command loop and moved the sentinel call to reduce the noise at the base of ,preview output. - The tables returned by MAKE-TABLE now use EQV? for comparison (instead of EQ?). This makes these tables about 50% slower when numbers are used as keys, but significantly more accurate. - Floating-point numbers are no longer double boxed. * 7/22/98 (version 0.52) ** Bug fixes - Fixed problems with unbound variables in SET! and the inliner. - Made macro expansion a bit less eager; this should reduce the amount of heap space needed for compilation. * 6/29/98 (version 0.51) ** Incompatible changes - BIG-SCHEME no longer exports its version of DEFINE-RECORD-TYPE (but it is available from the structure DEFRECORD). I am slowly removing all uses of this version of DEFINE-RECORD-TYPE from the sources. - The version of DEFINE-RECORD-TYPE exported by DEFINE-RECORD-TYPES checks that every constructor argument corresponds to a field. - Uses of LAP must list their free variables (see env/assem.scm). ** Changes - The functions exported by BIG-SCHEME that were not available elsewhere are now exported by BIG-UTIL as well. - MAKE-RANDOM now checks its argument (but is still a fairly poor source of pseudo-randomness). - SIGPIPE no longer kills the S48 process (this was done earlier but not listed here). - The macro/module/compiler code has been reorganized. Hopefully the only noticable difference is in the babble written when loading files and packages. - Added CODE-QUOTE (in its own structure of the same name) for use in writing hygienic macro-generating macros. CODE-QUOTE is the same as QUOTE except that it does not strip off any of the macro system's name annotations. - The FLOATNUMS package now exports FLOATNUM?. ** Bug fixes - Fixed phony stack-overflow bug. - Fixed a bug in thread time-debit mechanism. - Made floating point numbers always print as inexact. - Got rid of bogus type-error warnings when using floatnums. - Fixed declaration of call_startup_procedure in c/main.c. * 2/11/98 (version 0.50) ** Bug fixes - Fixed bug in closed-compiled version of READ-CHAR. - Fixed negative-key bug in integer tables. * 11/18/97 (version 0.49) ** Bug fixes - Removed some non-portable Kali code that had been accidentally included in c/extension.c. * 10/29/97 (version 0.48) - The VM's calling convention now has the caller doing protocol checking, instead of the callee. The *NARGS* register no longer exists. - Scheme's variable-arity procedures (APPLY, MAKE-VECTOR, +, -, etc.) are usually handled without raising an exception. Calls with an `atypical' number of arguments are now much faster. - Opcodes were added for >, <=, and >=. - Procedures can take up to about 8k arguments. The limit is determined by the value of AVAILABLE-STACK-SPACE in scheme/vm/arch.scm. - Compiler detects wrong number of arguments in ((lambda ...) ...). - Removed the dynamic point from the dynamic environment to make DYNAMIC-WIND behave reasonably with threads. - KILL-THREAD! should work more reliably. - The I/O primitives now pass OS error messages to the exception handlers. - I/O errors when flushing buffers no longer crash the system. - The Pre-Scheme compiler's hack for shadowing global variables with local copies is no longer used. ** Incompatible changes - The internal thread interface was simplified. - There are some architecture changes; .image files will have to be rebuilt. - ACCESS-SCHEME-48 and scheme/misc/slib-init.scm have been removed (thanks to Mike Sperber's updating of slib). * 1/27/97 (version 0.47) - Fixed ,exit and added ,exit-when-done. - CASE now uses EQV? exclusively. * 11/5/96 (version 0.46) - Fixed a few minor thread problems. - opt/analyze.scm now writes to current-noise-port. - DELQ and DELETE now delete every instance, as the documentation claims. - There should be no more spurious heap-overflow interrupts. - Fixed bugs that caused the system to die if stdout blocked. - Template offsets have been increased to two bytes. - Disassembly of flat-lambda now works (fix from Michael Sperber). * 8/23/96 (version 0.45) - Fixed various problems with thread termination and nested schedulers. - Changed thread-internal interface to make schedulers easier to write. - BITWISE-{AND,IOR,XOR} now take an arbitrary number of arguments. - Output ports have their buffers flushed when Scheme 48 terminates. - In keeping with RnRS, CLOSE-{IN,OUT}PUT-PORT are now idempotent. - MODULO now handles negative arguments properly. * 6/20/96 (version 0.44) - The VM's byte-code interpreter and storage management code are now compiled to separate C files. - The socket code works again. * 5/10/96 (version 0.42-0.43) - Various fixes to the thread and I/O systems. - The Unix interface code is more portable. - EOF (control-D) now resumes running all non-broken threads on resumed command level. Thus EOF after a keyboard interrupt (control-C) resumes running the interrupted thread. * 11/30/95 (version 0.41) - The distribution has been reorganized to reduce the number of files in the top-level directory. - The threads implementation has been replaced with one based on engines to allow for nested schedulers. - Threads are now included in the initial image. - The I/O system has been fixed and automatic periodic output buffer flushing has been reinstalled. - Command levels have been integrated with the threads system to ensure that at most one REPL is active at any time. - CONDVAR has been changed to PLACEHOLDER (condition variables being something quite different). - ,profile no longer works, it will be fixed in a later version. MIN and MAX now do inexact contagion. * 4/13/95 (version 0.40) - Renamed error-output-port to current-error-port. - Reinstated ".gdbinit"... - segment->template now takes parent templates debug data as an argument. - Automatic periodic output buffer flushing has been temporarily disabled. A future version of the I/O system will fix it. - Fixed expansion of named LET. - The bummed-define-record-types structure is now gone; use define-record-types instead. - There is somewhat better syntax checking now. * 8/12/94 (versions 0.38-0.39) - ,profile prints out profiling information - An interrupt is raised after every GC; the default handler checks to see if some reasonable amount of storage was reclaimed. - Some of the standard Scheme procedures, including LENGTH, FOR-EACH, VECTOR, and ASSQ, are now significantly faster. - Making, accessing, and setting records is faster. - tar file now includes the top-level directory - The "scheme-level-2-internal" structure has been renamed to "usual-resumer". - ` ( . ' is now illegal (as required by the R4RS grammar). - Made DELAY and FORCE comply with R4RS. - The EXPAND optimizer does a topological sort on definitions. - (optimize flat-environments) causes the compiler to produce flat (instead of nested) lexical environments. - The I/O system has been rewritten to do its own buffering. There are significant changes to unix.c to support this. See doc/io.txt. - (ERROR-OUTPUT) is now available from the structure i/o. - jar-defrecord has been replaced with a modified bummed-jar-defrecord - Files load about 25% faster, for a number of reasons. - Removed the copy of vm/arch.scm from the rts directory. - Threads and sockets work together; SOCKET-ACCEPT no longer blocks. - The compiler no longer prints out .'s as it compiles definitions. * 7/5/94 (version 0.37) - I/O opcodes now raise an interrupt instead of blocking (they still block if no corresponding interrupt handler has been installed). - The threads code has been rewritten; threads that block on I/O do not busy wait and THREAD-READ-CHAR and THREAD-PEEK-CHAR have been removed. - Attempting to obtain a lock twice or to release an unowned lock now signal errors. - READ-CHAR-WITH-TIMEOUT returns #F if the timeout occurs. - The socket structure is back in more-packages.scm. - Renamed .gdbinit to gdbinit - tar file now contains a top-level directory * 3/22/94 (version 0.36) - Removed doc/lsc.ps for copyright reasons. - Fixed (* 47123 46039) multiply bug. - Modified vm/README to make it easier to run the VM. * 3/16/94 (version 0.35) - Fixed (exact->inexact 0.1) -> 0..1. bug. - Fixed VM bug that permitted the creation of stored objects with negative sizes. * 3/8/94 (version 0.34) - "make check" target tests out various features. - Fixes for SGI IRIX 4.0.5 and MIPS RISC/OS 4.51, courtesy Bryan O'Sullivan. - debug/run.scm and the "medium system" work again now. - misc/static.scm should work on the 68000. - Command processor no longer fluid-binds (interaction-environment) on recursive entry. * 2/24/94 (version 0.33) - Fixed bug in VM's interrupt system. - Made non-local srcdir work in Makefile. - Added (load-package 'bigbit) to vm/README. * 2/23/94 (version 0.32) - Some incompatible changes to the VM; .image files will have to be rebuilt. - Improvements to configuration script and to unix.c to support a wider variety of Unixes. The system should now work under any Posix-compliant Unix (except maybe for char-ready?; see comments in unix.c). - Upped the default heap size from 4 meg (2 per semispace) to 6 meg (3 per semispace). - New command line argument -s for specifying size of stack buffer. Default is 2500 (words). - $@ -> "$@" in script (thanks to Paul Stodghill for this fix). - Obscure interrupt/exception VM bug fixed. - It is now possible to put an initial heap image into static memory (effectively allocated by OS process creation). Immutable initial objects go into static read-only memory, and mutable initial objects go into static read-write memory. Initial objects not copied by the GC. There is no documentation yet, but look at the rules for little and debug/little.o in the Makefile if you're interested. * 2/13/94 (version 0.31) ** Incompatible changes - In interfaces, all exported syntactic keywords must be given type :syntax. For example, (define-interface my-macros (export (my-macro :syntax) ...)) - Image entry procedures for the ,build command are now passed a list of strings, not just a single string, for the command line arguments following -a. - The names of the macros defined in scheme48.h (pairp, car, string_length, etc.) are now all upper case. - New "configure" script generates Makefile from Makefile.in and sysdep.h from sysdep.h.in (thanks to Gnu autoconf). See INSTALL and doc/install.txt. ** Bug fixes - Can now make vectors (strings, etc.) as big as the amount of heap space available (but you're still screwed if you try to make one bigger than 2^23-1 bytes - don't do it). - Non-ANSI-ness fixed in scheme48vm.c (jump out of, then back into, a block expected block-local variables to be unchanged). - Fixed big/external.scm (had VECTOR-POSQ instead of ENUM). - In (define-syntax foo bar) you got an error if bar was a variable reference. - Plugged a storage leak (file-environments table in env/debug.scm). Images made with ,build were too large. - Flushed extraneous delay from make-reflective-tower. - Renamed variables in Makefile to resemble Gnu standards. - Fixed definition of LINKER_RUNNABLE in Makefile. - Added doc/call-back.txt. - Fixed define-enumerated documentation (doc/big-scheme.txt). - Environment maps no longer retained for things in initial.image and scheme48.image. This makes scheme48.image about 170K smaller. * 2/3/94 (version 0.30) - Faster EXPT. - FLOATNUMS improvement: (inexact->exact ) should now work, e.g. (inexact->exact (/ 1. 3.)) => 6004799503160661/18014398509481984 - Reinstated ACCESS-SCHEME-48 for the benefit of PSD (portable scheme debugger) and a certain other software package that shall remain nameless. It only knows about a small number of procedures, including things like ERROR and FORCE-OUTPUT. - Various changes to support the Pre-Scheme compiler, notably SET-REFLECTIVE-TOWER-MAKER!. - Incompatible change to the ENUMERATED structure: the names foo/bar no longer become defined. Write (enum foo bar) instead. This will macro expand into the correct small integer. * 1/30/94 (version 0.29) - Fixed ps_run_time() to call sysconf() to find out how many ticks there are per second. It used to assume 60. This affects the output of the ,time command, so don't try comparing numbers from this version with numbers from older versions. - ,time command will now accept a command, e.g. ,time ,load foo.scm. - It appears that if multiple arguments follow -a on the argument line, they are concatenated together with spaces separating them and passed to the startup procedure. I don't know how long this has worked. This will change in the future so that the startup procedure gets a list of strings. - Installed what used to be called the GENERAL-TABLES structure as the TABLES structure used by the system. This allows the use of other comparison predicates besides EQ?, and eliminates some code that had a restrictive copyright notice. - ENUM, NAME->ENUMERAND, and ENUMERAND->NAME are all macros. - Enumerated types themselves are now macros as well. - Fixed bad multiplication bug in VM: (* 214760876 10) was returning 125112. - Moved RECORD-TYPE? and RECORD-TYPE-FIELD-NAMES from the RECORDS-INTERNAL interface to the RECORDS interface, for a somewhat closer approximation to MIT Scheme. - Various type system improvements. - Still no documentation for the ,exec package, but see link/load-linker.exec for an example. - New generic function feature, exported by the METHODS interface (see interfaces.scm), almost like in a certain dynamic object-oriented language. * 1/11/94 (version 0.27) * Changes - The isomorphism used by CHAR->INTEGER and INTEGER->CHAR is no longer ASCII. This change was introduced in order to assist the development of portable programs. If you need ASCII encoding, you should open the ASCII structure and use the procedures CHAR->ASCII and ASCII->CHAR. * Features - The help system is somewhat improved. - New form DEFINE-STRUCTURE defines a single structure. * Incompatible changes to package system - Renamed DEFINE-PACKAGE to DEFINE-STRUCTURES - Renamed DEFINE-STRUCTURE to DEFINE - Renamed all the base types from FOO to :FOO. E.g. :SYNTAX, :VALUE, :PAIR, etc. * Other - Removed socket support due to restrictive copyright on some of the C code that was in extension.c. - ,take has been flushed in favor of ,exec ,load. Commands are now accessed via a distinguished package instead of a table. Documentation pending. - Postscript (.ps) files now included in doc/ subdirectory. (I thought they had been there all along, but apparently I was wrong.) - Enhanced, but still kludgey, floating point support. Use ,open floatnum. * 12/12/93 (version 0.26) - NetBSD port. - Hacked write-level and write-depth for inspecting circular structure. - Recursive FORCEs signal errors, e.g. (force (letrec ((loser (delay (force loser)))) loser)) * 12/7/93 (version 0.25) ** Bug fixes - filenames.make can now be remade using initial.image. This means that you can snarf a distribution and then edit USUAL-FEATURES before making scheme48.image. ** Incompatible changes - Change of terminology: "signature" --> "interface". This means that DEFINE-SIGNATURE is now called DEFINE-INTERFACE, etc. - Some structures have been renamed: condition -> conditions continuation -> continuations exception -> exceptions queue -> queues port -> ports record -> records, record-internal -> records-internal table -> tables template -> templates - The ,load-into command has been removed. Use ,in ... ,load instead (see below), e.g. ,in mumble ,load myfile.scm - The heap size for -h is specified in words, not bytes. As before, the size must account for both semispaces; -h 2n means n words per semispace. This change was actually made a while ago, but I was confused as to what it meant. ** Bug fixes - #e1.7 reads as 17/10, (exact? 1+1.0i) => #f, and 1.0+i prints. * Features - Things like ((structure-ref scheme if) 1 2 3) work. - The following commands now take arbitrary commands to execute in the specified package, not just forms: ,config ,user ,for-syntax ,in For example, you can say ,in mumble ,trace foo This subsumes the functionality of the ,load-into and ,load-config commands. - Dynamic loading of shared libraries for System V systems (untested). * Documentation - Somewhat improved. user-guide.txt now lists most of the interesting built-in packages. lsc.ps is a draft of "A Tractable Scheme Implementation," a paper submitted to Lisp and Symbolic Computation. See also doc/big-scheme.txt, doc/thread.txt, and doc/external.txt. * 10/30/93 - LET-SYNTAX and LETREC-SYNTAX. - Arrays (see big/array.scm). - Lots of internal changes. * 7/20/93 ** Features - Type system. See doc/types.txt. * 7/4/93 ** Features - New define-package clause (for-syntax *). E.g. (define-package ((my-package ...)) (open ...) (for-syntax (open scheme my-utilities) (files more-crud-for-syntax)) ...) - A file name to package map is now used by the emacs interface. Whenever you load a file, or zap from a file that hasn't been previously loaded or zapped, the package in which forms are being evaluated is remembered in a table. The next time you zap some forms from the same file, they will be evaluated in that package. Sometimes you may get an association you don't want. In that situation, you can use the ,forget command to delete an entry in the table. - A new ,push command goes to a deeper command level. - Experimental "command preferred" command processor mode: if you give the command ",form-preferred off", commands will be "preferred" to forms, meaning that you don't need to type a comma before giving a command. To see the value of a variable FOO you have to say (begin foo). - Experimental "no levels" command processor mode: if you give the command ",levels off", then an error will not push a new command level. If you want to ignore an error, you don't need to take any action - further evaluations will happen at top level. If you want to enter the inspector or get a preview, you can issue these commands or a ,push command immediately after the error occurs (more precisely, any time until the focus object is set by some other command). - All of the mode-control commands (batch, bench, break-on-warnings, form-preferred, and levels) take an optional argument. When no argument is given, they will toggle the corresponding mode. With an argument of ON or OFF, they turn the mode on or off. - The ,flush and ,keep commands have been made more flexible and verbose. * 6/18/93 ** Incompatible changes - The access-scheme48 procedure has gone away. Use ,open or the module system instead. - The user, configuration, and for-syntax packages no longer have variables bound to them in the configuration package. Where previously you said: Now you should say: ,in user

,user ,in config ,config ,in for-syntax ,for-syntax ,load-into config ,load-config ,load-into for-syntax ,for-syntax (load "file") ** Features - There is an ,expand command for debugging macros. - The ,open command takes any number of structure names, and opens them all (like ,new-package). - New procedure DEFINE-INDENTATION exported by the PP structure. E.g. (define-indentation 'let-fluid 1) is like Gnu emacs's (put 'let-fluid 'scheme-indent-hook 1). - The inspector simplifies generated names in continuation source code display. E.g. when formerly it said "Waiting for (#{Generated lambda} () (x->node (car exps)))" now it says "Waiting for (lambda () (x->node (car exps)))" - Macros can signal syntax errors by returning input expression unchanged. (Comparison uses EQ?.) ** Documentation - The doc/ directory contains a draft of a "Scheme 48 Progress Report." ** Cleanup - Procedure NULL-TERMINATE added to structure EXTERNALS's signature. - "Vulgar Scheme" renamed to "Big Scheme". - Two new subdirectories, env/ (for programming environment) and big/ (for Big Scheme), now contain most of what was in the misc/ directory. - Several source files that were in the top level and link/ directories have moved to the env/ and alt/ directories. * 5/6/93 ** Bug fixes - Fixed -h command line switch. The size was being improperly divided by 4, so if you asked for an N megabyte heap, you'd actually only get an N/4 megabyte heap. - Nested backquotes were broken for a while; should be fixed now. ** Features - Quoted structure is read-only: e.g. (set-car! '(a b) 3) will produce an exception. - ,config [] and ,user [] are like ,in . - Unix socket support; see misc/socket.scm. - Now using gzip instead of compress for distributions. - ,open command offers to load packages. - A .gdbinit file sets a breakpoint at CM's exception raising code, and defines a handy "preview" command. * 1/18/93 ** Features - Scheme 48 distributions now have version numbers. The version number is printed in the image startup message. Please include it in bug reports. - The module system is now documented. See doc/module.tex. * 12/17/92 ** Bug fixes - Macro templates of the form (x ... y) are supported. - Macro templates are now less fussy about meta-variable rank: you can do "(x y) ..." even when the rank of either x or y (but not both) is too low; the low-ranking text will be copied as many times as necessary. (A meta-variable's "rank" is the number of ...'s it sits under in the left-hand side of the rewrite rule.) - SYNTAX-RULES is now itself hygienic. This means you can have a meta-variable named CAR, for instance. - New development environment features: Commands now start with comma (",") instead of colon (":"). (Easier to type since it's not shifted.) values, call-with-values, dynamic-wind, eval, interaction-environment, and scheme-report-environment added per upcoming Revised^5 Scheme report. See doc/meeting.tex. Modifications to quoted structure will now be detected and reported as errors. An interrupt will occur if an insufficient amount of memory is reclaimed by a garbage collection. Inspector now accepts arbitrary command processor commands (with or without leading comma) ,keep command controls retention of debugging information. ** Features removed - #\page and #\tab. These aren't in the Scheme report. Their absence in Scheme 48 will encourage portability. - access-scheme48 works with fewer names than before. Use the package system instead. - Complex numbers not in the system, by default. Get them back by changing usual-features in more-packages.scm. ** Features changed - Many changes to package system. See doc/module.tex. - The :identify-image command is gone. Instead, supply a second argument (optional) to the ,dump command. - The inspector's TEM command has been shortened to T. ** Internal changes and features - Stored objects types are now part of the virtual machine architecture, i.e. known to the byte-code compiler. - Run-time system is split up into many little modules. - File names are retained in debug database. (But not used for anything yet...) - Tweaks to table package reduce standard image size by 50K and increase compiler speed by 7%. - Immutability bit in object headers. - Weak pointers. * 7/18/92 ** Features removed - Table package's default hash function no longer supports string, pairs, or vectors. * 7/9/92 ** Bug fixes: - (- 0 -536870912) - Inspector now uses command i/o ports instead of current ones - Inexact integers print as N. instead of #iN - Throwing back into a call-with-....put-port now produces a warning instead of an error ** Feature fixes - In DEFINE-PACKAGE, OPEN no longer implies ACCESS. - misc/receive.scm renamed to rts/values.scm, made to conform with Revised^5 Report, and installed internally. ** Features - New :load-package command. Uses file names in (file ...) clause of a define-package. These are interpreted relative to the directory in which the file containing the define-package was found. - #\tab and #\page now print this way. * 6/17/92 ** Bug fixes: - Fixed bug in modulo. - Flushed LAST-PAIR (which disappeared between R^3 and R^4). - DEFINE-SYNTAX and SYNTAX-RULES now exist. - CEILING, FLOOR, and ROUND now exist. - GCD and LCM are now n-ary. - STRING-CI=? and STRING-COPY fixed. - STRING->SYMBOL now copies its argument before handing it to INTERN. - =, <, etc. now work with more than two arguments. - CHAR-READY? exists. - Calls via APPLY are now tail-recursive. - DISPLAY of vectors and lists works (ugh). ** Development environment improvements - Type ? at inspector to get list of inspector commands. - Inspector D command goes to next continuation. - Inspector M command shows more of a long menu. - Inspector TEM command goes to a continuation's or closure's template. - For closures and continuations, inspector displays local variables with their names. - For continuations, inspector displays source code for expression into which control will return. - Multiple command loop levels. EOF (control-D) now only pops out a single level. :reset pops all the way out. :level n goes out to level n. - Can disable benchmark mode. - Procedures made with (let ((f (lambda ...))) ...) now print with names. ** Features - Package system: special forms define-package and package-ref; command processor commands :set-package, :load-into, :clear-package, :new-package, :export, :open-package, etc. - In misc directory: threads, queues, extended ports, format, etc. - Changes to system environment: user-initial-environment -> user-package record-updator -> record-modifier primitive-throw superseded by with-continuation ash -> arithmetic-shift New bootstrap regime. Support for threads: alarm clock interrupt, etc. - Liberal COPYRIGHT file, and a little notice in each source file. - INSTALL and NEWS split off from README. - doc.txt renamed to user-guide.txt. - The Makefile now provides two ways to make "s48" for installation. One depends on the exec #! script execution feature and the other doesn't. - "make" targets for testsys.image and little.image. - Runs Jaffer's test suite and library. - Flushed s48.el. Use cmuscheme instead. * 9/5/90 - Command processor argument parser revamped. :load, :trace, and :untrace commands take arbitrary number of arguments. Argument to :proceed is optional. New (but undocumented) :identify-image command. - Better error messages: wrong number of arguments, undefined variable. - +, *, min, max, apply are now n-ary; -, /, make-string, make-vector, read-char, peek-char, write-char have appropriate argument optionality. - Better internal support for macros; not yet ready for release. - Added STRING as per R^3.99RS. - More testing of Scheme version of bytecode interpreter. - Better scoping of ##; files can't see command processor context. - OR and CASE don't cons closures. - VM checks for non-existent heap image file, gives error message instead of "bus error". - Numerous internal changes in compiler and exception system. - Fixed charnumber. * 8/26/90 - Tested (link-system) inside of T; seems to work. - Benchmark mode available via :BENCH command. - System is 15K bigger due to new fatter global environment representations. - Inspector abbreviation improved. - Disassembler now works on continuations, sort of. * 7/26/90 - ((lambda ...) ...) no longer makes a closure - Features now in default system: :inspect :dis[assemble] Generic arithmetic: bignums, rationals, complexes rationalize :time command is more verbose - MOREFILES variable in Makefile for loading extra stuff - Default heap size increased to 2 megabytes per semispace scheme48-1.9/doc/no-leaf-env.txt000644 004306 005702 00000012005 10662041705 017434 0ustar00sperberPUStaff000000 000000 Return-Path: Date: Mon, 14 Jun 93 14:34:40 -0400 To: jar@cs.cornell.edu Subject: environments for leaf procedures From: kelsey@flora.ccs.neu.edu Sender: kelsey@ccs.neu.edu I merged the no-leaf-environments code back into the system, and this time it may be worth it. Loading pp.scm sped up by 2%, even though the compiler is doing more work. Benchmark times (in seconds): old new speedup quicksort 1.48 1.39 6% towers 1.05 1.05 0% matrix-multiply 3.32 3.10 7% matrix-multiply2 1.94 1.80 7% Local variable names are screwed up: > (define (f x) (let ((y 4)) (+ x y))) > (f 'a) Error: exception (+ 'a 4) 1> ,debug '#{Continuation (pc 13) f} [0] 4 [1: y] 'a inspect: There is probably a simple fix for this. Here is the diff: % diff comp.scm comp.scm.save 26d25 < (define $compiling-leaf (make-fluid 'no)) 28,33d26 < (define (note-not-leaf!) < (set-fluid! $compiling-leaf 'no)) < < (define (compiling-leaf?) < (eq? 'yes (fluid $compiling-leaf))) < 63,82c56,66 < (deliver-value (if (env-ref? den) < (local-variable den cenv depth #f) < (instruction-with-variable op/global exp den #f)) < cont))) < < (define (local-variable den cenv depth set?) < (let ((back (env-ref-back den cenv)) < (over (env-ref-over den))) < (if (and (compiling-leaf?) < (= back 0)) < (instruction (if set? op/stack-set! op/stack-ref) < (+ (- over 1) depth)) < (let ((back (if (compiling-leaf?) (- back 1) back))) < (if set? < (instruction op/set-local! back over) < (case back < ((0) (instruction op/local0 over)) ;+++ < ((1) (instruction op/local1 over)) ;+++ < ((2) (instruction op/local2 over)) ;+++ < (else (instruction op/local back over)))))))) --- > (if (env-ref? den) > (let ((back (env-ref-back den cenv)) > (over (env-ref-over den))) > (deliver-value (case back > ((0) (instruction op/local0 over)) ;+++ > ((1) (instruction op/local1 over)) ;+++ > ((2) (instruction op/local2 over)) ;+++ > (else (instruction op/local back over))) > cont)) > (deliver-value (instruction-with-variable op/global exp den #f) > cont)))) 143,145c127,132 < (if (env-ref? den) < (local-variable den cenv depth #t) < (instruction-with-variable op/set-global! name den #t))) --- > (cond ((env-ref? den) > (instruction op/set-local! > (env-ref-back den cenv) > (env-ref-over den))) > (else > (instruction-with-variable op/set-global! name den #t)))) 203d189 < (note-not-leaf!) ; this isn't strictly necessary, but it keeps things simpler 222,231c208,215 < (cond ((return-cont? cont) < code) < (else < (note-not-leaf!) ; this isn't strictly necessary, but it keeps things simpler < (sequentially (instruction-with-offset&byte op/make-cont < (segment-size code) < depth) < (note-source-code (cont-source-info cont) < code) < (cont-segment cont))))) --- > (if (return-cont? cont) > code > (sequentially (instruction-with-offset&byte op/make-cont > (segment-size code) > depth) > (note-source-code (cont-source-info cont) > code) > (cont-segment cont)))) 264d247 < (note-not-leaf!) 280,315c263,284 < (let-fluids $compiling-leaf 'maybe < (lambda () < (let ((code (really-compile-lambda-code formals body cenv name))) < (if (eq? (fluid $compiling-leaf) 'maybe) < (let-fluids $compiling-leaf 'yes < (lambda () < (really-compile-lambda-code formals body cenv name))) < code))))) < < (define (really-compile-lambda-code formals body cenv name) < (let* ((nargs (number-of-required-args formals)) < (vars (normalize-formals formals)) < (cenv (if (null? formals) < cenv ;+++ < (bind-vars vars cenv)))) < (sequentially < (cond ((n-ary? formals) < (sequentially < (instruction op/make-rest-list nargs) < (instruction op/push) < (if (compiling-leaf?) < empty-segment < (instruction op/make-env (+ nargs 1))))) < ((null? formals) < (note-not-leaf!) ; no point if no variables < empty-segment) < ((compiling-leaf?) < empty-segment) < (else < (instruction op/make-env nargs))) < (note-environment < vars < (compile-body body < cenv < 0 < (return-cont name)))))) --- > (if (null? formals) > (compile-body body ;+++ Don't make null environment > cenv > 0 > (return-cont name)) > (sequentially > (let ((nargs (number-of-required-args formals))) > (if (n-ary? formals) > (sequentially > (instruction op/make-rest-list nargs) > (instruction op/push) > (instruction op/make-env (+ nargs 1))) > (instruction op/make-env nargs))) > (let* ((vars (normalize-formals formals)) > (cenv (bind-vars vars cenv))) > (note-environment > vars > (compile-body body > cenv > 0 > (return-cont name))))))) > scheme48-1.9/doc/todo.txt000644 004306 005702 00000017741 12067075540 016313 0ustar00sperberPUStaff000000 000000 --*- Mode: Indented-text; -*- Scheme 48: list of bugs and things to do. Last update by RAK on 26 Feb 2001. Programming environment: Fuller on-line documentation. Error recovery. Can do better than ,proceed. LOAD should set up restart continuations. Types in scheme-interface (and elsewhere) aren't as tight as they could be. Add LET continuation "pessimization" to retain the environment longer. Have the disassembler display local variable names. This ought to be recoverable, but isn't always: > (let loop ((x '())) (loop (cons 3 x))) not enough room in heap for stack ,exit 'not-a-fixnum should not exit Semicolon comments don't quite work after commands (extra newline required). Command (and procedure) to change current directory. Some procedure in EXEC to take the place of ## in moving values from one package to another: (transport []), and/or have eval etc. commands return the value Batch mode should write error messages to (error-output). In command preferred mode you have to do in foo run bar instead of in foo bar if foo is a read-only package ,reset should flush the input buffer Export the VM's preview displayer as a procedure for debugging. Performance: More compact representation for debugging data? Leaf procedure compilation (RK's rts/no-leaf-env.scm): if no continuations or lambdas, skip the make-env and access locals using stack-ref. Expected to gain about 6% in speed. Optimize loops somehow (maybe using call-template opcode and/or opportunistic compilation). The CAML light implementation has good documentation and patches for optimizing the interpreter's switch (*pc++); perhaps we could lift some of it. (Range check isn't necessary.) Floating point support in VM. Faster bignum printer (e.g. the one Richard wrote - but it would be nice if it were an option tied to bignums, not built in to the initial image). Ratnum multiplication and division might be made more efficient by taking cross-GCD's. Native code compiler... Compiler bugs / features: Inliner is buggy: if (lambda (x) (f) x) is in-lined the call to F fill occur before the argument is evaluated. It would be nice if macro's and inliner's sources were saved only if we are going to be doing doing any reificiation. Big Scheme bugs / features: It would be nice to be able to simulate control-C interrupts on a port other than the initial input port - e.g., on a socket. This would require creating a new thread to act as a front end. The new thread would read characters eagerly, buffering everything except control-C's for the thread that is doing the real work, and converting control-C's into interrupts. big/pipe.scm uses the old port interface Tracking output ports are not thread safe. Module system bugs: ,untrace should undefine as well if the variable wasn't bound before. Compound signatures don't get updated when a component signature changes. They contain a list of signatures with no reinitialization thunk a la structures and packages. Module system features: Check for name conflicts between opened structures. Check for cycles in structure inheritance. Deal with package system state better (for linker). Maybe each package should point to a data structure containing *location-uid*, location-name-table, *package-uid*, package-name-table, and perhaps the compiler-state as well (see segment.scm). VM: Add a test to configure.in that can determine whether ld -A works. If both it and dlopen() work, then both kinds of dynamic loading should be made available. Interrupt while writing out image causes an exit. [Fixed?] A jump-back instruction? Might be easier to use than call-template. Scrutinize all VM fatal errors to see if any can be recovered from. E.g. "out of ports" shouldn't cause a VM halt, it should just cause open-port to return #f or an error code. [Fixed?] Get VM interp.scm-without-gc.scm working again. Documentation: Describe (optimize auto-integrate). How to use the static linker. How initial.image and scheme48.image get built, really. Techniques for debugging the runtime system (debug/for-debugging.scm). Cleanup: VM: Rename "unassigned" to "uninitialized"? Or phase it out entirely. In unix.c, use getrusage(), when available, to get run time. Run-time / features / development environment: A DIVIDE procedure (maybe an instruction as well) that returns two values. Figure out how to merge the two type systems (META-METHODS and META-TYPES). The generic function system could make use of the SUBTYPE? and INTERSECT? predicates. Correct floating point, esp. reading and printing. And (= 1/3 (/ 1. 3.)) returns #t, but ought to return #f. Parameterize over file name syntax somehow. Currently big/filename.scm assumes Unix (cf. DIRECTORY-COMPONENT-SEPARATOR, FILE-NAME-PREFERRED-CASE). Perhaps there should be VM support for this. Make sure that the disassembler and assembler are inverses of one another. Disassembler should generate S-expression first, and then print it independently. Combine conditions, signals, and handle into a single structure? Figure out a better way to implement ##. Be consistent about "filename" versus "file-name". Compiler / linker / module system: The fluids $losers and $package-losers in env/pedit.scm are never bound. Could they be replaced with cells? The "reflective tower" isn't really a reflective tower, it's a syntactic tower. Rename it. The scanner (file loader) should operate on streams, not lists. This would result in more uniform and flexible internal protocols for reading files, scanning for DEFINEs, compiling, and running - passes could be interleaved or separated easily. Flush link/data.scm. Linker should instead open the VM module that includes vm/data.scm. Flush (optimize ...) clause in DEFINE-STRUCTURE in favor of optimizer argument to SCAN-STRUCTURES. Vector templates ought to be supported in SYNTAX-RULES. The DEFINE-INTERFACE forms should contain types for every exported variable; the code in cprim.scm (and recon.scm?) shouldn't have to worry about setting up types. Add ENVIRONMENT-DEFINED? ? Make USUAL-TRANSFORM return a transform? make-c-header-file should put definitions for the interrupt enumeration into scheme48.h, and unix.c et al should use them. Flatloading and loading are very different operations, so FLATLOAD shouldn't do SET-PACKAGE-LOADED?!; instead it should maintain its own list of flatloaded packages (in a global variable, say). Etc: Start using a source control system (like rcs or Perforce). There ought to be a sanity check to ensure that the size of the area as computed by static.scm agrees with the size as computed by C's sizeof() operator. What should (syntax-rules (x) ((foo ?body) (let ((x 1)) ?body))) do? To: jar@cs.cornell.edu Subject: Not a bug this time. :-) Date: Tue, 22 Feb 94 19:13:37 -0500 From: Paul Stodghill The result of ,expand can be confusing. In particular, it doesn't distinguish between different identifiers that have the same name. For instance, in the example below, it would be more useful if the result of the ,expand was something like, '((lambda (.x.1) (set! x (- .x.1))) x) Welcome to Scheme 48 0.31 (made by jar on Sun Feb 13 18:33:57 EST 1994). Copyright (c) 1993, 1994 by Richard Kelsey and Jonathan Rees. Please report bugs to scheme-48-bugs@altdorf.ai.mit.edu. Type ,? (comma question-mark) for help. > (define-syntax foo (syntax-rules () ((foo var) ((lambda (x) (set! var (- x))) var)))) > (define x 1) > ,expand (foo x) '((lambda (x) (set! x (- x))) x) > scheme48-1.9/doc/type.txt000644 004306 005702 00000017141 10662041705 016314 0ustar00sperberPUStaff000000 000000 The Type System Scheme 48 has a rudimentary type system. Its main purpose is to generate helpful compile-time diagnostics. Currently you don't get much checking beyond wrong number of arguments warnings unless you're compiling a package that has an (OPTIMIZE ...) clause in its definition (e.g. (OPTIMIZE EXPAND) or (OPTIMIZE AUTO-INTEGRATE)). The reason that type checking is disabled most of the time is that it increases compilation time by about 33%. A design goal is to assign types to all valid Scheme programs. That is, type warnings should not be generated for programs that could work according to Scheme's dynamic semantics. For example, no warning should be produced for (define (foo x y) (if x (+ y 1) (car y))) Warnings could in principle be produced for particular calls to FOO that would definitely go wrong, such as (foo #t 'a). The type system assumes that all code is potentially reachable. This means that there will be some warnings for programs that cannot go wrong, e.g. (if #t 3 (car 7)). Additionally, it's assumed that in a (BEGIN ...) or combination, every argument or command will always be executed. This won't be the case if there can be a throw out of the middle. For example, in (call-with-current-continuation (lambda (k) (if (not (number? x)) (k #f)) (+ x 1))) the type system might deduce that X must be a number (which is false). The type reconstruction algorithm (such as it is) is in bcomp/recon.scm. The implementation finds some specific procedure types for LAMBDA expressions, but generally gives up pretty quickly. Notation -------- F : T means that form F has static type T. T1 <= T2, or T1 is under T2, means that T1 is a subtype of T2; that is, if a form of type T2 is acceptable in some context, then so is a form of type T1. Non-expressions --------------- Not every valid Scheme form is an expression. Forms that are not expressions are syntactic keywords, definitions, types, and structure names. If a name is bound to a macro or special operator, then an occurrence of that name has type :SYNTAX. E.g. cond : :syntax Definitions have type :DEFINITION. E.g. (begin (define x 1) (define y 2)) : :definition Thus type checking subsumes syntax checking. Types (other than :TYPE itself?) have type :TYPE. The type of a structure is its interface. E.g. (define-structure foo (export a b) ...) foo : (export a b) Values ------ All expressions have type :VALUES. They may have more specific types as well. If E1 ... En have types T1 ... Tn with Ti <= :VALUE, then the expression (VALUES E1 ... En) has type (SOME-VALUES T1 ... Tn). If T <= :VALUE then (SOME-VALUES T) is equivalent to T. Procedure types --------------- Procedure types have the form (PROCEDURE T1 T2), where T1 and T2 are under :VALUES. Examples: (lambda (x) (values x 1)) : (procedure (some-values :value) (some-values :value :number)) cons : (procedure (some-values :value :value) :pair) Fixed-arity procedure types (PROCEDURE (SOME-VALUES T1 ... TN) T) are so common that the abbreviated syntax (PROC (T1 ... Tn) T) is defined to mean the same thing. E.g. cons : (proc (:value :value) :pair) E : (PROCEDURE T1 T2) means that in a call to a value of E, if the argument sequence has any type other than T1, then the call can be expected to "go wrong" (provoke a type error) at run time. This is not to say it will definitely go wrong, but that it is just a matter of luck if it doesn't. If the argument sequence does have type T1, then the call might or might not go wrong, and any return value(s) will have type T2. For example, (lambda (x) (+ (begin (set! x '(3)) 5) (car x))) : (proc (:pair) :value), because if the arguments to + are evaluated from right to left, and X is not a pair, then there will be a run time type error. Some primitive procedures have their own special typing rules. Examples include VALUES, CALL-WITH-VALUES, and PRIMITIVE-CATCH. Variable types -------------- Assignable variables have type (VARIABLE T), where T for now will always be :VALUE. In (SET! V E), V must have type (VARIABLE T) for some T. Loopholes --------- The construct (loophole T E) is considered to have type T no matter what type E has. Among other things, this allows a rudimentary static abstract data type facility. For example, record types defined using DEFINE-RECORD-TYPE (rts/bummed-jar-defrecord.scm) are established as new base types. Type lattice ------------ The subtype relation is implemented by the procedure COMPATIBLE-TYPES? (in bcomp/mtypes.scm). If (COMPATIBLE-TYPES? T1 T2) is 'definitely, then T1 <= T2. If it's #T, then T1 and T2 intersect. The type lattice has no bottom or top elements. The types :SYNTAX, :VALUES, :DEFINITION, :STRUCTURE, and :TYPE are incomparable and maximal. The following are a comprehensive set of subtyping rules for the type system as it stands. Additional rules may be added in the future. - (SOME-VALUES T1 ... Tn) <= :VALUES. - If T1 <= T1', ..., Tn <= Tn' then (SOME-VALUES T1 ... Tn) <= (SOME-VALUES T1' ... Tn'). - T <= (SOME-VALUES T). - Basic value types, which include :NUMBER, :CHAR, :BOOLEAN, :PAIR, :STRING, and :UNSPECIFIC, are all under :VALUE. - If T1' <= T1 and T2 <= T2', then (PROCEDURE T1 T2) <= (PROCEDURE T1' T2'). - (VARIABLE T) <= T. - :ZERO, the result type of infinite loops and calls to continuations, is under :VALUE, but perhaps shouldn't be. (E.g. maybe it should be just under :VALUES instead.) - (EXPORT ( T) ...) is under :STRUCTURE. [Not yet implemented.] Type well-formedness -------------------- In (SOME-VALUES T1 ... Tn), T1 ... Tn must be under :VALUE. In (PROCEDURE T1 T2), T1 and T2 must be under :VALUES. In (VARIABLE T), T must be under :VALUE. Module system ------------- The rules for interfaces and structures are not yet very well worked out. Interfaces are types. The type of a structure is its interface. (Compare with Pebble's "bindings" and "declarations".) An interface has the basic form (EXPORT ( ) ...). There are two kinds of abbreviations: - (EXPORT ... ...) means the same as (EXPORT ... ( :VALUE) ...) - (EXPORT ... (( ...) ) ...) means the same as (EXPORT ... ( ) ( ) etc. ...) Distinct interfaces are not comparable. If a form S has type (EXPORT ... (name T) ...), then the form (STRUCTURE-REF S name) has type T. Note that T needn't be a :VALUE type; e.g. (structure-ref scheme cond) : :syntax When a package is loaded or otherwise compiled, the type that is reconstructed or inherited for each exported name is checked against the type specified in the signature. (Cf. procedure SCAN-STRUCTURES in bcomp/scan.scm.) Future work ----------- There probably ought to be dependent sums and products and/or universal and existential types. In particular, it would be nice to be able to get static checking for abstract types, even if they're not implemented using records. Type constructors (like STREAM-OF or COMPUTATION-OF) would be nice. There are many loose ends in the implementation. For example, type and type constructor names aren't always lexically scoped; sometimes their scope is global. Packages that open the LOOPHOLES structure (which exports LOOPHOLE) don't always open TYPES (which would be a bad idea given the way TYPES is currently defined); LOOPHOLE works in spite of that. Figure out whether :TYPE : :TYPE. ----- Original by JAR, 20 July 93. Updated by JAR, 5 December 93. scheme48-1.9/doc/html/manual-Z-H-1.html000644 004306 005702 00000102304 12074535600 020430 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9

 

Acknowledgements

Thanks to Scheme 48's users for their suggestions, bug reports, and forbearance. Thanks also to Deborah Tatar for providing the Yeats quotation.

Copyright � 1986-2001 Richard Kelsey and Jonathan Rees.
Copyright � 1993-2001 Richard Kelsey.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notices, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notices, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. The name of the authors may not be used to endorse or promote products
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 

Contents

    1  Introduction

    2  User's guide
        2.1  Command line arguments
        2.2  Command processor
        2.3  Editing
        2.4  Performance
        2.5  Disassembler
        2.6  Module system
        2.7  Library

    3  Command processor
        3.1  Current focus value and ##
        3.2  Command levels
        3.3  Logistical commands
        3.4  Module commands
        3.5  Debugging commands
        3.6  Profiling commands
            3.6.1  How the profiler works
        3.7  Settings
        3.8  Inspection mode
        3.9  Command programs
        3.10  Building images
        3.11  Resource query and control
        3.12  Threads
        3.13  Quite obscure

    4  Module system
        4.1  Introduction
        4.2  The configuration language
        4.3  Interfaces
        4.4  Macros
        4.5  Higher-order modules
        4.6  Compiling and linking
        4.7  Semantics of configuration mutation
        4.8  Command processor support
        4.9  Configuration packages
        4.10  Discussion

    5  Libraries
        5.1  General utilities
        5.2  Pretty-printing
        5.3  Bitwise integer operations
        5.4  Byte vectors
        5.5  Sparse vectors
        5.6  Cells
        5.7  Queues
        5.8  Arrays
        5.9  Records
            5.9.1  Low-level access to records
            5.9.2  Record types
        5.10  Finite record types
        5.11  Sets over finite types
        5.12  Hash tables
        5.13  Port extensions
        5.14  Fluid bindings
        5.15  OS strings
        5.16  Shell commands
        5.17  Sockets
        5.18  Profiling
        5.19  Macros for writing loops
            5.19.1  Iterate
            5.19.2  Reduce
            5.19.3  Sequence types
            5.19.4  Synchronous sequences
            5.19.5  Examples
            5.19.6  Defining sequence types
            5.19.7  Expanded code
        5.20  Sorting lists and vectors
            5.20.1  Design rules
                    What vs. how
                    Consistency across procedure signatures
                    Less-than parameter first, data parameter after
                    Ordering, comparison procedures and stability
                    All vector operations accept optional subrange parameters
                    Required vs. allowed side-effects
            5.20.2  Procedure specification
                    Procedure naming and functionality
                    Types of parameters and return values
                5.20.2.1  sorting—general sorting package
                5.20.2.2  Algorithm-specific sorting packages
                    sorted—sorted predicates
                    list-merge-sort—list merge sort
                    vector-merge-sort—vector merge sort
                    vector-heap-sort—vector heap sort
                    vector-quick-sort—vector quick sort
                    vector-quick-sort3—vector quick sort with 3-way comparisons
                    vector-insert-sort—vector insertion sort
                    delete-neighbor-duplicates—list and vector delete neighbor duplicates
                    binary-searches—vector binary search
            5.20.3  Algorithmic properties
        5.21  Regular expressions
            5.21.1  Character sets
            5.21.2  Anchoring
            5.21.3  Composite expressions
            5.21.4  Case sensitivity
            5.21.5  Submatches and matching
        5.22  SRFIs

    6  Unicode
        6.1  Characters and their codes
        6.2  Character and string literals
            6.2.1  Character literals
            6.2.2  String literals
            6.2.3  Identifiers and symbol literals
        6.3  Character classification and case mappings
        6.4  SRFI 14
        6.5  R6RS
        6.6  I/O
            6.6.1  Text codecs
            6.6.2  Text-codec utilities
            6.6.3  Creating text codecs
        6.7  Default encodings

    7  Threads
        7.1  Creating and controlling threads
        7.2  Advanced thread handling
        7.3  Debugging multithreaded programs
        7.4  Optimistic concurrency
        7.5  Condition variables
        7.6  Mutual exclusion
            7.6.1  Locks
            7.6.2  Placeholders
        7.7  Writing custom synchronization abstractions
        7.8  Concurrent ML abstractions
            7.8.1  Basic rendezvous combinators
            7.8.2  Synchronous channels
            7.8.3  Synchronous variables
                7.8.3.1  Placeholders
                7.8.3.2  Jars
            7.8.4  Timeouts
            7.8.5  CML to Scheme correspondence

    8  Mixing Scheme 48 and C
        8.1  Available facilities
            8.1.1  Scheme structures
            8.1.2  C naming conventions
            8.1.3  Garbage collection and reference objects
        8.2  Shared bindings
            8.2.1  Exporting Scheme values to C
            8.2.2  Exporting C values to Scheme
            8.2.3  Complete shared binding interface
        8.3  Calling C functions from Scheme
        8.4  Dynamic loading
        8.5  Accessing Scheme data from C
            8.5.1  Constants
            8.5.2  Converting values
            8.5.3  C versions of Scheme procedures
        8.6  Calling Scheme functions from C
        8.7  Interacting with the Scheme heap
            8.7.1  Registering global references
            8.7.2  Local buffers
            8.7.3  Special treatment for byte vectors
            8.7.4  Memory overhead
            8.7.5  Keeping C data structures in the Scheme heap
            8.7.6  C code and heap images
        8.8  Using Scheme records in C code
        8.9  Raising exceptions from external code
        8.10  External events
            8.10.1  Collecting external events in external code
            8.10.2  Handling external events in Scheme
        8.11  Unsafe functions and macros
        8.12  Converting external code to the new foreign-function interface

    9  Access to POSIX
        9.1  Process primitives
            9.1.1  Process creation and termination
            9.1.2  Exec
        9.2  Signals
            9.2.1  POSIX signals
            9.2.2  Other signals
            9.2.3  Sending signals
            9.2.4  Receiving signals
        9.3  Process environment
            9.3.1  Process identification
            9.3.2  Environment variables
        9.4  Users and groups
        9.5  OS and machine identification
        9.6  Files and directories
            9.6.1  Directory streams
            9.6.2  Working directory
            9.6.3  File creation and removal
            9.6.4  File information
            9.6.5  File modes
            9.6.6  Symbolic links
        9.7  Time and Date
            9.7.1  Time
            9.7.2  Date
        9.8  I/O
        9.9  Regular expressions
        9.10  Syslog facility
        9.11  Error codes
            9.11.1  POSIX errnos
        9.12  C to Scheme correspondence

    Bibliography

scheme48-1.9/doc/html/manual-Z-H-10.html000644 004306 005702 00000321666 12074535603 020531 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Access to POSIX

This chapter describes Scheme 48's interface to the POSIX C calls [1]. Scheme versions of most of the functions in POSIX are provided. Both the interface and implementation are new and are likely to change in future releases. Section 9.12 lists which Scheme functions call which C functions.

Scheme 48's POSIX interface will likely change significantly in the future. The implementation is new and may have significant bugs.

The POSIX bindings are available in several structures:

posix-processes fork, exec, and friends
posix-process-data information about processes
posix-files files and directories
posix-i/o operations on ports
posix-time time functions
posix-users users and groups
posix-regexps regular expression matching
posix-syslog POSIX logging facility
posix-errnos POSIX error codes
posix all of the above

Scheme 48's POSIX interface differs from Scsh's [1112] in several ways. The interface here lacks Scsh's high-level constructs and utilities, such as the process notation, awk procedure, and parsing utilities. Scheme 48 uses distinct types for some values that Scsh leaves as symbols or unboxed integers; these include file types, file modes, and user and group ids. Many of the names and other interface details are different, as well.

9.1  Process primitives

The procedures described in this section control the creation of processes and the execution of programs. They are in the structures posix-process and posix.

9.1.1  Process creation and termination

  • (fork) –> process-id or #f

  • (fork-and-forget thunk)

Fork creates a new child process and returns the child's process-id in the parent and #f in the child. Fork-and-forget calls thunk in a new process; no process-id is returned. Fork-and-forget uses an intermediate process to avoid creating a zombie process.

  • (process-id? x) –> boolean

  • (process-id=? process-id0 process-id1) –> boolean

  • (process-id->integer process-id) –> integer

  • (integer->process-id integer) –> process-id

Process-id? is a predicate for process-ids, process-id=? compares two to see if they are the same, and process-id-uid returns the actual Unix id. Process-id->integer and integer->process-id convert process ids to and from integers.

  • (process-id-exit-status process-id) –> integer or #f

  • (process-id-terminating-signal process-id) –> signal or #f

  • (wait-for-child-process process-id)

If a process terminates normally process-id-exit-status will return its exit status. If the process is still running or was terminated by a signal then process-id-exit-status will return #f. Similarly, if a child process was terminated by a signal process-id-terminating-signal will return that signal and will return #f if the process is still running or terminated normally. Wait-for-child-process blocks until the child process terminates. Scheme 48 may reap child processes before the user requests their exit status, but it does not always do so.

  • (exit status)

Terminates the current process with the integer status as its exit status.

9.1.2  Exec

  • (exec program-name arg0 ...)

  • (exec-with-environment program-name env arg0 ...)

  • (exec-file filename arg0 ...)

  • (exec-file-with-environment filename env arg0 ...)

  • (exec-with-alias name lookup? maybe-env arguments)

All of these replace the current program with a new one. They differ in how the new program is found, what its environment is, and what arguments it is passed. Exec and exec-with-environment look up the new program in the search path, while exec-file and exec-file-with-environment execute a particular file. The environment is either inherited from the current process (exec and exec-file) or given as an argument (...-with-environment). Program-name and filename and any argi should be os-string-thing arguments (see section 5.15. Env should be a list of os-string-thing arguments of the form "name=value". The first four procedures add their first argument, program-name or filename, before the arg0 ... arguments.

Exec-with-alias is an omnibus procedure that subsumes the other four. Name is looked up in the search path if lookup? is true and is used as a filename otherwise. Maybe-env is either a list of os-string-things for the environment of the new program or #f in which case the new program inherits its environment from the current one. Arguments should be a list of os-string-things; unlike with the other four procedures, name is not added to this list (hence -with-alias).

9.2  Signals

There are two varieties of signals available, named and anonymous. A named signal is one for which we have a symbolic name, such as kill or pipe. Anonymous signals, for which we only have the current operating system's signal number, have no meaning in other operating systems. Named signals preserve their meaning in image files. Not all named signals are available from all OS's and there may be multiple names for a single OS signal number.

  • (signal signal-name) –> signal     (syntax)

  • (name->signal symbol) –> signal or #f

  • (integer->signal integer) –> signal

  • (signal? x) –> boolean

  • (signal-name signal) –> symbol or #f

  • (signal-os-number signal) –> integer

  • (signal=? signal0 signal1) –> boolean

The syntax signal returns a (named) signal associated with signal-name. Name->signal returns a (named) signal or #f if the the signal name is not supported by the operating system. The signal returned by integer->signal is a named signal if integer corresponds to a named signal in the current operating system; otherwise it returns an anonymous signal. Signal-name returns a symbol if signal is named and #f if it is anonymous. Signal=? returns #t if signal0 and signal1 have the same operating system number and #f if they do not.

9.2.1  POSIX signals

The following lists the names of the POSIX signals.

abrt abort - abnormal termination (as by abort())
alrm alarm - timeout signal (as by alarm())
fpe floating point exception
hup hangup - hangup on controlling terminal or death of controlling process
ill illegal instruction
int interrupt - interaction attention
kill kill - termination signal, cannot be caught or ignored
pipe pipe - write on a pipe with no readers
quit quit - interaction termination
segv segmentation violation - invalid memory reference
term termination - termination signal
usr1 user1 - for use by applications
usr2 user2 - for use by applications
chld child - child process stopped or terminated
cont continue - continue if stopped
stop stop - cannot be caught or ignored
tstp interactive stop
ttin read from control terminal attempted by background process
ttou write to control terminal attempted by background process
bus bus error - access to undefined portion of memory

9.2.2  Other signals

The following lists the names of the non-POSIX signals that the system is currently aware of.

trap trace or breakpoint trap
iot IOT trap - a synonym for ABRT
emt
sys bad argument to routine (SVID)
stkflt stack fault on coprocessor
urg urgent condition on socket (4.2 BSD)
io I/O now possible (4.2 BSD)
poll A synonym for SIGIO (System V)
cld A synonym for SIGCHLD
xcpu CPU time limit exceeded (4.2 BSD)
xfsz File size limit exceeded (4.2 BSD)
vtalrm Virtual alarm clock (4.2 BSD)
prof Profile alarm clock
pwr Power failure (System V)
info A synonym for SIGPWR
lost File lock lost
winch Window resize signal (4.3 BSD, Sun)
unused Unused signal

9.2.3  Sending signals

  • (signal-process process-id signal)

Send signal to the process corresponding to process-id.

9.2.4  Receiving signals

Signals received by the Scheme process can be obtained via one or more signal-queues. Each signal queue has a list of monitored signals and a queue of received signals that have yet to be read from the signal-queue. When the Scheme process receives a signal that signal is added to the received-signal queues of all signal-queues which are currently monitoring that particular signal.

  • (make-signal-queue signals) –> signal-queue

  • (signal-queue? x) –> boolean

  • (signal-queue-monitored-signals signal-queue) –> list of signals

  • (dequeue-signal! signal-queue) –> signal

  • (maybe-dequeue-signal! signal-queue) –> signal or #f

Make-signal-queue returns a new signal-queue that will monitor the signals in the list signals. Signal-queue? is a predicate for signal queues. Signal-queue-monitored-signals returns a list of the signals currently monitored by signal-queue. Dequeue-signal! and maybe-dequeue-signal both return the next received-but-unread signal from signal-queue. If signal-queue's queue of signals is empty dequeue-signal! blocks until an appropriate signal is received. Maybe-dequeue-signal! does not block; it returns #f instead.

There is a bug in the current system that causes an erroneous deadlock error if threads are blocked waiting for signals and no other threads are available to run. A work around is to create a thread that sleeps for a long time, which prevents any deadlock errors (including real ones):

> ,open threads
> (spawn (lambda ()
           ; Sleep for a year
           (sleep (* 1000 60 60 24 365))))

  • (add-signal-queue-signal! signal-queue signal)

  • (remove-signal-queue-signal! signal-queue signal)

These two procedures can be used to add or remove signals from a signal-queue's list of monitored signals. When a signal is removed from a signal-queue's list of monitored signals any occurances of the signal are removed from that signal-queue's pending signals. In other words, dequeue-signal! and maybe-dequeue-signal! will only return signals that are currently on the signal-queue's list of signals.

9.3  Process environment

These are in structures posix-process-data and posix.

9.3.1  Process identification

  • (get-process-id) –>  process-id

  • (get-parent-process-id) –>  process-id

These return the process ids of the current process and its parent. See section 9.1.1 for operations on process ids.

  • (get-user-id) –>  user-id

  • (get-effective-user-id) –>  user-id

  • (set-user-id! user-id)

  • (set-effective-user-id! user-id)

  • (get-group-id) –>  group-id

  • (get-effective-group-id) –>  group-id

  • (set-group-id! group-id)

  • (set-effective-group-id! group-id)

Every process has both the original and effective user id and group id. The effective values may be set, but the original ones can only be set if the process has appropriate privelages.

  • (get-groups) –>  group-ids

  • (get-login-name) –>  os-string

Get-groups returns a list of the supplementary groups of the current process. Get-login-name returns a user name for the current process.

9.3.2  Environment variables

  • (lookup-environment-variable os-string-thing) –> os-string or #f

  • (set-environment-variable! name value)

  • (environment-alist) –> alist

Lookup-environment-variable looks up its argument in the environment list and returns the corresponding value or #f if there is none. Set-environment-variable! sets the value of name in the environment list to value. If name is not already an environment variable, it's created. If it already exists, its value is overwritten with value. Both arguments must be os-string-things. Environment-alist returns the entire environment as a list of (name-os-string . value-os-string) pairs.

9.4  Users and groups

User-ids and group-ids are boxed integers representing Unix users and groups. The procedures in this section are in structures posix-users and posix.

  • (user-id? x) –> boolean

  • (user-id=? user-id0 user-id1) –> boolean

  • (user-id->integer user-id) –> integer

  • (integer->user-id integer) –> user-id

  • (group-id? x) –> boolean

  • (group-id=? group-id0 group-id1) –> boolean

  • (group-id->integer group-id) –> integer

  • (integer->group-id integer) –> group-id

User-ids and group-ids have their own own predicates and comparison, boxing, and unboxing functions.

  • (user-id->user-info user-id) –> user-info

  • (name->user-info os-string) –> user-info

These return the user info for a user identified by user-id or name.

  • (user-info? x) –>  boolean

  • (user-info-name user-info) –>  os-string

  • (user-info-id user-info) –>  user-id

  • (user-info-group user-info) –>  group-id

  • (user-info-home-directory user-info) –>  os-string

  • (user-info-shell user-info) –>  os-string

A user-info contains information about a user. Available are the user's name, id, group, home directory, and shell.

  • (group-id->group-info group-id) –> group-info

  • (name->group-info os-string) –> group-info

These return the group info for a group identified by group-id or name.

  • (group-info? x) –>  boolean

  • (group-info-name group-info) –>  os-string

  • (group-info-id group-info) –>  group-id

  • (group-info-members group-info) –>  user-ids

A group-info contains information about a group. Available are the group's name, id, and a list of members.

9.5  OS and machine identification

These procedures return strings that are supposed to identify the current OS and machine. The POSIX standard does not indicate the format of the strings. The procedures are in structures posix-platform-names and posix.

  • (os-name) –> string

  • (os-node-name) –> string

  • (os-release-name) –> string

  • (os-version-name) –> string

  • (machine-name) –> string

9.6  Files and directories

These procedures are in structures posix-files and posix.

9.6.1  Directory streams

Directory streams are like input ports, with each read operation returning the next name in the directory.

  • (open-directory-stream name) –> directory

  • (directory-stream? x) –> boolean

  • (read-directory-stream directory) –> name or #f

  • (close-directory-stream directory)

Open-directory-stream opens a new directory stream. Directory-stream? is a predicate that recognizes directory streams. Read-directory-stream returns the next name in the directory or #f if all names have been read. Close-directory-stream closes a directory stream.

  • (list-directory name) –> list of os-strings

This is the obvious utility; it returns a list of the names in directory name.

9.6.2  Working directory

  • (working-directory) –> os-string

  • (set-working-directory! os-string-thing)

These return and set the working directory.

9.6.3  File creation and removal

  • (open-file path file-options) –> port

  • (open-file path file-options file-mode) –> port

Open-file opens a port to the file named by path, which must be a os-string-thing argument. The file-options argument determines various aspects of the returned port. The optional file-mode argument is used only if the file to be opened does not already exist. The returned port is an input port if file-options includes read-only; otherwise it returns an output port. Dup-switching-mode can be used to open an input port for output ports opened with the read/write option.

  • (file-options file-option-name ...) –> file-options     (syntax)

  • (file-options-on? file-options file-options) –> boolean

  • (file-options-union file-options file-options) –> file-options

The syntax file-options returns a file-option with the indicated options set. File-options-on? returns true if its first argument includes all of the options listed in the second argument. File-options-union returns a file-options argument containing exactly all of the options listed in either argument. The following file options may be used with open-file.

create create file if it does not already exist; a file-mode argument is required with this option
exclusive an error will be raised if this option and create are both set and the file already exists
no-controlling-tty if path is a terminal device this option causes the terminal to not become the controlling terminal of the process
truncate file is truncated
append writes are appended to existing contents
nonblocking read and write operations do not block
read-only port may not be written
read-write file descriptor may be read or written
write-only port may not be read

Only one of the last three options may be used. If read-write is specified, an output port is returned.

For example

(open-file "some-file.txt"
           (file-options create write-only)
           (file-mode read owner-write))

returns an output port that writes to a newly-created file that can be read by anyone and written only by the owner. Once the file exists,

(open-file "some-file.txt"
           (file-options append write-only))

will open an output port that appends to the file.

The append and nonblocking options and the read/write nature of the port can be read using i/o-flags. The append and nonblocking options can be set using set-i/o-flags!.

To keep port operations from blocking the Scheme 48 process, output ports are set to be nonblocking at the time of creation (input ports are managed using select()). You can use set-i/o-flags! to make an output port blocking, for example just before a fork, but care should be exercised. The Scheme 48 runtime code may get confused if an I/O operation blocks.

  • (set-file-creation-mask! file-mode)

Sets the file creation mask to be file-mode. Bits set in file-mode are cleared in the modes of any files or directories created by the current process.

  • (link existing new)

Both existing and new must be os-string-thing arguments. Link makes path new be a new link to the file pointed to by path existing. The two paths must be in the same file system.

  • (make-directory path file-mode)

  • (make-fifo path file-mode)

These two procedures make new directories and fifo files. In both cases, path must be a os-string-thing argument.

  • (unlink path)

  • (remove-directory path)

  • (rename old-path new-path)

Path, old-path and new-path must all be os-string-thing arguments. Unlink removes the link indicated by path. Remove-directory removes the indicated (empty) directory. Rename moves the file pointed to by old-path to the location pointed to by new-path (the two paths must be in the same file system). Any other links to the file remain unchanged.

  • (accessible? path access-mode . more-modes) –> boolean

  • (access-mode mode-name) –> access-mode     (syntax)

Accessible? returns true if path (which must be a os-string-thing argument) is a file that can be accessed in the listed mode. If more than one mode is specified accessible? returns true if all of the specified modes are permitted. The mode-names are: read, write, execute, exists.

9.6.4  File information

  • (get-file-info path) –> file-info

  • (get-file/link-info name) –> file-info

  • (get-port-info fd-port) –> file-info

Get-file-info and get-file/link-info both return a file info record for the file named by path, which must be a os-string-thing argument. Get-file-info follows symbolic links while get-file/link-info does not. Get-port-info returns a file info record for the file which port reads from or writes to. An error is raised if fd-port does not read from or write to a file descriptor.

  • (file-info? x) –> boolean

  • (file-info-name file-info) –> os-string

File-info? is a predicate for file-info records. File-info-name is the name which was used to get file-info, either as passed to get-file-info or get-file/link-info, or used to open the port passed to get-port-info.

  • (file-info-type file-info) –> file-type

  • (file-type? x) –> boolean

  • (file-type-name file-type) –> symbol

  • (file-type type) –> file-type     (syntax)

File-info-type returns the type of the file, as a file-type object File types may be compared using eq?. The valid file types are:

regular
directory
character-device
block-device
fifo
symbolic-link
socket
other

Symbolic-link and socket are not required by POSIX.

  • (file-info-device file-info) –> integer

  • (file-info-inode file-info) –> integer

The device and inode numbers uniquely determine a file.

  • (file-info-link-count file-info) –> integer

  • (file-info-size file-info) –> integer

These return the number of links to a file and the file size in bytes. The size is only meaningful for regular files.

  • (file-info-owner file-info) –> user-id

  • (file-info-group file-info) –> group-id

  • (file-info-mode file-info) –> file-mode

These return the owner, group, and access mode of a file.

  • (file-info-last-access file-info) –> time

  • (file-info-last-modification file-info) –> time

  • (file-info-last-status-change file-info) –> time

These return the time the file was last read, modified, or had its status modified.

9.6.5  File modes

A file mode is a boxed integer representing a file protection mask.

  • (file-mode permission-name ...) –> file-mode     (syntax)

  • (file-mode? x) –> boolean

  • (file-mode+ file-mode ...) –> file-mode

  • (file-mode- file-mode0 file-mode1) –> file-mode

File-mode is syntax for creating file modes. The mode-names are listed below. File-mode? is a predicate for file modes. File-mode+ returns a mode that contains all of permissions of its arguments. File-mode- returns a mode that has all of the permissions of file-mode0 that are not in file-mode1.

  • (file-mode=? file-mode0 file-mode1) –> boolean

  • (file-mode<=? file-mode0 file-mode1) –> boolean

  • (file-mode>=? file-mode0 file-mode1) –> boolean

File-mode=? returns true if the two modes are exactly the same. File-mode<=? returns true if file-mode0 has a subset of the permissions of file-mode1. File-mode>=? is file-mode<=? with the arguments reversed.

  • (file-mode->integer file-mode) –> integer

  • (integer->file-mode integer) –> file-mode

Integer->file-mode and file-mode->integer translate file modes to and from the classic Unix file mode masks. These may not be the masks used by the underlying OS.

Permission name Bit mask
set-uid #o4000 set user id when executing
set-gid #o2000 set group id when executing
owner-read #o0400 read by owner
owner-write #o0200 write by owner
owner-exec #o0100 execute (or search) by owner
group-read #o0040 read by group
group-write #o0020 write by group
group-exec #o0010 execute (or search) by group
other-read #o0004 read by others
other-write #o0002 write by others
other-exec #o0001 execute (or search) by others

Names for sets of permissions
owner #o0700 read, write, and execute by owner
group #o0070 read, write, and execute by group
other #o0007 read, write, and execute by others
read #o0444 read by anyone
write #o0222 write by anyone
exec #o0111 execute by anyone
all #o0777 anything by anyone

9.6.6  Symbolic links

  • (create-symbolic-link path1 path2)

This creates a symbolic link at path2 that contains path1. Path1 and path2 must be os-string-thing arguments.

  • (read-symbolic-link path) –>  os-string

This returns contents of the symbolic link at path. Path must be an os-string-thing argument.

9.7  Time and Date

These procedures are in structures posix-time and posix.

9.7.1  Time

  • (make-time integer) –> time

  • (current-time) –> time

  • (time? x) –> boolean

  • (time-seconds time) –> integer

A time record contains an integer that represents time as the number of second since the Unix epoch (00:00:00 GMT, January 1, 1970). Make-time and current-time return times, with make-time's using its argument while current-time's has the current time. Time? is a predicate that recognizes times and time-seconds returns the number of seconds time represents.

  • (time=? time time) –> boolean

  • (time<? time time) –> boolean

  • (time<=? time time) –> boolean

  • (time>? time time) –> boolean

  • (time>=? time time) –> boolean

These perform various comparison operations on the times.

  • (time->string time) –> string

Time->string returns a string representation of time in the locale's version of the following form.

"Wed Jun 30 21:49:08 1993
"

9.7.2  Date

A date is a time specification relative to a specific but implicit time zone, broken out into the familar year-month-day-hour-minute-second format.

  • (make-date second minute hour month-day month year week-day year-day dst) –> date

  • (date? x) –> boolean

  • (date-second date) –> second

  • (date-minute date) –> minute

  • (date-hour date) –> hour

  • (date-month-day date) –> month-day

  • (date-month date) –> month

  • (date-year date) –> year

  • (date-week-day date) –> week-day

  • (date-year-day date) –> year-day

  • (date-date-dst date) –> dst

These are the constructor, predicate and corresponding accessors for date objects. The meaning of the various field types are as follows:

seconds seconds (0–60)
minutes minutes (0–59)
hour hours (0–23)
month-day day of month (1–31)
mon month of year (0–11)
year year since 1900
week-day day of week (Sunday = 0)
year-day day of year (0–365)
dst is summer time in effect? #t, #f or unspecific

  • (date->string date) –> string

returns a string representation of date in the locale's version of the following form:

"Wed Jun 30 21:49:08 1993
"

  • (time->utc-date time) –> date

  • (time->local-date time) –> date

These convert a time object into a date object; the first does this relative to the UTC time zone, the second relative to the current timezone setting.

  • (date->time date) –> time

This converts a date object into a time object relative to the current timezone setting.

  • (format-date string date) –> string

This formats a date into a string, according to the format specification in the first argument. The format specification is according to the specification of the C strftime function:

lp0.9 %a & is replaced by the locale's abbreviated weekday name.
%A & is replaced by the locale's full weekday name.
%b & is replaced by the locale's abbreviated month name.
%B & is replaced by the locale's full month name.
%c & is replaced by the locale's appropriate date and time representation.
%C & is replaced by the year divided by 100 and truncated to an integer, as a decimal number (00–99).
%d & is replaced by the day of the month as a decimal number (01–31).
%D & is equivalent to “%m/%d/%y”.
%e & is replaced by the day of the month as a decimal number (1–31); a single digit is preceded by a space.
%F & is equivalent to “%Y‑%m‑%d” (the ISO 8601 date format).
%g & is replaced by the last 2 digits of the week-based year (see below) as a decimal number (00–99).
%G & is replaced by the week-based year (see below) as a decimal number (e.g., 1997).
%h & is equivalent to “%b”.
%H & is replaced by the hour (24-hour clock) as a decimal number (00–23).
%I & is replaced by the hour (12-hour clock) as a decimal number (01–12).
%j & is replaced by the day of the year as a decimal number (001–366).
%m & is replaced by the month as a decimal number (01–12).
%M & is replaced by the minute as a decimal number (00–59).
%n & is replaced by a new-line character.
%p & is replaced by the locale's equivalent of the AM/PM designations associated with a 12-hour clock.
%r & is replaced by the locale's 12-hour clock time.
%R & is equivalent to “%H:%M”.
%S & is replaced by the second as a decimal number (00–60).
%t & is replaced by a horizontal-tab character.
%T & is equivalent to “%H:%M:%S” (the ISO 8601 time format).
%u & is replaced by the ISO 8601 weekday as a decimal number (1–7), where Monday is 1.
%U & is replaced by the week number of the year (the first Sunday as the first day of week 1) as a decimal number (00–53).
%V & is replaced by the ISO 8601 week number (see below) as a decimal number (01–53).
%w & is replaced by the weekday as a decimal number (0–6), where Sunday is 0.
%W & is replaced by the week number of the year (the first Monday as the first day of week 1) as a decimal number (00–53).
%x & is replaced by the locale's appropriate date representation.
%X & is replaced by the locale's appropriate time representation.
%y & is replaced by the last 2 digits of the year as a decimal number (00–99).
%Y & is replaced by the year as a decimal number (e.g., 1997).
%z & is replaced by the offset from UTC in the ISO 8601 format “‑0430” (meaning 4 hours 30 minutes behind UTC, west of Greenwich), or by no characters if no time zone is determinable.
%Z & is replaced by the locale's time zone name or abbreviation, or by no characters if no time zone is determinable.
%% & is replaced by %.

9.8  I/O

These procedures are in structures posix-i/o and posix.

  • (open-pipe) –> input-port + output-port

Open-pipe creates a new pipe and returns the two ends as an input port and an output port.

A file descriptor port (or fd-port) is a port that reads to or writes from an OS file descriptor. Fd-ports are returned by open-input-file, open-output-file, open-file, open-pipe, and other procedures.

  • (fd-port? port) –> boolean

  • (port->fd port) –> integer or #f

Fd-port? returns true if its argument is an fd-port. Port->fd returns the file descriptor associated with or #f if port is not an fd-port.

  • (remap-file-descriptors fd-spec ...)

Remap-file-descriptors reassigns file descriptors to ports. The fd-specs indicate which port is to be mapped to each file descriptor: the first gets file descriptor 0, the second gets 1, and so forth. A fd-spec is either a port that reads from or writes to a file descriptor, or #f, with #f indicating that the corresponding file descriptor is not used. Any open ports not listed are marked `close-on-exec'. The same port may be moved to multiple new file descriptors.

For example,

(remap-file-descriptors (current-output-port)
                        #f
                        (current-input-port))

moves the current output port to file descriptor 0 and the current input port to file descriptor 2.

  • (dup fd-port) –> fd-port

  • (dup-switching-mode fd-port) –> fd-port

  • (dup2 fd-port file-descriptor) –> fd-port

These change fd-port's file descriptor and return a new port that uses ports's old file descriptor. Dup uses the lowest unused file descriptor and dup2 uses the one provided. Dup-switching-mode is the same as dup except that the returned port is an input port if the argument was an output port and vice versa. If any existing port uses the file descriptor passed to dup2, that port is closed.

  • (close-all-but port ...)

Close-all-but closes all file descriptors whose associated ports are not passed to it as arguments.

  • (close-on-exec? port) –> boolean

  • (set-close-on-exec?! port boolean)

Close-on-exec? returns true if port will be closed when a new program is exec'ed. Set-close-on-exec?! sets port's close-on-exec flag.

  • (i/o-flags port) –> file-options

  • (set-i/o-flags! port file-options)

These two procedures read and write various options for port. The options that can be read are append, nonblocking, read-only, write-only, and read/write. Only the append and nonblocking can be written.

  • (port-is-a-terminal? port) –> boolean

  • (port-terminal-name port) –> string

Port-is-a-terminal? returns true if port has an underlying file descriptor that is associated with a terminal. For such ports port-terminal-name returns the name of the terminal, for all others it returns #f.

9.9  Regular expressions

The procedures in this section provide access to POSIX regular expression matching. The regular expression syntax and semantics are far too complex to be described here. Due to limitations in the underlying facility, only Latin-1 strings are guaranteed to work here—on some platforms, only ASCII may function correctly. Moreover, because the C interface uses zero bytes for marking the ends of strings, patterns and strings that contain zero bytes will not work correctly.

These procedures are in structures posix-regexps and posix.

An abstract data type for creating POSIX regular expressions is described in section 5.21.

  • (make-regexp string . regexp-options) –> regexp

  • (regexp-option option-name) –> regexp-option     (syntax)

Make-regexp makes a new regular expression, using string as the pattern. The possible option names are:

extended use the extended patterns
ignore-case ignore case when matching
submatches report submatches
newline treat newlines specially

The regular expression is not compiled until it matched against a string, so any errors in the pattern string will not be reported until that point.

  • (regexp? x) –> boolean

This is a predicate for regular expressions.

  • (regexp-match regexp string start submatches? starts-line? ends-line?)

    –> boolean or list of matches

  • (match? x) –> boolean

  • (match-start match) –> integer

  • (match-end match) –> integer

Regexp-match matches the regular expression against the characters in string, starting at position start. If the string does not match the regular expression, regexp-match returns #f. If the string does match, then a list of match records is returned if submatches? is true, or #t is returned if it is not. Each match record contains the index of the character at the beginning of the match and one more than the index of the character at the end. The first match record gives the location of the substring that matched regexp. If the pattern in regexp contained submatches, then the results of these are returned in order, with a match records reporting submatches that succeeded and #f in place of those that did not.

Starts-line? should be true if string starts at the beginning of a line and ends-line? should be true if it ends one.

9.10  Syslog facility

The procedures in this section provide access to the POSIX syslog facility. The functionality is in a structure called posix-syslog. The Scheme 48 interface to the syslog facility differs significantly from that of the Unix library functionality in order to support multiple simultaneous connections to the syslog facility.

Log messages carry a variety of parameters beside the text of the message itself, namely a set of options controlling the output format and destination, the facility identifying the class of programs the message is coming from, an identifier specifying the concrete program, and the level identifying the importance of the message. Moreover, a log mask can prevent messages at certain levels to be actually sent to the syslog daemon.

Log options

A log option specifies details of the I/O behavior of the syslog facility. A syslog option is an element of a finite type (see Section 5.10) constructed by the syslog-option macro. The syslog facility works with sets of options which are represented as enum sets (see Section 5.11).

  • (syslog-option option-name) –> option     (syntax)

  • (syslog-option? x) –> boolean

  • (make-syslog-options list) –> options

  • (syslog-options option-name ...) –> options     (syntax)

  • (syslog-options? x) –> boolean

Syslog-option constructs a log option from the name of an option. (The possible names are listed below.) Syslog-option? is a predicate for log options. Options are comparable using eq?. Make-syslog-options constructs a set of options from a list of options. Syslog-options is a macro which expands into an expression returning a set of options from names. Syslog-options? is a predicate for sets of options.

Here is a list of possible names of syslog options:

console
If syslog cannot pass the message to syslogd it will attempt to write the message to the console.

delay
Delay opening the connection to syslogd immediately until the first message is logged.

no-delay
Open the connection to syslogd immediately. Normally the open is delayed until the first message is logged. Useful for programs that need to manage the order in which file descriptors are allocated.

NOTA BENE: The delay and no-delay options are included for completeness, but do not have the expected effect in the present Scheme interface: Because the Scheme interface has to multiplex multiple simultaneous connections to the syslog facility over a single one, open and close operations on that facility happen at unpredictable times.

log-pid
Log the process id with each message: useful for identifying instantiations of daemons.

no-wait
Do not wait for child processes.

Log facilities

A log facility identifies the originator of a log message from a finite set known to the system. Each originator is identified by a name:

  • (syslog-facility facility-name) –> facility     (syntax)

  • (syslog-facility? x) –> boolean

Syslog-facility is macro that expands into an expression returning a facility for a given name. Syslog-facility? is a predicate for facilities. Facilities are comparable via eq?.

Here is a list of possible names of syslog facilities:

authorization
The authorization system: login, su, getty, etc.

cron
The cron daemon.

daemon
System daemons, such as routed, that are not provided for explicitly by other facilities.

kernel
Messages generated by the kernel.

lpr
The line printer spooling system: lpr, lpc, lpd, etc.

mail
The mail system.

news
The network news system.

user
Messages generated by random user processes.

uucp
The uucp system.

local0 local1 local2 local3 local4 local5 local6 local7
Reserved for local use.

Log levels

A log level identifies the importance of a message from a fixed set of possible levels.

  • (syslog-level level-name) –> level     (syntax)

  • (syslog-level? x) –> boolean

Syslog-level is macro that expands into an expression returning a facility for a given name. Syslog-level? is a predicate for facilities. Levels are comparable via eq?.

Here is a list of possible names of syslog levels:

emergency
A panic condition. This is normally broadcast to all users.

alert
A condition that should be corrected immediately, such as a corrupted system database.

critical
Critical conditions, e.g., hard device errors.

error
Errors.

warning
Warning messages.

notice
Conditions that are not error conditions, but should possibly be handled specially.

info
Informational messages.

debug
Messages that contain information normally of use only when debugging a program.

Log masks

A log masks can mask out log messages at a set of levels. A log mask is an enum set of log levels.

  • (make-syslog-mask list) –> mask

  • (syslog-mask level-name ...) –> mask     (syntax)

  • syslog-mask-all     ( mask)

  • (syslog-mask-upto level) –> mask

  • (syslog-mask? x) –> boolean

Make-syslog-mask constructs a mask from a list of levels. Syslog-mask is a macro which constructs a mask from names of levels. Syslog-mask-all is a predefined log mask containing all levels. Syslog-mask-upto returns a mask consisting of all levels up to and including a certain level, starting with emergency.

Logging

Scheme 48 dynamically maintains implicit connections to the syslog facility specifying a current identifier, current options, a current facility and a current log mask. Every thread maintains it own implicit connection to syslog. Note that the connection is not implicitly preserved across a spawn.

  • (with-syslog-destination string options facility mask thunk) –> value

With-syslog-destination dynamically binds parameters of the implicit connection to the syslog facility and runs thunk within those parameter bindings, returning what thunk returns. Each of the parameters may be #f in which case the previous values will be used.

  • (syslog level message)

  • (syslog level message string)

  • (syslog level message string options)

  • (syslog level message string options syslog-facility)

  • (syslog level message channel)

Syslog actually logs a message. Each of the parameters of the implicit connection (except for the log mask) can be explicitly specified as well for the current call to syslog, overriding the parameters of the channel. The parameters revert to their original values after the call.

The final form specifies the destination of the log message as a channel; see the next section.

Syslog channels

These procedures allow direct manipulation of syslog channels, the objects that represent connections to the syslog facility. Note that it is not necessary to explicitly open a syslog channel to do logging.

  • (open-syslog-channelstring options facility mask) –> channel

  • (close-syslog-channelchannel)

  • (with-syslog-destination channel thunk) –> value

Open-syslog-channel and close-syslog-channel create and destroy a connection to the syslog facility, respectively. The specified form of calling syslog logs to the specified channel.

With-syslog-channel dynamically binds parameters of the implicit connection to the syslog facility to those specified in channel and runs thunk within those parameter bindings, returning what thunk returns.

9.11  Error codes

POSIX functions report the nature of an error via system error numbers—OS-specific integers that encode a variety of different error situations. At the Scheme level, error numbers are represented as errnos, objects that specify a name for the error sitation. Errnos are definted in the structures posix-errnos and posix.

Currently, the system reports such error situations by raising exceptions with condition type &os-error. The &os-error condition type has a field code that contains the system error number.

There are two varieties of errnos available, named and anonymous. A named errno is one for which we have a symbolic name, such as fault or intr. Anonymous errnos, for which we only have the current operating system's errno number, have no meaning in other operating systems. Named errnos preserve their meaning in image files. Not all named errnos are available from all OS's and there may be multiple names for a single OS errno number.

  • (errno errno-name) –> errno     (syntax)

  • (name->errno symbol) –> errno or #f

  • (integer->errno integer) –> errno

  • (errno? x) –> boolean

  • (errno-name errno) –> symbol or #f

  • (errno-os-number errno) –> integer

  • (errno=? errno0 errno1) –> boolean

The syntax errno returns a (named) errno associated with errno-name. Name->errno returns a (named) errno or #f if the the errno name is not supported by the operating system. The errno returned by integer->errno is a named errno if integer corresponds to a named errno in the current operating system; otherwise it returns an anonymous errno. Errno-name returns a symbol if errno is named and #f if it is anonymous. Errno=? returns #t if errno0 and errno1 have the same operating system number and #f if they do not.

9.11.1  POSIX errnos

The following lists the names of the POSIX errnos.

@lp0.6 toobig                         Argument list too long.
acces                                 Permission denied.
addrinuse                                 Address in use.
addrnotavail                         Address not available.
afnosupport                 Address family not supported.
again Resource unavailable, try again.
already                         Connection already in progress.
badf                                 Bad file descriptor.
badmsg                                 Bad message.
busy                                 Device or resource busy.
canceled                                 Operation canceled.
child                                 No child processes.
connaborted                         Connection aborted.
connrefused                         Connection refused.
connreset                                 Connection reset.
deadlk                         Resource deadlock would occur.
destaddrreq                 Destination address required.
dom         Mathematics argument out of domain of function.
dquot                                 Reserved.
exist                                 File exists.
fault                                 Bad address.
fbig                                 File too large.
hostunreach                         Host is unreachable.
idrm                                 Identifier removed.
ilseq                                 Illegal byte sequence.
inprogress                                 Operation in progress.
intr                                 Interrupted function.
inval                                 Invalid argument.
io                                         I/O error.
isconn                                 Socket is connected.
isdir                                 Is a directory.
loop                         Too many levels of symbolic links.
mfile                                 Too many open files.
mlink                                 Too many links.
msgsize                                 Message too large.
multihop                                 Reserved.
nametoolong                         Filename too long.
netdown                                 Network is down.
netreset                         Connection aborted by network.
netunreach                                 Network unreachable.
nfile                         Too many files open in system.
nobufs                                 No buffer space available.
nodata No message is available on the STREAM head read queue.
nodev                                 No such device.
noent                                 No such file or directory.
noexec                         Executable file format error.
nolck                                 No locks available.
nolink                                 Reserved.
nomem                                 Not enough space.
nomsg                         No message of the desired type.
noprotoopt                                 Protocol not available.
nospc                                 No space left on device.
nosr                                 No STREAM resources.
nostr                                 Not a STREAM.
nosys                                 Function not supported.
notconn                                 The socket is not connected.
notdir                                 Not a directory.
notempty                                 Directory not empty.
notsock                                 Not a socket.
notsup                                 Not supported.
notty                         Inappropriate I/O control operation.
nxio                                 No such device or address.
opnotsupp                         Operation not supported on socket.
overflow                 Value too large to be stored in data type.
perm                                 Operation not permitted.
pipe                                 Broken pipe.
proto                                 Protocol error.
protonosupport                         Protocol not supported.
prototype                         Protocol wrong type for socket.
range                                 Result too large.
rofs                                 Read-only file system.
spipe                                 Invalid seek.
srch                                 No such process.
stale                                 Reserved.
time                         Stream ioctl() timeout.
timedout                                 Connection timed out.
txtbsy                                 Text file busy.
wouldblock         Operation would block.
xdev                                 Cross-device link.

9.12  C to Scheme correspondence

The following table lists the Scheme procedures that correspond to particular C procedures. Not all of the Scheme procedures listed are part of the POSIX interface.

C procedure Scheme procedure(s)
C procedure Scheme procedure(s)
accessaccessible?
asctimedate->string
chdirset-working-directory!
closeclose-input-port, close-output-port,
close-channel, close-socket
closedirclose-directory-stream
creatopen-file
ctimetime->string
dupdup, dup-switching-mode
dup2dup2
exec[l|v][e|p|ε] exec, exec-with-environment,
exec-file, exec-file-with-environment,
exec-with-alias
_exitexit
fcntlio-flags, set-io-flags!,
close-on-exec, set-close-on-exec!
forkfork, fork-and-forget
fstatget-port-info
getcwdworking-directory
getegidget-effective-group-id
getenvlookup-environment-variable,
environment-alist
geteuidget-effective-user-id
getgidget-group-id
getgroupsget-groups
getloginget-login-name
getpidget-process-id
getppidget-parent-process-id
getuidget-user-id
gmtimetime->local-date
isattyport-is-a-terminal?
linklink
localtimetime->utc-date
lstatget-file/link-info
mkdirmake-directory
mkfifomake-fifo
mktimedate->time
openopen-file
opendiropen-directory-stream
pipeopen-pipe
readread-char, read-block
readdirread-directory-stream
readlinkread-symbolic-link
renamerename
rmdirremove-directory
setgidset-group-id!
setegidset-effective-group-id!
setuidset-user-id!
seteuidset-effective-user-id!
statget-file-info
strftimeformat-date
symlinkcreate-symbolic-link
syslogsyslog
timecurrent-time
ttynameport-terminal-name
umaskset-file-creation-mask!
unameos-name, os-node-name,
os-release-name, os-version-name,
machine-name
unlinkunlink
waitpidwait-for-child-process
writewrite-char, write-block

scheme48-1.9/doc/html/manual-Z-H-11.html000644 004306 005702 00000145674 12074535603 020535 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9

 

Bibliography

[1]   Information technology – Portable Operating System Interface (POSIX). ISO/IEC 9945-1 ANSI/IEEE Std 1003.1. 2nd Ed., 1996.

[2]   William Clinger and Jonathan Rees. Macros that work. Principles of Programming Languages, January 1991.

[3]   William Clinger and Jonathan Rees (editors). Revised4 report on the algorithmic language Scheme. LISP Pointers IV(3):1–55, July-September 1991.

[4]   Pavel Curtis and James Rauen. A module system for Scheme. ACM Conference on Lisp and Functional Programming, pages 13–19, 1990.

[5]   Richard Kelsey and Jonathan Rees. A Tractable Scheme Implementation. Lisp and Symbolic Computation 7:315–335 1994.

[6]   Richard Kelsey, Will Clinger, Jonathan Rees (editors). Revised5 Report on the Algorithmic Language Scheme. Higher-Order and Symbolic Computation, Vol. 11, No. 1, September, 1998. and ACM SIGPLAN Notices, Vol. 33, No. 9, October, 1998.

[7]   David MacQueen. Modules for Standard ML. ACM Conference on Lisp and Functional Programming, 1984.

[8]   Jonathan Rees and Bruce Donald. Program mobile robots in Scheme. International Conference on Robotics and Automation, IEEE, 1992.

[9]   John H. Reppy. Concurrent Programming in ML. Cambridge University Press, 1999.

[10]   Mark A. Sheldon and David K. Gifford. Static dependent types for first-class modules. ACM Conference on Lisp and Functional Programming, pages 20–29, 1990.

[11]   Olin Shivers, Brian D. Carlstrom, Martin Gasbichler and Mike Sperber. Scsh Reference Manual, scsh release 0.6.6. Available at URL http://www.scsh.net/.

[12]   Olin Shivers. A universal scripting framework, or Lambda: the ultimate “little language”. Concurrency and Parallelism, Programming, Networking, and Security, pages 254–265, Springer 1996. Joxan Jaffar and Roland H. C. Yap, editors.

 

Index


accessible?, 10
add-signal-queue-signal!, 10
after-time-rv, 8
always-rv, 8
any, 6
any-match?, 6
any?, 6
arithmetic-shift, 6
array, 6
array->vector, 6
array-ref, 6
array-set!, 6
array-shape, 6
array?, 6
ascii-range, 6
ascii-ranges, 6
at-real-time-rv, 8
atom?, 6
atomically!, 8


bit-count, 6
bitwise-and, 6
bitwise-ior, 6
bitwise-not, 6
bitwise-xor, 6
byte-vector, 6
byte-vector->os-string, 6
byte-vector-length, 6
byte-vector-ref, 6
byte-vector-set!, 6
byte-vector=?, 6
byte-vector?, 6


call-atomically, 8
call-atomically!, 8
call-ensuring-atomicity, 8
call-ensuring-atomicity!, 8
call-imported-binding-2, 9
call-with-os-string-text-codec, 6
cell-ref, 6
cell-set!, 6
cell?, 6
channel?, 8
char->scalar-value, 7
char-foldcase, 7
char-general-category, 7
char-titlecase, 7
char-titlecase?, 7
choose, 8
close-all-but, 10
close-directory-stream, 10
close-on-exec?, 10
close-socket, 6
close-syslog-channel, 10
compound-interface, 5
concatenate-symbol, 6
condvar-has-value?, 8
condvar-value, 8
condvar?, 8
copy-array, 6
create-symbolic-link, 10
current-column, 6
current-os-string-text-codec, 6
current-proposal, 8
current-row, 6
current-thread, 8
current-time, 10


date->string, 10
date->time, 10
date-date-dst, 10
date-hour, 10
date-minute, 10
date-month, 10
date-month-day, 10
date-second, 10
date-week-day, 10
date-year, 10
date-year-day, 10
date?, 10
debug-message, 8
default-hash-function, 6
define-exported-binding, 9
define-imported-binding, 9
define-interface, 5
define-record-discloser, 6, 6ii
define-record-resumer, 6, 9
define-structure, 5
define-text-codec, 7, 7ii
delete, 6
delete-from-queue!, 6
delq, 6
delq!, 6
dequeue!, 6
dequeue-or-thunk!, 6
dequeue-or-value!, 6
dequeue-signal!, 10
directory-stream?, 10
dup, 10
dup-switching-mode, 10
dup2, 10


empty-queue!, 6
enqueue!, 6
enqueue-many!, 6
ensure-atomicity!, 8
enum-set->list, 6
enum-set-difference, 6
enum-set-intersection, 6
enum-set-member?, 6
enum-set-negation, 6
enum-set-subset?, 6
enum-set-union, 6
enum-set=?, 6
environment-alist, 10
errno-name, 10
errno-os-number, 10
errno=?, 10
errno?, 10
every?, 6
exact-match?, 6
exec, 10
exec-file, 10
exec-file-with-environment, 10
exec-with-alias, 10
exec-with-environment, 10
exit, 10


fd-port?, 10
file-info-device, 10
file-info-group, 10
file-info-inode, 10
file-info-last-access, 10
file-info-last-modification, 10
file-info-last-status-change, 10
file-info-link-count, 10
file-info-mode, 10
file-info-name, 10
file-info-owner, 10
file-info-size, 10
file-info-type, 10
file-info?, 10
file-mode+, 10
file-mode-, 10
file-mode->integer, 10
file-mode<=?, 10
file-mode=?, 10
file-mode>=?, 10
file-mode?, 10
file-options-on?, 10
file-options-union, 10
file-type-name, 10
file-type?, 10
filter, 6
filter!, 6
filter-map, 6
find-text-codec, 7
first, 6
fluid, 6
fork, 10
fork-and-forget, 10
format-date, 10
fresh-line, 6


general-category-id, 7
general-category-primary-category, 7
general-category?, 7
get-effective-group-id, 10
get-effective-user-id, 10
get-file-info, 10
get-file/link-info, 10
get-group-id, 10
get-groups, 10
get-host-name, 6
get-login-name, 10
get-parent-process-id, 10
get-port-info, 10
get-process-id, 10
get-user-id, 10
group-id->group-info, 10
group-id->integer, 10
group-id=?, 10
group-id?, 10
group-info-id, 10
group-info-members, 10
group-info-name, 10
group-info?, 10
guard, 8
guess-port-text-codec-according-to-bom, 7


have-system?, 6


i/o-flags, 10
identity, 6
ignore-case, 6
import-definition, 9
import-dynamic-externals, 9
import-lambda-definition-2, 9
integer->errno, 10
integer->file-mode, 10
integer->group-id, 10
integer->process-id, 10
integer->signal, 10
integer->user-id, 10
intersection, 6
invalidate-current-proposal!, 8


jar-put!, 8
jar-take, 8
jar-take-rv, 8
jar?, 8


kill-thread!, 8


latin-1-codec, 7
let-fluid, 6
let-fluids, 6
limit-output, 6
link, 10
list->queue, 6
list-delete-neighbor-dups, 6, 6ii
list-delete-neighbor-dups!, 6
list-directory, 10
list-merge, 6, 6ii
list-merge!, 6, 6ii
list-merge-sort, 6
list-merge-sort!, 6
list-sort, 6
list-sort!, 6
list-sorted?, 6, 6ii
list-stable-sort, 6
list-stable-sort!, 6
load-dynamic-externals, 9
lock?, 8
lookup-environment-variable, 10
lookup-exported-binding, 9
lookup-imported-binding, 9


machine-name, 10
make-array, 6
make-byte-vector, 6
make-cell, 6
make-channel, 8
make-condvar, 8, 8ii
make-date, 10
make-directory, 10
make-empty-profile-data, 6
make-fifo, 10
make-fluid, 6
make-integer-table, 6
make-jar, 8, 8ii
make-lock, 8
make-os-string, 6
make-placeholder, 8, 8ii, 8iii, 8iv
make-proposal, 8
make-queue, 6
make-record, 6
make-record-type, 6
make-regexp, 10
make-shared-array, 6
make-signal-queue, 10
make-sparse-vector, 6
make-string-input-port, 6
make-string-output-port, 6
make-string-table, 6
make-symbol-table, 6
make-syslog-mask, 10
make-syslog-options, 10
make-table, 6
make-table-immutable!, 6
make-table-maker, 6
make-text-codec, 7
make-time, 10
make-tracking-input-port, 6
make-tracking-output-port, 6
match, 6
match-end, 6, 10
match-start, 6, 10
match-submatches, 6
match?, 10
maybe-commit, 8
maybe-commit-and-block, 8
maybe-commit-and-block-on-queue, 8
maybe-commit-and-make-ready, 8
maybe-commit-and-set-condvar!, 8
maybe-commit-and-wait-for-condvar, 8
maybe-dequeue!, 6
maybe-dequeue-signal!, 10
maybe-dequeue-thread!, 8
maybe-obtain-lock, 8
maybe-queue-head, 6
memq?, 6
modify, 5


n=, 6
name->errno, 10
name->group-info, 10
name->signal, 10
name->user-info, 10
negate, 6
neq?, 6
never-rv, 8
new-external-event, 9
new-external-event-uid, 9
no-op, 6
no-submatches, 6
null-list?, 6
null-text-codec, 7


obtain-lock, 8
on-queue?, 6
one-of, 6
open-directory-stream, 10
open-file, 10, 10ii
open-pipe, 10
open-socket, 6, 6ii
open-syslog-channel, 10
OS string, 6
os-name, 10
os-node-name, 10
os-release-name, 10
os-string->byte-vector, 6
os-string->string, 6
os-string-text-codec, 6
os-string-thing, 6
os-string=?, 6
os-string?, 6
os-version-name, 10


p, 6, 6ii
partition-list, 6
partition-list!, 6
placeholder-set!, 8, 8ii
placeholder-value, 8, 8ii
placeholder-value-rv, 8
placeholder?, 8, 8ii
port->fd, 10
port-is-a-terminal?, 10
port-terminal-name, 10
port-text-codec, 7
prefix, 5
pretty-print, 6
primary-category?, 7
process-id->integer, 10
process-id-exit-status, 10
process-id-terminating-signal, 10
process-id=?, 10
process-id?, 10
profile-data-endtime, 6
profile-data-gcruns, 6
profile-data-interrupttime, 6
profile-data-memoryuse, 6
profile-data-runtime, 6
profile-data-samples, 6
profile-data-starttime, 6
profile-display, 6
profile-display-flat, 6
profile-display-overview, 6
profile-display-tree, 6
profile-function-calls, 6
profile-function-hist, 6
profile-function-memoryuse, 6
profile-function-nonreccalls, 6
profile-function-occurs, 6
profile-function-reccalls, 6
profile-function-time-cumulative, 6
profile-function-time-self, 6
profile-function-timeshare, 6
profile-thunk, 6
proposal-active?, 8
provisional-byte-vector-ref, 8
provisional-byte-vector-set!, 8
provisional-car, 8
provisional-cdr, 8
provisional-cell-ref, 8
provisional-cell-set!, 8
provisional-set-car!, 8
provisional-set-cdr!, 8
provisional-string-ref, 8
provisional-string-set!, 8
provisional-vector-ref, 8
provisional-vector-set!, 8


queue->list, 6
queue-empty?, 6
queue-head, 6
queue-head-or-thunk, 6
queue-head-or-value, 6
queue-length, 6
queue?, 6


range, 6
ranges, 6
read-directory-stream, 10
read-symbolic-link, 10
receive, 8
receive-rv, 8
record, 6
record-accessor, 6
record-constructor, 6
record-length, 6
record-modifier, 6
record-predicate, 6
record-ref, 6
record-set!, 6
record-type, 6
record-type-field-names, 6
record-type-name, 6
record-type?, 6
record?, 6
regexp-match, 10
regexp?, 6, 10
release-lock, 8
relinquish-timeslice, 8
reload-dynamic-externals, 9
remap-file-descriptors, 10
remove-current-proposal!, 8
remove-directory, 10
remove-duplicates, 6
remove-signal-queue-signal!, 10
rename, 10
repeat, 6, 6ii, 6iii
reverse!, 6


scalar-value->char, 7
scalar-value?, 7
select, 8
send, 8
send-rv, 8
sequence, 6
set, 6
set-close-on-exec?!, 10
set-condvar-has-value?!, 8
set-condvar-value!, 8
set-current-proposal!, 8
set-effective-group-id!, 10
set-effective-user-id!, 10
set-environment-variable!, 10
set-file-creation-mask!, 10
set-group-id!, 10
set-i/o-flags!, 10
set-port-text-codec!, 7
set-port-text-codec-according-to-bom!, 7
set-user-id!, 10
set-working-directory!, 10
shared-binding-is-import?, 9
shared-binding-name, 9
shared-binding-ref, 9
shared-binding-set!, 9
shared-binding?, 9
signal-name, 10
signal-os-number, 10
signal-process, 10
signal-queue-monitored-signals, 10
signal-queue?, 10
signal=?, 10
signal?, 10
sleep, 8
socket-accept, 6
socket-client, 6
socket-port-number, 6
sparse-vector->list, 6
sparse-vector-ref, 6
sparse-vector-set!, 6
spawn, 8, 8ii
string->os-byte-vector, 6
string->os-string, 6
string-downcase, 7
string-end, 6
string-foldcase, 7
string-hash, 6
string-output-port-output, 6
string-start, 6
string-titlecase, 7
string-upcase, 7
submatch, 6
subset, 5
subtract, 6
symbol-hash, 6
sync, 8
syslog, 10, 10ii, 10iii, 10iv, 10v
syslog-facility?, 10
syslog-level?, 10
syslog-mask-all, 10
syslog-mask-upto, 10
syslog-mask?, 10
syslog-option?, 10
syslog-options?, 10
system, 6


table->entry-list, 6
table-ref, 6
table-set!, 6
table-walk, 6
table?, 6
terminate-current-thread, 8
terminate-thread!, 8
text, 6
text codec, 7
text-codec-decode-char-proc, 7
text-codec-encode-char-proc, 7
text-codec-names, 7
text-codec?, 7
thread-name, 8
thread-queue-empty?, 8
thread-uid, 8
thread?, 8
time->local-date, 10
time->string, 10
time->utc-date, 10
time-seconds, 10
time<=?, 10
time<?, 10
time=?, 10
time>=?, 10
time>?, 10
time?, 10


undefine-exported-binding, 9
undefine-imported-binding, 9
union, 6
unlink, 10
unload-dynamic-externals, 9
us-ascii-codec, 7
use-case, 6
user-id->integer, 10
user-id->user-info, 10
user-id=?, 10
user-id?, 10
user-info-group, 10
user-info-home-directory, 10
user-info-id, 10
user-info-name, 10
user-info-shell, 10
user-info?, 10
utf-16be-codec, 7
utf-16le-codec, 7
utf-32be-codec, 7
utf-32le-codec, 7
utf-8-codec, 7


vector-binary-search, 6
vector-binary-search3, 6
vector-delete-neighbor-dups, 6, 6ii, 6iii
vector-heap-sort, 6
vector-heap-sort!, 6
vector-insert-sort, 6
vector-insert-sort!, 6
vector-merge, 6, 6ii
vector-merge!, 6, 6ii
vector-merge-sort, 6
vector-merge-sort!, 6
vector-quick-sort, 6
vector-quick-sort!, 6
vector-quick-sort3, 6
vector-quick-sort3!, 6
vector-sort, 6
vector-sort!, 6
vector-sorted?, 6, 6ii, 6iii, 6iv
vector-stable-sort, 6
vector-stable-sort!, 6


wait-for-child-process, 10
wait-for-external-event, 9
with-nack, 8
with-syslog-destination, 10, 10ii
working-directory, 10
wrap, 8


x->os-byte-vector, 6
x->os-string, 6

scheme48-1.9/doc/html/manual-Z-H-2.html000644 004306 005702 00000005665 12074535600 020445 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Introduction

Scheme 48 is an implementation of the Scheme programming language as described in the Revised5 Report on the Algorithmic Language Scheme [6]. It is based on a compiler and interpreter for a virtual Scheme machine. Scheme 48 tries to be faithful to the Revised5 Scheme Report, providing neither more nor less in the initial user environment. (This is not to say that more isn't available in other environments; see below.)

Scheme 48 is under continual development. Please report bugs, especially in the VM, especially core dumps, to scheme-48-bugs@s48.org. Include the version number x.yy from the "Welcome to Scheme 48 x.yy" greeting message in your bug report. It is a goal of this project to produce a bullet-proof system; we want no bugs and, especially, no crashes. (There are a few known bugs, listed in the doc/todo.txt file that comes with the distribution.)

Send a message to scheme-48-request@s48.org with subject `subscribe' to be put on a mailing list for announcements, discussion, bug reports, and bug fixes.

The name `Scheme 48' commemorates our having written the original version in forty-eight hours, on August 6th and 7th, 1986.

scheme48-1.9/doc/html/manual-Z-H-3.html000644 004306 005702 00000032254 12074535600 020440 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


User's guide

This chapter details Scheme 48's user interface: its command-line arguments, command processor, debugger, and so forth.

2.1  Command line arguments

A few command line arguments are processed by Scheme 48 as it starts up.

scheme48 [-i image] [-h heapsize] [-a argument ...]

-i image
specifies a heap image file to resume. This defaults to a heap image that runs a Scheme command processor. Heap images are created by the ,dump and ,build commands, for which see below.

-h heapsize
specifies how much space should be reserved for allocation. Heapsize is in words (where one word = 4 bytes), and covers both semispaces, only one of which is in use at any given time (except during garbage collection). Cons cells are currently 3 words, so if you want to make sure you can allocate a million cons cells, you should specify -h 6000000 (actually somewhat more than this, to account for the initial heap image and breathing room). The default heap size is 3000000 words. The system will use a larger heap if the specified (or default) size is less than the size of the image being resumed.

-a argument ...
is only useful with images built using ,build. The arguments are passed as a list of OS strings (see section 5.15) to the procedure specified in the ,build command. For example:
> ,open os-strings
> (define (f xs)
    (write (map os-string->string xs))
    (newline)
    0)                                        ;must return an integer
> ,build f foo.image
> ,exit
% scheme48vm -i foo.image -a mumble "foo x" -h 5000000
("mumble" "foo x" "-h" "5000000")
%

-I image argument ...
is equivalent to -i image -a argument .... On most Unix-like systems, a heap image can be made executable with the following Bourne shell commands:
% (echo '#!/s48/install/prefix/lib/scheme48-1.9/scheme48vm -I'
   cat original.image) >new.image
% chmod +x new.image

The usual definition of the s48 or scheme48 command is actually a shell script that starts up the Scheme 48 virtual machine with a -i imagefile specifying the development environment heap image and a -o vm-executable specifying the location of the virtual-machine executable (the executable is needed for loading external code on some versions of Unix; see section 8.4 for more information). The file go in the Scheme 48 installation source directory is an example of such a shell script.

2.2  Command processor

When you invoke the default heap image, a command processor starts running. The command processor acts as both a read-eval-print loop, reading expressions, evaluating them, and printing the results, and as an interactive debugger and data inspector. See Chapter 3 for a description of the command processor.

2.3  Editing

We recommend running Scheme 48 under GNU Emacs or XEmacs using the cmuscheme48 command package. This is in the Scheme 48 distribution's emacs/ subdirectory and is included in XEmacs's scheme package. It is a variant of the cmuscheme library, which comes to us courtesy of Olin Shivers, formerly of CMU. You might want to put the following in your Emacs init file (.emacs):

(setq scheme-program-name "scheme48")
(autoload 'run-scheme
          "cmuscheme48"
          "Run an inferior Scheme process."
          t)

The Emacs function run-scheme can then be used to start a process running the program scheme48 in a new buffer. To make the autoload and (require ...) forms work, you will also need to put the directory containing cmuscheme and related files in your emacs load-path:

(setq load-path
  (append load-path '("scheme-48-directory/emacs")))

Further documentation can be found in the files emacs/cmuscheme48.el and emacs/comint.el.

2.4  Performance

If you want to generally have your code run faster than it normally would, enter inline-values mode before loading anything. Otherwise calls to primitives (like + and cons) and in-line procedures (like not and cadr) won't be open-coded, and programs will run more slowly.

The system doesn't start in inline-values mode by default because the Scheme report permits redefinitions of built-in procedures. With this mode set, such redefinitions don't work according to the report, because previously compiled calls may have in-lined the old definition, leaving no opportunity to call the new definition.

Inline-values mode is controlled by the inline-values switch. ,set inline-values and ,unset inline-values turn it on and off.

2.5  Disassembler

The ,dis command prints out the disassembled byte codes of a procedure.

> ,dis cons
cons
  0 (protocol 2)
  2 (pop)
  3 (make-stored-object 2 pair)
  6 (return)
> 

The current byte codes are listed in the file scheme/vm/interp/arch.scm. A somewhat out-of-date description of them can be found in [5].

The command argument is optional; if unsupplied it defaults to the current focus object (##).

The disassembler can also be invoked on continuations and templates.

2.6  Module system

This section gives a brief description of modules and related entities. For detailed information, including a description of the module configuration language, see chapter 4.

A module is an isolated namespace, with visibility of bindings controlled by module descriptions written in a special configuration language. A module may be instantiated as a package, which is an environment in which code can be evaluated. Most modules are instantiated only once and so have a unique package. A structure is a subset of the bindings in a package. Only by being included in a structure can a binding be made visible in other packages. A structure has two parts, the package whose bindings are being exported and the set of names that are to be exported. This set of names is called an interface. A module then has three parts:

  • a set of structures whose bindings are to be visible within the module

  • the source code to be evaluated within the module

  • a set of exported interfaces

Instantiating a module produces a package and a set of structures, one for each of the exported interfaces.

The following example uses define-structure to create a module that implements simple cells as pairs, instantiates this module, and binds the resulting structure to cells. The syntax (export name ...) creates an interface containing name .... The open clause lists structures whose bindings are visible within the module. The begin clause contains source code.

(define-structure cells (export make-cell
                                cell-ref
                                cell-set!)
  (open scheme)
  (begin (define (make-cell x)
           (cons 'cell x))
         (define cell-ref cdr)
         (define cell-set! set-cdr!)))

Cells could also have been implemented using the record facility described in section 5.9 and available in structure define-record-type.

(define-structure cells (export make-cell
                                cell-ref
                                cell-set!)
  (open scheme define-record-types)
  (begin (define-record-type cell :cell
           (make-cell value)
           cell?
           (value cell-ref cell-set!))))

With either definition the resulting structure can be used in other modules by including cells in an open clause.

The command interpreter is always operating within a particular package. Initially this is a package in which only the standard Scheme bindings are visible. The bindings of other structures can be made visible by using the ,open command described in section 3.4 below.

Note that this initial package does not include the configuration language. Module code needs to be evaluated in the configuration package, which can be done by using the ,config command:

> ,config (define-structure cells ...)
> ,open cells
> (make-cell 4)
'(cell . 4)
> (define c (make-cell 4))
> (cell-ref c)
4

2.7  Library

A number of useful utilities are either built in to Scheme 48 or can be loaded from an external library. These utilities are not visible in the user environment by default, but can be made available with the open command. For example, to use the tables structure, do

> ,open tables
> 

If the utility is not already loaded, then the ,open command will load it. Or, you can load something explicitly (without opening it) using the load-package command:

> ,load-package queues
> ,open queues

When loading a utility, the message "Note: optional optimizer not invoked" is innocuous. Feel free to ignore it.

See also the package system documentation, in chapter 4.

Not all of the the libraries available in Scheme 48 are described in this manual. All are listed in files rts-packages.scm, comp-packages.scm, env-packages.scm, and more-packages.scm in the scheme directory of the distribution, and the bindings they export are listed in interfaces.scm and more-interfaces.scm in the same directory.

scheme48-1.9/doc/html/manual-Z-H-4.html000644 004306 005702 00000126375 12074535600 020451 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Command processor

This chapter details Scheme 48's command processor, which incorporates both a read-eval-print loop and an interactive debugger. At the > prompt, you can type either a Scheme form (expression or definition) or a command beginning with a comma. In inspection mode (see section 3.8) the prompt changes to : and commands no longer need to be preceded by a comma; input beginning with a letter or digit is assumed to be a command, not an expression. In inspection mode the command processor prints out a menu of selectable components for the current object of interest.

3.1  Current focus value and ##

The command processor keeps track of a current focus value. This value is normally the last value returned by a command. If a command returns multiple values the focus object is a list of the values. The focus value is not changed if a command returns no values or a distinguished `unspecific' value. Examples of forms that return this unspecific value are definitions, uses of set!, and (if #f 0). It prints as #{Unspecific}.

The reader used by the command processor reads ## as a special expression that evaluates to the current focus object.

> (list 'a 'b)
'(a b)
> (car ##)
'a
> (symbol->string ##)
"a"
> (if #f 0)
#{Unspecific}
> ##
"a"
> 

3.2  Command levels

If an error, keyboard interrupt, or other breakpoint occurs, or the ,push command is used, the command processor invokes a recursive copy of itself, preserving the dynamic state of the program when the breakpoint occurred. The recursive invocation creates a new command level. The command levels form a stack with the current level at the top. The command prompt indicates the number of stopped levels below the current one: > or : for the base level and n> or n: for all other levels, where n is the command-level nesting depth. The levels setting described below can be used to disable the automatic pushing of new levels.

The command processor's evaluation package and the value of the current focus value are local to each command level. They are preserved when a new level is pushed and restored when it is discarded. The settings of all other settings are shared by all command levels.

⟨eof⟩
Discards the current command level and resumes running the level down. ⟨eof⟩ is usually control-D at a Unix shell or control-C control-D using the Emacs cmuscheme48 library.

,pop
The same as ⟨eof⟩.

,proceed [exp ...]
Proceed after an interrupt or error, resuming the next command level down, delivering the values of exp ... to the continuation. Interrupt continuations discard any returned values. ,Pop and ,proceed have the same effect after an interrupt but behave differently after errors. ,Proceed restarts the erroneous computation from the point where the error occurred (although not all errors are proceedable) while ,pop (and ⟨eof⟩) discards it and prompts for a new command.

,push
Pushes a new command level on above the current one. This is useful if the levels setting has been used to disable the automatic pushing of new levels for errors and interrupts.

,reset [number]
Pops down to a given level and restarts that level. Number defaults to zero, ,reset restarts the command processor, discarding all existing levels.

Whenever moving to an existing level, either by sending an ⟨eof⟩ or by using ,reset or the other commands listed above, the command processor runs all of the dynamic-wind “after” thunks belonging to stopped computations on the discarded level(s).

3.3  Logistical commands

,load filename ...
Loads the named Scheme source file(s). Easier to type than (load "filename") because you don't have to shift to type the parentheses or quote marks. (However, it is still possible to specify a filename as a Scheme string literal, with quote marks—you'll need this for filenames containing whitespace.) Also, it works in any package, unlike (load "filename"), which will work only in packages in which the variable load is defined appropriately.

,exit [exp]
Exits back out to shell (or executive or whatever invoked Scheme 48 in the first place). Exp should evaluate to an integer. The integer is returned to the calling program. The default value of exp is zero, which, on Unix, is generally interpreted as success.

3.4  Module commands

There are many commands related to modules. Only the most commonly used module commands are described here; documentation for the rest can be found in section 4.8. There is also a brief description of modules, structures, and packages in section 2.6 below.

,open structure ...
Makes the bindings in the structures visible in the current package. The packages associated with the structures will be loaded if this has not already been done (the ask-before-loading setting can be used to disable the automatic loading of packages).

,config [command]
Executes command in the config package, which includes the module configuration language. For example, use
,config ,load filename

to load a file containing module definitions. If no command is given, the config package becomes the execution package for future commands.

,user [command]
This is similar to the ,config. It moves to or executes a command in the user package (which is the default package when the Scheme 48 command processor starts).

3.5  Debugging commands

,preview
Somewhat like a backtrace, but because of tail recursion you see less than you might in debuggers for some other languages. The stack to display is chosen as follows:
  1. If the current focus object is a continuation or a thread, then that continuation or thread's stack is displayed.

  2. Otherwise, if the current command level was initiated because of a breakpoint in the next level down, then the stack at that breakpoint is displayed.

  3. Otherwise, there is no stack to display and a message is printed to that effect.

One line is printed out for each continuation on the chosen stack, going from top to bottom.

,run exp
Evaluate exp, printing the result(s) and making them (or a list of them, if exp returns multiple results) the new focus object. The ,run command is useful in inspection mode (see section 3.8 below) and when writing command programs (see section 3.9 below).

,trace name ...
Start tracing calls to the named procedure or procedures. With no arguments, displays all procedures currently traced. This affects the binding of name, not the behavior of the procedure that is its current value. Name is redefined to be a procedure that prints a message, calls the original value of name, prints another message, and finally passes along the value(s) returned by the original procedure.

,untrace name ...
Stop tracing calls to the named procedure or procedures. With no argument, stop tracing all calls to all procedures.

,condition
The ,condition command displays the condition object describing the error or interrupt that initiated the current command level. The condition object becomes the current focus value. This is particularly useful in conjunction with the inspector. For example, if a procedure is passed the wrong number of arguments, do ,condition followed by ,inspect to inspect the procedure and its arguments.

,bound? name
Display the binding of name, if there is one, and otherwise prints `Not bound'.

,expand form Show macro expansion of form, if any, fully expanding all macros in form.

,where procedure
Display name of file containing procedure's source code.

3.6  Profiling commands

After loading the profile-commands structure via

,load-package profile-commands  

Scheme 48 provides a basic profiler, with support for flat and call-graph profiles. In addition to call- and runtimes the heap memory usage is estimated as well. By adding the byte-code optimizer profiler-instrumentation to the definition of a structure via a clause

  (optimize profiler-instrumentation)

in the structure definition, code will by instrumented with calls to the profiler. The call-times to instrumented code can then be measured exactly. Without instrumentation, the profiler is solely based on sampling and therefore has only limited accuracy. Any evaluation can be profiled with the following command:

,profile command
Evaluate command under the profiler, printing the profiling result and making the return value(s) of command the new focus object.

The output of the profiler is explained on the basis of the following piece of senseless code:

(define (c x)
  (if (= x 0)
      0
      (+ 1 (c (- x 1)))))

(define (b x)
  (let ((y (- x 1)))
    (if (> y 0)
        (begin
          (c y)
          (a y)
          (+ 1 (a y)))
        0)))

(define (a x)
  (let ((y (- x 1)))
    (if (> y 0)
        (begin
          (c y)
          (b y)
          (+ 1 (b y)))
        0)))

(define (main x)
  (+ 1 (a x)))

The profiler produces the following output:

> ,profile (main 21)

** Samples:        60 (approx. one per 40ms)
** Interrupt time: 50ms
** Real run time:  2430ms
** Total memory:   22k
** GC runs:        0

** Flat result (times in ms): 

   time  cumu  self   mem  calls  ms/call  name
 61.66%  1498  1498    2k  37+51       17  c in "x.scm"
  25.0%  2430   608   10k    436        6  b in "x.scm"
 13.33%  2430   324   10k    442        5  a in "x.scm"
   0.0%  2430     0    0k      1     2430  main in "x.scm"

** Tree result (times in ms): 

i    time self child  mem    calls  name
0  100.0%    0  2430   0k        0  <profiler> [0]
             0  2430   0k      1/1     main in "x.scm" [1]
=========================================================
                           441/442     b in "x.scm" <cycle 0> [3]
           324   891  10k    1/442     main in "x.scm" [1]
1  100.0%  324   891  10k      442  a in "x.scm" <cycle 0> [2]
           891     0   1k    22/37     c in "x.scm" [4]
                           436/436     b in "x.scm" <cycle 0> [3]
=========================================================
                           436/436     a in "x.scm" <cycle 0> [2]
2  100.0%  608   608  10k      436  b in "x.scm" <cycle 0> [3]
           608     0   1k    15/37     c in "x.scm" [4]
                           441/442     a in "x.scm" <cycle 0> [2]
=========================================================
             0  2430   0k      1/1     <profiler> [0]
3  100.0%    0  2430   0k        1  main in "x.scm" [1]
           324   891  10k    1/442     a in "x.scm" <cycle 0> [2]
=========================================================
           608     0   1k    15/37     b in "x.scm" <cycle 0> [3]
           891     0   1k    22/37     a in "x.scm" <cycle 0> [2]
4  61.66% 1498     0   2k    37+51  c in "x.scm" [4]
=========================================================
           932  1498  20k      1/1     main in "x.scm" [1]
0  100.0%  932  1498  20k    1+877  <cycle 0 as a whole>
           324   891  10k      441     a in "x.scm" <cycle 0> [2]
           608   608  10k      436     b in "x.scm" <cycle 0> [3]
             0     0   2k    37/37     c in "x.scm" [4]

The formatting of the output is based on the output of GNU gprof 1.

First, general information about the profiling is shown:

  • samples: total number of samples taken and the average time between two samples

  • interrupt time: theoretical interrupt time, the time between two samples

  • real run time: the total run time of the evaluation, simple measurement from the beginning to the end of the evaluation

  • total memory: the total amount of memory used by the program, here in kilobytes

  • GC runs: the number of times the garbage collector was running while evaluating

The flat profile gives overall statistics for each procedure in the program:

  • time: percentage of time the procedure has in the program (based on “self”)

  • cumu: total cumulative time the procedure was running

  • self: total time the procedure was running itself (without children)

  • mem: approximated memory usage of the procedure

  • calls: the number of non-recursive calls to the procedure. Recursive calls are displayed after an optionally appended "+" to former number (see procedure c in example output above).

  • ms/call: estimate of the time per call (with children), based on non-recursive calls and “cumu”.

  • name: the name of the procedure and the file it is defined in

The tree result displays profiling information depending on the caller of a particular procedure. As in gprof output, for each procedure there is an entry. Entries are separated by lines of =s. Each entry displays the callers (indented), the procedure itself and the procedure called (indented). The meaning of the fields depends on the type of the entry, for example:

 i    time self  child  mem    calls   name
            324    891  10k    1/442      main [1]
 1  100.0%  324    891  10k      442   a <cycle 0> [2]
            891      0   1k    22/37      c [4]

Every procedure has a unique index number i (here “1”), based on the position in the call-graph. It is used to quickly find the corresponding entry. The number is appended to the procedure name (in brackets). The meaning of the “cycle” suffix is explained below.

Callers (here main):

  • self: time spent directly in a when called by main

  • child: time spent in children of a when called by main

  • mem: memory usage of a when called by main

  • calls: two numbers: number of calls to a from main and total number of non-recursive calls to a

Primary line (here a):

  • time: total percentage of time a was running

  • self: total time spent directly in a

  • child: total time spent in children of a

  • mem: total memory usage of a

  • calls: the total number of non-recursive calls to a. Recursive calls are displayed after an optional +.

Called (here c):

  • self: time spent directly in c when called by a

  • child: time spent in children of c when called by a

  • mem: memory usage of c when called by a

  • calls: two numbers: number of calls to c from a and total number of non-recursive calls to c

A special treatment is needed for mutual-recursive procedures. In the example, a calls b and b calls a. This is called a cycle. If a would call another procedure d and d would call a, all three procedures form a cycle.

Cycles have a separate entry in the call graph. This entry consists of the callers into the cycle, the primary line of the cycle, the member procedures of the cycle and the external procedures called by the cycle:

            932   1498  20k      1/1      main [1]
 0  100.0%  932   1498  20k    1+877   <cycle 0 as a whole>
            324    891  10k      441      a <cycle 0> [2]
            608    608  10k      436      b <cycle 0> [3]
              0      0   2k    37/37      c [4]

Callers (here main):

  • the meaning of the fields are the same as above. The member procedures of the cycle are seen as a whole.

Primary line:

  • time: total percentage of time any procedure of the cycle was running

  • self: total time spent directly in a procedure of the cycle

  • child: total time spent in external children of a

  • mem: sum of memory usage of all cycle member procedures

  • calls: the total number of external calls to the cycle and the total number of calls in the cycle internally

Member procedures:

  • the meaning of the fields are the same as above, except...

  • calls: the number of calls to the member procedure from within the cycle

External procedures (here c):

  • the meaning of the fields are the same as with the member procedures, except...

  • calls: the number of calls to the external procedure from the cycle and the total number of non-recursive calls to the external procedure

In the current implementation, there are some issues that need to be considered: in the default configuration, samples are taken every 50 milliseconds. Procedures with a by-call run time shorter than the interrupt time are likely to be profiled inaccurately or may not be seen at all, if they have not been instrumented.

The default interrupt time can be set with the profiler-interrupt-time command processor setting, see 3.7. For example,

,set profiler-interrupt-time 200

sets the default profiler sampling interrupt time to 200ms.

Because the interrupt is shared with the thread system, profiling may cause performance issues with multi-threaded programs. Also, programs with deep recursion (resulting in large continuations) can cause the profiler to use a significant percentage of the total run time.

By default, call times are measured by the sampling process. When code had been instrumented, call times of those procedures will be measured exactly. When only instrumented code should be considered in the output of the profiler, the command processor setting profiler-measure-noninstr can be set to off.

Scheme 48 optimizes tail calls. Thus, the profiler cannot “see” tail calls and in some situations, the output of the profiler may show that procedures directly call their “grandchildren”.

3.6.1  How the profiler works

The profiler is based on taking samples of the current stack of continuations, the call-stack. Therefore it schedules the alarm interrupt at a regular interval specified by the profiler-interrupt-time command processor setting. Because the thread system uses the alarm interrupt as well, the profiler interrupt handler calls the handler of the thread system after processing the sample.

The profiler interrupt handler first captures the current continuation and follows the continuation-stack down to the continuation of the profile-thunk procedure, which called the thunk to be profiled. Each continuation with the corresponding code template is stored in a stack of stackentry records.

This *cur-stack* is compared from bottom to top with the *last-stack*, the stack captured while the prior sampling interrupt. The statistics gathered are stored in profinfo records.

For each stack-entry in the *cur-stack*, several possibilities exist in conjunction to the entry at the same depth in the *last-stack*:

  • there is no such entry: the continuation must be the result of a new call

  • both entries are the same continuation: nothing changed, the procedure is still running

  • entries are not the same continuation: the following entries up in the stack must have changed. If the templates of the current entries are the same, the continuation counts as the still same call to the procedure (but at another expression in the procedure). A such situation only counts as a new call if the continuation object has changed, but the continuation program-counter, arguments and the template stayed the same.

As we ascend in the call-stack, changes in the lower levels indicate that all entries above have to be new calls. This way, the profiler gathers information about how often a template is called by another template.

Additionally, every time a procedure is seen, we record this “occurrence”. If the procedure is a the top of the stack, it is currently running. Based on these numbers, the average interrupt time and the number of calls, we can estimate the self and child times.

While running, the profiler collects information about heap memory usage as well. After comparing the current with the last stack, the profiler knows which procedures finished, which procedures are new and which procedure called the new procedures. This information is used to distribute the difference in heap memory usage between the prior and the current sample. The profiler uses the memory-status primitive for retrieving available heap space and the number of garbage collector runs (gc-count). Difference in used memory between two samples is distributed by the following principles:

  • if gc-count increased, distribution cannot be done

  • if the same continuation is still at top, credit its template with all used memory between the two samplings

  • if there are stackentry-templates gone or new, distribute the used memory equally between them:

    • gone templates could have used some memory before “returning”

    • new templates could have used some memory while running

    • the caller of new templates could have used some memory between the calling of gone and new procedures

The byte-code optimizer profiler-instrumentation adds a call to the “profile-count” procedure of the profiler structure. This procedure is responsible for the exact call-times measurement.

After collection of the data, procedures are numbered and cycles are detected by ascending in the call tree. Time is being propagated from top to bottom, remembering self and child times. Most of the time, cycles are being considered as one procedure.

3.7  Settings

There are a number of settings that control the behavior of the command processor; most of them are booleans. They can be set using the ,set and ,unset commands.

,set setting [on | off | literal | ?]
This sets the value of setting setting. For a boolean setting, the second argument must be on or off; it then defaults to on. Otherwise, the value must be a literal, typically a positive number. If the second argument is ? the value of setting is is displayed and not changed. Doing ,set ? will display a list of the setting and their current values.

,unset setting
,unset setting is the same as ,set setting off.

The settings are as follows:

batch (boolean)
In `batch mode' any error or interrupt that comes up will cause Scheme 48 to exit immediately with a non-zero exit status. Also, the command processor doesn't print prompts. Batch mode is off by default.

levels (boolean)
Enables or disables the automatic pushing of a new command level when an error, interrupt, or other breakpoint occurs. When enabled (the default), breakpoints push a new command level, and ⟨eof⟩ (see above) or ,reset is required to return to top level. The effects of pushed command levels include:
  • a longer prompt

  • retention of the continuation in effect at the point of error

  • confusion among some newcomers

With levels disabled one must issue a ,push command immediately following an error in order to retain the error continuation for debugging purposes; otherwise the continuation is lost as soon as the focus object changes. If you don't know anything about the available debugging tools, then levels might as well be disabled.

break-on-warnings (boolean)
Enter a new command level when a warning is produced, just as when an error occurs. Normally warnings only result in a displayed message and the program does not stop executing.

ask-before-loading (boolean)
If on, the system will ask before loading modules that are arguments to the ,open command. Ask-before-loading is off by default.
> ,set ask-before-loading
will ask before loading modules
> ,open random
Load structure random (y/n)? y
>

load-noisily (boolean)
When on, the system will print out the names of modules and files as they are loaded. Load-noisily is off by default.
> ,set load-noisily
will notify when loading modules and files
> ,open random
[random /usr/local/lib/scheme48/big/random.scm]
> 

inline-values (boolean)
This controls whether or not the compiler is allowed to substitute variables' values in-line. When inline-values mode is on, some Scheme procedures will be substituted in-line; when it is off, none will. Section 2.4 has more information.

inspector-menu-limit (positive integer)
This controls how many items the displayed portion of the inspector menu contains at most. (See Section 3.8.)

inspector-writing-depth (positive integer)
This controls the maximum depth to which the inspector prints values. (See Section 3.8.)

inspector-writing-length (positive integer)
This controls the maximum length to which the inspector prints values. (See Section 3.8.)

condition-writing-depth (positive integer)
This controls the maximum depth to which conditions are printed.

condition-writing-length (positive integer)
This controls the maximum length to which conditions are printed.

profiler-interrupt-time (positive integer)
This controls the time between two profiler sampling interrupts (in milliseconds, see section 3.6).

profiler-measure-noninstr (boolean)
When this flag is enabled, call-times will be measured by the sampling process. When it is disabled, call-times will only be measured when the procedure has been instrumented (see section 3.6).

trace-writing-length (positive integer)
This controls the maximum length to which tracing prints procedure calls.

3.8  Inspection mode

There is a data inspector available via the ,inspect and ,debug commands. The inspector is particularly useful with procedures, continuations, and records. The command processor can be taken out of inspection mode by using the q command. When in inspection mode, input that begins with a letter or digit is read as a command, not as an expression. To see the value of a variable or number, do (begin exp) or use the ,run exp command.

In inspection mode the command processor prints out a menu of selectable components for the current focus object. To inspect a particular component, just type the corresponding number in the menu. That component becomes the new focus object. For example:

> ,inspect '(a (b c) d)
(a (b c) d)

[0] a
[1] (b c)
[2] d
: 1
(b c)

[0] b
[1] c
: 

When a new focus object is selected the previous one is pushed onto a stack. You can pop the stack, reverting to the previous object, with the u command, or use the stack command to move to an earlier object.

Commands useful when in inspection mode:

  • u (up) pop object stack

  • m (more) print more of a long menu

  • (...) evaluate a form and select result

  • q quit

  • template select a closure or continuation's template (Templates are the static components of procedures; these are found inside of procedures and continuations, and contain the quoted constants and top-level variables referred to by byte-compiled code.)

  • d (down) move to the next continuation (current object must be a continuation)

  • menu print the selection menu for the focus object

Multiple selection commands (u, d, and menu indexes) may be put on a single line.

All ordinary commands are available when in inspection mode. Similarly, the inspection commands can be used when not in inspection mode. For example:

> (list 'a '(b c) 'd)
'(a (b c) d)
> ,1
'(b c)
> ,menu
[0] b
[1] c
> 

If the current command level was initiated because of a breakpoint in the next level down, then ,debug will invoke the inspector on the continuation at the point of the error. The u and d (up and down) commands then make the inspected-value stack look like a conventional stack debugger, with continuations playing the role of stack frames. D goes to older or deeper continuations (frames), and u goes back up to more recent ones.

3.9  Command programs

The exec package contains procedures that are used to execute the command processor's commands. A command ,foo is executed by applying the value of the identifier foo in the exec package to the (suitably parsed) command arguments.

,exec [command]
Evaluate command in the exec package. For example, use
,exec ,load filename

to load a file containing commands. If no command is given, the exec package becomes the execution package for future commands.

The required argument types are as follows:

  • filenames should be strings

  • other names and identifiers should be symbols

  • expressions should be s-expressions

  • commands (as for ,config and ,exec itself) should be lists of the form (command-name argument ...) where command-name is a symbol.

For example, the following two commands are equivalent:

,config ,load my-file.scm

,exec (config '(load "my-file.scm"))

The file scheme/vm/load-vm.scm in the source directory contains an example of an exec program.

3.10  Building images

,dump filename [identification]
Writes the current heap out to a file, which can then be run using the virtual machine. The new image file includes the command processor. If present, identification should be a string (written with double quotes); this string will be part of the greeting message as the image starts up.

,build exp filename [option ...]
Like ,dump, except that the image file contains the value of exp, which should be a procedure of one argument, instead of the command processor. When filename is resumed, that procedure will be invoked on the VM's -a arguments, which are passed as a list of OS strings (see section 5.15. The procedure should return an integer, which is returned to the program that invoked the VM. The command processor and debugging system are not included in the image (unless you go to some effort to preserve them, such as retaining a continuation).

If no-warnings appears as an option after the file name, no warnings about undefined external bindings (see Section 8.2) will be printed upon resuming the image. This is useful when the definitions of external bindings appear in shared objects that are only loaded after the resumption of the image.

Doing ,flush before building an image will reduce the amount of debugging information in the image, making for a smaller image file, but if an error occurs, the error message may be less helpful. Doing ,flush source maps before loading any programs used in the image will make it still smaller. See section 3.11 for more information.

3.11  Resource query and control

,time exp
Measure execution time.

,collect
Invoke the garbage collector. Ordinarily this happens automatically, but the command tells how much space is available before and after the collection.

,keep kind
,flush kind
These control the amount of debugging information retained after compiling procedures. This information can consume a fair amount of space. kind is one of the following:
  • maps - environment maps (local variable names, for inspector)

  • source - source code for continuations (displayed by inspector)

  • names - procedure names (as displayed by write and in error messages)

  • files - source file names

These commands refer to future compilations only, not to procedures that already exist. To have any effect, they must be done before programs are loaded. The default is to keep all four types.

,flush
The flush command with no argument deletes the database of names of initial procedures. Doing ,flush before a ,build or ,dump will make the resulting image significantly smaller, but will compromise the information content of many error messages.

3.12  Threads

Each command level has its own set of threads. These threads are suspended when a new level is entered and resumed when the owning level again becomes the current level. A thread that raises an error is not resumed unless explicitly restarted using the ,proceed command. In addition to any threads spawned by the user, each level has a thread that runs the command processor on that level. A new command-processor thread is started if the current one dies or is terminated. When a command level is abandoned for a lower level, or when a level is restarted using ,reset, all of the threads on that level are terminated and any dynamic-wind “after” thunks are run.

The following commands are useful when debugging multithreaded programs:

,resume [number]
Pops out to a given level and resumes running all threads at that level. Number defaults to zero.

,threads
Invokes the inspector on a list of the threads running at the next lower command level.

,exit-when-done [exp]
Waits until all user threads have completed and then exits back out to shell (or executive or whatever invoked Scheme 48 in the first place). Exp should evaluate to an integer which is then returned to the calling program.

3.13  Quite obscure

,go exp
This is like ,exit exp except that the evaluation of exp is tail-recursive with respect to the command processor. This means that the command processor itself can probably be GC'ed, should a garbage collection occur in the execution of exp. If an error occurs Scheme 48 will exit with a non-zero value.

,translate from to
For load and the ,load command (but not for open-{in|out}put-file), file names beginning with the string from will be changed so that the initial from is replaced by the string to. E.g.
,translate /usr/gjc/ /zu/gjc/

will cause (load "/usr/gjc/foo.scm") to have the same effect as (load "/zu/gjc/foo.scm").

,from-file filename form ... ,end
This is used by the cmuscheme48 Emacs library to indicate the file from which the forms came. Filename is then used by the command processor to determine the package in which the forms are to be evaluated.


1 part of the GNU Binary Utilities: http://www.gnu.org/software/binutils/

scheme48-1.9/doc/html/manual-Z-H-5.html000644 004306 005702 00000121133 12074535600 020435 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Module system

This chapter describes Scheme 48's module system. The module system is unique in the extent to which it supports both static linking and rapid turnaround during program development. The design was influenced by Standard ML modules[7] and by the module system for Scheme Xerox[4]. It has also been shaped by the needs of Scheme 48, which is designed to run both on workstations and on relatively small (less than 1 Mbyte) embedded controllers.

Except where noted, everything described here is implemented in Scheme 48, and exercised by the Scheme 48 implementation and some application programs.

Unlike the Common Lisp package system, the module system described here controls the mapping of names to denotations, not the mapping of strings to symbols.

4.1  Introduction

The module system supports the structured division of a corpus of Scheme software into a set of modules. Each module has its own isolated namespace, with visibility of bindings controlled by module descriptions written in a special configuration language.

A module may be instantiated multiple times, producing several packages, just as a lambda-expression can be instantiated multiple times to produce several different procedures. Since single instantiation is the normal case, we will defer discussion of multiple instantiation until a later section. For now you can think of a package as simply a module's internal environment mapping names to denotations.

A module exports bindings by providing views onto the underlying package. Such a view is called a structure (terminology from Standard ML). One module may provide several different views. A structure is just a subset of the package's bindings. The particular set of names whose bindings are exported is the structure's interface.

A module imports bindings from other modules by either opening or accessing some structures that are built on other packages. When a structure is opened, all of its exported bindings are visible in the client package.

For example:

(define-structure foo (export a c cons)
  (open scheme)
  (begin (define a 1)
         (define (b x) (+ a x))
         (define (c y) (* (b a) y))))

(define-structure bar (export d)
  (open scheme foo)
  (begin (define (d w) (+ a (c w)))))

This configuration defines two structures, foo and bar. foo is a view on a package in which the scheme structure's bindings (including define and +) are visible, together with bindings for a, b, and c. foo's interface is (export a c cons), so of the bindings in its underlying package, foo only exports those three. Similarly, structure bar consists of the binding of d from a package in which both scheme's and foo's bindings are visible. foo's binding of cons is imported from the Scheme structure and then re-exported.

A module's body, the part following begin in the above example, is evaluated in an isolated lexical scope completely specified by the package definition's open and access clauses. In particular, the binding of the syntactic operator define-structure is not visible unless it comes from some opened structure. Similarly, bindings from the scheme structure aren't visible unless they become so by scheme (or an equivalent structure) being opened.

4.2  The configuration language

The configuration language consists of top-level defining forms for modules and interfaces. Its syntax is given in figure 1.


⟨configuration⟩ –> 

⟨definition⟩*

⟨definition⟩ –>

(define-structure

⟨name⟩

⟨interface⟩

⟨clause⟩*)

–>

(define-structures ((

⟨name⟩

⟨interface⟩)*)

⟨clause⟩*)

–>

(define-interface

⟨name⟩

⟨interface⟩)

–>

(define-syntax

⟨name⟩

⟨transformer-spec⟩)

⟨clause⟩ –>

(open

⟨structure⟩*)

–>

(access

⟨name⟩*)

–>

(begin

⟨program⟩)

–>

(files

⟨filespec⟩*)

–>

(optimize

⟨optimize-spec⟩*)

–>

(for-syntax

⟨clause⟩*)

⟨interface⟩ –>

(export

⟨item⟩*)

–>

⟨name⟩

–>

(compound-interface

⟨interface⟩*)

⟨item⟩ –> 

⟨name⟩

–>

(

⟨name⟩

⟨type⟩)

–>

((

⟨name⟩*)

⟨type⟩)

⟨structure⟩ –>

⟨name⟩

–>

(modify

⟨structure⟩

⟨modifier⟩*)

–>

(subset

⟨structure⟩ (

⟨name⟩*))

–>

(with-prefix

⟨structure⟩

⟨name⟩)

⟨modifier⟩ –>

(expose

⟨name⟩*)

–>

(hide

⟨name⟩*)

–>

(rename (

⟨name⟩0

⟨name⟩1)*)

–>

(alias (

⟨name⟩0

⟨name⟩1)*)

–>

(prefix

⟨name⟩)

Figure 1:  The configuration language.


A define-structure form introduces a binding of a name to a structure. A structure is a view on an underlying package which is created according to the clauses of the define-structure form. Each structure has an interface that specifies which bindings in the structure's underlying package can be seen via that structure in other packages.

An open clause specifies which structures will be opened up for use inside the new package. At least one structure must be specified or else it will be impossible to write any useful programs inside the package, since define, lambda, cons, etc. will be unavailable. Packages typically include scheme, which exports all bindings appropriate to Revised5 Scheme, in an open clause. For building structures that export structures, there is a defpackage package that exports the operators of the configuration language. Many other structures, such as record and hash table facilities, are also available in the Scheme 48 implementation.

The modify, subset, and prefix forms produce new views on existing structures by renaming or hiding exported names. Subset returns a new structure that exports only the listed names from its

⟨structure⟩ argument. With-prefix returns a new structure that adds

⟨prefix⟩ to each of the names exported by the

⟨structure⟩ argument. For example, if structure s exports a and b, then

(subset s (a))

exports only a and

(with-prefix s p/)

exports a as p/a and b as p/b.

Both subset and with-prefix are simple macros that expand into uses of modify, a more general renaming form. In a modify structure specification the

⟨command⟩s are applied to the names exported by

⟨structure⟩ to produce a new set of names for the

⟨structure⟩'s bindings. Expose makes only the listed names visible. Hide makes all but the listed names visible. Rename makes each

⟨name⟩0 visible as

⟨name⟩1 name and not visible as

⟨name⟩0 , while alias makes each

⟨name⟩0 visible as both

⟨name⟩0 and

⟨name⟩1. Prefix adds

⟨name⟩ to the beginning of each exported name. The modifiers are applied from right to left. Thus

(modify scheme (prefix foo/) (rename (car bus))))

makes car available as foo/bus.

The package's body is specified by begin and/or files clauses. begin and files have the same semantics, except that for begin the text is given directly in the package definition, while for files the text is stored somewhere in the file system. The body consists of a Scheme program, that is, a sequence of definitions and expressions to be evaluated in order. In practice, we always use files in preference to begin; begin exists mainly for expository purposes.

A name's imported binding may be lexically overridden or shadowed by defining the name using a defining form such as define or define-syntax. This will create a new binding without having any effect on the binding in the opened package. For example, one can do (define car 'chevy) without affecting the binding of the name car in the scheme package.

Assignments (using set!) to imported and undefined variables are not allowed. In order to set! a top-level variable, the package body must contain a define form defining that variable. Applied to bindings from the scheme structure, this restriction is compatible with the requirements of the Revised5 Scheme report.

It is an error for two of a package's opened structures to export two different bindings for the same name. However, the current implementation does not check for this situation; a name's binding is always taken from the structure that is listed first within the open clause. This may be fixed in the future.

File names in a files clause can be symbols, strings, or lists (Maclisp-style “namelists”). A “.scm” file type suffix is assumed. Symbols are converted to file names by converting to upper or lower case as appropriate for the host operating system. A namelist is an operating-system-independent way to specify a file obtained from a subdirectory. For example, the namelist (rts record) specifies the file record.scm in the rts subdirectory.

If the define-structure form was itself obtained from a file, then file names in files clauses are interpreted relative to the directory in which the file containing the define-structure form was found. You can't at present put an absolute path name in the files list.

4.3  Interfaces

define-interface

An interface can be thought of as the type of a structure. In its basic form it is just a list of variable names, written (export name ...). However, in place of a name one may write (name type), indicating the type of name's binding. The type field is optional, except that exported macros must be indicated with type :syntax.

Interfaces may be either anonymous, as in the example in the introduction, or they may be given names by a define-interface form, for example

(define-interface foo-interface (export a c cons))
(define-structure foo foo-interface ...)

In principle, interfaces needn't ever be named. If an interface had to be given at the point of a structure's use as well as at the point of its definition, it would be important to name interfaces in order to avoid having to write them out twice, with risk of mismatch should the interface ever change. But they don't.

Still, there are several reasons to use define-interface:

  1. It is important to separate the interface definition from the package definitions when there are multiple distinct structures that have the same interface — that is, multiple implementations of the same abstraction.

  2. It is conceptually cleaner, and often useful for documentation purposes, to separate a module's specification (interface) from its implementation (package).

  3. Our experience is that configurations that are separated into interface definitions and package definitions are easier to read; the long lists of exported bindings just get in the way most of the time.

The compound-interface operator forms an interface that is the union of two or more component interfaces. For example,

(define-interface bar-interface
  (compound-interface foo-interface (export mumble)))

defines bar-interface to be foo-interface with the name mumble added.

4.4  Macros

Hygienic macros, as described in [23], are implemented. Structures may export macros; auxiliary names introduced into the expansion are resolved in the environment of the macro's definition.

For example, the scheme structure's delay macro is defined by the rewrite rule

(delay exp)  %
%
—>%
(make-promise (lambda () exp)).

The variable make-promise is defined in the scheme structure's underlying package, but is not exported. A use of the delay macro, however, always accesses the correct definition of make-promise. Similarly, the case macro expands into uses of cond, eqv?, and so on. These names are exported by scheme, but their correct bindings will be found even if they are shadowed by definitions in the client package.

4.5  Higher-order modules

There are define-module and define forms for defining modules that are intended to be instantiated multiple times. But these are pretty kludgey — for example, compiled code isn't shared between the instantiations — so we won't describe them yet. If you must know, figure it out from the following grammar.

⟨definition⟩ –>

(define-module (

⟨name⟩ (

⟨name⟩

⟨interface⟩)*)

⟨definition⟩*

⟨name⟩)

–>

(define

⟨name⟩ (

⟨name⟩

⟨name⟩*))

4.6  Compiling and linking

Scheme 48 has a static linker that produces stand-alone heap images from module descriptions. The programmer specifies a particular procedure in a particular structure to be the image's startup procedure (entry point), and the linker traces dependency links as given by open and access clauses to determine the composition of the heap image.

There is not currently any provision for separate compilation; the only input to the static linker is source code. However, it will not be difficult to implement separate compilation. The unit of compilation is one module (not one file). Any opened or accessed structures from which macros are obtained must be processed to the extent of extracting its macro definitions. The compiler knows from the interface of an opened or accessed structure which of its exports are macros. Except for macros, a module may be compiled without any knowledge of the implementation of its opened and accessed structures. However, inter-module optimization may be available as an option.

The main difficulty with separate compilation is resolution of auxiliary bindings introduced into macro expansions. The module compiler must transmit to the loader or linker the search path by which such bindings are to be resolved. In the case of the delay macro's auxiliary make-promise (see example above), the loader or linker needs to know that the desired binding of make-promise is the one apparent in delay's defining package, not in the package being loaded or linked.

4.7  Semantics of configuration mutation

During program development it is often desirable to make changes to packages and interfaces. In static languages it may be necessary to recompile and re-link a program in order for such changes to be reflected in a running system. Even in interactive Common Lisp implementations, a change to a package's exports often requires reloading clients that have already mentioned names whose bindings change. Once read resolves a use of a name to a symbol, that resolution is fixed, so a change in the way that a name resolves to a symbol can only be reflected by re-reading all such references.

The Scheme 48 development environment supports rapid turnaround in modular program development by allowing mutations to a program's configuration, and giving a clear semantics to such mutations. The rule is that variable bindings in a running program are always resolved according to current structure and interface bindings, even when these bindings change as a result of edits to the configuration. For example, consider the following:

(define-interface foo-interface (export a c))
(define-structure foo foo-interface
  (open scheme)
  (begin (define a 1)
         (define (b x) (+ a x))
         (define (c y) (* (b a) y))))
(define-structure bar (export d)
  (open scheme foo)
  (begin (define (d w) (+ (b w) a))))

This program has a bug. The variable b, which is free in the definition of d, has no binding in bar's package. Suppose that b was supposed to be exported by foo, but was omitted from foo-interface by mistake. It is not necessary to re-process bar or any of foo's other clients at this point. One need only change foo-interface and inform the development system of that change (using, say, an appropriate Emacs command), and foo's binding of b will be found when procedure d is called.

Similarly, it is also possible to replace a structure; clients of the old structure will be modified so that they see bindings from the new one. Shadowing is also supported in the same way. Suppose that a client package C opens a structure foo that exports a name x, and foo's implementation obtains the binding of x as an import from some other structure bar. Then C will see the binding from bar. If one then alters foo so that it shadows bar's binding of x with a definition of its own, then procedures in C that reference x will automatically see foo's definition instead of the one from bar that they saw earlier.

This semantics might appear to require a large amount of computation on every variable reference: The specified behavior requires scanning the package's list of opened structures, examining their interfaces, on every variable reference, not just at compile time. However, the development environment uses caching with cache invalidation to make variable references fast.

4.8  Command processor support

While it is possible to use the Scheme 48 static linker for program development, it is far more convenient to use the development environment, which supports rapid turnaround for program changes. The programmer interacts with the development environment through a command processor. The command processor is like the usual Lisp read-eval-print loop in that it accepts Scheme forms to evaluate. However, all meta-level operations, such as exiting the Scheme system or requests for trace output, are handled by commands, which are lexically distinguished from Scheme forms. This arrangement is borrowed from the Symbolics Lisp Machine system, and is reminiscent of non-Lisp debuggers. Commands are a little easier to type than Scheme forms (no parentheses, so you don't have to shift), but more importantly, making them distinct from Scheme forms ensures that programs' namespaces aren't cluttered with inappropriate bindings. Equivalently, the command set is available for use regardless of what bindings happen to be visible in the current program. This is especially important in conjunction with the module system, which puts strict controls on visibility of bindings.

The Scheme 48 command processor supports the module system with a variety of special commands. For commands that require structure names, these names are resolved in a designated configuration package that is distinct from the current package for evaluating Scheme forms given to the command processor. The command processor interprets Scheme forms in a particular current package, and there are commands that move the command processor between different packages.

Commands are introduced by a comma (,) and end at the end of line. The command processor's prompt consists of the name of the current package followed by a greater-than (>).

,open structure*
The ,open command opens new structures in the current package, as if the package's definition's open clause had listed structure. As with open clauses the visible names can be modified, as in
,open (subset foo (bar baz))

which only makes the bar and baz bindings from structure foo visible.

,config
The ,config command sets the command processor's current package to be the current configuration package. Forms entered at this point are interpreted as being configuration language forms, not Scheme forms.

,config command
This form of the ,config command executes another command in the current configuration package. For example,
,config ,load foo.scm

interprets configuration language forms from the file foo.scm in the current configuration package.

,config-package-is struct-name
The ,config-package-is command designates a new configuration package for use by the ,config command and resolution of struct-names for other commands such as ,in and ,open. See section 4.9 for information on making new configuration packages.

,in struct-name
The ,in command moves the command processor to a specified structure's underlying package. For example:
user> ,config
config> (define-structure foo (export a)
          (open scheme))
config> ,in foo
foo> (define a 13)
foo> a
13

In this example the command processor starts in a package called user, but the ,config command moves it into the configuration package, which has the name config. The define-structure form binds, in config, the name foo to a structure that exports a. Finally, the command ,in foo moves the command processor into structure foo's underlying package.

A package's body isn't executed (evaluated) until the package is loaded, which is accomplished by the ,load-package command.

,in struct-name command
This form of the ,in command executes a single command in the specified package without moving the command processor into that package. Example:
,in mumble (cons 1 2)
,in mumble ,trace foo

,user [command]
This is similar to the ,config and ,in commands. It moves to or executes a command in the user package (which is the default package when the Scheme 48 command processor starts).

,user-package-is name
The ,user-package-is command designates a new user package for use by the ,user command.

,load-package struct-name
The ,load-package command ensures that the specified structure's underlying package's program has been loaded. This consists of (1) recursively ensuring that the packages of any opened or accessed structures are loaded, followed by (2) executing the package's body as specified by its definition's begin and files forms.

,reload-package struct-name
This command re-executes the structure's package's program. It is most useful if the program comes from a file or files, when it will update the package's bindings after mutations to its source file.

,load filespec ...
The ,load command executes forms from the specified file or files in the current package. ,load filespec is similar to (load "filespec") except that the name load needn't be bound in the current package to Scheme's load procedure.

,for-syntax [command]
This is similar to the ,config and ,in commands. It moves to or executes a command in the current package's “package for syntax,” which is the package in which the forms f in (define-syntax name f) are evaluated.

,new-package [struct-name ...]
The ,new-package command creates a new package and moves the command processor to it. With no arguments, only the standard Scheme bindings are visible in the new package. Otherwise, the structures specified as command arguments (and not the scheme structure) are opened in the new package.

,structure name interface
The ,structure command defines name in the configuration package to be a structure with interface interface based on the current package.

4.9  Configuration packages

It is possible to set up multiple configuration packages. The default configuration package opens the following structures:

  • module-system, which exports define-structure and the other configuration language keywords, as well as standard types and type constructors (:syntax, :value, proc, etc.).

  • built-in-structures, which exports structures that are built into the initial Scheme 48 image; these include scheme, threads, tables, and records.

  • more-structures, which exports additional structures that are available in the development environment. A complete listing can be found in the definition of more-structures-interface at the end of the file scheme/packages.scm.

Note that it does not open scheme.

You can define additional configuration packages by making a package that opens module-system and, optionally, built-in-structures, more-structures, or other structures that export structures and interfaces.

For example:

> ,config (define-structure foo (export)
            (open module-system
                  built-in-structures
                  more-structures))
> ,in foo
foo> (define-structure x (export a b)
       (open scheme)
       (files x))
foo> 

Unfortunately, the above example does not work. The problem is that every environment in which define-structure is used must also have a way to create “syntactic towers”. A new syntactic tower is required whenever a new environment is created for compiling the source code in the package associated with a new structure. The environment's tower is used at compile time for evaluating the macro-source in

(define-syntax name macro-source)
(let-syntax ((name macro-source) ...) body)

and so forth. It is a “tower” because that environment, in turn, has to say what environment to use if macro-source itself contains a use of let-syntax.

The simplest way to provide a tower maker is to pass on the one used by an existing configuration package. The special form export-syntactic-tower-maker creates an interface that exports a configuration package's tower. The following example uses export-syntactic-tower-maker and the ,structure command to obtain a tower maker and create a new configuration environment.

> ,config ,structure t (export-syntactic-tower-maker)
> ,config (define-structure foo (export)
            (open module-system
                  t
                  built-in-structures
                  more-structures))

Before Scheme 48 1.9, export-syntactic-tower-maker was named export-reflective-tower-maker; this name is still supported for backwards compatibility.

4.10  Discussion

This module system was not designed as the be-all and end-all of Scheme module systems; it was only intended to help us organize the Scheme 48 system. Not only does the module system help avoid name clashes by keeping different subsystems in different namespaces, it has also helped us to tighten up and generalize Scheme 48's internal interfaces. Scheme 48 is unusual among Lisp implementations in admitting many different possible modes of operation. Examples of such multiple modes include the following:

  • Linking can be either static or dynamic.

  • The development environment (compiler, debugger, and command processor) can run either in the same address space as the program being developed or in a different address space. The environment and user program may even run on different processors under different operating systems[8].

  • The virtual machine can be supported by either of two implementations of its implementation language, Prescheme.

The module system has been helpful in organizing these multiple modes. By forcing us to write down interfaces and module dependencies, the module system helps us to keep the system clean, or at least to keep us honest about how clean or not it is.

The need to make structures and interfaces second-class instead of first-class results from the requirements of static program analysis: it must be possible for the compiler and linker to expand macros and resolve variable bindings before the program is executed. Structures could be made first-class (as in FX[10]) if a type system were added to Scheme and the definitions of exported macros were defined in interfaces instead of in module bodies, but even in that case types and interfaces would remain second-class.

The prohibition on assignment to imported bindings makes substitution a valid optimization when a module is compiled as a block. The block compiler first scans the entire module body, noting which variables are assigned. Those that aren't assigned (only defined) may be assumed never assigned, even if they are exported. The optimizer can then perform a very simple-minded analysis to determine automatically that some procedures can and should have their calls compiled in line.

The programming style encouraged by the module system is consistent with the unextended Scheme language. Because module system features do not generally show up within module bodies, an individual module may be understood by someone who is not familiar with the module system. This is a great aid to code presentation and portability. If a few simple conditions are met (no name conflicts between packages, and use of files in preference to begin), then a multi-module program can be loaded into a Scheme implementation that does not support the module system. The Scheme 48 static linker satisfies these conditions, and can therefore run in other Scheme implementations. Scheme 48's bootstrap process, which is based on the static linker, is therefore nonincestuous. This contrasts with most other integrated programming environments, such as Smalltalk-80, where the system can only be built using an existing version of the system itself.

Like ML modules, but unlike Scheme Xerox modules, this module system is compositional. That is, structures are constructed by single syntactic units that compose existing structures with a body of code. In Scheme Xerox, the set of modules that can contribute to an interface is open-ended — any module can contribute bindings to any interface whose name is in scope. The module system implementation is a cross-bar that channels definitions from modules to interfaces. The module system described here has simpler semantics and makes dependencies easier to trace. It also allows for higher-order modules, which Scheme Xerox considers unimportant.

scheme48-1.9/doc/html/manual-Z-H-6.html000644 004306 005702 00000444213 12074535601 020446 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Libraries

Use the ,open command (section 3.4) or the module language (chapter 2.6) to open the structures described below.

5.1  General utilities

These are in the big-util structure.

  • (atom? value) –> boolean

(atom? x) is the same as (not (pair? x)).

  • (null-list? list) –> boolean

Returns true for the empty list, false for a pair, and signals an error otherwise.

  • (neq? value value) –> boolean

(neq? x y) is the same as (not (eq? x y)).

  • (n= number number) –> boolean

(n= x y) is the same as (not (= x y)).

  • (identity value) –> value

  • (no-op value) –> value

These both just return their argument. No-op is guaranteed not to be compiled in-line, identity may be.

  • (memq? value list) –> boolean

Returns true if value is in list, false otherwise.

  • (any? predicate list) –> boolean

Returns true if predicate is true for any element of list.

  • (every? predicate list) –> boolean

Returns true if predicate is true for every element of list.

  • (any predicate list) –> value

  • (first predicate list) –> value

Any returns some element of list for which predicate is true, or false if there are none. First does the same except that it returns the first element for which predicate is true.

  • (filter predicate list) –> list

  • (filter! predicate list) –> list

Returns a list containing all of the elements of list for which predicate is true. The order of the elements is preserved. Filter! may reuse the storage of list.

  • (filter-map procedure list) –> list

The same as filter except the returned list contains the results of applying procedure instead of elements of list. (filter-map p l) is the same as (filter identity (map p l)).

  • (partition-list predicate list) –> list list

  • (partition-list! predicate list) –> list list

The first return value contains those elements list for which predicate is true, the second contains the remaining elements. The order of the elements is preserved. Partition-list! may reuse the storage of the list.

  • (remove-duplicates list) –> list

Returns its argument with all duplicate elements removed. The first instance of each element is preserved.

  • (delq value list) –> list

  • (delq! value list) –> list

  • (delete predicate list) –> list

All three of these return list with some elements removed. Delq removes all elements eq? to value. Delq! does the same and may modify the list argument. Delete removes all elements for which predicate is true. Both delq and delete may reuse some of the storage in the list argument, but won't modify it.

  • (reverse! list) –> list

Destructively reverses list.

  • (concatenate-symbol value ...) –> symbol

Returns the symbol whose name is produced by concatenating the displayed representations of value ....

(concatenate-symbol 'abc "-" 4) ===⇒ 'abc-4

5.2  Pretty-printing

These are in the pp structure.

  • (p value)

  • (p value output-port)

  • (pretty-print value output-port position)

Pretty-print value The current output port is used if no port is specified. Position is the starting offset. Value will be pretty-printed to the right of this column.

5.3  Bitwise integer operations

These functions use the two's-complement representation for integers. There is no limit to the number of bits in an integer. They are in the structures bitwise and big-scheme.

  • (bitwise-and integer integer ...) –> integer

  • (bitwise-ior integer integer ...) –> integer

  • (bitwise-xor integer integer ...) –> integer

  • (bitwise-not integer) –> integer

These perform various logical operations on integers on a bit-by-bit basis. `ior' is inclusive OR and `xor' is exclusive OR.

  • (arithmetic-shift integer bit-count) –> integer

Shifts the integer by the given bit count, which must be an integer, shifting left for positive counts and right for negative ones. Shifting preserves the integer's sign.

  • (bit-count integer) –> integer

Counts the number of bits set in the integer. If the argument is negative a bitwise NOT operation is performed before counting.

5.4  Byte vectors

These are homogeneous vectors of small integers (0 ≤ i ≤ 255). The functions that operate on them are analogous to those for vectors. They are in the structure byte-vectors.

  • (byte-vector? value) –> boolean

  • (make-byte-vector k fill) –> byte-vector

  • (byte-vector b ...) –> byte-vector

  • (byte-vector-length byte-vector) –> integer

  • (byte-vector-ref byte-vector k) –> integer

  • (byte-vector-set! byte-vector k b)

  • (byte-vector=? byte-vector byte-vector) –> boolean

5.5  Sparse vectors

These are vectors that grow as large as they need to. That is, they can be indexed by arbitrarily large nonnegative integers. The implementation allows for arbitrarily large gaps by arranging the entries in a tree. They are in the structure sparse-vectors.

  • (make-sparse-vector) –> sparse-vector

  • (sparse-vector-ref sparse-vector k) –> value

  • (sparse-vector-set! sparse-vector k value)

  • (sparse-vector->list sparse-vector) –> list

Make-sparse-vector, sparse-vector-ref, and sparse-vector-set! are analogous to make-vector, vector-ref, and vector-set!, except that the indices passed to sparse-vector-ref and sparse-vector-set! can be arbitrarily large. For indices whose elements have not been set in a sparse vector, sparse-vector-ref returns #f.

Sparse-vector->list is for debugging: It returns a list of the consecutive elements in a sparse vector from 0 to the highest element that has been set. Note that the list will also include all the #f elements for the unset elements.

5.6  Cells

These hold a single value and are useful when a simple indirection is required. The system uses these to hold the values of lexical variables that may be set!.

  • (cell? value) –> boolean

  • (make-cell value) –> cell

  • (cell-ref cell) –> value

  • (cell-set! cell value)

5.7  Queues

These are ordinary first-in, first-out queues. The procedures are in structure queues.

  • (make-queue) –> queue

  • (queue? value) –> boolean

  • (queue-empty? queue) –> boolean

  • (list->queue values) –> queue

  • (enqueue! queue value)

  • (enqueue-many! queue list)

  • (queue-head-or-value queue value) –> value

  • (queue-head-or-thunk queue thunk) –> value

  • (queue-head queue) –> value

  • (maybe-queue-head queue) –> value

  • (dequeue-or-value! queue value) –> value

  • (dequeue-or-thunk! queue thunk) –> value

  • (dequeue! queue) –> value

  • (maybe-dequeue! queue) –> value

  • (empty-queue! queue)

Make-queue creates an empty queue, queue? is a predicate for identifying queues, and queue-empty? tells you if a queue is empty. List->queue returns a queue containing values, preserving their order. Enqueue! adds one value to the queue; enqueue-many! adds a list of values to the queue. Queue-head-or-value, queue-head-or-thunk, queue-head, and maybe-queue-head return the first value in queue if it is not empty; if the queue is empty, queue-head-or-value returns value, queue-head-or-thunk tail-calls thunk, queue-head raises an error, and maybe-queue-head returns #f. Dequeue-or-value!, dequeue-or-thunk!, dequeue!, and maybe-dequeue! remove a value from the queue if one is available; if the queue is empty, dequeue-or-value! returns value, dequeue-or-thunk! tail-calls thunk, dequeue! raises an error, and maybe-dequeue! returns #f. Empty-queue! removes all values from queue.

(Dequeue-or-value! q value) is more efficient than, but otherwise equivalent to:

(ensure-atomicity
 (if (queue-empty? q)
     value
     (dequeue! q)))

Because queue-head and dequeue! raise exceptions if they are called on an empty queue, they must not be called with a proposal already active unless queue-empty? has returned #f with the same proposal active.

The following procedures are not used in the Scheme 48 system, and are very slow. These operations may be removed from the queues structure in a future revision.

  • (queue-length queue) –> integer

  • (queue->list queue) –> values

  • (delete-from-queue! queue value) –> boolean

  • (on-queue? queue value) –> boolean

Queue-length returns the number of values in queue. Queue->list returns the values in queue as a list, in the order in which the values were added. Delete-from-queue! removes the first instance of value from queue, using eqv? for comparisons. Delete-from-queue! returns #t if it removes an element and #f if it does not. On-queue? returns #t if value is in the queue (using eqv? for comparisons) and #f if it is not.

5.8  Arrays

These provide N-dimensional, zero-based arrays and are in the structure arrays. The array interface is derived from one invented by Alan Bawden.

  • (make-array value dimension0 ...) –> array

  • (array dimensions element0 ...) –> array

  • (copy-array array) –> array

Make-array makes a new array with the given dimensions, each of which must be a non-negative integer. Every element is initially set to value. Array Returns a new array with the given dimensions and elements. Dimensions must be a list of positive integers, The number of elements should be the equal to the product of the dimensions. The elements are stored in row-major order.

(make-array 'a 2 3) => {Array 2 3}

(array '(2 3) 'a 'b 'c 'd 'e 'f)
    => {Array 2 3}

Copy-array returns a copy of array. The copy is identical to the array but does not share storage with it.

  • (array? value) –> boolean

Returns #t if value is an array.

  • (array-ref array index0 ...) –> value

  • (array-set! array value index0 ...)

  • (array->vector array) –> vector

  • (array-shape array) –> list

Array-ref returns the specified array element and array-set! replaces the element with value.

(let ((a (array '(2 3) 'a 'b 'c 'd 'e 'f)))
  (let ((x (array-ref a 0 1)))
    (array-set! a 'g 0 1)
    (list x (array-ref a 0 1))))
    => '(b g)

Array->vector returns a vector containing the elements of array in row-major order. Array-shape returns the dimensions of the array as a list.

  • (make-shared-array array linear-map dimension0 ...) –> array

Make-shared-array makes a new array that shares storage with array and uses linear-map to map indexes to elements. Linear-map must accept as many arguments as the number of dimensions given and must return a list of non-negative integers that are valid indexes into array.

(array-ref (make-shared-array a f i0 i1 ...)
           j0 j1 ...)

is equivalent to

(apply array-ref a (f j0 j1 ...))

As an example, the following function makes the transpose of a two-dimensional array:

(define (transpose array)
  (let ((shape (array-shape array)))
    (make-shared-array array
                       (lambda (x y)
                         (list y x))
                       (cadr shape)
                       (car shape))))

(array->vector
  (transpose
    (array '(2 3) 'a 'b 'c 'd 'e 'f)))
      => '(a d b e c f)

5.9  Records

New types can be constructed using the define-record-type macro from the define-record-types structure The general syntax is:

(define-record-type [tag] type-name
  (constructor-name field-tag ...)
  predicate-name
  (field-tag accessor-name [modifier-name])
  ...)

This makes the following definitions:

  • type-name     (type)

  • (constructor-name field-init ...) –> type-name

  • (predicate-name value) –> boolean

  • (accessor-name type-name) –> value

  • (modifier-name type-name value)

Type-name is the record type itself, and can be used to specify a print method (see below). Constructor-name is a constructor that accepts values for the fields whose tags are specified. Predicate-name is a predicate that returns #t for elements of the type and #f for everything else. The accessor-names retrieve the values of fields, and the modifier-name's update them. Tag is used in printing instances of the record type and the field-tags are used in the inspector and to match constructor arguments with fields. If tag is not specified, type-name is used instead.

  • (define-record-discloser type discloser)

Define-record-discloser determines how records of type type are printed. Discloser should be procedure which takes a single record of type type and returns a list whose car is a symbol. The record will be printed as the value returned by discloser with curly braces used instead of the usual parenthesis.

For example

(define-record-type pare :pare
  (kons x y)
  pare?
  (x kar set-kar!)
  (y kdr))

defines kons to be a constructor, kar and kdr to be accessors, set-kar! to be a modifier, and pare? to be a predicate for a new type of object. The type itself is named :pare. Pare is a tag used in printing the new objects.

By default, the new objects print as #{Pare}. The print method can be modified using define-record-discloser:

(define-record-discloser :pare
  (lambda (p) `(pare ,(kar p) ,(kdr p))))

will cause the result of (kons 1 2) to print as #{Pare 1 2}.

Define-record-resumer (section 8.7.6) can be used to control how records are stored in heap images.

5.9.1  Low-level access to records

Records are implemented using primitive objects exactly analogous to vectors. Every record has a record type (which is another record) in the first slot. Note that use of these procedures, especially record-set!, breaks the record abstraction described above; caution is advised.

These procedures are in the structure records.

  • (make-record n value) –> record

  • (record value ...) –> record-vector

  • (record? value) –> boolean

  • (record-length record) –> integer

  • (record-type record) –> value

  • (record-ref record i) –> value

  • (record-set! record i value)

These the same as the standard vector- procedures except that they operate on records. The value returned by record-length includes the slot holding the record's type. (record-type x) is equivalent to (record-ref x 0).

5.9.2  Record types

Record types are themselves records of a particular type (the first slot of :record-type points to itself). A record type contains four values: the name of the record type, a list of the names its fields, and procedures for disclosing and resuming records of that type. Procedures for manipulating them are in the structure record-types.

  • (make-record-type name field-names) –> record-type

  • (record-type? value) –> boolean

  • (record-type-name record-type) –> symbol

  • (record-type-field-names record-type) –> symbols

  • (record-constructor record-type field-names) –> procedure

  • (record-predicate record-type) –> procedure

  • (record-accessor record-type field-name) –> procedure

  • (record-modifier record-type field-name) –> procedure

These procedures construct the usual record-manipulating procedures. Record-constructor returns a constructor that is passed the initial values for the fields specified and returns a new record. Record-predicate returns a predicate that return true when passed a record of type record-type and false otherwise. Record-accessor and record-modifier return procedures that reference and set the given field in records of the appropriate type.

  • (define-record-discloser record-type discloser)

  • (define-record-resumer record-type resumer)

Record-types is the initial exporter of define-record-discloser (re-exported by define-record-types described above) and define-record-resumer (re-exported by external-calls (section 8.7.6)).

The procedures described in this section can be used to define new record-type-defining macros.

(define-record-type pare :pare
  (kons x y)
  pare?
  (x kar set-kar!)
  (y kdr))

is (semantically) equivalent to

(define :pare (make-record-type 'pare '(x y)))
(define kons (record-constructor :pare '(x y)))
(define kar (record-accessor :pare 'x))
(define set-kar! (record-modifier :pare 'x))
(define kdr (record-accessor :pare 'y))

The “(semantically)” above is because define-record-type adds declarations, which allows the type checker to detect some misuses of records, and uses more efficient definitions for the constructor, accessors, and modifiers. Ignoring the declarations, which will have to wait for another edition of the manual, what the above example actually expands into is:

(define :pare (make-record-type 'pare '(x y)))
(define (kons x y) (record :pare x y))
(define (kar r) (checked-record-ref r :pare 1))
(define (set-kar! r new)
  (checked-record-set! r :pare 1 new))
(define (kdr r) (checked-record-ref r :pare 2))

Checked-record-ref and Checked-record-set! are low-level procedures that check the type of the record and access or modify it using a single VM instruction.

5.10  Finite record types

The structure finite-types has two macros for defining `finite' record types. These are record types for which there are a fixed number of instances, all of which are created at the same time as the record type itself. The syntax for defining an enumerated type is:

(define-enumerated-type tag type-name
  predicate-name
  vector-of-instances-name
  name-accessor
  index-accessor
  (instance-name ...))

This defines a new record type, bound to type-name, with as many instances as there are instance-name's. Vector-of-instances-name is bound to a vector containing the instances of the type in the same order as the instance-name list. Tag is bound to a macro that when given an instance-name expands into an expression that returns corresponding instance. The name lookup is done at macro expansion time. Predicate-name is a predicate for the new type. Name-accessor and index-accessor are accessors for the name and index (in vector-of-instances) of instances of the type.

(define-enumerated-type color :color
  color?
  colors
  color-name
  color-index
  (black white purple maroon))

(color-name (vector-ref colors 0)) => black
(color-name (color white))         => white
(color-index (color purple))       => 2

Finite types are enumerations that allow the user to add additional fields in the type. The syntax for defining a finite type is:

(define-finite-type tag type-name
  (field-tag ...)
  predicate-name
  vector-of-instances-name
  name-accessor
  index-accessor
  (field-tag accessor-name [modifier-name])
  ...((instance-name field-value ...)
   ...))

The additional fields are specified exactly as with define-record-type. The field arguments to the constructor are listed after the type-name; these do not include the name and index fields. The form ends with the names and the initial field values for the instances of the type. The instances are constructed by applying the (unnamed) constructor to these initial field values. The name must be first and the remaining values must match the field-tags in the constructor's argument list.

(define-finite-type color :color
  (red green blue)
  color?
  colors
  color-name
  color-index
  (red   color-red)
  (green color-green)
  (blue  color-blue)
  ((black    0   0   0)
   (white  255 255 255)
   (purple 160  32 240)
   (maroon 176  48  96)))

(color-name (color black))         => black
(color-name (vector-ref colors 1)) => white
(color-index (color purple))       => 2
(color-red (color maroon))         => 176

5.11  Sets over finite types

The structure enum-sets has a macro for defining types for sets of elements of finite types. These work naturally with the finite types defined by the finite-types structure, but are not tied to them. The syntax for defining such a type is:

(define-enum-set-type id type-name predicate constructor
   element-syntax element-predicate all-elements element-index-ref)

This defines id to be syntax for constructing sets, type-name to be a value representing the type, predicate to be a predicate for those sets, and constructor a procedure for constructing one from a list.

Element-syntax must be the name of a macro for constructing set elements from names (akin to the tag argument to define-enumerated-type). Element-predicate must be a predicate for the element type, all-elements a vector of all values of the element type, and element-index-ref must return the index of an element within the all-elements vector.

  • (enum-set->list enum-set) –> list

  • (enum-set-member? enum-set enumerand) –> boolean

  • (enum-set=? enum-set enum-set) –> boolean

  • (enum-set-subset? enum-set enum-set) –> boolean

  • (enum-set-union enum-set enum-set) –> enum-set

  • (enum-set-intersection enum-set enum-set) –>  enum-set

  • (enum-set-difference enum-set enum-set) –>  enum-set

  • (enum-set-negation enum-set) –> enum-set

Enum-set->list converts a set into a list of its elements. Enum-set-member? tests for membership. Enum-set=? tests two sets of equal type for equality. (If its arguments are not of the same type, enum-set=? raises an exception.) Enum-set-subset? tests, for two sets of equal type, if the first set is a subset of the second one. Enum-set-union computes the union of two sets of equal type, enum-set-intersection computes the intersection, enum-set-difference computes the intersection, and enum-set-negation computes the complement of a set.

Here is an example. Given an enumerated type:

(define-enumerated-type color :color
  color?
  colors
  color-name
  color-index
  (red blue green))

we can define sets of colors:

(define-enum-set-type color-set :color-set
                      color-set?
                      make-color-set
  color color? colors color-index)

> (enum-set->list (color-set red blue))
(#{Color red} #{Color blue})
> (enum-set->list (enum-set-negation (color-set red blue)))
(#{Color green})
> (enum-set-member? (color-set red blue) (color blue))
#t

5.12  Hash tables

These are generic hash tables, and are in the structure tables. Strictly speaking they are more maps than tables, as every table has a value for every possible key (for that type of table). All but a finite number of those values are #f.

  • (make-table) –> table

  • (make-symbol-table) –> symbol-table

  • (make-string-table) –> string-table

  • (make-integer-table) –> integer-table

  • (make-table-maker compare-proc hash-proc) –> procedure

  • (make-table-immutable! table)

The first four functions listed make various kinds of tables. Make-table returns a table whose keys may be symbols, integer, characters, booleans, or the empty list (these are also the values that may be used in case expressions). As with case, comparison is done using eqv?. The comparison procedures used in symbol, string, and integer tables are eq?, string=?, and =.

Make-table-maker takes two procedures as arguments and returns a nullary table-making procedure. Compare-proc should be a two-argument equality predicate. Hash-proc should be a one argument procedure that takes a key and returns a non-negative integer hash value. If (compare-proc x y) returns true, then (= (hash-proc x) (hash-proc y)) must also return true. For example, make-integer-table could be defined as (make-table-maker = abs).

Make-table-immutable! prohibits future modification to its argument.

  • (table? value) –> boolean

  • (table-ref table key) –> value or #f

  • (table-set! table key value)

  • (table-walk procedure table)

  • (table->entry-list table) –> list of pairs

Table? is the predicate for tables. Table-ref and table-set! access and modify the value of key in table. Table-walk applies procedure, which must accept two arguments, to every associated key and non-#f value in table. Table->entry-list returns a list with the values of the table.

  • (default-hash-function value) –> integer

  • (string-hash string) –> integer

  • (symbol-hash symbol) –> integer

Default-hash-function is the hash function used in the tables returned by make-table, string-hash is the one used by make-string-table, and symbol-hash is the one used by make-symbol-table.

5.13  Port extensions

These procedures are in structure extended-ports.

  • (make-string-input-port string) –> input-port

  • (make-string-output-port) –> output-port

  • (string-output-port-output string-output-port) –> string

Make-string-input-port returns an input port that that reads characters from the supplied string. An end-of-file object is returned if the user reads past the end of the string. Make-string-output-port returns an output port that saves the characters written to it. These are then returned as a string by string-output-port-output.

(read (make-string-input-port "(a b)"))
    => '(a b)

(let ((p (make-string-output-port)))
  (write '(a b) p)
  (let ((s (string-output-port-output p)))
    (display "c" p)
    (list s (string-output-port-output p))))
    => '("(a b)" "(a b)c")

  • (limit-output output-port n procedure)

Procedure is called on an output port. Output written to that port is copied to output-port until n characters have been written, at which point limit-output returns. If procedure returns before writing n characters, then limit-output also returns at that time, regardless of how many characters have been written.

  • (make-tracking-input-port input-port) –> input-port

  • (make-tracking-output-port output-port) –> output-port

  • (current-row port) –> integer or #f

  • (current-column port) –> integer or #f

  • (fresh-line output-port)

Make-tracking-input-port and make-tracking-output-port return ports that keep track of the current row and column and are otherwise identical to their arguments. Closing a tracking port does not close the underlying port. Current-row and current-column return port's current read or write location. They return #f if port does not keep track of its location. Fresh-line writes a newline character to output-port if (current-row port) is not 0.

(define p (make-tracking-output-port (open-output-file "/tmp/temp")))
(list (current-row p) (current-column p))
    => '(0 0)
(display "012" p)
(list (current-row p) (current-column p))
    => '(0 3)
(fresh-line p)
(list (current-row p) (current-column p))
    => '(1 0)
(fresh-line p)
(list (current-row p) (current-column p))
    => '(1 0)

5.14  Fluid bindings

These procedures implement dynamic binding and are in structure fluids. A fluid is a cell whose value can be bound dynamically. Each fluid has a top-level value that is used when the fluid is unbound in the current dynamic environment.

  • (make-fluid value) –> fluid

  • (fluid fluid) –> value

  • (let-fluid fluid value thunk) –> value(s)

  • (let-fluids fluid0 value0 fluid1 value1 ...thunk) –> value(s)

Make-fluid returns a new fluid with value as its initial top-level value. Fluid returns fluid's current value. Let-fluid calls thunk, with fluid bound to value until thunk returns. Using a continuation to throw out of the call to thunk causes fluid to revert to its original value, while throwing back in causes fluid to be rebound to value. Let-fluid returns the value(s) returned by thunk. Let-fluids is identical to let-fluid except that it binds an arbitrary number of fluids to new values.

(let* ((f (make-fluid 'a))
       (v0 (fluid f))
       (v1 (let-fluid f 'b
             (lambda ()
               (fluid f))))
       (v2 (fluid f)))
  (list v0 v1 v2))
  => '(a b a)

(let ((f (make-fluid 'a))
      (path '())
      (c #f))
  (let ((add (lambda ()
               (set! path (cons (fluid f) path)))))
    (add)
    (let-fluid f 'b
      (lambda ()
        (call-with-current-continuation
          (lambda (c0)
            (set! c c0)))
        (add)))
    (add)
    (if (< (length path) 5)
        (c)
        (reverse path))))
  => '(a b a b a)

5.15  OS strings

On common operating systems such as Unix and Windows, various parameters to OS functionality—such as file names, user names, command-line arguments etc.—appear as text in most contexts, but are really byte sequences: On Unix, the byte sequence may be interpreted as text through some locale-determined encoding. On Windows, such parameters are typically represented as sequences of UTF-16 code units. In both cases, not every such byte sequence has a string equivalent: On Unix, a byte sequence encoding a file name using Latin-1 often cannot be decoded using UTF-8. On Windows, unpaired UTF-16 surrogates are admissible in encodings, and no lossless text decoding for them exists.

For representing such string-like parameters, Scheme 48 uses an abstraction called OS strings. An OS string is created from either a string or a NUL-terminated byte sequence stored in a byte vector, and has an associated text codec (see section 6.6.1) that is able to convert from one representation to the other. The exact meaning of a NUL-terminated byte sequence is dependent on this text codec. However, only codecs for encodings that are a conservative extension of ASCII (such as ASCII itself, Latin-1, or UTF-8) should be used here, to allow a minimal set of portable file names. (The Windows port uses a special synthetic encoding called UTF-8of16 compatible with UTF-8 but capable of encoding even invalid UTF-16 internally, but uses the UTF-8 codec at the Scheme level.)

Most procedures accepting OS strings also accept strings or byte vectors, which are then used to construct a OS string. In the headers of the specifications of these procedures, such arguments occur as os-string-thing.The standard Scheme procedures such as open-input-file that take file names all accept os-string-thing arguments. OS strings are in the os-strings structure.

  • (os-string? value) –> boolean

  • (make-os-string text-codec string/byte-vector) –> os-string

The os-string? predicate returns #t if its argument is an OS string, #f otherwise.

The make-os-string procedure creates an OS string from a text codec and a byte vector or string that defines its contents. If the argument is a byte vector, it does not matter if it is NUL-terminated or not.

  • (string->os-string string) –> os-string

  • (byte-vector->os-string byte-vector) –> os-string

  • (x->os-string os-string-thing) –> os-string

These procedures create an OS string from a string, a byte-vector (whose last value should be 0), and an os-string-thing argument, respectively, always using the standard OS-string text codec (see below).

  • (os-string->byte-vector os-string) –> byte-vector

  • (os-string->string os-string) –> string

These procedures yield the contents of an OS string. For an OS string created from a string, os-string->string will return a string with the same contents; for an OS string created from a byte vector, os-string->byte-vector will return a byte vector with the same contents. For the other cases, data loss as determined by the text codec is possible.

  • (os-string-text-codec os-string) –> text-codec

This procedure returns the text codec of the OS string.

  • (os-string=? os-string os-string) –> boolean

This procedure returns #t if its arguments denote the same byte sequence, #f otherwise.

  • (x->os-byte-vector os-string-thing) –> byte-vector

  • (string->os-byte-vector string) –> byte-vector

These are convenience procedures: The first is the composition of x->os-string and os-string->byte-vector, and the second is the composition of string->os-string and os-string->byte-vector.

  • (current-os-string-text-codec) –> text-codec

  • (call-with-os-string-text-codec text-codec thunk) –>  value(s)

The current-os-string-text-codec returns the current text codec used for creating new OS strings. The initial default is determined by the operating system. (On Unix, this is the text codec determined by the locale. On Windows, this is UTF-8.) The call-with-os-string-text-codec procedure dynamically binds the current text codec to text-codec during the invocation of thunk.

5.16  Shell commands

Structure c-system-function provides access to the C system() function.

  • (have-system?) –> boolean

  • (system os-string-thing) –> integer

Have-system? returns true if the underlying C implementation has a command processor. (System string) passes string to the C system() function and returns the result.

(begin
  (system "echo foo > test-file")
  (call-with-input-file "test-file" read))
=> 'foo

5.17  Sockets

Structure sockets provides access to TCP/IP sockets for interprocess and network communication.

  • (open-socket) –> socket

  • (open-socket port-number) –> socket

  • (socket-port-number socket) –> integer

  • (close-socket socket)

  • (socket-accept socket) –> input-port output-port

  • (get-host-name) –> string

Open-socket creates a new socket. If no port-number is supplied the system picks one at random. Socket-port-number returns a socket's port number. Close-socket closes a socket, preventing any further connections. Socket-accept accepts a single connection on socket, returning an input port and an output port for communicating with the client. If no client is waiting socket-accept blocks until one appears. Get-host-name returns the network name of the machine.

  • (socket-client host-name port-number) –> input-port output-port

Socket-client connects to the server at port-number on the machine named host-name. Socket-client blocks until the server accepts the connection.

The following simple example shows a server and client for a centralized UID service.

(define (id-server)
  (let ((socket (open-socket)))
    (display "Waiting on port ")
    (display (socket-port-number socket))
    (newline)
    (let loop ((next-id 0))
      (call-with-values
        (lambda ()
          (socket-accept socket))
        (lambda (in out)
          (display next-id out)
          (close-input-port in)
          (close-output-port out)
          (loop (+ next-id 1)))))))
         
(define (get-id machine port-number)
  (call-with-values
    (lambda ()
      (socket-client machine port-number))
    (lambda (in out)
      (let ((id (read in)))
        (close-input-port in)
        (close-output-port out)
        id))))

5.18  Profiling

The profiler can be used programmatically from within the code and its results can be processed dynamically.

The structure profiler offers basic data structures and functions. All functions need a profile-data record argument that can be created with make-empty-profile-data.

  • (make-empty-profile-data) –> profile-data

  • (profile-thunk profile-data thunk [interrupt-time [with-non-instr?]]) –> value

profile-thunk executes a thunk under the profiler. The data is stored in the profile-data record passed as argument. Optionally the timeout for the profiler interrupt can be passed (in milliseconds). The return value of profile-thunk is the return value of thunk. By default, non-instrumented code will be profiled by the sampling process. By passing with-non-instr? = #f only instrumented functions will be profiled.

After profiling data, can be retrieved with the following accessors:

  • (profile-data-starttime profile-data) –> number

  • (profile-data-endtime profile-data) –> number

  • (profile-data-runtime profile-data) –> number

  • (profile-data-memoryuse profile-data) –> number

  • (profile-data-gcruns profile-data) –> number

  • (profile-data-samples profile-data) –> number

  • (profile-data-interrupttime profile-data) –> number

Times are in milliseconds, memory usage in bytes.

The following functions produce the same output as the ,profile command (see section 3.6). They all take an optional port argument. Default is the current-output-port.

  • (profile-display profile-data [port])

  • (profile-display-overview profile-data [port])

  • (profile-display-flat profile-data [port])

  • (profile-display-tree profile-data [port])

profile-display prints the full output of the profiler. The other profile-display-... functions only display the respective part of the output.

The single fields in the flat profile can be retrieved with the following accessors:

  • (profile-function-calls profile-data names)

  • (profile-function-reccalls profile-data names)

  • (profile-function-nonreccalls profile-data names)

  • (profile-function-occurs profile-data names)

  • (profile-function-hist profile-data names)

  • (profile-function-memoryuse profile-data names)

  • (profile-function-timeshare profile-data names)

  • (profile-function-time-cumulative profile-data names)

  • (profile-function-time-self profile-data names)

Here names is the list of names specifying the function, optionally with it's module. For example, names = ("dynamic-wind", "wind") would specify the dynamic-wind function in the module wind, if it was seen while profiling. If two or more functions match, the first one is used. If no function matches, the functions return #{Unspecific}.

The argument names can also be a plain string, as in (profile-display-function-flat prof-data "module"). This will display all flat function profiles that have “module” either as name or module.

The meanings of the fields that the functions return are as follows:

  • calls: total number of calls (recursive and non-recursive) to the function

  • reccalls: total number of recursive calls to the function

  • nonreccalls: total number of non-recursive calls to the function

  • occurs: number of times the function was seen on stack while profiling

  • hist: number of times the function was seen running while profiling

  • memoryuse: bytes of memory used by the function

  • timeshare: percentage of time used by the function itself (number from 0 to 1)

  • time-cumulative: total time in ms the function was on call-stack

  • time-self: total time in ms the function actively running

The following shows a short example of the usage of the profiler interface, where main is the function to be profiled:

(define prof-data (make-empty-profile-data))

(profile-thunk prof-data (lambda () (main 22)))
(display "Samples: ")
(display (profile-data-samples prof-data))
(newline)

(profile-display-overview prof-data)
(profile-display-flat prof-data (current-output-port))
(profile-display-tree prof-data)

; print only function "a"
(profile-display-function-flat prof-data '("a"))

; print only function "a" in file "x.scm"
(profile-display-function-flat prof-data '("a" "x.scm"))

; print all profiled functions in file "x.scm"
(profile-display-function-flat prof-data "x.scm")

; print percentage of time "a" was running
(display (* (profile-function-timeshare prof-data '("a")) 100))

5.19  Macros for writing loops

Iterate and reduce are extensions of named-let for writing loops that walk down one or more sequences, such as the elements of a list or vector, the characters read from a port, or an arithmetic series. Additional sequences can be defined by the user. Iterate and reduce are in structure reduce.

5.19.1  Iterate

The syntax of iterate is:

  (iterate loop-name
           ((sequence-type element-variable sequence-data ...)
            ...)
           ((state-variable initial-value)
            ...)
    body-expression
    [final-expression])

Iterate steps the element-variables in parallel through the sequences, while each state-variable has the corresponding initial-value for the first iteration and have later values supplied by body-expression. If any sequence has reached its limit the value of the iterate expression is the value of final-expression, if present, or the current values of the state-variables, returned as multiple values. If no sequence has reached its limit, body-expression is evaluated and either calls loop-name with new values for the state-variables, or returns some other value(s).

The loop-name and the state-variables and initial-values behave exactly as in named-let. The named-let expression

  (let loop-name ((state-variable initial-value) ...)
    body ...)

is equivalent to an iterate expression with no sequences (and with an explicit let wrapped around the body expressions to take care of any internal defines):

  (iterate loop-name
           ()
           ((state-variable initial-value) ...)
    (let () body ...))

The sequence-types are keywords (they are actually macros of a particular form; it is easy to add additional types of sequences). Examples are list* which walks down the elements of a list and vector* which does the same for vectors. For each iteration, each element-variable is bound to the next element of the sequence. The sequence-data gives the actual list or vector or whatever.

If there is a final-expression, it is evaluated when the end of one or more sequences is reached. If the body-expression does not call loop-name the final-expression is not evaluated. The state-variables are visible in final-expression but the sequence-variables are not.

The body-expression and the final-expression are in tail-position within the iterate. Unlike named-let, the behavior of a non-tail-recursive call to loop-name is unspecified (because iterating down a sequence may involve side effects, such as reading characters from a port).

5.19.2  Reduce

If an iterate expression is not meant to terminate before a sequence has reached its end, body-expression will always end with a tail call to loop-name. Reduce is a macro that makes this common case explicit. The syntax of reduce is the same as that of iterate, except that there is no loop-name. The body-expression returns new values of the state-variables instead of passing them to loop-name. Thus body-expression must return as many values as there are state variables. By special dispensation, if there are no state variables then body-expression may return any number of values, all of which are ignored.

The syntax of reduce is:

  (reduce ((sequence-type element-variable sequence-data ...)
            ...)
           ((state-variable initial-value)
            ...)
    body-expression
    [final-expression])

The value(s) returned by an instance of reduce is the value(s) returned by the final-expression, if present, or the current value(s) of the state variables when the end of one or more sequences is reached.

A reduce expression can be rewritten as an equivalent iterate expression by adding a loop-var and a wrapper for the body-expression that calls the loop-var.

(iterate loop
         ((sequence-type element-variable sequence-data ...)
          ...)
         ((state-variable initial-value)
          ...)
  (call-with-values (lambda ()
                      body-expression)
                    loop)
  [final-expression])

5.19.3  Sequence types

The predefined sequence types are:

  • (list* elt-var list)     (syntax)

  • (list-spine* elt-var list)     (syntax)

  • (list-spine-cycle-safe* elt-var list on-cycle-thunk)     (syntax)

  • (vector* elt-var vector)     (syntax)

  • (string* elt-var string)     (syntax)

  • (count* elt-var start [end [step]])     (syntax)

  • (bits* elt-var i [size])     (syntax)

  • (input* elt-var input-port read-procedure)     (syntax)

  • (stream* elt-var procedure initial-data)     (syntax)

For lists, vectors, and strings the element variable is bound to the successive elements of the list or vector, or the characters in the string.

For list-spine* the element variable is bound to the successive pairs in the spine of the list. List-spine-cycle-safe* is similar, but calls on-cycle-thunk with no arguments and with the continuation of the loop macro at an unspecified time if list contains a cycle.

For count* the element variable is bound to the elements of the sequence

 start, start + step, start + 2step, ..., end

inclusive of start and exclusive of end. The default step is 1. The sequence does not terminate if no end is given or if there is no N > 0 such that end = start + Nstep (= is used to test for termination). For example, (count* i 0 -1) doesn't terminate because it begins past the end value and (count* i 0 1 2) doesn't terminate because it skips over the end value.

For bits*, the element variable is bound to a sequence of representations of successive bit-fields of i, from least to most significant. If size is present, it must be a positive exact integer, and the element variable is bound to a sequence of size-bit integers. If size is omitted, bits* iterates through single bits, and the element variable is bound to a sequence of booleans. #t represents 1, and #f represents 0.

For input* the elements are the results of successive applications of read-procedure to input-port. The sequence ends when read-procedure returns an end-of-file object.

For a stream, the procedure takes the current data value as an argument and returns two values, the next value of the sequence and a new data value. If the new data is #f then the previous element was the last one. For example,

  (list* elt my-list)

is the same as

  (stream* elt list->stream my-list)

where list->stream is

  (lambda (list)
    (if (null? list)
        (values 'ignored #f)
        (values (car list) (cdr list))))

5.19.4  Synchronous sequences

When using the sequence types described above, a loop terminates when any of its sequences reaches its end. To help detect bugs it is useful to have sequence types that check to see if two or more sequences end on the same iteration. For this purpose there is second set of sequence types called synchronous sequences. These are identical to the ones listed above except that they cause an error to be signalled if a loop is terminated by a synchronous sequence and some other synchronous sequence did not reach its end on the same iteration.

Sequences are checked for termination in order, from left to right, and if a loop is terminated by a non-synchronous sequence no further checking is done.

The synchronous sequences are:

  • (list% elt-var list)     (syntax)

  • (list-spine% elt-var list)     (syntax)

  • (list-spine-cycle-safe% elt-var list on-cycle-thunk)     (syntax)

  • (vector% elt-var vector)     (syntax)

  • (string% elt-var string)     (syntax)

  • (count% elt-var start end [step])     (syntax)

  • (input% elt-var input-port read-procedure)     (syntax)

  • (stream% elt-var procedure initial-data)     (syntax)

Note that the synchronous count% must have an end, unlike the nonsynchronous count*.

5.19.5  Examples

Gathering the indexes of list elements that answer true to some predicate.

(lambda (my-list predicate)
  (reduce ((list* elt my-list)
           (count* i 0))
          ((hits '()))
    (if (predicate elt)
        (cons i hits)
        hits)
    (reverse hits))

Looking for the index of an element of a list.

(lambda (my-list predicate)
  (iterate loop
           ((list* elt my-list)
            (count* i 0))
           ()                                ; no state
    (if (predicate elt)
        i
        (loop))))

Reading one line.

(define (read-line port)
  (iterate loop
           ((input* c port read-char))
           ((chars '()))
    (if (char=? c #\newline)
        (list->string (reverse chars))
        (loop (cons c chars)))
    (if (null? chars)
        (eof-object)
        ; no newline at end of file
        (list->string (reverse chars)))))

Counting the lines in a file. We can't use count* because we need the value of the count after the loop has finished.

(define (line-count name)
  (call-with-input-file name
    (lambda (in)
      (reduce ((input* l in read-line))
              ((i 0))
        (+ i 1)))))

5.19.6  Defining sequence types

The sequence types are object-oriented macros similar to enumerations. A non-synchronous sequence macro needs to supply three values: #f to indicate that it isn't synchronous, a list of state variables and their initializers, and the code for one iteration. The first two methods are CPS'ed: they take another macro and argument to which to pass their result. The sync method gets no additional arguments. The state-vars method is passed a list of names which will be bound to the arguments to the sequence. The final method, for the step, is passed the list of names bound to the arguments and the list of state variables. In addition there is a variable to be bound to the next element of the sequence, the body expression for the loop, and an expression for terminating the loop.

The definition of list* is

(define-syntax list*
  (syntax-rules (sync state-vars step)
    ((list* sync (next more))
     (next #f more))
    ((list* state-vars (start-list) (next more))
     (next ((list-var start-list)) more))
    ((list* step (start-list) (list-var)
            value-var loop-body final-exp)
     (if (null? list-var)
         final-exp
         (let ((value-var (car list-var))
               (list-var (cdr list-var)))
           loop-body)))))

Synchronized sequences are the same, except that they need to provide a termination test to be used when some other synchronized method terminates the loop.

(define-syntax list%
  (syntax-rules (sync done)
    ((list% sync (next more))
     (next #t more))
    ((list% done (start-list) (list-var))
     (null? list-var))
    ((list% stuff ...)
     (list* stuff ...))))

5.19.7  Expanded code

The expansion of

  (reduce ((list* x '(1 2 3)))
          ((r '()))
    (cons x r))

is

  (let ((final (lambda (r) (values r)))
        (list '(1 2 3))
        (r '()))
    (let loop ((list list) (r r))
      (if (null? list)
          (final r)
          (let ((x (car list))
                (list (cdr list)))
            (let ((continue (lambda (r)
                              (loop list r))))
              (continue (cons x r)))))))

The only inefficiencies in this code are the final and continue procedures, both of which could be substituted in-line. The macro expander could do the substitution for continue when there is no explicit proceed variable, as in this case, but not in general.

5.20  Sorting lists and vectors

(This section, as the libraries it describes, was written mostly by Olin Shivers for the draft of SRFI 32.)

The sort libraries in Scheme 48 include

  • vector insert sort (stable)

  • vector heap sort

  • vector quick sort (with regular comparisons and with median-of-3 pivot picking)

  • vector merge sort (stable)

  • pure and destructive list merge sort (stable)

  • stable vector and list merge

  • miscellaneous sort-related procedures: vector and list merging, sorted predicates, vector binary search, vector and list delete-equal-neighbor procedures.

  • a general, non-algorithmic set of procedure names for general sorting and merging

5.20.1  Design rules

What vs. how

There are two different interfaces: “what” (simple) and “how” (detailed).

Simple
you specify semantics: datatype (list or vector), mutability, and stability.

Detailed
you specify the actual algorithm (quick, heap, insert, merge). Different algorithms have different properties, both semantic and pragmatic, so these exports are necessary.

It is necessarily the case that the specifications of these procedures make statements about execution “pragmatics.” For example, the sole distinction between heap sort and quick sort—both of which are provided by this library—-is one of execution time, which is not a “semantic” distinction. Similar resource-use statements are made about “iterative” procedures, meaning that they can execute on input of arbitrary size in a constant number of stack frames.

Consistency across procedure signatures

The two interfaces share common procedure signatures wherever possible, to facilitate switching a given call from one procedure to another.

Less-than parameter first, data parameter after

These procedures uniformly observe the following parameter order: the data to be sorted comes after the comparison procedure. That is, we write

  (sort < list)

not

  (sort list <)

Ordering, comparison procedures and stability

These routines take a < comparison procedure, not a ≤ comparison procedure, and they sort into increasing order. The difference between a < spec and a ≤ spec comes up in two places:

  • the definition of an ordered or sorted data set, and

  • the definition of a stable sorting algorithm.

We say that a data set (a list or vector) is sorted or ordered if it contains no adjacent pair of values ... x, y ... such that y < x.

In other words, scanning across the data never takes a “downwards” step.

If you use a ≤ procedure where these algorithms expect a < procedure, you may not get the answers you expect. For example, the list-sorted? procedure will return false if you pass it a ≤ comparison procedure and an ordered list containing adjacent equal elements.

A “stable” sort is one that preserves the pre-existing order of equal elements. Suppose, for example, that we sort a list of numbers by comparing their absolute values, i.e., using comparison procedure

(lambda (x y) (< (abs x) (abs y)))

If we sort a list that contains both 3 and -3:

... 3, ..., −3 ...

then a stable sort is an algorithm that will not swap the order of these two elements, that is, the answer is guaranteed to to look like

... 3, −3 ...

not

... −3, 3 ...

Choosing < for the comparison procedure instead of ≤ affects how stability is coded. Given an adjacent pair x, y, (< y x) means “x should be moved in front of x”—otherwise, leave things as they are. So using a ≤ procedure where a < procedure is expected will invert stability.

This is due to the definition of equality, given a < comparator:

    (and (not (< x y))
         (not (< y x)))

The definition is rather different, given a ≤ comparator:

    (and (<= x y)
         (<= y x))

A “stable” merge is one that reliably favors one of its data sets when equal items appear in both data sets. All merge operations in this library are stable, breaking ties between data sets in favor of the first data set—elements of the first list come before equal elements in the second list.

So, if we are merging two lists of numbers ordered by absolute value, the stable merge operation list-merge

    (list-merge (lambda (x y) (< (abs x) (abs y)))
                '(0 -2 4 8 -10) '(-1 3 -4 7))

reliably places the 4 of the first list before the equal-comparing -4 of the second list:

    (0 -1 -2 4 -4 7 8 -10)

Some sort algorithms will not work correctly if given a ≤ when they expect a < comparison (or vice-versa).

In short, if your comparison procedure f answers true to (f x x), then

  • using a stable sorting or merging algorithm will not give you a stable sort or merge,

  • list-sorted? may surprise you.

Note that you can synthesize a < procedure from a ≤ procedure with

    (lambda (x y) (not (<= y x)))

if need be.

Precise definitions give sharp edges to tools, but require care in use. “Measure twice, cut once.”

All vector operations accept optional subrange parameters

The vector operations specified below all take optional start/end arguments indicating a selected subrange of a vector's elements. If a start parameter or start/end parameter pair is given to such a procedure, they must be exact, non-negative integers, such that

0 ≤
start
end
(vector-length
vector
)

where vector is the related vector parameter. If not specified, they default to 0 and the length of the vector, respectively. They are interpreted to select the range [start,end), that is, all elements from index start (inclusive) up to, but not including, index end.

Required vs. allowed side-effects

List-sort! and List-stable-sort! are allowed, but not required, to alter their arguments' cons cells to construct the result list. This is consistent with the what-not-how character of the group of procedures to which they belong (the sorting structure).

The list-delete-neighbor-dups!, list-merge! and list-merge-sort! procedures, on the other hand, provide specific algorithms, and, as such, explicitly commit to the use of side-effects on their input lists in order to guarantee their key algorithmic properties (e.g., linear-time operation).

5.20.2  Procedure specification

Structure name Functionality
sorting General sorting for lists and vectors
sorted Sorted predicates for lists and vectors
list-merge-sortList merge sort
vector-merge-sort Vector merge sort
vector-heap-sort Vector heap sort
vector-quick-sort Vector quick sort
vector-quick-sort3 Vector quick sort with 3-way comparisons
vector-insert-sort Vector insertion sort
delete-neighbor-duplicates List and vector delete neighbor duplicates
binary-searches Vector binary search
Note that there is no “list insert sort” package, as you might as well always use list merge sort. The reference implementation's destructive list merge sort will do fewer set-cdr!s than a destructive insert sort.

Procedure naming and functionality

Almost all of the procedures described below are variants of two basic operations: sorting and merging. These procedures are consistently named by composing a set of basic lexemes to indicate what they do.

Lexeme Meaning
sortThe procedure sorts its input data set by some < comparison procedure.
mergeThe procedure merges two ordered data sets into a single ordered result.
stable This lexeme indicates that the sort is a stable one.
vectorThe procedure operates upon vectors.
list The procedure operates upon lists.
! Procedures that end in ! are allowed, and sometimes required, to reuse their input storage to construct their answer.

Types of parameters and return values

In the procedures specified below,

  • A < or = parameter is a procedure accepting two arguments taken from the specified procedure's data set(s), and returning a boolean;

  • Start and end parameters are exact, non-negative integers that serve as vector indices selecting a subrange of some associated vector. When specified, they must satisfy the relation

    0 ≤
    start
    end
    (vector-length
    vector
    )

    where vector is the associated vector.

Passing values to procedures with these parameters that do not satisfy these types is an error.

If a procedure is said to return “unspecified,” this means that nothing at all is said about what the procedure returns, not even the number of return values. Such a procedure is not even required to be consistent from call to call in the nature or number of its return values. It is simply required to return a value (or values) that may be passed to a command continuation, e.g. as the value of an expression appearing as a non-terminal subform of a begin expression. Note that in R5RS, this restricts such a procedure to returning a single value; non-R5RS systems may not even provide this restriction.

5.20.2.1  sorting—general sorting package

This library provides basic sorting and merging functionality suitable for general programming. The procedures are named by their semantic properties, i.e., what they do to the data (sort, stable sort, merge, and so forth).

  • (list-sorted? < list) –> boolean

  • (list-merge < list1 list2) –> list

  • (list-merge! < list1 list2) –> list

  • (list-sort < lis) –> list

  • (list-sort! < lis) –> list

  • (list-stable-sort < list) –> list

  • (list-stable-sort! < list) –> list

  • (list-delete-neighbor-dups = list) –> list

  • (vector-sorted? < v [start [end]]) –> boolean

  • (vector-merge < v1 v2 [start1 [end1 [start2 [end2]]]]) –> vector

  • (vector-merge! < v v1 v2 [start [start1 [end1 [start2 [end2]]]]])

  • (vector-sort < v [start [end]]) –> vector

  • (vector-sort! < v [start [end]])

  • (vector-stable-sort < v [start [end]]) –> vector

  • (vector-stable-sort! < v [start [end]])

  • (vector-delete-neighbor-dups = v [start [end]]) –> vector

Procedure Suggested algorithm
list-sort vector heap or quick
list-sort! list merge sort
list-stable-sort vector merge sort
list-stable-sort! list merge sort
vector-sort heap or quick sort
vector-sort! heap or quick sort
vector-stable-sort vector merge sort
vector-stable-sort! merge sort
List-Sorted? and vector-sorted? return true if their input list or vector is in sorted order, as determined by their < comparison parameter.

All four merge operations are stable: an element of the initial list list1 or vector vector1 will come before an equal-comparing element in the second list list2 or vector vector2 in the result.

The procedures

  • list-merge

  • list-sort

  • list-stable-sort

  • list-delete-neighbor-dups

do not alter their inputs and are allowed to return a value that shares a common tail with a list argument.

The procedure

  • list-sort!

  • list-stable-sort!

are “linear update” operators—they are allowed, but not required, to alter the cons cells of their arguments to produce their results.

On the other hand, the list-merge! procedure make only a single, iterative, linear-time pass over its argument list, using set-cdr!s to rearrange the cells of the list into the final result —it works “in place.” Hence, any cons cell appearing in the result must have originally appeared in an input. The intent of this iterative-algorithm commitment is to allow the programmer to be sure that if, for example, list-merge! is asked to merge two ten-million-element lists, the operation will complete without performing some extremely (possibly twenty-million) deep recursion.

The vector procedures

  • vector-sort

  • vector-stable-sort

  • vector-delete-neighbor-dups

do not alter their inputs, but allocate a fresh vector for their result, of length endstart.

The vector procedures

  • vector-sort!

  • vector-stable-sort!

sort their data in-place. (But note that vector-stable-sort! may allocate temporary storage proportional to the size of the input .)

Vector-merge returns a vector of length (end1start1 + (end2start2).

Vector-merge! writes its result into vector v, beginning at index start, for indices less than end = start + (end1start1) + (end2start2). The target subvector v[start,end) may not overlap either source subvector vector1[start1,end1) vector2[start2,end2).

The ...-delete-neighbor-dups-... procedures: These procedures delete adjacent duplicate elements from a list or a vector, using a given element-equality procedure. The first/leftmost element of a run of equal elements is the one that survives. The list or vector is not otherwise disordered.

These procedures are linear time—much faster than the O(n2) general duplicate-element deletors that do not assume any “bunching” of elements (such as the ones provided by SRFI 1). If you want to delete duplicate elements from a large list or vector, you can sort the elements to bring equal items together, then use one of these procedures, for a total time of O(nlog(n)).

The comparison procedure = passed to these procedures is always applied ( = x y) where x comes before y in the containing list or vector.

  • List-delete-neighbor-dups does not alter its input list; its answer may share storage with the input list.

  • Vector-delete-neighbor-dups does not alter its input vector, but rather allocates a fresh vector to hold the result.

Examples:

(list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2))
  ===⇒ (1 2 7 0 -2)

(vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2))
  ===⇒ #(1 2 7 0 -2)

(vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2) 3 7)
  ===⇒ #(7 0 -2)

5.20.2.2  Algorithm-specific sorting packages

These packages provide more specific sorting functionality, that is, specific commitment to particular algorithms that have particular pragmatic consequences (such as memory locality, asymptotic running time) beyond their semantic behaviour (sorting, stable sorting, merging, etc.). Programmers that need a particular algorithm can use one of these packages.

sorted—sorted predicates

  • (list-sorted? < list) –> boolean

  • (vector-sorted? < vector) –> boolean

  • (vector-sorted? < vector start) –> boolean

  • (vector-sorted? < vector start end) –> boolean

Return #f iff there is an adjacent pair ... x, y ... in the input list or vector such that y < x. The optional start/end range arguments restrict vector-sorted? to the indicated subvector.

list-merge-sort—list merge sort

  • (list-merge-sort < list) –> list

  • (list-merge-sort! < list) –> list

  • (list-merge list1 < list2) –> list

  • (list-merge! list1 < list2) –> list

The sort procedures sort their data using a list merge sort, which is stable. (The reference implementation is, additionally, a “natural” sort. See below for the properties of this algorithm.)

The ! procedures are destructive—they use set-cdr!s to rearrange the cells of the lists into the proper order. As such, they do not allocate any extra cons cells—they are “in place” sorts.

The merge operations are stable: an element of list1 will come before an equal-comparing element in list2 in the result list.

vector-merge-sort—vector merge sort

  • (vector-merge-sort < vector [start [end [temp]]]) –> vector

  • (vector-merge-sort! < vector [start [end [temp]]])

  • (vector-merge < vector1 vector2 [start1 [end1 [start2 [end2]]]]) –> vector

  • (vector-merge! < vector vector1 vector2 [start [start1 [end1 [start2 [end2]]]]])

The sort procedures sort their data using vector merge sort, which is stable. (The reference implementation is, additionally, a “natural” sort. See below for the properties of this algorithm.)

The optional start/end arguments provide for sorting of subranges, and default to 0 and the length of the corresponding vector.

Merge-sorting a vector requires the allocation of a temporary “scratch” work vector for the duration of the sort. This scratch vector can be passed in by the client as the optional temp argument; if so, the supplied vector must be of size ≤ end, and will not be altered outside the range [start,end). If not supplied, the sort routines allocate one themselves.

The merge operations are stable: an element of vector1 will come before an equal-comparing element in vector2 in the result vector.

  • Vector-merge-sort! leaves its result in vector[start,end).

  • Vector-merge-sort returns a vector of length endstart.

  • Vector-merge returns a vector of length (end1start1) + (end2start2).

  • Vector-merge! writes its result into vector, beginning at index start, for indices less than end = start + (end1start1) + (end2start2). The target subvector

    vector
    [
    start
    ,
    end
    )

    may not overlap either source subvector

    vector1
    [
    start1
    ,
    end1
    ),
    or
    vector2
    [
    start2
    ,
    end2
    ).

vector-heap-sort—vector heap sort

  • (vector-heap-sort < vector [start [end]]) –> vector

  • (vector-heap-sort! < vector [start [end]])

These procedures sort their data using heap sort, which is not a stable sorting algorithm.

Vector-heap-sort returns a vector of length endstart. Vector-heap-sort! is in-place, leaving its result in vector[start,end).

vector-quick-sort—vector quick sort

  • (vector-quick-sort < vector [start [end]]) –> vector

  • (vector-quick-sort! < vector [start [end]])

These procedures sort their data using quick sort, which is not a stable sorting algorithm.

Vector-quick-sort returns a vector of length endstart. Vector-quick-sort! is in-place, leaving its result in vector[start,end).

vector-quick-sort3—vector quick sort with 3-way comparisons

  • (vector-quick-sort3 comp vector [start [end]]) –> vector

  • (vector-quick-sort3! comp vector [start [end]])

These procedures sort their data using quick sort, which is not a stable sorting algorithm.

Vector-quick-sort3 returns a vector of length endstart. Vector-quick-sort3! is in-place, leaving its result in vector[start,end).

These procedures implement a variant of quick-sort that takes a three-way comparison procedure C. C compares a pair of elements and returns an exact integer whose sign indicates their relationship:

(C x y) < 0 x<y
(C x y) = 0 x = y
(C x y) > 0 x>y

*

To help remember the relationship between the sign of the result and the relation, use the procedure − as the model for C: (− x y) < 0 means that x < y; (− x y) > 0 means that x > y.

vector-insert-sort—vector insertion sort

  • (vector-insert-sort < vector [start [end]]) –> vector

  • (vector-insert-sort! < vector [start [end]])

These procedures stably sort their data using insertion sort.

  • Vector-insert-sort returns a vector of length endstart.

  • Vector-insert-sort! is in-place, leaving its result in vector[start,end).

delete-neighbor-duplicates—list and vector delete neighbor duplicates

  • (list-delete-neighbor-dups = list) –> list

  • (list-delete-neighbor-dups! = list) –> list

  • (vector-delete-neighbor-dups = vector [start [end]]) –> vector

  • (vector-delete-neighbor-dups! = vector [start [end]]) –> end′

These procedures delete adjacent duplicate elements from a list or a vector, using a given element-equality procedure = . The first/leftmost element of a run of equal elements is the one that survives. The list or vector is not otherwise disordered.

These procedures are linear time—much faster than the O(n2) general duplicate-element deletors that do not assume any “bunching” of elements (such as the ones provided by SRFI 1). If you want to delete duplicate elements from a large list or vector, you can sort the elements to bring equal items together, then use one of these procedures, for a total time of O(nlog(n)).

The comparison procedure = passed to these procedures is always applied

( =  x y)

where x comes before y in the containing list or vector.

  • List-delete-neighbor-dups does not alter its input list; its answer may share storage with the input list.

  • Vector-delete-neighbor-dups does not alter its input vector, but rather allocates a fresh vector to hold the result.

  • List-delete-neighbor-dups! is permitted, but not required, to mutate its input list in order to construct its answer.

  • Vector-delete-neighbor-dups! reuses its input vector to hold the answer, packing its answer into the index range [start,end′), where end′ is the non-negative exact integer returned as its value. It returns end′ as its result. The vector is not altered outside the range [start,end′).

Examples:

(list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2))
  ===⇒ (1 2 7 0 -2)

(vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2))
  ===⇒ #(1 2 7 0 -2)

(vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2) 3 7)
  ===⇒ #(7 0 -2)

;; Result left in v[3,9):
(let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
  (cons (vector-delete-neighbor-dups! = v 3)
        v))
   ===⇒ (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))

binary-searches—vector binary search

  • (vector-binary-search < elt->key key vector [start [end]]) –> integer or #f

  • (vector-binary-search3 compare-proc vector [start [end]]) –> integer or #f

vector-binary-search searches vector in range [start,end) (which default to 0 and the length of vector, respectively) for an element whose associated key is equal to key. The procedure elt->key is used to map an element to its associated key. The elements of the vector are assumed to be ordered by the < relation on these keys. That is,

(vector-sorted? (lambda (x y) (< (elt->key x) (elt->key y)))
                vector start end) ===⇒ true

An element e of vector is a match for key if it's neither less nor greater than the key:

(and (not (< (elt->key e) key))
     (not (< key (elt->key e))))

If there is such an element, the procedure returns its index in the vector as an exact integer. If there is no such element in the searched range, the procedure returns false.

(vector-binary-search < car 4 '#((1 . one) (3 . three)
                                 (4 . four) (25 . twenty-five)))
===⇒ 2

(vector-binary-search < car 7 '#((1 . one) (3 . three)
                                 (4 . four) (25 . twenty-five)))
===⇒ #f

Vector-binary-search3 is a variant that uses a three-way comparison procedure compare-proc. Compare-proc compares its parameter to the search key, and returns an exact integer whose sign indicates its relationship to the search key.

array
rclcrcl
(
compare-proc
 x)   <   0   ⇒   x   <  
search-key
(
compare-proc
 x)    =    0   ⇒   x    =   
search-key
(
compare-proc
 x)   >   0   ⇒   x   >  
search-key
endarray

(vector-binary-search3 (lambda (elt) (- (car elt) 4))
                       '#((1 . one) (3 . three)
                          (4 . four) (25 . twenty-five)))
===⇒ 2

5.20.3  Algorithmic properties

Different sort and merge algorithms have different properties. Choose the algorithm that matches your needs:

Vector insert sort
Stable, but only suitable for small vectors—O(n2).
Vector quick sort
Not stable. Is fast on average—O(nlog(n))—but has bad worst-case behaviour. Has good memory locality for big vectors (unlike heap sort). A clever pivot-picking trick (median of three samples) helps avoid worst-case behaviour, but pathological cases can still blow up.
Vector heap sort
Not stable. Guaranteed fast—O(nlog(n)) worst case. Poor locality on large vectors. A very reliable workhorse.
Vector merge sort
Stable. Not in-place—requires a temporary buffer of equal size. Fast—O(nlog(n))—and has good memory locality for large vectors.

The implementation of vector merge sort provided by this implementation is, additionally, a “natural” sort, meaning that it exploits existing order in the input data, providing O(n) best case.

Destructive list merge sort
Stable, fast and in-place (i.e., allocates no new cons cells). “Fast” means O(nlog(n)) worst-case, and substantially better if the data is already mostly ordered, all the way down to linear time for a completely-ordered input list (i.e., it is a “natural” sort).

Note that sorting lists involves chasing pointers through memory, which can be a loser on modern machine architectures because of poor cache and page locality. Sorting vectors has inherently better locality.

This implementation's destructive list merge and merge sort implementations are opportunistic—they avoid redundant set-cdr!s, and try to take long already-ordered runs of list structure as-is when doing the merges.

Pure list merge sort
Stable and fast—O(nlog(n)) worst-case, and possibly O(n), depending upon the input list (see discussion above).

Algorithm Stable? Worst case Average case In-place
Vector insert YesO(n2) O(n2)Yes
Vector quick No O(n2) O(nlog(n))Yes
Vector heap No O(nlog(n))O(nlog(n))Yes
Vector merge YesO(nlog(n))O(nlog(n))No
List merge YesO(nlog(n))O(nlog(n))Either

5.21  Regular expressions

This section describes a functional interface for building regular expressions and matching them against strings. The matching is done using the POSIX regular expression package. Regular expressions are in the structure regexps.

A regular expression is either a character set, which matches any character in the set, or a composite expression containing one or more subexpressions. A regular expression can be matched against a string to determine success or failure, and to determine the substrings matched by particular subexpressions.

  • (regexp? value) –> boolean

Returns #t if value is a regular expression created using the functional interface for regular expressions, and #f otherwise.

5.21.1  Character sets

Character sets may be defined using a list of characters and strings, using a range or ranges of characters, or by using set operations on existing character sets.

  • (set character-or-string ...) –> char-set

  • (range low-char high-char) –> char-set

  • (ranges low-char high-char ...) –> char-set

  • (ascii-range low-char high-char) –> char-set

  • (ascii-ranges low-char high-char ...) –> char-set

Set returns a set that contains the character arguments and the characters in any string arguments. Range returns a character set that contain all characters between low-char and high-char, inclusive. Ranges returns a set that contains all characters in the given ranges. Range and ranges use the ordering induced by char->integer. Ascii-range and ascii-ranges use the ASCII ordering. It is an error for a high-char to be less than the preceding low-char in the appropriate ordering.

  • (negate char-set) –> char-set

  • (intersection char-set char-set) –> char-set

  • (union char-set char-set) –> char-set

  • (subtract char-set char-set) –> char-set

These perform the indicated operations on character sets.

The following character sets are predefined:

lower-case (set "abcdefghijklmnopqrstuvwxyz")
upper-case (set "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
alphabetic (union lower-case upper-case)
numeric (set "0123456789")
alphanumeric (union alphabetic numeric)
punctuation (set "!\"#$%&'()*+,‑./:;<=>?@[\\]^_`{|}~")
graphic (union alphanumeric punctuation)
printing (union graphic (set #\space))
control (negate printing)
blank (set #\space (ascii->char 9)) ; 9 is tab
whitespace (union (set #\space) (ascii-range 9 13))
hexdigit (set "0123456789abcdefABCDEF")

The above are taken from the default locale in POSIX. The characters in whitespace are space, tab, newline (= line feed), vertical tab, form feed, and carriage return.

5.21.2  Anchoring

  • (string-start) –> reg-exp

  • (string-end) –> reg-exp

String-start returns a regular expression that matches the beginning of the string being matched against; string-end returns one that matches the end.

5.21.3  Composite expressions

  • (sequence reg-exp ...) –> reg-exp

  • (one-of reg-exp ...) –> reg-exp

Sequence matches the concatenation of its arguments, one-of matches any one of its arguments.

  • (text string) –> reg-exp

Text returns a regular expression that matches the characters in string, in order.

  • (repeat reg-exp) –> reg-exp

  • (repeat count reg-exp) –> reg-exp

  • (repeat min max reg-exp) –> reg-exp

Repeat returns a regular expression that matches zero or more occurrences of its reg-exp argument. With no count the result will match any number of times (reg-exp*). With a single count the returned expression will match reg-exp exactly that number of times. The final case will match from min to max repetitions, inclusive. Max may be #f, in which case there is no maximum number of matches. Count and min should be exact, non-negative integers; max should either be an exact non-negative integer or #f.

5.21.4  Case sensitivity

Regular expressions are normally case-sensitive.

  • (ignore-case reg-exp) –> reg-exp

  • (use-case reg-exp) –> reg-exp

The value returned by ignore-case is identical its argument except that case will be ignored when matching. The value returned by use-case is protected from future applications of ignore-case. The expressions returned by use-case and ignore-case are unaffected by later uses of the these procedures. By way of example, the following matches "ab" but not "aB", "Ab", or "AB".

(text "ab")

while

(ignore-case (test "ab"))

matches "ab", "aB", "Ab", and "AB" and

(ignore-case (sequence (text "a")
                       (use-case (text "b"))))

matches "ab" and "Ab" but not "aB" or "AB".

5.21.5  Submatches and matching

A subexpression within a larger expression can be marked as a submatch. When an expression is matched against a string, the success or failure of each submatch within that expression is reported, as well as the location of the substring matched be each successful submatch.

  • (submatch key reg-exp) –> reg-exp

  • (no-submatches reg-exp) –> reg-exp

Submatch returns a regular expression that matches its argument and causes the result of matching its argument to be reported by the match procedure. Key is used to indicate the result of this particular submatch in the alist of successful submatches returned by match. Any value may be used as a key. No-submatches returns an expression identical to its argument, except that all submatches have been elided.

  • (any-match? reg-exp string) –> boolean

  • (exact-match? reg-exp string) –> boolean

  • (match reg-exp string) –> match or #f

  • (match-start match) –> index

  • (match-end match) –> index

  • (match-submatches match) –> alist

Any-match? returns #t if string matches reg-exp or contains a substring that does, and #f otherwise. Exact-match? returns #t if string matches reg-exp and #f otherwise.

Match returns #f if reg-exp does not match string and a match record if it does match. A match record contains three values: the beginning and end of the substring that matched the pattern and an a-list of submatch keys and corresponding match records for any submatches that also matched. Match-start returns the index of the first character in the matching substring and match-end gives index of the first character after the matching substring. Match-submatches returns an alist of submatch keys and match records. Only the top match record returned by match has a submatch alist.

Matching occurs according to POSIX. The match returned is the one with the lowest starting index in string. If there is more than one such match, the longest is returned. Within that match the longest possible submatches are returned.

All three matching procedures cache a compiled version of reg-exp. Subsequent calls with the same reg-exp will be more efficient.

The C interface to the POSIX regular expression code uses ASCII nul as an end-of-string marker. The matching procedures will ignore any characters following an embedded ASCII nuls in string.

(define pattern (text "abc"))
(any-match? pattern "abc")         => #t
(any-match? pattern "abx")         => #f
(any-match? pattern "xxabcxx")     => #t

(exact-match? pattern "abc")       => #t
(exact-match? pattern "abx")       => #f
(exact-match? pattern "xxabcxx")   => #f

(match pattern "abc")              => #{match 0 3}
(match pattern "abx")              => #f
(match pattern "xxabcxx")          => #{match 2 5}

(let ((x (match (sequence (text "ab")
                          (submatch 'foo (text "cd"))
                          (text "ef"))
                "xxxabcdefxx")))
  (list x (match-submatches x)))
  => (#{match 3 9} ((foo . #{match 5 7}))

(match-submatches
  (match (sequence
           (set "a")
           (one-of (submatch 'foo (text "bc"))
                   (submatch 'bar (text "BC"))))
         "xxxaBCd"))
  => ((bar . #{match 4 6}))

5.22  SRFIs

`SRFI' stands for `Scheme Request For Implementation'. An SRFI is a description of an extension to standard Scheme. Draft and final SRFI documents, a FAQ, and other information about SRFIs can be found at the SRFI web site.

Scheme 48 includes implementations of the following (final) SRFIs:

  • SRFI 1 – List Library

  • SRFI 2 – and-let*

  • SRFI 4 – Homogeneous numeric vector datatypes (see note below)

  • SRFI 5 – let with signatures and rest arguments

  • SRFI 6 – Basic string ports

  • SRFI 7 – Program configuration

  • SRFI 8 – receive

  • SRFI 9 – Defining record types

  • SRFI 11 – Syntax for receiving multiple values

  • SRFI 13 – String Library

  • SRFI 14 – Character-Set Library (see note below)

  • SRFI 16 – Syntax for procedures of variable arity

  • SRFI 17 – Generalized set!

  • SRFI 19 – Time Data Types and Procedures

  • SRFI 22 – Running Scheme Scripts on Unix

  • SRFI 23 – Error reporting mechanism

  • SRFI 25 – Multi-dimensional Array Primitives

  • SRFI 26 – Notation for Specializing Parameters without Currying

  • SRFI 27 – Sources of Random Bits

  • SRFI 28 – Basic Format Strings

  • SRFI 31 – A special form rec for recursive evaluation

  • SRFI 34 – Exception Handling for Programs

  • SRFI 37 – args-fold: a program argument processor

  • SRFI 40 – A Library of Streams

  • SRFI 42 – Eager Comprehensions

  • SRFI 43 – Vector library

  • SRFI 45 – Primitives for Expressing Iterative Lazy Algorithms

  • SRFI 60 – Integers as Bits

  • SRFI 61 – A more general cond clause

  • SRFI 62 – S-expression comments

  • SRFI 63 – Homogeneous and Heterogeneous Arrays

  • SRFI 66 – Octet Vectors

  • SRFI 67 – Compare Procedures

  • SRFI 74 – Octet-Addressed Binary Blocks

  • SRFI 78 – Lightweight testing

Documentation on these can be found at the web site mentioned above.

SRFI 4 specifies an external representation for homogeneous numeric vectors that is incompatible with R5RS. The Scheme 48 version of SRFI 4 does not support this external representation.

SRFI 14 includes the procedure ->char-set which is not a standard Scheme identifier (in R5RS the only required identifier starting with - is - itself). In the Scheme 48 version of SRFI 14 we have renamed ->char-set as x->char-set.

SRFI bindings can be accessed either by opening the appropriate structure (the structure srfi-n contains SRFI n) or by loading structure srfi-7 and then using the ,load-srfi-7-program command to load an SRFI 7-style program. The syntax for the command is

,load-srfi-7-program name filename

This creates a new structure and associated package, binds the structure to name in the configuration package, and then loads the program found in filename into the package.

As an example, if the file test.scm contains

(program (code (define x 10)))

this program can be loaded as follows:

> ,load-package srfi-7
> ,load-srfi-7-program test test.scm
[test]
> ,in test
test> x
10
test> 

scheme48-1.9/doc/html/manual-Z-H-7.html000644 004306 005702 00000066013 12074535602 020446 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Unicode

Scheme 48 fully supports ISO 10646 (Unicode): Scheme characters represent Unicode scalar values, and Scheme strings are arrays of scalar values. More information on Unicode can be found at the Unicode web site.

6.1  Characters and their codes

Scheme 48 internally represents characters as Unicode scalar values. The unicode structure contains procedures for converting between characters and scalar values:

  • (char->scalar-value char) –> integer

  • (scalar-value->char integer) –> char

  • (scalar-value? integer) –> boolean

Char->scalar-value returns the scalar value of a character, and scalar-value->char converts in the other direction. Scalar-value->char signals an error if passed an integer that is not a scalar value.

Note that the Unicode scalar value range is

[unicode-Z-G-1.gif]

In particular, this excludes the surrogates, which UTF-16 uses to encode scalar values with two 16-bit words. Note that this representation differs from that of Java, which uses UTF-16 code units as the character representation—Scheme 48 effectively uses UTF-32, and is thus in line with other Scheme implementations and the current Unicode proposal for R6RS, as set forth in SRFI 75.

The R5RS procedures char->integer and integer->char are synonyms for char->scalar-value and scalar-value->char, respectively.

6.2  Character and string literals

The syntax specified here is in line with the current Unicode proposal for R6RS, as set forth in SRFI 75, except for case-sensitivity. (Scheme 48 is case-insensitive.)

6.2.1  Character literals

The following character names are available in addition to what R5RS provides:

  • #\nul (ASCII 0)

  • #\alarm (ASCII 7)

  • #\backspace (ASCII 8)

  • #\tab (ASCII 9)

  • #\vtab (ASCII 11)

  • #\page (ASCII 12)

  • #\return (ASCII 13)

  • #\esc (ASCII 27)

  • #\rubout (ASCII 127)

  • #\x<x><x>... hex, explicitly or implicitly delimited, where <x><x>... denotes the scalar value of the character

6.2.2  String literals

The following escape characters in string literals are available in addition to what R5RS provides:

  • \a: alarm (ASCII 7)

  • \b: backspace (ASCII 8)

  • \t: tab (ASCII 9)

  • \n: linefeed (ASCII 10)

  • \v: vertical tab (ASCII 11)

  • \f: formfeed (ASCII 12)

  • \r: return (ASCII 13)

  • \e: escape (ASCII 27)

  • \': quote (ASCII 39, same as unquoted)

  • \<newline><intraline whitespace>: elided (allows a single-line string to span source lines)

  • \x<x><x>...; hex, where <x><x>... denotes the scalar value of the character

6.2.3  Identifiers and symbol literals

Where R5RS allows a <letter>, Scheme 48 allows in addition any character whose scalar value is greater than 127 and whose Unicode general category is Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pd, Pc, Po, Sc, Sm, Sk, So, or Co.

Moreover, when a backslash appears in a symbol, it must start a \x<x><x>...; escape, which identifies an arbitrary character to include in the symbol. Note that a backslash itself can be specified as \x5C;.

6.3  Character classification and case mappings

The R5RS character predicates—char-whitespace?, char-lower-case?, char-upper-case?, char-numeric?, and char-alphabetic?—all treat the full Unicode range.

Char-upcase and char-downcase as well as char-ci=?, char-ci<?, char-ci<=?, char-ci>?, char-ci>=?, string-ci=?, string-ci<?, string-ci>?, string-ci<=?, string-ci>=? all use the standard simple locale-insensitive Unicode case folding.

In addition, Scheme 48 provides the unicode-char-maps structure for more complete access to the Unicode character classification with the following procedures and macros:

  • (general-category general-category-name) –> general-category     (syntax)

  • (general-category? x) –> boolean

  • (general-category-id general-category) –> string

  • (char-general-category char) –> general-category

The syntax general-category returns a Unicode general category object associated with general-category-name. (See Figure 2 below.) General-category? is the predicate for general-category objects. General-category-id returns the Unicode category id as a string (also listed in Figure 2). Char-general-category returns the general category of a character.


general-category-name primary-category-name Unicode category id
uppercase-letter letter "Lu"
lowercase-letter letter "Ll"
titlecase-letter letter "Lt"
modified-letter letter "Lm"
other-letter letter "Lo"

non-spacing-mark

mark "Mn"
combining-spacing-mark mark "Mc"
enclosing-mark mark "Me"

decimal-digit-number

number "Nd"
letter-number number "Nl"
other-number number "No"

opening-punctuation

punctuation "Ps"
closing-punctuation punctuation "Pe"
initial-quote-punctuation punctuation "Pi"
final-quote-punctuation punctuation "Pf"
dash-punctuation punctuation "Pd"
connector-punctuation punctuation "Pc"
other-punctuation punctuation "Po"

currency-symbol

symbol "Sc"
mathematical-symbol symbol "Sm"
modifier-symbol symbol "Sk"
other-symbol symbol "So"

space-separator

separator "Zs"
paragraph-separator separator "Zp"
line-separator separator "Zl"

control-character

miscellaneous "Cc"
formatting-character miscellaneous "Cf"
surrogate miscellaneous "Cs"
private-use-character miscellaneous "Co"
unassigned miscellaneous "Cn"

Figure 2:  Unicode general categories and primary categories


  • (general-category-primary-category general-category) –> primary-category

  • (primary-category primary-category-name) –> primary-category     (syntax)

  • (primary-category? x) –> boolean

General-category-primary-category maps the general category to its associated primary category—also listed in Figure 2. The primary-category syntax returns the primary-category object associated with primary-category-name. Primary-category? is the predicate for primary-category objects.

The unicode-char-maps procedure also provides the following additional case-mapping procedures for characters:

  • (char-titlecase? char) –> boolean

  • (char-titlecase char) –> char

  • (char-foldcase char) –> char

Char-titlecase? tests if a character is in titlecase. Char-titlecase returns the titlecase counterpart of a character. Char-foldcase folds the case of a character, i.e. maps it to uppercase first, then to lowercase. The following case-mapping procedures on strings are available:

  • (string-upcase string) –> string

  • (string-downcase string) –> string

  • (string-titlecase string) –> string

  • (string-foldcase string) –> string

These implement the simple case mappings defined by the Unicode standard—note that the length of the output string may be different from that of the input string.

6.4  SRFI 14

The SRFI 14 (“Character Sets”) implementation in the srfi-14 structure is fully Unicode-compliant.

6.5  R6RS

The r6rs-unicode structure exports the procedures from the (r6rs unicode) library of 5.91 draft of R6RS that are not already in the scheme structure:

string-normalize-nfd
string-normalize-nfkd
string-normalize-nfc
string-normalize-nfkc
char-titlecase
char-title-case?
char-foldcase
string-upcase
string-downcase
string-foldcase
string-titlecase
The r6rs-unicode structure also exports a char-general-category procedure compatible with the (r6rs unicode) library. Note that, as Scheme 48 treats source code case-insensitively, the symbols it returns are all-lowercase.

6.6  I/O

Ports must encode any text a program writes to an output port to a byte sequence, and conversely decode byte sequences when a program reads text from an input port. Therefore, each port has an associated text codecthat describes how encode and decode text.

Note that the interface to the text codec functionality is experimental and very likely to change in the future.

6.6.1  Text codecs

The i/o structure defines the following procedures:

  • (port-text-codec port) –> text-codec

  • (set-port-text-codec! port text-codec)

These two procedures retrieve and set the text codec associated with a port, respectively. A program can set text codec of a port at any time, even if it has already performed I/O on the port.

The text-codecs structure defines the following procedures and macros:

  • (text-codec? x) –> boolean

  • null-text-codec     ( text-codec)

  • us-ascii-codec     ( text-codec)

  • latin-1-codec     ( text-codec)

  • utf-8-codec     ( text-codec)

  • utf-16le-codec     ( text-codec)

  • utf-16be-codec     ( text-codec)

  • utf-32le-codec     ( text-codec)

  • utf-32be-codec     ( text-codec)

  • (find-text-codec string) –> text-codec or #f

Text-codec? is the predicate for text codecs. Null-text-codec is primarily meant for null ports that never yield input and swallow all output. The following text codecs implement the US-ASCII, Latin-1, Unicode UTF-8, Unicode UTF-16 (little-endian), Unicode UTF-16 (big-endian), Unicode UTF-32 (little-endian), Unicode UTF-32 (big-endian) encodings, respectively.

Find-text-codec finds the codec associated with an encoding name. The names of the above encodings are "null", "US‑ASCII", "ISO8859‑1", "UTF‑8", "UTF‑16LE", "UTF‑16BE", "UTF‑32LE", and "UTF‑32BE", respectively.

6.6.2  Text-codec utilities

The text-codec-utils structure exports a few utilities for dealing with text codecs:

  • (guess-port-text-codec-according-to-bom port) –> text-codec or #f

  • (set-port-text-codec-according-to-bom! port) –> boolean

These procedures look at the byte-order-mark (also called the “BOM”, U+FEFF) at the beginning of a port and guess the appropriate text codec. This works only for UTF-16 (little-endian and big-endian) and UTF-8. Guess-port-text-codec-according-to-bom returns the text codec, or #f if it found no UTF-16 or UTF-8 BOM. Note that this actually reads from the port. If the guess does not succeed, it is probably a good idea to re-open the port. Set-port-text-codec-according-to-bom! calls guess-port-text-codec-according-to-bom, sets the port text codec to the result if successful and returns #t. If it is not successful, it returns #f. As with guess-port-text-codec-according-to-bom, this reads from the port, whether successful or not.

6.6.3  Creating text codecs

  • (make-text-codec strings encode-proc decode-proc) –> text-codec

  • (text-codec-names text-codec) –> list of strings

  • (text-codec-encode-char-proc text-codec) –>  encode-proc

  • (text-codec-decode-char-proc text-codec) –>  decode-proc

  • (define-text-codec id name encode-proc decode-proc)     (syntax)

  • (define-text-codec id (name ...) encode-proc decode-proc)     (syntax)

Make-text-codec constructs a text codec from a list of names, and an encode and a decode procedure. (See below on how to construct encode and decode procedures.) Text-codec-names, text-codec-encode-char-proc, and text-codec-decode-char-proc are the accessors for text codec. The define-text-codec is a shorthand for binding a global identifier to a text codec. Its first form is for codecs with only one name, the second for codecs with several names.

Encoding and decoding procedures work as follows:

  • (encode-proc char buffer start count) –> boolean maybe-count

  • (decode-proc buffer start count) –> maybe-char count

An encode-proc consumes a character char to encode, a byte vector buffer to receive the encoding, an index start into the buffer, and a block size count. It is supposed to encode the bytes into the block at [start, start + count). If the encoding is successful, the procedure must return #t and the number of bytes needed by the encoding. If the character cannot be encoded at all, the procedure must return #f and #f. If the encoding is possible but the space is not sufficient, the procedure must return #f and a total number of bytes needed for the encoding.

A decode-proc consumes a byte vector buffer, an index start into the buffer, and a block size count. It is supposed to decode the bytes at indices [start, start + count). If the decoding is successful, it must return the decoded character at the beginning of the block, and the number of bytes consumed. If the block cannot begin with or be a prefix of a valid encoding, the procedure must return #f and #f. If the block contains a true prefix of a valid encoding, the procedure must return #f and a total count of bytes (including the buffer) needed to complete the encoding. Note that this byte count is only a guess: the system will provide that many bytes, but the decoding procedures might still signal an incomplete encoding, causing the system to try to obtain more.

6.7  Default encodings

The default encoding for new ports is UTF-8. For the default current-input-port, current-output-port, and current-error-port, Scheme 48 consults the OS for encoding information.

For Unix, it consults nl_langinfo(3), which in turn consults the LC_ environment variables. If the encoding is not defined that way, Scheme 48 reverts to US-ASCII.

Under Windows, Scheme 48 uses Unicode I/O (using UTF-16) for the default ports connected to the console, and Latin-1 for default ports that are not.

scheme48-1.9/doc/html/manual-Z-H-8.html000644 004306 005702 00000130750 12074535602 020447 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Threads

This chapter describes Scheme 48's thread system: Scheme 48 threads are fully preemptive; all threads (currently) run within a single operating system process. Scheme 48 allows writing customized, nested schedulers, and provides numerous facilities for the synchronization of shared-memory programs, most importantly proposals for optimistic concurrency.

7.1  Creating and controlling threads

The bindings described in this section are part of the threads structure.

  • (spawn thunk) –> thread

  • (spawn thunk name) –> thread

Spawn creates a new thread, passes that thread to the current scheduler, and instructs the scheduler to run thunk in that thread. The name argument (a symbol) associates a symbolic name with the thread; it is purely for debugging purposes.

  • (relinquish-timeslice)

  • (sleep time-in-milliseconds)

  • (terminate-current-thread)

Relinquish-timeslice instructs the scheduler to run another thread, thus relinquishing the timeslice of the current thread. Sleep does the same and asks the scheduler to suspend the current thread for at least time-in-milliseconds milliseconds before resuming it. Finally, terminate-current-thread terminates the current thread.

Each thread is represented by a thread object. The following procedures operate on that object:

  • (current-thread) –> thread

  • (thread? thing) –> boolean

  • (thread-name thread) –> name

  • (thread-uid thread) –> integer

Current-thread returns the thread object associated with the currently running thread. Thread? is the predicate for thread objects. Thread-name extracts the name of the thread, if one was specified in the call to spawn, #f otherwise. Thread-uid returns the uid of the thread, a unique integer assigned by the thread system.

7.2  Advanced thread handling

The following bindings are part of the threads-internal structure:

  • (terminate-thread! thread)

  • (kill-thread! thread)

Terminate-thread! unwinds the thread associated with thread, running any pending dynamic-wind after thunks (in that thread), after which the thread terminates. Kill-thread! causes the thread associated with thread to terminate immediately without unwinding its continuation.

7.3  Debugging multithreaded programs

Debugging multithreaded programs can be difficult.

As described in section 3.12, when any thread signals an error, Scheme 48 stops running all of the threads at that command level.

The following procedure (exported by the structure debug-messages) is useful in debugging multi-threaded programs.

  • (debug-message element0 ...)

Debug-message prints the elements to `stderr', followed by a newline. The only types of values that debug-message prints in full are small integers (fixnums), strings, characters, symbols, booleans, and the empty list. Values of other types are abbreviated as follows:

pair (...)
vector #(...)
procedure #{procedure}
record #{<name of record type>}
all others ???
The great thing about debug-message is that it bypasses Scheme 48's I/O and thread handling. The message appears immediately, with no delays or errors.

7.4  Optimistic concurrency

Most of the bindings described in this section are part of the proposals structure—the low-level bindings described at the very end of the section are part of the low-proposals structure.

A proposal is a record of reads from and and writes to locations in memory. Each thread has an associated current proposal (which may be #f). The logging operations listed below record any values read or written in the current proposal. A reading operation, such as provisional-vector-ref, first checks to see if the current proposal contains a value for the relevant location. If so, that value is returned as the result of the read. If not, the current contents of the location are stored in the proposal and then returned as the result of the read. A logging write to a location stores the new value as the current contents of the location in the current proposal; the contents of the location itself remain unchanged.

Committing to a proposal verifies that any reads logged in the proposal are still valid and, if so, performs any writes that the proposal contains. A logged read is valid if, at the time of the commit, the location contains the same value it had at the time of the original read (note that this does not mean that no change occurred, simply that the value now is the same as the value then). If a proposal has an invalid read then the effort to commit fails; no change is made to the value of any location. The verifications and subsequent writes to memory are performed atomically with respect to other proposal commit attempts.

The queues structure (with source in scheme/big/queue.scm) is a thoroughly commented example of a moderately complex data structure made thread-safe using optimistic concurrency.

  • (call-ensuring-atomicity thunk) –> value ...

  • (call-ensuring-atomicity! thunk)

  • (ensure-atomicity exp ...) –> value ...     (syntax)

  • (ensure-atomicity! exp ...)     (syntax)

If there is a proposal in place call-ensuring-atomicity and call-ensuring-atomicity! simply make a (tail-recursive) call to thunk. If the current proposal is #f they create a new proposal, install it, call thunk, and then try to commit to the proposal. This process repeats, with a new proposal on each iteration, until the commit succeeds. Call-ensuring-atomicity returns whatever values are returned by thunk on its final invocation, while ensure-atomicity! discards any such values and returns nothing.

Ensure-atomicity and ensure-atomicity! are macro versions of call-ensuring-atomicity and call-ensuring-atomicity!: (ensure-atomicity exp ...) expands into (call-ensuring-atomicity (lambda () exp ...)); likewise for ensure-atomicity! and call-ensuring-atomicity!.

  • (provisional-car pair) –> value

  • (provisional-cdr pair) –> value

  • (provisional-set-car! pair value)

  • (provisional-set-cdr! pair value)

  • (provisional-cell-ref cell) –> value

  • (provisional-cell-set! cell value)

  • (provisional-vector-ref vector i) –> value

  • (provisional-vector-set! vector i value)

  • (provisional-string-ref vector i) –> char

  • (provisional-string-set! vector i char)

  • (provisional-byte-vector-ref vector i) –> k

  • (provisional-byte-vector-set! vector i k)

These are all logging versions of their Scheme counterparts. Reads are checked when the current proposal is committed and writes are delayed until the commit succeeds. If the current proposal is #f these perform exactly as their Scheme counterparts.

The following implementation of a simple counter may not function properly when used by multiple threads.

(define (make-counter)
  (let ((value 0))
    (lambda ()
      (set! value (+ value 1))
      value)))

Here is the same procedure using a proposal to ensure that each increment operation happens atomically. The value of the counter is kept in a cell (see section 5.6) to allow the use of logging operations.

(define (make-counter)
  (let ((value (make-cell 0)))
    (lambda ()
      (ensure-atomicity
        (lambda ()
          (let ((v (+ (provisional-cell-ref value)
                      1)))
            (provisional-cell-set! value v)
            v))))))

Because ensure-atomicity creates a new proposal only if there is no existing proposal in place, multiple atomic actions can be merged into a single atomic action. For example, the following procedure increments an arbitrary number of counters at the same time. This works even if the same counter appears multiple times; (step-counters! c0 c0) would add two to the value of counter c0.

(define (step-counters! . counters)
  (ensure-atomicity
    (lambda ()
      (for-each (lambda (counter)
                  (counter))
                counters))))

(define-synchronized-record-type tag type-name
  (constructor-name field-tag ...)
  [(field-tag ...)]
  predicate-name
  (field-tag accessor-name [modifier-name])
  ...)

This is the same as define-record-type except all field reads and writes are logged in the current proposal. If the optional list of field tags is present then only those fields will be logged.

  • (call-atomically thunk) –> value(s)

  • (call-atomically! thunk)

  • (atomically exp ...) –> value(s)     (syntax)

  • (atomically! exp ...)     (syntax)

Call-atomically and call-atomically! are identical to call-ensuring-atomicity and call-ensuring-atomicity! except that they always install a new proposal before calling thunk. The current proposal is saved and then restored after thunk returns. Call-atomically and call-atomically! are useful if thunk contains code that is not to be combined with any other operation.

Atomically and atomically! are macro versions of call-atomically and call-atomically!: (atomically exp ...) expands into (call-atomically (lambda () exp ...)); likewise for atomically! and call-atomically!.

The following procedures and macro are intended primarily for use in implementing new synchronization primitives or complex thread-safe data structures.

  • (with-new-proposal (lose) exp ...) –> value ...     (syntax)

  • (maybe-commit) –> boolean

  • (proposal-active?) –> boolean

  • (remove-current-proposal!)

  • (invalidate-current-proposal!)

With-new-proposal saves the current proposal, installs a new one, executes the forms in the body, reinstalls the formerly current proposal, and returns whatever the last body form returned. It also binds lose to a thunk repeating the procedure of installing a new procedure and running the body. Typically, the body will call maybe-commit and, if that fails, tail-call lose to try again. If lose is called from a non-tail position of the body, the results are unspecified (and probably harmful).

Maybe-commit verifies that any reads logged in the current proposal are still valid and, if so, performs any writes that it contains. A logged read is valid if, at the time of the commit, the location read contains the same value it had at the time of the original read (note that this does not mean that no change occurred, simply that the value now is the same as the value then). Maybe-commit returns #t if the commit succeeds and #f if it fails.

Proposal-active? returns #t if a proposal is active, and #f otherwise. Remove-current-proposal! removes and discards the current proposal; this can be used to clean up before raising an error. Invalidate-current-proposal! ensures that any attempt to commit the current proposal will fail; this can be used if an operation on a thread-safe data structure detects that it has seen the data structure in an inconsistent state.

The following procedures give access to the low-level proposal mechanism. They are defined in the low-proposals structure.

  • (make-proposal) –> proposal

  • (current-proposal) –> proposal

  • (set-current-proposal! proposal)

Make-proposal creates a new proposal. Current-proposal and set-current-proposal access and set the current thread's proposal. It is an error to pass to set-current-proposal! a proposal that is already in use.

7.5  Condition variables

Condition variables (defined in the condvars structure) allow threads perform condition synchronization: It allows threads to block, waiting for a specified condition—associated with a condition variable—to occur, and other threads to wake up the waiting threads when the condition is fulfilled.

Note that, in Scheme 48, condition variables work in conjunction with proposals, not with mutex locks or semaphores, as in most other implementations of this concept.

  • (make-condvar) –> condvar

  • (make-condvar id) –> condvar

  • (condvar? thing) –> boolean

  • (set-condvar-has-value?! condvar boolean)

  • (condvar-has-value? condvar) –> boolean

  • (set-condvar-value! condvar value)

  • (condvar-value condvar) –> value

  • (maybe-commit-and-wait-for-condvar condvar) –> boolean

  • (maybe-commit-and-set-condvar! condvar value) –> boolean

Make-condvar creates a condition variable. (The optional id argument is only for debugging purposes; the discloser for condition variables prints it out if present.) Condvar? is the predicate for condition variables.

Each condition variable has an associated value and a flag has-value? signalling if the condition has already occured. The accessor for flag is condvar-has-value?; set-condvar-has-value?! sets it. Both are provisional operations and go through the current proposal. Set-condvar-value! sets the value of the condition variable (provisionally), and condvar-value extracts it.

Maybe-commit-and-wait-for-condvar attempts to commit the current proposal. If the commit succeeds, it suspends the current thread and registers it with the condvar condition variable. Upon waking up again maybe-commit-and-wait-for-condvar returns #t, If the commit fails, maybe-commit-and-set-condvar returns #f.

Maybe-commit-and-set-condvar! sets the value of the condvar condition variable to value, (provisionally) sets the has-value? flag to #t, and then attempt to commit the current proposal. Upon success, it wakes up all suspended threads registered with condvar and returns #t, otherwise, it returns #f.

7.6  Mutual exclusion

Scheme 48 also has more traditional mutual-exclusion synchronization abstractions, specifically mutex locks and placeholders. Note that typically synchronization via optimistic concurrency is usually preferable: Mutual exclusion often puts the running program into an inconsistent state for the time of the inclusion, which has adverse effects on modularity and interruptibility.

7.6.1  Locks

The locks structure contains bindings that implement standard mutex locks:

  • (make-lock) –> lock

  • (lock? thing) –> boolean

  • (obtain-lock lock)

  • (maybe-obtain-lock lock) –> boolean

  • (release-lock lock)

Make-lock creates a lock in the “released” state. Lock? is the predicate for locks.

Obtain-lock atomically checks if lock is in the “released” state. If it is, the lock is put into the “obtained” state, and obtain-lock returns immediately. If the lock is in the “obtained” state, the current thread is suspended and registered with the lock. Maybe-obtain-lock, like obtain-lock, checks the state of lock: if it is “released,” the lock is put into the “obtained” state, if it is “obtained,” maybe-obtain-lock returns immediately. Maybe-obtain-lock returns #t if it was able to obtain the lock, and #f otherwise.

Release-lock does nothing if lock is in the “released” state. If it is in the “obtained” state, release-lock causes one of the threads suspended on an obtain-lock lock operation to continue execution. If that thread is the last thread registered with the lock, the lock is transferred to the “released” state. In any case, release-lock returns immediately.

7.6.2  Placeholders

The placeholders structure contains bindings for placeholders—thread-safe, write-once variables, akin to ID-90 I-structures or CML I-variables.

The typical scenario for placeholders is that, say, a thread A computes a value needed by another thread B at some unspecified time. Both threads share access to a placeholder; when A has computed the value, it places it into the placeholder. When B needs the value, it extracts it from placeholder, blocking if necessary.

  • (make-placeholder) –> placeholder

  • (make-placeholder id) –> placeholder

  • (placeholder? thing) –> boolean

  • (placeholder-set! placeholder value)

  • (placeholder-value placeholder) –> value

Make-placeholder creates an empty placeholder. (The optional id argument is only for debugging purposes; the discloser for placeholders prints it out if present.) Placeholder? is the predicate for placeholders.

Placeholder-set! places a value into a placeholder. Doing this more than once signals an error. Placeholder-value extracts the value from the placeholder and returns it. If the placeholder is empty, it blocks the current thread until it becomes full.

7.7  Writing custom synchronization abstractions

The bindings explained in this section are part of the threads-internal structure. They are concerned with suspending threads and making them runnable again upon some later event.

Typically, a suspended thread needs to be recorded in a queue somewhere for later waking-up. To allow a thread to be recorded in multiple queues (say, when it waits for one of a number of events), such thread queues are ordinary queues containing cells that, in turn, contain the thread objects themselves. Each thread has at most one such cell associated with it which is shared among all queues (or other data structures) holding on to the suspended thread. The cell is cleared when the thread is woken up.

  • (thread-queue-empty? thread-queue) –> boolean

  • (maybe-dequeue-thread! thread-queue) –> boolean

Thread-queue-empty? atomically checks whether the thread-queue thread queue is empty, i.e., if it does not contain non-empty cells. Maybe-dequeue-thread! provisionally dequeues a thread from thread-queue if it contains one. It returns the dequeued thread or #f if the queue is empty.

  • (maybe-commit-and-block cell) –> boolean

  • (maybe-commit-and-block-on-queue thread-queue) –> boolean

  • (maybe-commit-and-make-ready thread-or-queue) –> boolean

Maybe-commit-and-block attempts to commit the current proposal. If this succeeds, the current thread is blocked, the thread's cell is set to cell, and #t is returned. Otherwise, #f is returned. Maybe-commit-and-block-on-queue is like maybe-commit-and-block, excepts that it creates a fresh cell for the thread and enqueues it in thread-queue if the commit succeeds.

Maybe-commit-and-make-ready accepts either a thread object or a thread queue as an argument. In either case, maybe-commit-and-make-ready tries to commit the current proposal. If that succeeds, maybe-commit-and-make-ready makes its argument runnable: if thread-or-queue is a thread, that thread is made runnable, if it is a thread queue, all threads on the queue are made runnable. (In the latter case, none of the threads actually runs until all have been made runnable.) Maybe-commit-and-make-ready returns #t if it succeeded, and #f otherwise.

7.8  Concurrent ML abstractions

The interface to the Concurrent ML abstractions in Scheme 48 is mostly analogous to the original implementation shipped with SML/NJ [9]. Note that both the interface and implementation are new and may change in future releases.

The main terminological difference is that CML events are called rendezvous in Scheme 48. For more information on programming with the CML abstractions, Reppy's book [9] is recommended.

7.8.1  Basic rendezvous combinators

The basic rendezvous combinators live in the rendezvous structure.

  • never-rv     (rendezvous)

  • (always-rv value) –> rendezvous

Never-rv is a rendezvous that is never enabled for synchronization. (It is the same as the never event in CML.) Always-rv returns a rendezvous that is always enabled for synchronization, and always yields the same value value. (This is the same as the alwaysEvt function in CML.)

  • (choose rendezvous ...) –> rendezvous

Choose creates a rendezvous representing the choice of its arguments: Synchronization on the resulting rendezvous will synchronize on one of the arguments to choose, depending on which becomes enabled first. (This is the same as the choose function in CML.)

  • (wrap rendezvous proc) –> rendezvous

Wrap wraps a post-synchronization procedure around rendezvous: When the resulting rendezvous is synchronized, rendezvous is synchronized, and the value it yields is passed to proc; the value returned by proc then is the result of the synchronization. (This is the same as the CML wrap function.)

  • (guard thunk) –> rendezvous

Guard delays the creation of a rendezvous until synchronization time: It returns a rendezvous that will, upon synchronization, turn into the rendezvous returned by thunk. Guard can be used to perform pre-synchronization actions such as resource allocation. (This is the same as the CML guard function.)

  • (with-nack proc) –> rendezvous

With-nack, like guard, creates a delayed rendezvous: Upon synchronization, the rendezvous actually used is the one returned by proc. In addition to the functionality offered by guard, proc receives, as an argument, another rendezvous which becomes enabled when another rendezvous involved in the synchronization (via choose) is picked instead of the one produced by proc. (This is the same as the CML withNack function.)

  • (sync rendezvous) –> value

  • (select rendezvous ...) –> value

Sync synchronizes the current thread on rendezvous rendezvous, returning the value it yields. Select synchronizes on the choice of its argument; (select r1 ...rn) is semantically equivalent to (sync (choose select r1 ...rn)), but may be implemented more efficiently. (These are the same as the CML functions sync and select.)

7.8.2  Synchronous channels

The rendezvous-channels structure contains abstractions for bidirectional, synchronous channels for communicating between two threads.

  • (make-channel) –> channel

  • (channel? x) –> boolean

Make-channel creates a new synchronous channel. (This is the same as the CML channel function.) Channel? is the predicate for synchronous channels.

  • (send-rv channel value) –> rendezvous

  • (send channel value)

Send-rv creates a rendezvous that, upon synchronization, sends message value on the synchronous channel channel. The synchronization suceeds only when another thread attempts to receive a message from channel. (This is the same as the CML sendEvt function.) Send directly sends a message value on channel channel; (send c v) is equivalent to (sync (send-rv c v)). (Send is the same as the CML send function.)

  • (receive-rv channel) –> rendezvous

  • (receive channel)

Receive-rv creates a rendezvous which, upon synchronization, receives a message on channel channel. (This is the same as the CML recEvt function.) Receive directly receives a message on channel channel; (receive c v) is equivalent to (sync (receive-rv c v)). (Receive is the same as the CML recv function.)

7.8.3  Synchronous variables

Two structures contain abstractions for synchronous variables: the rendezvous-placeholders structure for so-called placeholders (write-once variables), and the rendezvous-jars structure for jars (which allow multiple updates.)

7.8.3.1  Placeholders

Placeholders are write-once variables. The placeholders implemented by the rendezvous-placeholders structure offer equivalent functionality to the placeholders implemented by the placeholders structure (see Section 7.6.2), but additionally allow converting a placeholder into a rendezvous. Note, however, that placeholders from placeholders are different from and not interchangeable with placeholders from rendezvous-placeholders.

  • (make-placeholder) –> placeholder

  • (make-placeholder id) –> placeholder

  • (placeholder? x) –> boolean

Make-placeholder creates an empty placeholder. (The optional id argument is only for debugging purposes; the discloser for placeholders prints it out if present.) (This is the same as the CML iVar function.) Placeholder? is the predicate for placeholders.

  • (placeholder-set! placeholder value)

Placeholder-set! places a value into a placeholder. Doing this more than once signals an error. (This is the same as the CML iPut function.)

  • (placeholder-value-rv placeholder) –> rendezvous

  • (placeholder-value placeholder) –> value

Placeholder-value extracts the value from the placeholder and returns it. If the placeholder is empty, it blocks the current thread until it becomes full. (This is the same as the CML iGet function.) Placeholder-value-rv creates a rendezvous that will, upon synchronization, extract the value from the placeholder and yield it as a result. (This is the same as the CML iGetEvt function.)

7.8.3.2  Jars

A jar is a synchronous variable which can have two states: full and empty. It becomes full when a value it put into it; putting a value into a full jar is an error. Conversely, it becomes empty when a value is taken out of it. Trying to take a value out of an empty jar blocks until it becomes full. (Jars are similar to ID-90 M-structures.) Jars live in the rendezvous-jars structure.

  • (make-jar) –> jar

  • (make-jar id) –> jar

  • (jar? x) –> boolean

Make-jar creates an empty jar. (The optional id argument is only for debugging purposes; the discloser for jars prints it out if present.) (This is the same as the CML mVar function.) Jar? is the predicate for jars.

  • (jar-put! jar value)

Jar-put! places a value into a jar if it is empty. Applying jar-put! to a full jar is an error. (This is the same as the CML mPut function.)

  • (jar-take-rv placeholder) –> rendezvous

  • (jar-take placeholder) –> value

Jar-take takes a value from a full jar, emptying it in the process. If the jar is empty, jar-take blocks until it becomes full. (This is the same as the CML mTake function.) Jar-take-rv creates a rendezvous that, upon synchronization, will extract the value from a jar and empty it in the process. (This is the same as the CML mTakeEvt function.)

7.8.4  Timeouts

The rendezvous-time structure allows creating rendezvous for alarms and timeouts:

  • (after-time-rv milliseconds) –> rendezvous

  • (at-real-time-rv time) –> rendezvous

After-time-rv creates a rendezvous that becomes enabled at time interval milliseconds after synchronization. (Actually, milliseconds is a minimum waiting time; the actual delay may be longer.) (This is the same as the CML timeOutEvt function.) At-real-time-rv creates a rendezvous that becomes enabled at an absolute time specified by time; this absolute time is specified in the same way as the return value real-time from the time structure. (This is the same as the CML atTimeEvt function.)

7.8.5  CML to Scheme correspondence

The following table lists the Scheme names that correspond to particular CML names.

CML name Scheme name
rendezvous
never never-rv
alwaysEvt always-rv
choose choose
wrap wrap
guard guard
withNack with-nack
sync sync
select select
rendezvous-channels
channel make-channel
sendEvt send-rv
send send
recEvt receive-rv
rec receive
rendezvous-placeholders
iVar make-placeholder
iPut placeholder-set!
iGet placeholder-value
iGetEvt placeholder-value-rv
rendezvous-jars
mVar make-jar
mTake jar-take
mTakeEvt jar-take-rv
mPut jar-put!
rendezvous-time
timeOutEvt after-time-rv
atTimeEvt at-real-time-rv

scheme48-1.9/doc/html/manual-Z-H-9.html000644 004306 005702 00000241550 12074535602 020451 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9


Mixing Scheme 48 and C

This chapter describes the foreign-function interface for calling C functions from Scheme, calling Scheme functions from C, and allocating storage in the Scheme heap. Scheme 48 manages stub functions in C that negotiate between the calling conventions of Scheme and C and the memory allocation policies of both worlds. No stub generator is available yet, but writing stubs is a straightforward task.

The foreign-function interface is modeled after the Java Native Interface (JNI), more information can be found at Sun's JNI Page.

Currently, Scheme 48 supports two foreign-function interfaces: The old GCPROTECT-style and the new JNI-style interface (this chapter) live side by side. The old interface is deprecated and will go away in a future release. Section 8.12 gives a recipe how to convert external code from the old to the new interface.

8.1  Available facilities

The following facilities are available for interfacing between Scheme 48 and C:

  • Scheme code can call C functions.

  • The external interface provides full introspection for all Scheme objects. External code may inspect, modify, and allocate Scheme objects arbitrarily.

  • External code may raise exceptions back to Scheme 48 to signal errors.

  • External code may call back into Scheme. Scheme 48 correctly unrolls the process stack on non-local exits.

  • External modules may register bindings of names to values with a central registry accessible from Scheme. Conversely, Scheme code can register shared bindings for access by C code.

8.1.1  Scheme structures

The structure external-calls has most of the Scheme functions described here. The others are in load-dynamic-externals, which has the functions for dynamic loading and name lookup from Section 8.4, and shared-bindings, which has the additional shared-binding functions described in section 8.2.3.

8.1.2  C naming conventions

The names of all of Scheme 48's visible C bindings begin with `s48_' (for procedures, variables, and macros). Note that the new foreign-function interface does not distinguish between procedures and macros. Whenever a C name is derived from a Scheme identifier, we replace `-' with `_' and convert letters to lowercase. A final `?' converted to `_p', a final `!' is dropped. As a naming convention, all functions and macros of the new foreign-function interface end in `_2' (for now) to make them distinguishable from the old interface's functions and macros. Thus the C macro for Scheme's pair? is s48_pair_p_2 and the one for set-car! is s48_set_car_2. Procedures and macros that do not check the types of their arguments have `unsafe' in their names.

All of the C functions and macros described have prototypes or definitions in the file c/scheme48.h.

8.1.3  Garbage collection and reference objects

Scheme 48 uses a precise, copying garbage collector. The garbage collector may run whenever an object is allocated in the heap. The collector must be able to locate all references to objects allocated in the Scheme 48 heap in order to ensure that storage is not reclaimed prematurely and to update references to objects moved by the collector. This interface takes care of communicating to the garbage collector what objects it uses in most situations. It relieves the programmer from having to think about garbage collector interactions in the common case.

This interface does not give external code direct access to Scheme objects. It introduces one level of indirection as external code never accepts or returns Scheme values directly. Instead, external code accepts or returns reference objects of type s48_ref_t that refer to Scheme values (their C type is defined to be s48_value). This indirection is only needed as an interface to external code, interior pointers in Scheme objects are unaffected.

There are two types of reference objects:

local references
A local reference is valid for the duration of a function call from Scheme to external code and is automatically freed after the external function returns to the virtual machine.

global references
A global reference remains valid until external code explicitly frees it.

Scheme objects that are passed to external functions are passed as local references. External functions return Scheme objects as local references. External code has to manually manage Scheme objects that outlive a function call as global references. Scheme objects outlive a function call if they are assigned to a global variable of the external code or stored in long-living external objects, see section 8.7.1.

A local reference is valid only within the dynamic context of the native method that creates it. Therefore, a local reference behaves exactly like a local variable in the external code: It is live as long as external code can access it. To achieve this, every external function in the interface that accepts or returns reference objects takes a call object of type s48_call_t as its first argument. A call object corresponds to a particular call from Scheme to C. The call object holds all the references that belong to a call (like the call's arguments and return value) to external code from Scheme. External code may pass a local reference through multiple external functions. The foreign-function interface automatically frees all the local references a call object owns, along with the call object itself, when an external call returns to Scheme.

This means that in the common case of Scheme calling an external function that does some work on its arguments and returns without stashing any Scheme objects in global variables or global data structures, the external code does not need to do any bookkeeping, since all the reference objects the external code accumulates are local references. Once the call returns, the foreign-function interface frees all the local references.

For example, the functions to construct and access pairs are declared like this:

  • s48_ref_t s48_cons_2(s48_call_t call, s48_ref_t car, s48_ref_t cdr);

  • s48_ref_t s48_car_2(s48_call_t call, s48_ref_t pair);

  • s48_ref_t s48_cdr_2(s48_call_t call, s48_ref_t pair);

This foreign-function interface takes a significant burden off the programmer as it handles most common cases automatically. If all the Scheme objects are live for the extent of the current external call, the programmer does not have to do anything at all. Since the lifetime of the Scheme objects is then identical with the lifetime of the according reference objects. In this case, the systems automatically manages both for the programmer. Using this foreign-function interface does not make the code more complex; the code stays compact and readable. The programmer has to get accustomed to passing the call argument around.

How to manage Scheme objects that outlive the current call is described in section 8.7.1.

Section 8.12 gives a recipe how to convert external code from the old GCPROTECT-style interface to the new JNI-style interface.

8.2  Shared bindings

Shared bindings are the means by which named values are shared between Scheme code and C code. There are two separate tables of shared bindings, one for values defined in Scheme and accessed from C and the other for values going the other way. Shared bindings actually bind names to cells, to allow a name to be looked up before it has been assigned. This is necessary because C initialization code may be run before or after the corresponding Scheme code, depending on whether the Scheme code is in the resumed image or is run in the current session.

8.2.1  Exporting Scheme values to C

  • (define-exported-binding name value) –> shared-binding

  • s48_ref_t s48_get_imported_binding_2(char *name)

  • s48_ref_t s48_get_imported_binding_local_2(s48_call_t call, char *name)

  • s48_ref_t s48_shared_binding_ref_2(s48_call_t call, s48_ref_t shared_binding)

Define-exported-binding makes value available to C code under name, which must be a string, creating a new shared binding if necessary. The C function s48_get_imported_binding_2 returns a global reference to the shared binding defined for name, again creating it if necessary, s48_get_imported_binding_local_2 returns a local reference to the shared binding (see section 8.1.3 for details on reference objects). The C macro s48_shared_binding_ref_2 dereferences a shared binding, returning its current value.

8.2.2  Exporting C values to Scheme

Since shared bindings are defined during initialization, i.e. outside an external call, there is no call object. Therefore, exporting shared bindings from C does not use the new foreign-function interfaces specifications.

  • void s48_define_exported_binding(char *name, s48_value v)

  • (lookup-imported-binding string) –> shared-binding

  • (shared-binding-ref shared-binding) –> value

These are used to define shared bindings from C and to access them from Scheme. Again, if a name is looked up before it has been defined, a new binding is created for it.

The common case of exporting a C function to Scheme can be done using the macro s48_export_function(name). This expands into

s48_define_exported_binding("name",
                               s48_enter_pointer(name))

which boxes the function pointer into a Scheme byte vector and then exports it. Note that s48_enter_pointer allocates space in the Scheme heap and might trigger a garbage collection; see Section 8.7.

  • (import-definition name)     (syntax)

  • (import-definition name c-name)     (syntax)

These macros simplify importing definitions from C to Scheme. They expand into

(define name (lookup-imported-binding c-name))

where c-name is as supplied for the second form. For the first form c-name is derived from name by replacing `-' with `_' and converting letters to lowercase. For example, (import-definition my-foo) expands into

(define my-foo (lookup-imported-binding "my_foo"))

8.2.3  Complete shared binding interface

There are a number of other Scheme functions related to shared bindings; these are in the structure shared-bindings.

  • (shared-binding? x) –> boolean

  • (shared-binding-name shared-binding) –> string

  • (shared-binding-is-import? shared-binding) –> boolean

  • (shared-binding-set! shared-binding value)

  • (define-imported-binding string value)

  • (lookup-exported-binding string)

  • (undefine-imported-binding string)

  • (undefine-exported-binding string)

Shared-binding? is the predicate for shared-bindings. Shared-binding-name returns the name of a binding. Shared-binding-is-import? is true if the binding was defined from C. Shared-binding-set! changes the value of a binding. Define-imported-binding and lookup-exported-binding are Scheme versions of s48_define_exported_binding and s48_lookup_imported_binding. The two undefine- procedures remove bindings from the two tables. They do nothing if the name is not found in the table.

The following C macros correspond to the Scheme functions above.

  • int s48_shared_binding_p(s48_call_t call, x)

  • int s48_shared_binding_is_import_p(s48_call_t call, s48_ref_t s_b)

  • s48_ref_t s48_shared_binding_name(s48_call_t call, s48_ref_t s_b)

  • void s48_shared_binding_set(s48_call_t call, s48_ref_t s_b, s48_ref_t v)

8.3  Calling C functions from Scheme

There are different ways to call C functions from Scheme, depending on how the C function was obtained.

  • (call-imported-binding-2 binding arg0 ...) –> value

Each of these applies its first argument, a C function that accepts and/or returns objects of type s48_ref_t and has its first argument of type s48_call_t, to the rest of the arguments. For call-imported-binding-2 the function argument must be an imported binding.

For all of these, the interface passes the current call object and the argi values to the C function and the value returned is that returned by C procedure. No automatic representation conversion occurs for either arguments or return values. Up to twelve arguments may be passed. There is no method supplied for returning multiple values to Scheme from C (or vice versa) (mainly because C does not have multiple return values).

Keyboard interrupts that occur during a call to a C function are ignored until the function returns to Scheme (this is clearly a problem; we are working on a solution).

  • (import-lambda-definition-2 name (formal ...))     (syntax)

  • (import-lambda-definition-2 name (formal ...) c-name)     (syntax)

These macros simplify importing functions from C that follow the return value and argument conventions of the foreign-function interface and use s48_call_t and s48_ref_t as their argument and return types. They define name to be a function with the given formals that applies those formals to the corresponding C binding. C-name, if supplied, should be a string. These expand into

(define temp (lookup-imported-binding c-name))
(define name
  (lambda (formal ...)
    (call-imported-binding-2 temp formal ...)))

If c-name is not supplied, it is derived from name by converting all letters to lowercase and replacing `-' with `_'.

8.4  Dynamic loading

External code can be loaded into a running Scheme 48—at least on most variants of Unix and on Windows. The required Scheme functions are in the structure load-dynamic-externals.

To be suitable for dynamic loading, the externals code must reside in a shared object. The shared object must define a function:

  • void s48_on_load(void)

The s48_on_load is run upon loading the shared objects. It typically contains invocations of S48_EXPORT_FUNCTION to make the functionality defined by the shared object known to Scheme 48.

The shared object may also define either or both of the following functions:

  • void s48_on_unload(void)

  • void s48_on_reload(void)

Scheme 48 calls s48_on_unload just before it unloads the shared object. If s48_on_reload is present, Scheme 48 calls it when it loads the shared object for the second time, or some new version thereof. If it is not present, Scheme 48 calls s48_on_load instead. (More on that later.)

For Linux, the following commands compile foo.c into a file foo.so that can be loaded dynamically.

% gcc -c -o foo.o foo.c
% ld -shared -o foo.so foo.o

The following procedures provide the basic functionality for loading shared objects containing dynamic externals:

  • (load-dynamic-externals string plete? rrepeat? rresume?) –> dynamic-externals

  • (unload-dynamic-externals string) –>  dynamic-externals

  • (reload-dynamic-externals dynamic-externals)

Load-dynamic-externals loads the named shared objects. The plete? argument determines whether Scheme 48 appends the OS-specific suffix (typically .so for Unix, and .dll for Windows) to the name. The rrepeat? argument determines how load-dynamic-externals behaves if it is called again with the same argument: If this is true, it reloads the shared object (and calls its s48_on_unload on unloading if present, and, after reloading, s48_on_reload if present or s48_on_load if not), otherwise, it will not do anything. The rresume? argument determines if an image subsequently dumped will try to load the shared object again automatically. (The shared objects will be loaded before any record resumers run.) Load-dynamic-externals returns a handle identifying the shared object just loaded.

Unload-dynamic-externals unloads the shared object associated with the handle passed as its argument, previously calling its s48_on_unload function if present. Note that this invalidates all external bindings associated with the shared object; referring to any of them will probably crash the program.

Reload-dynamic-externals will reload the shared object named by its argument and call its s48_on_unload function before unloading, and, after reloading, s48_on_reload if present or s48_on_load if not.

  • (import-dynamic-externals string) –> dynamic-externals

This procedure represents the expected most usage for loading dynamic-externals. It is best explained by its definition:

(define (import-dynamic-externals name)
  (load-dynamic-externals name #t #f #t))

8.5  Accessing Scheme data from C

The C header file scheme48.h provides access to Scheme 48 data structures. The type s48_ref_t is used for reference objects that refer to Scheme values. When the type of a value is known, such as the integer returned by vector-length or the boolean returned by pair?, the corresponding C procedure returns a C value of the appropriate type, and not a s48_ref_t. Predicates return 1 for true and 0 for false.

8.5.1  Constants

The following macros denote Scheme constants:

  • s48_false_2(s48_call_t) is #f.

  • s48_true_2(s48_call_t) is #t.

  • s48_null_2(s48_call_t) is the empty list.

  • s48_unspecific_2(s48_call_t) is a value used for functions which have no meaningful return value (in Scheme 48 this value returned by the nullary procedure unspecific in the structure util).

  • s48_eof_2(s48_call_t) is the end-of-file object (in Scheme 48 this value is returned by the nullary procedure eof-object in the structure i/o-internal).

8.5.2  Converting values

The following macros and functions convert values between Scheme and C representations. The `extract' ones convert from Scheme to C and the `enter's go the other way.

  • int s48_extract_boolean_2(s48_call_t, s48_ref_t)

  • long s48_extract_char_2(s48_call_t, s48_ref_t)

  • char * s48_extract_byte_vector_2(s48_call_t, s48_ref_t)

  • long s48_extract_long_2(s48_call_t, s48_ref_t)

  • long s48_extract_unsigned_long_2(s48_call_t, s48_ref_t)

  • double s48_extract_double_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_enter_boolean_2(s48_call_t, int)

  • s48_ref_t s48_enter_char_2(s48_call_t, long)

  • s48_ref_t s48_enter_byte_vector_2(s48_call_t, char *, long)     (may GC)

  • s48_ref_t s48_enter_long_2(s48_call_t, long)     (may GC)

  • s48_ref_t s48_enter_long_as_fixnum_2(s48_call_t, long)     (may GC)

  • s48_ref_t s48_enter_double_2(s48_call_t, double)     (may GC)

s48_extract_boolean_2 is false if its argument is #f and true otherwise. s48_enter_boolean_2 is #f if its argument is zero and #t otherwise.

The s48_extract_char_2 function extracts the scalar value from a Scheme character as a C long. Conversely, s48_enter_char_2 creates a Scheme character from a scalar value. (Note that ASCII values are also scalar values.)

The s48_extract_byte_vector_2 function needs to deal with the garbage collector to avoid invalidating the returned pointer. For more details see section 8.7.3.

The second argument to s48_enter_byte_vector_2 is the length of byte vector.

s48_enter_long_2() needs to allocate storage when its argument is too large to fit in a Scheme 48 fixnum. In cases where the number is known to fit within a fixnum (currently 30 bits on a 32-bits architecture and 62 bit on a 64-bits architecture including the sign), the following procedures can be used. These have the disadvantage of only having a limited range, but the advantage of never causing a garbage collection. s48_fixnum_p_2(s48_call_t) is a macro that true if its argument is a fixnum and false otherwise.

  • int s48_fixnum_p_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_enter_long_as_fixnum_2(s48_call_t, long)

  • long S48_MAX_FIXNUM_VALUE

  • long S48_MIN_FIXNUM_VALUE

An error is signaled if the argument to s48_enter_fixnum is less than S48_MIN_FIXNUM_VALUE or greater than S48_MAX_FIXNUM_VALUE (−229 and 229−1 on a 32-bits architecture and −261 and 262−1 on a 64-bits architecture).

  • int s48_true_p_2(s48_call_t, s48_ref_t)

  • int s48_false_p_2(s48_call_t, s48_ref_t)

s48_true_p is true if its argument is s48_true and s48_false_p is true if its argument is s48_false.

  • s48_ref_t s48_enter_string_latin_1_2(s48_call_t, char*);     (may GC)

  • s48_ref_t s48_enter_string_latin_1_n_2(s48_call_t, char*, long);     (may GC)

  • long s48_string_latin_1_length_2(s48_call_t, s48_ref_t);

  • long s48_string_latin_1_length_n_2(s48_call_t, s48_ref_t, long, long);

  • void s48_copy_latin_1_to_string_2(s48_call_t, char*, s48_ref_t);

  • void s48_copy_latin_1_to_string_n_2(s48_call_t, char*, long, s48_ref_t);

  • void s48_copy_string_to_latin_1_2(s48_call_t, s48_ref_t, char*);

  • void s48_copy_string_to_latin_1_n_2(s48_call_t, s48_ref_t, long, long, char*);

  • s48_ref_t s48_enter_string_utf_8_2(s48_call_t, char*);     (may GC)

  • s48_ref_t s48_enter_string_utf_8_n_2(s48_call_t, char*, long);     (may GC)

  • long s48_string_utf_8_length_2(s48_call_t, s48_ref_t);

  • long s48_string_utf_8_length_n_2(s48_call_t, s48_ref_t, long, long);

  • long s48_copy_string_to_utf_8_2(s48_call_t, s48_ref_t, char*);

  • long s48_copy_string_to_utf_8_n_2(s48_call_t, s48_ref_t, long, long, char*);

  • s48_ref_t s48_enter_string_utf_16be_2(s48_call_t, char*);     (may GC)

  • s48_ref_t s48_enter_string_utf_16be_n_2(s48_call_t, char*, long);     (may GC)

  • long s48_string_utf_16be_length_2(s48_call_t, s48_ref_t);

  • long s48_string_utf_16be_length_n_2(s48_call_t, s48_ref_t, long, long);

  • long s48_copy_string_to_utf_16be_2(s48_call_t, s48_ref_t, char*);

  • long s48_copy_string_to_utf_16be_n_2(s48_call_t, s48_ref_t, long, long, char*);

  • s48_ref_t s48_enter_string_utf_16le_2(s48_call_t, char*);     (may GC)

  • s48_ref_t s48_enter_string_utf_16le_n_2(s48_call_t, char*, long);     (may GC)

  • long s48_string_utf_16le_length_2(s48_call_t, s48_ref_t);

  • long s48_string_utf_16le_length_n_2(s48_call_t, s48_ref_t, long, long);

  • long s48_copy_string_to_utf_16le_2(s48_call_t, s48_ref_t, char*);

  • long s48_copy_string_to_utf_16le_n_2(s48_call_t, s48_ref_t, long, long, char*);

The s48_enter_string_latin_1_2 function creates a Scheme string, initializing its contents from its NUL-terminated, Latin-1-encoded argument. The s48_enter_string_latin_1_n_2 function does the same, but allows specifying the length explicitly—no NUL terminator is necessary.

The s48_string_latin_1_length_2 function computes the length that the Latin-1 encoding of its argument (a Scheme string) would occupy, not including NUL termination. The s48_string_latin_1_length_2 function does the same, but allows specifying a starting index and a count into the input string.

The s48_copy_latin_1_to_string_2 function copies Latin-1-encoded characters from its second NUL-terminated argument to the Scheme string that is its third argument. The s48_copy_latin_1_to_string_n_2 does the same, but allows specifying the number of characters explicitly. The s48_copy_string_to_latin_1_2 function converts the characters of the Scheme string specified as the second argument into Latin-1 and writes them into the string specified as the third argument. (Note that it does not NUL-terminate the result.) The s48_copy_string_to_latin_1_n_2 function does the same, but allows specifying a starting index and a character count into the source string.

The s48_extract_latin_1_from_string_2 function returns a buffer that contains the Latin-1 encoded characters including NUL termination of the Scheme string specified. The buffer that is returned is a local buffer managed by the foreign-function interface and is automatically freed on the return of the current call.

The s48_enter_string_utf_8_2 function creates a Scheme string, initializing its contents from its NUL-terminated, UTF-8-encoded argument. The s48_enter_string_utf_8_n_2 function does the same, but allows specifying the length explicitly—no NUL terminator is necessary.

The s48_string_utf_8_length_2 function computes the length that the UTF-8 encoding of its argument (a Scheme string) would occupy, not including NUL termination. The s48_string_utf_8_length_2 function does the same, but allows specifying a starting index and a count into the input string.

The s48_copy_string_to_utf_8_2 function converts the characters of the Scheme string specified as the second argument into UTF-8 and writes them into the string specified as the third argument. (Note that it does not NUL-terminate the result.) The s48_copy_string_to_utf_8_n_2 function does the same, but allows specifying a starting index and a character count into the source string. Both return the length of the written encodings in bytes.

The s48_extract_utf_8_from_string_2 function returns a buffer that contains the UTF-8 encoded characters including NUL termination of the Scheme string specified. The buffer that is returned is a local buffer managed by the foreign-function interface and is automatically freed on the return of the current call.

The functions with utf_16 in their names work analogously to their utf_8 counterparts, but implement the UTF-16 encodings. The lengths returned be the _length and copy_string_to functions are in terms of UTF-16 code units. The extract function returns a local buffer that contains UTF-16 code units including NUL termination.

8.5.3  C versions of Scheme procedures

The following macros and procedures are C versions of Scheme procedures. The names were derived by replacing `-' with `_', `?' with `_p', and dropping `!.

  • int s48_eq_p_2(s48_call_t, s48_ref_t, s48_ref_t)

  • int s48_char_p_2(s48_call_t, s48_ref_t)

  • int s48_null_p_2(s48_call_t, s48_ref_t)

  • int s48_pair_p_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_car_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_cdr_2(s48_call_t, s48_ref_t)

  • void s48_set_car_2(s48_call_t, s48_ref_t, s48_ref_t)

  • void s48_set_cdr_2(s48_call_t, s48_ref_t, s48_ref_t)

  • s48_ref_t s48_cons_2(s48_call_t, s48_ref_t, s48_ref_t)     (may GC)

  • long s48_length_2(s48_call_t, s48_ref_t)

  • int s48_vector_p_2(s48_call_t, s48_ref_t)

  • long s48_vector_length_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_vector_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_vector_set_2(s48_call_t, s48_ref_t, long, s48_ref_t)

  • s48_ref_t s48_make_vector_2(s48_call_t, long, s48_ref_t)     (may GC)

  • int s48_string_p_2(s48_call_t, s48_ref_t)

  • long s48_string_length_2(s48_call_t, s48_ref_t)

  • long s48_string_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_string_set_2(s48_call_t, s48_ref_t, long, long)

  • s48_ref_t s48_make_string_2(s48_call_t, long, char)     (may GC)

  • int s48_symbol_p_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_symbol_to_string_2(s48_call_t, s48_ref_t)

  • int s48_byte_vector_p_2(s48_call_t, s48_ref_t)

  • long s48_byte_vector_length_2(s48_call_t, s48_ref_t)

  • char s48_byte_vector_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_byte_vector_set_2(s48_call_t, s48_ref_t, long, int)

  • s48_ref_t s48_make_byte_vector_2(s48_call_t, long, int)     (may GC)

8.6  Calling Scheme functions from C

External code that has been called from Scheme can call back to Scheme procedures using the following function.

  • s48_ref_t s48_call_scheme_2(s48_call_t, s48_ref_t p, long nargs, ...)

This calls the Scheme procedure p on nargs arguments, which are passed as additional arguments to s48_call_scheme_2. There may be at most twelve arguments. The value returned by the Scheme procedure is returned by the C procedure. Invoking any Scheme procedure may potentially cause a garbage collection.

There are some complications that occur when mixing calls from C to Scheme with continuations and threads. C only supports downward continuations (via longjmp()). Scheme continuations that capture a portion of the C stack have to follow the same restriction. For example, suppose Scheme procedure s0 captures continuation a and then calls C procedure c0, which in turn calls Scheme procedure s1. Procedure s1 can safely call the continuation a, because that is a downward use. When a is called Scheme 48 will remove the portion of the C stack used by the call to c0. On the other hand, if s1 captures a continuation, that continuation cannot be used from s0, because by the time control returns to s0 the C stack used by c0 will no longer be valid. An attempt to invoke an upward continuation that is closed over a portion of the C stack will raise an exception.

In Scheme 48 threads are implemented using continuations, so the downward restriction applies to them as well. An attempt to return from Scheme to C at a time when the appropriate C frame is not on top of the C stack will cause the current thread to block until the frame is available. For example, suppose thread t0 calls a C procedure which calls back to Scheme, at which point control switches to thread t1, which also calls C and then back to Scheme. At this point both t0 and t1 have active calls to C on the C stack, with t1's C frame above t0's. If thread t0 attempts to return from Scheme to C it will block, as its frame is not accessible. Once t1 has returned to C and from there to Scheme, t0 will be able to resume. The return to Scheme is required because context switches can only occur while Scheme code is running. T0 will also be able to resume if t1 uses a continuation to throw past its call to C.

8.7  Interacting with the Scheme heap

Scheme 48 uses a copying, precise garbage collector. Any procedure that allocates objects within the Scheme 48 heap may trigger a garbage collection.

Local object references refer to values in the Scheme 48 heap and are automatically registered with the garbage collector by the interface for the duration of a function call from Scheme to C so that the values will be retained and the references will be updated if the garbage collector moves the object.

Global object references need to be created and freed explicitly for Scheme values that need to survive one function call, e.g. that are stored in global variables, global data structures or are passed to libraries. See section 8.7.1 for details.

Additionally, the interface provides local buffers that are malloc'd regions of memory valid for the duration of a function call and are freed automatically upon return from the external code. This relieves the programmer from explicitly freeing locally allocated memory. See section 8.7.2 for details.

The interface treats byte vectors in a special way, since the garbage collector has no facility for updating pointers to the interiors of objects, so that such pointers, for example the ones returned by s48_unsafe_extract_byte_vector_2, will likely become invalid when a garbage collection occurs. The interface provides a facility to prevent a garbage collection from invalidating pointers to byte vector's memory region, see section 8.7.3 for details.

8.7.1  Registering global references

When external code needs a reference object to survive the current call, the external code needs to do explicit bookkeeping. Local references must not be stored in global variables of the external code or passed to other threads, since all local references are freed once the call returns, which leads to a dangling pointer in the global variable or other thread respectively. Instead, promote a local reference to a global reference and store it in a global variable or pass to another thread as global references will survive the current call. Since the foreign-function interface never automatically frees global references, the programmer must free them at the right time.

  • s48_ref_t s48_make_global_ref(s48_value obj)

  • void s48_free_global_ref(s48_ref_t ref)

  • s48_ref_t s48_local_to_global_ref(s48_ref_t ref)

s48_make_global_ref permanently registers the Scheme value obj as a global reference with the garbage collector. Basic Scheme values are _s48_value_true, _s48_value_false, _s48_value_null, _s48_value_unspecific, _s48_value_undefined, and _s48_value_eof.

To free a global reference an to unregister it with the garbage collector, use s48_free_global_ref. The function s48_local_to_global_ref promotes a local reference object to a global reference object.

For example, to maintain a global list of values, declare a static global variable

  s48_ref_t global_list = NULL;

and initialize it in the external code's initialization function

  global_list = s48_make_global_ref(_s48_value_null);

Note that you need to use a Scheme value (not a reference object) as the argument for s48_make_global_ref, since there is not yet a call object at the time external code gets initialized. To add new_value to the list, you can use the following snippet:

  temp = global_list;
  global_list =  s48_local_to_global_ref(s48_cons_2(call, new_value, global_list))
  s48_free_global_ref(temp);

You have to remember to always promote reference objects to global references when assigning to a global variable (and later, to free them manually). Note that it is more efficient to free the previous head of the list when adding a new element to the list.

8.7.2  Local buffers

The foreign-function interface supports the programmer with allocating memory in external code: The programmer can request chunks of memory, called local buffers, that are automatically freed on return from the current call.

  • void *s48_make_local_buf (s48_call_t, size_t)

  • void s48_free_local_buf (s48_call_t, void *)

The function s48_make_local_buf returns a block of memory of the given size in bytes. This memory freed by the foreign-function interface when the current call returns. To free the buffer manually, use s48_free_local_buf.

8.7.3  Special treatment for byte vectors

The interface treats byte vectors in a special way, since the garbage collector has no facility for updating pointers to the interiors of objects, so that such pointers, for example the ones returned by s48_unsafe_extract_byte_vector_2, will likely become invalid when a garbage collection occurs. The interface provides a facility to prevent a garbage collection from invalidating pointers to byte vector's memory region. It does this by copying byte vectors that are used in external code from and to the Scheme heap.

These functions create byte vectors:

  • s48_ref_t s48_make_byte_vector_2(s48_call_t, long)     (may GC)

  • s48_ref_t s48_make_unmovable_byte_vector_2(s48_call_t, long)     (may GC)

  • s48_ref_t s48_enter_byte_vector_2(s48_call_t, const char *, long)     (may GC)

  • s48_ref_t s48_enter_unmovable_byte_vector_2(s48_call_t, const char *, long)     (may GC)

s48_make_byte_vector_2 creates a byte vector of given size, s48_make_unmovable_byte_vector_2 creates a byte vector in that is not moved by the garbage collector (only the Bibop garbage collector supports this). The functions s48_enter_byte_vector_2 and s48_enter_unmovable_byte_vector_2 create and initialize byte vectors.

The following functions copy byte vectors from and to the Scheme heap:

  • void s48_extract_byte_vector_region_2(s48_call_t, s48_ref_t, long, long, char*)

  • void s48_enter_byte_vector_region_2(s48_call_t, s48_ref_t, long, long, char*)

  • void s48_copy_from_byte_vector_2(s48_call_t, s48_ref_t, char *)

  • void s48_copy_to_byte_vector_2(s48_call_t, s48_ref_t, char *)

s48_extract_byte_vector_region_2 copies a given section from the given byte vector to its last argument, s48_enter_byte_vector_region_2 copies the contents of its last argument to its first argument to the given index. s48_copy_from_byte_vector_2 copies the whole byte vector to its last argument, s48_copy_to_byte_vector_2 copies the contents of its last argument to the byte vector.

  • char *s48_extract_byte_vector_unmanaged_2(s48_call_t, s48_ref_t)

  • void s48_release_byte_vector_2(s48_call_t, s48_ref_t, char*)

s48_extract_byte_vector_unmanaged_2 returns a local buffer that is valid during the current external call and copies the contents of the given byte vector to the returned buffer. The returned byte vector may be a copy of the Scheme byte vector, changes made to the returned byte vector will not necessarily be reflected in Scheme until s48_release_byte_vector_2 is called.

The following functions to access byte vectors come with the most support from the foreign-function interface. Byte vectors that are accessed via these functions are automatically managed by the interface and are copied back to Scheme on return from the current call:

  • char *s48_extract_byte_vector_2(s48_call_t, s48_ref_t)

  • char *s48_extract_byte_vector_readonly_2(s48_call_t, s48_ref_t)

s48_extract_byte_vector_2 extracts a byte vector from Scheme by making a copy of the byte vectors contents and returning a pointer to that copy. Changes to the byte vector are automatically copied back to the Scheme heap when the function returns, external code raises an exception, or external code calls a Scheme function. s48_extract_byte_vector_readonly_2 should be used for byte vectors that are not modified by external code, since these byte vectors are not copied back to Scheme.

8.7.4  Memory overhead

Each reference object consumes a certain amount of memory itself, in addition to the memory taken by the referred Scheme object itself. Even though local references are eventually freed on return of an external call, there are some situations where it is desirable to free local references explicitly, since waiting until the call returns may be too long or never happen, which could keep unneeded objects live:

  • External code may create a large number of local references in a single external call. An example is the traversal of a list: Each call from external code to the functions that correspond to car and cdr returns a fresh local reference. To avoid the consumption of storage for local references proportional to the length of the list, the traversal must free the no-longer-needed references as it goes.

    For example, this is a straightforward definition of an external function that calculates the length of a list:

      s48_ref_t
      s48_length_2(s48_call_t call, s48_ref_t list)
      {
        long i = 0;
        while (!(s48_null_p_2(call, list)))
          {
            list = s48_cdr_2(call, list);
            ++i;
          }
        return s48_unsafe_enter_long_as_fixnum_2(call, i);
      }
    

    In this implementation, each iteration step creates a new local reference object via s48_cdr_2 that is actually only needed for the next iteration step. As a result, this function creates new local references for every element of the list. The local references are live during the entire function call.

    To avoid consuming storage proportional to the length of the list for all those local reference objects, the improved version cleans up the unneeded local reference on every iteration step:

      s48_ref_t
      s48_length_2(s48_call_t call, s48_ref_t list)
      {
        s48_ref_t l = s48_copy_local_ref(call, list);
        long i = 0;
        while (!(s48_null_p_2(call, l)))
          {
            s48_ref_t temp = l;
            l = s48_cdr_2(call, l);
            s48_free_local_ref(call, temp);
            ++i;
          }
        return s48_unsafe_enter_long_as_fixnum_2(call, i);
      }
    

    Note that without the call to s48_copy_local_ref the reference to the head of the list would be freed along with all the temporary references. This would render the whole list unusable after the return from s48_length_2.

  • The external call does not return at all. If the external function enters an infinite event dispatch loop, for example, it is crucial that the programmer releases local references manually that he created inside the loop so that they do not accumulate indefinitely and lead to a memory leak.

  • External code may hold a local reference to a large Scheme object. After the external code is done working on this object, it performs some additional computation before returning to the caller. The local reference to the large object prevents the object from being garbage collected until the external function returns, even if the object is no longer in use for the remainder of the computation. It is more space-efficient if the programmer frees the local reference when the external function does not need it any longer and will not return for quite some time.

  • There are common situations where local references are created solely to be passed to another function and afterwards never used again. In this case, the called function can free the local references of the arguments.

  • To improve memory usage while making subcalls from external calls, the foreign-function interface provides functionality to create a new (sub-)call object and clean the local references that are created during that subcall:

    • s48_call_t s48_make_subcall(s48_call_t call)

    • void s48_free_subcall(s48_call_t subcall)

    • s48_ref_t s48_finish_subcall(s48_call_t call, s48_call_t subcall, s48_ref_t ref)

    s48_make_subcall returns a new call object that represents a subcall of the current call and can be passed as the call argument to any subcalls of the current call. Upon return of a subcall, s48_free_subcall frees the subcall and all the local references associated with it. The function s48_finish_subcall also frees the subcall and all the local references associated with it, but copies its third argument to the current call, so that it survives the subcall.

8.7.5  Keeping C data structures in the Scheme heap

C data structures can be kept in the Scheme heap by embedding them inside byte vectors. The following macros can be used to create and access embedded C objects.

  • s48_ref_t s48_make_value_2(s48_call_t, type)     (may GC)

  • s48_ref_t s48_make_sized_value_2(s48_call_t, size)     (may GC)

  • type s48_extract_value_2(s48_call_t, s48_ref_t, type)

  • long s48_value_size_2(s48_call_t, s48_ref_t)

  • type * s48_extract_value_pointer_2(s48_call_t, s48_ref_t, type)

  • void s48_set_value_2(s48_call_t, s48_ref_t, type, value)

s48_make_value_2 makes a byte vector large enough to hold an object whose type is type. s48_make_sized_value_2 makes a byte vector large enough to hold an object of size bytes. s48_extract_value_2 returns the contents of a byte vector cast to type, s48_value_size_2 returns its size, and s48_extract_value_pointer_2 returns a pointer to the contents of the byte vector. The value returned by s48_extract_value_pointer_2 is valid only until the next garbage collection. s48_set_value_2 stores value into the byte vector.

Pointers to C data structures can be stored in the Scheme heap:

  • s48_ref_t s48_enter_pointer_2(s48_call_t, void *)     (may GC)

  • void * s48_extract_pointer_2(s48_call_t, s48_ref_t)     (may GC)

The function s48_enter_pointer_2 makes a byte vector large enough to hold the pointer value and stores the pointer value in the byte vector. The function s48_extract_pointer_2 extracts the pointer value from the scheme heap.

8.7.6  C code and heap images

Scheme 48 uses dumped heap images to restore a previous system state. The Scheme 48 heap is written into a file in a machine-independent and operating-system-independent format. The procedures described above may be used to create objects in the Scheme heap that contain information specific to the current machine, operating system, or process. A heap image containing such objects may not work correctly when resumed.

To address this problem, a record type may be given a `resumer' procedure. On startup, the resumer procedure for a type is applied to each record of that type in the image being restarted. This procedure can update the record in a manner appropriate to the machine, operating system, or process used to resume the image.

  • (define-record-resumer record-type procedure)

Define-record-resumer defines procedure, which should accept one argument, to be the resumer for record-type. The order in which resumer procedures are called is not specified.

The procedure argument to define-record-resumer may be #f, in which case records of the given type are not written out in heap images. When writing a heap image any reference to such a record is replaced by the value of the record's first field, and an exception is raised after the image is written.

8.8  Using Scheme records in C code

External modules can create records and access their slots positionally.

  • s48_ref_t s48_make_record_2(s48_call_t, s48_ref_t)     (may GC)

  • int s48_record_p_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_record_type_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_record_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_record_set_2(s48_call_t, s48_ref_t, long, s48_ref_t)

The argument to s48_make_record_2 should be a shared binding whose value is a record type. In C the fields of Scheme records are only accessible via offsets, with the first field having offset zero, the second offset one, and so forth. If the order of the fields is changed in the Scheme definition of the record type the C code must be updated as well.

For example, given the following record-type definition

(define-record-type thing :thing
  (make-thing a b)
  thing?
  (a thing-a)
  (b thing-b))

the identifier :thing is bound to the record type and can be exported to C:

(define-exported-binding "thing-record-type" :thing)

Thing records can then be made in C:

static s48_ref_t
  thing_record_type_binding = NULL;

void initialize_things(void)
{
  thing_record_type_binding =
     s48_get_imported_binding_2("thing-record-type");
}

s48_ref_t make_thing(s48_call_t call, s48_ref_t a, s48_ref_t b)
{
  s48_ref_t thing;
  thing = s48_make_record_2(call, thing_record_type_binding);
  s48_record_set_2(call, thing, 0, a);
  s48_record_set_2(call, thing, 1, b);
  return thing;
}

Note that the interface takes care of protecting all local references against the possibility of a garbage collection occurring during the call to s48_make_record_2(); also note that the record type binding is a global reference that is live until explicitly freed.

8.9  Raising exceptions from external code

The following macros explicitly raise certain errors, immediately returning to Scheme 48. Raising an exception performs all necessary clean-up actions to properly return to Scheme 48, including adjusting the stack of protected variables.

The following procedures are available for raising particular types of exceptions. These never return.

  • s48_assertion_violation_2(s48_call_t, const char* who, const char* message, long count, ...)

  • s48_error_2(s48_call_t, const char* who, const char* message, long count, ...)

  • s48_os_error_2(s48_call_t, const char* who, const char* message, long count, ...)

  • s48_out_of_memory_error_2(s48_call_t, )

An assertion violation signaled via s48_assertion_violation_2 typically means that an invalid argument (or invalid number of arguments) has been passed. An error signaled via s48_error_2 means that an environmental error (like an I/O error) has occurred. In both cases, who indicates the location of the error, typically the name of the function it occurred in. It may be NULL, in which the system guesses a name. The message argument is an error message encoded in UTF-8. Additional arguments may be passed that become part of the condition object that will be raised on the Scheme side: count indicates their number, and the arguments (which must be of type s48_ref_t) follow.

The s48_os_error_2 function is like s48_error_2, except that the error message is inferred from an OS error code (as in strerror). The s48_out_of_memory_error_2 function signals that the system has run out of memory.

The following macros raise assertion violations if their argument does not have the required type. s48_check_boolean_2 raises an error if its argument is neither #t or #f.

  • void s48_check_boolean_2(s48_call_t, s48_ref_t)

  • void s48_check_symbol_2(s48_call_t, s48_ref_t)

  • void s48_check_pair_2(s48_call_t, s48_ref_t)

  • void s48_check_string_2(s48_call_t, s48_ref_t)

  • void s48_check_integer_2(s48_call_t, s48_ref_t)

  • void s48_check_channel_2(s48_call_t, s48_ref_t)

  • void s48_check_byte_vector_2(s48_call_t, s48_ref_t)

  • void s48_check_record_2(s48_call_t, s48_ref_t)

  • void s48_check_shared_binding_2(s48_call_t, s48_ref_t)

8.10  External events

External code can push the occurrence of external events into the main Scheme 48 event loop and Scheme code can wait and act on external events.

On the Scheme side, the external events functionality consists of the following functions from the structure primitives:

  • (new-external-event-uid shared-binding-or-#f) –>  uid

  • (unregister-external-event-uid! uid)

And the following functions from the structure external-events:

  • (register-condvar-for-external-event! uid condvar)

  • (wait-for-external-event condvar)

  • (new-external-event) –>  uid condvar

The function new-external-event-uid returns a fresh event identifier on every call. When called with a shared binding instead of #f, new-external-event-uid returns a named event identifier for permanent use. The function unregister-external-event-uid unregisters the given event identifier.

External events use condition variables to synchronize the occurrence of events, see section 7.5 for more information on condition variables. The function register-condvar-for-external-event registers a condition variable with an event identifier. For convenience, the function new-external-event combines new-external-event-uid and register-condvar-for-external-event and returns a fresh event identifier and the corresponding condition variable.

The function wait-for-external-event blocks the caller (on the condition variable) until the Scheme main event loop receives an event notification (by s48_note_external_event) of the event identifier that is registered with the given condition variable (with register-condvar-for-external-event). There is no guarantee that the caller of wait-for-external-event is unblocked on every event notification, therefore the caller has to be prepared to handle multiple external events that have occurred and external code has to be prepared to store multiple external events.

The following prototype is the interface on the external side:

  • void s48_note_external_event(long)

External code has to collect external events and can use s48_note_external_event to signal the occurrence of an external event to the main event loop. The argument to s48_note_external_event is an event identifier that was previously registered on the Scheme side. Thus, external code has to obtain the event identifier from the Scheme side, either by passing the event identifier as an argument to the external function that calls s48_note_external_event or by exporting the Scheme value to C (see section 8.2.1).

Since the main event loop does not guarantee that every call to s48_note_external_event causes the just occurred event to get handled immediately, external code has to make sure that it can collect multiple external events (i.e. keep them in an appropriate data structure). It is safe for external code to call s48_note_external_event on every collected external event, though, even if older events have not been handled yet.

8.10.1  Collecting external events in external code

External code has to be able to collect multiple events that have occurred. Therefore, external code has to create the needed data structures to store the information that is associated with the occurred event. Usually, external code collects the events in a thread. An separate thread does not have an call argument, though, so it cannot create Scheme data structures. It must use C data structures to collect the events, for example it can create a linked list of events.

Since the events are later handled on the Scheme side, the information associated with the event needs to be visible on the Scheme side, too. Therefore, external code exports a function to Scheme that returns all current events as Scheme objects (the function that returns the events knows about the current call and thus can create Scheme objects). Scheme and external code might need to share Scheme record types that represent the event information. Typically, the function that returns the events converts the C event list into a Scheme event list by preserving the original order in which the events arrived. Note that the external list data structure that holds all events needs to be mutex locked on each access to preserve thread-safe manipulation of the data structure (the Scheme thread that processes events and the external thread that collects events may access the data structures at the same time).

8.10.2  Handling external events in Scheme

If the sole occurrence of an event does not suffice for the program, the Scheme side has to pull the information that is associated with an event from the C side. Then, the Scheme side can handle the event data. For example, a typical event loop on the Scheme side that waits on external events of an permanent event type that an long-running external thread produces may look like this:

(define *external-event-uid* 
  (new-external-event-uid (lookup-imported-binding "my-event")))

(spawn-external-thread *external-event-uid*)

(let loop ()
  (let ((condvar (make-condvar)))
    (register-condvar-for-external-event! *external-event-uid* condvar)
    (wait-for-external-event condvar)
    (process-external-events! (get-external-events))
    (loop)))

In the above example, the variable *external-event-uid* is defined as a permanent event identifier. On every pass through the loop, a fresh condition variable is registered with the event identifier, then wait-for-external-event blocks on the condition variable until external code signals the occurrence of a matching event. Note that process-external-events! and get-external-events need to be defined by the user. The user-written function get-external-events returns all the events that the external code has collected since the last time get-external-events was called; the user-written function process-external-events! handles the events on the Scheme side.

When the Scheme side only waits for one single event, there is no need for an event loop and an permanent event identifier. Then, new-external-event is more convenient to use:

(call-with-values
  (lambda () (new-external-event))
  (lambda (uid condvar)
    (spawn-external-thread uid)
    (wait-for-external-event condvar)
    (unregister-external-event-uid! uid)
    ...))

Here, new-external-event returns a fresh event identifier and a fresh condition variable. The event identifier is passed to spawn-external-thread and the condition variable is used to wait for the occurrence of the external event.

External code uses s48_note_external_event to push the fact that an external event occurred into the main event loop, then the Scheme code needs to pull the actual event data from external code (in this example with get-external-events). The user-written function spawn-external-thread runs the external code that informs the Scheme side about the occurrence of external events. The event identifier is passed as an argument. The external-event-related parts of the implementation of spawn-external-thread in external code could look like this:

s48_ref_t
spawn_external_thread(s48_call_t call, s48_ref_t sch_event_uid) {
  ...
  s48_note_external_event(s48_extract_long_2(call, sch_event_uid));
  ...
}

The event identifier is extracted from its Scheme representation and used to inform the Scheme side about an occurrence of this specific event type.

8.11  Unsafe functions and macros

All of the C procedures and macros described above check that their arguments have the appropriate types and that indexes are in range. The following procedures and macros are identical to those described above, except that they do not perform type and range checks. They are provided for the purpose of writing more efficient code; their general use is not recommended.

  • long s48_unsafe_extract_char_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_unsafe_enter_char_2(s48_call_t, long)

  • long s48_unsafe_extract_integer_2(s48_call_t, s48_ref_t)

  • long s48_unsafe_extract_double_2(s48_call_t, s48_ref_t)

  • long s48_unsafe_extract_fixnum_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_unsafe_enter_fixnum_2(s48_call_t, long)

  • s48_ref_t s48_unsafe_car_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_unsafe_cdr_2(s48_call_t, s48_ref_t)

  • void s48_unsafe_set_car_2(s48_call_t, s48_ref_t, s48_ref_t)

  • void s48_unsafe_set_cdr_2(s48_call_t, s48_ref_t, s48_ref_t)

  • long s48_unsafe_vector_length_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_unsafe_vector_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_unsafe_vector_set_2(s48_call_t, s48_ref_t, long, s48_ref_t)

  • long s48_unsafe_string_length_2(s48_call_t, s48_ref_t)

  • char s48_unsafe_string_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_unsafe_string_set_2(s48_call_t, s48_ref_t, long, char)

  • s48_ref_t s48_unsafe_symbol_to_string_2(s48_call_t, s48_ref_t)

  • char * s48_unsafe_extract_byte_vector_2(s48_call_t, s48_ref_t)

  • long s48_unsafe_byte_vector_length_2(s48_call_t, s48_ref_t)

  • char s48_unsafe_byte_vector_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_unsafe_byte_vector_set_2(s48_call_t, s48_ref_t, long, int)

Additionally to not performing type checks, the pointer returned by s48_unsafe_extract_byte_vector_2 will likely become invalid when a garbage collection occurs. See section8.7.3 on how the interface deals with byte vectors in a proper way.

  • s48_ref_t s48_unsafe_shared_binding_ref_2(s48_call_t, s48_ref_t s_b)

  • int s48_unsafe_shared_binding_p_2(s48_call_t, x)

  • int s48_unsafe_shared_binding_is_import_p_2(s48_call_t, s48_ref_t s_b)

  • s48_ref_t s48_unsafe_shared_binding_name_2(s48_call_t, s48_ref_t s_b)

  • void s48_unsafe_shared_binding_set_2(s48_call_t, s48_ref_t s_b, s48_ref_t value)

  • s48_ref_t s48_unsafe_record_type_2(s48_call_t, s48_ref_t)

  • s48_ref_t s48_unsafe_record_ref_2(s48_call_t, s48_ref_t, long)

  • void s48_unsafe_record_set_2(s48_call_t, s48_ref_t, long, s48_ref_t)

  • type s48_unsafe_extract_value_2(s48_call_t, s48_ref_t, type)

  • type * s48_unsafe_extract_value_pointer_2(s48_call_t, s48_ref_t, type)

  • void s48_unsafe_set_value_2(s48_call_t, s48_ref_t, type, value)

8.12  Converting external code to the new foreign-function interface

It is straightforward to convert external code from the old foreign-function interface to the new foreign-function interface:

  • Converting functions:

    • Add s48_call call as a first argument to every function prototype that returns or accepts a s48_value.

    • Replace every s48_value type in the function prototype and the body with s48_ref_t.

    • Add call as the first argument to every function call that returns or accepts a Scheme object.

    • Remove all the GCPROTECT-related code (i.e. GCPROTECT and UNPROTECT).

  • Converting global (static) variables:

    • Replace s48_value type of the global variable with s48_ref_t, initialize these variables with NULL.

    • Set a real Scheme object in the initialization function of your code with one of these alternatives:

      • Use s48_make_global_ref to convert a s48_value to a global reference. For details and an example see section 8.7.1.

      • Use s48_local_to_global_ref to convert a local reference object to a global one.

      • If your global variable is supposed to hold a shared binding (e.g. an record type binding), you can use s48_get_imported_binding_2 that returns a global reference.

    • Replace S48_GC_PROTECT_GLOBAL with s48_local_to_global_ref to convert a local reference object to a global one.

    • Use s48_free_global_ref to cleanup global references when appropriate.

If you add #define NO_OLD_FFI 1 just above #include <scheme48.h> in your source code file, it will hide all the macros and prototype definitions of the old foreign-function interface. That way you can make sure that you are only using the new interface and the C compiler will remind you if you don't.

scheme48-1.9/doc/html/manual.html000644 004306 005702 00000007357 12074535600 017712 0ustar00sperberPUStaff000000 000000 The Incomplete Scheme 48 Reference Manual for release 1.9

The Incomplete Scheme 48 Reference Manual for release 1.9


 

Richard Kelsey Jonathan Rees Mike Sperber Marcus Crestani Robert Ransom Roderic Morris Marcel Turino Martin Gasbichler


A line may take us hours, yet if it does not seem a moment's thought
All our stitching and unstitching has been as nought.
                                                  Yeats
Adam's Curse

Last modified: Sunday, December 30th, 2012 4:44:02pm MET-1MST-2,M3.5.0,M10.5.0
scheme48-1.9/doc/html/manual-Z-S.css000644 004306 005702 00000017267 12074535603 020151 0ustar00sperberPUStaff000000 000000 body { color: black; /* background-color: #e5e5e5;*/ background-color: #ffffff; /*background-color: beige;*/ margin-top: 2em; margin-bottom: 2em; /* margin-left: 8%; margin-right: 8%; */ } @media screen { body { margin-left: 8%; margin-right: 8%; } } @media print { body { text-align: justify; } } @media print { a:link, a:visited { text-decoration: none; color: black; } } /* @media print { p { text-indent: 2em; margin-top: 1ex; margin-bottom: 0; } } */ h1,h2,h3,h4,h5,h6 { margin-top: .8em; margin-bottom: .2em; /* ?? */ } .title { font-size: 200%; font-weight: normal; margin-top: 2.8em; text-align: center; } .partheading { font-size: 100%; } .chapterheading { font-size: 100%; } .beginchapter,.beginsection { font-family: sans-serif; } .beginchapter { margin-top: 1.8em; font-size: 150%; } .beginsection { margin-top: 1.8em; font-size: 110%; } .tiny { font-size: 40%; } .scriptsize { font-size: 60%; } .footnotesize { font-size: 75%; } .small { font-size: 90%; } .normalsize { font-size: 100%; } .large { font-size: 120%; } .largecap { font-size: 150%; } .largeup { font-size: 200%; } .huge { font-size: 300%; } .hugecap { font-size: 350%; } p.noindent { text-indent: 0; margin-top: 0; } p.nopadding { margin-top: 0; } pre { overflow: auto; margin-left: 2em; background-color: #f5f5f5; } blockquote { background-color: #f0e0e0; margin-top: 2pt; margin-bottom: 2pt; margin-left: 2em; } .smallskip { margin-top: 2pt; margin-bottom: 2pt; min-height: 4pt; } .medskip { margin-top: 3pt; margin-bottom: 3pt; min-height: 7pt; /*margin-top: 1.6em; margin-bottom: 2.4em; margin-top: 1em; margin-bottom: 1.5em; */ /* top and bottom have to be different so successive \...skips cause more spacing? */ } .bigskip { margin-top: 4pt; margin-bottom: 4pt; min-height: 13pt; /*margin-top: 2.8em; margin-bottom: 3.4em; margin-top: 2.4em; margin-bottom: 1.6em; */ } ol { list-style-type: decimal; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } ol ol ol ol { list-style-type: upper-alpha; } tt i { font-family: serif; } .verbatim em { font-family: serif; } /* .verbatim { color: #4d0000; } */ .scheme em { color: black; font-family: serif; } .scheme {color: #993333} /* background punctuation */ .scheme .selfeval {color: #006600} .scheme .keyword {color: #660000; font-weight: bold} .scheme .builtin {color: #660000} .scheme .global {color: #660066} .scheme .variable {color: #000066} .scheme .comment {color: #006666; font-style: oblique} .schemeresponse { color: #006600; } a:hover { text-decoration: none; background-color: yellow; } .navigation { color: #993300; text-align: right; font-size: medium; font-style: italic; } @media print { .navigation { display: none; } } .disable { /* color: #e5e5e5; */ color: gray; } .smallcaps { font-size: 75%; } .smallprint { color: gray; font-size: 75%; text-align: right; } /* .smallprint hr { text-align: left; width: 40%; } */ .footnoterule { text-align: left; width: 40%; } @media print { .footnoterule { margin-top: 2em; } } .colophon { color: gray; font-size: 80%; font-style: italic; text-align: right; margin-top: 1em; } @media print { .colophon .advertisement { display: none; } } .colophon a { color: gray; text-decoration: none; } body { color: black; /* background-color: #e5e5e5;*/ background-color: #ffffff; /*background-color: beige;*/ margin-top: 2em; margin-left: 8%; margin-right: 8%; } h1,h2,h3,h4,h5,h6 { margin-top: .5em; } .partheading { font-size: 100%; } .chapterheading { font-size: 100%; } pre { margin-left: 2em; } ol { list-style-type: decimal; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } ol ol ol ol { list-style-type: upper-alpha; } .scheme { color: brown; } .scheme .keyword { color: #990000; font-weight: bold; } .scheme .builtin { color: #990000; } .scheme .variable { color: navy; } .scheme .global { color: purple; } .scheme .selfeval { color: green; } .scheme .comment { color: teal; } .schemeresponse { color: green; } .navigation { color: red; text-align: right; font-style: italic; } .disable { /* color: #e5e5e5; */ color: gray; } .smallcaps { font-size: 75%; } .smallprint { color: gray; font-size: 75%; text-align: right; } .smallprint hr { text-align: left; width: 40%; } scheme48-1.9/doc/html/manual-Z-G-D-1.gif000644 004306 005702 00000000060 12070057450 020403 0ustar00sperberPUStaff000000 000000 GIF89a€ÿÿÿ!ù,‚©¦V;scheme48-1.9/doc/html/unicode-Z-G-1.gif000644 004306 005702 00000000356 12070057451 020404 0ustar00sperberPUStaff000000 000000 GIF89a¤ €ÿÿÿ!ù,¤ ÅDb§«Éb„NNdáÛ®m*-İø‰¥æa¡:Y‰ #Ÿ*¿Ï<Õ}â]V+°T¹Ș e왘:Ú®IÒHS?¹4j¡ÎYy†=É¿5hº$¹ĞCôøV¥Íß\œÒ]äe׆xwö…GfÂs”WF)2ıçH唈%ɹXyWƒÈBTX Ú‰Év”ãÙ·ÚhY*—÷xz*Û•kvû KÊjl³ùgZ,&k( Ælİ µu½ Íı .T;scheme48-1.9/doc/src/bibliography.tex000644 004306 005702 00000005147 12067075540 020566 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber \begin{thebibliography}{10} \addtocounter{chapter}{1} \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}{Bibliography}} \bibitem{POSIX} Information technology -- Portable Operating System Interface (POSIX). \newblock ISO/IEC 9945-1 ANSI/IEEE Std 1003.1. \newblock 2nd Ed., 1996. \bibitem{Clinger-Rees:Macros} William Clinger and Jonathan~Rees. \newblock Macros that work. \newblock {\em Principles of Programming Languages}, January 1991. \bibitem{Clinger-Rees:R4RS} William Clinger and Jonathan~Rees (editors). \newblock Revised${}^4$ report on the algorithmic language {S}cheme. \newblock {\em LISP Pointers} IV(3):1--55, July-September 1991. \bibitem{Curtis-Rauen:Modules} Pavel Curtis and James Rauen. \newblock A module system for Scheme. \newblock {\em ACM Conference on Lisp and Functional Programming,} pages 13--19, 1990. \bibitem{Kelsey-Rees:Scheme48} Richard~Kelsey and Jonathan~Rees. \newblock A Tractable {Scheme} Implementation. \newblock {\em Lisp and Symbolic Computation} 7:315--335 1994. \bibitem{R5RS} Richard Kelsey, Will Clinger, Jonathan Rees (editors). \newblock Revised$^5$ Report on the Algorithmic Language Scheme. \newblock {\em Higher-Order and Symbolic Computation,} Vol. 11, No. 1, September, 1998. \newblock and {\em ACM SIGPLAN Notices}, Vol. 33, No. 9, October, 1998. \bibitem{MacQueen:Modules} David MacQueen. \newblock Modules for Standard ML. \newblock {\em ACM Conference on Lisp and Functional Programming,} 1984. \bibitem{Rees-Donald:Program} Jonathan Rees and Bruce Donald. \newblock Program mobile robots in Scheme. \newblock {\em International Conference on Robotics and Automation,} IEEE, 1992. \bibitem{Reppy:CML-book} John H. Reppy. \newblock Concurrent Programming in ML. \newblock Cambridge University Press, 1999. \bibitem{Sheldon-Gifford:Static} Mark A.~Sheldon and David K.~Gifford. \newblock Static dependent types for first-class modules. \newblock {\em ACM Conference on Lisp and Functional Programming,} pages 20--29, 1990. \bibitem{Shivers:Scsh-manual} Olin Shivers, Brian D.~Carlstrom, Martin Gasbichler and Mike Sperber. \newblock Scsh Reference Manual, scsh release 0.6.6. \newblock Available at URL \texttt{http://www.scsh.net/}. \bibitem{Shivers:Scsh96} Olin Shivers. \newblock A universal scripting framework, or Lambda: the ultimate ``little language''. \newblock {\em Concurrency and Parallelism, Programming, Networking, and Security,} pages 254--265, Springer 1996. \newblock Joxan Jaffar and Roland H.~C.~Yap, editors. \end{thebibliography} scheme48-1.9/doc/src/code.tex000644 004306 005702 00000006504 12067075540 017023 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees % Latex Macros for Lisp code in text. % Based on macros found in C. Rich's library. \makeatletter % \vobeyspaces turns all spaces into non-breakable spaces. % Note: this is like \@vobeyspaces except without spurious space in defn. {\catcode`\ =\active\gdef\vobeyspaces{\catcode`\ =\active\let =\@xobeysp}} % \def\vobeytabs turns all tabs into 8 non-breakable spaces {\catcode`\^^I=\active\gdef\vobeytabs{\catcode`\^^I=\active\let^^I=\xvobeytabs}} \def\xvobeytabs{\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp\@xobeysp} % \vobeylines turns all cr's into non-breakable \par's {\catcode`\^^M=\active\gdef\vobeylines{\catcode`\^^M=\active\let^^M=\xvobeylines}} \def\xvobeylines{\par\penalty10000} % \obeycrsp turns cr's into non-breakable spaces {\catcode`\^^M=\active\gdef\obeycrsp{\catcode`\^^M=\active\let^^M=\@xobeysp}} %% \@noligs prevents ?` and !` from being treated as ligatures %% added 19 April 86 [copied from Latex sources] \begingroup \catcode``=13 \gdef\@noligs{\let`=\@lquote} \endgroup % Set up code environment, in which most of the common special characters % appearing in code are treated verbatim, namely: _ # & ^ $ ~ @ " % % *** JAR NEEDED $ AND _ IN SOME CODE *** % Note: \ { } are still enabled so that macros can be called in this % environment. Use \\, \{ and \} to use these characters verbatim % in this environment. % Note: this environment allows no breaking of lines whatsoever; not % at spaces or hypens. To arrange for a break use the standard \- macro, % or the \= macro which breaks, but inserts nothing. This is useful, % for example for allowing hypenated identifiers to be broken, e.g. % FOO-\=BAR. \def\setupcode{\parsep=0pt\parindent=0pt \tt\frenchspacing\catcode``=13\@noligs% \def\\{\char`\\}% \@makeother\#\@makeother\&\@makeother\^%\@makeother\_\@makeother\$% \@makeother\`\@makeother\'% \@makeother\~\@makeother\@\@makeother\"\@makeother\%\vobeytabs\vobeyspaces} % Code environment as described above. Note that blank lines are % not preserved, and lines are not kept on one page. Code is % indented by the same amount as quotes. % Note: to increase left margin, use \leftmargini=1in. % was {\list{}{\parsep=0pt}\item[]\setupcode\obeylines}% % then {\list{\parsep=0pt\listparindent=0pt\leftmargin=0pt}{}\item[]\setupcode% \newenvironment{bigcode}% {\list{}{\parsep=0pt\leftmargin=0pt\labelwidth=0pt\itemindent=0pt% \listparindent=0pt}\item[]\setupcode% \obeylines}% {\endlist} % Code is just like bigcode, but everything inside is kept on one page % Note: This actually works by setting a huge penalty for breaking % between lines of code. % was {\list{}{\parsep=0pt}\item[]\setupcode\vobeylines}% \newenvironment{code}% {\list{}{\parsep=0pt\leftmargin=0pt\labelwidth=0pt\itemindent=0pt% \listparindent=0pt}\item[]\setupcode% \vobeylines}% {\endlist} % Reasonable separation between lines of code \newcommand{\codeskip}{\penalty0\vspace{2ex}} % \cd is used to build a code environment in the middle of text. % Note: only difference from display code is that cr's are taken % as unbreakable spaces instead of \par's. \newcommand{\cd}{\begingroup\setupcode\obeycrsp\startcode} \newcommand{\startcode}[1]{#1\endgroup} %\setbox0\hbox{\@xobeysp}\hline{43\wd0} \makeatother scheme48-1.9/doc/src/command.tex000644 004306 005702 00000116174 12067075540 017534 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: % Richard Kelsey, Jonathan Rees, Robert Ransom, Mike Sperber, Marcel % Turino \chapter{Command processor} \label{chapter:command-processor} This chapter details Scheme~48's command processor, which incorporates both a read-eval-print loop and an interactive debugger. At the \code{>} prompt, you can type either a Scheme form (expression or definition) or a command beginning with a comma. In inspection mode (see section~\ref{inspector}) the prompt changes to \code{:} and commands no longer need to be preceded by a comma; input beginning with a letter or digit is assumed to be a command, not an expression. In inspection mode the command processor prints out a menu of selectable components for the current object of interest. \section{Current focus value and {\tt \#\#}} The command processor keeps track of a current {\em focus value}. This value is normally the last value returned by a command. If a command returns multiple values the focus object is a list of the values. The focus value is not changed if a command returns no values or a distinguished `unspecific' value. Examples of forms that return this unspecific value are definitions, uses of \code{set!}, and \code{(if \#f 0)}. It prints as \code{\#\{Unspecific\}}. The reader used by the command processor reads \code{\#\#} as a special expression that evaluates to the current focus object. \begin{example} > (list 'a 'b) '(a b) > (car ##) 'a > (symbol->string ##) "a" > (if #f 0) #\{Unspecific\} > ## "a" > \end{example} \section{Command levels} If an error, keyboard interrupt, or other breakpoint occurs, or the \code{,push} command is used, the command processor invokes a recursive copy of itself, preserving the dynamic state of the program when the breakpoint occurred. The recursive invocation creates a new {\em command level}. The command levels form a stack with the current level at the top. The command prompt indicates the number of stopped levels below the current one: \code{>} or \code{:} for the base level and \code{\cvar{n}>} or \code{\cvar{n}:} for all other levels, where \cvar{n} is the command-level nesting depth. The \code{levels} setting described below can be used to disable the automatic pushing of new levels. The command processor's evaluation package and the value of the current focus value are local to each command level. They are preserved when a new level is pushed and restored when it is discarded. The settings of all other settings are shared by all command levels. \begin{description} \item $\langle{}$eof$\rangle{}$\\ Discards the current command level and resumes running the level down. $\langle{}$eof$\rangle{}$ is usually control-\code{D} at a Unix shell or control-\code{C} control-\code{D} using the Emacs \code{cmuscheme48} library. \item \code{,pop}\\ The same as $\langle{}$eof$\rangle{}$. \item \code{,proceed [\cvar{exp} \ldots}]\\ Proceed after an interrupt or error, resuming the next command level down, delivering the values of \cvar{exp~\ldots} to the continuation. Interrupt continuations discard any returned values. \code{,Pop} and \code{,proceed} have the same effect after an interrupt but behave differently after errors. \code{,Proceed} restarts the erroneous computation from the point where the error occurred (although not all errors are proceedable) while \code{,pop} (and $\langle{}$eof$\rangle{}$) discards it and prompts for a new command. \item \code{,push}\\ Pushes a new command level on above the current one. This is useful if the \code{levels} setting has been used to disable the automatic pushing of new levels for errors and interrupts. \item \code{,reset [\cvar{number}]}\\ Pops down to a given level and restarts that level. \cvar{Number} defaults to zero, \code{,reset} restarts the command processor, discarding all existing levels. \end{description} Whenever moving to an existing level, either by sending an $\langle{}$eof$\rangle{}$ or by using \code{,reset} or the other commands listed above, the command processor runs all of the \code{dynamic-wind} ``after'' thunks belonging to stopped computations on the discarded level(s). \section{Logistical commands} \begin{description} \item \code{,load \cvar{filename \ldots}}\\ Loads the named Scheme source file(s). Easier to type than \code{(load "\cvar{filename}")} because you don't have to shift to type the parentheses or quote marks. (However, it is still possible to specify a filename as a Scheme string literal, with quote marks---you'll need this for filenames containing whitespace.) Also, it works in any package, unlike \code{(load "\cvar{filename}")}, which will work only in packages in which the variable \code{load} is defined appropriately. \item \code{,exit [\cvar{exp}]}\\ Exits back out to shell (or executive or whatever invoked Scheme~48 in the first place). \cvar{Exp} should evaluate to an integer. The integer is returned to the calling program. The default value of \cvar{exp} is zero, which, on Unix, is generally interpreted as success. \end{description} \section{Module commands} \label{module-command-guide} There are many commands related to modules. Only the most commonly used module commands are described here; documentation for the rest can be found in section~\ref{module-commands}. There is also a brief description of modules, structures, and packages in section~\ref{module-guide} below. \begin{description} \item \code{,open \cvar{structure \ldots}}\\ Makes the bindings in the \cvar{structure}s visible in the current package. The packages associated with the \cvar{structure}s will be loaded if this has not already been done (the \code{ask-before-loading} setting can be used to disable the automatic loading of packages). \item \code{,config [\cvar{command}]}\\ Executes \cvar{command} in the \code{config} package, which includes the module configuration language. For example, use \begin{example} ,config ,load \cvar{filename} \end{example} to load a file containing module definitions. If no \cvar{command} is given, the \code{config} package becomes the execution package for future commands. \item \code{,user [\cvar{command}]} \\ This is similar to the {\tt ,config}. It moves to or executes a command in the user package (which is the default package when the \hack{} command processor starts). \end{description} \section{Debugging commands} \label{debug-commands} \begin{description} \item \code{,preview}\\ Somewhat like a backtrace, but because of tail recursion you see less than you might in debuggers for some other languages. The stack to display is chosen as follows: \begin{enumerate} \item If the current focus object is a continuation or a thread, then that continuation or thread's stack is displayed. \item Otherwise, if the current command level was initiated because of a breakpoint in the next level down, then the stack at that breakpoint is displayed. \item Otherwise, there is no stack to display and a message is printed to that effect. \end{enumerate} One line is printed out for each continuation on the chosen stack, going from top to bottom. \item \code{,run \cvar{exp}}\\ Evaluate \cvar{exp}, printing the result(s) and making them (or a list of them, if \cvar{exp} returns multiple results) the new focus object. The \code{,run} command is useful in inspection mode (see section~\ref{inspector} below) and when writing command programs (see section~\ref{command-programs} below). \item \code{,trace \cvar{name} \ldots}\\ Start tracing calls to the named procedure or procedures. With no arguments, displays all procedures currently traced. This affects the binding of \cvar{name}, not the behavior of the procedure that is its current value. \cvar{Name} is redefined to be a procedure that prints a message, calls the original value of \cvar{name}, prints another message, and finally passes along the value(s) returned by the original procedure. \item \code{,untrace \cvar{name} \ldots}\\ Stop tracing calls to the named procedure or procedures. With no argument, stop tracing all calls to all procedures. \item \code{,condition}\\ The \code{,condition} command displays the condition object describing the error or interrupt that initiated the current command level. The condition object becomes the current focus value. This is particularly useful in conjunction with the inspector. For example, if a procedure is passed the wrong number of arguments, do \code{,condition} followed by \code{,inspect} to inspect the procedure and its arguments. \item \code{,bound?\ \cvar{name}}\\ Display the binding of \cvar{name}, if there is one, and otherwise prints `\code{Not bound}'. \item \code{,expand \cvar{form}} Show macro expansion of \cvar{form}, if any, fully expanding all macros in \cvar{form}. \item \code{,where \cvar{procedure}}\\ Display name of file containing \cvar{procedure}'s source code. \end{description} \section{Profiling commands} \label{profiling-commands} After loading the \code{profile-commands} structure via % \begin{example} ,load-package profile-commands \end{example} % Scheme~48 provides a basic profiler, with support for flat and call-graph profiles. In addition to call- and runtimes the heap memory usage is estimated as well. By adding the byte-code optimizer \code{profiler-instrumentation} to the definition of a structure via a clause % \begin{example} (optimize profiler-instrumentation) \end{example} % in the structure definition, code will by instrumented with calls to the profiler. The call-times to instrumented code can then be measured exactly. Without instrumentation, the profiler is solely based on sampling and therefore has only limited accuracy. Any evaluation can be profiled with the following command: \begin{description} \item \code{,profile \cvar{command}}\\ Evaluate \cvar{command} under the profiler, printing the profiling result and making the return value(s) of \cvar{command} the new focus object. \end{description} The output of the profiler is explained on the basis of the following piece of senseless code: \begin{example} (define (c x) (if (= x 0) 0 (+ 1 (c (- x 1))))) (define (b x) (let ((y (- x 1))) (if (> y 0) (begin (c y) (a y) (+ 1 (a y))) 0))) (define (a x) (let ((y (- x 1))) (if (> y 0) (begin (c y) (b y) (+ 1 (b y))) 0))) (define (main x) (+ 1 (a x))) \end{example} The profiler produces the following output: \begin{example} > ,profile (main 21) ** Samples: 60 (approx. one per 40ms) ** Interrupt time: 50ms ** Real run time: 2430ms ** Total memory: 22k ** GC runs: 0 ** Flat result (times in ms): time cumu self mem calls ms/call name 61.66% 1498 1498 2k 37+51 17 c in "x.scm" 25.0% 2430 608 10k 436 6 b in "x.scm" 13.33% 2430 324 10k 442 5 a in "x.scm" 0.0% 2430 0 0k 1 2430 main in "x.scm" ** Tree result (times in ms): i time self child mem calls name 0 100.0% 0 2430 0k 0 [0] 0 2430 0k 1/1 main in "x.scm" [1] ========================================================= 441/442 b in "x.scm" [3] 324 891 10k 1/442 main in "x.scm" [1] 1 100.0% 324 891 10k 442 a in "x.scm" [2] 891 0 1k 22/37 c in "x.scm" [4] 436/436 b in "x.scm" [3] ========================================================= 436/436 a in "x.scm" [2] 2 100.0% 608 608 10k 436 b in "x.scm" [3] 608 0 1k 15/37 c in "x.scm" [4] 441/442 a in "x.scm" [2] ========================================================= 0 2430 0k 1/1 [0] 3 100.0% 0 2430 0k 1 main in "x.scm" [1] 324 891 10k 1/442 a in "x.scm" [2] ========================================================= 608 0 1k 15/37 b in "x.scm" [3] 891 0 1k 22/37 a in "x.scm" [2] 4 61.66% 1498 0 2k 37+51 c in "x.scm" [4] ========================================================= 932 1498 20k 1/1 main in "x.scm" [1] 0 100.0% 932 1498 20k 1+877 324 891 10k 441 a in "x.scm" [2] 608 608 10k 436 b in "x.scm" [3] 0 0 2k 37/37 c in "x.scm" [4] \end{example} The formatting of the output is based on the output of GNU gprof \footnote{part of the GNU Binary Utilities: http://www.gnu.org/software/binutils/}. First, general information about the profiling is shown: \begin{itemize} \item \code{samples}: total number of samples taken and the average time between two samples \item \code{interrupt time}: theoretical interrupt time, the time between two samples \item \code{real run time}: the total run time of the evaluation, simple measurement from the beginning to the end of the evaluation \item \code{total memory}: the total amount of memory used by the program, here in kilobytes \item \code{GC runs}: the number of times the garbage collector was running while evaluating \end{itemize} The flat profile gives overall statistics for each procedure in the program: \begin{itemize} \item \code{time}: percentage of time the procedure has in the program (based on ``\code{self}'') \item \code{cumu}: total cumulative time the procedure was running \item \code{self}: total time the procedure was running itself (without children) \item \code{mem}: approximated memory usage of the procedure \item \code{calls}: the number of non-recursive calls to the procedure. Recursive calls are displayed after an optionally appended "+" to former number (see procedure \code{c} in example output above). \item \code{ms/call}: estimate of the time per call (with children), based on non-recursive calls and ``\code{cumu}''. \item \code{name}: the name of the procedure and the file it is defined in \end{itemize} The tree result displays profiling information depending on the caller of a particular procedure. As in gprof output, for each procedure there is an \textit{entry}. Entries are separated by lines of \code{=}s. Each entry displays the callers (indented), the procedure itself and the procedure called (indented). The meaning of the fields depends on the type of the entry, for example: \begin{example} i time self child mem calls name 324 891 10k 1/442 main [1] 1 100.0% 324 891 10k 442 a [2] 891 0 1k 22/37 c [4] \end{example} Every procedure has a unique index number \code{i} (here ``1''), based on the position in the call-graph. It is used to quickly find the corresponding entry. The number is appended to the procedure name (in brackets). The meaning of the ``cycle'' suffix is explained below. Callers (here \code{main}): \begin{itemize} \item \code{self}: time spent directly in \code{a} when called by \code{main} \item \code{child}: time spent in children of \code{a} when called by \code{main} \item \code{mem}: memory usage of \code{a} when called by \code{main} \item \code{calls}: two numbers: number of calls to \code{a} from \code{main} and total number of non-recursive calls to \code{a} \end{itemize} Primary line (here \code{a}): \begin{itemize} \item \code{time}: total percentage of time \code{a} was running \item \code{self}: total time spent directly in \code{a} \item \code{child}: total time spent in children of \code{a} \item \code{mem}: total memory usage of \code{a} \item \code{calls}: the total number of non-recursive calls to \code{a}. Recursive calls are displayed after an optional \code{+}. \end{itemize} Called (here \code{c}): \begin{itemize} \item \code{self}: time spent directly in \code{c} when called by \code{a} \item \code{child}: time spent in children of \code{c} when called by \code{a} \item \code{mem}: memory usage of \code{c} when called by \code{a} \item \code{calls}: two numbers: number of calls to \code{c} from \code{a} and total number of non-recursive calls to \code{c} \end{itemize} A special treatment is needed for mutual-recursive procedures. In the example, \code{a} calls \code{b} and \code{b} calls \code{a}. This is called a \textit{cycle}. If \code{a} would call another procedure \code{d} and \code{d} would call \code{a}, all three procedures form a cycle. Cycles have a separate entry in the call graph. This entry consists of the callers into the cycle, the primary line of the cycle, the member procedures of the cycle and the external procedures called by the cycle: \begin{example} 932 1498 20k 1/1 main [1] 0 100.0% 932 1498 20k 1+877 324 891 10k 441 a [2] 608 608 10k 436 b [3] 0 0 2k 37/37 c [4] \end{example} Callers (here \code{main}): \begin{itemize} \item the meaning of the fields are the same as above. The member procedures of the cycle are seen as a whole. \end{itemize} Primary line: \begin{itemize} \item \code{time}: total percentage of time any procedure of the cycle was running \item \code{self}: total time spent directly in a procedure of the cycle \item \code{child}: total time spent in external children of \code{a} \item \code{mem}: sum of memory usage of all cycle member procedures \item \code{calls}: the total number of external calls to the \code{cycle} and the total number of calls in the cycle internally \end{itemize} Member procedures: \begin{itemize} \item the meaning of the fields are the same as above, except\ldots \item \code{calls}: the number of calls to the member procedure from within the cycle \end{itemize} External procedures (here \code{c}): \begin{itemize} \item the meaning of the fields are the same as with the member procedures, except\ldots \item \code{calls}: the number of calls to the external procedure from the cycle and the total number of non-recursive calls to the external procedure \end{itemize} In the current implementation, there are some issues that need to be considered: in the default configuration, samples are taken every 50 milliseconds. Procedures with a by-call run time shorter than the interrupt time are likely to be profiled inaccurately or may not be seen at all, if they have not been instrumented. The default interrupt time can be set with the \code{profiler-interrupt-time} command processor setting, see \ref{settings}. For example, % \begin{example} ,set profiler-interrupt-time 200 \end{example} % sets the default profiler sampling interrupt time to 200ms. Because the interrupt is shared with the thread system, profiling may cause performance issues with multi-threaded programs. Also, programs with deep recursion (resulting in large continuations) can cause the profiler to use a significant percentage of the total run time. By default, call times are measured by the sampling process. When code had been instrumented, call times of those procedures will be measured exactly. When only instrumented code should be considered in the output of the profiler, the command processor setting \code{profiler-measure-noninstr} can be set to \code{off}. Scheme~48 optimizes tail calls. Thus, the profiler cannot ``see'' tail calls and in some situations, the output of the profiler may show that procedures directly call their ``grandchildren''. \subsection{How the profiler works} The profiler is based on taking samples of the current stack of continuations, the {\it call-stack}. Therefore it schedules the alarm interrupt at a regular interval specified by the \code{profiler-interrupt-time} command processor setting. Because the thread system uses the alarm interrupt as well, the profiler interrupt handler calls the handler of the thread system after processing the sample. The profiler interrupt handler first captures the current continuation and follows the continuation-stack down to the continuation of the \code{profile-thunk} procedure, which called the thunk to be profiled. Each continuation with the corresponding code template is stored in a stack of \code{stackentry} records. This \code{*cur-stack*} is compared from bottom to top with the \code{*last-stack*}, the stack captured while the prior sampling interrupt. The statistics gathered are stored in \code{profinfo} records. For each stack-entry in the \code{*cur-stack*}, several possibilities exist in conjunction to the entry at the same depth in the \code{*last-stack*}: \begin{itemize} \item there is no such entry: the continuation must be the result of a new call \item both entries are the same continuation: nothing changed, the procedure is still running \item entries are not the same continuation: the following entries up in the stack must have changed. If the templates of the current entries are the same, the continuation counts as the still same call to the procedure (but at another expression in the procedure). A such situation only counts as a new call if the continuation object has changed, but the continuation program-counter, arguments and the template stayed the same. \end{itemize} As we ascend in the call-stack, changes in the lower levels indicate that all entries above have to be new calls. This way, the profiler gathers information about how often a template is called by another template. Additionally, every time a procedure is seen, we record this ``occurrence''. If the procedure is a the top of the stack, it is currently running. Based on these numbers, the average interrupt time and the number of calls, we can estimate the self and child times. While running, the profiler collects information about heap memory usage as well. After comparing the current with the last stack, the profiler knows which procedures finished, which procedures are new and which procedure called the new procedures. This information is used to distribute the difference in heap memory usage between the prior and the current sample. The profiler uses the \code{memory-status} primitive for retrieving available heap space and the number of garbage collector runs (\code{gc-count}). Difference in used memory between two samples is distributed by the following principles: \begin{itemize} \item if \code{gc-count} increased, distribution cannot be done \item if the same continuation is still at top, credit its template with all used memory between the two samplings \item if there are stackentry-templates gone or new, distribute the used memory {\it equally} between them: \begin{itemize} \item gone templates could have used some memory before ``returning'' \item new templates could have used some memory while running \item the caller of new templates could have used some memory between the calling of gone and new procedures \end{itemize} \end{itemize} The byte-code optimizer \code{profiler-instrumentation} adds a call to the ``profile-count'' procedure of the profiler structure. This procedure is responsible for the exact call-times measurement. After collection of the data, procedures are numbered and cycles are detected by ascending in the call tree. Time is being propagated from top to bottom, remembering self and child times. Most of the time, cycles are being considered as one procedure. \section{Settings} \label{settings} There are a number of settings that control the behavior of the command processor; most of them are booleans. They can be set using the \code{,set} and \code{,unset} commands. \begin{description} \item \code{,set \cvar{setting} [on | off | literal | ?]}\\ This sets the value of setting \cvar{setting}. For a boolean setting, the second argument must be \code{on} or \code{off}; it then defaults to \code{on}. Otherwise, the value must be a literal, typically a positive number. If the second argument is \code{?} the value of \cvar{setting} is is displayed and not changed. Doing \code{,set ?} will display a list of the setting and their current values. \item \code{,unset \cvar{setting}}\\ \code{,unset \cvar{setting}} is the same as \code{,set \cvar{setting} off}. \end{description} The settings are as follows: \begin{description} \item \code{batch} (boolean)\\ In `batch mode' any error or interrupt that comes up will cause Scheme~48 to exit immediately with a non-zero exit status. Also, the command processor doesn't print prompts. Batch mode is off by default. % JAR says: disable levels by default?? \item \code{levels} (boolean)\\ Enables or disables the automatic pushing of a new command level when an error, interrupt, or other breakpoint occurs. When enabled (the default), breakpoints push a new command level, and $\langle{}$eof$\rangle{}$ (see above) or \code{,reset} is required to return to top level. The effects of pushed command levels include: \begin{itemize} \item a longer prompt \item retention of the continuation in effect at the point of error \item confusion among some newcomers \end{itemize} With \code{levels} disabled one must issue a \code{,push} command immediately following an error in order to retain the error continuation for debugging purposes; otherwise the continuation is lost as soon as the focus object changes. If you don't know anything about the available debugging tools, then \code{levels} might as well be disabled. \item \code{break-on-warnings} (boolean)\\ Enter a new command level when a warning is produced, just as when an error occurs. Normally warnings only result in a displayed message and the program does not stop executing. \item \code{ask-before-loading} (boolean)\\ If on, the system will ask before loading modules that are arguments to the \code{,open} command. \code{Ask-before-loading} is off by default. \begin{example} > ,set ask-before-loading will ask before loading modules > ,open random Load structure random (y/n)? y > \end{example} \item \code{load-noisily} (boolean)\\ When on, the system will print out the names of modules and files as they are loaded. \code{Load-noisily} is off by default. \begin{example} > ,set load-noisily will notify when loading modules and files > ,open random [random /usr/local/lib/scheme48/big/random.scm] > \end{example} \item \code{inline-values} (boolean)\\ This controls whether or not the compiler is allowed to substitute variables' values in-line. When \code{inline-values} mode is on, some Scheme procedures will be substituted in-line; when it is off, none will. Section~\ref{section:performance} has more information. \item \code{inspector-menu-limit} (positive integer)\\ This controls how many items the displayed portion of the inspector menu contains at most. (See Section~\ref{inspector}.) \item \code{inspector-writing-depth} (positive integer)\\ This controls the maximum depth to which the inspector prints values. (See Section~\ref{inspector}.) \item \code{inspector-writing-length} (positive integer)\\ This controls the maximum length to which the inspector prints values. (See Section~\ref{inspector}.) \item \code{condition-writing-depth} (positive integer)\\ This controls the maximum depth to which conditions are printed. \item \code{condition-writing-length} (positive integer)\\ This controls the maximum length to which conditions are printed. \item \code{profiler-interrupt-time} (positive integer)\\ This controls the time between two profiler sampling interrupts (in milliseconds, see section \ref{profiling-commands}). \item \code{profiler-measure-noninstr} (boolean)\\ When this flag is enabled, call-times will be measured by the sampling process. When it is disabled, call-times will only be measured when the procedure has been instrumented (see section \ref{profiling-commands}). \item \code{trace-writing-length} (positive integer)\\ This controls the maximum length to which tracing prints procedure calls. \end{description} \section{Inspection mode} \label{inspector} There is a data inspector available via the \code{,inspect} and \code{,debug} commands. The inspector is particularly useful with procedures, continuations, and records. The command processor can be taken out of inspection mode by using the \code{q} command. When in inspection mode, input that begins with a letter or digit is read as a command, not as an expression. To see the value of a variable or number, do \code{(begin \cvar{exp})} or use the \code{,run \cvar{exp}} command. In inspection mode the command processor prints out a menu of selectable components for the current focus object. To inspect a particular component, just type the corresponding number in the menu. That component becomes the new focus object. For example: \begin{example} > ,inspect '(a (b c) d) (a (b c) d) [0] a [1] (b c) [2] d : 1 (b c) [0] b [1] c : \end{example} When a new focus object is selected the previous one is pushed onto a stack. You can pop the stack, reverting to the previous object, with the \code{u} command, or use the \code{stack} command to move to an earlier object. %\begin{description} %\item \code{stack}\\ % Prints the current stack out as a menu. % Selecting an item pops all higher values off of the stack and % makes that item the current focus value. %\end{description} % Commands useful when in inspection mode: \begin{itemize} \item\code{u} (up) pop object stack \item\code{m} (more) print more of a long menu \item\code{(\ldots)} evaluate a form and select result \item\code{q} quit \item\code{template} select a closure or continuation's template (Templates are the static components of procedures; these are found inside of procedures and continuations, and contain the quoted constants and top-level variables referred to by byte-compiled code.) \item\code{d} (down) move to the next continuation (current object must be a continuation) \item\code{menu} print the selection menu for the focus object \end{itemize} Multiple selection commands (\code{u}, \code{d}, and menu indexes) may be put on a single line. %\code{\#\#} is always the object currently being inspected. %After a \code{q} %command, %or an error in the inspector, \code{\#\#} is the last object that was being %inspected. All ordinary commands are available when in inspection mode. Similarly, the inspection commands can be used when not in inspection mode. For example: \begin{example} > (list 'a '(b c) 'd) '(a (b c) d) > ,1 '(b c) > ,menu [0] b [1] c > \end{example} If the current command level was initiated because of a breakpoint in the next level down, then \code{,debug} will invoke the inspector on the continuation at the point of the error. The \code{u} and \code{d} (up and down) commands then make the inspected-value stack look like a conventional stack debugger, with continuations playing the role of stack frames. \code{D} goes to older or deeper continuations (frames), and \code{u} goes back up to more recent ones. \section{Command programs} \label{command-programs} The \code{exec} package contains procedures that are used to execute the command processor's commands. A command \code{,\cvar{foo}} is executed by applying the value of the identifier \cvar{foo} in the \code{exec} package to the (suitably parsed) command arguments. \begin{description} \item \code{,exec [\cvar{command}]}\\ Evaluate \cvar{command} in the \code{exec} package. For example, use \begin{example} ,exec ,load \cvar{filename} \end{example} to load a file containing commands. If no \cvar{command} is given, the \code{exec} package becomes the execution package for future commands. \end{description} The required argument types are as follows: \begin{itemize} \item filenames should be strings \item other names and identifiers should be symbols \item expressions should be s-expressions \item commands (as for \code{,config} and \code{,exec} itself) should be lists of the form \code{(\cvar{command-name} \cvar{argument} \ldots)} where \cvar{command-name} is a symbol. \end{itemize} For example, the following two commands are equivalent: \begin{example} ,config ,load my-file.scm ,exec (config '(load "my-file.scm")) \end{example} The file \code{scheme/vm/load-vm.scm} in the source directory contains an example of an \code{exec} program. \section{Building images} \begin{description} \item \code{,dump \cvar{filename} [\cvar{identification}]}\\ Writes the current heap out to a file, which can then be run using the virtual machine. The new image file includes the command processor. If present, \cvar{identification} should be a string (written with double quotes); this string will be part of the greeting message as the image starts up. \item \code{,build \cvar{exp} \cvar{filename} [\cvar{option \ldots}]}\\ Like \code{,dump}, except that the image file contains the value of \cvar{exp}, which should be a procedure of one argument, instead of the command processor. When \cvar{filename} is resumed, that procedure will be invoked on the VM's \code{-a} arguments, which are passed as a list of OS strings (see section~\ref{os-strings}. The procedure should return an integer, which is returned to the program that invoked the VM. The command processor and debugging system are not included in the image (unless you go to some effort to preserve them, such as retaining a continuation). If \code{no-warnings} appears as an \cvar{option} after the file name, no warnings about undefined external bindings (see Section~\ref{sec:shared-bindings}) will be printed upon resuming the image. This is useful when the definitions of external bindings appear in shared objects that are only loaded after the resumption of the image. Doing \code{,flush} before building an image will reduce the amount of debugging information in the image, making for a smaller image file, but if an error occurs, the error message may be less helpful. Doing \code{,flush source maps} before loading any programs used in the image will make it still smaller. See section~\ref{resource-commands} for more information. \end{description} \section{Resource query and control} \label{resource-commands} \begin{description} \item \code{,time \cvar{exp}}\\ Measure execution time. \item \code{,collect}\\ Invoke the garbage collector. Ordinarily this happens automatically, but the command tells how much space is available before and after the collection. \item \code{,keep \cvar{kind}} \item \code{,flush \cvar{kind}}\\ These control the amount of debugging information retained after compiling procedures. This information can consume a fair amount of space. \cvar{kind} is one of the following: \begin{itemize} \item \code{maps} - environment maps (local variable names, for inspector) \item \code{source} - source code for continuations (displayed by inspector) \item \code{names} - procedure names (as displayed by \code{write} and in error messages) \item \code{files} - source file names \end{itemize} These commands refer to future compilations only, not to procedures that already exist. To have any effect, they must be done before programs are loaded. The default is to keep all four types. % JAR says: ,keep tabulate - puts debug data in a table that can be % independently flushed (how? -RK) or even written out and re-read later! % (how? -RK) \item \code{,flush}\\ The flush command with no argument deletes the database of names of initial procedures. Doing \code{,flush} before a \code{,build} or \code{,dump} will make the resulting image significantly smaller, but will compromise the information content of many error messages. \end{description} \section{Threads} \label{command-threads} Each command level has its own set of threads. These threads are suspended when a new level is entered and resumed when the owning level again becomes the current level. A thread that raises an error is not resumed unless explicitly restarted using the \code{,proceed} command. In addition to any threads spawned by the user, each level has a thread that runs the command processor on that level. A new command-processor thread is started if the current one dies or is terminated. When a command level is abandoned for a lower level, or when a level is restarted using \code{,reset}, all of the threads on that level are terminated and any \code{dynamic-wind} ``after'' thunks are run. The following commands are useful when debugging multithreaded programs: \begin{description} \item \code{,resume [\cvar{number}]}\\ Pops out to a given level and resumes running all threads at that level. \cvar{Number} defaults to zero. \item \code{,threads}\\ Invokes the inspector on a list of the threads running at the next lower command level. \item \code{,exit-when-done [\cvar{exp}]}\\ Waits until all user threads have completed and then exits back out to shell (or executive or whatever invoked Scheme~48 in the first place). \cvar{Exp} should evaluate to an integer which is then returned to the calling program. % JAR says: interaction with ,build ? %\item \code{,spawn \cvar{exp} [\cvar{name}]}\\ % Starts a new thread running \cvar{exp} on next command level down. % The optional \cvar{name} is used for printing and debugging. % %\item \code{,suspend [\cvar{exp}]} %\item \code{,continue [\cvar{exp}]} %\item \code{,kill [\cvar{exp}]}\\ % Suspend, unsuspend, and terminate a thread, respectively. % Suspended threads are not run until unsuspended, terminated % threads are never run again. % \cvar{Exp} should evaluate to a thread. % If \cvar{exp} is not present, the current focus object is used. % % example of ,threads ,suspend ... \end{description} \section{Quite obscure} \begin{description} \item \code{,go \cvar{exp}}\\ This is like \code{,exit \cvar{exp}} except that the evaluation of \cvar{exp} is tail-recursive with respect to the command processor. This means that the command processor itself can probably be GC'ed, should a garbage collection occur in the execution of \cvar{exp}. If an error occurs Scheme~48 will exit with a non-zero value. \item \code{,translate \cvar{from} \cvar{to}}\\ For \code{load} and the \code{,load} command (but not for \code{open-\{in|out\}put-file}), file names beginning with the string \cvar{from} will be changed so that the initial \cvar{from} is replaced by the string \cvar{to}. E.g. \begin{example} \code{,translate /usr/gjc/ /zu/gjc/} \end{example} will cause \code{(load "/usr/gjc/foo.scm")} to have the same effect as \code{(load "/zu/gjc/foo.scm")}. % JAR says: Useful with the module system! "virtual directories" \item \code{,from-file \cvar{filename} \cvar{form} \ldots\ ,end}\\ This is used by the \code{cmuscheme48} Emacs library to indicate the file from which the \cvar{form}s came. \cvar{Filename} is then used by the command processor to determine the package in which the \cvar{form}s are to be evaluated. \end{description} %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/external.tex000644 004306 005702 00000207675 12067075540 017747 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: % Richard Kelsey, Marcus Crestani, Mike Sperber, Robert Ransom \chapter{Mixing Scheme 48 and C} \label{external-chapter} This chapter describes the foreign-function interface for calling C functions from Scheme, calling Scheme functions from C, and allocating storage in the Scheme heap. Scheme~48 manages stub functions in C that negotiate between the calling conventions of Scheme and C and the memory allocation policies of both worlds. No stub generator is available yet, but writing stubs is a straightforward task. The foreign-function interface is modeled after the Java Native Interface (JNI), more information can be found at \urlhd{http://java.sun.com/javase/6/docs/technotes/guides/jni/index.html}{Sun's JNI Page} {http://java.sun.com/javase/6/docs\-/technotes/guides/jni/index.html}. Currently, Scheme~48 supports two foreign-function interfaces: The old GCPROTECT-style and the new JNI-style interface (this chapter) live side by side. The old interface is deprecated and will go away in a future release. Section~\ref{sec:gcprotect-conversion-recipe} gives a recipe how to convert external code from the old to the new interface. \section{Available facilities} \label{sec:facilities} The following facilities are available for interfacing between Scheme~48 and C: % \begin{itemize} \item Scheme code can call C functions. \item The external interface provides full introspection for all Scheme objects. External code may inspect, modify, and allocate Scheme objects arbitrarily. \item External code may raise exceptions back to Scheme~48 to signal errors. \item External code may call back into Scheme. Scheme~48 correctly unrolls the process stack on non-local exits. \item External modules may register bindings of names to values with a central registry accessible from Scheme. Conversely, Scheme code can register shared bindings for access by C code. \end{itemize} \subsection{Scheme structures} The structure \code{external-calls} has most of the Scheme functions described here. The others are in \code{load-dynamic-externals}, which has the functions for dynamic loading and name lookup from Section~\ref{dynamic-externals}, and \code{shared-bindings}, which has the additional shared-binding functions described in section~\ref{more-shared-bindings}. \subsection{C naming conventions} The names of all of Scheme~48's visible C bindings begin with `\code{s48\_}' (for procedures, variables, and macros). Note that the new foreign-function interface does not distinguish between procedures and macros. Whenever a C name is derived from a Scheme identifier, we replace `\code{-}' with `\code{\_}' and convert letters to lowercase. A final `\code{?}' converted to `\code{\_p}', a final `\code{!}' is dropped. As a naming convention, all functions and macros of the new foreign-function interface end in `\code{\_2}' (for now) to make them distinguishable from the old interface's functions and macros. Thus the C macro for Scheme's \code{pair?} is \code{s48\_pair\_p\_2} and the one for \code{set-car!} is \code{s48\_set\_car\_2}. Procedures and macros that do not check the types of their arguments have `\code{unsafe}' in their names. All of the C functions and macros described have prototypes or definitions in the file \code{c/scheme48.h}. \subsection{Garbage collection and reference objects} \label{sec:reference-objects} Scheme~48 uses a precise, copying garbage collector. The garbage collector may run whenever an object is allocated in the heap. The collector must be able to locate all references to objects allocated in the Scheme~48 heap in order to ensure that storage is not reclaimed prematurely and to update references to objects moved by the collector. This interface takes care of communicating to the garbage collector what objects it uses in most situations. It relieves the programmer from having to think about garbage collector interactions in the common case. This interface does not give external code direct access to Scheme objects. It introduces one level of indirection as external code never accepts or returns Scheme values directly. Instead, external code accepts or returns \emph{reference objects} of type \code{s48\_ref\_t} that refer to Scheme values (their C type is defined to be \code{s48\_value}). This indirection is only needed as an interface to external code, interior pointers in Scheme objects are unaffected. There are two types of reference objects: % \begin{description} \item[local references] A local reference is valid for the duration of a function call from Scheme to external code and is automatically freed after the external function returns to the virtual machine. \item[global references] A global reference remains valid until external code explicitly frees it. \end{description} % Scheme objects that are passed to external functions are passed as local references. External functions return Scheme objects as local references. External code has to manually manage Scheme objects that outlive a function call as global references. Scheme objects outlive a function call if they are assigned to a global variable of the external code or stored in long-living external objects, see section~\ref{sec:global-references}. A local reference is valid only within the dynamic context of the native method that creates it. Therefore, a local reference behaves exactly like a local variable in the external code: It is live as long as external code can access it. To achieve this, every external function in the interface that accepts or returns reference objects takes a \emph{call object} of type \code{s48\_call\_t} as its first argument. A call object corresponds to a particular call from Scheme to C. The call object holds all the references that belong to a call (like the call's arguments and return value) to external code from Scheme. External code may pass a local reference through multiple external functions. The foreign-function interface automatically frees all the local references a call object owns, along with the call object itself, when an external call returns to Scheme. This means that in the common case of Scheme calling an external function that does some work on its arguments and returns without stashing any Scheme objects in global variables or global data structures, the external code does not need to do any bookkeeping, since all the reference objects the external code accumulates are local references. Once the call returns, the foreign-function interface frees all the local references. For example, the functions to construct and access pairs are declared like this: \begin{protos} \cproto{s48\_ref\_t s48\_cons\_2(s48\_call\_t call, s48\_ref\_t car, s48\_ref\_t cdr);} \cproto{s48\_ref\_t s48\_car\_2(s48\_call\_t call, s48\_ref\_t pair);} \cproto{s48\_ref\_t s48\_cdr\_2(s48\_call\_t call, s48\_ref\_t pair);} \end{protos} This foreign-function interface takes a significant burden off the programmer as it handles most common cases automatically. If all the Scheme objects are live for the extent of the current external call, the programmer does not have to do anything at all. Since the lifetime of the Scheme objects is then identical with the lifetime of the according reference objects. In this case, the systems automatically manages both for the programmer. Using this foreign-function interface does not make the code more complex; the code stays compact and readable. The programmer has to get accustomed to passing the call argument around. How to manage Scheme objects that outlive the current call is described in section~\ref{sec:global-references}. Section~\ref{sec:gcprotect-conversion-recipe} gives a recipe how to convert external code from the old GCPROTECT-style interface to the new JNI-style interface. \section{Shared bindings} \label{sec:shared-bindings} Shared bindings are the means by which named values are shared between Scheme code and C code. There are two separate tables of shared bindings, one for values defined in Scheme and accessed from C and the other for values going the other way. Shared bindings actually bind names to cells, to allow a name to be looked up before it has been assigned. This is necessary because C initialization code may be run before or after the corresponding Scheme code, depending on whether the Scheme code is in the resumed image or is run in the current session. \subsection{Exporting Scheme values to C} \label{sec:export-scheme-to-c} \begin{protos} \proto{define-exported-binding}{ name value}{shared-binding} \end{protos} \begin{protos} \cproto{s48\_ref\_t s48\_get\_imported\_binding\_2(char *name)} \cproto{s48\_ref\_t s48\_get\_imported\_binding\_local\_2(s48\_call\_t call, char *name)} \cproto{s48\_ref\_t s48\_shared\_binding\_ref\_2(s48\_call\_t call, s48\_ref\_t shared\_binding)} \end{protos} \noindent\code{Define-exported-binding} makes \cvar{value} available to C code under \cvar{name}, which must be a \cvar{string}, creating a new shared binding if necessary. The C function \code{s48\_get\_imported\_binding\_2} returns a global reference to the shared binding defined for \code{name}, again creating it if necessary, \code{s48\_get\_imported\_binding\_local\_2} returns a local reference to the shared binding (see section~\ref{sec:reference-objects} for details on reference objects). The C macro \code{s48\_shared\_binding\_ref\_2} dereferences a shared binding, returning its current value. \subsection{Exporting C values to Scheme} \label{sec:export-c-to-scheme} Since shared bindings are defined during initialization, i.e. outside an external call, there is no call object. Therefore, exporting shared bindings from C does not use the new foreign-function interfaces specifications. \begin{protos} \cproto{void s48\_define\_exported\_binding(char *name, s48\_value v)} \end{protos} \begin{protos} \proto{lookup-imported-binding}{ string}{shared-binding} \proto{shared-binding-ref}{ shared-binding}{value} \end{protos} \noindent These are used to define shared bindings from C and to access them from Scheme. Again, if a name is looked up before it has been defined, a new binding is created for it. The common case of exporting a C function to Scheme can be done using the macro \code{s48\_export\_function(\cvar{name})}. This expands into \begin{example} s48\_define\_exported\_binding("\cvar{name}", s48\_enter\_pointer(\cvar{name})) \end{example} \noindent which boxes the function pointer into a Scheme byte vector and then exports it. Note that \code{s48\_enter\_pointer} allocates space in the Scheme heap and might trigger a garbage collection; see Section~\ref{gc}. \begin{protos} \syntaxprotonoresult{import-definition}{ \cvar{name}} \syntaxprotonoresultnoindex{import-definition}{ \cvar{name c-name}} \end{protos} These macros simplify importing definitions from C to Scheme. They expand into \code{(define \cvar{name} (lookup-imported-binding \cvar{c-name}))} \noindent{}where \cvar{c-name} is as supplied for the second form. For the first form \cvar{c-name} is derived from \cvar{name} by replacing `\code{-}' with `\code{\_}' and converting letters to lowercase. For example, \code{(import-definition my-foo)} expands into \code{(define my-foo (lookup-imported-binding "my\_foo"))} \subsection{Complete shared binding interface} \label{more-shared-bindings} There are a number of other Scheme functions related to shared bindings; these are in the structure \code{shared-bindings}. \begin{protos} \proto{shared-binding?}{ x}{boolean} \proto{shared-binding-name}{ shared-binding}{string} \proto{shared-binding-is-import?}{ shared-binding}{boolean} \protonoresultnoindex{shared-binding-set!}{ shared-binding value}\mainschindex{shared-binding-set"!} \protonoresult{define-imported-binding}{ string value} \protonoresult{lookup-exported-binding}{ string} \protonoresult{undefine-imported-binding}{ string}{} \protonoresult{undefine-exported-binding}{ string}{} \end{protos} \noindent\code{Shared-binding?} is the predicate for shared-bindings. \code{Shared-binding-name} returns the name of a binding. \code{Shared-binding-is-import?} is true if the binding was defined from C. \code{Shared-binding-set!} changes the value of a binding. \code{Define-imported-binding} and \code{lookup-exported-binding} are Scheme versions of \code{s48\_define\_exported\_binding} and \code{s48\_lookup\_imported\_binding}. The two \code{undefine-} procedures remove bindings from the two tables. They do nothing if the name is not found in the table. The following C macros correspond to the Scheme functions above. \begin{protos} \cproto{int\ \ \ \ \ \ \ s48\_shared\_binding\_p(s48\_call\_t call, x)} \cproto{int\ \ \ \ \ \ \ s48\_shared\_binding\_is\_import\_p(s48\_call\_t call, s48\_ref\_t s\_b)} \cproto{s48\_ref\_t s48\_shared\_binding\_name(s48\_call\_t call, s48\_ref\_t s\_b)} \cproto{void\ \ \ \ \ \ s48\_shared\_binding\_set(s48\_call\_t call, s48\_ref\_t s\_b, s48\_ref\_t v)} \end{protos} \section{Calling C functions from Scheme} \label{sec:external-call} There are different ways to call C functions from Scheme, depending on how the C function was obtained. \begin{protos} \proto{call-imported-binding-2}{ binding arg$_0$ \ldots}{value} \end{protos} \noindent Each of these applies its first argument, a C function that accepts and/or returns objects of type \code{s48\_ref\_t} and has its first argument of type \code{s48\_call\_t}, to the rest of the arguments. For \code{call-imported-binding-2} the function argument must be an imported binding. For all of these, the interface passes the current call object and the \cvar{arg$_i$} values to the C function and the value returned is that returned by C procedure. No automatic representation conversion occurs for either arguments or return values. Up to twelve arguments may be passed. There is no method supplied for returning multiple values to Scheme from C (or vice versa) (mainly because C does not have multiple return values). Keyboard interrupts that occur during a call to a C function are ignored until the function returns to Scheme (this is clearly a problem; we are working on a solution). \begin{protos} \syntaxprotonoresult{import-lambda-definition-2} { \cvar{name} (\cvar{formal} \ldots)} \syntaxprotonoresultnoindex{import-lambda-definition-2} { \cvar{name} (\cvar{formal} \ldots)\ \cvar{c-name}} \end{protos} \noindent{}These macros simplify importing functions from C that follow the return value and argument conventions of the foreign-function interface and use \code{s48\_call\_t} and \code{s48\_ref\_t} as their argument and return types. They define \cvar{name} to be a function with the given formals that applies those formals to the corresponding C binding. \cvar{C-name}, if supplied, should be a string. These expand into \begin{example} (define temp (lookup-imported-binding \cvar{c-name})) (define \cvar{name} (lambda (\cvar{formal} \ldots) (call-imported-binding-2 temp \cvar{formal} \ldots))) \end{example} \noindent{} If \cvar{c-name} is not supplied, it is derived from \cvar{name} by converting all letters to lowercase and replacing `\code{-}' with `\code{\_}'. \section{Dynamic loading} \label{dynamic-externals} External code can be loaded into a running Scheme~48---at least on most variants of Unix and on Windows. The required Scheme functions are in the structure \code{load-dynamic-externals}. To be suitable for dynamic loading, the externals code must reside in a shared object. The shared object must define a function: % \begin{protos} \cproto{void s48\_on\_load(void)} \end{protos} % The \code{s48\_on\_load} is run upon loading the shared objects. It typically contains invocations of \code{S48\_EXPORT\_FUNCTION} to make the functionality defined by the shared object known to Scheme~48. The shared object may also define either or both of the following functions: % \begin{protos} \cproto{void s48\_on\_unload(void)} \cproto{void s48\_on\_reload(void)} \end{protos} Scheme~48 calls \code{s48\_on\_unload} just before it unloads the shared object. If \code{s48\_on\_reload} is present, Scheme~48 calls it when it loads the shared object for the second time, or some new version thereof. If it is not present, Scheme~48 calls \code{s48\_on\_load} instead. (More on that later.) For Linux, the following commands compile \code{foo.c} into a file \code{foo.so} that can be loaded dynamically. \begin{example} \% gcc -c -o foo.o foo.c \% ld -shared -o foo.so foo.o \end{example} % The following procedures provide the basic functionality for loading shared objects containing dynamic externals: % \begin{protos} \proto{load-dynamic-externals}{ string plete? rrepeat? rresume?}{dynamic-externals} \proto{unload-dynamic-externals}{ string}{ dynamic-externals} \protonoresult{reload-dynamic-externals}{ dynamic-externals} \end{protos} % \code{Load-dynamic-externals} loads the named shared objects. The \cvar{plete?} argument determines whether Scheme~48 appends the OS-specific suffix (typically \code{.so} for Unix, and \code{.dll} for Windows) to the name. The \cvar{rrepeat?} argument determines how \code{load-dynamic-externals} behaves if it is called again with the same argument: If this is true, it reloads the shared object (and calls its \code{s48\_on\_unload} on unloading if present, and, after reloading, \code{s48\_on\_reload} if present or \code{s48\_on\_load} if not), otherwise, it will not do anything. The \cvar{rresume?} argument determines if an image subsequently dumped will try to load the shared object again automatically. (The shared objects will be loaded before any record resumers run.) \code{Load-dynamic-externals} returns a handle identifying the shared object just loaded. \code{Unload-dynamic-externals} unloads the shared object associated with the handle passed as its argument, previously calling its \code{s48\_on\_unload} function if present. Note that this invalidates all external bindings associated with the shared object; referring to any of them will probably crash the program. \code{Reload-dynamic-externals} will reload the shared object named by its argument and call its \code{s48\_on\_unload} function before unloading, and, after reloading, \code{s48\_on\_reload} if present or \code{s48\_on\_load} if not. \begin{protos} \proto{import-dynamic-externals}{ string}{dynamic-externals} \end{protos} % This procedure represents the expected most usage for loading dynamic-externals. It is best explained by its definition: % \begin{example} (define (import-dynamic-externals name) (load-dynamic-externals name #t #f #t)) \end{example} \section{Accessing Scheme data from C} \label{sec:scheme-data} The C header file \code{scheme48.h} provides access to Scheme~48 data structures. The type \code{s48\_ref\_t} is used for reference objects that refer to Scheme values. When the type of a value is known, such as the integer returned by \code{vector-length} or the boolean returned by \code{pair?}, the corresponding C procedure returns a C value of the appropriate type, and not a \code{s48\_ref\_t}. Predicates return \code{1} for true and \code{0} for false. \subsection{Constants} \label{sec:constants} The following macros denote Scheme constants: % \begin{itemize} \item \code{s48\_false\_2(s48\_call\_t)} is \verb|#f|. \item \code{s48\_true\_2(s48\_call\_t)} is \verb|#t|. \item \code{s48\_null\_2(s48\_call\_t)} is the empty list. \item \code{s48\_unspecific\_2(s48\_call\_t)} is a value used for functions which have no meaningful return value (in Scheme~48 this value returned by the nullary procedure \code{unspecific} in the structure \code{util}). \item \code{s48\_eof\_2(s48\_call\_t)} is the end-of-file object (in Scheme~48 this value is returned by the nullary procedure \code{eof-object} in the structure \code{i/o-internal}). \end{itemize} \subsection{Converting values} The following macros and functions convert values between Scheme and C representations. The `extract' ones convert from Scheme to C and the `enter's go the other way. \begin{protos} \cproto{int \ \ \ \ \ \ s48\_extract\_boolean\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long\ \ \ \ \ \ s48\_extract\_char\_2(s48\_call\_t, s48\_ref\_t)} \cproto{char * \ \ \ s48\_extract\_byte\_vector\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_extract\_long\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_extract\_unsigned\_long\_2(s48\_call\_t, s48\_ref\_t)} \cproto{double \ \ \ s48\_extract\_double\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_enter\_boolean\_2(s48\_call\_t, int)} \cproto{s48\_ref\_t s48\_enter\_char\_2(s48\_call\_t, long)} \cgcproto{s48\_ref\_t s48\_enter\_byte\_vector\_2(s48\_call\_t, char *, long)} \cgcproto{s48\_ref\_t s48\_enter\_long\_2(s48\_call\_t, long)} \cgcproto{s48\_ref\_t s48\_enter\_long\_as\_fixnum\_2(s48\_call\_t, long)} \cgcproto{s48\_ref\_t s48\_enter\_double\_2(s48\_call\_t, double)} \end{protos} \noindent{}\code{s48\_extract\_boolean\_2} is false if its argument is \code{\#f} and true otherwise. \code{s48\_enter\_boolean\_2} is \code{\#f} if its argument is zero and \code{\#t} otherwise. The \code{s48\_extract\_char\_2} function extracts the scalar value from a Scheme character as a C \code{long}. Conversely, \code{s48\_enter\_char\_2} creates a Scheme character from a scalar value. (Note that ASCII values are also scalar values.) The \code{s48\_extract\_byte\_vector\_2} function needs to deal with the garbage collector to avoid invalidating the returned pointer. For more details see section~\ref{sec:byte-vectors}. The second argument to \code{s48\_enter\_byte\_vector\_2} is the length of byte vector. \code{s48\_enter\_long\_2()} needs to allocate storage when its argument is too large to fit in a Scheme~48 fixnum. In cases where the number is known to fit within a fixnum (currently 30 bits on a 32-bits architecture and 62 bit on a 64-bits architecture including the sign), the following procedures can be used. These have the disadvantage of only having a limited range, but the advantage of never causing a garbage collection. \code{s48\_fixnum\_p\_2(s48\_call\_t)} is a macro that true if its argument is a fixnum and false otherwise. \begin{protos} \cproto{int \ \ \ \ \ \ s48\_fixnum\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_enter\_long\_as\_fixnum\_2(s48\_call\_t, long)} \cproto{long \ \ \ \ \ S48\_MAX\_FIXNUM\_VALUE} \cproto{long \ \ \ \ \ S48\_MIN\_FIXNUM\_VALUE} \end{protos} \noindent An error is signaled if the argument to \code{s48\_enter\_fixnum} is less than \code{S48\_MIN\_FIXNUM\_VALUE} or greater than \code{S48\_MAX\_FIXNUM\_VALUE} ($-2^{29}$ and $2^{29}-1$ on a 32-bits architecture and $-2^{61}$ and $2^{62}-1$ on a 64-bits architecture). \begin{protos} \cproto{int \ \ \ \ \ \ s48\_true\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{int \ \ \ \ \ \ s48\_false\_p\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \noindent \code{s48\_true\_p} is true if its argument is \code{s48\_true} and \code{s48\_false\_p} is true if its argument is \code{s48\_false}. \begin{protos} \cgcproto{s48\_ref\_t s48\_enter\_string\_latin\_1\_2(s48\_call\_t, char*);} \cgcproto{s48\_ref\_t s48\_enter\_string\_latin\_1\_n\_2(s48\_call\_t, char*, long);} \cproto{long\ \ \ \ \ \ s48\_string\_latin\_1\_length\_2(s48\_call\_t, s48\_ref\_t);} \cproto{long\ \ \ \ \ \ s48\_string\_latin\_1\_length\_n\_2(s48\_call\_t, s48\_ref\_t, long, long);} \cproto{void\ \ \ \ \ \ s48\_copy\_latin\_1\_to\_string\_2(s48\_call\_t, char*, s48\_ref\_t);} \cproto{void\ \ \ \ \ \ s48\_copy\_latin\_1\_to\_string\_n\_2(s48\_call\_t, char*, long, s48\_ref\_t);} \cproto{void\ \ \ \ \ \ s48\_copy\_string\_to\_latin\_1\_2(s48\_call\_t, s48\_ref\_t, char*);} \cproto{void\ \ \ \ \ \ s48\_copy\_string\_to\_latin\_1\_n\_2(s48\_call\_t, s48\_ref\_t, long, long, char*);} \cgcproto{s48\_ref\_t s48\_enter\_string\_utf\_8\_2(s48\_call\_t, char*);} \cgcproto{s48\_ref\_t s48\_enter\_string\_utf\_8\_n\_2(s48\_call\_t, char*, long);} \cproto{long\ \ \ \ \ \ s48\_string\_utf\_8\_length\_2(s48\_call\_t, s48\_ref\_t);} \cproto{long\ \ \ \ \ \ s48\_string\_utf\_8\_length\_n\_2(s48\_call\_t, s48\_ref\_t, long, long);} \cproto{long\ \ \ \ \ \ s48\_copy\_string\_to\_utf\_8\_2(s48\_call\_t, s48\_ref\_t, char*);} \cproto{long\ \ \ \ \ \ s48\_copy\_string\_to\_utf\_8\_n\_2(s48\_call\_t, s48\_ref\_t, long, long, char*);} \cgcproto{s48\_ref\_t s48\_enter\_string\_utf\_16be\_2(s48\_call\_t, char*);} \cgcproto{s48\_ref\_t s48\_enter\_string\_utf\_16be\_n\_2(s48\_call\_t, char*, long);} \cproto{long\ \ \ \ \ \ s48\_string\_utf\_16be\_length\_2(s48\_call\_t, s48\_ref\_t);} \cproto{long\ \ \ \ \ \ s48\_string\_utf\_16be\_length\_n\_2(s48\_call\_t, s48\_ref\_t, long, long);} \cproto{long\ \ \ \ \ \ s48\_copy\_string\_to\_utf\_16be\_2(s48\_call\_t, s48\_ref\_t, char*);} \cproto{long\ \ \ \ \ \ s48\_copy\_string\_to\_utf\_16be\_n\_2(s48\_call\_t, s48\_ref\_t, long, long, char*);} \cgcproto{s48\_ref\_t s48\_enter\_string\_utf\_16le\_2(s48\_call\_t, char*);} \cgcproto{s48\_ref\_t s48\_enter\_string\_utf\_16le\_n\_2(s48\_call\_t, char*, long);} \cproto{long\ \ \ \ \ \ s48\_string\_utf\_16le\_length\_2(s48\_call\_t, s48\_ref\_t);} \cproto{long\ \ \ \ \ \ s48\_string\_utf\_16le\_length\_n\_2(s48\_call\_t, s48\_ref\_t, long, long);} \cproto{long\ \ \ \ \ \ s48\_copy\_string\_to\_utf\_16le\_2(s48\_call\_t, s48\_ref\_t, char*);} \cproto{long\ \ \ \ \ \ s48\_copy\_string\_to\_utf\_16le\_n\_2(s48\_call\_t, s48\_ref\_t, long, long, char*);} \end{protos} % The \code{s48\_enter\_string\_latin\_1\_2} function creates a Scheme string, initializing its contents from its NUL-terminated, Latin-1-encoded argument. The \code{s48\_enter\_string\_latin\_1\_n\_2} function does the same, but allows specifying the length explicitly---no NUL terminator is necessary. The \code{s48\_string\_latin\_1\_length\_2} function computes the length that the Latin-1 encoding of its argument (a Scheme string) would occupy, not including NUL termination. The \code{s48\_string\_latin\_1\_length\_2} function does the same, but allows specifying a starting index and a count into the input string. The \code{s48\_copy\_latin\_1\_to\_string\_2} function copies Latin-1-encoded characters from its second NUL-terminated argument to the Scheme string that is its third argument. The \code{s48\_copy\_latin\_1\_to\_string\_n\_2} does the same, but allows specifying the number of characters explicitly. The \code{s48\_copy\_string\_to\_latin\_1\_2} function converts the characters of the Scheme string specified as the second argument into Latin-1 and writes them into the string specified as the third argument. (Note that it does not NUL-terminate the result.) The \code{s48\_copy\_string\_to\_latin\_1\_n\_2} function does the same, but allows specifying a starting index and a character count into the source string. The \code{s48\_extract\_latin\_1\_from\_string\_2} function returns a buffer that contains the Latin-1 encoded characters including NUL termination of the Scheme string specified. The buffer that is returned is a local buffer managed by the foreign-function interface and is automatically freed on the return of the current call. The \code{s48\_enter\_string\_utf\_8\_2} function creates a Scheme string, initializing its contents from its NUL-terminated, UTF-8-encoded argument. The \code{s48\_enter\_string\_utf\_8\_n\_2} function does the same, but allows specifying the length explicitly---no NUL terminator is necessary. The \code{s48\_string\_utf\_8\_length\_2} function computes the length that the UTF-8 encoding of its argument (a Scheme string) would occupy, not including NUL termination. The \code{s48\_string\_utf\_8\_length\_2} function does the same, but allows specifying a starting index and a count into the input string. The \code{s48\_copy\_string\_to\_utf\_8\_2} function converts the characters of the Scheme string specified as the second argument into UTF-8 and writes them into the string specified as the third argument. (Note that it does not NUL-terminate the result.) The \code{s48\_copy\_string\_to\_utf\_8\_n\_2} function does the same, but allows specifying a starting index and a character count into the source string. Both return the length of the written encodings in bytes. The \code{s48\_extract\_utf\_8\_from\_string\_2} function returns a buffer that contains the UTF-8 encoded characters including NUL termination of the Scheme string specified. The buffer that is returned is a local buffer managed by the foreign-function interface and is automatically freed on the return of the current call. The functions with \code{utf\_16} in their names work analogously to their \code{utf\_8} counterparts, but implement the UTF-16 encodings. The lengths returned be the \code{\_length} and \code{copy\_string\_to} functions are in terms of UTF-16 code units. The \code{extract} function returns a local buffer that contains UTF-16 code units including NUL termination. \subsection{C versions of Scheme procedures} The following macros and procedures are C versions of Scheme procedures. The names were derived by replacing `\code{-}' with `\code{\_}', `\code{?}' with `\code{\_p}', and dropping `\code{!}. \begin{protos} \cproto{int \ \ \ \ \ \ s48\_eq\_p\_2(s48\_call\_t, s48\_ref\_t, s48\_ref\_t)} \cproto{int \ \ \ \ \ \ s48\_char\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{int \ \ \ \ \ \ s48\_null\_p\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{int \ \ \ \ \ \ s48\_pair\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_car\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_cdr\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void \ \ \ \ \ s48\_set\_car\_2(s48\_call\_t, s48\_ref\_t, s48\_ref\_t)} \cproto{void \ \ \ \ \ s48\_set\_cdr\_2(s48\_call\_t, s48\_ref\_t, s48\_ref\_t)} \cgcproto{s48\_ref\_t s48\_cons\_2(s48\_call\_t, s48\_ref\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_length\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{int \ \ \ \ \ \ s48\_vector\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_vector\_length\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_vector\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_vector\_set\_2(s48\_call\_t, s48\_ref\_t, long, s48\_ref\_t)} \cgcproto{s48\_ref\_t s48\_make\_vector\_2(s48\_call\_t, long, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{int \ \ \ \ \ \ s48\_string\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_string\_length\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_string\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_string\_set\_2(s48\_call\_t, s48\_ref\_t, long, long)} \cgcproto{s48\_ref\_t s48\_make\_string\_2(s48\_call\_t, long, char)} \end{protos} \begin{protos} \cproto{int \ \ \ \ \ \ s48\_symbol\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_symbol\_to\_string\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{int \ \ \ \ \ \ s48\_byte\_vector\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_byte\_vector\_length\_2(s48\_call\_t, s48\_ref\_t)} \cproto{char \ \ \ \ \ s48\_byte\_vector\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_byte\_vector\_set\_2(s48\_call\_t, s48\_ref\_t, long, int)} \cgcproto{s48\_ref\_t s48\_make\_byte\_vector\_2(s48\_call\_t, long, int)} \end{protos} \section{Calling Scheme functions from C} \label{sec:external-callback} External code that has been called from Scheme can call back to Scheme procedures using the following function. \begin{protos} \cproto{s48\_ref\_t s48\_call\_scheme\_2(s48\_call\_t, s48\_ref\_t p, long nargs, \ldots)} \end{protos} \noindent{}This calls the Scheme procedure \code{p} on \code{nargs} arguments, which are passed as additional arguments to \code{s48\_call\_scheme\_2}. There may be at most twelve arguments. The value returned by the Scheme procedure is returned by the C procedure. Invoking any Scheme procedure may potentially cause a garbage collection. There are some complications that occur when mixing calls from C to Scheme with continuations and threads. C only supports downward continuations (via \code{longjmp()}). Scheme continuations that capture a portion of the C stack have to follow the same restriction. For example, suppose Scheme procedure \code{s0} captures continuation \code{a} and then calls C procedure \code{c0}, which in turn calls Scheme procedure \code{s1}. Procedure \code{s1} can safely call the continuation \code{a}, because that is a downward use. When \code{a} is called Scheme~48 will remove the portion of the C stack used by the call to \code{c0}. On the other hand, if \code{s1} captures a continuation, that continuation cannot be used from \code{s0}, because by the time control returns to \code{s0} the C stack used by \code{c0} will no longer be valid. An attempt to invoke an upward continuation that is closed over a portion of the C stack will raise an exception. In Scheme~48 threads are implemented using continuations, so the downward restriction applies to them as well. An attempt to return from Scheme to C at a time when the appropriate C frame is not on top of the C stack will cause the current thread to block until the frame is available. For example, suppose thread \code{t0} calls a C procedure which calls back to Scheme, at which point control switches to thread \code{t1}, which also calls C and then back to Scheme. At this point both \code{t0} and \code{t1} have active calls to C on the C stack, with \code{t1}'s C frame above \code{t0}'s. If thread \code{t0} attempts to return from Scheme to C it will block, as its frame is not accessible. Once \code{t1} has returned to C and from there to Scheme, \code{t0} will be able to resume. The return to Scheme is required because context switches can only occur while Scheme code is running. \code{T0} will also be able to resume if \code{t1} uses a continuation to throw past its call to C. \section{Interacting with the Scheme heap} \label{sec:heap-allocation} \label{gc} Scheme~48 uses a copying, precise garbage collector. Any procedure that allocates objects within the Scheme~48 heap may trigger a garbage collection. Local object references refer to values in the Scheme~48 heap and are automatically registered with the garbage collector by the interface for the duration of a function call from Scheme to C so that the values will be retained and the references will be updated if the garbage collector moves the object. Global object references need to be created and freed explicitly for Scheme values that need to survive one function call, e.g. that are stored in global variables, global data structures or are passed to libraries. See section~\ref{sec:global-references} for details. Additionally, the interface provides \emph{local buffers} that are malloc'd regions of memory valid for the duration of a function call and are freed automatically upon return from the external code. This relieves the programmer from explicitly freeing locally allocated memory. See section~\ref{sec:local-bufs} for details. The interface treats byte vectors in a special way, since the garbage collector has no facility for updating pointers to the interiors of objects, so that such pointers, for example the ones returned by \code{s48\_unsafe\_extract\_byte\_vector\_2}, will likely become invalid when a garbage collection occurs. The interface provides a facility to prevent a garbage collection from invalidating pointers to byte vector's memory region, see section~\ref{sec:byte-vectors} for details. \subsection{Registering global references} \label{sec:global-references} When external code needs a reference object to survive the current call, the external code needs to do explicit bookkeeping. Local references must not be stored in global variables of the external code or passed to other threads, since all local references are freed once the call returns, which leads to a dangling pointer in the global variable or other thread respectively. Instead, promote a local reference to a global reference and store it in a global variable or pass to another thread as global references will survive the current call. Since the foreign-function interface never automatically frees global references, the programmer must free them at the right time. \begin{protos} \cproto{s48\_ref\_t s48\_make\_global\_ref(s48\_value obj)} \cproto{void \ \ \ \ \ s48\_free\_global\_ref(s48\_ref\_t ref)} \cproto{s48\_ref\_t s48\_local\_to\_global\_ref(s48\_ref\_t ref)} \end{protos} \noindent{}\code{s48\_make\_global\_ref} permanently registers the Scheme value \cvar{obj} as a global reference with the garbage collector. Basic Scheme values are \code{\_s48\_value\_true}, \code{\_s48\_value\_false}, \code{\_s48\_value\_null}, \code{\_s48\_value\_unspecific}, \code{\_s48\_value\_undefined}, and \code{\_s48\_value\_eof}. To free a global reference an to unregister it with the garbage collector, use \code{s48\_free\_global\_ref}. The function \code{s48\_local\_to\_global\_ref} promotes a local reference object to a global reference object. For example, to maintain a global list of values, declare a static global variable \begin{verbatim} s48_ref_t global_list = NULL; \end{verbatim} \noindent{}and initialize it in the external code's initialization function \begin{verbatim} global_list = s48_make_global_ref(_s48_value_null); \end{verbatim} \noindent{}Note that you need to use a Scheme value (not a reference object) as the argument for \code{s48\_make\_global\_ref}, since there is not yet a call object at the time external code gets initialized. To add \code{new\_value} to the list, you can use the following snippet: \begin{verbatim} temp = global_list; global_list = s48_local_to_global_ref(s48_cons_2(call, new_value, global_list)) s48_free_global_ref(temp); \end{verbatim} \noindent{}You have to remember to always promote reference objects to global references when assigning to a global variable (and later, to free them manually). Note that it is more efficient to free the previous head of the list when adding a new element to the list. \subsection{Local buffers} \label{sec:local-bufs} The foreign-function interface supports the programmer with allocating memory in external code: The programmer can request chunks of memory, called local buffers, that are automatically freed on return from the current call. \begin{protos} \cproto{void *s48\_make\_local\_buf (s48\_call\_t, size\_t)} \cproto{void s48\_free\_local\_buf (s48\_call\_t, void *)} \end{protos} The function \code{s48\_make\_local\_buf} returns a block of memory of the given size in bytes. This memory freed by the foreign-function interface when the current call returns. To free the buffer manually, use \code{s48\_free\_local\_buf}. \subsection{Special treatment for byte vectors} \label{sec:byte-vectors} The interface treats byte vectors in a special way, since the garbage collector has no facility for updating pointers to the interiors of objects, so that such pointers, for example the ones returned by \code{s48\_unsafe\_extract\_byte\_vector\_2}, will likely become invalid when a garbage collection occurs. The interface provides a facility to prevent a garbage collection from invalidating pointers to byte vector's memory region. It does this by copying byte vectors that are used in external code from and to the Scheme heap. These functions create byte vectors: \begin{protos} \cgcproto{s48\_ref\_t s48\_make\_byte\_vector\_2(s48\_call\_t, long)} \cgcproto{s48\_ref\_t s48\_make\_unmovable\_byte\_vector\_2(s48\_call\_t, long)} \cgcproto{s48\_ref\_t s48\_enter\_byte\_vector\_2(s48\_call\_t, const char *, long)} \cgcproto{s48\_ref\_t s48\_enter\_unmovable\_byte\_vector\_2(s48\_call\_t, const char *, long)} \end{protos} \code{s48\_make\_byte\_vector\_2} creates a byte vector of given size, \code{s48\_make\_unmovable\_byte\_vector\_2} creates a byte vector in that is not moved by the garbage collector (only the Bibop garbage collector supports this). The functions \code{s48\_enter\_byte\_vector\_2} and \code{s48\_enter\_unmovable\_byte\_vector\_2} create and initialize byte vectors. The following functions copy byte vectors from and to the Scheme heap: \begin{protos} \cproto{void s48\_extract\_byte\_vector\_region\_2(s48\_call\_t, s48\_ref\_t, long, long, char*)} \cproto{void s48\_enter\_byte\_vector\_region\_2(s48\_call\_t, s48\_ref\_t, long, long, char*)} \cproto{void s48\_copy\_from\_byte\_vector\_2(s48\_call\_t, s48\_ref\_t, char *)} \cproto{void s48\_copy\_to\_byte\_vector\_2(s48\_call\_t, s48\_ref\_t, char *)} \end{protos} \code{s48\_extract\_byte\_vector\_region\_2} copies a given section from the given byte vector to its last argument, \code{s48\_enter\_byte\_vector\_region\_2} copies the contents of its last argument to its first argument to the given index. \code{s48\_copy\_from\_byte\_vector\_2} copies the whole byte vector to its last argument, \code{s48\_copy\_to\_byte\_vector\_2} copies the contents of its last argument to the byte vector. \begin{protos} \cproto{char *s48\_extract\_byte\_vector\_unmanaged\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void \ s48\_release\_byte\_vector\_2(s48\_call\_t, s48\_ref\_t, char*)} \end{protos} \code{s48\_extract\_byte\_vector\_unmanaged\_2} returns a local buffer that is valid during the current external call and copies the contents of the given byte vector to the returned buffer. The returned byte vector may be a copy of the Scheme byte vector, changes made to the returned byte vector will not necessarily be reflected in Scheme until \code{s48\_release\_byte\_vector\_2} is called. The following functions to access byte vectors come with the most support from the foreign-function interface. Byte vectors that are accessed via these functions are automatically managed by the interface and are copied back to Scheme on return from the current call: \begin{protos} \cproto{char *s48\_extract\_byte\_vector\_2(s48\_call\_t, s48\_ref\_t)} \cproto{char *s48\_extract\_byte\_vector\_readonly\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \code{s48\_extract\_byte\_vector\_2} extracts a byte vector from Scheme by making a copy of the byte vectors contents and returning a pointer to that copy. Changes to the byte vector are automatically copied back to the Scheme heap when the function returns, external code raises an exception, or external code calls a Scheme function. \code{s48\_extract\_byte\_vector\_readonly\_2} should be used for byte vectors that are not modified by external code, since these byte vectors are not copied back to Scheme. \subsection{Memory overhead} \label{sec:memory-overhead} Each reference object consumes a certain amount of memory itself, in addition to the memory taken by the referred Scheme object itself. Even though local references are eventually freed on return of an external call, there are some situations where it is desirable to free local references explicitly, since waiting until the call returns may be too long or never happen, which could keep unneeded objects live: \begin{itemize} \item External code may create a large number of local references in a single external call. An example is the traversal of a list: Each call from external code to the functions that correspond to \texttt{car} and \texttt{cdr} returns a fresh local reference. To avoid the consumption of storage for local references proportional to the length of the list, the traversal must free the no-longer-needed references as it goes. For example, this is a straightforward definition of an external function that calculates the length of a list: \begin{verbatim} s48_ref_t s48_length_2(s48_call_t call, s48_ref_t list) { long i = 0; while (!(s48_null_p_2(call, list))) { list = s48_cdr_2(call, list); ++i; } return s48_unsafe_enter_long_as_fixnum_2(call, i); } \end{verbatim} \noindent{}In this implementation, each iteration step creates a new local reference object via \code{s48\_cdr\_2} that is actually only needed for the next iteration step. As a result, this function creates new local references for every element of the list. The local references are live during the entire function call. To avoid consuming storage proportional to the length of the list for all those local reference objects, the improved version cleans up the unneeded local reference on every iteration step: \begin{verbatim} s48_ref_t s48_length_2(s48_call_t call, s48_ref_t list) { s48_ref_t l = s48_copy_local_ref(call, list); long i = 0; while (!(s48_null_p_2(call, l))) { s48_ref_t temp = l; l = s48_cdr_2(call, l); s48_free_local_ref(call, temp); ++i; } return s48_unsafe_enter_long_as_fixnum_2(call, i); } \end{verbatim} \noindent{}Note that without the call to \code{s48\_copy\_local\_ref} the reference to the head of the list would be freed along with all the temporary references. This would render the whole list unusable after the return from \code{s48\_length\_2}. \item The external call does not return at all. If the external function enters an infinite event dispatch loop, for example, it is crucial that the programmer releases local references manually that he created inside the loop so that they do not accumulate indefinitely and lead to a memory leak. \item External code may hold a local reference to a large Scheme object. After the external code is done working on this object, it performs some additional computation before returning to the caller. The local reference to the large object prevents the object from being garbage collected until the external function returns, even if the object is no longer in use for the remainder of the computation. It is more space-efficient if the programmer frees the local reference when the external function does not need it any longer and will not return for quite some time. \item There are common situations where local references are created solely to be passed to another function and afterwards never used again. In this case, the called function can free the local references of the arguments. \item To improve memory usage while making subcalls from external calls, the foreign-function interface provides functionality to create a new (sub-)call object and clean the local references that are created during that subcall: \begin{protos} \cproto{s48\_call\_t s48\_make\_subcall(s48\_call\_t call)} \cproto{void s48\_free\_subcall(s48\_call\_t subcall)} \cproto{s48\_ref\_t s48\_finish\_subcall(s48\_call\_t call, s48\_call\_t subcall, s48\_ref\_t ref)} \end{protos} \code{s48\_make\_subcall} returns a new call object that represents a subcall of the current call and can be passed as the call argument to any subcalls of the current call. Upon return of a subcall, \code{s48\_free\_subcall} frees the subcall and all the local references associated with it. The function {s48\_finish\_subcall} also frees the subcall and all the local references associated with it, but copies its third argument to the current call, so that it survives the subcall. \end{itemize} \subsection{Keeping C data structures in the Scheme heap} \label{sec:external-data} C data structures can be kept in the Scheme heap by embedding them inside byte vectors. The following macros can be used to create and access embedded C objects. \begin{protos} \cgcproto{s48\_ref\_t s48\_make\_value\_2(s48\_call\_t, type)} \cgcproto{s48\_ref\_t s48\_make\_sized\_value\_2(s48\_call\_t, size)} \cproto{type \ \ \ \ \ s48\_extract\_value\_2(s48\_call\_t, s48\_ref\_t, type)} \cproto{long \ \ \ \ \ s48\_value\_size\_2(s48\_call\_t, s48\_ref\_t)} \cproto{type * \ \ \ s48\_extract\_value\_pointer\_2(s48\_call\_t, s48\_ref\_t, type)} \cproto{void \ \ \ \ \ s48\_set\_value\_2(s48\_call\_t, s48\_ref\_t, type, value)} \end{protos} \noindent{} \code{s48\_make\_value\_2} makes a byte vector large enough to hold an object whose type is \cvar{type}. \code{s48\_make\_sized\_value\_2} makes a byte vector large enough to hold an object of \cvar{size} bytes. \code{s48\_extract\_value\_2} returns the contents of a byte vector cast to \cvar{type}, \code{s48\_value\_size\_2} returns its size, and \code{s48\_extract\_value\_pointer\_2} returns a pointer to the contents of the byte vector. The value returned by \code{s48\_extract\_value\_pointer\_2} is valid only until the next garbage collection. \code{s48\_set\_value\_2} stores \code{value} into the byte vector. Pointers to C data structures can be stored in the Scheme heap: \begin{protos} \cgcproto{s48\_ref\_t s48\_enter\_pointer\_2(s48\_call\_t, void *)} \cgcproto{void * \ \ \ s48\_extract\_pointer\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \noindent{}The function \code{s48\_enter\_pointer\_2} makes a byte vector large enough to hold the pointer value and stores the pointer value in the byte vector. The function \code{s48\_extract\_pointer\_2} extracts the pointer value from the scheme heap. \subsection{C code and heap images} \label{sec:hibernation} Scheme~48 uses dumped heap images to restore a previous system state. The Scheme~48 heap is written into a file in a machine-independent and operating-system-independent format. The procedures described above may be used to create objects in the Scheme heap that contain information specific to the current machine, operating system, or process. A heap image containing such objects may not work correctly when resumed. To address this problem, a record type may be given a `resumer' procedure. On startup, the resumer procedure for a type is applied to each record of that type in the image being restarted. This procedure can update the record in a manner appropriate to the machine, operating system, or process used to resume the image. \begin{protos} \protonoresult{define-record-resumer}{ record-type procedure} \end{protos} \noindent{}\code{Define-record-resumer} defines \cvar{procedure}, which should accept one argument, to be the resumer for \var{record-type}. The order in which resumer procedures are called is not specified. The \cvar{procedure} argument to \code{define-record-resumer} may be \code{\#f}, in which case records of the given type are not written out in heap images. When writing a heap image any reference to such a record is replaced by the value of the record's first field, and an exception is raised after the image is written. \section{Using Scheme records in C code} External modules can create records and access their slots positionally. \begin{protos} \cgcproto{s48\_ref\_t s48\_make\_record\_2(s48\_call\_t, s48\_ref\_t)} \cproto{int \ \ \ \ \ \ s48\_record\_p\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_record\_type\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_record\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_record\_set\_2(s48\_call\_t, s48\_ref\_t, long, s48\_ref\_t)} \end{protos} % The argument to \code{s48\_make\_record\_2} should be a shared binding whose value is a record type. In C the fields of Scheme records are only accessible via offsets, with the first field having offset zero, the second offset one, and so forth. If the order of the fields is changed in the Scheme definition of the record type the C code must be updated as well. For example, given the following record-type definition \begin{example} (define-record-type thing :thing (make-thing a b) thing? (a thing-a) (b thing-b)) \end{example} the identifier \code{:thing} is bound to the record type and can be exported to C: \begin{example} (define-exported-binding "thing-record-type" :thing) \end{example} \code{Thing} records can then be made in C: \begin{example} static s48_ref_t thing_record_type_binding = NULL; void initialize_things(void) \{ thing_record_type_binding = s48_get_imported_binding_2("thing-record-type"); \} s48_ref_t make_thing(s48_call_t call, s48_ref_t a, s48_ref_t b) \{ s48_ref_t thing; thing = s48_make_record_2(call, thing_record_type_binding); s48_record_set_2(call, thing, 0, a); s48_record_set_2(call, thing, 1, b); return thing; \} \end{example} Note that the interface takes care of protecting all local references against the possibility of a garbage collection occurring during the call to \code{s48\_make\_record\_2()}; also note that the record type binding is a global reference that is live until explicitly freed. \section{Raising exceptions from external code} \label{sec:exceptions} The following macros explicitly raise certain errors, immediately returning to Scheme~48. Raising an exception performs all necessary clean-up actions to properly return to Scheme~48, including adjusting the stack of protected variables. The following procedures are available for raising particular types of exceptions. These never return. \begin{protos} \cproto{s48\_assertion\_violation\_2(s48\_call\_t, const char* who, const char* message, long count, ...)} \cproto{s48\_error\_2(s48\_call\_t, const char* who, const char* message, long count, ...)} \cproto{s48\_os\_error\_2(s48\_call\_t, const char* who, const char* message, long count, ...)} \cproto{s48\_out\_of\_memory\_error\_2(s48\_call\_t, )} \end{protos} \noindent{}An assertion violation signaled via \code{s48\_assertion\_violation\_2} typically means that an invalid argument (or invalid number of arguments) has been passed. An error signaled via \code{s48\_error\_2} means that an environmental error (like an I/O error) has occurred. In both cases, \code{who} indicates the location of the error, typically the name of the function it occurred in. It may be \code{NULL}, in which the system guesses a name. The \code{message} argument is an error message encoded in UTF-8. Additional arguments may be passed that become part of the condition object that will be raised on the Scheme side: \code{count} indicates their number, and the arguments (which must be of type \code{s48\_ref\_t}) follow. The \code{s48\_os\_error\_2} function is like \code{s48\_error\_2}, except that the error message is inferred from an OS error code (as in \code{strerror}). The \code{s48\_out\_of\_memory\_error\_2} function signals that the system has run out of memory. The following macros raise assertion violations if their argument does not have the required type. \code{s48\_check\_boolean\_2} raises an error if its argument is neither \code{\#t} or \code{\#f}. \begin{protos} \cproto{void s48\_check\_boolean\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_symbol\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_pair\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_string\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_integer\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_channel\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_byte\_vector\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_record\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void s48\_check\_shared\_binding\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \section{External events} External code can push the occurrence of external events into the main Scheme~48 event loop and Scheme code can wait and act on external events. On the Scheme side, the external events functionality consists of the following functions from the structure \code{primitives}: \begin{protos} \proto{new-external-event-uid}{ shared-binding-or-\#f}{ uid} \protonoresult{unregister-external-event-uid!}{ uid} \end{protos} \noindent{}And the following functions from the structure \code{external-events}: \begin{protos} \protonoresult{register-condvar-for-external-event!}{ uid condvar} \protonoresult{wait-for-external-event}{ condvar} \proto{new-external-event}{}{ uid condvar} \end{protos} \noindent{}The function \code{new-external-event-uid} returns a fresh event identifier on every call. When called with a shared binding instead of \code{\#f}, \code{new-external-event-uid} returns a named event identifier for permanent use. The function \code{unregister-external-event-uid} unregisters the given event identifier. External events use condition variables to synchronize the occurrence of events, see section~\ref{sec:condition-variables} for more information on condition variables. The function \code{register-condvar-for-external-event} registers a condition variable with an event identifier. For convenience, the function \code{new-external-event} combines \code{new-external-event-uid} and \code{register-condvar-for-external-event} and returns a fresh event identifier and the corresponding condition variable. The function \code{wait-for-external-event} blocks the caller (on the condition variable) until the Scheme main event loop receives an event notification (by \code{s48\_note\_external\_event}) of the event identifier that is registered with the given condition variable (with \code{register-condvar-for-external-event}). There is no guarantee that the caller of \code{wait-for-external-event} is unblocked on every event notification, therefore the caller has to be prepared to handle multiple external events that have occurred and external code has to be prepared to store multiple external events. The following prototype is the interface on the external side: \begin{protos} \cproto{void s48\_note\_external\_event(long)} \end{protos} \noindent{}External code has to collect external events and can use \code{s48\_note\_external\_event} to signal the occurrence of an external event to the main event loop. The argument to \code{s48\_note\_external\_event} is an event identifier that was previously registered on the Scheme side. Thus, external code has to obtain the event identifier from the Scheme side, either by passing the event identifier as an argument to the external function that calls \code{s48\_note\_external\_event} or by exporting the Scheme value to C (see section~\ref{sec:export-scheme-to-c}). Since the main event loop does not guarantee that every call to \code{s48\_note\_external\_event} causes the just occurred event to get handled immediately, external code has to make sure that it can collect multiple external events (i.e. keep them in an appropriate data structure). It is safe for external code to call \code{s48\_note\_external\_event} on every collected external event, though, even if older events have not been handled yet. \subsection{Collecting external events in external code} External code has to be able to collect multiple events that have occurred. Therefore, external code has to create the needed data structures to store the information that is associated with the occurred event. Usually, external code collects the events in a thread. An separate thread does not have an call argument, though, so it cannot create Scheme data structures. It must use C data structures to collect the events, for example it can create a linked list of events. Since the events are later handled on the Scheme side, the information associated with the event needs to be visible on the Scheme side, too. Therefore, external code exports a function to Scheme that returns all current events as Scheme objects (the function that returns the events knows about the current call and thus can create Scheme objects). Scheme and external code might need to share Scheme record types that represent the event information. Typically, the function that returns the events converts the C event list into a Scheme event list by preserving the original order in which the events arrived. Note that the external list data structure that holds all events needs to be mutex locked on each access to preserve thread-safe manipulation of the data structure (the Scheme thread that processes events and the external thread that collects events may access the data structures at the same time). \subsection{Handling external events in Scheme} If the sole occurrence of an event does not suffice for the program, the Scheme side has to pull the information that is associated with an event from the C side. Then, the Scheme side can handle the event data. For example, a typical event loop on the Scheme side that waits on external events of an permanent event type that an long-running external thread produces may look like this: \begin{verbatim} (define *external-event-uid* (new-external-event-uid (lookup-imported-binding "my-event"))) (spawn-external-thread *external-event-uid*) (let loop () (let ((condvar (make-condvar))) (register-condvar-for-external-event! *external-event-uid* condvar) (wait-for-external-event condvar) (process-external-events! (get-external-events)) (loop))) \end{verbatim} \noindent{}In the above example, the variable \code{*external-event-uid*} is defined as a permanent event identifier. On every pass through the loop, a fresh condition variable is registered with the event identifier, then \code{wait-for-external-event} blocks on the condition variable until external code signals the occurrence of a matching event. Note that \code{process-external-events!} and \code{get-external-events} need to be defined by the user. The user-written function \code{get-external-events} returns all the events that the external code has collected since the last time \code{get-external-events} was called; the user-written function \code{process-external-events!} handles the events on the Scheme side. When the Scheme side only waits for one single event, there is no need for an event loop and an permanent event identifier. Then, \code{new-external-event} is more convenient to use: \begin{verbatim} (call-with-values (lambda () (new-external-event)) (lambda (uid condvar) (spawn-external-thread uid) (wait-for-external-event condvar) (unregister-external-event-uid! uid) ...)) \end{verbatim} \noindent{}Here, \code{new-external-event} returns a fresh event identifier and a fresh condition variable. The event identifier is passed to \code{spawn-external-thread} and the condition variable is used to wait for the occurrence of the external event. External code uses \code{s48\_note\_external\_event} to push the fact that an external event occurred into the main event loop, then the Scheme code needs to pull the actual event data from external code (in this example with \code{get-external-events}). The user-written function \code{spawn-external-thread} runs the external code that informs the Scheme side about the occurrence of external events. The event identifier is passed as an argument. The external-event-related parts of the implementation of \code{spawn-external-thread} in external code could look like this: \begin{verbatim} s48_ref_t spawn_external_thread(s48_call_t call, s48_ref_t sch_event_uid) { ... s48_note_external_event(s48_extract_long_2(call, sch_event_uid)); ... } \end{verbatim} \noindent{}The event identifier is extracted from its Scheme representation and used to inform the Scheme side about an occurrence of this specific event type. \section{Unsafe functions and macros} All of the C procedures and macros described above check that their arguments have the appropriate types and that indexes are in range. The following procedures and macros are identical to those described above, except that they do not perform type and range checks. They are provided for the purpose of writing more efficient code; their general use is not recommended. \begin{protos} \cproto{long \ \ \ \ \ s48\_unsafe\_extract\_char\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_unsafe\_enter\_char\_2(s48\_call\_t, long)} \cproto{long \ \ \ \ \ s48\_unsafe\_extract\_integer\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_unsafe\_extract\_double\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{long \ \ \ \ \ s48\_unsafe\_extract\_fixnum\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_unsafe\_enter\_fixnum\_2(s48\_call\_t, long)} \end{protos} \begin{protos} \cproto{s48\_ref\_t s48\_unsafe\_car\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_unsafe\_cdr\_2(s48\_call\_t, s48\_ref\_t)} \cproto{void \ \ \ \ \ s48\_unsafe\_set\_car\_2(s48\_call\_t, s48\_ref\_t, s48\_ref\_t)} \cproto{void \ \ \ \ \ s48\_unsafe\_set\_cdr\_2(s48\_call\_t, s48\_ref\_t, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{long \ \ \ \ \ s48\_unsafe\_vector\_length\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_unsafe\_vector\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_unsafe\_vector\_set\_2(s48\_call\_t, s48\_ref\_t, long, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{long \ \ \ \ \ s48\_unsafe\_string\_length\_2(s48\_call\_t, s48\_ref\_t)} \cproto{char \ \ \ \ \ s48\_unsafe\_string\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_unsafe\_string\_set\_2(s48\_call\_t, s48\_ref\_t, long, char)} \end{protos} \begin{protos} \cproto{s48\_ref\_t s48\_unsafe\_symbol\_to\_string\_2(s48\_call\_t, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{char * \ \ \ s48\_unsafe\_extract\_byte\_vector\_2(s48\_call\_t, s48\_ref\_t)} \cproto{long \ \ \ \ \ s48\_unsafe\_byte\_vector\_length\_2(s48\_call\_t, s48\_ref\_t)} \cproto{char \ \ \ \ \ s48\_unsafe\_byte\_vector\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_unsafe\_byte\_vector\_set\_2(s48\_call\_t, s48\_ref\_t, long, int)} \end{protos} Additionally to not performing type checks, the pointer returned by \code{s48\_unsafe\_extract\_byte\_vector\_2} will likely become invalid when a garbage collection occurs. See section\ref{sec:byte-vectors} on how the interface deals with byte vectors in a proper way. \begin{protos} \cproto{s48\_ref\_t s48\_unsafe\_shared\_binding\_ref\_2(s48\_call\_t, s48\_ref\_t s\_b)} \cproto{int\ \ \ \ \ \ \ s48\_unsafe\_shared\_binding\_p\_2(s48\_call\_t, x)} \cproto{int\ \ \ \ \ \ \ s48\_unsafe\_shared\_binding\_is\_import\_p\_2(s48\_call\_t, s48\_ref\_t s\_b)} \cproto{s48\_ref\_t s48\_unsafe\_shared\_binding\_name\_2(s48\_call\_t, s48\_ref\_t s\_b)} \cproto{void\ \ \ \ \ \ s48\_unsafe\_shared\_binding\_set\_2(s48\_call\_t, s48\_ref\_t s\_b, s48\_ref\_t value)} \end{protos} \begin{protos} \cproto{s48\_ref\_t s48\_unsafe\_record\_type\_2(s48\_call\_t, s48\_ref\_t)} \cproto{s48\_ref\_t s48\_unsafe\_record\_ref\_2(s48\_call\_t, s48\_ref\_t, long)} \cproto{void \ \ \ \ \ s48\_unsafe\_record\_set\_2(s48\_call\_t, s48\_ref\_t, long, s48\_ref\_t)} \end{protos} \begin{protos} \cproto{type \ \ \ \ \ s48\_unsafe\_extract\_value\_2(s48\_call\_t, s48\_ref\_t, type)} \cproto{type * \ \ \ s48\_unsafe\_extract\_value\_pointer\_2(s48\_call\_t, s48\_ref\_t, type)} \cproto{void \ \ \ \ \ s48\_unsafe\_set\_value\_2(s48\_call\_t, s48\_ref\_t, type, value)} \end{protos} \section{Converting external code to the new foreign-function interface} \label{sec:gcprotect-conversion-recipe} It is straightforward to convert external code from the old foreign-function interface to the new foreign-function interface: \begin{itemize} \item Converting functions: \begin{itemize} \item Add \code{s48\_call call} as a first argument to every function prototype that returns or accepts a \code{s48\_value}. \item Replace every \code{s48\_value} type in the function prototype and the body with \code{s48\_ref\_t}. \item Add \code{call} as the first argument to every function call that returns or accepts a Scheme object. \item Remove all the \code{GCPROTECT}-related code (i.e. \code{GCPROTECT} and \code{UNPROTECT}). \end{itemize} \item Converting global (static) variables: \begin{itemize} \item Replace \code{s48\_value} type of the global variable with \code{s48\_ref\_t}, initialize these variables with \code{NULL}. \item Set a real Scheme object in the initialization function of your code with one of these alternatives: \begin{itemize} \item Use \code{s48\_make\_global\_ref} to convert a \code{s48\_value} to a global reference. For details and an example see section~\ref{sec:global-references}. \item Use \code{s48\_local\_to\_global\_ref} to convert a local reference object to a global one. \item If your global variable is supposed to hold a shared binding (e.g. an record type binding), you can use \code{s48\_get\_imported\_binding\_2} that returns a global reference. \end{itemize} \item Replace \code{S48\_GC\_PROTECT\_GLOBAL} with \code{s48\_local\_to\_global\_ref} to convert a local reference object to a global one. \item Use \code{s48\_free\_global\_ref} to cleanup global references when appropriate. \end{itemize} \end{itemize} \noindent{}If you add \verb|#define NO_OLD_FFI 1| just above \verb|#include | in your source code file, it will hide all the macros and prototype definitions of the old foreign-function interface. That way you can make sure that you are only using the new interface and the C compiler will remind you if you don't. %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/hacks.tex000644 004306 005702 00000002763 12067075540 017205 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber \texonly \newcommand{\meta}[1]{{\noindent\mbox{\textrm{$\langle$#1$\rangle$}}}} \endtexonly \htmlonly \newcommand{\meta}[1]{$<$#1$>$} \endhtmlonly \newcommand{\hyper}[1]{\meta{#1}} \newcommand{\hyperi}[1]{\hyper{#1$_1$}} \newcommand{\hyperii}[1]{\hyper{#1$_2$}} \newcommand{\hyperj}[1]{\hyper{#1$_i$}} \newcommand{\hypern}[1]{\hyper{#1$_n$}} \texonly \newcommand{\var}[1]{\noindent\mbox{\textnormal{\textit{#1}}}} \endtexonly \htmlonly \newcommand{\var}[1]{\textnormal{\textit{#1}}} \endhtmlonly \newcommand{\vari}[1]{\var{#1$_1$}} \newcommand{\varii}[1]{\var{#1$_2$}} \newcommand{\variii}[1]{\var{#1$_3$}} \newcommand{\variv}[1]{\var{#1$_4$}} \newcommand{\varj}[1]{\var{#1$_j$}} \newcommand{\varn}[1]{\var{#1$_n$}} \newcommand{\defining}[1]{{\emph{#1}}} \newcommand{\exprtype}{syntax} \newcommand{\dotsfoo}{\ldots\texonly{\thinspace}\endtexonly} \let\code=\texttt \newcommand{\goesto}{% \texonly{\hbox{$\longrightarrow$}}\endtexonly% \htmlonly{\code{-->}}\endhtmlonly% } \newcommand{\xform}{% \texonly{\hbox{$\Longrightarrow$}}\endtexonly% \htmlonly{\code{--->}}\endhtmlonly% } \newcommand{\arbno}[1]{{{#1}$^*$}} \newcommand{\hack}{Scheme~48} \newcommand{\alt}{$\vert$} \newcommand{\ok}{\discretionary{}{}{}} \newcommand{\syn}[1]{{\noindent\mbox{\textrm{$\langle$#1$\rangle$}}}} \newenvironment{example}{\begin{alltt}}{\end{alltt}} \newcommand{\ob}{\char"7B} \newcommand{\cb}{\char"7D}scheme48-1.9/doc/src/intro.tex000644 004306 005702 00000002610 12067075540 017236 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Robert Ransom \chapter{Introduction} Scheme~48 is an implementation of the Scheme programming language as described in the Revised$^5$ Report on the Algorithmic Language Scheme~\cite{R5RS}. It is based on a compiler and interpreter for a virtual Scheme machine. Scheme~48 tries to be faithful to the Revised$^5$ Scheme Report, providing neither more nor less in the initial user environment. (This is not to say that more isn't available in other environments; see below.) Scheme~48 is under continual development. Please report bugs, especially in the VM, especially core dumps, to scheme-48-bugs@s48.org. Include the version number x.yy from the "Welcome to Scheme~48 x.yy" greeting message in your bug report. It is a goal of this project to produce a bullet-proof system; we want no bugs and, especially, no crashes. (There are a few known bugs, listed in the {\tt doc/todo.txt} file that comes with the distribution.) Send a message to scheme-48-request@s48.org with subject `subscribe' to be put on a mailing list for announcements, discussion, bug reports, and bug fixes. The name `Scheme~48' commemorates our having written the original version in forty-eight hours, on August 6th and 7th, 1986. %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/manual-Z-G-D-1.tex000644 004306 005702 00000000212 12074535600 020262 0ustar00sperberPUStaff000000 000000 \documentclass{report} \ifx\bmatrix\UNDEFINED\usepackage{amsmath}\fi \thispagestyle{empty} \begin{document} \bf.\par.\par.\end{document} scheme48-1.9/doc/src/manual.tex000644 004306 005702 00000010142 12067075540 017357 0ustar00sperberPUStaff000000 000000 % Scheme 48 documentation % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber \documentclass[twoside]{report} \usepackage{tex2page} \usepackage{longtable} \usepackage{alltt} \usepackage{makeidx} \usepackage{matter} \usepackage{ifpdf} \usepackage[latin1]{inputenc} \input{myindex} \input{proto} \input{hacks} \makeindex % \includeonly{module} \let\url\relax \ifpdf \usepackage[pdftex,hyperindex, pdftitle={The Incomplete Scheme 48 Reference Manual}, pdfauthor={Richard Kelsey, Jonathan Rees, Mike Sperber, Marcus Crestani, Robert Ransom, Roderic Morris, Marcel Turino, Martin Gasbichler}, colorlinks=true,linkcolor=blue,pagecolor=blue,urlcolor=blue, pdfstartview=FitH,pdfview=FitH]{hyperref} \usepackage{thumbpdf} \usepackage{tocbibind} \else \usepackage[dvipdfm,hyperindex,hypertex, pdftitle={The Incomplete Scheme 48 Reference Manual}, pdfauthor={Richard Kelsey, Jonathan Rees, Mike Sperber Mike Sperber, Marcus Crestani, Robert Ransom, Roderic Morris, Marcel Turino, Martin Gasbichler}, colorlinks=true,linkcolor=blue,pagecolor=blue,urlcolor=blue, pdfstartview=FitH,pdfview=FitH]{hyperref} \fi \endtexonly %%% End preamble \begin{document} \frontmatter \label{top_node} \texonly \title{{\large The Incomplete} \\ Scheme 48 Reference Manual \\ {\large for release \input{version-number}}} \endtexonly \htmlonly \title{The Incomplete Scheme 48 Reference Manual for release \input{version-number}} \endhtmlonly \author{Richard Kelsey \and Jonathan Rees \and Mike Sperber \and Marcus Crestani \and Robert Ransom \and Roderic Morris \and Marcel Turino \and Martin Gasbichler} \date{} \maketitle \begin{verse} A line may take us hours, yet if it does not seem a moment's thought \\ All our stitching and unstitching has been as nought. \end{verse} \texonly \begin{tabbing} A line may take us hours, yet if it does not seem\= \kill \> Yeats \\ \> {\em Adam's Curse} \end{tabbing} \endtexonly \htmlonly \begin{tabular}{ll} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ & Yeats \\ & {\em Adam's Curse} \end{tabular} \endhtmlonly \chapter*{Acknowledgements} Thanks to Scheme~48's users for their suggestions, bug reports, and forbearance. Thanks also to Deborah Tatar for providing the Yeats quotation. \begin{verbatim} Copyright © 1986-2001 Richard Kelsey and Jonathan Rees. Copyright © 1993-2001 Richard Kelsey. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notices, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notices, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \end{verbatim} \tableofcontents \texonly \cleardoublepage\pagenumbering{arabic}\setcounter{page}{1} \endtexonly \mainmatter \include{intro} \include{user-guide} \include{command} \include{module} \include{utilities} \include{unicode} \include{thread} \include{external} \include{posix} \include{bibliography} \backmatter \printindex \end{document} scheme48-1.9/doc/src/module.tex000644 004306 005702 00000104116 12067075540 017374 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Robert Ransom \chapter{Module system} \label{chapter:modules} This chapter describes Scheme~48's module system. The module system is unique in the extent to which it supports both static linking and rapid turnaround during program development. The design was influenced by Standard ML modules\cite{MacQueen:Modules} and by the module system for Scheme Xerox\cite{Curtis-Rauen:Modules}. It has also been shaped by the needs of \hack{}, which is designed to run both on workstations and on relatively small (less than 1 Mbyte) embedded controllers. Except where noted, everything described here is implemented in \hack{}, and exercised by the \hack{} implementation and some application programs. Unlike the Common Lisp package system, the module system described here controls the mapping of names to denotations, not the mapping of strings to symbols. \section{Introduction} The module system supports the structured division of a corpus of Scheme software into a set of modules. Each module has its own isolated namespace, with visibility of bindings controlled by module descriptions written in a special {\em configuration language.} A module may be instantiated multiple times, producing several {\em packages}, just as a lambda-expression can be instantiated multiple times to produce several different procedures. Since single instantiation is the normal case, we will defer discussion of multiple instantiation until a later section. For now you can think of a package as simply a module's internal environment mapping names to denotations. A module exports bindings by providing views onto the underlying package. Such a view is called a {\em structure} (terminology from Standard ML). One module may provide several different views. A structure is just a subset of the package's bindings. The particular set of names whose bindings are exported is the structure's {\em interface}. A module imports bindings from other modules by either {\em opening} or {\em accessing} some structures that are built on other packages. When a structure is opened, all of its exported bindings are visible in the client package. %On the other hand, bindings from an accessed %structure require explicitly qualified references written with the %{\tt structure-ref} operator (see below). For example: \begin{example} (define-structure foo (export a c cons) (open scheme) (begin (define a 1) (define (b x) (+ a x)) (define (c y) (* (b a) y)))) (define-structure bar (export d) (open scheme foo) (begin (define (d w) (+ a (c w))))) \end{example} This configuration defines two structures, {\tt foo} and {\tt bar}. {\tt foo} is a view on a package in which the {\tt scheme} structure's bindings (including {\tt define} and {\tt +}) are visible, together with bindings for {\tt a}, {\tt b}, and {\tt c}. {\tt foo}'s interface is {\tt (export a c cons)}, so of the bindings in its underlying package, {\tt foo} only exports those three. Similarly, structure {\tt bar} consists of the binding of {\tt d} from a package in which both {\tt scheme}'s and {\tt foo}'s bindings are visible. {\tt foo}'s binding of {\tt cons} is imported from the Scheme structure and then re-exported. A module's body, the part following {\tt begin} in the above example, is evaluated in an isolated lexical scope completely specified by the package definition's {\tt open} and {\tt access} clauses. In particular, the binding of the syntactic operator {\tt define-structure} is not visible unless it comes from some opened structure. Similarly, bindings from the {\tt scheme} structure aren't visible unless they become so by {\tt scheme} (or an equivalent structure) being opened. \section{The configuration language} %\renewcommand{\topfraction}{0.8} The configuration language consists of top-level defining forms for modules and interfaces. Its syntax is given in figure~\ref{module-language-figure}. \texonly\setbox0\hbox{\goesto}\endtexonly \texonly\newcommand{\altz}{\hbox to 1\wd0{\hfil\alt}}\endtexonly \htmlonly\newcommand{\altz}{\goesto}\endhtmlonly \begin{figure}[htb] \begin{tabular}{l} \syn{configuration} \goesto{}~\arbno{\syn{definition}} \\ \begin{tabular}{rl} \syn{definition} \goesto{} & \tt(define-structure \syn{name} \syn{interface} \arbno{\syn{clause}}) \\ \altz{} & \tt(define-structures (\arbno{(\syn{name} \syn{interface})}) \arbno{\syn{clause}}) \\ \altz{} & \tt(define-interface \syn{name} \syn{interface}) \\ \altz{} & \tt(define-syntax \syn{name} \syn{transformer-spec}) \end{tabular} \\ \begin{tabular}{rl} \syn{clause} \goesto{} & \tt(open \arbno{\syn{structure}}) \\ \altz{} & \tt(access \arbno{\syn{name}}) \\ \altz{} & \tt(begin \syn{program}) \\ \altz{} & \tt(files \arbno{\syn{filespec}}) \\ \altz{} & \tt(optimize \arbno{\syn{optimize-spec}}) \\ \altz{} & \tt(for-syntax \arbno{\syn{clause}}) \end{tabular} \\ \begin{tabular}{rl} \syn{interface} \goesto{} & \tt(export \arbno{\syn{item}}) \\ \altz{} & \syn{name} \\ \altz{} & \tt(compound-interface \arbno{\syn{interface}}) \end{tabular} \\ \begin{tabular}{rl} \syn{item} \goesto{}~ \syn{name} \\ \altz{} & \tt(\syn{name} \syn{type}) \\ \altz{} & \tt((\arbno{\syn{name}}) \syn{type}) \end{tabular} \\ \begin{tabular}{rl} \syn{structure} \goesto{} & \syn{name} \\ \altz{} & \tt(modify \syn{structure} \arbno{\syn{modifier}}) \\ \altz{} & \tt(subset \syn{structure} (\arbno{\syn{name}})) \\ \altz{} & \tt(with-prefix \syn{structure} \syn{name}) \end{tabular} \\ \begin{tabular}{rl} \syn{modifier} \goesto{} & \tt(expose \arbno{\syn{name}}) \\ \altz{} & \tt(hide \arbno{\syn{name}}) \\ \altz{} & \tt(rename \arbno{(\syn{name}$_0$ \syn{name}$_1$)}) \\ \altz{} & \tt(alias \arbno{(\syn{name}$_0$ \syn{name}$_1$)}) \\ \altz{} & \tt(prefix \syn{name}) \end{tabular} \end{tabular} \caption{The configuration language.} \label{module-language-figure} \end{figure} A \codemainindex{define-structure} form introduces a binding of a name to a structure. A structure is a view on an underlying package which is created according to the clauses of the {\tt define-structure} form. Each structure has an interface that specifies which bindings in the structure's underlying package can be seen via that structure in other packages. An {\tt open} clause specifies which structures will be opened up for use inside the new package. At least one structure must be specified or else it will be impossible to write any useful programs inside the package, since {\tt define}, {\tt lambda}, {\tt cons}, etc.\ will be unavailable. Packages typically include {\tt scheme}, which exports all bindings appropriate to Revised$^5$ Scheme, in an {\tt open} clause. For building structures that export structures, there is a {\tt defpackage} package that exports the operators of the configuration language. Many other structures, such as record and hash table facilities, are also available in the \hack{} implementation. The \codemainindex{modify}, \codemainindex{subset}, and \codemainindex{prefix} forms produce new views on existing structures by renaming or hiding exported names. \code{Subset} returns a new structure that exports only the listed names from its \syn{structure} argument. \code{With-prefix} returns a new structure that adds \syn{prefix} to each of the names exported by the \syn{structure} argument. For example, if structure \code{s} exports \code{a} and \code{b}, then \begin{example} (subset s (a)) \end{example} exports only \code{a} and \begin{example} (with-prefix s p/) \end{example} exports \code{a} as \code{p/a} and \code{b} as \code{p/b}. Both \code{subset} and \code{with-prefix} are simple macros that expand into uses of \code{modify}, a more general renaming form. In a \code{modify} structure specification the \syn{command}s are applied to the names exported by \syn{structure} to produce a new set of names for the \syn{structure}'s bindings. \code{Expose} makes only the listed names visible. \code{Hide} makes all but the listed names visible. \code{Rename} makes each \syn{name}$_0$ visible as \syn{name}$_1$ name and not visible as \syn{name}$_0$ , while \code{alias} makes each \syn{name}$_0$ visible as both \syn{name}$_0$ and \syn{name}$_1$. \code{Prefix} adds \syn{name} to the beginning of each exported name. The modifiers are applied from right to left. Thus \begin{example} (modify scheme (prefix foo/) (rename (car bus)))) \end{example} makes \code{car} available as \code{foo/bus}. % Use modify instead of structure-ref. % %An {\tt access} clause specifies which bindings of names to structures %will be visible inside the package body for use in {\tt structure-ref} %forms. {\tt structure-\ok{}ref} has the following syntax: %\begin{tabbing} %\qquad \syn{expression} \goesto{}~ % \tt(structure-ref \syn{struct-name} \syn{name}) %\end{tabbing} %The \syn{struct-name} must be the name of an {\tt access}ed structure, %and \syn{name} must be something that the structure exports. Only %structures listed in an {\tt access} clause are valid in a {\tt %structure-ref}. If a package accesses any structures, it should %probably open the {\tt structure-refs} structure so that the {\tt %structure-ref} operator itself will be available. The package's body is specified by {\tt begin} and/or {\tt files} clauses. {\tt begin} and {\tt files} have the same semantics, except that for {\tt begin} the text is given directly in the package definition, while for {\tt files} the text is stored somewhere in the file system. The body consists of a Scheme program, that is, a sequence of definitions and expressions to be evaluated in order. In practice, we always use {\tt files} in preference to {\tt begin}; {\tt begin} exists mainly for expository purposes. A name's imported binding may be lexically overridden or {\em shadowed} by defining the name using a defining form such as {\tt define} or {\tt define-\ok{}syntax}. This will create a new binding without having any effect on the binding in the opened package. For example, one can do {\tt(define car 'chevy)} without affecting the binding of the name {\tt car} in the {\tt scheme} package. Assignments (using {\tt set!})\ to imported and undefined variables are not allowed. In order to {\tt set!}\ a top-level variable, the package body must contain a {\tt define} form defining that variable. Applied to bindings from the {\tt scheme} structure, this restriction is compatible with the requirements of the Revised$^5$ Scheme report. It is an error for two of a package's opened structures to export two different bindings for the same name. However, the current implementation does not check for this situation; a name's binding is always taken from the structure that is listed first within the {\tt open} clause. This may be fixed in the future. File names in a {\tt files} clause can be symbols, strings, or lists (Maclisp-style ``namelists''). A ``{\tt.scm}'' file type suffix is assumed. Symbols are converted to file names by converting to upper or lower case as appropriate for the host operating system. A namelist is an operating-system-independent way to specify a file obtained from a subdirectory. For example, the namelist {\tt(rts record)} specifies the file {\tt record.scm} in the {\tt rts} subdirectory. If the {\tt define-structure} form was itself obtained from a file, then file names in {\tt files} clauses are interpreted relative to the directory in which the file containing the {\tt define-structure} form was found. You can't at present put an absolute path name in the {\tt files} list. \section{Interfaces} \codemainindex{define-interface} An interface can be thought of as the type of a structure. In its basic form it is just a list of variable names, written {\tt(export \cvar{name} \ldots)}. However, in place of a name one may write {\tt (\cvar{name} \cvar{type})}, indicating the type of \cvar{name}'s binding. The type field is optional, except that exported macros must be indicated with type {\tt :syntax}. Interfaces may be either anonymous, as in the example in the introduction, or they may be given names by a {\tt define-interface} form, for example \begin{example} (define-interface foo-interface (export a c cons)) (define-structure foo foo-interface \ldots) \end{example} In principle, interfaces needn't ever be named. If an interface had to be given at the point of a structure's use as well as at the point of its definition, it would be important to name interfaces in order to avoid having to write them out twice, with risk of mismatch should the interface ever change. But they don't. Still, there are several reasons to use {\tt define-interface}: \begin{enumerate} \item It is important to separate the interface definition from the package definitions when there are multiple distinct structures that have the same interface --- that is, multiple implementations of the same abstraction. \item It is conceptually cleaner, and often useful for documentation purposes, to separate a module's specification (interface) from its implementation (package). \item Our experience is that configurations that are separated into interface definitions and package definitions are easier to read; the long lists of exported bindings just get in the way most of the time. \end{enumerate} The \codemainindex{compound-interface} operator forms an interface that is the union of two or more component interfaces. For example, \begin{example} (define-interface bar-interface (compound-interface foo-interface (export mumble))) \end{example} defines {\tt bar-interface} to be {\tt foo-interface} with the name {\tt mumble} ad\-ded. \section{Macros} Hygienic macros, as described in \cite{Clinger-Rees:Macros,Clinger-Rees:R4RS}, are implemented. Structures may export macros; auxiliary names introduced into the expansion are resolved in the environment of the macro's definition. For example, the {\tt scheme} structure's {\tt delay} macro is defined by the rewrite rule \begin{example} (delay \cvar{exp}) \xform (make-promise (lambda () \cvar{exp})). \end{example} The variable {\tt make-promise} is defined in the {\tt scheme} structure's underlying package, but is not exported. A use of the {\tt delay} macro, however, always accesses the correct definition of {\tt make-promise}. Similarly, the {\tt case} macro expands into uses of {\tt cond}, {\tt eqv?}, and so on. These names are exported by {\tt scheme}, but their correct bindings will be found even if they are shadowed by definitions in the client package. \section{Higher-order modules} There are {\tt define-module} and {\tt define} forms for defining modules that are intended to be instantiated multiple times. But these are pretty kludgey --- for example, compiled code isn't shared between the instantiations --- so we won't describe them yet. If you must know, figure it out from the following grammar. % \begin{center} \begin{tabular}{rl} \qquad \syn{definition} \goesto{} & \tt(define-module (\syn{name} \arbno{(\syn{name} \syn{interface})}) \\ &\qquad \arbno{\syn{definition}} \\ &\qquad \syn{name}\tt) \\ \altz{} & \tt(define \syn{name} (\syn{name} \arbno{\syn{name}})) \end{tabular} \end{center} % JAR says: Different instantiations of of a module may see different % definitions of macros and inlines. \section{Compiling and linking} \hack{} has a static linker that produces stand-alone heap images from module descriptions. The programmer specifies a particular procedure in a particular structure to be the image's startup procedure (entry point), and the linker traces dependency links as given by {\tt open} and {\tt access} clauses to determine the composition of the heap image. There is not currently any provision for separate compilation; the only input to the static linker is source code. However, it will not be difficult to implement separate compilation. The unit of compilation is one module (not one file). Any opened or accessed structures from which macros are obtained must be processed to the extent of extracting its macro definitions. The compiler knows from the interface of an opened or accessed structure which of its exports are macros. Except for macros, a module may be compiled without any knowledge of the implementation of its opened and accessed structures. However, inter-module optimization may be available as an option. The main difficulty with separate compilation is resolution of auxiliary bindings introduced into macro expansions. The module compiler must transmit to the loader or linker the search path by which such bindings are to be resolved. In the case of the {\tt delay} macro's auxiliary {\tt make-promise} (see example above), the loader or linker needs to know that the desired binding of {\tt make-promise} is the one apparent in {\tt delay}'s defining package, not in the package being loaded or linked. %[I need to describe structure reification.] \section{Semantics of configuration mutation} During program development it is often desirable to make changes to packages and interfaces. In static languages it may be necessary to recompile and re-link a program in order for such changes to be reflected in a running system. Even in interactive Common Lisp implementations, a change to a package's exports often requires reloading clients that have already mentioned names whose bindings change. Once {\tt read} resolves a use of a name to a symbol, that resolution is fixed, so a change in the way that a name resolves to a symbol can only be reflected by re-{\tt read}ing all such references. The \hack{} development environment supports rapid turnaround in modular program development by allowing mutations to a program's configuration, and giving a clear semantics to such mutations. The rule is that variable bindings in a running program are always resolved according to current structure and interface bindings, even when these bindings change as a result of edits to the configuration. For example, consider the following: \begin{example} (define-interface foo-interface (export a c)) (define-structure foo foo-interface (open scheme) (begin (define a 1) (define (b x) (+ a x)) (define (c y) (* (b a) y)))) (define-structure bar (export d) (open scheme foo) (begin (define (d w) (+ (b w) a)))) \end{example} This program has a bug. The variable {\tt b}, which is free in the definition of {\tt d}, has no binding in {\tt bar}'s package. Suppose that {\tt b} was supposed to be exported by {\tt foo}, but was omitted from {\tt foo-interface} by mistake. It is not necessary to re-process {\tt bar} or any of {\tt foo}'s other clients at this point. One need only change {\tt foo-interface} and inform the development system of that change (using, say, an appropriate Emacs command), and {\tt foo}'s binding of {\tt b} will be found when procedure {\tt d} is called. Similarly, it is also possible to replace a structure; clients of the old structure will be modified so that they see bindings from the new one. Shadowing is also supported in the same way. Suppose that a client package $C$ opens a structure {\tt foo} that exports a name {\tt x}, and {\tt foo}'s implementation obtains the binding of {\tt x} as an import from some other structure {\tt bar}. Then $C$ will see the binding from {\tt bar}. If one then alters {\tt foo} so that it shadows {\tt bar}'s binding of {\tt x} with a definition of its own, then procedures in $C$ that reference {\tt x} will automatically see {\tt foo}'s definition instead of the one from {\tt bar} that they saw earlier. This semantics might appear to require a large amount of computation on every variable reference: The specified behavior requires scanning the package's list of opened structures, examining their interfaces, on every variable reference, not just at compile time. However, the development environment uses caching with cache invalidation to make variable references fast. \section{Command processor support} \label{module-commands} While it is possible to use the \hack{} static linker for program development, it is far more convenient to use the development environment, which supports rapid turnaround for program changes. The programmer interacts with the development environment through a {\em command processor}. The command processor is like the usual Lisp read-eval-print loop in that it accepts Scheme forms to evaluate. However, all meta-level operations, such as exiting the Scheme system or requests for trace output, are handled by {\em commands,} which are lexically distinguished from Scheme forms. This arrangement is borrowed from the Symbolics Lisp Machine system, and is reminiscent of non-Lisp debuggers. Commands are a little easier to type than Scheme forms (no parentheses, so you don't have to shift), but more importantly, making them distinct from Scheme forms ensures that programs' namespaces aren't cluttered with inappropriate bindings. Equivalently, the command set is available for use regardless of what bindings happen to be visible in the current program. This is especially important in conjunction with the module system, which puts strict controls on visibility of bindings. The \hack{} command processor supports the module system with a variety of special commands. For commands that require structure names, these names are resolved in a designated configuration package that is distinct from the current package for evaluating Scheme forms given to the command processor. The command processor interprets Scheme forms in a particular current package, and there are commands that move the command processor between different packages. Commands are introduced by a comma ({\tt,}) and end at the end of line. The command processor's prompt consists of the name of the current package followed by a greater-than ({\tt>}). \begin{description} \item \code{,open \arbno{\cvar{structure}}} \\ The {\tt,open} command opens new structures in the current package, as if the package's definition's {\tt open} clause had listed \cvar{structure}. As with {\tt open} clauses the visible names can be modified, as in \begin{example} ,open (subset foo (bar baz)) \end{example} which only makes the \code{bar} and \code{baz} bindings from structure \code{foo} visible. \item \code{,config} \\ The {\tt,config} command sets the command processor's current package to be the current configuration package. Forms entered at this point are interpreted as being configuration language forms, not Scheme forms. \item \code{,config \cvar{command}} \\ This form of the {\tt,config} command executes another command in the current configuration package. For example, \begin{example} ,config ,load foo.scm \end{example} interprets configuration language forms from the file {\tt foo.scm} in the current configuration package. \item \code{,config-package-is \cvar{struct-name}} \\ The {\tt,config-package-is} command designates a new configuration package for use by the {\tt,config} command and resolution of \cvar{struct-name}s for other commands such as {\tt,in} and {\tt,open}. See section~\ref{config-packages} for information on making new configuration packages. \item \code{,in \cvar{struct-name}} \\ The {\tt ,in} command moves the command processor to a specified structure's underlying package. For example: \begin{example} user> ,config config> (define-structure foo (export a) (open scheme)) config> ,in foo foo> (define a 13) foo> a 13 \end{example} In this example the command processor starts in a package called {\tt user}, but the {\tt ,config} command moves it into the configuration package, which has the name {\tt config}. The {\tt define-structure} form binds, in {\tt config}, the name {\tt foo} to a structure that exports {\tt a}. Finally, the command {\tt ,in foo} moves the command processor into structure {\tt foo}'s underlying package. A package's body isn't executed (evaluated) until the package is {\em loaded}, which is accomplished by the {\tt ,load-package} command. \item \code{,in \cvar{struct-name} \cvar{command}} \\ This form of the {\tt,in} command executes a single command in the specified package without moving the command processor into that package. Example: \begin{example} ,in mumble (cons 1 2) ,in mumble ,trace foo \end{example} \item \code{,user [\cvar{command}]} \\ This is similar to the {\tt ,config} and {\tt ,in} commands. It moves to or executes a command in the user package (which is the default package when the \hack{} command processor starts). \item \code{,user-package-is \cvar{name}} \\ The {\tt,user-package-is} command designates a new user package for use by the {\tt,user} command. \item \code{,load-package \cvar{struct-name}} \\ The {\tt,load-package} command ensures that the specified structure's underlying package's program has been loaded. This consists of (1) recursively ensuring that the packages of any opened or accessed structures are loaded, followed by (2) executing the package's body as specified by its definition's {\tt begin} and {\tt files} forms. % (Note that % commands related to packages, such as \code{load-package}, take structures % as arguments. % This is because packages are usually anonymous while structures are % usually named and each has a unique package associated with it.) \item \code{,reload-package \cvar{struct-name}} \\ This command re-executes the structure's package's program. It is most useful if the program comes from a file or files, when it will update the package's bindings after mutations to its source file. \item \code{,load \cvar{filespec} \ldots} \\ The {\tt,load} command executes forms from the specified file or files in the current package. {\tt,load \cvar{filespec}} is similar to {\tt(load "\cvar{filespec}")} except that the name {\tt load} needn't be bound in the current package to Scheme's {\tt load} procedure. \item \code{,for-syntax [\cvar{command}]} \\ This is similar to the {\tt ,config} and {\tt ,in} commands. It moves to or executes a command in the current package's ``package for syntax,'' which is the package in which the forms $f$ in {\tt (define-syntax \cvar{name} \cvar{f})} are evaluated. \item \code{,new-package [\cvar{struct-name} \ldots]} \\ The {\tt,new-package} command creates a new package and moves the command processor to it. With no arguments, only the standard Scheme bindings are visible in the new package. Otherwise, the structures specified as command arguments (and not the \texttt{scheme} structure) are opened in the new package. \item \code{,structure \cvar{name} \cvar{interface}} \\ The {\tt ,structure} command defines \cvar{name} in the configuration package to be a structure with interface \cvar{interface} based on the current package. \end{description} \section{Configuration packages} \label{config-packages} It is possible to set up multiple configuration packages. The default configuration package opens the following structures: \begin{itemize} \item {\tt module-system}, which exports {\tt define-structure} and the other configuration language keywords, as well as standard types and type constructors ({\tt :syntax}, {\tt :value}, {\tt proc}, etc.). \item {\tt built-in-structures}, which exports structures that are built into the initial \hack{} image; these include {\tt scheme}, {\tt threads}, {\tt tables}, and {\tt records}. \item {\tt more-structures}, which exports additional structures that are available in the development environment. A complete listing can be found in the definition of \code{more-structures-interface} at the end of the file \code{scheme/packages.scm}. \end{itemize} Note that it does not open {\tt scheme}. You can define additional configuration packages by making a package that opens {\tt module-\ok{}system} and, optionally, {\tt built-in-\ok{}structures}, {\tt more-\ok{}structures}, or other structures that export structures and interfaces. For example: \begin{example} > ,config (define-structure foo (export) (open module-system built-in-structures more-structures)) > ,in foo foo> (define-structure x (export a b) (open scheme) (files x)) foo> \end{example} Unfortunately, the above example does not work. The problem is that every environment in which \code{define-structure} is used must also have a way to create ``syntactic towers''. A new syntactic tower is required whenever a new environment is created for compiling the source code in the package associated with a new structure. The environment's tower is used at compile time for evaluating the \cvar{macro-source} in \begin{example} (define-syntax \cvar{name} \cvar{macro-source}) (let-syntax ((\cvar{name} \cvar{macro-source}) \ldots) \cvar{body}) \end{example} and so forth. It is a ``tower'' because that environment, in turn, has to say what environment to use if \code{macro-source} itself contains a use of \code{let-syntax}. The simplest way to provide a tower maker is to pass on the one used by an existing configuration package. The special form \code{export-syntactic-tower-maker} creates an interface that exports a configuration package's tower. The following example uses \code{export-syntactic-tower-maker} and the \code{,structure} command to obtain a tower maker and create a new configuration environment. \begin{example} > ,config ,structure t (export-syntactic-tower-maker) > ,config (define-structure foo (export) (open module-system t built-in-structures more-structures)) \end{example} Before \hack{}~1.9, \code{export-syntactic-tower-maker} was named \code{export-reflective-tower-maker}; this name is still supported for backwards compatibility. %Talk about bootstrapping, define-all-operators, and usual-transforms? \section{Discussion} This module system was not designed as the be-all and end-all of Scheme module systems; it was only intended to help us organize the \hack{} system. Not only does the module system help avoid name clashes by keeping different subsystems in different namespaces, it has also helped us to tighten up and generalize \hack{}'s internal interfaces. \hack{} is unusual among Lisp implementations in admitting many different possible modes of operation. Examples of such multiple modes include the following: \begin{itemize} \item Linking can be either static or dynamic. \item The development environment (compiler, debugger, and command processor) can run either in the same address space as the program being developed or in a different address space. The environment and user program may even run on different processors under different operating systems\cite{Rees-Donald:Program}. \item The virtual machine can be supported by either of two implementations of its implementation language, Prescheme. \end{itemize} The module system has been helpful in organizing these multiple modes. By forcing us to write down interfaces and module dependencies, the module system helps us to keep the system clean, or at least to keep us honest about how clean or not it is. The need to make structures and interfaces second-class instead of first-class results from the requirements of static program analysis: it must be possible for the compiler and linker to expand macros and resolve variable bindings before the program is executed. Structures could be made first-class (as in FX\cite{Sheldon-Gifford:Static}) if a type system were added to Scheme and the definitions of exported macros were defined in interfaces instead of in module bodies, but even in that case types and interfaces would remain second-class. The prohibition on assignment to imported bindings makes substitution a valid optimization when a module is compiled as a block. The block compiler first scans the entire module body, noting which variables are assigned. Those that aren't assigned (only {\tt define}d) may be assumed never assigned, even if they are exported. The optimizer can then perform a very simple-minded analysis to determine automatically that some procedures can and should have their calls compiled in line. The programming style encouraged by the module system is consistent with the unextended Scheme language. Because module system features do not generally show up within module bodies, an individual module may be understood by someone who is not familiar with the module system. This is a great aid to code presentation and portability. If a few simple conditions are met (no name conflicts between packages, and use of {\tt files} in preference to {\tt begin}), then a multi-module program can be loaded into a Scheme implementation that does not support the module system. The \hack{} static linker satisfies these conditions, and can therefore run in other Scheme implementations. \hack{}'s bootstrap process, which is based on the static linker, is therefore nonincestuous. This contrasts with most other integrated programming environments, such as Smalltalk-80, where the system can only be built using an existing version of the system itself. Like ML modules, but unlike Scheme Xerox modules, this module system is compositional. That is, structures are constructed by single syntactic units that compose existing structures with a body of code. In Scheme Xerox, the set of modules that can contribute to an interface is open-ended --- any module can contribute bindings to any interface whose name is in scope. The module system implementation is a cross-bar that channels definitions from modules to interfaces. The module system described here has simpler semantics and makes dependencies easier to trace. It also allows for higher-order modules, which Scheme Xerox considers unimportant. %[Discuss use of module system in the \hack{} implementation? Maybe %give an extended excerpt from \hack{}'s configuration files?] % %[Discuss OPTIMIZE clause.] % %[Future work: ideas for anonymous structures and more of a module %calculus; dealing with name conflicts; interface subtraction.] %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/myindex.tex000644 004306 005702 00000000564 12067075540 017566 0ustar00sperberPUStaff000000 000000 %% %% Manual index. %% % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Mike Sperber \newcommand{\mainschindex}[1]{\index{#1@\texttt{#1}}} \newcommand{\mainindex}[1]{\index{#1}} \newcommand{\schindex}[1]{\index{#1@\texttt{#1}}} \newcommand{\codemainindex}[1]{\mainschindex{#1}\code{#1}} \newcommand{\codeindex}[1]{\schindex{#1}\code{#1}} scheme48-1.9/doc/src/posix.tex000644 004306 005702 00000167621 12067075540 017263 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Robert Ransom, % Roderic Morris \chapter{Access to POSIX} This chapter describes Scheme~48's interface to the POSIX C calls \cite{POSIX}. Scheme versions of most of the functions in POSIX are provided. Both the interface and implementation are new and are likely to change in future releases. Section~\ref{function-correspondence} lists which Scheme functions call which C functions. Scheme~48's POSIX interface will likely change significantly in the future. The implementation is new and may have significant bugs. The POSIX bindings are available in several structures: \begin{center} \begin{tabular}{ll} \code{posix-processes} & fork, exec, and friends \\ \code{posix-process-data} & information about processes \\ \code{posix-files} & files and directories \\ \code{posix-i/o} & operations on ports \\ \code{posix-time} & time functions \\ \code{posix-users} & users and groups \\ \code{posix-regexps} & regular expression matching \\ \code{posix-syslog} & POSIX logging facility \\ \code{posix-errnos} & POSIX error codes\\ \code{posix} & all of the above \end{tabular} \end{center} Scheme~48's POSIX interface differs from Scsh's \cite{Shivers:Scsh-manual,Shivers:Scsh96} in several ways. The interface here lacks Scsh's high-level constructs and utilities, such as the process notation, \code{awk} procedure, and parsing utilities. Scheme~48 uses distinct types for some values that Scsh leaves as symbols or unboxed integers; these include file types, file modes, and user and group ids. Many of the names and other interface details are different, as well. \section{Process primitives} The procedures described in this section control the creation of processes and the execution of programs. They are in the structures \code{posix-process} and \code{posix}. \subsection{Process creation and termination} \label{processes} \begin{protos} \proto{fork}{}{process-id or {\tt \#f}} \protonoresult{fork-and-forget}{ thunk} % Handler versions? \end{protos} \noindent \code{Fork} creates a new child process and returns the child's process-id in the parent and \code{\#f} in the child. \code{Fork-and-forget} calls \cvar{thunk} in a new process; no process-id is returned. \code{Fork-and-forget} uses an intermediate process to avoid creating a zombie process. \begin{protos} \proto{process-id?}{ x}{boolean} \proto{process-id=?}{ process-id0 process-id1}{boolean} \proto{process-id->integer}{ process-id}{integer} \proto{integer->process-id}{ integer}{process-id} \end{protos} \noindent %A \cvar{process-id} is a around the actual integer id. \code{Process-id?} is a predicate for process-ids, \code{process-id=?} compares two to see if they are the same, and \code{process-id-uid} returns the actual Unix id. \code{Process-id->integer} and \code{integer->process-id} convert process ids to and from integers. \begin{protos} \proto{process-id-exit-status}{ process-id}{integer or {\tt \#f}} \proto{process-id-terminating-signal}{ process-id}{signal or {\tt \#f}} \protonoresult{wait-for-child-process}{ process-id} \end{protos} \noindent If a process terminates normally \code{process-id-exit-status} will return its exit status. If the process is still running or was terminated by a signal then \code{process-id-exit-status} will return \code{\#f}. Similarly, if a child process was terminated by a signal \code{process-id-terminating-signal} will return that signal and will return \code{\#f} if the process is still running or terminated normally. \code{Wait-for-child-process} blocks until the child process terminates. Scheme~48 may reap child processes before the user requests their exit status, but it does not always do so. \begin{protos} \protonoresult{exit}{ status} \end{protos} \noindent Terminates the current process with the integer \cvar{status} as its exit status. \subsection{{\tt Exec}} \begin{protos} \protonoresult{exec}{ program-name arg0 \ldots} \protonoresult{exec-with-environment}{ program-name env arg0 \ldots} \protonoresult{exec-file}{ filename arg0 \ldots} \protonoresult{exec-file-with-environment}{ filename env arg0 \ldots} \protonoresult{exec-with-alias}{ name lookup? maybe-env arguments} \end{protos} \noindent All of these replace the current program with a new one. They differ in how the new program is found, what its environment is, and what arguments it is passed. \code{Exec} and \code{exec-with-environment} look up the new program in the search path, while \code{exec-file} and \code{exec-file-with-environment} execute a particular file. The environment is either inherited from the current process (\code{exec} and \code{exec-file}) or given as an argument (\code{\ldots{}-with-environment}). \cvar{Program-name} and \cvar{filename} and any \cvar{arg$_i$} should be \var{os-string-thing} arguments (see section~\ref{os-strings}. \cvar{Env} should be a list of \var{os-string-thing} arguments of the form \code{"\cvar{name}=\cvar{value}"}. The first four procedures add their first argument, \cvar{program-name} or \cvar{filename}, before the \cvar{arg0 \ldots} arguments. \code{Exec-with-alias} is an omnibus procedure that subsumes the other four. \cvar{Name} is looked up in the search path if \cvar{lookup?} is true and is used as a filename otherwise. \cvar{Maybe-env} is either a list of \var{os-string-thing}s for the environment of the new program or \code{\#f} in which case the new program inherits its environment from the current one. \cvar{Arguments} should be a list of \var{os-string-thing}s; unlike with the other four procedures, \cvar{name} is not added to this list (hence \code{-with-alias}). \section{Signals} There are two varieties of signals available, {\em named} and {\em anonymous}. A named signal is one for which we have a symbolic name, such as \code{kill} or \code{pipe}. Anonymous signals, for which we only have the current operating system's signal number, have no meaning in other operating systems. Named signals preserve their meaning in image files. Not all named signals are available from all OS's and there may be multiple names for a single OS signal number. \begin{protos} \syntaxproto{signal}{ \cvar{signal-name}}{signal} \proto{name->signal}{ symbol}{signal or {\tt \#f}} \proto{integer->signal}{ integer}{signal} \proto{signal?}{ x}{boolean} \proto{signal-name}{ signal}{symbol or {\tt \#f}} \proto{signal-os-number}{ signal}{integer} \proto{signal=?}{ signal0 signal1}{boolean} \end{protos} \noindent The syntax \code{signal} returns a (named) signal associated with \cvar{signal-name}. \code{Name->signal} returns a (named) signal or \code{\#f} if the the signal \cvar{name} is not supported by the operating system. The signal returned by \code{integer->signal} is a named signal if \cvar{integer} corresponds to a named signal in the current operating system; otherwise it returns an anonymous signal. \code{Signal-name} returns a symbol if \cvar{signal} is named and \code{\#f} if it is anonymous. \code{Signal=?} returns \code{\#t} if \cvar{signal0} and \cvar{signal1} have the same operating system number and \code{\#f} if they do not. \subsection{POSIX signals} The following lists the names of the POSIX signals. \begin{center} \begin{tabular}{ll} \code{abrt} & abort - abnormal termination (as by abort()) \\ \code{alrm} & alarm - timeout signal (as by alarm()) \\ \code{fpe } & floating point exception \\ \code{hup } & hangup - hangup on controlling terminal or death of controlling process \\ \code{ill } & illegal instruction \\ \code{int } & interrupt - interaction attention \\ \code{kill} & kill - termination signal, cannot be caught or ignored \\ \code{pipe} & pipe - write on a pipe with no readers \\ \code{quit} & quit - interaction termination \\ \code{segv} & segmentation violation - invalid memory reference \\ \code{term} & termination - termination signal \\ \code{usr1} & user1 - for use by applications \\ \code{usr2} & user2 - for use by applications \\ \code{chld} & child - child process stopped or terminated \\ \code{cont} & continue - continue if stopped \\ \code{stop} & stop - cannot be caught or ignored \\ \code{tstp} & interactive stop \\ \code{ttin} & read from control terminal attempted by background process \\ \code{ttou} & write to control terminal attempted by background process \\ \code{bus } & bus error - access to undefined portion of memory \\ \end{tabular} \end{center} \subsection{Other signals} The following lists the names of the non-POSIX signals that the system is currently aware of. \begin{center} \texonly \setlongtables \begin{longtable}{ll} \endtexonly \htmlonly\begin{tabular}{ll}\endhtmlonly \code{trap } & trace or breakpoint trap \\ \code{iot } & IOT trap - a synonym for ABRT \\ \code{emt } & \\ \code{sys } & bad argument to routine (SVID) \\ \code{stkflt} & stack fault on coprocessor \\ \code{urg } & urgent condition on socket (4.2 BSD) \\ \code{io } & I/O now possible (4.2 BSD) \\ \code{poll } & A synonym for SIGIO (System V) \\ \code{cld } & A synonym for SIGCHLD \\ \code{xcpu } & CPU time limit exceeded (4.2 BSD) \\ \code{xfsz } & File size limit exceeded (4.2 BSD) \\ \code{vtalrm} & Virtual alarm clock (4.2 BSD) \\ \code{prof } & Profile alarm clock \\ \code{pwr } & Power failure (System V) \\ \code{info } & A synonym for SIGPWR \\ \code{lost } & File lock lost \\ \code{winch } & Window resize signal (4.3 BSD, Sun) \\ \code{unused} & Unused signal \\ \texonly\end{longtable}\endtexonly \htmlonly\end{tabular}\endhtmlonly \end{center} \subsection{Sending signals} \begin{protos} \protonoresult{signal-process}{ process-id signal} \end{protos} \noindent Send \cvar{signal} to the process corresponding to \cvar{process-id}. \subsection{Receiving signals} Signals received by the Scheme process can be obtained via one or more signal-queues. Each signal queue has a list of monitored signals and a queue of received signals that have yet to be read from the signal-queue. When the Scheme process receives a signal that signal is added to the received-signal queues of all signal-queues which are currently monitoring that particular signal. \begin{protos} \proto{make-signal-queue}{ signals}{signal-queue} \proto{signal-queue?}{ x}{boolean} \proto{signal-queue-monitored-signals}{ signal-queue}{list of signals} \protonoindex{dequeue-signal!}{ signal-queue}{signal}\mainschindex{dequeue-signal"!} \protonoindex{maybe-dequeue-signal!}{ signal-queue}{signal or {\tt \#f}}\mainschindex{maybe-dequeue-signal"!} \end{protos} \noindent \code{Make-signal-queue} returns a new signal-queue that will monitor the signals in the list \cvar{signals}. \code{Signal-queue?} is a predicate for signal queues. \code{Signal-queue-monitored-signals} returns a list of the signals currently monitored by \cvar{signal-queue}. \code{Dequeue-signal!} and \code{maybe-dequeue-signal} both return the next received-but-unread signal from \cvar{signal-queue}. If \cvar{signal-queue}'s queue of signals is empty \code{dequeue-signal!} blocks until an appropriate signal is received. \code{Maybe-dequeue-signal!} does not block; it returns \code{\#f} instead. There is a bug in the current system that causes an erroneous deadlock error if threads are blocked waiting for signals and no other threads are available to run. A work around is to create a thread that sleeps for a long time, which prevents any deadlock errors (including real ones): \begin{example} > ,open threads > (spawn (lambda () ; Sleep for a year (sleep (* 1000 60 60 24 365)))) \end{example} \begin{protos} \protonoresultnoindex{add-signal-queue-signal!}{ signal-queue signal}\mainschindex{add-signal-queue-signal"!} \protonoresultnoindex{remove-signal-queue-signal!}{ signal-queue signal}\mainschindex{remove-signal-queue-signal"!} \end{protos} \noindent These two procedures can be used to add or remove signals from a signal-queue's list of monitored signals. When a signal is removed from a signal-queue's list of monitored signals any occurances of the signal are removed from that signal-queue's pending signals. In other words, \code{dequeue-signal!} and \code{maybe-dequeue-signal!} will only return signals that are currently on the signal-queue's list of signals. \section{Process environment} These are in structures \code{posix-process-data} and \code{posix}. \subsection{Process identification} \begin{protos} \proto{get-process-id}{}{ process-id} \proto{get-parent-process-id}{}{ process-id} \end{protos} \noindent These return the process ids of the current process and its parent. See section~\ref{processes} for operations on process ids. \begin{protos} \proto{get-user-id}{}{ user-id} \proto{get-effective-user-id}{}{ user-id} \protonoresultnoindex{set-user-id!}{ user-id}\mainschindex{set-user-id"!} \protonoresultnoindex{set-effective-user-id!}{ user-id}\mainschindex{set-effective-user-id"!} \end{protos} \begin{protos} \proto{get-group-id}{}{ group-id} \proto{get-effective-group-id}{}{ group-id} \protonoresultnoindex{set-group-id!}{ group-id}\mainschindex{set-group-id"!} \protonoresultnoindex{set-effective-group-id!}{ group-id}\mainschindex{set-effective-group-id"!} \end{protos} \noindent Every process has both the original and effective user id and group id. The effective values may be set, but the original ones can only be set if the process has appropriate privelages. \begin{protos} \proto{get-groups}{}{ group-ids} \proto{get-login-name}{}{ os-string} \end{protos} \noindent \code{Get-groups} returns a list of the supplementary groups of the current process. \code{Get-login-name} returns a user name for the current process. % 4.5 Get Process Times % 4.6 Environment Variables \subsection{Environment variables} \begin{protos} \proto{lookup-environment-variable}{ os-string-thing}{os-string or {\tt \#f}} \protonoresultnoindex{set-environment-variable!}{ name value} \mainschindex{set-environment-variable"!} \proto{environment-alist}{}{alist} \end{protos} \noindent \code{Lookup-environment-variable} looks up its argument in the environment list and returns the corresponding value or \code{\#f} if there is none. \code{Set-environment-variable!} sets the value of \code{name} in the environment list to \code{value}. If \code{name} is not already an environment variable, it's created. If it already exists, its value is overwritten with \code{value}. Both arguments must be os-string-things. \code{Environment-alist} returns the entire environment as a list of \code{(\cvar{name-os-string} . \cvar{value-os-string})} pairs. \section{Users and groups} \cvar{User-id}\/s and \cvar{group-id}\/s are boxed integers representing Unix users and groups. The procedures in this section are in structures \code{posix-users} and \code{posix}. \begin{protos} \proto{user-id?}{ x}{boolean} \proto{user-id=?}{ user-id0 user-id1}{boolean} \proto{user-id->integer}{ user-id}{integer} \proto{integer->user-id}{ integer}{user-id} \end{protos} \begin{protos} \proto{group-id?}{ x}{boolean} \proto{group-id=?}{ group-id0 group-id1}{boolean} \proto{group-id->integer}{ group-id}{integer} \proto{integer->group-id}{ integer}{group-id} \end{protos} \noindent User-ids and group-ids have their own own predicates and comparison, boxing, and unboxing functions. \begin{protos} \proto{user-id->user-info}{ user-id}{user-info} \proto{name->user-info}{ os-string}{user-info} \end{protos} \noindent These return the user info for a user identified by user-id or name. \begin{protos} \proto{user-info?}{ x}{ boolean} \proto{user-info-name}{ user-info}{ os-string} \proto{user-info-id}{ user-info}{ user-id} \proto{user-info-group}{ user-info}{ group-id} \proto{user-info-home-directory}{ user-info}{ os-string} \proto{user-info-shell}{ user-info}{ os-string} \end{protos} \noindent A \code{user-info} contains information about a user. Available are the user's name, id, group, home directory, and shell. \begin{protos} \proto{group-id->group-info}{ group-id}{group-info} \proto{name->group-info}{ os-string}{group-info} \end{protos} \noindent These return the group info for a group identified by group-id or name. \begin{protos} \proto{group-info?}{ x}{ boolean} \proto{group-info-name}{ group-info}{ os-string} \proto{group-info-id}{ group-info}{ group-id} \proto{group-info-members}{ group-info}{ user-ids} \end{protos} \noindent A \code{group-info} contains information about a group. Available are the group's name, id, and a list of members. \section{OS and machine identification} These procedures return strings that are supposed to identify the current OS and machine. The POSIX standard does not indicate the format of the strings. The procedures are in structures \code{posix-platform-names} and \code{posix}. \begin{protos} \proto{os-name}{}{string} \proto{os-node-name}{}{string} \proto{os-release-name}{}{string} \proto{os-version-name}{}{string} \proto{machine-name}{}{string} \end{protos} % 4.8 Configurable System Variables \section{Files and directories} These procedures are in structures \code{posix-files} and \code{posix}. \subsection{Directory streams} Directory streams are like input ports, with each read operation returning the next name in the directory. \begin{protos} \proto{open-directory-stream}{ name}{directory} \proto{directory-stream?}{ x}{boolean} \proto{read-directory-stream}{ directory}{name or {\tt \#f}} \protonoresult{close-directory-stream}{ directory} \end{protos} \noindent \code{Open-directory-stream} opens a new directory stream. \code{Directory-stream?} is a predicate that recognizes directory streams. \code{Read-directory-stream} returns the next name in the directory or \code{\#f} if all names have been read. \code{Close-directory-stream} closes a directory stream. \begin{protos} \proto{list-directory}{ name}{list of os-strings} \end{protos} \noindent This is the obvious utility; it returns a list of the names in directory \cvar{name}. % 5.2 Working Directory \subsection{Working directory} \begin{protos} \proto{working-directory}{}{os-string} \protonoresultnoindex{set-working-directory!}{ os-string-thing}\mainschindex{set-working-directory"!} \end{protos} \noindent These return and set the working directory. % 5.3 File Creation \subsection{File creation and removal} \begin{protos} \proto{open-file}{ path file-options}{port} \proto{open-file}{ path file-options file-mode}{port} \end{protos} \noindent \code{Open-file} opens a port to the file named by \cvar{path}, which must be a \var{os-string-thing} argument. The \cvar{file-options} argument determines various aspects of the returned port. The optional \cvar{file-mode} argument is used only if the file to be opened does not already exist. The returned port is an input port if \cvar{file-options} includes \code{read-only}; otherwise it returns an output port. \code{Dup-switching-mode} can be used to open an input port for output ports opened with the \code{read/write} option. \begin{protos} \syntaxproto{file-options}{ \cvar{file-option-name} \ldots}{file-options} \proto{file-options-on?}{ file-options file-options}{boolean} \proto{file-options-union}{ file-options file-options}{file-options} \end{protos} \noindent The syntax \code{file-options} returns a file-option with the indicated options set. \code{File-options-on?} returns true if its first argument includes all of the options listed in the second argument. \code{File-options-union} returns a file-options argument containing exactly all of the options listed in either argument. The following file options may be used with \code{open-file}. \begin{center} \begin{tabular}{llp{2.8in}} & \code{create} & create file if it does not already exist; a file-mode argument is required with this option \\ & \code{exclusive} & an error will be raised if this option and \code{create} are both set and the file already exists \\ & \code{no-controlling-tty} & if \cvar{path} is a terminal device this option causes the terminal to not become the controlling terminal of the process\\ & \code{truncate} & file is truncated \\ & \code{append} & writes are appended to existing contents \\ & \code{nonblocking} & read and write operations do not block \\ & \code{read-only} & port may not be written \\ & \code{read-write} & file descriptor may be read or written \\ & \code{write-only} & port may not be read \end{tabular} \end{center} \noindent Only one of the last three options may be used. If \code{read-write} is specified, an output port is returned. For example \begin{example} (open-file "some-file.txt" (file-options create write-only) (file-mode read owner-write)) \end{example} returns an output port that writes to a newly-created file that can be read by anyone and written only by the owner. Once the file exists, \begin{example} (open-file "some-file.txt" (file-options append write-only)) \end{example} will open an output port that appends to the file. The \code{append} and \code{nonblocking} options and the read/write nature of the port can be read using \code{i/o-flags}. The \code{append} and \code{nonblocking} options can be set using \code{set-i/o-flags!}. To keep port operations from blocking the Scheme~48 process, output ports are set to be nonblocking at the time of creation (input ports are managed using \code{select()}). You can use \code{set-i/o-flags!} to make an output port blocking, for example just before a fork, but care should be exercised. The Scheme~48 runtime code may get confused if an I/O operation blocks. \begin{protos} \protonoresultnoindex{set-file-creation-mask!}{ file-mode}\mainschindex{set-file-creation-mask"!} \end{protos} \noindent Sets the file creation mask to be \cvar{file-mode}. Bits set in \cvar{file-mode} are cleared in the modes of any files or directories created by the current process. \begin{protos} \protonoresult{link}{ existing new} \end{protos} \noindent Both \var{existing} and \var{new} must be \var{os-string-thing} arguments. \code{Link} makes path \cvar{new} be a new link to the file pointed to by path \cvar{existing}. The two paths must be in the same file system. % 5.4 Special File Creation \begin{protos} \protonoresult{make-directory}{ path file-mode} \protonoresult{make-fifo}{ path file-mode} \end{protos} \noindent These two procedures make new directories and fifo files. In both cases, \var{path} must be a \var{os-string-thing} argument. % 5.5 File Removal \begin{protos} \protonoresult{unlink}{ path} \protonoresult{remove-directory}{ path} \protonoresult{rename}{ old-path new-path} \end{protos} \noindent \var{Path}, \var{old-path} and \var{new-path} must all be \var{os-string-thing} arguments. \code{Unlink} removes the link indicated by \cvar{path}. \code{Remove-directory} removes the indicated (empty) directory. \code{Rename} moves the file pointed to by \cvar{old-path} to the location pointed to by \cvar{new-path} (the two paths must be in the same file system). Any other links to the file remain unchanged. % 5.6.3 (out of POSIX order) \begin{protos} \proto{accessible?}{ path access-mode . more-modes}{boolean} \syntaxproto{access-mode}{ \cvar{mode-name}}{access-mode} \end{protos} \noindent \code{Accessible?} returns true if \cvar{path} (which must be a \var{os-string-thing} argument) is a file that can be accessed in the listed mode. If more than one mode is specified \code{accessible?} returns true if all of the specified modes are permitted. The \cvar{mode-name}\/s are: \code{read}, \code{write}, \code{execute}, \code{exists}. % 5.6 File Characteristics \subsection{File information} \begin{protos} \proto{get-file-info}{ path}{file-info} \proto{get-file/link-info}{ name}{file-info} \proto{get-port-info}{ fd-port}{file-info} \end{protos} \noindent \code{Get-file-info} and \code{get-file/link-info} both return a file info record for the file named by \var{path}, which must be a \var{os-string-thing} argument. \code{Get-file-info} follows symbolic links while \code{get-file/link-info} does not. \code{Get-port-info} returns a file info record for the file which \cvar{port} reads from or writes to. An error is raised if \cvar{fd-port} does not read from or write to a file descriptor. \begin{protos} \proto{file-info?}{ x}{boolean} \proto{file-info-name}{ file-info}{os-string} \end{protos} \noindent \code{File-info?} is a predicate for file-info records. \code{File-info-name} is the name which was used to get \code{file-info}, either as passed to \code{get-file-info} or \code{get-file/link-info}, or used to open the port passed to \code{get-port-info}. \begin{protos} \proto{file-info-type}{ file-info}{file-type} \proto{file-type?}{ x}{boolean} \proto{file-type-name}{ file-type}{symbol} \syntaxproto{file-type}{ \cvar{type}}{file-type} \end{protos} \noindent %I need to add the rest - the procedure version of file-type, enum-case(?). \code{File-info-type} returns the type of the file, as a file-type object File types may be compared using \code{eq?}. The valid file types are: \begin{center} \begin{tabular}{l} \code{regular} \\ \code{directory} \\ \code{character-device} \\ \code{block-device} \\ \code{fifo} \\ \code{symbolic-link} \\ \code{socket} \\ \code{other} \end{tabular} \end{center} \noindent \code{Symbolic-link} and \code{socket} are not required by POSIX. \begin{protos} \proto{file-info-device}{ file-info}{integer} \proto{file-info-inode}{ file-info}{integer} \end{protos} \noindent The device and inode numbers uniquely determine a file. \begin{protos} \proto{file-info-link-count}{ file-info}{integer} \proto{file-info-size}{ file-info}{integer} \end{protos} \noindent These return the number of links to a file and the file size in bytes. The size is only meaningful for regular files. \begin{protos} \proto{file-info-owner}{ file-info}{user-id} \proto{file-info-group}{ file-info}{group-id} \proto{file-info-mode}{ file-info}{file-mode} \end{protos} \noindent These return the owner, group, and access mode of a file. \begin{protos} \proto{file-info-last-access}{ file-info}{time} \proto{file-info-last-modification}{ file-info}{time} \proto{file-info-last-status-change}{ file-info}{time} \end{protos} \noindent These return the time the file was last read, modified, or had its status modified. % Modes \subsection{File modes} A file mode is a boxed integer representing a file protection mask. \begin{protos} \syntaxproto{file-mode}{ permission-name \ldots}{file-mode} \proto{file-mode?}{ x}{boolean} \proto{file-mode+}{ file-mode \ldots}{file-mode} \proto{file-mode-}{ file-mode0 file-mode1}{file-mode} \end{protos} \noindent \code{File-mode} is syntax for creating file modes. The mode-names are listed below. \code{File-mode?} is a predicate for file modes. \code{File-mode+} returns a mode that contains all of permissions of its arguments. \code{File-mode-} returns a mode that has all of the permissions of \cvar{file-mode0} that are not in \cvar{file-mode1}. \begin{protos} \proto{file-mode=?}{ file-mode0 file-mode1}{boolean} \proto{file-mode<=?}{ file-mode0 file-mode1}{boolean} \proto{file-mode>=?}{ file-mode0 file-mode1}{boolean} \end{protos} \noindent \code{File-mode=?} returns true if the two modes are exactly the same. \code{File-mode<=?} returns true if \cvar{file-mode0} has a subset of the permissions of \cvar{file-mode1}. \code{File-mode>=?} is \code{file-mode<=?} with the arguments reversed. \begin{protos} \proto{file-mode->integer}{ file-mode}{integer} \proto{integer->file-mode}{ integer}{file-mode} \end{protos} \noindent \code{Integer->file-mode} and \code{file-mode->integer} translate file modes to and from the classic Unix file mode masks. These may not be the masks used by the underlying OS. \begin{center} \begin{tabular}{lll} Permission name & Bit mask \\ \code{set-uid} & \code{\#o4000} & set user id when executing \\ \code{set-gid} & \code{\#o2000} & set group id when executing \\ \code{owner-read} & \code{\#o0400} & read by owner \\ \code{owner-write} & \code{\#o0200} & write by owner \\ \code{owner-exec} & \code{\#o0100} & execute (or search) by owner \\ \code{group-read} & \code{\#o0040} & read by group \\ \code{group-write} & \code{\#o0020} & write by group \\ \code{group-exec} & \code{\#o0010} & execute (or search) by group \\ \code{other-read} & \code{\#o0004} & read by others \\ \code{other-write} & \code{\#o0002} & write by others \\ \code{other-exec} & \code{\#o0001} & execute (or search) by others \\ \end{tabular} \end{center} \begin{center} \begin{tabular}{lll} \multicolumn{3}{l}{Names for sets of permissions} \\ \code{owner} & \code{\#o0700} & read, write, and execute by owner \\ \code{group} & \code{\#o0070} & read, write, and execute by group \\ \code{other} & \code{\#o0007} & read, write, and execute by others \\ \code{read} & \code{\#o0444} & read by anyone \\ \code{write} & \code{\#o0222} & write by anyone \\ \code{exec} & \code{\#o0111} & execute by anyone \\ \code{all} & \code{\#o0777} & anything by anyone \end{tabular} \end{center} \subsection{Symbolic links} \begin{protos} \protonoresult{create-symbolic-link}{ path1 path2} \end{protos} % This creates a symbolic link at \var{path2} that contains \var{path1}. \var{Path1} and \var{path2} must be \var{os-string-thing} arguments. \begin{protos} \proto{read-symbolic-link}{ path}{ os-string} \end{protos} % This returns contents of the symbolic link at \var{path}. \var{Path} must be an \var{os-string-thing} argument. %---------------- % Time - seconds since the epoch. \section{Time and Date} These procedures are in structures \code{posix-time} and \code{posix}. \subsection{Time} \begin{protos} \proto{make-time}{ integer}{time} \proto{current-time}{}{time} \proto{time?}{ x}{boolean} \proto{time-seconds}{ time}{integer} \end{protos} \noindent A \code{time} record contains an integer that represents time as the number of second since the Unix epoch (00:00:00 GMT, January 1, 1970). \code{Make-time} and \code{current-time} return \code{time}\/s, with \code{make-time}'s using its argument while \code{current-time}'s has the current time. \code{Time?} is a predicate that recognizes \code{time}\/s and \code{time-seconds} returns the number of seconds \cvar{time} represents. \begin{protos} \proto{time=?}{ time time}{boolean} \proto{time?}{ time time}{boolean} \proto{time>=?}{ time time}{boolean} \end{protos} \noindent These perform various comparison operations on the \code{time}\/s. \begin{protos} \proto{time->string}{ time}{string} \end{protos} \noindent \code{Time->string} returns a string representation of \cvar{time} in the locale's version of the following form. \begin{example} "Wed Jun 30 21:49:08 1993 " \end{example} \subsection{Date} A date is a time specification relative to a specific but implicit time zone, broken out into the familar year-month-day-hour-minute-second format. \begin{protos} \proto{make-date}{ second minute hour month-day month year week-day year-day dst}{date} \proto{date?}{ x}{boolean} \proto{date-second}{ date}{second} \proto{date-minute}{ date}{minute} \proto{date-hour}{ date}{hour} \proto{date-month-day}{ date}{month-day} \proto{date-month}{ date}{month} \proto{date-year}{ date}{year} \proto{date-week-day}{ date}{week-day} \proto{date-year-day}{ date}{year-day} \proto{date-date-dst}{ date}{dst} \end{protos} % These are the constructor, predicate and corresponding accessors for date objects. The meaning of the various field types are as follows: \begin{center} \begin{tabular}{lll} \cvar{seconds} & seconds & (0--60) \\ \cvar{minutes} & minutes & (0--59) \\ \cvar{hour} & hours & (0--23) \\ \cvar{month-day} & day of month & (1--31) \\ \cvar{mon} & month of year & (0--11) \\ \cvar{year} & year & since 1900\\ \cvar{week-day} & day of week & (Sunday = 0) \\ \cvar{year-day} & day of year & (0--365) \\ \cvar{dst} & is summer time in effect? & \code{\#t}, \code{\#f} or unspecific \end{tabular} \end{center} \begin{protos} \proto{date->string}{ date}{string} \end{protos} % returns a string representation of \cvar{date} in the locale's version of the following form: \begin{example} "Wed Jun 30 21:49:08 1993 " \end{example} \begin{protos} \proto{time->utc-date}{ time}{date} \proto{time->local-date}{ time}{date} \end{protos} % These convert a time object into a date object; the first does this relative to the UTC time zone, the second relative to the current timezone setting. \begin{protos} \proto{date->time}{ date}{time} \end{protos} % This converts a date object into a time object relative to the current timezone setting. \begin{protos} \proto{format-date}{ string date}{string} \end{protos} % This formats a date into a string, according to the format specification in the first argument. The format specification is according to the specification of the C \code{strftime} function: \noindent \begin{longtable}{lp{0.9\textwidth}} \code{\%a} & is replaced by the locale's abbreviated weekday name.\\ \code{\%A} & is replaced by the locale's full weekday name.\\ \code{\%b} & is replaced by the locale's abbreviated month name.\\ \code{\%B} & is replaced by the locale's full month name.\\ \code{\%c} & is replaced by the locale's appropriate date and time representation.\\ \code{\%C} & is replaced by the year divided by 100 and truncated to an integer, as a decimal number (00--99).\\ \code{\%d} & is replaced by the day of the month as a decimal number (01--31).\\ \code{\%D} & is equivalent to ``\verb|%m/%d/%y|''.\\ \code{\%e} & is replaced by the day of the month as a decimal number (1--31); a single digit is preceded by a space.\\ \code{\%F} & is equivalent to ``\verb|%Y-%m-%d|'' (the ISO 8601 date format).\\ \code{\%g} & is replaced by the last 2 digits of the week-based year (see below) as a decimal number (00--99).\\ \code{\%G} & is replaced by the week-based year (see below) as a decimal number (e.g., 1997).\\ \code{\%h} & is equivalent to ``\verb|%b|''.\\ \code{\%H} & is replaced by the hour (24-hour clock) as a decimal number (00--23).\\ \code{\%I} & is replaced by the hour (12-hour clock) as a decimal number (01--12).\\ \code{\%j} & is replaced by the day of the year as a decimal number (001--366).\\ \code{\%m} & is replaced by the month as a decimal number (01--12).\\ \code{\%M} & is replaced by the minute as a decimal number (00--59).\\ \code{\%n} & is replaced by a new-line character.\\ \code{\%p} & is replaced by the locale's equivalent of the AM/PM designations associated with a 12-hour clock.\\ \code{\%r} & is replaced by the locale's 12-hour clock time.\\ \code{\%R} & is equivalent to ``\verb|%H:%M|''.\\ \code{\%S} & is replaced by the second as a decimal number (00--60).\\ \code{\%t} & is replaced by a horizontal-tab character.\\ \code{\%T} & is equivalent to ``\verb|%H:%M:%S|'' (the ISO 8601 time format).\\ \code{\%u} & is replaced by the ISO 8601 weekday as a decimal number (1--7), where Monday is 1.\\ \code{\%U} & is replaced by the week number of the year (the first Sunday as the first day of week 1) as a decimal number (00--53).\\ \code{\%V} & is replaced by the ISO 8601 week number (see below) as a decimal number (01--53).\\ \code{\%w} & is replaced by the weekday as a decimal number (0--6), where Sunday is 0.\\ \code{\%W} & is replaced by the week number of the year (the first Monday as the first day of week 1) as a decimal number (00--53).\\ \code{\%x} & is replaced by the locale's appropriate date representation.\\ \code{\%X} & is replaced by the locale's appropriate time representation.\\ \code{\%y} & is replaced by the last 2 digits of the year as a decimal number (00--99).\\ \code{\%Y} & is replaced by the year as a decimal number (e.g., 1997).\\ \code{\%z} & is replaced by the offset from UTC in the ISO 8601 format ``\verb|-0430|'' (meaning 4 hours 30 minutes behind UTC, west of Greenwich), or by no characters if no time zone is determinable.\\ \code{\%Z} & is replaced by the locale's time zone name or abbreviation, or by no characters if no time zone is determinable.\\ \code{\%\%} & is replaced by \verb|%|. \end{longtable} \section{I/O} These procedures are in structures \code{posix-i/o} and \code{posix}. % Rest of 5.6 % int chmod(char *path, mode_t mode) % int fchmod(int fd, mode_t mode) % int chown(char *path, uid_t owner, gid_t group) % int utime(char *path, struct utimbuf * times) % int ftruncate(int fd, off_t length) %---------------- % 5.7 Configurable Pathname Variables % % long pathconf(char *path, int name) % long fpathconf(int fd, int name) %---------------- % 6.1 Pipes \begin{protos} \proto{open-pipe}{}{input-port + output-port} \end{protos} \noindent \code{Open-pipe} creates a new pipe and returns the two ends as an input port and an output port. % 6.2 File descriptor manipulation. A {\em file descriptor} port (or \cvar{fd-port}) is a port that reads to or writes from an OS file descriptor. Fd-ports are returned by \code{open-input-file}, \code{open-output-file}, \code{open-file}, \code{open-pipe}, and other procedures. % Richard says: add an example of a non-fd port once the extended ports % are described in the manual. \begin{protos} \proto{fd-port?}{ port}{boolean} \proto{port->fd}{ port}{integer or {\tt \#f}} \end{protos} \noindent \code{Fd-port?} returns true if its argument is an fd-port. \code{Port->fd} returns the file descriptor associated with or \code{\#f} if \cvar{port} is not an fd-port. \begin{protos} \protonoresult{remap-file-descriptors}{ fd-spec \ldots} \end{protos} \noindent \code{Remap-file-descriptors} reassigns file descriptors to ports. The \cvar{fd-specs} indicate which port is to be mapped to each file descriptor: the first gets file descriptor \code{0}, the second gets \code{1}, and so forth. A \cvar{fd-spec} is either a port that reads from or writes to a file descriptor, or \code{\#f}, with \code{\#f} indicating that the corresponding file descriptor is not used. Any open ports not listed are marked `close-on-exec'. The same port may be moved to multiple new file descriptors. For example, \begin{example} (remap-file-descriptors (current-output-port) \#f (current-input-port)) \end{example} moves the current output port to file descriptor \code{0} and the current input port to file descriptor \code{2}. \begin{protos} \proto{dup}{ fd-port}{fd-port} \proto{dup-switching-mode}{ fd-port}{fd-port} \proto{dup2}{ fd-port file-descriptor}{fd-port} \end{protos} \noindent These change \cvar{fd-port}'s file descriptor and return a new port that uses \cvar{ports}'s old file descriptor. \code{Dup} uses the lowest unused file descriptor and \code{dup2} uses the one provided. \code{Dup-switching-mode} is the same as \code{dup} except that the returned port is an input port if the argument was an output port and vice versa. If any existing port uses the file descriptor passed to \code{dup2}, that port is closed. \begin{protos} \protonoresult{close-all-but}{ port \ldots} \end{protos} \noindent \code{Close-all-but} closes all file descriptors whose associated ports are not passed to it as arguments. % 6.3 File Descriptor Reassignment % % int close(int fd) % Use close-{input|output}-{port|channel} % % 6.4 Input and Output % % read() and write() ; Already available in various forms. % 6.5 Control Operations on Files %; fcntl(fd, F_DUPFD, target_fd) ; Use DUP instead. % %; Descriptor flags %; fcntl(fd, F_GETFD) %; fcntl(fd, F_SETFD, flags) %; %; The only POSIX flag is FD_CLOEXEC, so that's all we do. \begin{protos} \proto{close-on-exec?}{ port}{boolean} \protonoresultnoindex{set-close-on-exec?!}{ port boolean}\mainschindex{set-close-on-exec?"!} \end{protos} \noindent \code{Close-on-exec?} returns true if \code{port} will be closed when a new program is exec'ed. \code{Set-close-on-exec?!} sets \code{port}'s close-on-exec flag. %; Status flags %; fcntl(fd, F_GETFL) %; fcntl(fd, F_SETFL, flags) \begin{protos} \proto{i/o-flags}{ port}{file-options} \protonoresultnoindex{set-i/o-flags!}{ port file-options}\mainschindex{set-i/o-flags"!} \end{protos} \noindent These two procedures read and write various options for \code{port}. The options that can be read are \code{append}, \code{nonblocking}, \code{read-only}, \code{write-only}, and \code{read/write}. Only the \code{append} and \code{nonblocking} can be written. % off_t lseek(int fd, off_t offset, int whence) %\subsection{Terminals} \begin{protos} \proto{port-is-a-terminal?}{ port}{boolean} \proto{port-terminal-name}{ port}{string} \end{protos} \noindent \code{Port-is-a-terminal?} returns true if \cvar{port} has an underlying file descriptor that is associated with a terminal. For such ports \code{port-terminal-name} returns the name of the terminal, for all others it returns \code{\#f}. % 6. File Synchronization % % int fsync(int fd) % optional % int fdatasync(int fd) % optional % % 7. Asynchronous Input and Output % % All optional \section{Regular expressions} % Regexps - where is the C interface defined? (In part 2, the shell book) The procedures in this section provide access to POSIX regular expression matching. The regular expression syntax and semantics are far too complex to be described here. Due to limitations in the underlying facility, only Latin-1 strings are guaranteed to work here---on some platforms, only ASCII may function correctly. Moreover, because the C interface uses zero bytes for marking the ends of strings, patterns and strings that contain zero bytes will not work correctly. These procedures are in structures \code{posix-regexps} and \code{posix}. An abstract data type for creating POSIX regular expressions is described in section~\ref{regexp-adt}. \begin{protos} \proto{make-regexp}{ string . regexp-options}{regexp} \syntaxproto{regexp-option}{ \cvar{option-name}}{regexp-option} \end{protos} \noindent \code{Make-regexp} makes a new regular expression, using \cvar{string} as the pattern. The possible option names are: \begin{center} \begin{tabular}{ll} \code{extended} & use the extended patterns \\ \code{ignore-case} & ignore case when matching \\ \code{submatches} & report submatches \\ \code{newline} & treat newlines specially \end{tabular} \end{center} The regular expression is not compiled until it matched against a string, so any errors in the pattern string will not be reported until that point. \begin{protos} \proto{regexp?}{ x}{boolean} \end{protos} \noindent This is a predicate for regular expressions. \begin{protos} \protonoresult{regexp-match}{ regexp string start submatches? starts-line? ends-line?} \protoresult{boolean or list of matches} \proto{match?}{ x}{boolean} \proto{match-start}{ match}{integer} \proto{match-end}{ match}{integer} \end{protos} \noindent \code{Regexp-match} matches the regular expression against the characters in \cvar{string}, starting at position \cvar{start}. If the string does not match the regular expression, \code{regexp-match} returns \code{\#f}. If the string does match, then a list of match records is returned if \cvar{submatches?} is true, or \code{\#t} is returned if it is not. Each match record contains the index of the character at the beginning of the match and one more than the index of the character at the end. The first match record gives the location of the substring that matched \cvar{regexp}. If the pattern in \cvar{regexp} contained submatches, then the results of these are returned in order, with a match records reporting submatches that succeeded and \code{\#f} in place of those that did not. \cvar{Starts-line?} should be true if \cvar{string} starts at the beginning of a line and \cvar{ends-line?} should be true if it ends one. \section{Syslog facility} \label{syslog-facility} The procedures in this section provide access to the POSIX syslog facility. The functionality is in a structure called \code{posix-syslog}. The Scheme~48 interface to the syslog facility differs significantly from that of the Unix library functionality in order to support multiple simultaneous connections to the syslog facility. Log messages carry a variety of parameters beside the text of the message itself, namely a set of options controlling the output format and destination, the facility identifying the class of programs the message is coming from, an identifier specifying the concrete program, and the level identifying the importance of the message. Moreover, a log mask can prevent messages at certain levels to be actually sent to the syslog daemon. \subsection*{Log options} A log option specifies details of the I/O behavior of the syslog facility. A syslog option is an element of a finite type (see Section~\ref{sec:finite-types}) constructed by the \code{syslog-option} macro. The syslog facility works with sets of options which are represented as enum sets (see Section~\ref{sets-finite-types}). \begin{protos} \syntaxproto{syslog-option}{ \cvar{option-name}}{option} \proto{syslog-option?}{ x}{boolean} \proto{make-syslog-options}{ list}{options} \syntaxproto{syslog-options}{ \cvar{option-name} \ldots}{options} \proto{syslog-options?}{ x}{boolean} \end{protos} \noindent \code{Syslog-option} constructs a log option from the name of an option. (The possible names are listed below.) \code{Syslog-option?} is a predicate for log options. Options are comparable using \code{eq?}. \code{Make-syslog-options} constructs a set of options from a list of options. \code{Syslog-options} is a macro which expands into an expression returning a set of options from names. \code{Syslog-options?} is a predicate for sets of options. Here is a list of possible names of syslog options: \begin{description} \item[\code{console}] If syslog cannot pass the message to syslogd it will attempt to write the message to the console. \item[\code{delay}] Delay opening the connection to syslogd immediately until the first message is logged. \item[\code{no-delay}] Open the connection to syslogd immediately. Normally the open is delayed until the first message is logged. Useful for programs that need to manage the order in which file descriptors are allocated. \noindent\textbf{NOTA BENE:} The \code{delay} and \code{no-delay} options are included for completeness, but do not have the expected effect in the present Scheme interface: Because the Scheme interface has to multiplex multiple simultaneous connections to the syslog facility over a single one, open and close operations on that facility happen at unpredictable times. \item[\code{log-pid}] Log the process id with each message: useful for identifying instantiations of daemons. \item[\code{no-wait}] Do not wait for child processes. \end{description} \subsection*{Log facilities} A log facility identifies the originator of a log message from a finite set known to the system. Each originator is identified by a name: \begin{protos} \syntaxproto{syslog-facility}{ \cvar{facility-name}}{facility} \proto{syslog-facility?}{ x}{boolean} \end{protos} \noindent \code{Syslog-facility} is macro that expands into an expression returning a facility for a given name. \code{Syslog-facility?} is a predicate for facilities. Facilities are comparable via \code{eq?}. Here is a list of possible names of syslog facilities: \begin{description} \item[\code{authorization}] The authorization system: login, su, getty, etc. \item[\code{cron}] The cron daemon. \item[\code{daemon}] System daemons, such as routed, that are not provided for explicitly by other facilities. \item[\code{kernel}] Messages generated by the kernel. \item[\code{lpr}] The line printer spooling system: lpr, lpc, lpd, etc. \item[\code{mail}] The mail system. \item[\code{news}] The network news system. \item[\code{user}] Messages generated by random user processes. \item[\code{uucp}] The uucp system. \item[\code{local0} \code{local1} \code{local2} \code{local3} \code{local4} \code{local5} \code{local6} \code{local7}] Reserved for local use. \end{description} \subsection*{Log levels} A log level identifies the importance of a message from a fixed set of possible levels. \begin{protos} \syntaxproto{syslog-level}{ \cvar{level-name}}{level} \proto{syslog-level?}{ x}{boolean} \end{protos} \noindent \code{Syslog-level} is macro that expands into an expression returning a facility for a given name. \code{Syslog-level?} is a predicate for facilities. Levels are comparable via \code{eq?}. Here is a list of possible names of syslog levels: \begin{description} \item[\code{emergency}] A panic condition. This is normally broadcast to all users. \item[\code{alert}] A condition that should be corrected immediately, such as a corrupted system database. \item[\code{critical}] Critical conditions, e.g., hard device errors. \item[\code{error}] Errors. \item[\code{warning}] Warning messages. \item[\code{notice}] Conditions that are not error conditions, but should possibly be handled specially. \item[\code{info}] Informational messages. \item[\code{debug}] Messages that contain information normally of use only when debugging a program. \end{description} \subsection*{Log masks} A log masks can mask out log messages at a set of levels. A log mask is an enum set of log levels. \begin{protos} \proto{make-syslog-mask}{ list}{mask} \syntaxproto{syslog-mask}{ \cvar{level-name} \ldots}{mask} \constproto{syslog-mask-all}{ mask} \proto{syslog-mask-upto}{ level}{mask} \proto{syslog-mask?}{ x}{boolean} \end{protos} \noindent \code{Make-syslog-mask} constructs a mask from a list of levels. \code{Syslog-mask} is a macro which constructs a mask from names of levels. \code{Syslog-mask-all} is a predefined log mask containing all levels. \code{Syslog-mask-upto} returns a mask consisting of all levels up to and including a certain level, starting with \code{emergency}. \subsection*{Logging} Scheme~48 dynamically maintains implicit connections to the syslog facility specifying a current identifier, current options, a current facility and a current log mask. Every thread maintains it own implicit connection to syslog. Note that the connection is not implicitly preserved across a \code{spawn}. \begin{protos} \proto{with-syslog-destination}{ string options facility mask thunk}{value} \end{protos} \noindent \code{With-syslog-destination} dynamically binds parameters of the implicit connection to the syslog facility and runs \var{thunk} within those parameter bindings, returning what \var{thunk} returns. Each of the parameters may be \code{\#f} in which case the previous values will be used. \begin{protos} \protonoresult{syslog}{ level message} \protonoresult{syslog}{ level message string} \protonoresult{syslog}{ level message string options} \protonoresult{syslog}{ level message string options syslog-facility} \protonoresult{syslog}{ level message channel} \end{protos} \noindent \code{Syslog} actually logs a message. Each of the parameters of the implicit connection (except for the log mask) can be explicitly specified as well for the current call to \code{syslog}, overriding the parameters of the channel. The parameters revert to their original values after the call. The final form specifies the destination of the log message as a channel; see the next section. \subsection*{Syslog channels} % These procedures allow direct manipulation of syslog channels, the objects that represent connections to the syslog facility. Note that it is not necessary to explicitly open a syslog channel to do logging. \begin{protos} \proto{open-syslog-channel}{string options facility mask}{channel} \protonoresult{close-syslog-channel}{channel} \proto{with-syslog-destination}{ channel thunk}{value} \end{protos} \noindent \code{Open-syslog-channel} and \code{close-syslog-channel} create and destroy a connection to the syslog facility, respectively. The specified form of calling \code{syslog} logs to the specified channel. \code{With-syslog-channel} dynamically binds parameters of the implicit connection to the syslog facility to those specified in \cvar{channel} and runs \var{thunk} within those parameter bindings, returning what \var{thunk} returns. \section{Error codes} POSIX functions report the nature of an error via \textit{system error numbers}---OS-specific integers that encode a variety of different error situations. At the Scheme level, error numbers are represented as \textit{errnos}, objects that specify a name for the error sitation. Errnos are definted in the structures \code{posix-errnos} and \code{posix}. Currently, the system reports such error situations by raising exceptions with condition type \code{\&os-error}. The \code{\&os-error} condition type has a field \code{code} that contains the system error number. There are two varieties of errnos available, {\em named} and {\em anonymous}. A named errno is one for which we have a symbolic name, such as \code{fault} or \code{intr}. Anonymous errnos, for which we only have the current operating system's errno number, have no meaning in other operating systems. Named errnos preserve their meaning in image files. Not all named errnos are available from all OS's and there may be multiple names for a single OS errno number. \begin{protos} \syntaxproto{errno}{ \cvar{errno-name}}{errno} \proto{name->errno}{ symbol}{errno or {\tt \#f}} \proto{integer->errno}{ integer}{errno} \proto{errno?}{ x}{boolean} \proto{errno-name}{ errno}{symbol or {\tt \#f}} \proto{errno-os-number}{ errno}{integer} \proto{errno=?}{ errno0 errno1}{boolean} \end{protos} \noindent The syntax \code{errno} returns a (named) errno associated with \cvar{errno-name}. \code{Name->errno} returns a (named) errno or \code{\#f} if the the errno \cvar{name} is not supported by the operating system. The errno returned by \code{integer->errno} is a named errno if \cvar{integer} corresponds to a named errno in the current operating system; otherwise it returns an anonymous errno. \code{Errno-name} returns a symbol if \cvar{errno} is named and \code{\#f} if it is anonymous. \code{Errno=?} returns \code{\#t} if \cvar{errno0} and \cvar{errno1} have the same operating system number and \code{\#f} if they do not. \subsection{POSIX errnos} The following lists the names of the POSIX errnos. \begin{center} \begin{longtable}{@{\ttfamily}lp{0.6\textwidth}} toobig & Argument list too long.\\ acces & Permission denied.\\ addrinuse & Address in use.\\ addrnotavail & Address not available.\\ afnosupport & Address family not supported.\\ again & Resource unavailable, try again.\\ already & Connection already in progress.\\ badf & Bad file descriptor.\\ badmsg & Bad message.\\ busy & Device or resource busy.\\ canceled & Operation canceled.\\ child & No child processes.\\ connaborted & Connection aborted.\\ connrefused & Connection refused.\\ connreset & Connection reset.\\ deadlk & Resource deadlock would occur.\\ destaddrreq & Destination address required.\\ dom & Mathematics argument out of domain of function.\\ dquot & Reserved.\\ exist & File exists.\\ fault & Bad address.\\ fbig & File too large.\\ hostunreach & Host is unreachable.\\ idrm & Identifier removed.\\ ilseq & Illegal byte sequence.\\ inprogress & Operation in progress.\\ intr & Interrupted function.\\ inval & Invalid argument.\\ io & I/O error.\\ isconn & Socket is connected.\\ isdir & Is a directory.\\ loop & Too many levels of symbolic links.\\ mfile & Too many open files.\\ mlink & Too many links.\\ msgsize & Message too large.\\ multihop & Reserved.\\ nametoolong & Filename too long.\\ netdown & Network is down.\\ netreset & Connection aborted by network.\\ netunreach & Network unreachable.\\ nfile & Too many files open in system.\\ nobufs & No buffer space available.\\ nodata & No message is available on the STREAM head read queue. \\ nodev & No such device.\\ noent & No such file or directory.\\ noexec & Executable file format error.\\ nolck & No locks available.\\ nolink & Reserved.\\ nomem & Not enough space.\\ nomsg & No message of the desired type.\\ noprotoopt & Protocol not available.\\ nospc & No space left on device.\\ nosr & No STREAM resources. \\ nostr & Not a STREAM. \\ nosys & Function not supported.\\ notconn & The socket is not connected.\\ notdir & Not a directory.\\ notempty & Directory not empty.\\ notsock & Not a socket.\\ notsup & Not supported.\\ notty & Inappropriate I/O control operation.\\ nxio & No such device or address.\\ opnotsupp & Operation not supported on socket.\\ overflow & Value too large to be stored in data type.\\ perm & Operation not permitted.\\ pipe & Broken pipe.\\ proto & Protocol error.\\ protonosupport & Protocol not supported.\\ prototype & Protocol wrong type for socket.\\ range & Result too large.\\ rofs & Read-only file system.\\ spipe & Invalid seek.\\ srch & No such process.\\ stale & Reserved.\\ time & Stream ioctl() timeout. \\ timedout & Connection timed out.\\ txtbsy & Text file busy.\\ wouldblock & Operation would block.\\ xdev & Cross-device link.\\ \end{longtable} \end{center} \section{C to Scheme correspondence} \label{function-correspondence} The following table lists the Scheme procedures that correspond to particular C procedures. Not all of the Scheme procedures listed are part of the POSIX interface. \texonly\setlongtables \begin{longtable}{ll}\endtexonly \htmlonly\begin{tabular}{ll}\endhtmlonly C procedure & Scheme procedure(s) \\ \endfirsthead C procedure & Scheme procedure(s) \\ \endhead \code{access}&\code{accessible?}\\ \code{asctime}&\code{date->string}\\ \code{chdir}&\code{set-working-directory!}\\ \code{close}&\code{close-input-port, close-output-port,}\\ &\code{\ \ close-channel, close-socket}\\ \code{closedir}&\code{close-directory-stream}\\ \code{creat}&\code{open-file}\\ \code{ctime}&\code{time->string}\\ \code{dup}&\code{dup, dup-switching-mode}\\ \code{dup2}&\code{dup2}\\ \code{exec[l|v][e|p|$\epsilon$]} &\code{exec, exec-with-environment,} \\ &\code{\ \ exec-file, exec-file-with-environment,} \\ &\code{\ \ exec-with-alias}\\ \code{\_exit}&\code{exit}\\ \code{fcntl}&\code{io-flags, set-io-flags!,}\\ &\code{\ \ close-on-exec, set-close-on-exec!}\\ \code{fork}&\code{fork, fork-and-forget}\\ \code{fstat}&\code{get-port-info}\\ \code{getcwd}&\code{working-directory}\\ \code{getegid}&\code{get-effective-group-id}\\ \code{getenv}&\code{lookup-environment-variable,} \\ &\code{\ \ environment-alist}\\ \code{geteuid}&\code{get-effective-user-id}\\ \code{getgid}&\code{get-group-id}\\ \code{getgroups}&\code{get-groups}\\ \code{getlogin}&\code{get-login-name}\\ \code{getpid}&\code{get-process-id}\\ \code{getppid}&\code{get-parent-process-id}\\ \code{getuid}&\code{get-user-id}\\ \code{gmtime}&\code{time->local-date}\\ \code{isatty}&\code{port-is-a-terminal?}\\ \code{link}&\code{link}\\ \code{localtime}&\code{time->utc-date}\\ \code{lstat}&\code{get-file/link-info}\\ \code{mkdir}&\code{make-directory}\\ \code{mkfifo}&\code{make-fifo}\\ \code{mktime}&\code{date->time}\\ \code{open}&\code{open-file}\\ \code{opendir}&\code{open-directory-stream}\\ \code{pipe}&\code{open-pipe}\\ \code{read}&\code{read-char, read-block}\\ \code{readdir}&\code{read-directory-stream}\\ \code{readlink}&\code{read-symbolic-link}\\ \code{rename}&\code{rename}\\ \code{rmdir}&\code{remove-directory}\\ \code{setgid}&\code{set-group-id!}\\ \code{setegid}&\code{set-effective-group-id!}\\ \code{setuid}&\code{set-user-id!}\\ \code{seteuid}&\code{set-effective-user-id!}\\ \code{stat}&\code{get-file-info}\\ \code{strftime}&\code{format-date}\\ \code{symlink}&\code{create-symbolic-link}\\ \code{syslog}&\code{syslog}\\ \code{time}&\code{current-time}\\ \code{ttyname}&\code{port-terminal-name}\\ \code{umask}&\code{set-file-creation-mask!}\\ \code{uname}&\code{os-name, os-node-name,} \\ &\code{\ \ os-release-name, os-version-name,} \\ &\code{\ \ machine-name}\\ \code{unlink}&\code{unlink}\\ \code{waitpid}&\code{wait-for-child-process}\\ \code{write}&\code{write-char, write-block}\\ % The ones that aren't there yet. %wait \\ %kill \\ %sigemptyset, sigfillset, sigaddset, digdelset, sigismember \\ %sigaction \\ %sigsuspend \\ %alarm \\ %pause \\ %sleep \\ %getpgrp \\ %setsid \\ %times \\ %ctermid \\ %sysconf \\ %rewinddir \\ %chmod \\ %chown \\ %utime \\ %ftruncate \\ %pathconf, fpathconf \\ %lseek \\ %fsync \\ \texonly\end{longtable}\endtexonly \htmlonly\end{tabular}\endhtmlonly %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/proto.tex000644 004306 005702 00000006552 12067075540 017257 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber \newcommand{\cvar}[1]{\textrm{\textit{#1}}} %%%%%%%%%%%%%%%% Latex prototypes \texonly \newcommand{\evalsto}{$\rightarrow$} \newenvironment{protos}{\list{$\bullet$} {\leftmargin1.2em\rightmargin0pt\itemsep0pt\parsep0pt\partopsep-2pt}} {\endlist} % The following is for prototypes that have return types. % (foo int int) -> int \newcommand{\proto}[3]{% \protonoindex{#1}{#2}{#3}% \mainschindex{#1}}% \newcommand{\protonoindex}[3]{\item\noindent\unskip% \hbox{\spaceskip=0.5em\code{({#1}{\it#2\/})} {$\rightarrow$} {\it#3}}} \newcommand{\cproto}[1]{\item\noindent\unskip% \hbox{\spaceskip=0.5em\code{{#1}}}} \newcommand{\cgcproto}[1]{\item\noindent\unskip% \hbox{\spaceskip=0.5em\code{{#1}}}\hfill\penalty 0% \hbox{ }\nobreak\hfill\hbox{\rm (may GC)}} \newcommand{\protonoresultnoindex}[2]{\item\noindent\unskip% \hbox{\spaceskip=0.5em\code{(\hbox{#1}{\it#2\/})}}} \newcommand{\protonoresult}[2]{% \protonoresultnoindex{#1}{#2}% \mainschindex{#1}}% \newcommand{\protoresult}[1]{\newline\unskip% {\hspace*{2em}\code{{$\rightarrow$} {\it#1}}\hfill}} % Syntax prototypes \newcommand{\syntaxprotonoresultnoindex}[2]{\item\noindent\unskip% \hbox{\spaceskip=0.5em\code{(\hbox{#1}{#2})}}\hfill\penalty 0% \hbox{ }\nobreak\hfill\hbox{\rm syntax}} \newcommand{\syntaxprotonoresult}[2]{% \syntaxprotonoresultnoindex{#1}{#2}\mainschindex{#1}} \newcommand{\syntaxproto}[3]{\item\noindent\unskip% \hbox{\spaceskip=0.5em\code{(\hbox{#1}{#2})}} {$\rightarrow$} {\it#3}% \hfill\penalty 0% \hbox{ }\nobreak\hfill\hbox{\rm syntax}} % This can be reduced \newcommand{\pconstproto}[2]{\item\noindent\unskip% \hbox{\spaceskip=0.5em\code{#1}}\hfill\penalty 0% \hbox{ }\nobreak\hfill\hbox{\rm #2}} % Variable prototype \newcommand{\constproto}[2]{\pconstproto{#1}{#2}\mainschindex{#1}} \newcommand{\constprotonoindex}[2]{\pconstproto{#1}{#2}} \endtexonly %%%%%%%%%%%%%%%% end of Latex proto definitions %%%%%%%%%%%%%%%% HTML prototypes \htmlonly \newcommand{\evalsto}{\verb| => |} \newenvironment{protos}{\begin{itemize}}{\end{itemize}} % The following is for prototypes that have return types. % (foo int int) -> int \newcommand{\protonoindex}[3]{% %\cindex{\code{#1}}% \item\noindent\code{({#1}{\var{#2}})~-->~{\var{#3}}}} \newcommand{\proto}[3]{% \protonoindex{#1}{#2}{#3}% \mainschindex{#1}}% \newcommand{\protonoresultnoindex}[2]{% %\cindex{\code{#1}}% \item\noindent\code{({#1}{\var{#2}\/})}} \newcommand{\protonoresult}[2]{% \protonoresultnoindex{#1}{#2}% \mainschindex{#1}}% \newcommand{\pconstproto}[2]{% \item\noindent\code{{#1}}\prototag{#2}} % Variable prototype \newcommand{\constproto}[2]{\pconstproto{#1}{#2}\mainschindex{#1}} \newcommand{\constprotonoindex}[2]{\pconstproto{#1}{#2}} \newcommand{\cproto}[1]{% \item\noindent\code{{#1}}} \newcommand{\cgcproto}[1]{% \item\noindent\code{{#1}}\prototag{may GC}} \newcommand{\syntaxprotonoresult}[2]{% \syntaxprotonoresultnoindex{#1}{#2}\mainschindex{#1}} \newcommand{\syntaxprotonoresultnoindex}[2]{% \item\noindent\code{({#1}{#2})}\prototag{syntax}} \newcommand{\protoresult}[1]{% \\{}\noindent\code{\ \ \ \ -->~{\it{#1}}}} \newcommand{\syntaxproto}[3]{% \item\noindent\code{({#1}{#2})~-->~{\var{#3}}}\prototag{syntax}} \newcommand{\prototag}[1]{\hfill\hbox{(#1)}} \endhtmlonly %%%%%%%%%%%%%%%% end of HTML proto definitions scheme48-1.9/doc/src/thread.tex000644 004306 005702 00000077760 12067075540 017374 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Robert Ransom \chapter{Threads} % safety (and the lack thereof) This chapter describes Scheme~48's thread system: Scheme~48 threads are fully preemptive; all threads (currently) run within a single operating system process. Scheme~48 allows writing customized, nested schedulers, and provides numerous facilities for the synchronization of shared-memory programs, most importantly \textit{proposals} for optimistic concurrency. \section{Creating and controlling threads} The bindings described in this section are part of the \code{threads} structure. % \begin{protos} \proto{spawn}{ thunk}{thread} \proto{spawn}{ thunk name}{thread} \end{protos} % \code{Spawn} creates a new thread, passes that thread to the current scheduler, and instructs the scheduler to run \cvar{thunk} in that thread. The \cvar{name} argument (a symbol) associates a symbolic name with the thread; it is purely for debugging purposes. % \begin{protos} \protonoresult{relinquish-timeslice}{} \protonoresult{sleep}{ time-in-milliseconds} \protonoresult{terminate-current-thread}{} \end{protos} % \code{Relinquish-timeslice} instructs the scheduler to run another thread, thus relinquishing the timeslice of the current thread. \code{Sleep} does the same and asks the scheduler to suspend the current thread for at least \cvar{time-in-milliseconds} milliseconds before resuming it. Finally, \code{terminate-current-thread} terminates the current thread. Each thread is represented by a thread object. The following procedures operate on that object: % \begin{protos} \proto{current-thread}{}{thread} \proto{thread?}{ thing}{boolean} \proto{thread-name}{ thread}{name} \proto{thread-uid}{ thread}{integer} \end{protos} % \code{Current-thread} returns the thread object associated with the currently running thread. \code{Thread?} is the predicate for thread objects. \code{Thread-name} extracts the name of the thread, if one was specified in the call to \code{spawn}, \code{\#f} otherwise. \code{Thread-uid} returns the \textit{uid} of the thread, a unique integer assigned by the thread system. \section{Advanced thread handling} The following bindings are part of the \code{threads-internal} structure: % \begin{protos} \protonoresultnoindex{terminate-thread!}{ thread}\mainschindex{terminate-thread"!} \protonoresultnoindex{kill-thread!}{ thread}\mainschindex{kill-thread"!} \end{protos} % \code{Terminate-thread!} unwinds the thread associated with \cvar{thread}, running any pending \code{dynamic-wind} \cvar{after} thunks (in that thread), after which the thread terminates. \code{Kill-thread!} causes the thread associated with \cvar{thread} to terminate immediately without unwinding its continuation. % \section{Debugging multithreaded programs} Debugging multithreaded programs can be difficult. As described in section~\ref{command-threads}, when any thread signals an error, Scheme~48 stops running all of the threads at that command level. The following procedure (exported by the structure \code{debug-messages}) is useful in debugging multi-threaded programs. \begin{protos} \protonoresult{debug-message}{ element$_0$ \ldots} \end{protos} \code{Debug-message} prints the elements to `\code{stderr}', followed by a newline. The only types of values that \code{debug-message} prints in full are small integers (fixnums), strings, characters, symbols, booleans, and the empty list. Values of other types are abbreviated as follows: % \begin{center} \begin{tabular}{ll} pair & \code{(...)}\\ vector & \code{\#(...)}\\ procedure & \code{\#\{procedure\}}\\ record & \code{\#\{\}}\\ all others & \code{???}\\ \end{tabular} \end{center} % The great thing about \code{debug-message} is that it bypasses Scheme~48's I/O and thread handling. The message appears immediately, with no delays or errors. \section{Optimistic concurrency} \label{sec:optimistic-concurrency} Most of the bindings described in this section are part of the \code{proposals} structure---the low-level bindings described at the very end of the section are part of the \code{low-proposals} structure. A \cvar{proposal} is a record of reads from and and writes to locations in memory. Each thread has an associated \textit{current proposal} (which may be \code{\#f}). The \cvar{logging} operations listed below record any values read or written in the current proposal. A reading operation, such as \code{provisional-vector-ref}, first checks to see if the current proposal contains a value for the relevant location. If so, that value is returned as the result of the read. If not, the current contents of the location are stored in the proposal and then returned as the result of the read. A logging write to a location stores the new value as the current contents of the location in the current proposal; the contents of the location itself remain unchanged. \cvar{Committing} to a proposal verifies that any reads logged in the proposal are still valid and, if so, performs any writes that the proposal contains. A logged read is valid if, at the time of the commit, the location contains the same value it had at the time of the original read (note that this does not mean that no change occurred, simply that the value now is the same as the value then). If a proposal has an invalid read then the effort to commit fails; no change is made to the value of any location. The verifications and subsequent writes to memory are performed atomically with respect to other proposal commit attempts. % Explain better? The \code{queues} structure (with source in \code{scheme/big/queue.scm}) is a thoroughly commented example of a moderately complex data structure made thread-safe using optimistic concurrency. \begin{protos} \proto{call-ensuring-atomicity}{ thunk}{value \ldots} \protonoresultnoindex{call-ensuring-atomicity!}{ thunk}\mainschindex{call-ensuring-atomicity"!} \syntaxproto{ensure-atomicity}{ \cvar{exp} \ldots}{value \ldots} \syntaxprotonoresultnoindex{ensure-atomicity!}{ \cvar{exp} \ldots}\mainschindex{ensure-atomicity"!} \end{protos} \noindent If there is a proposal in place \code{call-ensuring-atomicity} and \code{call-ensuring-atomicity!} simply make a (tail-recursive) call to \cvar{thunk}. If the current proposal is \code{\#f} they create a new proposal, install it, call \cvar{thunk}, and then try to commit to the proposal. This process repeats, with a new proposal on each iteration, until the commit succeeds. \code{Call-ensuring-atomicity} returns whatever values are returned by \cvar{thunk} on its final invocation, while \code{ensure-atomicity!} discards any such values and returns nothing. \code{Ensure-atomicity} and \code{ensure-atomicity!} are macro versions of \code{call-ensuring-atomicity} and \code{call-ensuring-atomicity!}: \code{(ensure-atomicity \cvar{exp} \ldots)} expands into \code{(call-ensuring-atomicity (lambda () \cvar{exp} \ldots))}; likewise for \code{ensure-atomicity!} and \code{call-ensuring-atomicity!}. \begin{protos} \proto{provisional-car}{ pair}{value} \proto{provisional-cdr}{ pair}{value} \protonoresultnoindex{provisional-set-car!}{ pair value}\mainschindex{provisional-set-car"!} \protonoresultnoindex{provisional-set-cdr!}{ pair value}\mainschindex{provisional-set-cdr"!} \proto{provisional-cell-ref}{ cell}{value} \protonoresultnoindex{provisional-cell-set!}{ cell value}\mainschindex{provisional-cell-set"!} \proto{provisional-vector-ref}{ vector i}{value} \protonoresultnoindex{provisional-vector-set!}{ vector i value}\mainschindex{provisional-vector-set"!} \proto{provisional-string-ref}{ vector i}{char} \protonoresultnoindex{provisional-string-set!}{ vector i char}\mainschindex{provisional-string-set"!} \proto{provisional-byte-vector-ref}{ vector i}{k} \protonoresultnoindex{provisional-byte-vector-set!}{ vector i k}\mainschindex{provisional-byte-vector-set"!} \end{protos} \noindent These are all logging versions of their Scheme counterparts. Reads are checked when the current proposal is committed and writes are delayed until the commit succeeds. If the current proposal is \code{\#f} these perform exactly as their Scheme counterparts. The following implementation of a simple counter may not function properly when used by multiple threads. \begin{example} (define (make-counter) (let ((value 0)) (lambda () (set! value (+ value 1)) value))) \end{example} Here is the same procedure using a proposal to ensure that each increment operation happens atomically. The value of the counter is kept in a cell (see section~\ref{cells}) to allow the use of logging operations. \begin{example} (define (make-counter) (let ((value (make-cell 0))) (lambda () (ensure-atomicity (lambda () (let ((v (+ (provisional-cell-ref value) 1))) (provisional-cell-set! value v) v)))))) \end{example} Because \code{ensure-atomicity} creates a new proposal only if there is no existing proposal in place, multiple atomic actions can be merged into a single atomic action. For example, the following procedure increments an arbitrary number of counters at the same time. This works even if the same counter appears multiple times; \code{(step-counters! c0 c0)} would add two to the value of counter \code{c0}. \begin{example} (define (step-counters! . counters) (ensure-atomicity (lambda () (for-each (lambda (counter) (counter)) counters)))) \end{example} \begin{example} (define-synchronized-record-type \cvar{tag} \cvar{type-name} (\cvar{constructor-name} \cvar{field-tag} \ldots) [(\cvar \cvar{field-tag} \ldots)] \cvar{predicate-name} (\cvar{field-tag} \cvar{accessor-name} [\cvar{modifier-name}]) \ldots) \end{example} This is the same as \code{define-record-type} except all field reads and writes are logged in the current proposal. If the optional list of field tags is present then only those fields will be logged. \begin{protos} \proto{call-atomically}{ thunk}{value(s)} \protonoresultnoindex{call-atomically!}{ thunk}\mainschindex{call-atomically"!} \syntaxproto{atomically}{ \cvar{exp} \ldots}{value(s)} \syntaxprotonoresultnoindex{atomically!}{ \cvar{exp} \ldots}\mainschindex{atomically"!} \end{protos} \noindent \code{Call-atomically} and \code{call-atomically!} are identical to \code{call-ensuring-atomicity} and \code{call-ensuring-atomicity!} except that they always install a new proposal before calling \code{thunk}. The current proposal is saved and then restored after \code{thunk} returns. \code{Call-atomically} and \code{call-atomically!} are useful if \code{thunk} contains code that is not to be combined with any other operation. \code{Atomically} and \code{atomically!} are macro versions of \code{call-atomically} and \code{call-atomically!}: \code{(atomically \cvar{exp} \ldots)} expands into \code{(call-atomically (lambda () \cvar{exp} \ldots))}; likewise for \code{atomically!} and \code{call-atomically!}. % example? The following procedures and macro are intended primarily for use in implementing new synchronization primitives or complex thread-safe data structures. \begin{protos} \syntaxproto{with-new-proposal}{ (\cvar{lose}) \cvar{exp} \ldots}{value \ldots} \proto{maybe-commit}{}{boolean} \proto{proposal-active?}{}{boolean} \protonoresultnoindex{remove-current-proposal!}{}\mainschindex{remove-current-proposal"!} \protonoresultnoindex{invalidate-current-proposal!}{}\mainschindex{invalidate-current-proposal"!} \end{protos} \noindent \code{With-new-proposal} saves the current proposal, installs a new one, executes the forms in the body, reinstalls the formerly current proposal, and returns whatever the last body form returned. It also binds \cvar{lose} to a thunk repeating the procedure of installing a new procedure and running the body. Typically, the body will call \code{maybe-commit} and, if that fails, tail-call \cvar{lose} to try again. If \cvar{lose} is called from a non-tail position of the body, the results are unspecified (and probably harmful). \code{Maybe-commit} verifies that any reads logged in the current proposal are still valid and, if so, performs any writes that it contains. A logged read is valid if, at the time of the commit, the location read contains the same value it had at the time of the original read (note that this does not mean that no change occurred, simply that the value now is the same as the value then). \code{Maybe-commit} returns \code{\#t} if the commit succeeds and \code{\#f} if it fails. \code{Proposal-active?} returns \code{\#t} if a proposal is active, and \code{\#f} otherwise. \code{Remove-current-proposal!} removes and discards the current proposal; this can be used to clean up before raising an error. \code{Invalidate-current-proposal!} ensures that any attempt to commit the current proposal will fail; this can be used if an operation on a thread-safe data structure detects that it has seen the data structure in an inconsistent state. The following procedures give access to the low-level proposal mechanism. They are defined in the \code{low-proposals} structure. \begin{protos} \proto{make-proposal}{}{proposal} \proto{current-proposal}{}{proposal} \protonoresultnoindex{set-current-proposal!}{ proposal}\mainschindex{set-current-proposal"!} \end{protos} \noindent \code{Make-proposal} creates a new proposal. \code{Current-proposal} and \code{set-current-proposal} access and set the current thread's proposal. It is an error to pass to \code{set-current-proposal!} a proposal that is already in use. \section{Condition variables} \label{sec:condition-variables} % these require proposals \textit{Condition variables} (defined in the \code{condvars} structure) allow threads perform condition synchronization: It allows threads to block, waiting for a specified condition---associated with a condition variable---to occur, and other threads to wake up the waiting threads when the condition is fulfilled. Note that, in Scheme~48, condition variables work in conjunction with proposals, not with mutex locks or semaphores, as in most other implementations of this concept. \begin{protos} \proto{make-condvar}{}{condvar} \proto{make-condvar}{ id}{condvar} \proto{condvar?}{ thing}{boolean} \protonoresultnoindex{set-condvar-has-value?!}{ condvar boolean}\mainschindex{set-condvar-has-value?"!} \proto{condvar-has-value?}{ condvar}{boolean} \protonoresultnoindex{set-condvar-value!}{ condvar value}\mainschindex{set-condvar-value"!} \proto{condvar-value}{ condvar}{value} \proto{maybe-commit-and-wait-for-condvar}{ condvar}{boolean} \protonoindex{maybe-commit-and-set-condvar!}{ condvar value}{boolean}\mainschindex{maybe-commit-and-set-condvar"!} \end{protos} % \code{Make-condvar} creates a condition variable. (The optional \cvar{id} argument is only for debugging purposes; the discloser for condition variables prints it out if present.) \code{Condvar?} is the predicate for condition variables. Each condition variable has an associated value and a flag \code{has-value?} signalling if the condition has already occured. The accessor for flag is \code{condvar-has-value?}; \code{set-condvar-has-value?!} sets it. Both are provisional operations and go through the current proposal. \code{Set-condvar-value!} sets the value of the condition variable (provisionally), and \code{condvar-value} extracts it. \code{Maybe-commit-and-wait-for-condvar} attempts to commit the current proposal. If the commit succeeds, it suspends the current thread and registers it with the \cvar{condvar} condition variable. Upon waking up again \code{maybe-commit-and-wait-for-condvar} returns \code{\#t}, If the commit fails, \code{maybe-commit-and-set-condvar} returns \code{\#f}. \code{Maybe-commit-and-set-condvar!} sets the value of the \cvar{condvar} condition variable to \cvar{value}, (provisionally) sets the \code{has-value?} flag to \code{\#t}, and then attempt to commit the current proposal. Upon success, it wakes up all suspended threads registered with \cvar{condvar} and returns \code{\#t}, otherwise, it returns \code{\#f}. \section{Mutual exclusion} Scheme~48 also has more traditional mutual-exclusion synchronization abstractions, specifically mutex locks and placeholders. Note that typically synchronization via optimistic concurrency is usually preferable: Mutual exclusion often puts the running program into an inconsistent state for the time of the inclusion, which has adverse effects on modularity and interruptibility. \subsection{Locks} The \code{locks} structure contains bindings that implement standard mutex locks: % \begin{protos} \proto{make-lock}{}{lock} \proto{lock?}{ thing}{boolean} \protonoresult{obtain-lock}{ lock} \proto{maybe-obtain-lock}{ lock}{boolean} \protonoresult{release-lock}{ lock} \end{protos} % \code{Make-lock} creates a lock in the ``released'' state. \code{Lock?} is the predicate for locks. \code{Obtain-lock} atomically checks if \cvar{lock} is in the ``released'' state. If it is, the lock is put into the ``obtained'' state, and \code{obtain-lock} returns immediately. If the lock is in the ``obtained'' state, the current thread is suspended and registered with the lock. \code{Maybe-obtain-lock}, like \code{obtain-lock}, checks the state of \cvar{lock}: if it is ``released,'' the lock is put into the ``obtained'' state, if it is ``obtained,'' \code{maybe-obtain-lock} returns immediately. \code{Maybe-obtain-lock} returns \code{\#t} if it was able to obtain the lock, and \code{\#f} otherwise. \code{Release-lock} does nothing if \cvar{lock} is in the ``released'' state. If it is in the ``obtained'' state, \code{release-lock} causes one of the threads suspended on an \code{obtain-lock} lock operation to continue execution. If that thread is the last thread registered with the lock, the lock is transferred to the ``released'' state. In any case, \code{release-lock} returns immediately. \subsection{Placeholders} \label{placeholders} The \code{placeholders} structure contains bindings for \textit{placeholders}---thread-safe, write-once variables, akin to ID-90 I-structures or CML I-variables. The typical scenario for placeholders is that, say, a thread~A computes a value needed by another thread~B at some unspecified time. Both threads share access to a placeholder; when A has computed the value, it places it into the placeholder. When B needs the value, it extracts it from placeholder, blocking if necessary. % \begin{protos} \proto{make-placeholder}{}{placeholder} \proto{make-placeholder}{ id}{placeholder} \proto{placeholder?}{ thing}{boolean} \protonoresultnoindex{placeholder-set!}{ placeholder value}\mainschindex{placeholder-set"!} \proto{placeholder-value}{ placeholder}{value} \end{protos} % \code{Make-placeholder} creates an empty placeholder. (The optional \cvar{id} argument is only for debugging purposes; the discloser for placeholders prints it out if present.) \code{Placeholder?} is the predicate for placeholders. \code{Placeholder-set!} places a value into a placeholder. Doing this more than once signals an error. \code{Placeholder-value} extracts the value from the placeholder and returns it. If the placeholder is empty, it blocks the current thread until it becomes full. \section{Writing custom synchronization abstractions} The bindings explained in this section are part of the \code{threads-internal} structure. They are concerned with suspending threads and making them runnable again upon some later event. Typically, a suspended thread needs to be recorded in a queue somewhere for later waking-up. To allow a thread to be recorded in multiple queues (say, when it waits for one of a number of events), such \textit{thread queues} are ordinary queues containing cells that, in turn, contain the thread objects themselves. Each thread has at most one such cell associated with it which is shared among all queues (or other data structures) holding on to the suspended thread. The cell is cleared when the thread is woken up. % \begin{protos} \proto{thread-queue-empty?}{ thread-queue}{boolean} \protonoindex{maybe-dequeue-thread!}{ thread-queue}{boolean}\mainschindex{maybe-dequeue-thread"!} \end{protos} % \code{Thread-queue-empty?} atomically checks whether the \cvar{thread-queue} thread queue is empty, i.e., if it does not contain non-empty cells. \code{Maybe-dequeue-thread!} provisionally dequeues a thread from \cvar{thread-queue} if it contains one. It returns the dequeued thread or \code{\#f} if the queue is empty. % \begin{protos} \proto{maybe-commit-and-block}{ cell}{boolean} \proto{maybe-commit-and-block-on-queue}{ thread-queue}{boolean} \proto{maybe-commit-and-make-ready}{ thread-or-queue}{boolean} \end{protos} % \code{Maybe-commit-and-block} attempts to commit the current proposal. If this succeeds, the current thread is blocked, the thread's cell is set to \cvar{cell}, and \code{\#t} is returned. Otherwise, \code{\#f} is returned. \code{Maybe-commit-and-block-on-queue} is like \code{maybe-commit-and-block}, excepts that it creates a fresh cell for the thread and enqueues it in \cvar{thread-queue} if the commit succeeds. \code{Maybe-commit-and-make-ready} accepts either a thread object or a thread queue as an argument. In either case, \code{maybe-commit-and-make-ready} tries to commit the current proposal. If that succeeds, \code{maybe-commit-and-make-ready} makes its argument runnable: if \cvar{thread-or-queue} is a thread, that thread is made runnable, if it is a thread queue, all threads on the queue are made runnable. (In the latter case, none of the threads actually runs until all have been made runnable.) \code{Maybe-commit-and-make-ready} returns \code{\#t} if it succeeded, and \code{\#f} otherwise. % \section{Writing your own schedulers} \section{Concurrent ML abstractions} The interface to the Concurrent ML abstractions in Scheme~48 is mostly analogous to the original implementation shipped with SML/NJ~\cite{Reppy:CML-book}. Note that both the interface and implementation are new and may change in future releases. The main terminological difference is that CML events are called \textit{rendezvous} in Scheme~48. For more information on programming with the CML abstractions, Reppy's book~\cite{Reppy:CML-book} is recommended. \subsection{Basic rendezvous combinators} The basic rendezvous combinators live in the \code{rendezvous} structure. % \begin{protos} \constproto{never-rv}{rendezvous} \proto{always-rv}{ value}{rendezvous} \end{protos} % \code{Never-rv} is a rendezvous that is never enabled for synchronization. (It is the same as the \code{never} event in CML.) \code{Always-rv} returns a rendezvous that is always enabled for synchronization, and always yields the same value \cvar{value}. (This is the same as the \code{alwaysEvt} function in CML.) % \begin{protos} \proto{choose}{ rendezvous \ldots}{rendezvous} \end{protos} % \code{Choose} creates a rendezvous representing the choice of its arguments: Synchronization on the resulting rendezvous will synchronize on one of the arguments to \code{choose}, depending on which becomes enabled first. (This is the same as the \code{choose} function in CML.) % \begin{protos} \proto{wrap}{ rendezvous proc}{rendezvous} \end{protos} % \code{Wrap} wraps a post-synchronization procedure around \cvar{rendezvous}: When the resulting rendezvous is synchronized, \cvar{rendezvous} is synchronized, and the value it yields is passed to \cvar{proc}; the value returned by \cvar{proc} then is the result of the synchronization. (This is the same as the CML \code{wrap} function.) % \begin{protos} \proto{guard}{ thunk}{rendezvous} \end{protos} % \code{Guard} delays the creation of a rendezvous until synchronization time: It returns a rendezvous that will, upon synchronization, turn into the rendezvous returned by \cvar{thunk}. \code{Guard} can be used to perform pre-synchronization actions such as resource allocation. (This is the same as the CML \code{guard} function.) % \begin{protos} \proto{with-nack}{ proc}{rendezvous} \end{protos} % \code{With-nack}, like \code{guard}, creates a delayed rendezvous: Upon synchronization, the rendezvous actually used is the one returned by \cvar{proc}. In addition to the functionality offered by \code{guard}, \cvar{proc} receives, as an argument, another rendezvous which becomes enabled when \emph{another} rendezvous involved in the synchronization (via \code{choose}) is picked instead of the one produced by \cvar{proc}. (This is the same as the CML \code{withNack} function.) % \begin{protos} \proto{sync}{ rendezvous}{value} \proto{select}{ rendezvous \ldots}{value} \end{protos} % \code{Sync} synchronizes the current thread on rendezvous \cvar{rendezvous}, returning the value it yields. \code{Select} synchronizes on the choice of its argument; \code{(select $r_1$ \ldots $r_n$)} is semantically equivalent to \code{(sync (choose select $r_1$ \ldots $r_n$))}, but may be implemented more efficiently. (These are the same as the CML functions \code{sync} and \code{select}.) \subsection{Synchronous channels} The \code{rendezvous-channels} structure contains abstractions for bidirectional, synchronous channels for communicating between two threads. % \begin{protos} \proto{make-channel}{}{channel} \proto{channel?}{ x}{boolean} \end{protos} % \code{Make-channel} creates a new synchronous channel. (This is the same as the CML \code{channel} function.) \code{Channel?} is the predicate for synchronous channels. % \begin{protos} \proto{send-rv}{ channel value}{rendezvous} \protonoresult{send}{ channel value} \end{protos} % \code{Send-rv} creates a rendezvous that, upon synchronization, sends message \cvar{value} on the synchronous channel \cvar{channel}. The synchronization suceeds only when another thread attempts to receive a message from \cvar{channel}. (This is the same as the CML \code{sendEvt} function.) \code{Send} directly sends a message \cvar{value} on channel \cvar{channel}; \code{(send $c$ $v$)} is equivalent to \code{(sync (send-rv $c$ $v$))}. (\code{Send} is the same as the CML \code{send} function.) % \begin{protos} \proto{receive-rv}{ channel}{rendezvous} \protonoresult{receive}{ channel} \end{protos} % \code{Receive-rv} creates a rendezvous which, upon synchronization, receives a message on channel \cvar{channel}. (This is the same as the CML \code{recEvt} function.) \code{Receive} directly receives a message on channel \cvar{channel}; \code{(receive $c$ $v$)} is equivalent to \code{(sync (receive-rv $c$ $v$))}. (\code{Receive} is the same as the CML \code{recv} function.) \subsection{Synchronous variables} Two structures contain abstractions for synchronous variables: the \code{rendezvous-placeholders} structure for so-called \textit{placeholders} (write-once variables), and the \code{rendezvous-jars} structure for \textit{jars} (which allow multiple updates.) \subsubsection{Placeholders} % Placeholders are write-once variables. The placeholders implemented by the \code{rendezvous-placeholders} structure offer equivalent functionality to the placeholders implemented by the \code{placeholders} structure (see Section~\ref{placeholders}), but additionally allow converting a placeholder into a rendezvous. Note, however, that placeholders from \code{placeholders} are different from and not interchangeable with placeholders from \code{rendezvous-placeholders}. % \begin{protos} \proto{make-placeholder}{}{placeholder} \proto{make-placeholder}{ id}{placeholder} \proto{placeholder?}{ x}{boolean} \end{protos} % \code{Make-placeholder} creates an empty placeholder. (The optional \cvar{id} argument is only for debugging purposes; the discloser for placeholders prints it out if present.) (This is the same as the CML \code{iVar} function.) \code{Placeholder?} is the predicate for placeholders. % \begin{protos} \protonoresultnoindex{placeholder-set!}{ placeholder value}\mainschindex{placeholder-set"!} \end{protos} % \code{Placeholder-set!} places a value into a placeholder. Doing this more than once signals an error. (This is the same as the CML \code{iPut} function.) % \begin{protos} \proto{placeholder-value-rv}{ placeholder}{rendezvous} \proto{placeholder-value}{ placeholder}{value} \end{protos} % \code{Placeholder-value} extracts the value from the placeholder and returns it. If the placeholder is empty, it blocks the current thread until it becomes full. (This is the same as the CML \code{iGet} function.) \code{Placeholder-value-rv} creates a rendezvous that will, upon synchronization, extract the value from the placeholder and yield it as a result. (This is the same as the CML \code{iGetEvt} function.) \subsubsection{Jars} A jar is a synchronous variable which can have two states: full and empty. It becomes full when a value it put into it; putting a value into a full jar is an error. Conversely, it becomes empty when a value is taken out of it. Trying to take a value out of an empty jar blocks until it becomes full. (Jars are similar to ID-90 M-structures.) Jars live in the \code{rendezvous-jars} structure. % \begin{protos} \proto{make-jar}{}{jar} \proto{make-jar}{ id}{jar} \proto{jar?}{ x}{boolean} \end{protos} % \code{Make-jar} creates an empty jar. (The optional \cvar{id} argument is only for debugging purposes; the discloser for jars prints it out if present.) (This is the same as the CML \code{mVar} function.) \code{Jar?} is the predicate for jars. \begin{protos} \protonoresultnoindex{jar-put!}{ jar value}\mainschindex{jar-put"!} \end{protos} % \code{Jar-put!} places a value into a jar if it is empty. Applying \code{jar-put!} to a full jar is an error. (This is the same as the CML \code{mPut} function.) % \begin{protos} \proto{jar-take-rv}{ placeholder}{rendezvous} \proto{jar-take}{ placeholder}{value} \end{protos} % \code{Jar-take} takes a value from a full jar, emptying it in the process. If the jar is empty, \code{jar-take} blocks until it becomes full. (This is the same as the CML \code{mTake} function.) \code{Jar-take-rv} creates a rendezvous that, upon synchronization, will extract the value from a jar and empty it in the process. (This is the same as the CML \code{mTakeEvt} function.) \subsection{Timeouts} The \code{rendezvous-time} structure allows creating rendezvous for alarms and timeouts: % \begin{protos} \proto{after-time-rv}{ milliseconds}{rendezvous} \proto{at-real-time-rv}{ time}{rendezvous} \end{protos} % \code{After-time-rv} creates a rendezvous that becomes enabled at time interval \cvar{milliseconds} after synchronization. (Actually, \cvar{milliseconds} is a minimum waiting time; the actual delay may be longer.) (This is the same as the CML \code{timeOutEvt} function.) \code{At-real-time-rv} creates a rendezvous that becomes enabled at an absolute time specified by \cvar{time}; this absolute time is specified in the same way as the return value \code{real-time} from the \code{time} structure. (This is the same as the CML \code{atTimeEvt} function.) \subsection{CML to Scheme correspondence} The following table lists the Scheme names that correspond to particular CML names. \texonly\begin{longtable}{ll}\endtexonly \htmlonly\begin{tabular}{ll}\endhtmlonly CML name & Scheme name\\\hline \multicolumn{2}{c}{\code{rendezvous}}\\ \code{never} & \code{never-rv}\\ \code{alwaysEvt} & \code{always-rv}\\ \code{choose} & \code{choose}\\ \code{wrap} & \code{wrap}\\ \code{guard} & \code{guard}\\ \code{withNack} & \code{with-nack}\\ \code{sync} & \code{sync}\\ \code{select} & \code{select}\\[1ex] \multicolumn{2}{c}{\code{rendezvous-channels}}\\ \code{channel} & \code{make-channel}\\ \code{sendEvt} & \code{send-rv}\\ \code{send} & \code{send}\\ \code{recEvt} & \code{receive-rv}\\ \code{rec} & \code{receive}\\[1ex] \multicolumn{2}{c}{\code{rendezvous-placeholders}}\\ \code{iVar} & \code{make-placeholder}\\ \code{iPut} & \code{placeholder-set!}\\ \code{iGet} & \code{placeholder-value}\\ \code{iGetEvt} & \code{placeholder-value-rv}\\[1ex] \multicolumn{2}{c}{\code{rendezvous-jars}}\\ \code{mVar} & \code{make-jar}\\ \code{mTake} & \code{jar-take}\\ \code{mTakeEvt} & \code{jar-take-rv}\\ \code{mPut} & \code{jar-put!}\\[1ex] \multicolumn{2}{c}{\code{rendezvous-time}}\\ \code{timeOutEvt} & \code{after-time-rv}\\ \code{atTimeEvt} & \code{at-real-time-rv} \texonly\end{longtable}\endtexonly \htmlonly\end{tabular}\endhtmlonly %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/unicode-Z-G-1.tex000644 004306 005702 00000000371 12074535601 020261 0ustar00sperberPUStaff000000 000000 \documentclass{report} \ifx\bmatrix\UNDEFINED\usepackage{amsmath}\fi \thispagestyle{empty} \begin{document} \begin{displaymath} \left[0,\#x\mathit{D7FF}\right] \cup \left[\#x\mathit{E000}, \#x\mathit{10FFFF}\right] \end{displaymath} \end{document} scheme48-1.9/doc/src/unicode.tex000644 004306 005702 00000040462 12067075540 017540 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Mike Sperber, Robert Ransom \chapter{Unicode} Scheme~48 fully supports ISO 10646 (Unicode): Scheme characters represent Unicode scalar values, and Scheme strings are arrays of scalar values. More information on Unicode can be found at \urlhd{http://www.unicode.org/}{the Unicode web site}{\code{http://www.unicode.org/}}. \section{Characters and their codes} Scheme~48 internally represents characters as Unicode scalar values. The \code{unicode} structure contains procedures for converting between characters and scalar values: % \begin{protos} \proto{char->scalar-value}{ char}{integer} \proto{scalar-value->char}{ integer}{char} \proto{scalar-value?}{ integer}{boolean} \end{protos} % \code{Char->scalar-value} returns the scalar value of a character, and \code{scalar-value->char} converts in the other direction. \code{Scalar-value->char} signals an error if passed an integer that is not a scalar value. Note that the Unicode scalar value range is % \begin{displaymath} \left[0,\#x\mathit{D7FF}\right] \cup \left[\#x\mathit{E000}, \#x\mathit{10FFFF}\right] \end{displaymath} % In particular, this excludes the surrogates, which UTF-16 uses to encode scalar values with two 16-bit words. Note that this representation differs from that of Java, which uses UTF-16 code units as the character representation---Scheme~48 effectively uses UTF-32, and is thus in line with other Scheme implementations and the current Unicode proposal for R$^6$RS, as set forth in SRFI~75. The R$^5$RS procedures \code{char->integer} and \code{integer->char} are synonyms for \code{char->scalar-value} and \code{scalar-value->char}, respectively. \section{Character and string literals} The syntax specified here is in line with the current Unicode proposal for R$^6$RS, as set forth in SRFI~75, except for case-sensitivity. (Scheme~48 is case-insensitive.) \subsection{Character literals} The following character names are available in addition to what R$^5$RS provides: % \begin{itemize} \item \verb|#\nul| (ASCII 0) \item \verb|#\alarm| (ASCII 7) \item \verb|#\backspace| (ASCII 8) \item \verb|#\tab| (ASCII 9) \item \verb|#\vtab| (ASCII 11) \item \verb|#\page| (ASCII 12) \item \verb|#\return| (ASCII 13) \item \verb|#\esc| (ASCII 27) \item \verb|#\rubout| (ASCII 127) \item \verb|#\x|\meta{x}\meta{x}\ldots{} hex, explicitly or implicitly delimited, where \meta{x}\meta{x}\ldots{} denotes the scalar value of the character \end{itemize} \subsection{String literals} The following escape characters in string literals are available in addition to what R$^5$RS provides: \begin{itemize} \item \verb|\a|: alarm (ASCII 7) \item \verb|\b|: backspace (ASCII 8) \item \verb|\t|: tab (ASCII 9) \item \verb|\n|: linefeed (ASCII 10) \item \verb|\v|: vertical tab (ASCII 11) \item \verb|\f|: formfeed (ASCII 12) \item \verb|\r|: return (ASCII 13) \item \verb|\e|: escape (ASCII 27) \item \verb|\'|: quote (ASCII 39, same as unquoted) \item \verb|\|\meta{newline}\meta{intraline whitespace}: elided (allows a single-line string to span source lines) \item \verb|\x|\meta{x}\meta{x}\ldots{}\verb|;| hex, where \meta{x}\meta{x}\ldots{} denotes the scalar value of the character \end{itemize} \subsection{Identifiers and symbol literals} Where R$^5$RS allows a \meta{letter}, Scheme~48 allows in addition any character whose scalar value is greater than 127 and whose Unicode general category is Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pd, Pc, Po, Sc, Sm, Sk, So, or Co. Moreover, when a backslash appears in a symbol, it must start a \verb|\x|\meta{x}\meta{x}\ldots{}\verb|;| escape, which identifies an arbitrary character to include in the symbol. Note that a backslash itself can be specified as \verb|\x5C;|. \section{Character classification and case mappings} The R$^5$RS character predicates---\code{char-whitespace?}, \code{char-lower-case?}, \code{char-upper-case?}, \code{char-numeric?}, and \code{char-alphabetic?}---all treat the full Unicode range. \code{Char-upcase} and \code{char-downcase} as well as \code{char-ci=?}, \code{char-ci?}, \code{char-ci>=?}, \code{string-ci=?}, \code{string-ci?}, \code{string-ci<=?}, \code{string-ci>=?} all use the standard simple locale-insensitive Unicode case folding. In addition, Scheme~48 provides the \code{unicode-char-maps} structure for more complete access to the Unicode character classification with the following procedures and macros: % \begin{protos} \syntaxproto{general-category}{ \cvar{general-category-name}}{general-category} \proto{general-category?}{ x}{boolean} \proto{general-category-id}{ general-category}{string} \proto{char-general-category}{ char}{general-category} \end{protos} % The syntax \code{general-category} returns a Unicode general category object associated with \cvar{general-category-name}. (See Figure~\ref{fig:unicode-categories} below.) \code{General-category?} is the predicate for general-category objects. \code{General-category-id} returns the Unicode category id as a string (also listed in Figure~\ref{fig:unicode-categories}). \code{Char-general-category} returns the general category of a character. \begin{figure}[tb] \centering \begin{tabular}{l|l|l} \cvar{general-category-name} & \cvar{primary-category-name} & Unicode category id \\\hline \texttt{uppercase-letter} & \texttt{letter} & \verb|"Lu"| \\ \texttt{lowercase-letter} & \texttt{letter} & \verb|"Ll"| \\ \texttt{titlecase-letter} & \texttt{letter} & \verb|"Lt"| \\ \texttt{modified-letter} & \texttt{letter} & \verb|"Lm"| \\ \texttt{other-letter} & \texttt{letter} & \verb|"Lo"| \\[1ex] \texttt{non-spacing-mark} & \texttt{mark} & \verb|"Mn"| \\ \texttt{combining-spacing-mark} & \texttt{mark} & \verb|"Mc"| \\ \texttt{enclosing-mark} & \texttt{mark} & \verb|"Me"| \\[1ex] \texttt{decimal-digit-number} & \texttt{number} & \verb|"Nd"| \\ \texttt{letter-number} & \texttt{number} & \verb|"Nl"| \\ \texttt{other-number} & \texttt{number} & \verb|"No"| \\[1ex] \texttt{opening-punctuation} & \texttt{punctuation} & \verb|"Ps"| \\ \texttt{closing-punctuation} & \texttt{punctuation} & \verb|"Pe"| \\ \texttt{initial-quote-punctuation} & \texttt{punctuation} & \verb|"Pi"| \\ \texttt{final-quote-punctuation} & \texttt{punctuation} & \verb|"Pf"| \\ \texttt{dash-punctuation} & \texttt{punctuation} & \verb|"Pd"| \\ \texttt{connector-punctuation} & \texttt{punctuation} & \verb|"Pc"| \\ \texttt{other-punctuation} & \texttt{punctuation} & \verb|"Po"| \\[1ex] \texttt{currency-symbol} & \texttt{symbol} & \verb|"Sc"| \\ \texttt{mathematical-symbol} & \texttt{symbol} & \verb|"Sm"| \\ \texttt{modifier-symbol} & \texttt{symbol} & \verb|"Sk"| \\ \texttt{other-symbol} & \texttt{symbol} & \verb|"So"| \\[1ex] \texttt{space-separator} & \texttt{separator} & \verb|"Zs"| \\ \texttt{paragraph-separator} & \texttt{separator} & \verb|"Zp"| \\ \texttt{line-separator} & \texttt{separator} & \verb|"Zl"| \\[1ex] \texttt{control-character} & \texttt{miscellaneous} & \verb|"Cc"| \\ \texttt{formatting-character} & \texttt{miscellaneous} & \verb|"Cf"| \\ \texttt{surrogate} & \texttt{miscellaneous} & \verb|"Cs"| \\ \texttt{private-use-character} & \texttt{miscellaneous} & \verb|"Co"| \\ \texttt{unassigned} & \texttt{miscellaneous} & \verb|"Cn"| \end{tabular} \caption{Unicode general categories and primary categories} \label{fig:unicode-categories} \end{figure} \begin{protos} \proto{general-category-primary-category}{ general-category}{primary-category} \syntaxproto{primary-category}{ \cvar{primary-category-name}}{primary-category} \proto{primary-category?}{ x}{boolean} \end{protos} % \code{General-category-primary-category} maps the general category to its associated primary category---also listed in Figure~\ref{fig:unicode-categories}. The \code{primary-category} syntax returns the primary-category object associated with \cvar{primary-category-name}. \code{Primary-category?} is the predicate for primary-category objects. The \code{unicode-char-maps} procedure also provides the following additional case-mapping procedures for characters: % \begin{protos} \proto{char-titlecase?}{ char}{boolean} \proto{char-titlecase}{ char}{char} \proto{char-foldcase}{ char}{char} \end{protos} % \code{Char-titlecase?} tests if a character is in titlecase. \code{Char-titlecase} returns the titlecase counterpart of a character. \code{Char-foldcase} folds the case of a character, i.e.\ maps it to uppercase first, then to lowercase. % The following case-mapping procedures on strings are available: % \begin{protos} \proto{string-upcase}{ string}{string} \proto{string-downcase}{ string}{string} \proto{string-titlecase}{ string}{string} \proto{string-foldcase}{ string}{string} \end{protos} % These implement the simple case mappings defined by the Unicode standard---note that the length of the output string may be different from that of the input string. \section{SRFI 14} The SRFI~14 (``Character Sets'') implementation in the \code{srfi-14} structure is fully Unicode-compliant. \section{R6RS} The \texttt{r6rs-unicode} structure exports the procedures from the \texttt{(r6rs unicode)} library of 5.91 draft of R$^6$RS that are not already in the \texttt{scheme} structure: \begin{flushleft} \texttt{string-normalize-nfd}\\ \texttt{string-normalize-nfkd}\\ \texttt{string-normalize-nfc}\\ \texttt{string-normalize-nfkc}\\ \texttt{char-titlecase}\\ \texttt{char-title-case?}\\ \texttt{char-foldcase}\\ \texttt{string-upcase}\\ \texttt{string-downcase}\\ \texttt{string-foldcase}\\ \texttt{string-titlecase} \end{flushleft} % The \texttt{r6rs-unicode} structure also exports a \texttt{char-general-category} procedure compatible with the \texttt{(r6rs unicode)} library. Note that, as Scheme~48 treats source code case-insensitively, the symbols it returns are all-lowercase. \section{I/O} Ports must encode any text a program writes to an output port to a byte sequence, and conversely decode byte sequences when a program reads text from an input port. Therefore, each port has an associated \textit{text codec}\mainindex{text codec} that describes how encode and decode text. Note that the interface to the text codec functionality is experimental and very likely to change in the future. \subsection{Text codecs} \label{text-codecs} The \code{i/o} structure defines the following procedures: % \begin{protos} \proto{port-text-codec}{ port}{text-codec} \protonoresultnoindex{set-port-text-codec!}{ port text-codec}\mainschindex{set-port-text-codec"!} \end{protos} % These two procedures retrieve and set the text codec associated with a port, respectively. A program can set text codec of a port at any time, even if it has already performed I/O on the port. The \code{text-codecs} structure defines the following procedures and macros: \begin{protos} \proto{text-codec?}{ x}{boolean} \constproto{null-text-codec}{ text-codec} \constproto{us-ascii-codec}{ text-codec} \constproto{latin-1-codec}{ text-codec} \constproto{utf-8-codec}{ text-codec} \constproto{utf-16le-codec}{ text-codec} \constproto{utf-16be-codec}{ text-codec} \constproto{utf-32le-codec}{ text-codec} \constproto{utf-32be-codec}{ text-codec} \proto{find-text-codec}{ string}{text-codec or {\tt \#f}} \end{protos} % \code{Text-codec?} is the predicate for text codecs. \code{Null-text-codec} is primarily meant for null ports that never yield input and swallow all output. The following text codecs implement the US-ASCII, Latin-1, Unicode UTF-8, Unicode UTF-16 (little-endian), Unicode UTF-16 (big-endian), Unicode UTF-32 (little-endian), Unicode UTF-32 (big-endian) encodings, respectively. \code{Find-text-codec} finds the codec associated with an encoding name. The names of the above encodings are \verb|"null"|, \verb|"US-ASCII"|, \verb|"ISO8859-1"|, \verb|"UTF-8"|, \verb|"UTF-16LE"|, \verb|"UTF-16BE"|, \verb|"UTF-32LE"|, and \verb|"UTF-32BE"|, respectively. \subsection{Text-codec utilities} The \code{text-codec-utils} structure exports a few utilities for dealing with text codecs: \begin{protos} \proto{guess-port-text-codec-according-to-bom}{ port}{text-codec or {\tt \#f}} \protonoindex{set-port-text-codec-according-to-bom!}{ port}{boolean}\mainschindex{set-port-text-codec-according-to-bom"!} \end{protos} % These procedures look at the byte-order-mark (also called the ``BOM'', \code{U+FEFF}) at the beginning of a port and guess the appropriate text codec. This works only for UTF-16 (little-endian and big-endian) and UTF-8. \code{Guess-port-text-codec-according-to-bom} returns the text codec, or \texttt{\#f} if it found no UTF-16 or UTF-8 BOM. Note that this actually reads from the port. If the guess does not succeed, it is probably a good idea to re-open the port. \code{Set-port-text-codec-according-to-bom!} calls \code{guess-port-text-codec-according-to-bom}, sets the port text codec to the result if successful and returns \texttt{\#t}. If it is not successful, it returns \texttt{\#f}. As with \code{guess-port-text-codec-according-to-bom}, this reads from the port, whether successful or not. \subsection{Creating text codecs} \begin{protos} \proto{make-text-codec}{ strings encode-proc decode-proc}{text-codec} \proto{text-codec-names}{ text-codec}{list of strings} \proto{text-codec-encode-char-proc}{ text-codec}{ encode-proc} \proto{text-codec-decode-char-proc}{ text-codec}{ decode-proc} \syntaxprotonoresult{define-text-codec}{ \cvar{id} \cvar{name} \cvar{encode-proc} \cvar{decode-proc}} \syntaxprotonoresult{define-text-codec}{ \cvar{id} (\cvar{name} \ldots) \cvar{encode-proc} \cvar{decode-proc}} \end{protos} % \code{Make-text-codec} constructs a text codec from a list of names, and an encode and a decode procedure. (See below on how to construct encode and decode procedures.) \code{Text-codec-names}, \code{text-codec-encode-char-proc}, and \code{text-codec-decode-char-proc} are the accessors for text codec. The \code{define-text-codec} is a shorthand for binding a global identifier to a text codec. Its first form is for codecs with only one name, the second for codecs with several names. Encoding and decoding procedures work as follows: % \begin{protos} \protonoindex{\cvar{encode-proc}}{ char buffer start count}{boolean maybe-count} \protonoindex{\cvar{decode-proc}}{ buffer start count}{maybe-char count} \end{protos} % An \cvar{encode-proc} consumes a character \var{char} to encode, a byte vector \var{buffer} to receive the encoding, an index \var{start} into the buffer, and a block size \var{count}. It is supposed to encode the bytes into the block at $\left[\var{start}, \var{start + count}\right)$. If the encoding is successful, the procedure must return \texttt{\#t} and the number of bytes needed by the encoding. If the character cannot be encoded at all, the procedure must return \texttt{\#f} and \texttt{\#f}. If the encoding is possible but the space is not sufficient, the procedure must return \texttt{\#f} and a total number of bytes needed for the encoding. A \cvar{decode-proc} consumes a byte vector \var{buffer}, an index \var{start} into the buffer, and a block size \var{count}. It is supposed to decode the bytes at indices $\left[\var{start}, \var{start + count}\right)$. If the decoding is successful, it must return the decoded character at the beginning of the block, and the number of bytes consumed. If the block cannot begin with or be a prefix of a valid encoding, the procedure must return \texttt{\#f} and \texttt{\#f}. If the block contains a true prefix of a valid encoding, the procedure must return \texttt{\#f} and a total count of bytes (including the buffer) needed to complete the encoding. Note that this byte count is only a guess: the system will provide that many bytes, but the decoding procedures might still signal an incomplete encoding, causing the system to try to obtain more. \section{Default encodings} The default encoding for new ports is UTF-8. For the default \code{current-input-port}, \code{current-output-port}, and \code{current-error-port}, Scheme~48 consults the OS for encoding information. For Unix, it consults \code{nl\_langinfo(3)}, which in turn consults the \code{LC\_} environment variables. If the encoding is not defined that way, Scheme~48 reverts to US-ASCII. Under Windows, Scheme~48 uses Unicode I/O (using UTF-16) for the default ports connected to the console, and Latin-1 for default ports that are not. %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/user-guide.tex000644 004306 005702 00000040776 12070060502 020155 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Robert Ransom \chapter{User's guide} This chapter details Scheme~48's user interface: its command-line arguments, command processor, debugger, and so forth. \section{Command line arguments} A few command line arguments are processed by Scheme~48 as it starts up. \code{scheme48} [\code{-i} \cvar{image}] [\code{-h} \cvar{heapsize}] % [\code{-s} \cvar{stacksize}] [\code{-a} \cvar{argument \ldots}] \begin{description} \item[{\tt -i} \cvar{image}] specifies a heap image file to resume. This defaults to a heap image that runs a Scheme command processor. Heap images are created by the \code{,dump} and \code{,build commands}, for which see below. \item[{\tt -h} \cvar{heapsize}] specifies how much space should be reserved for allocation. \cvar{Heapsize} is in words (where one word = 4 bytes), and covers both semispaces, only one of which is in use at any given time (except during garbage collection). Cons cells are currently 3 words, so if you want to make sure you can allocate a million cons cells, you should specify \code{-h 6000000} (actually somewhat more than this, to account for the initial heap image and breathing room). The default heap size is 3000000 words. The system will use a larger heap if the specified (or default) size is less than the size of the image being resumed. % #### true only for twospace GC; with BIBOP, specifies size of whole heap % (or unlimited heap size with -h 0) %\item[{\tt -s} \cvar{stacksize}] % specifies how much space should be reserved for the continuation % and environment stack. If this space is exhausted, continuations % and environments are copied to the heap. \cvar{Stacksize} is in words % and defaults to 2500. \item[{\tt -a} \cvar{argument \ldots}] is only useful with images built using \code{,build}. The arguments are passed as a list of OS strings (see section \ref{os-strings}) to the procedure specified in the \code{,build} command. For example: \begin{example} > ,open os-strings > (define (f xs) (write (map os-string->string xs)) (newline) 0) ;must return an integer > ,build f foo.image > ,exit \% scheme48vm -i foo.image -a mumble "foo x" -h 5000000 ("mumble" "foo x" "-h" "5000000") \% \end{example} \item[{\tt -I} \cvar{image} \cvar{argument \ldots}] is equivalent to {\tt % -h 0 -i \cvar{image} -a \cvar{argument \ldots}}. On most Unix-like systems, a heap image can be made executable with the following Bourne shell commands: \begin{example} \% (echo '\#!\cvar{/s48/install/prefix}/lib/scheme48-1.9/scheme48vm -I' cat \cvar{original.image}) >\cvar{new.image} \% chmod +x \cvar{new.image} \end{example} \end{description} The usual definition of the \code{s48} or \code{scheme48} command is actually a shell script that starts up the Scheme~48 virtual machine with a \code{-i \cvar{imagefile}} specifying the development environment heap image and a \code{-o \cvar{vm-executable}} specifying the location of the virtual-machine executable (the executable is needed for loading external code on some versions of Unix; see section~\ref{dynamic-externals} for more information). The file \code{go} in the Scheme~48 installation source directory is an example of such a shell script. \section{Command processor} When you invoke the default heap image, a command processor starts running. The command processor acts as both a read-eval-print loop, reading expressions, evaluating them, and printing the results, and as an interactive debugger and data inspector. See Chapter~\ref{chapter:command-processor} for a description of the command processor. \section{Editing} We recommend running Scheme~48 under GNU Emacs or XEmacs using the \code{cmuscheme48} command package. This is in the Scheme~48 distribution's \code{emacs/} subdirectory and is included in XEmacs's \code{scheme} package. It is a variant of the \code{cmuscheme} library, which comes to us courtesy of Olin Shivers, formerly of CMU. You might want to put the following in your Emacs init file (\code{.emacs}): \begin{example} (setq scheme-program-name "scheme48") (autoload 'run-scheme "cmuscheme48" "Run an inferior Scheme process." t) \end{example} The Emacs function \code{run-scheme} can then be used to start a process running the program \code{scheme48} in a new buffer. To make the \code{autoload} and \code{(require \ldots)} forms work, you will also need to put the directory containing \code{cmuscheme} and related files in your emacs load-path: \begin{example} (setq load-path (append load-path '("\cvar{scheme-48-directory}/emacs"))) \end{example} Further documentation can be found in the files \code{emacs/cmuscheme48.el} and \code{emacs/comint.el}. \section{Performance} \label{section:performance} If you want to generally have your code run faster than it normally would, enter \code{inline-values} mode before loading anything. Otherwise calls to primitives (like \code{+} and \code{cons}) and in-line procedures (like \code{not} and \code{cadr}) won't be open-coded, and programs will run more slowly. The system doesn't start in \code{inline-values} mode by default because the Scheme report permits redefinitions of built-in procedures. With this mode set, such redefinitions don't work according to the report, because previously compiled calls may have in-lined the old definition, leaving no opportunity to call the new definition. \code{Inline-values} mode is controlled by the \code{inline-values} switch. \code{,set inline-values} and \code{,unset inline-values} turn it on and off. \section{Disassembler} The \code{,dis} command prints out the disassembled byte codes of a procedure. \begin{example} > ,dis cons cons 0 (protocol 2) 2 (pop) 3 (make-stored-object 2 pair) 6 (return) > \end{example} The current byte codes are listed in the file \code{scheme/vm/interp/arch.scm}. A somewhat out-of-date description of them can be found in \cite{Kelsey-Rees:Scheme48}. The command argument is optional; if unsupplied it defaults to the current focus object (\code{\#\#}). The disassembler can also be invoked on continuations and templates. \section{Module system} \label{module-guide} This section gives a brief description of modules and related entities. For detailed information, including a description of the module configuration language, see chapter \ref{chapter:modules}. % JAR says: this paragraph is muddy. A {\em module} is an isolated namespace, with visibility of bindings controlled by module descriptions written in a special configuration language. A module may be instantiated as a {\em package}, which is an environment in which code can be evaluated. Most modules are instantiated only once and so have a unique package. A {\em structure} is a subset of the bindings in a package. Only by being included in a structure can a binding be made visible in other packages. A structure has two parts, the package whose bindings are being exported and the set of names that are to be exported. This set of names is called an {\em interface}. A module then has three parts: \begin{itemize} \item a set of structures whose bindings are to be visible within the module \item the source code to be evaluated within the module \item a set of exported interfaces \end{itemize} Instantiating a module produces a package and a set of structures, one for each of the exported interfaces. The following example uses \code{define-structure} to create a module that implements simple cells as pairs, instantiates this module, and binds the resulting structure to \code{cells}. The syntax \code{(export \cvar{name \ldots})} creates an interface containing \cvar{name \ldots}. The \code{open} clause lists structures whose bindings are visible within the module. The \code{begin} clause contains source code. \begin{example} (define-structure cells (export make-cell cell-ref cell-set!) (open scheme) (begin (define (make-cell x) (cons 'cell x)) (define cell-ref cdr) (define cell-set! set-cdr!))) \end{example} Cells could also have been implemented using the record facility described in section~\ref{records} and available in structure \code{define-record-type}. \begin{example} (define-structure cells (export make-cell cell-ref cell-set!) (open scheme define-record-types) (begin (define-record-type cell :cell (make-cell value) cell? (value cell-ref cell-set!)))) \end{example} With either definition the resulting structure can be used in other modules by including \code{cells} in an \code{open} clause. The command interpreter is always operating within a particular package. Initially this is a package in which only the standard Scheme bindings are visible. The bindings of other structures can be made visible by using the \code{,open} command described in section~\ref{module-command-guide} below. Note that this initial package does not include the configuration language. Module code needs to be evaluated in the configuration package, which can be done by using the {\code ,config} command: \begin{example} > ,config (define-structure cells \ldots) > ,open cells > (make-cell 4) '(cell . 4) > (define c (make-cell 4)) > (cell-ref c) 4 \end{example} \section{Library} A number of useful utilities are either built in to Scheme~48 or can be loaded from an external library. These utilities are not visible in the user environment by default, but can be made available with the \code{open} command. For example, to use the \code{tables} structure, do \begin{example} > ,open tables > \end{example} If the utility is not already loaded, then the \code{,open} command will load it. Or, you can load something explicitly (without opening it) using the \code{load-package} command: \begin{example} > ,load-package queues > ,open queues \end{example} When loading a utility, the message "Note: optional optimizer not invoked" is innocuous. Feel free to ignore it. See also the package system documentation, in chapter~\ref{chapter:modules}. Not all of the the libraries available in Scheme~48 are described in this manual. All are listed in files \code{rts-packages.scm}, \code{comp-packages.scm}, \code{env-packages.scm}, and \code{more-packages.scm} in the \code{scheme} directory of the distribution, and the bindings they export are listed in \code{interfaces.scm} and \code{more-interfaces.scm} in the same directory. %architecture % Information about the virtual machine. E.g. % (enum op eq?) => the integer opcode of the EQ? instruction % %big-scheme % Many generally useful features. See doc/big-scheme.txt. % %bigbit % Extensions to the bitwise logical operators (exported by % the BITWISE structure) so that they operate on bignums. % To use these you should do % % ,load-package bigbit % ,open bitwise % %conditions % Part of the condition system: DEFINE-CONDITION-PREDICATE and % routines for examining condition objects. (See also handle, % signals.) % %defpackage % The module system: DEFINE-STRUCTURE and DEFINE-INTERFACE. % %destructuring % DESTRUCTURE macro. See doc/big-scheme.txt. % %display-conditions % Displaying condition objects. % (DISPLAY-CONDITION condition port) \goesto{} unspecific % Display condition in an easily readable form. E.g. %\begin{example} % > ,open display-conditions handle conditions % > (display-condition % (call-with-current-continuation % (lambda (k) % (with-handler (lambda (c punt) % (if (error? c) % (k c) % (punt))) % (lambda () (+ 1 'a))))) % (current-output-port)) % % Error: exception % (+ 1 'a) % > %\end{example} % %extended-ports % Ports for reading from and writing to strings, and related things. % See doc/big-scheme.txt. % %filenames % Rudimentary file name parsing and synthesis. E.g. % file-name-directory and file-name-nondirectory are as in Gnu emacs. % %floatnums % Floating point numbers. These are in a very crude state; use at % your own risk. They are slow and do not read or print correctly. % %fluids % Dynamically bound "variables." % (MAKE-FLUID top-level-value) \goesto{} a "fluid" object % (FLUID fluid) \goesto{} current value of fluid object % (SET-FLUID! fluid value) \goesto{} unspecific; changes current value of % fluid object % (LET-FLUID fluid value thunk) \goesto{} whatever thunk returns % Within the dynamic extent of execution of (thunk), the fluid % object has value as its binding (unless changed by SET-FLUID! % or overridden by another LET-FLUID). % E.g. % (define f (make-fluid 7)) % (define (baz) (+ (fluid f) 1)) % (baz) ;\goesto{} 8 % (let-fluid f 4 (lambda () (+ (baz) 1))) ;\goesto{} 6 % %formats % A simple FORMAT procedure, similar to Common Lisp's or T's. % See doc/big-scheme.txt for documentation. % %handle % Part of the condition system. % (WITH-HANDLER handler thunk) \goesto{} whatever thunk returns. % handler is a procedure of two arguments. The first argument % is a condition object, and the second is a "punt" procedure. % The handler should examine the condition object (using ERROR?, % etc. from the CONDITIONS structure). If it decides not to do % anything special, it should tail-call the "punt" procedure. % Otherwise it should take appropriate action and perform a % non-local exit. It should not just return unless it knows % damn well what it's doing; returns in certain situations can % cause VM crashes. % %interrupts % Interrupt system % %ports % A few extra port-related operations, notably FORCE-OUTPUT. % %pp % A pretty-printer. (p \cvar{exp}) will pretty-print the result of \cvar{exp}, % which must be an S-expression. (Source code for procedures is not % retained or reconstructed.) You can also do (p \cvar{exp} \cvar{port}) to % print to a specific port. % % The procedure pretty-print takes three arguments: the object to be % printed, a port to write to, and the current horizontal cursor % position. If you've just done a newline, then pass in zero for % the position argument. % % The algorithm is very peculiar, and sometimes buggy. % %queues % FIFO queues. % %random % Not-very-random random number generator. The \cvar{seed} should be between % 0 and 2$^{28}$ exclusive. % % > (define random (make-random \cvar{seed})) % > (random) \goesto{} pseudo-random number between 0 and 2$^{28}$ % %receiving % Convenient interface to the call-with-values procedure, like % Common Lisp's multiple-value-bind macro. See doc/big-scheme.txt. % %records % MAKE-RECORD-TYPE and friends. See the Scheme of Things column in % Lisp Pointers, volume 4, number 1, for documentation. % %recnums % Complex numbers. This should be loaded (e.g. with ,load-package) % but needn't be opened. % %search-trees % Balanced binary search trees. See comments at top of % big/search-tree.scm. % %signals % ERROR, WARN, and related procedures. % %sort % Online merge sort (see comment at top of file big/sort.scm). % % (sort-list \cvar{list} \cvar{pred}) % (sort-list! \cvar{list} \cvar{pred}) % %sicp % Compatibility package for the Scheme dialect used in the book % "Structure and Interpretation of Computer Programs." % %sockets % Interface to Unix BSD sockets. See comments at top of file % misc/socket.scm. % %threads % Multitasking. See doc/threads.txt. % %util % SUBLIST, ANY, REDUCE, FILTER, and some other useful things. % %weak % Weak pointers and populations. % (MAKE-WEAK-POINTER thing) => weak-pointer % (WEAK-POINTER-REF weak-pointer) => thing or \code{\#f} % \code{\#f} if the thing has been gc'ed. % %writing % (RECURRING-WRITE thing port recur) => unspecific % This is the same as WRITE except that recursive calls invoke % the recur argument instead of WRITE. For an example, see % the definition of LIMITED-WRITE in env/dispcond.scm, which % implements processing similar to common Lisp's *print-level* % and *print-length*. %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/utilities.tex000644 004306 005702 00000322764 12067075540 020135 0ustar00sperberPUStaff000000 000000 % Part of Scheme 48 1.9. See file COPYING for notices and license. % Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Robert Ransom, % Marcel Turino, David van Horn % Still to do: % destructure % format (?) \chapter{Libraries} Use the \code{,open} command (section~\ref{module-command-guide}) or the module language (chapter~\ref{module-guide}) to open the structures described below. \section{General utilities} \label{big-util} %% These are missing: %% copy-string %% string->immutable-string %% error %% breakpoint These are in the \code{big-util} structure. \begin{protos} \proto{atom?}{ value}{boolean} \end{protos} % \code{(atom? \var{x})} is the same as \code{(not (pair? \var{x}))}. \begin{protos} \proto{null-list?}{ list}{boolean} \end{protos} % Returns true for the empty list, false for a pair, and signals an error otherwise. \begin{protos} \proto{neq?}{ value value}{boolean} \end{protos} \code{(neq? \var{x} \var{y})} is the same as \code{(not (eq? \var{x} \var{y}))}. \begin{protos} \proto{n=}{ number number}{boolean} \end{protos} \code{(n= \var{x} \var{y})} is the same as \code{(not (= \var{x} \var{y}))}. \begin{protos} \proto{identity}{ value}{value} \proto{no-op}{ value}{value} \end{protos} These both just return their argument. \code{No-op} is guaranteed not to be compiled in-line, \code{identity} may be. \begin{protos} \proto{memq?}{ value list}{boolean} \end{protos} % Returns true if \var{value} is in \var{list}, false otherwise. \begin{protos} \proto{any?}{ predicate list}{boolean} \end{protos} Returns true if \var{predicate} is true for any element of \var{list}. \begin{protos} \proto{every?}{ predicate list}{boolean} \end{protos} Returns true if \var{predicate} is true for every element of \var{list}. \begin{protos} \proto{any}{ predicate list}{value} \proto{first}{ predicate list}{value} \end{protos} \code{Any} returns some element of \var{list} for which \var{predicate} is true, or false if there are none. \code{First} does the same except that it returns the first element for which \var{predicate} is true. \begin{protos} \proto{filter}{ predicate list}{list} \protonoindex{filter!}{ predicate list}{list}\mainschindex{filter"!} \end{protos} Returns a list containing all of the elements of \var{list} for which \var{predicate} is true. The order of the elements is preserved. \code{Filter!} may reuse the storage of \var{list}. \begin{protos} \proto{filter-map}{ procedure list}{list} \end{protos} The same as \code{filter} except the returned list contains the results of applying \var{procedure} instead of elements of \var{list}. \code{(filter-map \var{p} \var{l})} is the same as \code{(filter identity (map \var{p} \var{l}))}. \begin{protos} \proto{partition-list}{ predicate list}{list list} \protonoindex{partition-list!}{ predicate list}{list list}\mainschindex{partition-list"!} \end{protos} The first return value contains those elements \var{list} for which \var{predicate} is true, the second contains the remaining elements. The order of the elements is preserved. \code{Partition-list!} may reuse the storage of the \var{list}. \begin{protos} \proto{remove-duplicates}{ list}{list} \end{protos} Returns its argument with all duplicate elements removed. The first instance of each element is preserved. \begin{protos} \proto{delq}{ value list}{list} \protonoindex{delq!}{ value list}{list}\mainschindex{delq"!} \proto{delete}{ predicate list}{list} \end{protos} All three of these return \var{list} with some elements removed. \code{Delq} removes all elements \code{eq?} to \var{value}. \code{Delq!} does the same and may modify the list argument. \code{Delete} removes all elements for which \var{predicate} is true. Both \code{delq} and \code{delete} may reuse some of the storage in the list argument, but won't modify it. \begin{protos} \protonoindex{reverse!}{ list}{list}\mainschindex{reverse"!} \end{protos} Destructively reverses \var{list}. \begin{protos} \proto{concatenate-symbol}{ value \ldots}{symbol} \end{protos} Returns the symbol whose name is produced by concatenating the \code{display}ed representations of \var{value}~\ldots. \begin{example} (concatenate-symbol 'abc "-" 4) \(\Longrightarrow\) 'abc-4 \end{example} \section{Pretty-printing} These are in the \code{pp} structure. \begin{protos} \protonoresult{p}{ value} \protonoresult{p}{ value output-port} \protonoresult{pretty-print}{ value output-port position} \end{protos} Pretty-print \var{value} The current output port is used if no port is specified. \var{Position} is the starting offset. \var{Value} will be pretty-printed to the right of this column. \section{Bitwise integer operations} These functions use the two's-complement representation for integers. There is no limit to the number of bits in an integer. They are in the structures \code{bitwise} and \code{big-scheme}. \begin{protos} \proto{bitwise-and}{ integer integer \ldots}{integer} \proto{bitwise-ior}{ integer integer \ldots}{integer} \proto{bitwise-xor}{ integer integer \ldots}{integer} \proto{bitwise-not}{ integer} {integer} \end{protos} \noindent These perform various logical operations on integers on a bit-by-bit basis. `\code{ior}' is inclusive OR and `\code{xor}' is exclusive OR. \begin{protos} \proto{arithmetic-shift}{ integer bit-count}{integer} \end{protos} \noindent Shifts the integer by the given bit count, which must be an integer, shifting left for positive counts and right for negative ones. Shifting preserves the integer's sign. \begin{protos} \proto{bit-count}{ integer}{integer} \end{protos} \noindent Counts the number of bits set in the integer. If the argument is negative a bitwise NOT operation is performed before counting. \section{Byte vectors} These are homogeneous vectors of small integers ($0 \le i \le 255$). The functions that operate on them are analogous to those for vectors. They are in the structure \code{byte-vectors}. \begin{protos} \proto{byte-vector?}{ value}{boolean} \proto{make-byte-vector}{ k fill}{byte-vector} \proto{byte-vector}{ b \ldots}{byte-vector} \proto{byte-vector-length}{ byte-vector}{integer} \proto{byte-vector-ref}{ byte-vector k}{integer} \protonoresultnoindex{byte-vector-set!}{ byte-vector k b}\mainschindex{byte-vector-set"!} \proto{byte-vector=?}{ byte-vector byte-vector}{boolean} \end{protos} \section{Sparse vectors} These are vectors that grow as large as they need to. That is, they can be indexed by arbitrarily large nonnegative integers. The implementation allows for arbitrarily large gaps by arranging the entries in a tree. They are in the structure \code{sparse-vectors}. \begin{protos} \proto{make-sparse-vector}{}{sparse-vector} \proto{sparse-vector-ref}{ sparse-vector k}{value} \protonoresultnoindex{sparse-vector-set!}{ sparse-vector k value}\mainschindex{sparse-vector-set"!} \proto{sparse-vector->list}{ sparse-vector}{list} \end{protos} % \code{Make-sparse-vector}, \code{sparse-vector-ref}, and \code{sparse-vector-set!} are analogous to \code{make-vector}, \code{vector-ref}, and \code{vector-set!}, except that the indices passed to \code{sparse-vector-ref} and \code{sparse-vector-set!} can be arbitrarily large. For indices whose elements have not been set in a sparse vector, \code{sparse-vector-ref} returns \code{\#f}. \code{Sparse-vector->list} is for debugging: It returns a list of the consecutive elements in a sparse vector from 0 to the highest element that has been set. Note that the list will also include all the \code{\#f} elements for the unset elements. \section{Cells} \label{cells} These hold a single value and are useful when a simple indirection is required. The system uses these to hold the values of lexical variables that may be \code{set!}. \begin{protos} \proto{cell?}{ value}{boolean} \proto{make-cell}{ value}{cell} \proto{cell-ref}{ cell}{value} \protonoresultnoindex{cell-set!}{ cell value}\mainschindex{cell-set"!} \end{protos} \section{Queues} These are ordinary first-in, first-out queues. The procedures are in structure \code{queues}. \begin{protos} \proto{make-queue}{}{queue} \proto{queue?}{ value}{boolean} \proto{queue-empty?}{ queue}{boolean} \proto{list->queue}{ values}{queue} \protonoresultnoindex{enqueue!}{ queue value}\mainschindex{enqueue"!} \protonoresultnoindex{enqueue-many!}{ queue list}\mainschindex{enqueue-many"!} \proto{queue-head-or-value}{ queue value}{value} \proto{queue-head-or-thunk}{ queue thunk}{value} \proto{queue-head}{ queue}{value} \proto{maybe-queue-head}{ queue}{value} \protonoindex{dequeue-or-value!}{ queue value}{value}\mainschindex{dequeue-or-value"!} \protonoindex{dequeue-or-thunk!}{ queue thunk}{value}\mainschindex{dequeue-or-thunk"!} \protonoindex{dequeue!}{ queue}{value}\mainschindex{dequeue"!} \protonoindex{maybe-dequeue!}{ queue}{value}\mainschindex{maybe-dequeue"!} \protonoresultnoindex{empty-queue!}{ queue}\mainschindex{empty-queue"!} \end{protos} \noindent \code{Make-queue} creates an empty queue, \code{queue?} is a predicate for identifying queues, and \code{queue-empty?} tells you if a queue is empty. \code{List->queue} returns a queue containing \var{values}, preserving their order. \code{Enqueue!} adds one value to the queue; \code{enqueue-many!} adds a list of values to the queue. \code{Queue-head-or-value}, \code{queue-head-or-thunk}, \code{queue-head}, and \code{maybe-queue-head} return the first value in \var{queue} if it is not empty; if the queue is empty, \code{queue-head-or-value} returns \var{value}, \code{queue-head-or-thunk} tail-calls \var{thunk}, \code{queue-head} raises an error, and \code{maybe-queue-head} returns \code{\#f}. \code{Dequeue-or-value!}, \code{dequeue-or-thunk!}, \code{dequeue!}, and \code{maybe-dequeue!} remove a value from the queue if one is available; if the queue is empty, \code{dequeue-or-value!} returns \var{value}, \code{dequeue-or-thunk!} tail-calls \var{thunk}, \code{dequeue!} raises an error, and \code{maybe-dequeue!} returns \code{\#f}. \code{Empty-queue!} removes all values from \var{queue}. \code{(Dequeue-or-value! q value)} is more efficient than, but otherwise equivalent to: \begin{example} (ensure-atomicity (if (queue-empty? q) value (dequeue! q))) \end{example} Because \code{queue-head} and \code{dequeue!} raise exceptions if they are called on an empty queue, they {\em must not} be called with a proposal already active unless \code{queue-empty?} has returned \code{\#f} with the same proposal active. The following procedures are not used in the \hack{} system, and are {\em very} slow. These operations may be removed from the \code{queues} structure in a future revision. \begin{protos} \proto{queue-length}{ queue}{integer} \proto{queue->list}{ queue}{values} \protonoindex{delete-from-queue!}{ queue value}{boolean}\mainschindex{delete-from-queue"!} \proto{on-queue?}{ queue value}{boolean} \end{protos} \noindent \code{Queue-length} returns the number of values in \var{queue}. \code{Queue->list} returns the values in \var{queue} as a list, in the order in which the values were added. \code{Delete-from-queue!} removes the first instance of \var{value} from \var{queue}, using \code{eqv?} for comparisons. \code{Delete-from-queue!} returns \code{\#t} if it removes an element and \code{\#f} if it does not. \code{On-queue?} returns \code{\#t} if \var{value} is in the \var{queue} (using \code{eqv?} for comparisons) and \code{\#f} if it is not. \section{Arrays} These provide N-dimensional, zero-based arrays and are in the structure \code{arrays}. The array interface is derived from one invented by Alan Bawden. \begin{protos} \proto{make-array}{ value dimension$_0$ \ldots}{array} \proto{array}{ dimensions element$_0$ \ldots}{array} \proto{copy-array}{ array}{array} \end{protos} \noindent \code{Make-array} makes a new array with the given dimensions, each of which must be a non-negative integer. Every element is initially set to \cvar{value}. \code{Array} Returns a new array with the given dimensions and elements. \cvar{Dimensions} must be a list of positive integers, The number of elements should be the equal to the product of the dimensions. The elements are stored in row-major order. \begin{example} (make-array 'a 2 3) \evalsto \{Array 2 3\} (array '(2 3) 'a 'b 'c 'd 'e 'f) \evalsto \{Array 2 3\} \end{example} \code{Copy-array} returns a copy of \cvar{array}. The copy is identical to the \cvar{array} but does not share storage with it. \begin{protos} \proto{array?}{ value}{boolean} \end{protos} \noindent Returns \code{\#t} if \cvar{value} is an array. \begin{protos} \proto{array-ref}{ array index$_0$ \ldots}{value} \protonoresultnoindex{array-set!}{ array value index$_0$ \ldots}\mainschindex{array-set"!} \proto{array->vector}{ array}{vector} \proto{array-shape}{ array}{list} \end{protos} \noindent \code{Array-ref} returns the specified array element and \code{array-set!} replaces the element with \cvar{value}. \begin{example} (let ((a (array '(2 3) 'a 'b 'c 'd 'e 'f))) (let ((x (array-ref a 0 1))) (array-set! a 'g 0 1) (list x (array-ref a 0 1)))) \evalsto '(b g) \end{example} \code{Array->vector} returns a vector containing the elements of \cvar{array} in row-major order. \code{Array-shape} returns the dimensions of the array as a list. \begin{protos} \proto{make-shared-array}{ array linear-map dimension$_0$ \ldots}{array} \end{protos} \noindent \code{Make-shared-array} makes a new array that shares storage with \cvar{array} and uses \cvar{linear-map} to map indexes to elements. \cvar{Linear-map} must accept as many arguments as the number of \cvar{dimension}s given and must return a list of non-negative integers that are valid indexes into \cvar{array}. \begin{example} (array-ref (make-shared-array a f i0 i1 ...) j0 j1 ...) \end{example} is equivalent to \begin{example} (apply array-ref a (f j0 j1 ...)) \end{example} As an example, the following function makes the transpose of a two-dimensional array: \begin{example} (define (transpose array) (let ((shape (array-shape array))) (make-shared-array array (lambda (x y) (list y x)) (cadr shape) (car shape)))) (array->vector (transpose (array '(2 3) 'a 'b 'c 'd 'e 'f))) \evalsto '(a d b e c f) \end{example} \section{Records} \label{records} New types can be constructed using the \code{define-record-type} macro from the \code{define-record-types} structure The general syntax is: \begin{example} (define-record-type [\cvar{tag}] \cvar{type-name} (\cvar{constructor-name} \cvar{field-tag} \ldots) \cvar{predicate-name} (\cvar{field-tag} \cvar{accessor-name} [\cvar{modifier-name}]) \ldots) \end{example} This makes the following definitions: \begin{protos} \constprotonoindex{\cvar{type-name}}{type} \protonoindex{\cvar{constructor-name}}{ field-init \ldots}{type-name} \protonoindex{\cvar{predicate-name}}{ value}{boolean} \protonoindex{\cvar{accessor-name}}{ type-name}{value} \protonoresultnoindex{\cvar{modifier-name}}{ type-name value} \end{protos} \noindent \cvar{Type-name} is the record type itself, and can be used to specify a print method (see below). \cvar{Constructor-name} is a constructor that accepts values for the fields whose tags are specified. \cvar{Predicate-name} is a predicate that returns \code{\#t} for elements of the type and \code{\#f} for everything else. The \cvar{accessor-name}s retrieve the values of fields, and the \cvar{modifier-name}'s update them. \cvar{Tag} is used in printing instances of the record type and the \cvar{field-tag}s are used in the inspector and to match constructor arguments with fields. If \cvar{tag} is not specified, \cvar{type-name} is used instead. \begin{protos} \protonoresult{define-record-discloser}{ type discloser} \end{protos} \noindent \code{Define-record-discloser} determines how records of type \cvar{type} are printed. \cvar{Discloser} should be procedure which takes a single record of type \cvar{type} and returns a list whose car is a symbol. The record will be printed as the value returned by \cvar{discloser} with curly braces used instead of the usual parenthesis. For example \begin{example} (define-record-type pare :pare (kons x y) pare? (x kar set-kar!) (y kdr)) \end{example} defines \code{kons} to be a constructor, \code{kar} and \code{kdr} to be accessors, \code{set-kar!} to be a modifier, and \code{pare?} to be a predicate for a new type of object. The type itself is named \code{:pare}. \code{Pare} is a tag used in printing the new objects. By default, the new objects print as \code{\#\{Pare\}}. The print method can be modified using \code{define-record-discloser}: \begin{example} (define-record-discloser :pare (lambda (p) `(pare ,(kar p) ,(kdr p)))) \end{example} will cause the result of \code{(kons 1 2)} to print as \code{\#\{Pare 1 2\}}. \code{Define-record-resumer} (section~\ref{sec:hibernation}) can be used to control how records are stored in heap images. \subsection{Low-level access to records} Records are implemented using primitive objects exactly analogous to vectors. Every record has a record type (which is another record) in the first slot. Note that use of these procedures, especially \code{record-set!}, breaks the record abstraction described above; caution is advised. These procedures are in the structure \code{records}. \begin{protos} \proto{make-record}{ n value}{record} \proto{record}{ value \ldots}{record-vector} \proto{record?}{ value}{boolean} \proto{record-length}{ record}{integer} \proto{record-type}{ record}{value} \proto{record-ref}{ record i}{value} \protonoresultnoindex{record-set!}{ record i value}\mainschindex{record-set"!} \end{protos} \noindent These the same as the standard \code{vector-} procedures except that they operate on records. The value returned by \code{record-length} includes the slot holding the record's type. \code{(record-type \cvar{x})} is equivalent to \code{(record-ref \cvar{x} 0)}. \subsection{Record types} Record types are themselves records of a particular type (the first slot of \code{:record-type} points to itself). A record type contains four values: the name of the record type, a list of the names its fields, and procedures for disclosing and resuming records of that type. Procedures for manipulating them are in the structure \code{record-types}. \begin{protos} \proto{make-record-type}{ name field-names}{record-type} \proto{record-type?}{ value}{boolean} \proto{record-type-name}{ record-type}{symbol} \proto{record-type-field-names}{ record-type}{symbols} \end{protos} \noindent \begin{protos} \proto{record-constructor}{ record-type field-names}{procedure} \proto{record-predicate}{ record-type}{procedure} \proto{record-accessor}{ record-type field-name}{procedure} \proto{record-modifier}{ record-type field-name}{procedure} \end{protos} \noindent These procedures construct the usual record-manipulating procedures. \code{Record-constructor} returns a constructor that is passed the initial values for the fields specified and returns a new record. \code{Record-predicate} returns a predicate that return true when passed a record of type \cvar{record-type} and false otherwise. \code{Record-accessor} and \code{record-modifier} return procedures that reference and set the given field in records of the appropriate type. \begin{protos} \protonoresult{define-record-discloser}{ record-type discloser} \protonoresult{define-record-resumer}{ record-type resumer} \end{protos} \noindent \noindent \code{Record-types} is the initial exporter of \code{define-record-discloser} (re-exported by \code{define-record-types} described above) and \code{define-record-resumer} (re-exported by \code{external-calls} (section~\ref{sec:hibernation})). The procedures described in this section can be used to define new record-type-defining macros. \begin{example} (define-record-type pare :pare (kons x y) pare? (x kar set-kar!) (y kdr)) \end{example} is (semantically) equivalent to \begin{example} (define :pare (make-record-type 'pare '(x y))) (define kons (record-constructor :pare '(x y))) (define kar (record-accessor :pare 'x)) (define set-kar! (record-modifier :pare 'x)) (define kdr (record-accessor :pare 'y)) \end{example} The ``(semantically)'' above is because \code{define-record-type} adds declarations, which allows the type checker to detect some misuses of records, and uses more efficient definitions for the constructor, accessors, and modifiers. Ignoring the declarations, which will have to wait for another edition of the manual, what the above example actually expands into is: \begin{example} (define :pare (make-record-type 'pare '(x y))) (define (kons x y) (record :pare x y)) (define (kar r) (checked-record-ref r :pare 1)) (define (set-kar! r new) (checked-record-set! r :pare 1 new)) (define (kdr r) (checked-record-ref r :pare 2)) \end{example} \code{Checked-record-ref} and \code{Checked-record-set!} are low-level procedures that check the type of the record and access or modify it using a single VM instruction. \section{Finite record types} \label{sec:finite-types} The structure \code{finite-types} has two macros for defining `finite' record types. These are record types for which there are a fixed number of instances, all of which are created at the same time as the record type itself. The syntax for defining an enumerated type is: \begin{example} (define-enumerated-type \cvar{tag} \cvar{type-name} \cvar{predicate-name} \cvar{vector-of-instances-name} \cvar{name-accessor} \cvar{index-accessor} (\cvar{instance-name} \ldots)) \end{example} This defines a new record type, bound to \cvar{type-name}, with as many instances as there are \cvar{instance-name}'s. \cvar{Vector-of-instances-name} is bound to a vector containing the instances of the type in the same order as the \cvar{instance-name} list. \cvar{Tag} is bound to a macro that when given an \cvar{instance-name} expands into an expression that returns corresponding instance. The name lookup is done at macro expansion time. \cvar{Predicate-name} is a predicate for the new type. \cvar{Name-accessor} and \cvar{index-accessor} are accessors for the name and index (in \cvar{vector-of-instances}) of instances of the type. \begin{example} (define-enumerated-type color :color color? colors color-name color-index (black white purple maroon)) (color-name (vector-ref colors 0)) \evalsto black (color-name (color white)) \evalsto white (color-index (color purple)) \evalsto 2 \end{example} Finite types are enumerations that allow the user to add additional fields in the type. The syntax for defining a finite type is: \begin{example} (define-finite-type \cvar{tag} \cvar{type-name} (\cvar{field-tag} \ldots) \cvar{predicate-name} \cvar{vector-of-instances-name} \cvar{name-accessor} \cvar{index-accessor} (\cvar{field-tag} \cvar{accessor-name} [\cvar{modifier-name}]) \ldots ((\cvar{instance-name} \cvar{field-value} \ldots) \ldots)) \end{example} The additional fields are specified exactly as with \code{define-record-type}. The field arguments to the constructor are listed after the \cvar{type-name}; these do not include the name and index fields. The form ends with the names and the initial field values for the instances of the type. The instances are constructed by applying the (unnamed) constructor to these initial field values. The name must be first and the remaining values must match the \cvar{field-tag}s in the constructor's argument list. %This differs from \code{define-record-type} in the following ways: %\begin{itemize} %\item No name is specified for the constructor, but the field arguments % to the constructor are listed. %\item The \cvar{vector-of-instances-name} is added; it will be bound % to a vector containing all of the instances of the type. %These are constructed by applying the (unnamed) constructor to the % initial field values at the end of the form. %\item There are names for accessors for two required fields, name % and index. %These fields are not settable, and are not to be included % in the argument list for the constructor. %\item The form ends with the names and the initial field values for % the instances of the type. %The name must be first. %The remaining values must match the \cvar{field-tag}s in the constructor's % argument list. %\item \cvar{Tag} is bound to a macro that maps \cvar{instance-name}s to the % the corresponding instance of the vector. %The name lookup is done at macro-expansion time. %\end{itemize} \begin{example} (define-finite-type color :color (red green blue) color? colors color-name color-index (red color-red) (green color-green) (blue color-blue) ((black 0 0 0) (white 255 255 255) (purple 160 32 240) (maroon 176 48 96))) (color-name (color black)) \evalsto black (color-name (vector-ref colors 1)) \evalsto white (color-index (color purple)) \evalsto 2 (color-red (color maroon)) \evalsto 176 \end{example} \section{Sets over finite types} \label{sets-finite-types} The structure \code{enum-sets} has a macro for defining types for sets of elements of finite types. These work naturally with the finite types defined by the \code{finite-types} structure, but are not tied to them. The syntax for defining such a type is: \begin{example} (define-enum-set-type \cvar{id} \cvar{type-name} \cvar{predicate} \cvar{constructor} \cvar{element-syntax} \cvar{element-predicate} \cvar{all-elements} \cvar{element-index-ref}) \end{example} % This defines \cvar{id} to be syntax for constructing sets, \cvar{type-name} to be a value representing the type, \cvar{predicate} to be a predicate for those sets, and \cvar{constructor} a procedure for constructing one from a list. \cvar{Element-syntax} must be the name of a macro for constructing set elements from names (akin to the \cvar{tag} argument to \code{define-enumerated-type}). \cvar{Element-predicate} must be a predicate for the element type, \cvar{all-elements} a vector of all values of the element type, and \cvar{element-index-ref} must return the index of an element within the \cvar{all-elements} vector. \begin{protos} \proto{enum-set->list}{ enum-set}{list} \proto{enum-set-member?}{ enum-set enumerand}{boolean} \proto{enum-set=?}{ enum-set enum-set}{boolean} \proto{enum-set-subset?}{ enum-set enum-set}{boolean} \proto{enum-set-union}{ enum-set enum-set}{enum-set} \proto{enum-set-intersection}{ enum-set enum-set}{ enum-set} \proto{enum-set-difference}{ enum-set enum-set}{ enum-set} \proto{enum-set-negation}{ enum-set}{enum-set} \end{protos} % \code{Enum-set->list} converts a set into a list of its elements. \code{Enum-set-member?} tests for membership. \code{Enum-set=?} tests two sets of equal type for equality. (If its arguments are not of the same type, \code{enum-set=?} raises an exception.) \code{Enum-set-subset?} tests, for two sets of equal type, if the first set is a subset of the second one. \code{Enum-set-union} computes the union of two sets of equal type, \code{enum-set-intersection} computes the intersection, \code{enum-set-difference} computes the intersection, and \code{enum-set-negation} computes the complement of a set. Here is an example. Given an enumerated type: \begin{example} (define-enumerated-type color :color color? colors color-name color-index (red blue green)) \end{example} we can define sets of colors: \begin{example} (define-enum-set-type color-set :color-set color-set? make-color-set color color? colors color-index) \end{example} \begin{example} > (enum-set->list (color-set red blue)) (#\ob{}Color red\cb{} #\ob{}Color blue\cb{}) > (enum-set->list (enum-set-negation (color-set red blue))) (#\ob{}Color green\cb{}) > (enum-set-member? (color-set red blue) (color blue)) #t \end{example} \section{Hash tables} These are generic hash tables, and are in the structure \code{tables}. Strictly speaking they are more maps than tables, as every table has a value for every possible key (for that type of table). All but a finite number of those values are \code{\#f}. \begin{protos} \proto{make-table}{}{table} \proto{make-symbol-table}{}{symbol-table} \proto{make-string-table}{}{string-table} \proto{make-integer-table}{}{integer-table} \proto{make-table-maker}{ compare-proc hash-proc}{procedure} \protonoresultnoindex{make-table-immutable!}{ table}\mainschindex{make-table-immutable"!} \end{protos} \noindent The first four functions listed make various kinds of tables. \code{Make-table} returns a table whose keys may be symbols, integer, characters, booleans, or the empty list (these are also the values that may be used in \code{case} expressions). As with \code{case}, comparison is done using \code{eqv?}. The comparison procedures used in symbol, string, and integer tables are \code{eq?}, \code{string=?}, and \code{=}. \code{Make-table-maker} takes two procedures as arguments and returns a nullary table-making procedure. \cvar{Compare-proc} should be a two-argument equality predicate. \cvar{Hash-proc} should be a one argument procedure that takes a key and returns a non-negative integer hash value. If \code{(\cvar{compare-proc} \cvar{x} \cvar{y})} returns true, then \code{(= (\cvar{hash-proc} \cvar{x}) (\cvar{hash-proc} \cvar{y}))} must also return true. For example, \code{make-integer-table} could be defined as \code{(make-table-maker = abs)}. \code{Make-table-immutable!} prohibits future modification to its argument. \begin{protos} \proto{table?}{ value}{boolean} \proto{table-ref}{ table key}{value or {\tt \#f}} \protonoresultnoindex{table-set!}{ table key value}\mainschindex{table-set"!} \protonoresult{table-walk}{ procedure table} \proto{table->entry-list}{ table}{list of pairs} \end{protos} \noindent \code{Table?} is the predicate for tables. \code{Table-ref} and \code{table-set!} access and modify the value of \cvar{key} in \cvar{table}. \code{Table-walk} applies \cvar{procedure}, which must accept two arguments, to every associated key and non-\code{\#f} value in \code{table}. \code{Table->entry-list} returns a list with the values of the table. \begin{protos} \proto{default-hash-function}{ value}{integer} \proto{string-hash}{ string}{integer} \proto{symbol-hash}{ symbol}{integer} \end{protos} \noindent \code{Default-hash-function} is the hash function used in the tables returned by \code{make-table}, \code{string-hash} is the one used by \code{make-string-table}, and \code{symbol-hash} is the one used by \code{make-symbol-table}. \section{Port extensions} These procedures are in structure \code{extended-ports}. \begin{protos} \proto{make-string-input-port}{ string}{input-port} \proto{make-string-output-port}{}{output-port} \proto{string-output-port-output}{ string-output-port}{string} \end{protos} \noindent \code{Make-string-input-port} returns an input port that that reads characters from the supplied string. An end-of-file object is returned if the user reads past the end of the string. \code{Make-string-output-port} returns an output port that saves the characters written to it. These are then returned as a string by \code{string-output-port-output}. \begin{example} (read (make-string-input-port "(a b)")) \evalsto '(a b) (let ((p (make-string-output-port))) (write '(a b) p) (let ((s (string-output-port-output p))) (display "c" p) (list s (string-output-port-output p)))) \evalsto '("(a b)" "(a b)c") \end{example} \begin{protos} \protonoresult{limit-output}{ output-port n procedure} \end{protos} \noindent \var{Procedure} is called on an output port. Output written to that port is copied to \var{output-port} until \var{n} characters have been written, at which point \code{limit-output} returns. If \var{procedure} returns before writing \var{n} characters, then \code{limit-output} also returns at that time, regardless of how many characters have been written. \begin{protos} \proto{make-tracking-input-port}{ input-port}{input-port} \proto{make-tracking-output-port}{ output-port}{output-port} \proto{current-row}{ port}{integer or {\tt \#f}} \proto{current-column}{ port}{integer or {\tt \#f}} \protonoresult{fresh-line}{ output-port} \end{protos} \noindent \code{Make-tracking-input-port} and \code{make-tracking-output-port} return ports that keep track of the current row and column and are otherwise identical to their arguments. Closing a tracking port does not close the underlying port. \code{Current-row} and \code{current-column} return \var{port}'s current read or write location. They return \code{\#f} if \var{port} does not keep track of its location. \code{Fresh-line} writes a newline character to \var{output-port} if \code{(current-row \cvar{port})} is not 0. \begin{example} (define p (make-tracking-output-port (open-output-file "/tmp/temp"))) (list (current-row p) (current-column p)) \evalsto '(0 0) (display "012" p) (list (current-row p) (current-column p)) \evalsto '(0 3) (fresh-line p) (list (current-row p) (current-column p)) \evalsto '(1 0) (fresh-line p) (list (current-row p) (current-column p)) \evalsto '(1 0) \end{example} \section{Fluid bindings} These procedures implement dynamic binding and are in structure \code{fluids}. A \cvar{fluid} is a cell whose value can be bound dynamically. Each fluid has a top-level value that is used when the fluid is unbound in the current dynamic environment. \begin{protos} \proto{make-fluid}{ value}{fluid} \proto{fluid}{ fluid}{value} \proto{let-fluid}{ fluid value thunk}{value(s)} \proto{let-fluids}{ fluid$_0$ value$_0$ fluid$_1$ value$_1$ \ldots thunk}{value(s)} \end{protos} \noindent \code{Make-fluid} returns a new fluid with \cvar{value} as its initial top-level value. \code{Fluid} returns \code{fluid}'s current value. \code{Let-fluid} calls \code{thunk}, with \cvar{fluid} bound to \cvar{value} until \code{thunk} returns. Using a continuation to throw out of the call to \code{thunk} causes \cvar{fluid} to revert to its original value, while throwing back in causes \cvar{fluid} to be rebound to \cvar{value}. \code{Let-fluid} returns the value(s) returned by \cvar{thunk}. \code{Let-fluids} is identical to \code{let-fluid} except that it binds an arbitrary number of fluids to new values. \begin{example} (let* ((f (make-fluid 'a)) (v0 (fluid f)) (v1 (let-fluid f 'b (lambda () (fluid f)))) (v2 (fluid f))) (list v0 v1 v2)) \evalsto '(a b a) \end{example} \begin{example} (let ((f (make-fluid 'a)) (path '()) (c \#f)) (let ((add (lambda () (set! path (cons (fluid f) path))))) (add) (let-fluid f 'b (lambda () (call-with-current-continuation (lambda (c0) (set! c c0))) (add))) (add) (if (< (length path) 5) (c) (reverse path)))) \evalsto '(a b a b a) \end{example} \section{OS strings} \label{os-strings} \index{OS string} On common operating systems such as Unix and Windows, various parameters to OS functionality---such as file names, user names, command-line arguments etc.---appear as text in most contexts, but are really byte sequences: On Unix, the byte sequence may be interpreted as text through some locale-determined encoding. On Windows, such parameters are typically represented as sequences of UTF-16 code units. In both cases, not every such byte sequence has a string equivalent: On Unix, a byte sequence encoding a file name using Latin-1 often cannot be decoded using UTF-8. On Windows, unpaired UTF-16 surrogates are admissible in encodings, and no lossless text decoding for them exists. For representing such string-like parameters, Scheme~48 uses an abstraction called \textit{OS strings}. An OS string is created from either a string or a NUL-terminated byte sequence stored in a byte vector, and has an associated text codec (see section~\ref{text-codecs}) that is able to convert from one representation to the other. The exact meaning of a NUL-terminated byte sequence is dependent on this text codec. However, only codecs for encodings that are a conservative extension of ASCII (such as ASCII itself, Latin-1, or UTF-8) should be used here, to allow a minimal set of portable file names. (The Windows port uses a special synthetic encoding called UTF-8of16 compatible with UTF-8 but capable of encoding even invalid UTF-16 internally, but uses the UTF-8 codec at the Scheme level.) Most procedures accepting OS strings also accept strings or byte vectors, which are then used to construct a OS string. In the headers of the specifications of these procedures, such arguments occur as \var{os-string-thing}.\index{os-string-thing@\var{os-string-thing}} The standard Scheme procedures such as \code{open-input-file} that take file names all accept \var{os-string-thing} arguments. OS strings are in the \code{os-strings} structure. \begin{protos} \proto{os-string?}{ value}{boolean} \proto{make-os-string}{ text-codec string/byte-vector}{os-string} \end{protos} % The \code{os-string?} predicate returns \code{\#t} if its argument is an OS string, \code{\#f} otherwise. The \code{make-os-string} procedure creates an OS string from a text codec and a byte vector or string that defines its contents. If the argument is a byte vector, it does not matter if it is NUL-terminated or not. \begin{protos} \proto{string->os-string}{ string}{os-string} \proto{byte-vector->os-string}{ byte-vector}{os-string} \proto{x->os-string}{ os-string-thing}{os-string} \end{protos} \noindent These procedures create an OS string from a string, a byte-vector (whose last value should be 0), and an \var{os-string-thing} argument, respectively, always using the standard OS-string text codec (see below). \begin{protos} \proto{os-string->byte-vector}{ os-string}{byte-vector} \proto{os-string->string}{ os-string}{string} \end{protos} \noindent These procedures yield the contents of an OS string. For an OS string created from a string, \code{os-string->string} will return a string with the same contents; for an OS string created from a byte vector, \code{os-string->byte-vector} will return a byte vector with the same contents. For the other cases, data loss as determined by the text codec is possible. \begin{protos} \proto{os-string-text-codec}{ os-string}{text-codec} \end{protos} % This procedure returns the text codec of the OS string. \begin{protos} \proto{os-string=?}{ os-string os-string}{boolean} \end{protos} % This procedure returns \code{\#t} if its arguments denote the same byte sequence, \code{\#f} otherwise. \begin{protos} \proto{x->os-byte-vector}{ os-string-thing}{byte-vector} \proto{string->os-byte-vector}{ string}{byte-vector} \end{protos} % These are convenience procedures: The first is the composition of \code{x->os-string} and \code{os-string->byte-vector}, and the second is the composition of \code{string->os-string} and \code{os-string->byte-vector}. \begin{protos} \proto{current-os-string-text-codec}{}{text-codec} \proto{call-with-os-string-text-codec}{ text-codec thunk}{ value(s)} \end{protos} \noindent The \code{current-os-string-text-codec} returns the current text codec used for creating new OS strings. The initial default is determined by the operating system. (On Unix, this is the text codec determined by the locale. On Windows, this is UTF-8.) The \code{call-with-os-string-text-codec} procedure dynamically binds the current text codec to \var{text-codec} during the invocation of \var{thunk}. \section{Shell commands} Structure \code{c-system-function} provides access to the C \code{system()} function. \begin{protos} \proto{have-system?}{}{boolean} \proto{system}{ os-string-thing}{integer} \end{protos} \noindent \code{Have-system?} returns true if the underlying C implementation has a command processor. \code{(System \cvar{string})} passes \cvar{string} to the C \code{system()} function and returns the result. \begin{example} (begin (system "echo foo > test-file") (call-with-input-file "test-file" read)) \evalsto 'foo \end{example} \section{Sockets} % Richard says: add UDP documentation. Structure \code{sockets} provides access to TCP/IP sockets for interprocess and network communication. \begin{protos} \proto{open-socket}{}{socket} \proto{open-socket}{ port-number}{socket} \proto{socket-port-number}{ socket}{integer} \protonoresult{close-socket}{ socket} \proto{socket-accept}{ socket}{input-port output-port} \proto{get-host-name}{}{string} \end{protos} \noindent \code{Open-socket} creates a new socket. If no \cvar{port-number} is supplied the system picks one at random. \code{Socket-port-number} returns a socket's port number. \code{Close-socket} closes a socket, preventing any further connections. \code{Socket-accept} accepts a single connection on \cvar{socket}, returning an input port and an output port for communicating with the client. If no client is waiting \code{socket-accept} blocks until one appears. \code{Get-host-name} returns the network name of the machine. \begin{protos} \proto{socket-client}{ host-name port-number}{input-port output-port} \end{protos} \noindent \code{Socket-client} connects to the server at \cvar{port-number} on the machine named \cvar{host-name}. \code{Socket-client} blocks until the server accepts the connection. The following simple example shows a server and client for a centralized UID service. \begin{example} (define (id-server) (let ((socket (open-socket))) (display "Waiting on port ") (display (socket-port-number socket)) (newline) (let loop ((next-id 0)) (call-with-values (lambda () (socket-accept socket)) (lambda (in out) (display next-id out) (close-input-port in) (close-output-port out) (loop (+ next-id 1))))))) (define (get-id machine port-number) (call-with-values (lambda () (socket-client machine port-number)) (lambda (in out) (let ((id (read in))) (close-input-port in) (close-output-port out) id)))) \end{example} \section{Profiling} The profiler can be used programmatically from within the code and its results can be processed dynamically. The structure \code{profiler} offers basic data structures and functions. All functions need a \code{profile-data} record argument that can be created with \code{make-empty-profile-data}. \begin{protos} \proto{make-empty-profile-data}{}{profile-data} \proto{profile-thunk}{ profile-data thunk [interrupt-time [with-non-instr?]]}{value} \end{protos} \code{profile-thunk} executes a thunk under the profiler. The data is stored in the \cvar{profile-data} record passed as argument. Optionally the timeout for the profiler interrupt can be passed (in milliseconds). The return value of \code{profile-thunk} is the return value of \code{thunk}. By default, non-instrumented code will be profiled by the sampling process. By passing \code{with-non-instr? = \#f} only instrumented functions will be profiled. After profiling data, can be retrieved with the following accessors: \begin{protos} \proto{profile-data-starttime}{ profile-data}{number} \proto{profile-data-endtime}{ profile-data}{number} \proto{profile-data-runtime}{ profile-data}{number} \proto{profile-data-memoryuse}{ profile-data}{number} \proto{profile-data-gcruns}{ profile-data}{number} \proto{profile-data-samples}{ profile-data}{number} \proto{profile-data-interrupttime}{ profile-data}{number} % % \proto{profile-data-templates}{ profile-data}{table of templates} % \proto{profile-data-cycles}{ profile-data}{table of cycleinfo} % \proto{profile-data-root}{ profile-data}{profinfo} \end{protos} Times are in milliseconds, memory usage in bytes. The following functions produce the same output as the \code{,profile} command (see section \ref{profiling-commands}). They all take an optional \cvar{port} argument. Default is the \code{current-output-port}. \begin{protos} \protonoresult{profile-display}{ profile-data [port]} \protonoresult{profile-display-overview}{ profile-data [port]} \protonoresult{profile-display-flat}{ profile-data [port]} \protonoresult{profile-display-tree}{ profile-data [port]} \end{protos} \code{profile-display} prints the full output of the profiler. The other \code{profile-display-\ldots} functions only display the respective part of the output. The single fields in the flat profile can be retrieved with the following accessors: \begin{protos} \protonoresult{profile-function-calls}{ profile-data names} \protonoresult{profile-function-reccalls}{ profile-data names} \protonoresult{profile-function-nonreccalls}{ profile-data names} \protonoresult{profile-function-occurs}{ profile-data names} \protonoresult{profile-function-hist}{ profile-data names} \protonoresult{profile-function-memoryuse}{ profile-data names} \protonoresult{profile-function-timeshare}{ profile-data names} \protonoresult{profile-function-time-cumulative}{ profile-data names} \protonoresult{profile-function-time-self}{ profile-data names} \end{protos} Here \cvar{names} is the list of names specifying the function, optionally with it's module. For example, \code{names = ("dynamic-wind", "wind")} would specify the \code{dynamic-wind} function in the module \code{wind}, if it was seen while profiling. If two or more functions match, the first one is used. If no function matches, the functions return \code{\#\{Unspecific\}}. The argument \cvar{names} can also be a plain string, as in \code{(profile-display-function-flat prof-data "module")}. This will display all flat function profiles that have ``module'' either as name or module. The meanings of the fields that the functions return are as follows: \begin{itemize} \item \code{calls}: total number of calls (recursive and non-recursive) to the function \item \code{reccalls}: total number of recursive calls to the function \item \code{nonreccalls}: total number of non-recursive calls to the function \item \code{occurs}: number of times the function was seen on stack while profiling \item \code{hist}: number of times the function was seen running while profiling \item \code{memoryuse}: bytes of memory used by the function \item \code{timeshare}: percentage of time used by the function itself (number from 0 to 1) \item \code{time-cumulative}: total time in ms the function was on call-stack \item \code{time-self}: total time in ms the function actively running \end{itemize} The following shows a short example of the usage of the profiler interface, where \code{main} is the function to be profiled: \begin{example} (define prof-data (make-empty-profile-data)) (profile-thunk prof-data (lambda () (main 22))) (display "Samples: ") (display (profile-data-samples prof-data)) (newline) (profile-display-overview prof-data) (profile-display-flat prof-data (current-output-port)) (profile-display-tree prof-data) ; print only function "a" (profile-display-function-flat prof-data '("a")) ; print only function "a" in file "x.scm" (profile-display-function-flat prof-data '("a" "x.scm")) ; print all profiled functions in file "x.scm" (profile-display-function-flat prof-data "x.scm") ; print percentage of time "a" was running (display (* (profile-function-timeshare prof-data '("a")) 100)) \end{example} % (table-walk (lambda (template profinfo) % (display (profinfo-total-calls profinfo)) % (newline)) % (profile-data-templates prof-data)) \section{Macros for writing loops} % JAR says: origin? history? \code{Iterate} and \code{reduce} are extensions of named-\code{let} for writing loops that walk down one or more sequences, such as the elements of a list or vector, the characters read from a port, or an arithmetic series. Additional sequences can be defined by the user. \code{Iterate} and \code{reduce} are in structure \code{reduce}. \subsection{{\tt Iterate}} The syntax of \code{iterate} is: \begin{example} (iterate \cvar{loop-name} ((\cvar{sequence-type} \cvar{element-variable} \cvar{sequence-data} \ldots) \ldots) ((\cvar{state-variable} \cvar{initial-value}) \ldots) \cvar{body-expression} [\cvar{final-expression}]) \end{example} \code{Iterate} steps the \cvar{element-variable}s in parallel through the sequences, while each \cvar{state-variable} has the corresponding \cvar{initial-value} for the first iteration and have later values supplied by \cvar{body-expression}. If any sequence has reached its limit the value of the \code{iterate} expression is the value of \cvar{final-expression}, if present, or the current values of the \cvar{state-variable}s, returned as multiple values. If no sequence has reached its limit, \cvar{body-expression} is evaluated and either calls \cvar{loop-name} with new values for the \cvar{state-variable}s, or returns some other value(s). The \cvar{loop-name} and the \cvar{state-variable}s and \cvar{initial-value}s behave exactly as in named-\code{let}. The named-\code{let} expression \begin{example} (let loop-name ((state-variable initial-value) ...) body ...) \end{example} is equivalent to an \code{iterate} expression with no sequences (and with an explicit \code{let} wrapped around the body expressions to take care of any internal \code{define}s): \begin{example} (iterate loop-name () ((state-variable initial-value) ...) (let () body ...)) \end{example} The \cvar{sequence-type}s are keywords (they are actually macros of a particular form; it is easy to add additional types of sequences). Examples are \code{list*} which walks down the elements of a list and \code{vector*} which does the same for vectors. For each iteration, each \cvar{element-variable} is bound to the next element of the sequence. The \cvar{sequence-data} gives the actual list or vector or whatever. If there is a \cvar{final-expression}, it is evaluated when the end of one or more sequences is reached. If the \cvar{body-expression} does not call \cvar{loop-name} the \cvar{final-expression} is not evaluated. The \cvar{state-variable}s are visible in \cvar{final-expression} but the \cvar{sequence-variable}s are not. The \cvar{body-expression} and the \cvar{final-expression} are in tail-position within the \code{iterate}. Unlike named-\code{let}, the behavior of a non-tail-recursive call to \cvar{loop-name} is unspecified (because iterating down a sequence may involve side effects, such as reading characters from a port). \subsection{{\tt Reduce}} If an \code{iterate} expression is not meant to terminate before a sequence has reached its end, \cvar{body-expression} will always end with a tail call to \cvar{loop-name}. \code{Reduce} is a macro that makes this common case explicit. The syntax of \code{reduce} is the same as that of \code{iterate}, except that there is no \cvar{loop-name}. The \cvar{body-expression} returns new values of the \cvar{state-variable}s instead of passing them to \cvar{loop-name}. Thus \cvar{body-expression} must return as many values as there are state variables. By special dispensation, if there are no state variables then \cvar{body-expression} may return any number of values, all of which are ignored. The syntax of \code{reduce} is: \begin{example} (reduce ((\cvar{sequence-type} \cvar{element-variable} \cvar{sequence-data} \ldots) \ldots) ((\cvar{state-variable} \cvar{initial-value}) \ldots) \cvar{body-expression} [\cvar{final-expression}]) \end{example} The value(s) returned by an instance of \code{reduce} is the value(s) returned by the \cvar{final-expression}, if present, or the current value(s) of the state variables when the end of one or more sequences is reached. A \code{reduce} expression can be rewritten as an equivalent \code{iterate} expression by adding a \cvar{loop-var} and a wrapper for the \cvar{body-expression} that calls the \cvar{loop-var}. \begin{example} (iterate loop ((\cvar{sequence-type} \cvar{element-variable} \cvar{sequence-data} \ldots) \ldots) ((\cvar{state-variable} \cvar{initial-value}) \ldots) (call-with-values (lambda () \cvar{body-expression}) loop) [\cvar{final-expression}]) \end{example} \subsection{Sequence types} The predefined sequence types are: \begin{protos} \syntaxprotonoresultnoindex{list*}{ \cvar{elt-var} \cvar{list}} \syntaxprotonoresultnoindex{list-spine*}{ \cvar{elt-var} \cvar{list}} \syntaxprotonoresultnoindex{list-spine-cycle-safe*} { \cvar{elt-var} \cvar{list} \cvar{on-cycle-thunk}} \syntaxprotonoresultnoindex{vector*}{ \cvar{elt-var} \cvar{vector}} \syntaxprotonoresultnoindex{string*}{ \cvar{elt-var} \cvar{string}} \syntaxprotonoresultnoindex{count*} { \cvar{elt-var} \cvar{start} [\cvar{end} [\cvar{step}]]} \syntaxprotonoresultnoindex{bits*}{ \cvar{elt-var} \cvar{i} [\cvar{size}]} \syntaxprotonoresultnoindex{input*} { \cvar{elt-var} \cvar{input-port} \cvar{read-procedure}} \syntaxprotonoresultnoindex{stream*} { \cvar{elt-var} \cvar{procedure} \cvar{initial-data}} \end{protos} For lists, vectors, and strings the element variable is bound to the successive elements of the list or vector, or the characters in the string. For \code{list-spine*} the element variable is bound to the successive pairs in the spine of the list. \code{List-spine-cycle-safe*} is similar, but calls \cvar{on-cycle-thunk} with no arguments and with the continuation of the loop macro at an unspecified time if \cvar{list} contains a cycle. For \code{count*} the element variable is bound to the elements of the sequence \begin{example} \cvar{start}, \cvar{start} + \cvar{step}, \cvar{start} + 2\cvar{step}, \ldots, \cvar{end} \end{example} inclusive of \cvar{start} and exclusive of \cvar{end}. The default \cvar{step} is 1. The sequence does not terminate if no \cvar{end} is given or if there is no $N > 0$ such that \cvar{end} = \cvar{start} + N\cvar{step} (\code{=} is used to test for termination). For example, \code{(count* i 0 -1)} doesn't terminate because it begins past the \cvar{end} value and \code{(count* i 0 1 2)} doesn't terminate because it skips over the \cvar{end} value. For \code{bits*}, the element variable is bound to a sequence of representations of successive bit-fields of \cvar{i}, from least to most significant. If \cvar{size} is present, it must be a positive exact integer, and the element variable is bound to a sequence of \cvar{size}-bit integers. If \cvar{size} is omitted, \code{bits*} iterates through single bits, and the element variable is bound to a sequence of booleans. \code{\#t} represents 1, and \code{\#f} represents 0. For \code{input*} the elements are the results of successive applications of \cvar{read-procedure} to \cvar{input-port}. The sequence ends when \cvar{read-procedure} returns an end-of-file object. For a stream, the \cvar{procedure} takes the current data value as an argument and returns two values, the next value of the sequence and a new data value. If the new data is \code{\#f} then the previous element was the last one. For example, \begin{example} (list* elt my-list) \end{example} is the same as \begin{example} (stream* elt list->stream my-list) \end{example} where \code{list->stream} is \begin{example} (lambda (list) (if (null? list) (values 'ignored \#f) (values (car list) (cdr list)))) \end{example} \subsection{Synchronous sequences} When using the sequence types described above, a loop terminates when any of its sequences reaches its end. To help detect bugs it is useful to have sequence types that check to see if two or more sequences end on the same iteration. For this purpose there is second set of sequence types called synchronous sequences. These are identical to the ones listed above except that they cause an error to be signalled if a loop is terminated by a synchronous sequence and some other synchronous sequence did not reach its end on the same iteration. Sequences are checked for termination in order, from left to right, and if a loop is terminated by a non-synchronous sequence no further checking is done. The synchronous sequences are: \begin{protos} \syntaxprotonoresultnoindex{list\%}{ \cvar{elt-var} \cvar{list}} \syntaxprotonoresultnoindex{list-spine\%}{ \cvar{elt-var} \cvar{list}} \syntaxprotonoresultnoindex{list-spine-cycle-safe\%} { \cvar{elt-var} \cvar{list} \cvar{on-cycle-thunk}} \syntaxprotonoresultnoindex{vector\%}{ \cvar{elt-var} \cvar{vector}} \syntaxprotonoresultnoindex{string\%}{ \cvar{elt-var} \cvar{string}} \syntaxprotonoresultnoindex{count\%} { \cvar{elt-var} \cvar{start} \cvar{end} [\cvar{step}]} \syntaxprotonoresultnoindex{input\%} { \cvar{elt-var} \cvar{input-port} \cvar{read-procedure}} \syntaxprotonoresultnoindex{stream\%} { \cvar{elt-var} \cvar{procedure} \cvar{initial-data}} \end{protos} Note that the synchronous \code{count\%} must have an \cvar{end}, unlike the nonsynchronous \code{count*}. \subsection{Examples} \noindent Gathering the indexes of list elements that answer true to some predicate. \begin{example} (lambda (my-list predicate) (reduce ((list* elt my-list) (count* i 0)) ((hits '())) (if (predicate elt) (cons i hits) hits) (reverse hits)) \end{example} \noindent Looking for the index of an element of a list. \begin{example} (lambda (my-list predicate) (iterate loop ((list* elt my-list) (count* i 0)) () ; no state (if (predicate elt) i (loop)))) \end{example} \noindent Reading one line. \begin{example} (define (read-line port) (iterate loop ((input* c port read-char)) ((chars '())) (if (char=? c \#\verb2\2newline) (list->string (reverse chars)) (loop (cons c chars))) (if (null? chars) (eof-object) ; no newline at end of file (list->string (reverse chars))))) \end{example} \noindent Counting the lines in a file. We can't use \code{count*} because we need the value of the count after the loop has finished. \begin{example} (define (line-count name) (call-with-input-file name (lambda (in) (reduce ((input* l in read-line)) ((i 0)) (+ i 1))))) \end{example} \subsection{Defining sequence types} The sequence types are object-oriented macros similar to enumerations. A non-synchronous sequence macro needs to supply three values: \code{\#f} to indicate that it isn't synchronous, a list of state variables and their initializers, and the code for one iteration. The first two methods are CPS'ed: they take another macro and argument to which to pass their result. The \code{sync} method gets no additional arguments. The \code{state-vars} method is passed a list of names which will be bound to the arguments to the sequence. The final method, for the step, is passed the list of names bound to the arguments and the list of state variables. In addition there is a variable to be bound to the next element of the sequence, the body expression for the loop, and an expression for terminating the loop. The definition of \code{list*} is \begin{example} (define-syntax list* (syntax-rules (sync state-vars step) ((list* sync (next more)) (next \#f more)) ((list* state-vars (start-list) (next more)) (next ((list-var start-list)) more)) ((list* step (start-list) (list-var) value-var loop-body final-exp) (if (null? list-var) final-exp (let ((value-var (car list-var)) (list-var (cdr list-var))) loop-body))))) \end{example} Synchronized sequences are the same, except that they need to provide a termination test to be used when some other synchronized method terminates the loop. \begin{example} (define-syntax list\% (syntax-rules (sync done) ((list\% sync (next more)) (next \#t more)) ((list\% done (start-list) (list-var)) (null? list-var)) ((list\% stuff ...) (list* stuff ...)))) \end{example} \subsection{Expanded code} The expansion of \begin{example} (reduce ((list* x '(1 2 3))) ((r '())) (cons x r)) \end{example} is \begin{example} (let ((final (lambda (r) (values r))) (list '(1 2 3)) (r '())) (let loop ((list list) (r r)) (if (null? list) (final r) (let ((x (car list)) (list (cdr list))) (let ((continue (lambda (r) (loop list r)))) (continue (cons x r))))))) \end{example} The only inefficiencies in this code are the \code{final} and \code{continue} procedures, both of which could be substituted in-line. The macro expander could do the substitution for \code{continue} when there is no explicit proceed variable, as in this case, but not in general. \section{Sorting lists and vectors} \label{sort} (This section, as the libraries it describes, was written mostly by Olin Shivers for the draft of SRFI~32.) The sort libraries in Scheme~48 include % \begin{itemize} \item vector insert sort (stable) \item vector heap sort \item vector quick sort (with regular comparisons and with median-of-3 pivot picking) \item vector merge sort (stable) \item pure and destructive list merge sort (stable) \item stable vector and list merge \item miscellaneous sort-related procedures: vector and list merging, sorted predicates, vector binary search, vector and list delete-equal-neighbor procedures. \item a general, non-algorithmic set of procedure names for general sorting and merging \end{itemize} \subsection{Design rules} \paragraph{What vs. how} There are two different interfaces: ``what'' (simple) and ``how'' (detailed). \begin{description} \item[Simple] you specify semantics: datatype (list or vector), mutability, and stability. \item[Detailed] you specify the actual algorithm (quick, heap, insert, merge). Different algorithms have different properties, both semantic and pragmatic, so these exports are necessary. It is necessarily the case that the specifications of these procedures make statements about execution ``pragmatics.'' For example, the sole distinction between heap sort and quick sort---both of which are provided by this library----is one of execution time, which is not a ``semantic'' distinction. Similar resource-use statements are made about ``iterative'' procedures, meaning that they can execute on input of arbitrary size in a constant number of stack frames. \end{description} \paragraph{Consistency across procedure signatures} The two interfaces share common procedure signatures wherever possible, to facilitate switching a given call from one procedure to another. \paragraph{Less-than parameter first, data parameter after} These procedures uniformly observe the following parameter order: the data to be sorted comes after the comparison procedure. That is, we write \begin{example} (sort \(<\) \var{list}) \end{example} not \begin{example} (sort \var{list} \(<\)) \end{example} % \paragraph{Ordering, comparison procedures and stability} These routines take a $<$ comparison procedure, not a $\leq$ comparison procedure, and they sort into increasing order. The difference between a $<$ spec and a $\leq$ spec comes up in two places: \begin{itemize} \item the definition of an ordered or sorted data set, and \item the definition of a stable sorting algorithm. %\item correctness of quicksort. NOTE "two" above \end{itemize} % We say that a data set (a list or vector) is \textit{sorted} or \textit{ordered} if it contains no adjacent pair of values $\ldots x, y \ldots$ such that $y < x$. In other words, scanning across the data never takes a ``downwards'' step. If you use a $\leq$ procedure where these algorithms expect a $<$ procedure, you may not get the answers you expect. For example, the \code{list-sorted?} procedure will return false if you pass it a $\leq$ comparison procedure and an ordered list containing adjacent equal elements. A ``stable'' sort is one that preserves the pre-existing order of equal elements. Suppose, for example, that we sort a list of numbers by comparing their absolute values, i.e., using comparison procedure % \begin{verbatim} (lambda (x y) (< (abs x) (abs y))) \end{verbatim} % If we sort a list that contains both 3 and -3: \[\ldots 3, \ldots, -3 \ldots\] then a stable sort is an algorithm that will not swap the order of these two elements, that is, the answer is guaranteed to to look like \[\ldots 3, -3 \ldots\] not \[\ldots -3, 3 \ldots\] Choosing $<$ for the comparison procedure instead of $\leq$ affects how stability is coded. Given an adjacent pair $x, y$, \code{(< $y$ $x$)} means ``$x$ should be moved in front of $x$''---otherwise, leave things as they are. So using a $\leq$ procedure where a $<$ procedure is expected will \emph{invert} stability. This is due to the definition of equality, given a $<$ comparator: \begin{verbatim} (and (not (< x y)) (not (< y x))) \end{verbatim} The definition is rather different, given a $\leq$ comparator: \begin{verbatim} (and (<= x y) (<= y x)) \end{verbatim} % A ``stable'' merge is one that reliably favors one of its data sets when equal items appear in both data sets. \emph{All merge operations in this library are stable}, breaking ties between data sets in favor of the first data set---elements of the first list come before equal elements in the second list. So, if we are merging two lists of numbers ordered by absolute value, the stable merge operation \code{list-merge} \begin{verbatim} (list-merge (lambda (x y) (< (abs x) (abs y))) '(0 -2 4 8 -10) '(-1 3 -4 7)) \end{verbatim} reliably places the 4 of the first list before the equal-comparing -4 of the second list: \begin{verbatim} (0 -1 -2 4 -4 7 8 -10) \end{verbatim} % Some sort algorithms \emph{will not work correctly} if given a $\leq$ when they expect a $<$ comparison (or vice-versa). %% For example, %% violating quicksort's spec may cause it to produce wrong answers, %% diverge, raise an error, or do some fourth thing. To see why, %% consider the left-scan part of the standard quicksort partition %% step: (let ((i (let scan ((i i)) (if (elt< (vector-ref v i) pivot) %% (scan (+ i 1)) i)))) ...) Consider applying this loop to a vector %% of all zeroes (hence, PIVOT, as well, is zero), but erroneously %% using \verb|<=| for the ELT< procedure. The loop will scan right off %% the end of the vector, producing a vector-index error. The %% guarantee that the scan loop will terminate before running off the %% end of the vector depends critically upon ELT< performing as a true, %% irreflexive $<$ relation. Running off the end of the vector is only %% one of a variety of possibly ways to lose---other, variant %% implementations of quicksort can, instead, loop forever on some data %% sets if ELT< is a $\leq$ predicate. In short, if your comparison procedure $f$ answers true to \code{($f$ x x)}, then \begin{itemize} \item using a stable sorting or merging algorithm will not give you a stable sort or merge, \item \code{list-sorted?} may surprise you. % \item quicksort may fail in a variety of possible ways. \end{itemize} Note that you can synthesize a $<$ procedure from a $\leq$ procedure with \begin{verbatim} (lambda (x y) (not (<= y x))) \end{verbatim} if need be. Precise definitions give sharp edges to tools, but require care in use. ``Measure twice, cut once.'' %% I have adopted the choice of $<$ from Common Lisp. One would assume %% the definers of Common Lisp had a good reason for adopting $<$ instead %% of $\leq$, but canvassing several of the principal actors in the %% definition process has turned up no better reason than ``an arbitrary %% but consistent choice.'' At minimum, then, these libraries extend the %% coverage of that consistent choice. \paragraph{All vector operations accept optional subrange parameters} The vector operations specified below all take optional \code{start}/\code{end} arguments indicating a selected subrange of a vector's elements. If a \code{start} parameter or \code{start}/\code{end} parameter pair is given to such a procedure, they must be exact, non-negative integers, such that % \[ 0 \leq \var{start} \leq \var{end} \leq \code{(vector-length \var{vector})} \] % where \var{vector} is the related vector parameter. If not specified, they default to 0 and the length of the vector, respectively. They are interpreted to select the range $[\var{start},\var{end})$, that is, all elements from index \var{start} (inclusive) up to, but not including, index \var{end}. \paragraph{Required vs.\ allowed side-effects} \code{List-sort!} and \code{List-stable-sort!} are allowed, but not required, to alter their arguments' cons cells to construct the result list. This is consistent with the what-not-how character of the group of procedures to which they belong (the \code{sorting} structure). The \code{list-delete-neighbor-dups!}, \code{list-merge!} and \code{list-merge-sort!} procedures, on the other hand, provide specific algorithms, and, as such, explicitly commit to the use of side-effects on their input lists in order to guarantee their key algorithmic properties (e.g., linear-time operation). \subsection{Procedure specification} \begin{center} \begin{tabular}{ll} Structure name & Functionality\\\hline \code{sorting} & General sorting for lists and vectors\\ \code{sorted} & Sorted predicates for lists and vectors\\ \code{list-merge-sort}& List merge sort\\ \code{vector-merge-sort} & Vector merge sort\\ \code{vector-heap-sort} & Vector heap sort\\ \code{vector-quick-sort} & Vector quick sort\\ \code{vector-quick-sort3} & Vector quick sort with 3-way comparisons\\ \code{vector-insert-sort} & Vector insertion sort\\ \code{delete-neighbor-duplicates} & List and vector delete neighbor duplicates\\ \code{binary-searches} & Vector binary search \end{tabular} \end{center} % Note that there is no ``list insert sort'' package, as you might as well always use list merge sort. The reference implementation's destructive list merge sort will do fewer \code{set-cdr!}s than a destructive insert sort. \paragraph{Procedure naming and functionality} Almost all of the procedures described below are variants of two basic operations: sorting and merging. These procedures are consistently named by composing a set of basic lexemes to indicate what they do. \begin{center} \begin{tabular}{lp{0.8\textwidth}} Lexeme & Meaning\\\hline \code{sort}& The procedure sorts its input data set by some $<$ comparison procedure. \\ \code{merge}& The procedure merges two ordered data sets into a single ordered result. \\ \code{stable} & This lexeme indicates that the sort is a stable one. \\ \code{vector}& The procedure operates upon vectors. \\ \code{list} & The procedure operates upon lists. \\ \code{!} & Procedures that end in \code{!} are allowed, and sometimes required, to reuse their input storage to construct their answer. \end{tabular} \end{center} \paragraph{Types of parameters and return values} In the procedures specified below, % \begin{itemize} \item A \code{<} or \code{=} parameter is a procedure accepting two arguments taken from the specified procedure's data set(s), and returning a boolean; \item \code{Start} and \code{end} parameters are exact, non-negative integers that serve as vector indices selecting a subrange of some associated vector. When specified, they must satisfy the relation \[ 0 \leq \var{start} \leq \var{end} \leq \code{(vector-length \var{vector})} \] where \var{vector} is the associated vector. \end{itemize} % Passing values to procedures with these parameters that do not satisfy these types is an error. If a procedure is said to return ``unspecified,'' this means that nothing at all is said about what the procedure returns, not even the number of return values. Such a procedure is not even required to be consistent from call to call in the nature or number of its return values. It is simply required to return a value (or values) that may be passed to a command continuation, e.g. as the value of an expression appearing as a non-terminal subform of a \code{begin} expression. Note that in R$^5$RS, this restricts such a procedure to returning a single value; non-R$^5$RS systems may not even provide this restriction. \subsubsection{\code{sorting}---general sorting package} This library provides basic sorting and merging functionality suitable for general programming. The procedures are named by their semantic properties, i.e., what they do to the data (sort, stable sort, merge, and so forth). \begin{protos} \proto{list-sorted?}{ $<$ list}{boolean} \proto{list-merge}{ $<$ list$_1$ list$_2$}{list} \protonoindex{list-merge!}{ $<$ list$_1$ list$_2$}{list}\mainschindex{list-merge"!} \proto{list-sort}{ $<$ lis}{list} \protonoindex{list-sort!}{ $<$ lis}{list}\mainschindex{list-sort"!} \proto{list-stable-sort}{ $<$ list}{list} \protonoindex{list-stable-sort!}{ $<$ list}{list}\mainschindex{list-stable-sort"!} \proto{list-delete-neighbor-dups}{ $=$ list}{list} \proto{vector-sorted?}{ $<$ v [start [end]]}{boolean} \proto{vector-merge}{ $<$ v$_1$ v$_2$ [start$1$ [end$1$ [start$2$ [end$2$]]]]}{vector} \protonoresultnoindex{vector-merge!}{ $<$ v v$_1$ v$_2$ [start [start$1$ [end$1$ [start$2$ [end$2$]]]]]}\mainschindex{vector-merge"!} \proto{vector-sort}{ $<$ v [start [end]]}{vector} \protonoresultnoindex{vector-sort!}{ $<$ v [start [end]]}\mainschindex{vector-sort"!} \proto{vector-stable-sort}{ $<$ v [start [end]]}{vector} \protonoresultnoindex{vector-stable-sort!}{ $<$ v [start [end]]}\mainschindex{vector-stable-sort"!} \proto{vector-delete-neighbor-dups}{ $=$ v [start [end]]}{vector} \end{protos} \begin{center} \begin{tabular}{ll} Procedure &Suggested algorithm \\\hline \code{list-sort} & vector heap or quick\\ \code{list-sort!} & list merge sort\\ \code{list-stable-sort} & vector merge sort\\ \code{list-stable-sort!} & list merge sort\\ \code{vector-sort} & heap or quick sort\\ \code{vector-sort!} & heap or quick sort\\ \code{vector-stable-sort} & vector merge sort\\ \code{vector-stable-sort!} merge sort \end{tabular} \end{center} % \code{List-Sorted?} and \code{vector-sorted?} return true if their input list or vector is in sorted order, as determined by their \var{$<$} comparison parameter. All four merge operations are stable: an element of the initial list \var{list$_1$} or vector \var{vector$_1$} will come before an equal-comparing element in the second list \var{list$_2$} or vector \var{vector$_2$} in the result. The procedures % \begin{itemize} \item \code{list-merge} \item \code{list-sort} \item \code{list-stable-sort} \item \code{list-delete-neighbor-dups} \end{itemize} % do not alter their inputs and are allowed to return a value that shares a common tail with a list argument. The procedure \begin{itemize} \item \code{list-sort!} \item \code{list-stable-sort!} \end{itemize} % are ``linear update'' operators---they are allowed, but not required, to alter the cons cells of their arguments to produce their results. On the other hand, the \code{list-merge!} procedure make only a single, iterative, linear-time pass over its argument list, using \code{set-cdr!}s to rearrange the cells of the list into the final result ---it works ``in place.'' Hence, any cons cell appearing in the result must have originally appeared in an input. The intent of this iterative-algorithm commitment is to allow the programmer to be sure that if, for example, \code{list-merge!} is asked to merge two ten-million-element lists, the operation will complete without performing some extremely (possibly twenty-million) deep recursion. The vector procedures % \begin{itemize} \item \code{vector-sort} \item \code{vector-stable-sort} \item \code{vector-delete-neighbor-dups} \end{itemize} % do not alter their inputs, but allocate a fresh vector for their result, of length $\var{end} - \var{start}$. The vector procedures % \begin{itemize} \item \code{vector-sort!} \item \code{vector-stable-sort!} \end{itemize} % sort their data in-place. (But note that \code{vector-stable-sort!} may allocate temporary storage proportional to the size of the input %%---I am not aware of $O(n \log(n))$ stable vector-sorting %%algorithms that run in constant space .) \code{Vector-merge} returns a vector of length $(\var{end$_1$}-\var{start$_1$}+(\var{end$_2$}-\var{start$_2$})$. \code{Vector-merge!} writes its result into vector \var{v}, beginning at index \var{start}, for indices less than \(\var{end} = \var{start} + (\var{end$_1$}-\var{start$_1$}) + (\var{end$_2$}-\var{start$_2$})\). The target subvector $\var{v}[\var{start},\var{end})$ may not overlap either source subvector $\var{vector$_1$}[\var{start$_1$},\var{end$_1$})$ $\var{vector$_2$}[\var{start$_2$},\var{end$_2$})$. The \code{\ldots-delete-neighbor-dups-\ldots} procedures: These procedures delete adjacent duplicate elements from a list or a vector, using a given element-equality procedure. The first/leftmost element of a run of equal elements is the one that survives. The list or vector is not otherwise disordered. These procedures are linear time---much faster than the $O(n^2)$ general duplicate-element deletors that do not assume any ``bunching'' of elements (such as the ones provided by SRFI~1). If you want to delete duplicate elements from a large list or vector, you can sort the elements to bring equal items together, then use one of these procedures, for a total time of $O(n\log(n))$. The comparison procedure \(=\) passed to these procedures is always applied % \code{($=$ $x$ $y$)} % where $x$ comes before $y$ in the containing list or vector. \begin{itemize} \item \code{List-delete-neighbor-dups} does not alter its input list; its answer may share storage with the input list. \item \code{Vector-delete-neighbor-dups} does not alter its input vector, but rather allocates a fresh vector to hold the result. \end{itemize} % Examples: \begin{example} (list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2)) \(\Longrightarrow\) (1 2 7 0 -2) (vector-delete-neighbor-dups = '\#(1 1 2 7 7 7 0 -2 -2)) \(\Longrightarrow\) \#(1 2 7 0 -2) (vector-delete-neighbor-dups = '\#(1 1 2 7 7 7 0 -2 -2) 3 7) \(\Longrightarrow\) \#(7 0 -2) \end{example} \subsubsection{Algorithm-specific sorting packages} These packages provide more specific sorting functionality, that is, specific commitment to particular algorithms that have particular pragmatic consequences (such as memory locality, asymptotic running time) beyond their semantic behaviour (sorting, stable sorting, merging, etc.). Programmers that need a particular algorithm can use one of these packages. \paragraph{\code{sorted}---sorted predicates} % \begin{protos} \proto{list-sorted?}{ $<$ list}{boolean} \proto{vector-sorted?}{ $<$ vector}{boolean} \proto{vector-sorted?}{ $<$ vector start}{boolean} \proto{vector-sorted?}{ $<$ vector start end}{boolean} \end{protos} Return \code{\#f} iff there is an adjacent pair \(\ldots x, y \ldots\) in the input list or vector such that $y < x$. The optional \var{start}/\var{end} range arguments restrict \code{vector-sorted?} to the indicated subvector. \paragraph{\code{list-merge-sort}---list merge sort} % \begin{protos} \proto{list-merge-sort}{ $<$ list}{list} \protonoindex{list-merge-sort!}{ $<$ list}{list}\mainschindex{list-merge-sort"!} \proto{list-merge}{ list$_1$ $<$ list$_2$}{list} \protonoindex{list-merge!}{ list$_1$ $<$ list$_2$}{list}\mainschindex{list-merge"!} \end{protos} % The sort procedures sort their data using a list merge sort, which is stable. (The reference implementation is, additionally, a ``natural'' sort. See below for the properties of this algorithm.) The \code{!} procedures are destructive---they use \code{set-cdr!}s to rearrange the cells of the lists into the proper order. As such, they do not allocate any extra cons cells---they are ``in place'' sorts. %% Additionally, \code{list-merge!} is iterative---it can operate on %% arguments of arbitrary size with a constant number of stack frames. The merge operations are stable: an element of \var{list$_1$} will come before an equal-comparing element in \var{list$_2$} in the result list. \paragraph{\code{vector-merge-sort}---vector merge sort} \begin{protos} \proto{vector-merge-sort}{ $<$ vector [start [end [temp]]]}{vector} \protonoresultnoindex{vector-merge-sort!}{ $<$ vector [start [end [temp]]]}\mainschindex{vector-merge-sort"!} \proto{vector-merge}{ $<$ vector$_1$ vector$_2$ [start$_1$ [end$_1$ [start$_2$ [end$_2$]]]]}{vector} \protonoresultnoindex{vector-merge!}{ $<$ vector vector$_1$ vector$_2$ [start [start$_1$ [end$_1$ [start$_2$ [end$_2$]]]]]}\mainschindex{vector-merge"!} \end{protos} % The sort procedures sort their data using vector merge sort, which is stable. (The reference implementation is, additionally, a ``natural'' sort. See below for the properties of this algorithm.) The optional \var{start}/\var{end} arguments provide for sorting of subranges, and default to 0 and the length of the corresponding vector. Merge-sorting a vector requires the allocation of a temporary ``scratch'' work vector for the duration of the sort. This scratch vector can be passed in by the client as the optional \var{temp} argument; if so, the supplied vector must be of size $\leq \var{end}$, and will not be altered outside the range [start,end). If not supplied, the sort routines allocate one themselves. The merge operations are stable: an element of \var{vector$_1$} will come before an equal-comparing element in \var{vector$_2$} in the result vector. \begin{itemize} \item \code{Vector-merge-sort!} leaves its result in \(\var{vector}[\var{start},\var{end})\). \item \code{Vector-merge-sort} returns a vector of length \(\var{end}-\var{start}\). \item \code{Vector-merge} returns a vector of length \((\var{end$_1$}-\var{start$_1$})+(\var{end$_2$}-\var{start$_2$})\). \item \code{Vector-merge!} writes its result into \var{vector}, beginning at index \var{start}, for indices less than \(\var{end} =\var{start} + (\var{end$_1$}-\var{start$_1$}) + (\var{end$_2$}-\var{start$_2$})\). The target subvector \[\var{vector}[\var{start},\var{end})\] may not overlap either source subvector \[\var{vector$_1$}[\var{start$_1$},\var{end$_1$}), \textrm{ or } \var{vector$_2$}[\var{start$_2$},\var{end$_2$}).\] \end{itemize} \paragraph{\code{vector-heap-sort}---vector heap sort} \begin{protos} \proto{vector-heap-sort}{ $<$ vector [start [end]]}{vector} \protonoresultnoindex{vector-heap-sort!}{ $<$ vector [start [end]]}\mainschindex{vector-heap-sort"!} \end{protos} % These procedures sort their data using heap sort, which is not a stable sorting algorithm. \code{Vector-heap-sort} returns a vector of length \(\var{end}-\var{start}\). \code{Vector-heap-sort!} is in-place, leaving its result in \(\var{vector}[\var{start},\var{end})\). \paragraph{\code{vector-quick-sort}---vector quick sort} \begin{protos} \proto{vector-quick-sort}{ $<$ vector [start [end]]}{vector} \protonoresultnoindex{vector-quick-sort!}{ $<$ vector [start [end]]}\mainschindex{vector-quick-sort"!} \end{protos} % These procedures sort their data using quick sort, which is not a stable sorting algorithm. \code{Vector-quick-sort} returns a vector of length \(\var{end}-\var{start}\). \code{Vector-quick-sort!} is in-place, leaving its result in \(\var{vector}[\var{start},\var{end})\). \paragraph{\code{vector-quick-sort3}---vector quick sort with 3-way comparisons} \begin{protos} \proto{vector-quick-sort3}{ comp vector [start [end]]}{vector} \protonoresultnoindex{vector-quick-sort3!}{ comp vector [start [end]]}\mainschindex{vector-quick-sort3"!} \end{protos} % These procedures sort their data using quick sort, which is not a stable sorting algorithm. \code{Vector-quick-sort3} returns a vector of length \(\var{end}-\var{start}\). \code{Vector-quick-sort3!} is in-place, leaving its result in \(\var{vector}[\var{start},\var{end})\). These procedures implement a variant of quick-sort that takes a three-way comparison procedure $C$. $C$ compares a pair of elements and returns an exact integer whose sign indicates their relationship: % \begin{eqnarray*} (C x y) < 0 &\Rightarrow& x 0 &\Rightarrow& x>y \end{eqnarray*} To help remember the relationship between the sign of the result and the relation, use the procedure $-$ as the model for $C$: $(- x y) < 0$ means that $x < y$; $(- x y) > 0$ means that $x > y$. \paragraph{\code{vector-insert-sort}---vector insertion sort} \begin{protos} \proto{vector-insert-sort}{ $<$ vector [start [end]]}{vector} \protonoresultnoindex{vector-insert-sort!}{ $<$ vector [start [end]]}\mainschindex{vector-insert-sort"!} \end{protos} % These procedures stably sort their data using insertion sort. % \begin{itemize} \item \code{Vector-insert-sort} returns a vector of length \(\var{end}-\var{start}\). \item \code{Vector-insert-sort!} is in-place, leaving its result in \(\var{vector}[\var{start},\var{end})\). \end{itemize} \paragraph{\code{delete-neighbor-duplicates}---list and vector delete neighbor duplicates} \begin{protos} \proto{list-delete-neighbor-dups}{ $=$ list}{list} \protonoindex{list-delete-neighbor-dups!}{ $=$ list}{list}\mainschindex{list-delete-neighbor-dups"!} \proto{vector-delete-neighbor-dups}{ $=$ vector [start [end]]}{vector} \protonoindex{vector-delete-neighbor-dups!}{ $=$ vector [start [end]]}{end$'$}\mainschindex{vector-delete-neighbor-dups} \end{protos} % These procedures delete adjacent duplicate elements from a list or a vector, using a given element-equality procedure $=$. The first/leftmost element of a run of equal elements is the one that survives. The list or vector is not otherwise disordered. These procedures are linear time---much faster than the $O(n^2)$ general duplicate-element deletors that do not assume any ``bunching'' of elements (such as the ones provided by SRFI~1). If you want to delete duplicate elements from a large list or vector, you can sort the elements to bring equal items together, then use one of these procedures, for a total time of $O(n\log(n))$. The comparison procedure = passed to these procedures is always applied \begin{example} (\(=\) \(x\) \(y\)) \end{example} where $x$ comes before $y$ in the containing list or vector. % \begin{itemize} \item \code{List-delete-neighbor-dups} does not alter its input list; its answer may share storage with the input list. \item \code{Vector-delete-neighbor-dups} does not alter its input vector, but rather allocates a fresh vector to hold the result. \item \code{List-delete-neighbor-dups!} is permitted, but not required, to mutate its input list in order to construct its answer. \item \code{Vector-delete-neighbor-dups!} reuses its input vector to hold the answer, packing its answer into the index range \([\var{start},\var{end$'$})\), where \var{end$'$} is the non-negative exact integer returned as its value. It returns \var{end$'$} as its result. The vector is not altered outside the range \([\var{start},\var{end$'$})\). \end{itemize} % Examples: \begin{example} (list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2)) \(\Longrightarrow\) (1 2 7 0 -2) (vector-delete-neighbor-dups = '\#(1 1 2 7 7 7 0 -2 -2)) \(\Longrightarrow\) \#(1 2 7 0 -2) (vector-delete-neighbor-dups = '\#(1 1 2 7 7 7 0 -2 -2) 3 7) \(\Longrightarrow\) \#(7 0 -2) ;; Result left in v[3,9): (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6))) (cons (vector-delete-neighbor-dups! = v 3) v)) \(\Longrightarrow\) (9 . \#(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6)) \end{example} \paragraph{\code{binary-searches}---vector binary search} \begin{protos} \proto{vector-binary-search}{ $<$ elt-$>$key key vector [start [end]]}{integer or {\tt \#f}} \proto{vector-binary-search3}{ compare-proc vector [start [end]]}{integer or {\tt \#f}} \end{protos} \code{vector-binary-search} searches \var{vector} in range \([\var{start},\var{end})\) (which default to 0 and the length of \var{vector}, respectively) for an element whose associated key is equal to \var{key}. The procedure \var{elt-$>$key} is used to map an element to its associated key. The elements of the vector are assumed to be ordered by the $<$ relation on these keys. That is, \begin{example} (vector-sorted? (lambda (x y) (\(<\) (\var{elt-\(>\)key} x) (\var{elt-\(>\)key} y))) \var{vector} \var{start} \var{end}) \(\Longrightarrow\) true \end{example} An element \var{e} of \var{vector} is a match for \var{key} if it's neither less nor greater than the key: \begin{example} (and (not (\(<\) (\var{elt-\(>\)key} \var{e}) \var{key})) (not (\(<\) \var{key} (\var{elt-\(>\)key} \var{e})))) \end{example} If there is such an element, the procedure returns its index in the vector as an exact integer. If there is no such element in the searched range, the procedure returns false. \begin{example} (vector-binary-search < car 4 '\#((1 . one) (3 . three) (4 . four) (25 . twenty-five))) \(\Longrightarrow\) 2 (vector-binary-search < car 7 '\#((1 . one) (3 . three) (4 . four) (25 . twenty-five))) \(\Longrightarrow\) \#f \end{example} \code{Vector-binary-search3} is a variant that uses a three-way comparison procedure \var{compare-proc}. \var{Compare-proc} compares its parameter to the search key, and returns an exact integer whose sign indicates its relationship to the search key. % \[ \begin{array}{rclcrcl} (\var{compare-proc}~x) &<& 0& \Rightarrow& x &<& \var{search-key}\\ (\var{compare-proc}~x) &=& 0& \Rightarrow& x &=& \var{search-key}\\ (\var{compare-proc}~x) &>& 0& \Rightarrow& x &>& \var{search-key} \end{array} \] \begin{example} (vector-binary-search3 (lambda (elt) (- (car elt) 4)) '\#((1 . one) (3 . three) (4 . four) (25 . twenty-five))) \(\Longrightarrow\) 2 \end{example} %% Rationale: %% % %% \begin{itemize} %% \item Why isn't \code{vector-binary-search}'s \var{elt-$>$key} %% computation simply absorbed into the $<$ procedure? It is separated %% out because the $<$ procedure is %% applied twice inside the binary-search inner loop, once with the search %% key for the first argument and the element key for the second argument, %% and once, with the reverse argument order. This is not necessary for %% \code{vector-binary-search3}. %% \item When a comparison operation is able to produce a three-way %% discrimination, the inner loop of the binary search can trim the number %% of per-iteration comparisons from an average of 1.5 to a guaranteed %% single comparison per iteration. This can be a significant savings when %% searching with an expensive comparison operation (e.g., one that %% uses string compare, sends email, references a database, or queries %% a network service such as a web server). %% \item Failure is signaled by false (rather than, say, -1) so that searches %% can be used in conditional forms such as %% \begin{verbatim} %% (or (vector-binary-search ...) ...) %% \end{verbatim} %% or %% \begin{verbatim} %% (cond ((vector-binary-search ...) => index-consumer) %% ...) %% \end{verbatim} %% \end{itemize} \subsection{Algorithmic properties} Different sort and merge algorithms have different properties. Choose the algorithm that matches your needs: \begin{description} \item[Vector insert sort] Stable, but only suitable for small vectors---$O(n^2)$. \item[Vector quick sort] Not stable. Is fast on average---$O(n\log(n))$---but has bad worst-case behaviour. Has good memory locality for big vectors (unlike heap sort). A clever pivot-picking trick (median of three samples) helps avoid worst-case behaviour, but pathological cases can still blow up. \item[Vector heap sort] Not stable. Guaranteed fast---$O(n\log(n))$ \emph{worst} case. Poor locality on large vectors. A very reliable workhorse. \item[Vector merge sort] Stable. Not in-place---requires a temporary buffer of equal size. Fast---$O(n\log(n))$---and has good memory locality for large vectors. The implementation of vector merge sort provided by this implementation is, additionally, a ``natural'' sort, meaning that it exploits existing order in the input data, providing $O(n)$ best case. \item[Destructive list merge sort] Stable, fast and in-place (i.e., allocates no new cons cells). ``Fast'' means $O(n\log(n))$ worst-case, and substantially better if the data is already mostly ordered, all the way down to linear time for a completely-ordered input list (i.e., it is a ``natural'' sort). Note that sorting lists involves chasing pointers through memory, which can be a loser on modern machine architectures because of poor cache and page locality. %% Pointer \emph{writing}, which is what the %% \code{set-cdr!}s of a destructive list-sort algorithm do, is %% even worse, especially if your Scheme has a generational GC---the %% writes will thrash the write-barrier. Sorting vectors has inherently better locality. This implementation's destructive list merge and merge sort implementations are opportunistic---they avoid redundant \code{set-cdr!}s, and try to take long already-ordered runs of list structure as-is when doing the merges. \item[Pure list merge sort] Stable and fast---$O(n\log(n))$ worst-case, and possibly $O(n)$, depending upon the input list (see discussion above). \end{description} \begin{center} \begin{tabular}{lllll} Algorithm & Stable? & Worst case & Average case & In-place\\ \hline Vector insert & Yes& $O(n^2)$ & $O(n^2)$& Yes\\ Vector quick & No & $O(n^2)$ & $O(n\log(n))$& Yes\\ Vector heap & No & $O(n\log(n))$& $O(n\log(n))$& Yes\\ Vector merge & Yes& $O(n\log(n))$& $O(n\log(n))$& No\\ List merge & Yes& $O(n\log(n))$& $O(n\log(n))$& Either \end{tabular} \end{center} \section{Regular expressions} \label{regexp-adt} This section describes a functional interface for building regular expressions and matching them against strings. The matching is done using the POSIX regular expression package. Regular expressions are in the structure \code{regexps}. A regular expression is either a character set, which matches any character in the set, or a composite expression containing one or more subexpressions. A regular expression can be matched against a string to determine success or failure, and to determine the substrings matched by particular subexpressions. \begin{protos} \proto{regexp?}{ value}{boolean} \end{protos} \noindent Returns \code{\#t} if \cvar{value} is a regular expression created using the functional interface for regular expressions, and \code{\#f} otherwise. \subsection{Character sets} Character sets may be defined using a list of characters and strings, using a range or ranges of characters, or by using set operations on existing character sets. \begin{protos} \proto{set}{ character-or-string \ldots}{char-set} \proto{range}{ low-char high-char}{char-set} \proto{ranges}{ low-char high-char \ldots}{char-set} \proto{ascii-range}{ low-char high-char}{char-set} \proto{ascii-ranges}{ low-char high-char \ldots}{char-set} \end{protos} \noindent \code{Set} returns a set that contains the character arguments and the characters in any string arguments. \code{Range} returns a character set that contain all characters between \cvar{low-char} and \cvar{high-char}, inclusive. \code{Ranges} returns a set that contains all characters in the given ranges. \code{Range} and \code{ranges} use the ordering induced by \code{char->integer}. \code{Ascii-range} and \code{ascii-ranges} use the ASCII ordering. It is an error for a \cvar{high-char} to be less than the preceding \cvar{low-char} in the appropriate ordering. \begin{protos} \proto{negate}{ char-set}{char-set} \proto{intersection}{ char-set char-set}{char-set} \proto{union}{ char-set char-set}{char-set} \proto{subtract}{ char-set char-set}{char-set} \end{protos} \noindent These perform the indicated operations on character sets. The following character sets are predefined: \begin{center} \texonly\begin{longtable}{ll}\endtexonly \htmlonly\begin{tabular}{ll}\endhtmlonly \code{lower-case} & \code{(set "abcdefghijklmnopqrstuvwxyz")} \\ \code{upper-case} & \code{(set "ABCDEFGHIJKLMNOPQRSTUVWXYZ")} \\ \code{alphabetic} & \code{(union lower-case upper-case)} \\ \code{numeric} & \code{(set "0123456789")} \\ \code{alphanumeric} & \code{(union alphabetic numeric)} \\ \code{punctuation} & \code{(set "}\verb2!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~2\code{")} \\ \code{graphic} & \code{(union alphanumeric punctuation)} \\ \code{printing} & \code{(union graphic (set \#}\verb2\2\code{space))} \\ \code{control} & \code{(negate printing)} \\ \code{blank} & \code{(set \#}\verb2\2\code{space (ascii->char 9))} ; 9 is tab \\ \code{whitespace} & \code{(union (set \#}\verb2\2\code{space) (ascii-range 9 13))} \\ \code{hexdigit} & \code{(set "0123456789abcdefABCDEF")} \\ \texonly\end{longtable}\endtexonly \htmlonly\end{tabular}\endhtmlonly \end{center} \noindent The above are taken from the default locale in POSIX. The characters in \code{whitespace} are \cvar{space}, \cvar{tab}, \cvar{newline} (= \cvar{line feed}), \cvar{vertical tab}, \cvar{form feed}, and \cvar{carriage return}. \subsection{Anchoring} \begin{protos} \proto{string-start}{}{reg-exp} \proto{string-end}{}{reg-exp} \end{protos} \noindent \code{String-start} returns a regular expression that matches the beginning of the string being matched against; {string-end} returns one that matches the end. \subsection{Composite expressions} \begin{protos} \proto{sequence}{ reg-exp \ldots}{reg-exp} \proto{one-of}{ reg-exp \ldots}{reg-exp} \end{protos} \noindent \code{Sequence} matches the concatenation of its arguments, \code{one-of} matches any one of its arguments. \begin{protos} \proto{text}{ string}{reg-exp} \end{protos} \noindent \code{Text} returns a regular expression that matches the characters in \cvar{string}, in order. \begin{protos} \proto{repeat}{ reg-exp}{reg-exp} \proto{repeat}{ count reg-exp}{reg-exp} \proto{repeat}{ min max reg-exp}{reg-exp} \end{protos} \noindent \code{Repeat} returns a regular expression that matches zero or more occurrences of its \cvar{reg-exp} argument. With no count the result will match any number of times (\cvar{reg-exp}*). With a single count the returned expression will match \cvar{reg-exp} exactly that number of times. The final case will match from \cvar{min} to \cvar{max} repetitions, inclusive. \cvar{Max} may be \code{\#f}, in which case there is no maximum number of matches. \cvar{Count} and \cvar{min} should be exact, non-negative integers; \cvar{max} should either be an exact non-negative integer or \code{\#f}. \subsection{Case sensitivity} Regular expressions are normally case-sensitive. \begin{protos} \proto{ignore-case}{ reg-exp}{reg-exp} \proto{use-case}{ reg-exp}{reg-exp} \end{protos} \noindent The value returned by \code{ignore-case} is identical its argument except that case will be ignored when matching. The value returned by \code{use-case} is protected from future applications of \code{ignore-case}. The expressions returned by \code{use-case} and \code{ignore-case} are unaffected by later uses of the these procedures. By way of example, the following matches \code{"ab"} but not \code{"aB"}, \code{"Ab"}, or \code{"AB"}. \begin{example} \code{(text "ab")} \end{example} \noindent while \begin{example} \code{(ignore-case (test "ab"))} \end{example} \noindent matches \code{"ab"}, \code{"aB"}, \code{"Ab"}, and \code{"AB"} and \begin{example} (ignore-case (sequence (text "a") (use-case (text "b")))) \end{example} \noindent matches \code{"ab"} and \code{"Ab"} but not \code{"aB"} or \code{"AB"}. \subsection{Submatches and matching} A subexpression within a larger expression can be marked as a submatch. When an expression is matched against a string, the success or failure of each submatch within that expression is reported, as well as the location of the substring matched be each successful submatch. \begin{protos} \proto{submatch}{ key reg-exp}{reg-exp} \proto{no-submatches}{ reg-exp}{reg-exp} \end{protos} \noindent \code{Submatch} returns a regular expression that matches its argument and causes the result of matching its argument to be reported by the \code{match} procedure. \cvar{Key} is used to indicate the result of this particular submatch in the alist of successful submatches returned by \code{match}. Any value may be used as a \cvar{key}. \code{No-submatches} returns an expression identical to its argument, except that all submatches have been elided. \begin{protos} \proto{any-match?}{ reg-exp string}{boolean} \proto{exact-match?}{ reg-exp string}{boolean} \proto{match}{ reg-exp string}{match or {\tt \#f}} \proto{match-start}{ match}{index} \proto{match-end}{ match}{index} \proto{match-submatches}{ match}{alist} \end{protos} \noindent \code{Any-match?} returns \code{\#t} if \cvar{string} matches \cvar{reg-exp} or contains a substring that does, and \code{\#f} otherwise. \code{Exact-match?} returns \code{\#t} if \cvar{string} matches \cvar{reg-exp} and \code{\#f} otherwise. \code{Match} returns \code{\#f} if \cvar{reg-exp} does not match \cvar{string} and a match record if it does match. A match record contains three values: the beginning and end of the substring that matched the pattern and an a-list of submatch keys and corresponding match records for any submatches that also matched. \code{Match-start} returns the index of the first character in the matching substring and \code{match-end} gives index of the first character after the matching substring. \code{Match-submatches} returns an alist of submatch keys and match records. Only the top match record returned by \code{match} has a submatch alist. Matching occurs according to POSIX. The match returned is the one with the lowest starting index in \cvar{string}. If there is more than one such match, the longest is returned. Within that match the longest possible submatches are returned. All three matching procedures cache a compiled version of \cvar{reg-exp}. Subsequent calls with the same \cvar{reg-exp} will be more efficient. The C interface to the POSIX regular expression code uses ASCII \code{nul} as an end-of-string marker. The matching procedures will ignore any characters following an embedded ASCII \code{nul}s in \cvar{string}. \begin{example} (define pattern (text "abc")) (any-match? pattern "abc") \evalsto #t (any-match? pattern "abx") \evalsto #f (any-match? pattern "xxabcxx") \evalsto #t (exact-match? pattern "abc") \evalsto #t (exact-match? pattern "abx") \evalsto #f (exact-match? pattern "xxabcxx") \evalsto #f (match pattern "abc") \evalsto #\{match 0 3\} (match pattern "abx") \evalsto #f (match pattern "xxabcxx") \evalsto #\{match 2 5\} (let ((x (match (sequence (text "ab") (submatch 'foo (text "cd")) (text "ef")) "xxxabcdefxx"))) (list x (match-submatches x))) \evalsto (#\{match 3 9\} ((foo . #\{match 5 7\})) (match-submatches (match (sequence (set "a") (one-of (submatch 'foo (text "bc")) (submatch 'bar (text "BC")))) "xxxaBCd")) \evalsto ((bar . #\{match 4 6\})) \end{example} \section{SRFIs} `SRFI' stands for `Scheme Request For Implementation'. An SRFI is a description of an extension to standard Scheme. Draft and final SRFI documents, a FAQ, and other information about SRFIs can be found at \urlhd{http://srfi.schemers.org}{the SRFI web site}{\code{http://srfi.schemers.org}}. Scheme~48 includes implementations of the following (final) SRFIs: \begin{itemize} \item SRFI 1 -- List Library \item SRFI 2 -- \code{and-let*} \item SRFI 4 -- Homogeneous numeric vector datatypes (see note below) \item SRFI 5 -- \code{let} with signatures and rest arguments \item SRFI 6 -- Basic string ports \item SRFI 7 -- Program configuration \item SRFI 8 -- \code{receive} \item SRFI 9 -- Defining record types \item SRFI 11 -- Syntax for receiving multiple values \item SRFI 13 -- String Library \item SRFI 14 -- Character-Set Library (see note below) \item SRFI 16 -- Syntax for procedures of variable arity \item SRFI 17 -- Generalized \code{set!} \item SRFI 19 -- Time Data Types and Procedures \item SRFI 22 -- Running Scheme Scripts on Unix \item SRFI 23 -- Error reporting mechanism \item SRFI 25 -- Multi-dimensional Array Primitives \item SRFI 26 -- Notation for Specializing Parameters without Currying \item SRFI 27 -- Sources of Random Bits \item SRFI 28 -- Basic Format Strings \item SRFI 31 -- A special form \texttt{rec} for recursive evaluation \item SRFI 34 -- Exception Handling for Programs \item SRFI 37 -- args-fold: a program argument processor \item SRFI 40 -- A Library of Streams \item SRFI 42 -- Eager Comprehensions \item SRFI 43 -- Vector library \item SRFI 45 -- Primitives for Expressing Iterative Lazy Algorithms \item SRFI 60 -- Integers as Bits \item SRFI 61 -- A more general cond clause \item SRFI 62 -- S-expression comments \item SRFI 63 -- Homogeneous and Heterogeneous Arrays \item SRFI 66 -- Octet Vectors \item SRFI 67 -- Compare Procedures \item SRFI 74 -- Octet-Addressed Binary Blocks \item SRFI 78 -- Lightweight testing \end{itemize} Documentation on these can be found at the web site mentioned above. SRFI~4 specifies an external representation for homogeneous numeric vectors that is incompatible with R$^5$RS. The Scheme~48 version of SRFI~4 does not support this external representation. SRFI~14 includes the procedure \code{->char-set} which is not a standard Scheme identifier (in R$^5$RS the only required identifier starting with \code{-} is \code{-} itself). In the Scheme~48 version of SRFI~14 we have renamed \code{->char-set} as \code{x->char-set}. %% With the exception of SRFI 62 (which is supported by default), the SRFI bindings can be accessed either by opening the appropriate structure (the structure \code{srfi-}\cvar{n} contains SRFI \cvar{n}) or by loading structure \code{srfi-7} and then using the \code{,load-srfi-7-program} command to load an SRFI~7-style program. The syntax for the command is \begin{example} \code{,load-srfi-7-program \cvar{name} \cvar{filename}} \end{example} This creates a new structure and associated package, binds the structure to \cvar{name} in the configuration package, and then loads the program found in \cvar{filename} into the package. As an example, if the file \code{test.scm} contains \begin{example} (program (code (define x 10))) \end{example} this program can be loaded as follows: \begin{example} > ,load-package srfi-7 > ,load-srfi-7-program test test.scm [test] > ,in test test> x 10 test> \end{example} %%% Local Variables: %%% mode: latex %%% TeX-master: "manual" %%% End: scheme48-1.9/doc/src/version-number.tex000644 004306 005702 00000000003 12070060502 021032 0ustar00sperberPUStaff000000 000000 1.9scheme48-1.9/doc/src/matter.sty000644 004306 005702 00000000750 12067075540 017421 0ustar00sperberPUStaff000000 000000 %&latex -*- latex -*- % Implement the \frontmatter, \mainmatter, and \backmatter macros, % so I can use them in reports, not just books. % Authors: Mike Sperber \newif\if@mainmatter \@mainmattertrue \newcommand\frontmatter{% \cleardoublepage\@mainmatterfalse\pagenumbering{roman}} \newcommand\mainmatter{% \cleardoublepage\@mainmattertrue% \pagenumbering{arabic}\setcounter{page}{1}} \newcommand\backmatter{% \if@openright\cleardoublepage\else\clearpage\fi% \@mainmatterfalse} scheme48-1.9/doc/src/ascii.scm000644 004306 005702 00000010226 12067075540 017157 0ustar00sperberPUStaff000000 000000 ; Part of Scheme 48 1.9. See file COPYING for notices and license. ; Authors: Richard Kelsey, Jonathan Rees (define control-names '#("NUL" "SOH" "STX" "ETX" "EOT" "ENQ" "ACK" "BEL" "BS" "HT" "LF" "VT" "FF" "CR" "SO" "SI" "DLE" "DC1" "DC2" "DC3" "DC4" "NAK" "SYN" "ETB" "CAN" "EM" "SUB" "ESC" "FS" "GS" "RS" "US" "SPACE")) (define unicode-latin-1-names '#("NULL" "START OF HEADING" "START OF TEXT" "END OF TEXT" "END OF TRANSMISSION" "ENQUIRY" "ACKNOWLEDGE" "BELL" "BACKSPACE" "HORIZONTAL TABULATION" "LINE FEED" "VERTICAL TABULATION" "FORM FEED" "CARRIAGE RETURN" "SHIFT OUT" "SHIFT IN" "DATA LINK ESCAPE" "DEVICE CONTROL ONE" "DEVICE CONTROL TWO" "DEVICE CONTROL THREE" "DEVICE CONTROL FOUR" "NEGATIVE ACKNOWLEDGE" "SYNCHRONOUS IDLE" "END OF TRANSMISSION BLOCK" "CANCEL" "END OF MEDIUM" "SUBSTITUTE" "ESCAPE" "FILE SEPARATOR" "GROUP SEPARATOR" "RECORD SEPARATOR" "UNIT SEPARATOR" "SPACE" "EXCLAMATION MARK" "QUOTATION MARK" "NUMBER SIGN" "DOLLAR SIGN" "PERCENT SIGN" "AMPERSAND" "APOSTROPHE" "LEFT PARENTHESIS" "RIGHT PARENTHESIS" "ASTERISK" "PLUS SIGN" "COMMA" "HYPHEN-MINUS" "FULL STOP" "SOLIDUS" "DIGIT ZERO" "DIGIT ONE" "DIGIT TWO" "DIGIT THREE" "DIGIT FOUR" "DIGIT FIVE" "DIGIT SIX" "DIGIT SEVEN" "DIGIT EIGHT" "DIGIT NINE" "COLON" "SEMICOLON" "LESS-THAN SIGN" "EQUALS SIGN" "GREATER-THAN SIGN" "QUESTION MARK" "COMMERCIAL AT" "LATIN CAPITAL LETTER A" "LATIN CAPITAL LETTER B" "LATIN CAPITAL LETTER C" "LATIN CAPITAL LETTER D" "LATIN CAPITAL LETTER E" "LATIN CAPITAL LETTER F" "LATIN CAPITAL LETTER G" "LATIN CAPITAL LETTER H" "LATIN CAPITAL LETTER I" "LATIN CAPITAL LETTER J" "LATIN CAPITAL LETTER K" "LATIN CAPITAL LETTER L" "LATIN CAPITAL LETTER M" "LATIN CAPITAL LETTER N" "LATIN CAPITAL LETTER O" "LATIN CAPITAL LETTER P" "LATIN CAPITAL LETTER Q" "LATIN CAPITAL LETTER R" "LATIN CAPITAL LETTER S" "LATIN CAPITAL LETTER T" "LATIN CAPITAL LETTER U" "LATIN CAPITAL LETTER V" "LATIN CAPITAL LETTER W" "LATIN CAPITAL LETTER X" "LATIN CAPITAL LETTER Y" "LATIN CAPITAL LETTER Z" "LEFT SQUARE BRACKET" "REVERSE SOLIDUS" "RIGHT SQUARE BRACKET" "CIRCUMFLEX ACCENT" "LOW LINE" "GRAVE ACCENT" "LATIN SMALL LETTER A" "LATIN SMALL LETTER B" "LATIN SMALL LETTER C" "LATIN SMALL LETTER D" "LATIN SMALL LETTER E" "LATIN SMALL LETTER F" "LATIN SMALL LETTER G" "LATIN SMALL LETTER H" "LATIN SMALL LETTER I" "LATIN SMALL LETTER J" "LATIN SMALL LETTER K" "LATIN SMALL LETTER L" "LATIN SMALL LETTER M" "LATIN SMALL LETTER N" "LATIN SMALL LETTER O" "LATIN SMALL LETTER P" "LATIN SMALL LETTER Q" "LATIN SMALL LETTER R" "LATIN SMALL LETTER S" "LATIN SMALL LETTER T" "LATIN SMALL LETTER U" "LATIN SMALL LETTER V" "LATIN SMALL LETTER W" "LATIN SMALL LETTER X" "LATIN SMALL LETTER Y" "LATIN SMALL LETTER Z" "LEFT CURLY BRACKET" "VERTICAL LINE" "RIGHT CURLY BRACKET" "TILDE" "DELETE")) (define (display-char i) (for-each display (list "\\code{" (number->string i 10) "} & \\code{" (string-upcase (number->string i 16)) "} & " (cond ((<= i 32) (vector-ref control-names i)) ((= i 127) "DEL") ((= i (char->ascii #\|)) "\\verb$|$") (else (string-append "\\verb|" (list->string (list (ascii->char i))) "|"))) " & " (string-downcase (vector-ref unicode-latin-1-names i))))) (define (string-upcase string) (list->string (map char-upcase (string->list string)))) (define (string-downcase string) (list->string (map char-downcase (string->list string)))) (define (write-ascii-table) (do ((i 0 (+ i 1))) ((= i 64)) (display-char i) (display " & ") (display-char (+ i 64)) (display " \\\\") (newline))) scheme48-1.9/doc/scheme48.man000644 004306 005702 00000005001 12067075324 016704 0ustar00sperberPUStaff000000 000000 .TH LS48 1 .\" File scheme48.man: Manual page template for Scheme 48. .\" Replace LS48 with the name of your default image and LLIB with the .\" directory containing scheme48vm and default image. .SH NAME LS48 \- a Scheme interpreter .SH SYNOPSIS .B LS48 [-i image] [-h heapsize] [-a argument] .SH DESCRIPTION .B LS48 is an implementation of the Scheme programming language as described in the .I "Revised^5 Report on the Algorithmic Language Scheme." A runnable system requires two parts, an executable program that implements the Scheme 48 virtual machine, and an image that is used to initialize the store of the virtual machine. .B LS48 is a shell script that starts the virtual machine with an image that runs in a Scheme command loop. .PP The .B LS48 command loop reads Scheme expressions, evaluates them, and prints their results. It also executes commands, which are identified by an initial comma character. Type the command .I ,help to receive a list of available commands. .PP The meaning of the .B \-h option depends on the type of garbage collector that was chosen at configuration time. If .IR heapsize is a positive number, it specifies the number of words that can be live at any given time. One word is four bytes. Cons cells are currently 3 words, so if you want to make sure you can allocate, say, a million cons cells, you should specify .B \-h 3000000 (actually a little more, to account for the initial heap image and breathing room). .PP If you specify a maximum smaller than the memory needed to load the image file, the maximum is increased accordingly and a message is written to the console. .PP For the BIBOP garbage collector, .IR heapsize may be 0. This means the heap will possibly keep growing until your system runs out of memory. Because of this risk, a warning message is written to the console if you specify .B -h 0. .PP The .I ,dump and .I ,build commands put heap images in files. The .B \-i option causes the initial heap image to be taken from file .IR image . The .B \-a option causes a list of strings to be passed as the argument to an image generated using the .I ,build command. The first argument to .I ,build is a procedure that is passed the arguments following .B \-a and which should return an integer (which is the return value of the Scheme 48 process). .PP .nf > ,build (lambda (a) (display a) (newline) 0) foo.image > ,exit $ LS48 -i foo.image -a mumble mumble $ .PP .fi .SH FILES .TP 40 .B LLIB/scheme48vm the virtual machine. .TP .B LLIB/LS48.image the default image. scheme48-1.9/emacs/README000644 004306 005702 00000003413 10662041705 015772 0ustar00sperberPUStaff000000 000000 Date: Thu, 9 Jul 92 13:26:05 HKT From: shivers@csd.hku.hk (Olin G. Shivers) To: jar@cs.cornell.edu In-Reply-To: Jonathan Rees's message of Wed, 8 Jul 92 22:15:22 -0400 <9207090215.AA00991@sindri.cs.cornell.edu> Subject: cmulisp It's also in Ozan's repository, but I don't know how up-to-date it is. It's always useful to list his repository as a possible location, tho. -Olin /afs/cs.cmu.edu/user/shivers/lib/Readme: This directory contains the following subdirectories: emacs Gnu emacs packages. papers My papers, in .dvi and postscript form. tex LaTeX packages. All of these files can be anonymously ftp'd. -Olin July 3, 1991 =============================================================================== Directions for anonymous ftp: 1. ftp to any CMU machine with access to the /afs network file system. Almost any machine will do; some possibilities are: cs.cmu.edu 128.2.222.173 a.gp.cs.cmu.edu 128.2.242.7 f.gp.cs.cmu.edu 128.2.250.164 h.gp.cs.cmu.edu 128.2.254.156 k.gp.cs.cmu.edu 128.2.254.137 2. login as anonymous You are supposed to provide username@host as the password. The CMU ftp demon actually checks to ensure there's an "@" in the password. So you can't just say "foo"; you have to say "foo@bar". 3. cd /afs/cs.cmu.edu/user/shivers/lib CMU ftp restricts the directories you can access anonymously, so you must cd straight to the .../lib directory or its descendants. 4. If you are transfering .dvi or other binary files, set the file transfer mode to raw binary with one of the following commands: type image type binary image binary If you don't do this, the files may be garbled. 5. Use dir or ls to list the directory. 6. Transfer the files you want. scheme48-1.9/build/extract-filenames.scm000644 004306 005702 00000007055 12067075540 021253 0ustar00sperberPUStaff000000 000000 ; Part of Scheme 48 1.9. See file COPYING for notices and license. ; Authors: Richard Kelsey, Jonathan Rees, Michael Sperber, Marcus Crestani, Robert Ransom ; Generate filenames.make from *-packages.scm. ; Define DEFINE-STRUCTURE and friends (for-each load '("scheme/bcomp/module-language.scm" "scheme/alt/dummy-interface.scm" "scheme/alt/config.scm" "scheme/env/flatload.scm")) ; The following bogus structures are required in order to load ; scheme/more-interfaces.scm. (define ascii (structure (make-simple-interface 'ascii '()))) (define bitwise (structure (make-simple-interface 'bitwise '()))) (define vm-data (structure (make-simple-interface 'vm-data '()))) (define enumerated (structure (make-simple-interface 'enumerated '()))) (define tables (structure (make-simple-interface 'tables '()))) (define cells (structure (make-simple-interface 'cells '()))) (define platform (structure (make-simple-interface 'structure '()))) ; The following loads are unnecessary; they only serve to suppress ; annoying "undefined" warnings for interfaces. (for-each load '("scheme/interfaces.scm" "scheme/vm/shared-interfaces.scm" "scheme/more-interfaces.scm" "scheme/sort/interfaces.scm")) (load-configuration "scheme/packages.scm") ; The following defines are unnecessary; they only serve to suppress ; annoying "undefined" warnings for some forward references. (define methods 0) (define tables 0) (define exceptions #f) ; avoid undefined warning (flatload linker-structures) (set! exceptions low-exceptions) ; so we don't have to import low-exceptions in the linker (define q-f (all-file-names link-config)) ; (display "Initial structures") (newline) (flatload initial-structures) (define scheme (make-scheme environments evaluation)) (define initial-system (structure (export) (open ;; Cf. initial.scm (make-initial-system scheme (make-mini-command scheme)) module-system ensures-loaded for-reification))) ;foo... (define i-f (all-file-names initial-system)) ; (display "Usual structures") (newline) (flatload usual-structures) (define u-f (all-file-names usual-features initial-system)) (define (write-file-names mumble comment . stuff) (comment "This file was generated automatically.") (do ((stuff stuff (cddr stuff))) ((null? stuff)) (mumble (car stuff) (cadr stuff)) ;; (mumble 'all-files (reverse *all-files*)) )) ;; Unix (begin (display "Writing ") (display "build/filenames.make") (newline) (call-with-output-file "build/filenames.make" (lambda (port) (write-file-names (lambda (name filenames) (newline port) (display name port) (display " = " port) (for-each (lambda (filename) (display filename port) (display " " port)) filenames) (newline port)) (lambda (comment) (display "# " port) (display comment port) (newline port)) 'initial-files i-f 'usual-files u-f 'linker-files q-f)))) ;; Windows (begin (display "Writing ") (display "build/filenames.bat") (newline) (call-with-output-file "build/filenames.bat" (lambda (port) (write-file-names (lambda (name filenames) (newline port) (display "@set " port) (display name port) (display "=" port) (for-each (lambda (filename) (display filename port) (display " " port)) filenames) (newline port)) (lambda (comment) (display "@rem " port) (display comment port) (newline port)) 'initial-files i-f 'usual-files u-f 'linker-files q-f)))) scheme48-1.9/build/initial.scm000644 004306 005702 00000003434 12067075540 017266 0ustar00sperberPUStaff000000 000000 ; Part of Scheme 48 1.9. See file COPYING for notices and license. ; Authors: Richard Kelsey, Jonathan Rees, Marcus Crestani ; Link script. (define (link-initial-system) (let ((structures-to-open ;Structures to open for the initial (struct-list scheme ;system's read-eval-print loop. platform environments module-system ensures-loaded packages packages-internal))) ; package-for-syntax (link-reified-system (append (desirable-structures) structures-to-open) '(build initial) ;; The expression that evaluates to the ;; procedure that maps the reified-structure alist ;; to the startup procedure: `(start ',(map car structures-to-open)) ;; Structures to open for evaluating that ;; expression and the expression that ;; evaluates to the reified-structure alist: initial-system for-reification ;; scheme-level-1 ))) (define (desirable-structures) (let ((env (interaction-environment)) (l '())) (for-each (lambda (int) (for-each-declaration (lambda (name package-name type) (if (not (assq name l)) (let ((s (eval name env))) (if (structure? s) (set! l (cons (cons name s) l)))))) int)) (list low-structures-interface run-time-structures-interface features-structures-interface run-time-internals-structures-interface compiler-structures-interface initial-structures-interface)) (reverse l))) ; Your choice of evaluators: (define scheme (make-scheme environments evaluation)) ; (define scheme (make-scheme mini-environments mini-eval)) ; (define scheme (make-scheme environments run)) ; etc. ; Your choice of command processors. (define initial-system (make-initial-system scheme (make-mini-command scheme))) scheme48-1.9/build/windows-installer.scm000644 004306 005702 00000011212 12067075540 021313 0ustar00sperberPUStaff000000 000000 ; Part of Scheme 48 1.9. See file COPYING for notices and license. ; Authors: Mike Sperber ; This produces the auto-generated part of the Windows installer ; source code. (define *non-slashes* (char-set-complement (char-set #\/))) ; returns a pair of directory (itself a list) and base file name (define (split-file-name f) (let ((rev-components (reverse (string-tokenize f *non-slashes*)))) (cons (reverse (cdr rev-components)) (car rev-components)))) (define (write-file-elements-include-file file-names uuids output-file-name) (call-with-output-file output-file-name (lambda (port) (display "" port) (newline port) (display "" port) (newline port) (write-file-elements file-names uuids port) (display "" port) (newline port)))) ; organize the directories into a tree ; returns a tree = list of (union string (cons subdir tree)) (define (tree-ize-directory-alist alist) (call-with-values (lambda () (partition (lambda (pair) (null? (car pair))) alist)) (lambda (file-pairs directory-pairs) (let* ((prefixes (delete-duplicates (map caar directory-pairs))) (subdirectories (map (lambda (prefix) (let* ((with-prefix-pairs (filter (lambda (pair) (string=? prefix (caar pair))) directory-pairs)) (omit-prefix (map (lambda (pair) (cons (cdar pair) (cdr pair))) with-prefix-pairs))) (cons prefix (tree-ize-directory-alist omit-prefix)))) prefixes))) (append subdirectories (concatenate (map cdr file-pairs))))))) ; write the WiX file elements for a given list of file names (define (write-file-elements file-names uuids port) (let* ((split-names (map split-file-name file-names)) (directories (delete-duplicates (map car split-names))) (alist (map (lambda (directory) (cons directory (filter-map (lambda (split-name) (if (equal? directory (car split-name)) (cdr split-name) #f)) split-names))) directories)) (tree (tree-ize-directory-alist alist))) (write-directory-tree '() tree (make-uuid-source uuids) port))) (define (make-uuid-source uuids) (lambda () (let ((uuid (car uuids))) (set! uuids (cdr uuids)) uuid))) (define (write-directory-tree directory alist uuid-source port) (if (not (null? directory)) (begin (display "" port) (newline port))) (call-with-values (lambda () (partition string? alist)) (lambda (file-names directory-entries) (if (not (null? file-names)) (begin (display "" port) (newline port) (let ((used-file-names (list '()))) ; poor man's cell (for-each (lambda (file-name) (write-file-element port directory file-name used-file-names)) file-names)) (display "" port) (newline port))) (for-each (lambda (entry) (write-directory-tree (append directory (list (car entry))) (cdr entry) uuid-source port)) directory-entries))) (if (not (null? directory)) (begin (display "" port) (newline port)))) (define (quote-component comp) (list->string (map (lambda (ch) (if (char=? ch #\-) #\. ch)) (string->list comp)))) ; insert separators between the components (define (components->string directory separator) (let ((id #f)) (for-each (lambda (component) (if id (set! id (string-append id separator component)) (set! id component))) directory) id)) (define (components->quoted-string dir sep) (components->string (map quote-component dir) sep)) (define (directory-id directory) (components->quoted-string directory "_")) (define (file-id directory base) (components->quoted-string (append directory (list base)) "_")) (define (file-src directory base) (components->string (append directory (list base)) "/")) (define (component-id directory) (components->quoted-string (append directory (list "component")) "_")) (define (write-file-element port directory base-name used-file-names) (display "" port) (newline port)) scheme48-1.9/build/minor-version-number000644 004306 005702 00000000002 12070060502 021117 0ustar00sperberPUStaff000000 000000 9 scheme48-1.9/build/load-linker.exec000644 004306 005702 00000005422 12067075540 020177 0ustar00sperberPUStaff000000 000000 ; Part of Scheme 48 1.9. See file COPYING for notices and license. ; Authors: Richard Kelsey, Jonathan Rees ; Load the linker. -*- Mode: Scheme; -*- ; Run this script with ,exec ,load l.exec. ; After the script is loaded, you can, in principle, do whatever ; you might do in the usual linker image. For example, you might do ; (this is from the Makefile) ; ; ,in link-config ; (load-configuration "interfaces.scm") ; (load-configuration "packages.scm") ; (flatload initial-structures) ; (load "initial.scm") ; (link-initial-system) ; ; This is intended to be used to debug new versions of the compiler or ; static linker. (config '(run (define :arguments :values))) ;temporary hack (translate "=scheme48/" "./") (load-package 'flatloading) (open 'flatloading) (define (r x) (config `(run ,x))) (r '(define-structure source-file-names (export (%file-name% :syntax)) (open scheme-level-1 syntactic fluids) (begin (define-syntax %file-name% (syntax-rules () ((%file-name%) (fluid $source-file-name))))))) (r '(define-structure enumerated enumerated-interface (open scheme-level-1 signals) (files (rts defenum scm)))) (r '(define-structure architecture vm-architecture-interface (open scheme-level-1 signals enumerated) (files (rts arch)))) (config '(structure reflective-tower-maker (export-reflective-tower-maker))) ; Make the new linker obtain its table, record, etc. structures from ; the currently running Scheme. (config '(load "packages.scm")) (config '(structure %run-time-structures run-time-structures-interface)) (config '(structure %features-structures features-structures-interface)) (r '(define-structure %linker-structures (make-linker-structures %run-time-structures %features-structures (make-compiler-structures %run-time-structures %features-structures)))) ; Load the linker's interface and structure definitions. (config '(load "interfaces.scm" "vm/shared-interfaces.scm" "more-interfaces.scm")) (let ((z (config '(run %linker-structures))) (env (config interaction-environment))) (config (lambda () (flatload z env)))) ; Load the linker. (load-package 'link-config) ; Initialize (in 'link-config '(open scheme packages packages-internal reflective-tower-maker)) (in 'linker '(run (set! *debug-linker?* #t))) (in 'link-config '(open flatloading)) ; A different one. ; ,open debuginfo packages-internal compiler scan syntactic meta-types ; (in 'link-config '(dump "l.image")) ; ,exec (usual-stuff) (define (usual-stuff) (in 'link-config) (run '(begin (load-configuration "interfaces.scm") (load-configuration "packages.scm") (flatload initial-structures))) (load "initial.scm")) scheme48-1.9/build/lucid-script.lisp000644 004306 005702 00000004476 12067075540 020433 0ustar00sperberPUStaff000000 000000 ; Part of Scheme 48 1.9. See file COPYING for notices and license. ; Authors: Richard Kelsey, Jonathan Rees ; Script to load the Scheme 48 linker into Common Lisp. ; Requires Pseudoscheme 2.11. (defvar pseudoscheme-directory "../pseudo/") (load (concatenate 'string pseudoscheme-directory "loadit.lisp")) ; or perhaps (load (merge-pathnames "loadit.lisp" pseudoscheme-directory)) (load-pseudoscheme pseudoscheme-directory) (progn (revised^4-scheme::define-sharp-macro #\. #'(lambda (c port) (read-char port) (eval (let ((*readtable* ps::scheme-readtable)) (read port))))) (values)) (ps:scheme) ;-------------------- ; Scheme forms (benchmark-mode) (define config-env ; (interaction-environment) would also work here. (#.'scheme-translator:make-program-env '%config (list #.'scheme-translator:revised^4-scheme-structure))) (load "bcomp/module-language" config-env) (load "alt/config" config-env) (load "env/flatload" config-env) (eval '(set! *load-file-type* #f) config-env) (define load-config (let ((load-config (eval 'load-configuration config-env))) (lambda (filename) (load-config filename config-env)))) (load-config "packages") (define flatload-package (eval 'flatload config-env)) (flatload-package (eval 'linker-structures config-env) config-env) (let ((#.'clever-load:*compile-if-necessary-p* #t)) (let ((#.'ps:*scheme-read* #.'#'ps::scheme-read-using-commonlisp-reader)) (load "alt/pseudoscheme-record") (load "alt/pseudoscheme-features"))) (let ((#.'clever-load:*compile-if-necessary-p* #t)) (flatload-package (eval 'link-config config-env))) (load "alt/init-defpackage.scm") (define-syntax struct-list ;not in link.sbin (syntax-rules () ((struct-list ?name ...) (list (cons '?name ?name) ...)))) ;-------------------- (quit) #+Lucid (defun disksave-restart-function () (format t "~&Scheme 48 linker.~2%") ;; (hax:init-interrupt-delivery) - for threads (ps:scheme) (terpri)) #+Lucid (defun dump-linker () (lcl:disksave "link/linker-in-lucid" :gc t :full-gc t :verbose t :restart-function #'disksave-restart-function)) ;(dump-linker) ;(lcl:quit) ; Debugging hacks ;(defun enable-lisp-packages () ; (setq *readtable* ps:scheme-readtable) ; (values)) ;(defun disable-lisp-packages () ; (setq *readtable* ps::roadblock-readtable) ; (values)) scheme48-1.9/build/build-usual-image000755 004306 005702 00000003154 12067075540 020364 0ustar00sperberPUStaff000000 000000 #!/bin/sh # Part of Scheme 48 1.9. See file COPYING for notices and license. # # Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Marcus Crestani # # Build the usual development environment image. date=`date +%Y-%m-%d` srcdir=$1 share=$2 lib=$3 image=$4 vm=$5 initial=$6 USER=${USER-`logname 2>/dev/null || echo '*GOK*'`} $vm -i $initial -a batch <os-string) "batch"))) (ensure-loaded usual-features) ,structure more-structures more-structures-interface ,in debuginfo (read-debug-info "$srcdir/build/initial.debug") ,keep maps source files ,new-package ,open scheme filenames (set-global-translation! "=scheme48/" "$share/") (set-global-translation! "=scheme48external/" "$lib/") ,user ,build ((*structure-ref package-commands-internal 'new-command-processor) "(made by $USER on $date)" usual-commands built-in-structures more-structures) $image EOF scheme48-1.9/build/filenames.make000644 004306 005702 00000011245 12067075743 017737 0ustar00sperberPUStaff000000 000000 # This file was generated automatically. initial-files = scheme/rts/low.scm scheme/rts/low-exception.scm scheme/rts/low-syntax.scm scheme/rts/charmap.scm scheme/rts/base.scm scheme/rts/util.scm scheme/rts/number.scm scheme/rts/lize.scm scheme/rts/syntax-rules-data.scm scheme/rts/syntax-rules-apply.scm scheme/rts/record.scm scheme/rts/jar-defrecord.scm scheme/rts/method.scm scheme/rts/numio.scm scheme/rts/fluid.scm scheme/rts/condition.scm scheme/rts/defenum.scm scheme/vm/interp/arch.scm scheme/rts/vm-exception.scm scheme/rts/wind.scm scheme/rts/template.scm scheme/rts/continuation.scm scheme/rts/exception.scm scheme/rts/proposal.scm scheme/big/queue.scm scheme/rts/session.scm scheme/rts/interrupt.scm scheme/rts/thread.scm scheme/rts/sleep.scm scheme/rts/text-codec.scm scheme/rts/port.scm scheme/rts/port-buffer.scm scheme/rts/current-port.scm scheme/rts/write.scm scheme/rts/read.scm scheme/rts/syntax-info.scm scheme/rts/encoding.scm scheme/rts/os-string.scm scheme/rts/condvar.scm scheme/rts/channel.scm scheme/rts/channel-port.scm scheme/big/general-table.scm scheme/rts/population.scm scheme/bcomp/mtype.scm scheme/bcomp/interface.scm scheme/bcomp/binding.scm scheme/bcomp/cenv.scm scheme/bcomp/name.scm scheme/bcomp/transform.scm scheme/bcomp/thingie.scm scheme/bcomp/package.scm scheme/bcomp/package-undef.scm scheme/rts/env.scm scheme/big/filename.scm scheme/bcomp/read-form.scm scheme/bcomp/node.scm scheme/bcomp/schemify.scm scheme/bcomp/var-util.scm scheme/bcomp/syntax.scm scheme/bcomp/primop.scm scheme/vm/data/data.scm scheme/bcomp/ddata.scm scheme/bcomp/state.scm scheme/bcomp/frame.scm scheme/bcomp/segment.scm scheme/bcomp/optimize.scm scheme/bcomp/flatten.scm scheme/bcomp/recon.scm scheme/bcomp/comp-exp.scm scheme/bcomp/comp-lambda.scm scheme/bcomp/comp-prim.scm scheme/bcomp/comp.scm scheme/rts/eval.scm scheme/debug/mini-command.scm scheme/env/dispcond.scm scheme/rts/external-event.scm scheme/rts/scheduler.scm scheme/rts/root-scheduler.scm scheme/rts/init.scm scheme/env/start.scm scheme/bcomp/syntax-rules-compiler.scm scheme/bcomp/usual.scm scheme/bcomp/syntax-rules.scm scheme/bcomp/type.scm scheme/bcomp/module-language.scm scheme/bcomp/config.scm scheme/bcomp/scan-package.scm scheme/bcomp/comp-package.scm scheme/env/load-package.scm scheme/big/strong.scm scheme/opt/usage.scm scheme/opt/sort.scm scheme/opt/inline.scm scheme/bcomp/for-reify.scm usual-files = scheme/opt/analyze.scm scheme/env/dispcond.scm scheme/env/user.scm scheme/env/command-level.scm scheme/env/disclosers.scm scheme/env/menu.scm scheme/env/version-info.scm scheme/env/command.scm scheme/env/read-command.scm scheme/env/debuginfo.scm scheme/rts/xnum.scm scheme/rts/floatnum.scm scheme/env/vm-exception.scm scheme/rts/ratnum.scm scheme/rts/recnum.scm scheme/env/basic-command.scm scheme/env/build.scm scheme/env/shadow.scm scheme/env/pedit.scm scheme/env/pacman.scm scheme/env/debug.scm scheme/env/inspect.scm scheme/env/parse-bytecode.scm scheme/env/disasm.scm scheme/big/finite-type.scm scheme/env/unicode-category.scm scheme/env/unicode-info.scm scheme/env/unicode-charmap.scm linker-files = scheme/rts/util.scm scheme/rts/defenum.scm scheme/vm/interp/arch.scm scheme/alt/jar-defrecord.scm scheme/big/general-table.scm scheme/bcomp/mtype.scm scheme/alt/locations.scm scheme/bcomp/binding.scm scheme/alt/../rts/low-syntax.scm scheme/bcomp/cenv.scm scheme/bcomp/name.scm scheme/bcomp/transform.scm scheme/alt/fluid.scm scheme/alt/weak.scm scheme/rts/population.scm scheme/bcomp/interface.scm scheme/alt/template.scm scheme/rts/template.scm scheme/bcomp/thingie.scm scheme/bcomp/package.scm scheme/bcomp/package-undef.scm scheme/bcomp/node.scm scheme/bcomp/schemify.scm scheme/bcomp/var-util.scm scheme/bcomp/primop.scm scheme/bcomp/ddata.scm scheme/bcomp/state.scm scheme/bcomp/frame.scm scheme/bcomp/segment.scm scheme/bcomp/optimize.scm scheme/bcomp/flatten.scm scheme/bcomp/recon.scm scheme/bcomp/comp-exp.scm scheme/bcomp/comp-lambda.scm scheme/bcomp/comp-prim.scm scheme/bcomp/comp.scm scheme/alt/closure.scm scheme/link/data.scm scheme/link/transport.scm scheme/link/write-image.scm scheme/bcomp/syntax.scm scheme/env/debuginfo.scm scheme/big/filename.scm scheme/bcomp/read-form.scm scheme/bcomp/scan-package.scm scheme/rts/syntax-rules-data.scm scheme/bcomp/syntax-rules-compiler.scm scheme/bcomp/usual.scm scheme/bcomp/syntax-rules.scm scheme/bcomp/comp-package.scm scheme/big/strong.scm scheme/opt/usage.scm scheme/opt/sort.scm scheme/opt/inline.scm scheme/link/reify.scm scheme/link/link.scm scheme/rts/syntax-rules-apply.scm scheme/alt/loophole.scm scheme/bcomp/type.scm scheme/alt/low.scm scheme/bcomp/module-language.scm scheme/bcomp/config.scm scheme/opt/analyze.scm scheme/alt/environments.scm scheme/link/loadc.scm scheme/env/flatload.scm scheme48-1.9/build/initial.debug000644 004306 005702 00001103553 12067150474 017576 0ustar00sperberPUStaff000000 000000 ; Package uid -> name (0 platform) (1 low-structures) (2 debug-low-structures) (3 alt-features-structures) (4 cheat-features-structures) (5 the-interfaces) (6 meta-module-system) (7 run-time-structures) (8 compiler-structures) (9 initial-structures) (10 debug-structures) (11 usual-structures) (12 alt-low-structures) (13 compiler-structures) (14 linker-structures) (15 scheme-level-0) (16 scheme-level-1) (17 record-types) (18 export-the-record-type) (19 define-record-types) (20 methods) (21 number-i/o) (22 fluids) (23 wind) (24 session-data) (25 text-codecs) (26 encodings) (27 os-strings) (28 i/o) (29 channel-i/o) (30 channel-ports) (31 conditions) (32 writing) (33 reading) (34 scheme-level-2) (35 features) (36 templates) (37 continuations) (38 more-types) (39 enumerated) (40 architecture) (41 vm-data) (42 vm-exceptions) (43 exceptions) (44 interrupts) (45 external-events) (46 threads) (47 proposals) (48 scheduler) (49 root-scheduler) (50 enum-case) (51 queues) (52 condvars) (53 usual-resumer) (54 weak) (55 meta-types) (56 bindings) (57 names) (58 thingies) (59 compiler-envs) (60 nodes) (61 syntactic) (62 syntax-rules-compiler) (63 usual-macros) (64 var-utilities) (65 debug-data) (66 segments) (67 primops) (68 reconstruction) (69 compiler) (70 frames) (71 reading-forms) (72 flat-environments) (73 interfaces) (74 packages) (75 scan-package) (76 optimizer) (77 compile-packages) (78 defpackage) (79 types) (80 module-system) (81 usages) (82 analysis) (83 inline) (84 strong) (85 tables) (86 filenames) (87 environments) (88 evaluation) (89 ensures-loaded) (90 for-reification) (91 scheme) (92 mini-command) (93 initial-system) - ; Location uid -> (name . package-uid) (0 (and . 15)) (1 (cond . 15)) (2 (do . 15)) (3 (let . 15)) (4 (let* . 15)) (5 (or . 15)) (6 (quote . 15)) (7 (loophole . 15)) (8 (letrec-syntax . 15)) (9 (define-syntax . 15)) (10 (lambda . 15)) (11 (%file-name% . 15)) (12 (call . 15)) (13 (let-syntax . 15)) (14 (code-quote . 15)) (15 (flat-lambda . 15)) (16 (define . 15)) (17 (set! . 15)) (18 (begin . 15)) (19 (pure-letrec . 15)) (20 (unassigned . 15)) (21 (lap . 15)) (22 (if . 15)) (23 (letrec . 15)) (24 (structure-ref . 15)) (25 (letrec* . 15)) (26 (unspecific . 15)) (27 (primitive-procedure . 15)) (28 (all-operators . 15)) (29 (record-type<=? . 15)) (30 (continuation-ref . 15)) (31 (rational? . 15)) (32 (provisional-port-text-codec-spec . 15)) (33 (provisional-port-lock . 15)) (34 (with-continuation . 15)) (35 (set-port-lock! . 15)) (36 (quotient . 15)) (37 (char->scalar-value . 15)) (38 (trap . 15)) (39 (integer? . 15)) (40 (continuation-length . 15)) (41 (open-channels-list . 15)) (42 (checked-record-ref . 15)) (43 (set-transport-link-cell-tconc! . 15)) (44 (closure-env . 15)) (45 (peek-byte . 15)) (46 (bitwise-xor . 15)) (47 (make-template . 15)) (48 (inexact->exact . 15)) (49 (exact->inexact . 15)) (50 (complex? . 15)) (51 (make-weak-pointer . 15)) (52 (make-closure . 15)) (53 (pair? . 15)) (54 (provisional-port-limit . 15)) (55 (extended-number-ref . 15)) (56 (transport-link-cell-tconc . 15)) (57 (provisional-set-port-index! . 15)) (58 (sqrt . 15)) (59 (car . 15)) (60 (vector . 15)) (61 (channel-parameter . 15)) (62 (make-unmovable-byte-vector . 15)) (63 (* . 15)) (64 (+ . 15)) (65 (call-with-values . 15)) (66 (port-pending-cr? . 15)) (67 (- . 15)) (68 (provisional-port-status . 15)) (69 (/ . 15)) (70 (checked-record-set! . 15)) (71 (set-transport-link-cell-next! . 15)) (72 (set-session-data! . 15)) (73 (byte-vector? . 15)) (74 (provisional-set-port-text-codec-spec! . 15)) (75 (string-ref . 15)) (76 (provisional-set-port-lock! . 15)) (77 (provisional-closure-template . 15)) (78 (< . 15)) (79 (cell-set! . 15)) (80 (= . 15)) (81 (> . 15)) (82 (continuation-set! . 15)) (83 (set-cdr! . 15)) (84 (provisional-set-transport-link-cell-tconc! . 15)) (85 (channel-status . 15)) (86 (provisional-transport-link-cell-tconc . 15)) (87 (set-port-pending-cr?! . 15)) (88 (provisional-set-port-limit! . 15)) (89 (find-all-records . 15)) (90 (atan . 15)) (91 (copy-string-chars! . 15)) (92 (floor . 15)) (93 (template-length . 15)) (94 (make-shared-binding . 15)) (95 (channel-os-index . 15)) (96 (undefine-shared-binding . 15)) (97 (double? . 15)) (98 (byte-vector-ref . 15)) (99 (string-length . 15)) (100 (make-immutable! . 15)) (101 (provisional-vector-set! . 15)) (102 (provisional-set-location-id! . 15)) (103 (set-port-data! . 15)) (104 (sin . 15)) (105 (port-buffer . 15)) (106 (extended-number-length . 15)) (107 (set-location-defined?! . 15)) (108 (provisional-port-data . 15)) (109 (make-extended-number . 15)) (110 (provisional-cdr . 15)) (111 (lookup-shared-binding . 15)) (112 (channel-maybe-write . 15)) (113 (resume-interrupted-opcode-to-byte-code . 15)) (114 (shared-binding-set! . 15)) (115 (port-text-codec-spec . 15)) (116 (unassigned-check . 15)) (117 (port? . 15)) (118 (set-current-proposal! . 15)) (119 (provisional-port-index . 15)) (120 (string=? . 15)) (121 (contents . 15)) (122 (new-external-event-uid . 15)) (123 (utf->char . 15)) (124 (transport-link-cell? . 15)) (125 (call-external-value-2 . 15)) (126 (provisional-location-id . 15)) (127 (resume-native-poll . 15)) (128 (channel? . 15)) (129 (string? . 15)) (130 (provisional-port-crlf? . 15)) (131 (immutable? . 15)) (132 (utf->char! . 15)) (133 (channel-close-silently? . 15)) (134 (continuation? . 15)) (135 (bitwise-not . 15)) (136 (provisional-set-port-data! . 15)) (137 (transport-link-cell-next . 15)) (138 (port-lock . 15)) (139 (cons . 15)) (140 (atan1 . 15)) (141 (atan2 . 15)) (142 (provisional-checked-record-ref . 15)) (143 (set-car! . 15)) (144 (template? . 15)) (145 (make-polar . 15)) (146 (make-port . 15)) (147 (real? . 15)) (148 (cos . 15)) (149 (close-channel . 15)) (150 (shared-binding? . 15)) (151 (cdr . 15)) (152 (port-limit . 15)) (153 (closure? . 15)) (154 (push-false . 15)) (155 (byte-vector-logging-ref . 15)) (156 (record-ref . 15)) (157 (weak-pointer? . 15)) (158 (provisional-set-closure-template! . 15)) (159 (make-rectangular . 15)) (160 (call-external-value . 15)) (161 (binary-reduce1 . 15)) (162 (binary-reduce2 . 15)) (163 (record . 15)) (164 (numerator . 15)) (165 (provisional-cell-ref . 15)) (166 (charstring . 15)) (183 (template-set! . 15)) (184 (scalar-value? . 15)) (185 (provisional-set-port-buffer! . 15)) (186 (os-error-message . 15)) (187 (assq . 15)) (188 (current-thread . 15)) (189 (channel-id . 15)) (190 (set-port-limit! . 15)) (191 (provisional-byte-vector-set! . 15)) (192 (provisional-set-port-crlf?! . 15)) (193 (port-data . 15)) (194 (schedule-interrupt . 15)) (195 (char=? . 15)) (196 (return-from-exception . 15)) (197 (provisional-vector-ref . 15)) (198 (port-index . 15)) (199 (shared-binding-ref . 15)) (200 (add-finalizer! . 15)) (201 (values . 15)) (202 (copy-bytes! . 15)) (203 (return-from-native-exception . 15)) (204 (open-channel . 15)) (205 (return-from-callback . 15)) (206 (provisional-shared-binding-set! . 15)) (207 (port-crlf? . 15)) (208 (maybe-commit . 15)) (209 (provisional-set-cdr! . 15)) (210 (transport-link-cell-key . 15)) (211 (memory-status . 15)) (212 (set-transport-link-cell-value! . 15)) (213 (time . 15)) (214 (make-double . 15)) (215 (provisional-port-buffer . 15)) (216 (bitwise-and . 15)) (217 (asin . 15)) (218 (wait . 15)) (219 (port-pending-eof? . 15)) (220 (closure-template . 15)) (221 (provisional-port-pending-cr? . 15)) (222 (extended-number? . 15)) (223 (magnitude . 15)) (224 (set-enabled-interrupts! . 15)) (225 (>= . 15)) (226 (make-vector . 15)) (227 (record? . 15)) (228 (find-all . 15)) (229 (make-location . 15)) (230 (eof-object? . 15)) (231 (string-set! . 15)) (232 (string-hash . 15)) (233 (set-location-id! . 15)) (234 (unregister-external-event-uid! . 15)) (235 (number? . 15)) (236 (provisional-contents . 15)) (237 (exp . 15)) (238 (set-contents! . 15)) (239 (scalar-value->char . 15)) (240 (extended-number-set! . 15)) (241 (set-closure-template! . 15)) (242 (false . 15)) (243 (char->utf . 15)) (244 (vector-set! . 15)) (245 (make-cell . 15)) (246 (record-length . 15)) (247 (provisional-set-transport-link-cell-value! . 15)) (248 (current-proposal . 15)) (249 (push . 15)) (250 (symbol? . 15)) (251 (apply . 15)) (252 (port-status . 15)) (253 (real-part . 15)) (254 (provisional-port-pending-eof? . 15)) (255 (symbol->string . 15)) (256 (read-char . 15)) (257 (set-exception-handlers! . 15)) (258 (set-port-pending-eof?! . 15)) (259 (acos . 15)) (260 (exact? . 15)) (261 (record-set! . 15)) (262 (provisional-set-car! . 15)) (263 (tan . 15)) (264 (channel-ready? . 15)) (265 (shared-binding-name . 15)) (266 (attempt-copy-bytes! . 15)) (267 (vector? . 15)) (268 (cell? . 15)) (269 (bit-count . 15)) (270 (log . 15)) (271 (intern . 15)) (272 (byte-vector-logging-set! . 15)) (273 (make-continuation . 15)) (274 (collect . 15)) (275 (transport-link-cell-value . 15)) (276 (signal-condition . 15)) (277 (vector-ref . 15)) (278 (arithmetic-shift . 15)) (279 (resume-interrupted-call-to-native-code . 15)) (280 (make-transport-link-cell . 15)) (281 (template-ref . 15)) (282 (provisional-set-transport-link-cell-next! . 15)) (283 (provisional-shared-binding-ref . 15)) (284 (primitive-catch . 15)) (285 (char? . 15)) (286 (angle . 15)) (287 (make-byte-vector . 15)) (288 (write-char . 15)) (289 (set-port-crlf?! . 15)) (290 (provisional-byte-vector-ref . 15)) (291 (provisional-cell-set! . 15)) (292 (remainder . 15)) (293 (make-string . 15)) (294 (imag-part . 15)) (295 (location-id . 15)) (296 (provisional-transport-link-cell-value . 15)) (297 (provisional-set-port-pending-eof?! . 15)) (298 (read-byte . 15)) (299 (provisional-set-port-pending-cr?! . 15)) (300 (peek-char . 15)) (301 (denominator . 15)) (302 (location? . 15)) (303 (find-undefined-imported-bindings . 15)) (304 (provisional-set-contents! . 15)) (305 (pop . 15)) (306 (session-data . 15)) (307 (set-port-status! . 15)) (308 (bitwise-ior . 15)) (309 (char->utf! . 15)) (310 (set-current-thread! . 15)) (311 (location-defined? . 15)) (312 (eq? . 15)) (313 (channel-maybe-read . 15)) (314 (provisional-car . 15)) (315 (set-port-text-codec-spec! . 15)) (316 (make-record . 15)) (317 (port-handler . 15)) (318 (set-port-buffer! . 15)) (319 (set-interrupt-handlers! . 15)) (320 (message . 15)) (321 (vm-extension . 15)) (322 (eof-object . 15)) (323 (weak-pointer-ref . 15)) (324 (provisional-set-closure-env! . 15)) (325 (byte-vector-set! . 15)) (326 (write-byte . 15)) (327 (cell-ref . 15)) (328 (char->ascii . 15)) (329 (ascii->char . 15)) (330 (char->integer . 15)) (331 (integer->char . 15)) (332 (ascii-limit . 15)) (333 (ascii-whitespaces . 15)) (334 (procedure? . 15)) (335 (invoke-closure . 15)) (336 (primitive-cwcc . 15)) (337 (make-undefined-location . 15)) (338 (location-assigned? . 15)) (339 (cell-unassigned? . 15)) (340 (vector-unassigned? . 15)) (341 (string-copy . 15)) (342 (string->symbol . 15)) (343 (input-port? . 15)) (344 (output-port? . 15)) (345 (record-type . 15)) (346 (make-code-vector . 15)) (347 (code-vector? . 15)) (348 (code-vector-length . 15)) (349 (code-vector-ref . 15)) (350 (code-vector-set! . 15)) (351 (lookup-imported-binding . 15)) (352 (lookup-exported-binding . 15)) (353 (define-imported-binding . 15)) (354 (define-exported-binding . 15)) (355 (undefine-imported-binding . 15)) (356 (undefine-exported-binding . 15)) (357 (byte-vector=? . 15)) (358 (byte-vector . 15)) (359 (secret-length . 15)) (360 (debug-message . 15)) (361 (write-image . 15)) (362 (vector-prefix->list . 15)) (363 (empty-log . 15)) (364 (make-proposal . 15)) (365 (error-proc . 15)) (366 (assertion-violation-proc . 15)) (367 (implementation-restriction-violation-proc . 15)) (368 (warning-proc . 15)) (369 (syntax-violation-proc . 15)) (370 (note-proc . 15)) (371 (error . 15)) (372 (assertion-violation . 15)) (373 (implementation-restriction-violation . 15)) (374 (warning . 15)) (375 (note . 15)) (376 (syntax-violation . 15)) (377 (initialize-low-exception-procedures! . 15)) (378 (make-explicit-renaming-transformer/4 . 15)) (379 (explicit-renaming-transformer/4? . 15)) (380 (explicit-renaming-transformer/4-proc . 15)) (381 (case . 16)) (382 (quasiquote . 16)) (383 (syntax-rules . 16)) (384 (char-whitespace? . 16)) (385 (char-whitespace?-proc . 16)) (386 (char-lower-case? . 16)) (387 (char-lower-case?-proc . 16)) (388 (char-upper-case? . 16)) (389 (char-upper-case?-proc . 16)) (390 (char-numeric? . 16)) (391 (char-numeric?-proc . 16)) (392 (char-alphabetic? . 16)) (393 (char-alphabetic?-proc . 16)) (394 (char-case-delta . 16)) (395 (make-character-map . 16)) (396 (upcase-map . 16)) (397 (char-upcase . 16)) (398 (char-upcase-proc . 16)) (399 (downcase-map . 16)) (400 (char-downcase . 16)) (401 (char-downcase-proc . 16)) (402 (char-foldcase . 16)) (403 (char-foldcase-proc . 16)) (404 (char-ci-compare . 16)) (405 (char-ci=? . 16)) (406 (char-ci? . 16)) (409 (char-ci>=? . 16)) (410 (set-char-map-procedures! . 16)) (411 (not . 16)) (412 (boolean? . 16)) (413 (eqv? . 16)) (414 (equal? . 16)) (415 (max . 16)) (416 (min . 16)) (417 (max-or-min . 16)) (418 (abs . 16)) (419 (zero? . 16)) (420 (positive? . 16)) (421 (negative? . 16)) (422 (even? . 16)) (423 (odd? . 16)) (424 (caar . 16)) (425 (cadr . 16)) (426 (cdar . 16)) (427 (cddr . 16)) (428 (caaar . 16)) (429 (caadr . 16)) (430 (cadar . 16)) (431 (caddr . 16)) (432 (cdaar . 16)) (433 (cdadr . 16)) (434 (cddar . 16)) (435 (cdddr . 16)) (436 (caaaar . 16)) (437 (caaadr . 16)) (438 (caadar . 16)) (439 (caaddr . 16)) (440 (cadaar . 16)) (441 (cadadr . 16)) (442 (caddar . 16)) (443 (cadddr . 16)) (444 (cdaaar . 16)) (445 (cdaadr . 16)) (446 (cdadar . 16)) (447 (cdaddr . 16)) (448 (cddaar . 16)) (449 (cddadr . 16)) (450 (cdddar . 16)) (451 (cddddr . 16)) (452 (null? . 16)) (453 (list . 16)) (454 (length . 16)) (455 (real-length . 16)) (456 (append . 16)) (457 (reverse . 16)) (458 (append-reverse . 16)) (459 (list-tail . 16)) (460 (list-ref . 16)) (461 (mem . 16)) (462 (memq . 16)) (463 (memv . 16)) (464 (member . 16)) (465 (ass . 16)) (466 (assv . 16)) (467 (assoc . 16)) (468 (list? . 16)) (469 (char>? . 16)) (470 (char>=? . 16)) (471 (char<=? . 16)) (472 (string . 16)) (473 (substring . 16)) (474 (string-append . 16)) (475 (string->list . 16)) (476 (list->string . 16)) (477 (string-fill! . 16)) (478 (make-string=? . 16)) (479 (string-ci=?-proc . 16)) (480 (string-ci=? . 16)) (481 (make-string? . 16)) (486 (string<=? . 16)) (487 (string>=? . 16)) (488 (string-ci>? . 16)) (489 (string-ci<=? . 16)) (490 (string-ci>=? . 16)) (491 (set-string-ci-procedures! . 16)) (492 (vector->list . 16)) (493 (list->vector . 16)) (494 (vector-fill! . 16)) (495 (map . 16)) (496 (map1 . 16)) (497 (map2+ . 16)) (498 (for-each . 16)) (499 (for-each1 . 16)) (500 (for-each2+ . 16)) (501 (delay . 16)) (502 (make-promise . 16)) (503 (force . 16)) (504 (reduce . 16)) (505 (filter . 16)) (506 (pos . 16)) (507 (posq . 16)) (508 (posv . 16)) (509 (posqual . 16)) (510 (any . 16)) (511 (every . 16)) (512 (sublist . 16)) (513 (last . 16)) (514 (insert . 16)) (515 (symbol-append . 16)) (516 (x->boolean . 16)) (517 (fold . 16)) (518 (fold->2 . 16)) (519 (fold->3 . 16)) (520 (receive . 16)) (521 (inexact? . 16)) (522 (modulo . 16)) (523 (ceiling . 16)) (524 (truncate . 16)) (525 (round . 16)) (526 (gcd . 16)) (527 (euclid . 16)) (528 (lcm . 16)) (529 (expt . 16)) (530 (raise-integer-to-integer-power . 16)) (531 (raise-to-integer-power . 16)) (532 (rationalize . 16)) (533 (simplest-rational . 16)) (534 (make-pattern-variable . 16)) (535 (pattern-variable? . 16)) (536 (pattern-variable-name . 16)) (537 (pattern-variable-rank . 16)) (538 (make-ellipsis-form . 16)) (539 (ellipsis-form? . 16)) (540 (ellipsis-form-body . 16)) (541 (ellipsis-form-vars . 16)) (542 (make-vector-marker . 16)) (543 (vector-marker? . 16)) (544 (vector-marker-contents . 16)) (545 (apply-rules . 16)) (546 (match? . 16)) (547 (make-pattern-env . 16)) (548 (rewrite . 16)) (549 (rewrite-ellipsis . 16)) (550 (*record-type-uid* . 17)) (551 (*record-type* . 17)) (552 (*first-extension-slot* . 17)) (553 (make-record-type . 17)) (554 (record-type? . 17)) (555 (record-type-resumer . 17)) (556 (set-record-type-resumer! . 17)) (557 (record-type-uid . 17)) (558 (record-type-name . 17)) (559 (record-type-field-names . 17)) (560 (record-type-number-of-fields . 17)) (561 (record-type-discloser . 17)) (562 (set-record-type-discloser! . 17)) (563 (record-type-parent . 17)) (564 (record-type-extension-count . 17)) (565 (record-type-size . 17)) (566 (record-type-data . 17)) (567 (set-record-type-data! . 17)) (568 (record-type-base . 17)) (569 (record-type-fields . 17)) (570 (record-field-index . 17)) (571 (record-type-parent-size . 17)) (572 (record-constructor . 17)) (573 (record-standard-constructor . 17)) (574 (record-accessor . 17)) (575 (record-modifier . 17)) (576 (record-predicate . 17)) (577 (define-record-discloser . 17)) (578 (make-default-record-discloser . 17)) (579 (disclose-record . 17)) (580 (define-record-resumer . 17)) (581 (default-record-resumer . 17)) (582 (initialize-records! . 17)) (583 (resume-record . 17)) (584 (:record-type . 17)) (585 (define-record-type . 19)) (586 (define-synchronized-record-type . 19)) (587 (define-constructor . 19)) (588 (define-accessors . 19)) (589 (define-accessor . 19)) (590 (ref-proc . 19)) (591 (set-proc . 19)) (592 (:simple-type . 20)) (593 (really-make-simple-type . 20)) (594 (simple-type-id . 20)) (595 (simple-type-priority . 20)) (596 (simple-type-predicate . 20)) (597 (simple-type-superiors . 20)) (598 (simple-type? . 20)) (599 (make-simple-type . 20)) (600 (compute-priority . 20)) (601 (*increment* . 20)) (602 (%type-priority . 20)) (603 (%type-predicate . 20)) (604 (%same-type? . 20)) (605 (define-simple-type . 20)) (606 ( . 20)) (607 ( . 20)) (608 (value? . 20)) (609 ( . 20)) (610 ( . 20)) (611 ( . 20)) (612 ( . 20)) (613 ( . 20)) (614 ( . 20)) (615 ( . 20)) (616 ( . 20)) (617 ( . 20)) (618 ( . 20)) (619 ( . 20)) (620 ( . 20)) (621 ( . 20)) (622 ( . 20)) (623 ( . 20)) (624 ( . 20)) (625 ( . 20)) (626 ( . 20)) (627 ( . 20)) (628 ( . 20)) (629 (record-type-priority . 20)) (630 (:method-info . 20)) (631 (really-make-method-info . 20)) (632 (method-info-proc . 20)) (633 (method-info-n-ary? . 20)) (634 (method-info-types . 20)) (635 (method-info? . 20)) (636 (make-method-info . 20)) (637 (empty-method-list . 20)) (638 (insert-method . 20)) (639 (same-applicability? . 20)) (640 (every2 . 20)) (641 (more-specific? . 20)) (642 (more-specific-type? . 20)) (643 (:method-table . 20)) (644 (really-make-method-table . 20)) (645 (method-table-id . 20)) (646 (method-table-set-perform! . 20)) (647 (method-table-get-perform . 20)) (648 (make-generic . 20)) (649 (method-table-prototype . 20)) (650 (method-table-methods . 20)) (651 (set-method-table-methods! . 20)) (652 (method-table? . 20)) (653 (make-method-table . 20)) (654 (make-cell-for-generic . 20)) (655 (add-to-method-table! . 20)) (656 (set-final-method! . 20)) (657 (apply-generic . 20)) (658 (define-generic . 20)) (659 (methods->perform . 20)) (660 (last-action . 20)) (661 (one-action . 20)) (662 (argument-sequence-predicate . 20)) (663 (check-for-next . 20)) (664 (check-next . 20)) (665 (method-info . 20)) (666 (method-internal . 20)) (667 (with-next-method . 20)) (668 (define-method . 20)) (669 (&add-method! . 20)) (670 (add-method! . 20)) (671 (&type-predicate . 20)) (672 (type-predicate . 20)) (673 (&type-priority . 20)) (674 (type-priority . 20)) (675 (&type-superiors . 20)) (676 (type-superiors . 20)) (677 (&same-type? . 20)) (678 (same-type? . 20)) (679 (:singleton . 20)) (680 (singleton . 20)) (681 (singleton-value . 20)) (682 (compare-to . 20)) (683 (&disclose . 20)) (684 (disclose . 20)) (685 (proc->discloser . 20)) (686 (&number->string . 21)) (687 (real-number->string . 21)) (688 (number->string . 21)) (689 (integer->string . 21)) (690 (string->number . 21)) (691 (&really-string->number . 21)) (692 (really-string->number . 21)) (693 ( . 21)) (694 (set-exactness . 21)) (695 (string->integer . 21)) (696 (:thread . 22)) (697 (make-thread . 22)) (698 (thread-proposal . 22)) (699 (thread-dynamic-point . 22)) (700 (thread-dynamic-env . 22)) (701 (get-dynamic-env . 22)) (702 (set-dynamic-env! . 22)) (703 (get-dynamic-point . 22)) (704 (set-dynamic-point! . 22)) (705 (initialize-dynamic-state! . 22)) (706 (with-dynamic-env . 22)) (707 (empty-dynamic-env . 22)) (708 (:fluid . 22)) (709 (make-fluid . 22)) (710 (fluid-top-level-value . 22)) (711 (set-fluid-top-level-value! . 22)) (712 (fluid . 22)) (713 (set-fluid! . 22)) (714 (let-fluid . 22)) (715 (let-fluids . 22)) (716 (fluid-cell-ref . 22)) (717 (fluid-cell-set! . 22)) (718 (&condition . 31)) (719 (make-simple-condition . 31)) (720 (simple-condition? . 31)) (721 (&compound-condition . 31)) (722 (make-compound-condition . 31)) (723 (explode-condition . 31)) (724 (compound-condition? . 31)) (725 (simple-conditions . 31)) (726 (condition? . 31)) (727 (condition . 31)) (728 (condition-predicate . 31)) (729 (condition-accessor . 31)) (730 (define-condition-type . 31)) (731 (define-condition-type-helper . 31)) (732 (first . 31)) (733 (any? . 31)) (734 (&message . 31)) (735 (make-message-condition . 31)) (736 (message-condition? . 31)) (737 (temp-condition-accessor##82 . 31)) (738 (condition-message . 31)) (739 (&warning . 31)) (740 (make-warning . 31)) (741 (warning? . 31)) (742 (&serious . 31)) (743 (make-serious-condition . 31)) (744 (serious-condition? . 31)) (745 (&error . 31)) (746 (make-error . 31)) (747 (error? . 31)) (748 (&violation . 31)) (749 (make-violation . 31)) (750 (violation? . 31)) (751 (&non-continuable . 31)) (752 (make-noncontinuable-violation . 31)) (753 (non-continuable-violation? . 31)) (754 (&implementation-restriction . 31)) (755 (make-implementation-restriction-violation . 31)) (756 (implementation-restriction-violation? . 31)) (757 (&lexical . 31)) (758 (make-lexical-violation . 31)) (759 (lexical-violation? . 31)) (760 (&syntax . 31)) (761 (make-syntax-violation . 31)) (762 (syntax-violation? . 31)) (763 (temp-condition-accessor##83 . 31)) (764 (temp-condition-accessor##84 . 31)) (765 (syntax-violation-form . 31)) (766 (syntax-violation-subform . 31)) (767 (&undefined . 31)) (768 (make-undefined-violation . 31)) (769 (undefined-violation? . 31)) (770 (&assertion . 31)) (771 (make-assertion-violation . 31)) (772 (assertion-violation? . 31)) (773 (&irritants . 31)) (774 (make-irritants-condition . 31)) (775 (irritants-condition? . 31)) (776 (temp-condition-accessor##85 . 31)) (777 (condition-irritants . 31)) (778 (&who . 31)) (779 (make-who-condition . 31)) (780 (who-condition? . 31)) (781 (temp-condition-accessor##86 . 31)) (782 (condition-who . 31)) (783 (&vm-exception . 31)) (784 (make-vm-exception . 31)) (785 (vm-exception? . 31)) (786 (temp-condition-accessor##87 . 31)) (787 (temp-condition-accessor##88 . 31)) (788 (vm-exception-opcode . 31)) (789 (vm-exception-reason . 31)) (790 (&os-error . 31)) (791 (make-os-error . 31)) (792 (os-error? . 31)) (793 (temp-condition-accessor##89 . 31)) (794 (os-error-code . 31)) (795 (&i/o-error . 31)) (796 (make-i/o-error . 31)) (797 (i/o-error? . 31)) (798 (&i/o-port-error . 31)) (799 (make-i/o-port-error . 31)) (800 (i/o-port-error? . 31)) (801 (temp-condition-accessor##90 . 31)) (802 (i/o-error-port . 31)) (803 (&decoding-error . 31)) (804 (make-decoding-error . 31)) (805 (decoding-error? . 31)) (806 (temp-condition-accessor##91 . 31)) (807 (temp-condition-accessor##92 . 31)) (808 (temp-condition-accessor##93 . 31)) (809 (decoding-error-encoding-name . 31)) (810 (decoding-error-bytes . 31)) (811 (decoding-error-start . 31)) (812 (¬e . 31)) (813 (make-note . 31)) (814 (note? . 31)) (815 (&interrupt . 31)) (816 (make-interrupt-condition . 31)) (817 (interrupt-condition? . 31)) (818 (temp-condition-accessor##94 . 31)) (819 (interrupt-source . 31)) (820 (decode-condition . 31)) (821 (delete-first . 31)) (822 (*covered-condition-txpes* . 31)) (823 (define-enumeration . 39)) (824 (components . 39)) (825 (enum . 39)) (826 (enumerand->name . 39)) (827 (name->enumerand . 39)) (828 (lookup-enumerand . 39)) (829 (enum-case . 50)) (830 (and . 0)) (831 (cond . 0)) (832 (do . 0)) (833 (let . 0)) (834 (let* . 0)) (835 (or . 0)) (836 (quote . 0)) (837 (loophole . 0)) (838 (letrec-syntax . 0)) (839 (define-syntax . 0)) (840 (lambda . 0)) (841 (%file-name% . 0)) (842 (call . 0)) (843 (let-syntax . 0)) (844 (code-quote . 0)) (845 (flat-lambda . 0)) (846 (define . 0)) (847 (set! . 0)) (848 (begin . 0)) (849 (pure-letrec . 0)) (850 (unassigned . 0)) (851 (lap . 0)) (852 (if . 0)) (853 (letrec . 0)) (854 (structure-ref . 0)) (855 (letrec* . 0)) (856 (unspecific . 0)) (857 (primitive-procedure . 0)) (858 (all-operators . 0)) (859 (record-type<=? . 0)) (860 (continuation-ref . 0)) (861 (rational? . 0)) (862 (provisional-port-text-codec-spec . 0)) (863 (provisional-port-lock . 0)) (864 (with-continuation . 0)) (865 (set-port-lock! . 0)) (866 (quotient . 0)) (867 (char->scalar-value . 0)) (868 (trap . 0)) (869 (integer? . 0)) (870 (continuation-length . 0)) (871 (open-channels-list . 0)) (872 (checked-record-ref . 0)) (873 (set-transport-link-cell-tconc! . 0)) (874 (closure-env . 0)) (875 (peek-byte . 0)) (876 (bitwise-xor . 0)) (877 (make-template . 0)) (878 (inexact->exact . 0)) (879 (exact->inexact . 0)) (880 (complex? . 0)) (881 (make-weak-pointer . 0)) (882 (make-closure . 0)) (883 (pair? . 0)) (884 (provisional-port-limit . 0)) (885 (extended-number-ref . 0)) (886 (transport-link-cell-tconc . 0)) (887 (provisional-set-port-index! . 0)) (888 (sqrt . 0)) (889 (car . 0)) (890 (vector . 0)) (891 (channel-parameter . 0)) (892 (make-unmovable-byte-vector . 0)) (893 (* . 0)) (894 (+ . 0)) (895 (call-with-values . 0)) (896 (port-pending-cr? . 0)) (897 (- . 0)) (898 (provisional-port-status . 0)) (899 (/ . 0)) (900 (checked-record-set! . 0)) (901 (set-transport-link-cell-next! . 0)) (902 (set-session-data! . 0)) (903 (byte-vector? . 0)) (904 (provisional-set-port-text-codec-spec! . 0)) (905 (string-ref . 0)) (906 (provisional-set-port-lock! . 0)) (907 (provisional-closure-template . 0)) (908 (< . 0)) (909 (cell-set! . 0)) (910 (= . 0)) (911 (> . 0)) (912 (continuation-set! . 0)) (913 (set-cdr! . 0)) (914 (provisional-set-transport-link-cell-tconc! . 0)) (915 (channel-status . 0)) (916 (provisional-transport-link-cell-tconc . 0)) (917 (set-port-pending-cr?! . 0)) (918 (provisional-set-port-limit! . 0)) (919 (find-all-records . 0)) (920 (atan . 0)) (921 (copy-string-chars! . 0)) (922 (floor . 0)) (923 (template-length . 0)) (924 (make-shared-binding . 0)) (925 (channel-os-index . 0)) (926 (undefine-shared-binding . 0)) (927 (double? . 0)) (928 (byte-vector-ref . 0)) (929 (string-length . 0)) (930 (make-immutable! . 0)) (931 (provisional-vector-set! . 0)) (932 (provisional-set-location-id! . 0)) (933 (set-port-data! . 0)) (934 (sin . 0)) (935 (port-buffer . 0)) (936 (extended-number-length . 0)) (937 (set-location-defined?! . 0)) (938 (provisional-port-data . 0)) (939 (make-extended-number . 0)) (940 (provisional-cdr . 0)) (941 (lookup-shared-binding . 0)) (942 (channel-maybe-write . 0)) (943 (resume-interrupted-opcode-to-byte-code . 0)) (944 (shared-binding-set! . 0)) (945 (port-text-codec-spec . 0)) (946 (unassigned-check . 0)) (947 (port? . 0)) (948 (set-current-proposal! . 0)) (949 (provisional-port-index . 0)) (950 (string=? . 0)) (951 (contents . 0)) (952 (new-external-event-uid . 0)) (953 (utf->char . 0)) (954 (transport-link-cell? . 0)) (955 (call-external-value-2 . 0)) (956 (provisional-location-id . 0)) (957 (resume-native-poll . 0)) (958 (channel? . 0)) (959 (string? . 0)) (960 (provisional-port-crlf? . 0)) (961 (immutable? . 0)) (962 (utf->char! . 0)) (963 (channel-close-silently? . 0)) (964 (continuation? . 0)) (965 (bitwise-not . 0)) (966 (provisional-set-port-data! . 0)) (967 (transport-link-cell-next . 0)) (968 (port-lock . 0)) (969 (cons . 0)) (970 (atan1 . 0)) (971 (atan2 . 0)) (972 (provisional-checked-record-ref . 0)) (973 (set-car! . 0)) (974 (template? . 0)) (975 (make-polar . 0)) (976 (make-port . 0)) (977 (real? . 0)) (978 (cos . 0)) (979 (close-channel . 0)) (980 (shared-binding? . 0)) (981 (cdr . 0)) (982 (port-limit . 0)) (983 (closure? . 0)) (984 (push-false . 0)) (985 (byte-vector-logging-ref . 0)) (986 (record-ref . 0)) (987 (weak-pointer? . 0)) (988 (provisional-set-closure-template! . 0)) (989 (make-rectangular . 0)) (990 (call-external-value . 0)) (991 (binary-reduce1 . 0)) (992 (binary-reduce2 . 0)) (993 (record . 0)) (994 (numerator . 0)) (995 (provisional-cell-ref . 0)) (996 (charstring . 0)) (1013 (template-set! . 0)) (1014 (scalar-value? . 0)) (1015 (provisional-set-port-buffer! . 0)) (1016 (os-error-message . 0)) (1017 (assq . 0)) (1018 (current-thread . 0)) (1019 (channel-id . 0)) (1020 (set-port-limit! . 0)) (1021 (provisional-byte-vector-set! . 0)) (1022 (provisional-set-port-crlf?! . 0)) (1023 (port-data . 0)) (1024 (schedule-interrupt . 0)) (1025 (char=? . 0)) (1026 (return-from-exception . 0)) (1027 (provisional-vector-ref . 0)) (1028 (port-index . 0)) (1029 (shared-binding-ref . 0)) (1030 (add-finalizer! . 0)) (1031 (values . 0)) (1032 (copy-bytes! . 0)) (1033 (return-from-native-exception . 0)) (1034 (open-channel . 0)) (1035 (return-from-callback . 0)) (1036 (provisional-shared-binding-set! . 0)) (1037 (port-crlf? . 0)) (1038 (maybe-commit . 0)) (1039 (provisional-set-cdr! . 0)) (1040 (transport-link-cell-key . 0)) (1041 (memory-status . 0)) (1042 (set-transport-link-cell-value! . 0)) (1043 (time . 0)) (1044 (make-double . 0)) (1045 (provisional-port-buffer . 0)) (1046 (bitwise-and . 0)) (1047 (asin . 0)) (1048 (wait . 0)) (1049 (port-pending-eof? . 0)) (1050 (closure-template . 0)) (1051 (provisional-port-pending-cr? . 0)) (1052 (extended-number? . 0)) (1053 (magnitude . 0)) (1054 (set-enabled-interrupts! . 0)) (1055 (>= . 0)) (1056 (make-vector . 0)) (1057 (record? . 0)) (1058 (find-all . 0)) (1059 (make-location . 0)) (1060 (eof-object? . 0)) (1061 (string-set! . 0)) (1062 (string-hash . 0)) (1063 (set-location-id! . 0)) (1064 (unregister-external-event-uid! . 0)) (1065 (number? . 0)) (1066 (provisional-contents . 0)) (1067 (exp . 0)) (1068 (set-contents! . 0)) (1069 (scalar-value->char . 0)) (1070 (extended-number-set! . 0)) (1071 (set-closure-template! . 0)) (1072 (false . 0)) (1073 (char->utf . 0)) (1074 (vector-set! . 0)) (1075 (make-cell . 0)) (1076 (record-length . 0)) (1077 (provisional-set-transport-link-cell-value! . 0)) (1078 (current-proposal . 0)) (1079 (push . 0)) (1080 (symbol? . 0)) (1081 (apply . 0)) (1082 (port-status . 0)) (1083 (real-part . 0)) (1084 (provisional-port-pending-eof? . 0)) (1085 (symbol->string . 0)) (1086 (read-char . 0)) (1087 (set-exception-handlers! . 0)) (1088 (set-port-pending-eof?! . 0)) (1089 (acos . 0)) (1090 (exact? . 0)) (1091 (record-set! . 0)) (1092 (provisional-set-car! . 0)) (1093 (tan . 0)) (1094 (channel-ready? . 0)) (1095 (shared-binding-name . 0)) (1096 (attempt-copy-bytes! . 0)) (1097 (vector? . 0)) (1098 (cell? . 0)) (1099 (bit-count . 0)) (1100 (log . 0)) (1101 (intern . 0)) (1102 (byte-vector-logging-set! . 0)) (1103 (make-continuation . 0)) (1104 (collect . 0)) (1105 (transport-link-cell-value . 0)) (1106 (signal-condition . 0)) (1107 (vector-ref . 0)) (1108 (arithmetic-shift . 0)) (1109 (resume-interrupted-call-to-native-code . 0)) (1110 (make-transport-link-cell . 0)) (1111 (template-ref . 0)) (1112 (provisional-set-transport-link-cell-next! . 0)) (1113 (provisional-shared-binding-ref . 0)) (1114 (primitive-catch . 0)) (1115 (char? . 0)) (1116 (angle . 0)) (1117 (make-byte-vector . 0)) (1118 (write-char . 0)) (1119 (set-port-crlf?! . 0)) (1120 (provisional-byte-vector-ref . 0)) (1121 (provisional-cell-set! . 0)) (1122 (remainder . 0)) (1123 (make-string . 0)) (1124 (imag-part . 0)) (1125 (location-id . 0)) (1126 (provisional-transport-link-cell-value . 0)) (1127 (provisional-set-port-pending-eof?! . 0)) (1128 (read-byte . 0)) (1129 (provisional-set-port-pending-cr?! . 0)) (1130 (peek-char . 0)) (1131 (denominator . 0)) (1132 (location? . 0)) (1133 (find-undefined-imported-bindings . 0)) (1134 (provisional-set-contents! . 0)) (1135 (pop . 0)) (1136 (session-data . 0)) (1137 (set-port-status! . 0)) (1138 (bitwise-ior . 0)) (1139 (char->utf! . 0)) (1140 (set-current-thread! . 0)) (1141 (location-defined? . 0)) (1142 (eq? . 0)) (1143 (channel-maybe-read . 0)) (1144 (provisional-car . 0)) (1145 (set-port-text-codec-spec! . 0)) (1146 (make-record . 0)) (1147 (port-handler . 0)) (1148 (set-port-buffer! . 0)) (1149 (set-interrupt-handlers! . 0)) (1150 (message . 0)) (1151 (vm-extension . 0)) (1152 (eof-object . 0)) (1153 (weak-pointer-ref . 0)) (1154 (provisional-set-closure-env! . 0)) (1155 (byte-vector-set! . 0)) (1156 (write-byte . 0)) (1157 (cell-ref . 0)) (1158 (bytes-per-cell . 0)) (1159 (log-bytes-per-cell . 0)) (1160 (bits-per-byte . 0)) (1161 (bits-per-cell . 0)) (1162 (addressing-units-per-cell . 0)) (1163 (s48-useful-bits-per-word . 0)) (1164 (c-useful-bits-per-word . 0)) (1165 (unused-field-width . 0)) (1166 (tag-field-width . 0)) (1167 (data-field-width . 0)) (1168 (immediate-type-field-width . 0)) (1169 (pre-scheme-integer-size . 0)) (1170 (architecture-version . 40)) (1171 (bits-used-per-byte . 40)) (1172 (byte-limit . 40)) (1173 (two-byte-limit . 40)) (1174 (define-instruction-set . 40)) (1175 (op . 40)) (1176 (op-enumeration . 40)) (1177 (op-count . 40)) (1178 (opcode-arg-specs . 40)) (1179 (interrupt . 40)) (1180 (interrupt-enumeration . 40)) (1181 (interrupt-count . 40)) (1182 (exception . 40)) (1183 (exception-enumeration . 40)) (1184 (exception-count . 40)) (1185 (current-port-marker . 40)) (1186 (current-port-marker-enumeration . 40)) (1187 (current-port-marker-count . 40)) (1188 (maximum-stack-args . 40)) (1189 (*last-protocol* . 40)) (1190 (next-protocol . 40)) (1191 (two-byte-nargs-protocol . 40)) (1192 (two-byte-nargs+list-protocol . 40)) (1193 (ignore-values-protocol . 40)) (1194 (big-stack-protocol . 40)) (1195 (args+nargs-protocol . 40)) (1196 (nary-dispatch-protocol . 40)) (1197 (call-with-values-protocol . 40)) (1198 (bottom-of-stack-protocol . 40)) (1199 (native-protocol-mask . 40)) (1200 (default-stack-space . 40)) (1201 (maximum-external-call-args . 40)) (1202 (continuation-stack-size . 40)) (1203 (available-stack-space . 40)) (1204 (continuation-cells . 40)) (1205 (continuation-pc-index . 40)) (1206 (continuation-code-index . 40)) (1207 (continuation-cont-index . 40)) (1208 (gc-mask-size-offset . 40)) (1209 (gc-mask-offset . 40)) (1210 (exception-continuation-cells . 40)) (1211 (native-exception-continuation-cells . 40)) (1212 (exception-cont-size-index . 40)) (1213 (exception-cont-pc-index . 40)) (1214 (exception-cont-code-index . 40)) (1215 (exception-cont-exception-index . 40)) (1216 (exception-cont-instruction-size-index . 40)) (1217 (native-exception-cont-size-index . 40)) (1218 (native-exception-cont-exception-index . 40)) (1219 (native-exception-cont-bc-pc-index . 40)) (1220 (native-exception-cont-bc-code-index . 40)) (1221 (time-option . 40)) (1222 (time-option-enumeration . 40)) (1223 (time-option-count . 40)) (1224 (memory-status-option . 40)) (1225 (memory-status-option-enumeration . 40)) (1226 (memory-status-option-count . 40)) (1227 (channel-status-option . 40)) (1228 (channel-status-option-enumeration . 40)) (1229 (channel-status-option-count . 40)) (1230 (port-status-options . 40)) (1231 (port-status-options-enumeration . 40)) (1232 (port-status-options-count . 40)) (1233 (channel-parameter-option . 40)) (1234 (channel-parameter-option-enumeration . 40)) (1235 (channel-parameter-option-count . 40)) (1236 (text-encoding-option . 40)) (1237 (text-encoding-option-enumeration . 40)) (1238 (text-encoding-option-count . 40)) (1239 (system-parameter-option . 40)) (1240 (system-parameter-option-enumeration . 40)) (1241 (system-parameter-option-count . 40)) (1242 (stob . 40)) (1243 (stob-enumeration . 40)) (1244 (stob-count . 40)) (1245 (least-b-vector-type . 40)) (1246 (stob-data . 40)) (1247 (define-vm-exception-handler . 42)) (1248 (signal-condition . 42)) (1249 (signal-vm-exception . 42)) (1250 (vm-exception-reason->message . 42)) (1251 (vm-exception-handlers . 42)) (1252 (initialize-vm-exceptions! . 42)) (1253 (extend-opcode! . 42)) (1254 (dynamic-wind . 23)) (1255 (call-with-current-continuation . 23)) (1256 (continuation->procedure . 23)) (1257 (:point . 23)) (1258 (make-point . 23)) (1259 (point-parent . 23)) (1260 (point-dynamic-env . 23)) (1261 (point-out . 23)) (1262 (point-in . 23)) (1263 (point-depth . 23)) (1264 (travel-to-point! . 23)) (1265 (template-overhead . 36)) (1266 (template-code . 36)) (1267 (template-byte-code . 36)) (1268 (template-info . 36)) (1269 (template-package-id . 36)) (1270 (set-template-code! . 36)) (1271 (set-template-byte-code! . 36)) (1272 (set-template-info! . 36)) (1273 (set-template-package-id! . 36)) (1274 ( . 38)) (1275 ( . 38)) (1276 ( . 38)) (1277 ( . 38)) (1278 (